DAVID Malan V redu. To je CS50, in to konec devetih teden. Minilo je že več kot tornado v zadnjih nekaj dneh. In problem določiti sedem, če si koleno globoko v njej, zavedati, tam je precej bit nova, da je tam. Ampak poglejmo, če ne moremo kos Vse skupaj sem na kratko Pred nato zdrsnila v še drugo smer in videnje kam lahko gremo. Torej doslej, smo se pogovarjali o HTML. Smo se pogovarjali o CSS. Smo se pogovarjali o PHP. Začeli ste doživeli SQL. Danes bomo govorili malo O JavaScript. Kako pa vsi ti različni jeziki fit skupaj? Tako smo se pogovarjali prejšnji teden o Pojem ima strežnik. Zato naj samo pripravi ta pravokotnik kot spletni strežnik tukaj. In spletni strežnik služi zagotovo datotek. In nekateri izmed teh datotek lahko HTML datoteke. Torej ena od stvari, ki jih spletni strežnik Lahko izpljunili morda datoteka, ki bomo samo pripravi takole vsebuje nekaj HTML. Tako v smislu navadnega je, kaj ne HTML vam naredil? PUBLIKA: Page videti lepo. DAVID Malan: OK, bo stran videti lepo, čeprav mislim, da sem dokazala da drugače. Torej HTML ne dovolite si začrtate strani strukturno, in to vam omogoča, da nekako estetsko pribitek strani, pribitek statično vsebino, tako da si Lahko pa si jo ogledate s spletnim brskalnikom. Ampak to je ključnega pomena. To je statično vsebino. Ste ga napisali, ga shranite, in potem je ladja. In spletni strežnik, nato služi je do svoje obiskovalce. Vendar smo stilu stvari, ki uporabljajo drugačen jezik v celoti. Začeli smo uporabljati slog atribut o nekaterih oznak. In slog atribut nam določiti stvari, kot so velikost pisave in barve. In ste verjetno začeli odkrivati, ali pa bodo kmalu za končno Projekti potencialno še drugi lastnosti, ki jih lahko uporabite v CSS. In tako v smislu navadnega je, kaj res, potem ne CSS storiti? Tisti, ki so le njihovi primeri. Kaj pa naj si to naredil HTML ne zdi, da iz tega, kar smo videli doslej? PUBLIKA: Določite sloge, ki jih sami. DAVID Malan: Določite sloge sami. Torej opredeliti stvari, kot razrede, kot vas morda so se pojavile, ali edinstveno prepoznavanje vozlišč v dokumentu tako da jih lahko stilu. Ampak, še posebej, bi rekel, da CSS Res vam omogoča, da stvari zadnja milja in vam omogoča, da določite veliko natančneje estetika, ker HTML večinoma omogoča si strukturo vaše strani. In čeprav obstajajo nekatere privzete nastavitve, kot smo videli oznako za tarifno oznako, ki grobem so stvari veliko in krepko. To je precej splošne opredelitve z oznako - velik in krepko. Kaj velikost črk je to? Kakšne barve je to? Kako krepko je to? In CSS vam omogoča bolj fino tune take stvari. Kakor tudi postavitev, kot nekateri o ste videli. In odkrito povedano, CSS, je malce za grdo jeziku. To je zelo močna, da si lahko Dobesedno vse spletne strani, ki ste videl na spletu je danes z njim, vendar to je nekako bolečino v vratu. In nekateri od vas udaril v glavo proti stene že samo za početi kaj neumnega, kot centra menija na Problem nastavite sedem če ste gotten ta točka že. Vendar zavedaš, te stvari priti lažje skozi čas. Začnete opažati vzorce. In spet, bo Google tvoj prijatelj za različne načine, na katere lahko reševanje tovrstnih problemov. In upam si reči z CSS in HTML več na splošno, lahko reši težave v veliko več načinov, ki so vse bi lahko zelo dobro je pravilna, kot si lahko nekaj podobnega C, čeprav Zdaj PHP ali JavaScript. Obstaja le veliko različnih načinov za postavitev stvari. Toda ta začel, da bi dobili grdo, smo rekli. Nekako mešanje HTML in vaš CSS s stilom atribut je malo površen. In tako smo namesto tega je rekel, neke vrste abstraktno rečeno, da morate vsaj začeti faktor iz vašega CSS verjetno. Ni tvoj stil atribute, ampak vsaj uporabite slog oznako notranjosti, kar del spletne strani? PUBLIKA: Head. DAVID Malan: V glavo. Do zdaj smo imeli le naziv up tam, lahko pa dodate tudi slog označiti, in lahko dajo svoj CSS grobo gledano proti vrhu strani. Ampak potem smo vzeli stvari en korak naprej in smo jih vključiti, da izveste več v ločeno datoteko. In tako ti dve datoteki so nekako zdaj povezana. In res je bilo tag, ki je to naredil. In tisto, kar je bil eden od poglavitnih motivacije za faktoring našo CSS vse bolj? PUBLIKA: Ponovna. DAVID Malan: Ponovna. Kajne? Morda ste opazili na-p nastavite sedem že da je veliko strani, Odkupna stran, prodajna stran, Stran portfelj, so verjetno strukturirani nekoliko podobno. Tam finance CS50 logo na vrhu če ste se odločili, da ga spremeni. Tam je nogo na spodnji strani. In CSS vam jo potem faktor ven je v ločeno datoteko, tako da, če hočeš nekaj spremeniti na svetovni ravni čez vašo celotno spletno stran, lahko res samo spremenite na enem mestu. Vendar pa je cena, ki jo plača potencialno s tem da vračunati out CSS iz moje datoteke HTML v ločen datoteka je navajanje s tag, ki smo ga videli v ponedeljek. Kaj bi negativna biti to? Razmišljate nazaj, pred tednom dni, ko smo Govorimo o HTTP in TCP / IP in kako internet deluje. Nekaj ​​sem? PUBLIKA: traja dlje časa. DAVID Malan: traja dlje časa. Zakaj? PUBLIKA: [neslišno]. DAVID Malan: Ja. Torej je verjetno potrebno malo več časa. Ker ena, CSS, je očitno ne v isti datoteki. Torej, zdaj ste, da se ne eno, ampak dve zahtevi. In vsako od teh zahtev, kot smo videli v Krom v tako imenovanem inšpektorja in smo pogledal na kartici omrežja, vsak od teh datotek, zahteva en HTTP Zahteva, ki smo jih videli traja nekaj časa. Zdaj, morda to ni veliko. Mogoče je le 20 milisekund. Morda je 200 milisekund. Ampak pomislite strani, kot so Facebook, ali CNN ali Google, ki so veliko večji od primerov, ki smo jih pogledal tako daleč. Te strani bi lahko na ducate datotek, od katerih je lahko potrebna prenos neke datoteke. Torej stvari, ki lahko potencialno začne počasi navzdol. In še posebej v teh dneh, ko smo vsi imajo mobilne telefone v naših žepih in počasne internetne povezave, da bi počakajte še nekaj milisekund, nekaj več milisekund za dodatne Datoteke lahko dejansko počasi. Latence je beseda, ki opisuje nekako čakajo, da imate, da boste izkušnje, ko čakajo na nekatere informacija. Vendar pa je narobe. Torej to ni vse vrste - dejansko je malo seesaw tukaj. Negativna zdaj, ampak kaj brskalniki lahko storite če so pametni, da bi se izognili ob zahtevati enako styles.css Datoteka spet lahko kaj storil? Jo predpomnilnika. Torej predpomnjenje - C--C-H-E - splošno pomeni tu samo, da shranite vložiti ste zahtevali prvič, in Nato preverite predpomnilnika za to. Preverite, da ste nekako posodo za shranjevanje, in če že imate kopija styles.css, tudi če drug Stran v p-set, ali katere koli spletne strani, zahteva še enkrat, samo da bi Uporabnik isti shranjena kopija. Ne trudi se to zahteva. Slaba stran je, čeprav, kot nekateri od vas so se spotikali v p-set. Če bo sprememba na strežniku in greš nazaj v brskalnik in si osvežite, včasih brskalnik ne si uslugo in ne moti ponovno nalaganje vaš styles.css datoteke ker, no, kakšne so možnosti da ti slogi, da Facebook uporablja se bodo spremenile uro za uro ali iz dneva v dan? To je precej nizka. Zato so lahko v času spreminja, vendar ne na minuto ali na uro. Torej trik, samo v vednost, če delaš spletu razvoj, je pogosto držite premik ključ za primer, in nato kliknite osvežite v vašem brskalniku, in da bo ponavadi povem brskalnik reload Vse, tudi če že imate je v predpomnilniku. Torej še enkrat, upsides in slabosti, ampak vse od njih končno oblikovanje odločitve. Torej, zdaj, nismo samo končati zgodbo tukaj. Če bi zdaj šel nazaj in nazaj in nazaj in nazaj, smo začeli uvajati ne samo HTML, vendar PHP. Torej v smislu navadnega je, kaj ne PHP storimo? PUBLIKA: [neslišno]. DAVID Malan: Kaj je to? PUBLIKA: Uvesti logiko v kodi. DAVID Malan: Ja, uvesti Logika v svojo kodo. Torej je res, programski jezik z zankami, in spremenljivk in funkcije, in pogoje, ter vsi stvari, ki jih že uporabljajo pot nazaj ko od nič. In PHP, smo videli, se lahko uporablja bodisi v ukazni vrstici - to ni treba imeti opravka s spleta, čeprav je to res njen izvor in kaj se nagiba da se dobro in spodbuja - vendar lahko uporabite PHP zgolj z naravo dejstvo, da ima odtis () funkcije in printf () funkcija, ali echo () funkcijo. Tam je šopki načinov, kako lahko natisnete besedilo s PHP. Torej, lahko uporabite to programsko jezik natančno izhod kaj smo govorili prej. Lahko dinamično ustvari vaš HTML. Morda ni vse. Mogoče ste trde koda stvari, kot so Glava in noga in logotip, in vaše slogov, in vse to. Ampak za kaj takega p-set sedem, če ste manipuliranja zalog in prikazuje uporabnikovo portfelja, ki je bo dinamično spreminjanje, da bi lahko zagotovo uporabljate PHP in logiko, da daje ste kot programski jezik za izhodno dinamično podskupinah strani. Torej, ko govorimo o dinamičnih spletnih strani, ali spletno programiranje, ki je Kaj ste res govoriš. Z uporabo jezika, kot so PHP, ali stvari, ti Python ali Ruby, ali Java ali Še drugi jeziki, da se pozanima baze podatkov pogosto ali drug strežnik in Nato dinamično izpljunil HTML. Sedaj končni rezultat, kot prahi, je da HTML večine spletnih strani, vključno z vašo p-set sedem, je verjetno bo velika zmešnjava, če pogledate na viru koda v brskalniku. To ni nič takega. Na tej točki, ko skrbimo slog, skrbimo stvari, ki ste napisali. Mi ne bo mar za stvari da, kakšne so vaše koda izhodi. Torej, ne skrbite zamika Tukaj, če je PHP, ki je dejansko prikazovanje stvari. Navsezadnje brskalnik ne bo vseeno, in človek ne bo videti pri viru anyway. Mi osebje, na primer, bi treba videti v vašem PHP. Naj vam hitro primer zdaj zakaj drugega bi to lahko bilo koristno. Torej, odkrito povedano, ne morem se spomniti zadnja Tokrat sem uporabila C rešiti problem, v realnem svetu. To je bil verjetno v podiplomski šoli, ko Sem potreboval, da uporabljajo jezik, ki je bila precej nizka in mi je dal priložnost, da narediš nekaj zelo visok opravljanju res prihranili toliko CPU ciklov, kot sem lahko, v veliki meri ker sem bil z uporabo ogromnih podatkovnih zbirk, in vsak CPU cikel prešteti. In odkrito povedano, tudi v stvareh, kot so telefoni v teh dneh in druge naprave kjer vam ni povsem imajo toliko spomin in ne boste imeli čisto kot veliko CPU, z uporabo hitrejših jezikov je še vedno privlačna. Toda v resničnem svetu, ko si želijo, da bi vrgel nekaj programa skupaj analizirati nekatere podatke, ali ste zbrali Cel kup registracij za nekateri skupini študentov in želite, da zelo hitro avtomatizira pošiljanje e-pošte enega po enega za vsakega izmed tistih, registracijski, boste dosegli za jezik na višji ravni kot C, tako govoriti. Nekaj ​​podobnega PHP ali Python ali Ruby, ali pol ducata drugih, ki obstajajo v teh dneh. Toda tisti trije so verjetno najbolj trendy zdaj. In kaj to pomeni, da lahko odprete up urejevalnik besedila, kot gedit ali Najbolj karkoli drugega, nato pa šele začetek pisno kodo, brez skrbi o zbiranju, ne da bi res skrbeti za upravljanje pomnilnika, vodenje v mislih, čeprav, da je malo Aljkavost bo sčasoma prišel nazaj ugriznila, če zbirka podatkov dobi večja ali problem postane velik. Ampak kaj to pomeni za nam je naslednje. Dovolite mi, da gredo naprej in zagon speller od problem nastaviti šest. Torej je to moja izvedba temelji na Trie da sem na veliki svet, kjer ne poteka tako dobro. Vrnili se bomo čez en teden in ponovno tistih, ki se končajo na vrhu velika tabla na našem zadnjem predavanju. Ampak za zdaj, naj gredo naprej in samo vodim rešitev v besedilu, in bomo naredili King James Bible, in gremo. Torej tistih, ki so vse domnevno napačno črkovane besede iz King James Bible. In moja izvedba je pol sekunde v celoti. Tako da ni preveč slabo o tem Zlasti računalnik. Ampak mislim, koliko Šifra sem moral napisati. Pomislite, koliko kode si moral napisati. Pomislite, koliko ur ste porabili v D-dvorana ali vaš domu ali kjer koli dejansko kodiranje up to rešitev. No, če sem dejansko imajo višjo stopnjo jezik, kot so PHP, upoštevati kaj lahko storim tukaj. Prvič, domnevam, da je to namesto vaša distribucija številka. To je datoteka z imenom speller. To je na voljo kot del današnjih porazdelitev koda. In bom pomahala z roko v najbolj podrobnosti, ampak to je dejansko zanimiv primer, kako boste morda port jezik kot C nad PHP. Sem dobesedno odprla dva besedilna okna, ena z mojo C različico speller.c, in sem jo začel prevajati v moji glavo v PHP, in ga vnesete z uporabo Najbližji enakovrednih funkcij. Tako da nekatere od teh stvari so drugačne. Smo videli zadnji čas, da PHP ne uporablja vključujejo v čisto enak način. Uporablja zahtevajo običajno, čeprav vključujejo ne obstaja. Opredeliti je malo drugačna od # Define v C, ampak to je kako naredimo konstanto. $ Argc se izkaže, obstaja v PHP, Tako smo videli, da je pred. To so le spremenljivke, vse , ki se začnejo z dolarskih znakov. Spomnimo se, to so le kup plavajoče točke. Tako da skrajšam zgodbo, ste dobrodošli flip skozi to, če radoveden, to je Skoraj linija-za-line pretvorba Različica C speller.c v PHP. In ti bi to naredil še enkrat pol ducata drugih jezikih. Ampak kaj je zanimivo je to. Ali kaj je odkrito Rastužujući je to. Dovolite mi, da gredo naprej in tip o dictionary.php, in trdijo, da sem dogaja, da gredo naprej in ponovno izvajanje Problem nastavite šest tukaj. Tako da je predlagala, prvič, da v tem datoteke, ki se bo izvajal v PHP, zato naj odprem oznake, kot je ta. Naj vam dam globalni spremenljivka $ velikost dobi nič. In jaz bom dal Sam hash tabelo. Bom uporabo razpršene tabele za to stvar. Kako razglasi razpršene tabele v PHP? Končano. OK. Torej oklepaj zaklepaj predstavlja kaj v PHP, kot smo videli? Matrika, vendar matrika, ki bi lahko lahko asociativno paleto. Asociativno paleto je podatkovna struktura, ki sodelavci ključe z vrednostmi. Zdaj v najpreprostejši številčno indeksirajo matrika, te tipke so kaj? Nič, ena, dva, tri, prav? Stara šola stlačiti nazaj od C, vendar pa lahko tudi strune kot foo in bar, ali Maxwell, ali kakršnega koli niz. Tako da sem lahko vzvod, ki čez nekaj trenutkov. Dovolite mi, da gredo naprej in razglaša funkcije, kot so - Naredimo obremenitev (prvi). Torej funkcijo obremenitve (). In PHP je malo drugačna po tem, da ste dobesedno tip funkcije, ampak Ne vnesite vrsto donosa. Jaz grem naprej in rekli, da obremenitev (funkcija), naj se v argument $ slovar, samo kot različica C storil. Delam, da iz spomina. In predlagam, da sem dogaja, da to storijo. Bom enostavno narediti foreach. Bom pokličete funkcijo datoteko (), ki poteka na ime, ki datoteko, ki je spremenljiva $ Slovar kot $ besedo. In nato znotraj mojega zanke for tukaj sem, dogaja, da gredo naprej in shranite v moji $ Tabela, $ beseda postane resnica. Končano. Oh, čakaj. Končano. OK. Da je obremenitev () funkcija pravijo v PHP. Zdaj, zakaj to deluje? In sem nekako goljufanja tukaj. Torej, ena, foreach smo videli Na kratko zadnjič. To samo pomeni, da si lahko izbirate prek matrika ne moti, zi in n in plus plus, in vse to. Slovar je seveda ime datoteke, nekaj podobnega velika ali majhna, dva slovarji smo uporabili zadnjič. Datoteka je funkcija, ki odpira besedilo datoteko, jo prebere v vrsticah in Roke si nazaj širokim naborom, vsaka od katere elementi so črta iz te datoteke. Tako da je kombinacija fopen in fread, in medtem ko zanke in fclose, in vse to. Končno, beseda pomeni le, da je spremenljivka bom, da imajo dostop do na vsaki ponovitvi v to zanko. Torej na kratko, tale liner tu pomeni odpreti datoteko, katere ime je v slovar, spremenljivka, ponovitev čez je po vrsticah, in vsakič, ko prideš linija, trgovina s spremenljivim imenovano besedo, in naredite nekaj z besedo. Kaj hočem narediti? Rad bi dal besedo v mojo razpršene tabele. No, jaz lahko dal nekaj v moji hash tabelo tako kot v C uporabo oglatih oklepajev. To je ime moje razpršene tabele. Grem v indeksu, da je hašiš Tabela na tej lokaciji. Torej ni držalo nič, ne oklepaj ena. Nosilec quote citata nekaj, karkoli da beseda. In tako kot ste morda v vaši hash tabela delo Trie, ki ste jo pravkar shranjevanje dejansko logično, implicitno ali eksplicitno. Končano. Jaz shranjevanje vrednost true. Zdaj obstaja nekaj stvari, Jaz rezanje vogali tukaj. Tehnično pa se dogaja, da se nadležno novo vrstico, / n, na koncu vsaka od teh besed. Torej bi jaz verjetno pokličete funkcijo PHP imenovano chop (), ki bo dobesedno sesekljajte to dol. In sem pravzaprav morali naredite eno stvar. Verjetno bi moral prirastek velikosti na vsaki ponovitev, tako da sem sledenja globalno, kaj je to. In iskreno, in to je eden od vidiki neumni PHP, če ste z globalno spremenljivko, morate izrecno povedati, da ste. Torej bom dejansko tip v globalni $ Velikost, globalna $ mizo, in zdaj moj funkcija je končana. Torej ni tako enostavno, kot prej, vendar verjetno vzel manj časa kot C Različica, morda? OK. Tako da zdaj naredimo kljukico () funkcijo. Poglejmo, če je to vsaj vzel ur na koncu, da nas je vzel v C. Tako Naj gredo naprej in razglaša preveri, kot funkcijo. Traja v argumentu besedo, ki je bo prišel Speller. In grem preveriti, če po spremenljivi Isset, mizo Nosilec strtolower od ust - dajmo uravnotežiti vse moje oklepaji - nato vrne true. Drugega - da je bilo res težko Del tega programa. Else, vrne false. Končano. To preverjanje (). Zdaj, zakaj to deluje? No, eno sem opravil v besedo, ki je niz. Dva, sem preverjanje znotraj hash Tabela, ki je pozval $ mizo. Jaz sem prisili, da male s klicem Funkcija precej podobna tolower () v C, vendar ne na cele besede ne sam znak. In če je ta določen, z drugimi besedami, obstaja je vrednost niz, z drugimi besedami, če je to res, potem je odgovor da, to je beseda. Ker sem ga tam z obremenitvijo (). In če ne, bom vrne false. Zdaj so drugi enostavno. Velikost function (), kako to storiti? V bistvu sem se vrnil $ velikost. Ampak jaz tehnično potrebno storite to nadležno stvar. In dejansko se sliši, sem bil rezanje en vogal preveč. Res moram narediti globalno $ mizo. Ampak to pa je dejal, razkladanje). Razkladanje () je neverjetno. Funkcija razkladanje (). Kako se želijo izvajati razkladanje ()? Končano. OK. Torej razkladanje (), upravljanje s pomnilnikom je v celoti poskrbljeno za vas nekaj podobnega PHP in veliko jezikov na višji ravni. Torej, to je neverjetno. Všeč mi je, zakaj za vraga smo preživeli preteklosti Osem plus tedna v C pisno očitno res počasi, res čas porabijo težave z deset ur dela v okviru naših pasov? No, za eno stvar, to lahko delajo globe za majhne programe. Prav gotovo pospešil moj čas razvoja. Ampak poglejmo, kaj se zgodi v resničnem svetu. Dovolite mi, da gredo v ta imenik v oknu terminala. Tam je speller. In opazil, kot prahi, in boste morda so se pojavile te težave v sklop šest ali sedem problem nastaviti. Vam ni treba strogo konec PHP datoteke s. php. Če si dal linijo, kot da je prvi na sam vrh, to je posebna linija skladnje, ki v bistvu pomeni najti Program se imenuje PHP, in jo uporabite za tolmačiti to datoteko. Tako da zdaj nihče zares ne ve, da Tečem PHP program. To lahko teče, kot da čeprav so bili pripravljeni v nekaj C. Ampak tukaj je stvar. Pravzaprav, naredimo to še enkrat. Dropbox/pset6 /. Tam je speller. OK, 0,44 sekunde. Hitrejši je dobil tokrat. Zdaj gremo v PHP različico. Lepo dotik. Ampak samo pomislite, koliko časa Rešil sem na uradnih ur. OK. Torej 3,59 sekunde, kar je dejansko ne zveni natančno niti. Ampak to je zato, ker skrajšam zgodbo, ko ste tiskanje ogromne količine stvari na zaslonu, da sam zavira stvari navzdol. Kaj je res je CPU v Aparat je bil 3,59 sekunde, v V nasprotju z C, ki je 0,44 sekund pred kratkim. To je resnično red Obseg drugačna. Torej, če je to cena, ki prihajajo iz? Zakaj je tako veliko počasnejši? Zakaj PHP opravljajo tako slabo? Danielle? PUBLIKA: Saj ni res uporabite razpršene tabele. DAVID Malan: nisem zares uporabite razpršene tabele. Tako sem nekako naredil. Torej je asociativno paleto. Najverjetneje je, če ljudje v PHP so res pametno, se uporabljajo pod hood dejansko miza hash izvajati nekaj podobnega C ali C + +. Vendar. Ja. PUBLIKA: [neslišno]. DAVID Malan: Ja. Tako da vsak izmed funkcij sem napisal zdaj - Pravzaprav lahko rečemo, da še enkrat malo glasneje? PUBLIKA: Vsak od funkcij, ki jih ste vključeni ima veliko bolj poln kapaciteta od - DAVID Malan: Torej, to je zelo res. Tam je veliko več režijske da smo ni res videl z osredotočanjem na samo dictionary.php, kar sem napisal. Nasprotno, obstaja cela tolmač dogaja v ozadju. Pravzaprav, ko sem tekel ta program, je ni bil zagnan prevedene ničel in enic zasnovan za moj Intel CPU. Namesto tega je bilo teče po vrsticah PHP kodo, ki je videti natanko kot smo jo vnesli. In tako, ko ga uporabljate razlaga jezik, si dejansko ne plača to ceno. To bo trajalo nekaj časa, da se glasi datoteka od zgoraj navzdol, levo desno, nato pa izvesti vsak linija znova in znova. Zdaj v resnici, še posebej na spletu, lahko dejansko pospeši ta proces z caching rezultate PHP code mogoče razlagati. In da je smiselno na spletu, saj Če ga še nimate enega uporabnika, kot jaz tukaj, ampak 1000 ali 10.000 uporabnikov, potem morda prvič datoteka pogledali, da je počasen, nato pa se to je veliko hitreje. Ampak tudi to, še enkrat, je kompromis. In nekaj podobnega podatkih raziskovalnega določiti, ali celo nekaj velikega, kot so tega bodo uporabniki na koncu začutite, da je upočasnitev. Torej na kratko, razlaga jeziki zelo v modi, zelo priljubljena, in Iskreno so verjetno ste jeziki morajo prispeti na pri reševanju problemov Po CS50. Vendar zavedaš, koliko ste zares ob samoumevnega pod pokrovom res ti zadnjih nekaj tednov v hash mize, in drevesa, in se trudi, , ki se uporabljajo na koncu dejansko izvajati stvari, kot oklepaj, oglati oklepaj, kar smo lahko zdaj hvaležno vzeti za samoumevno. Torej, kaj si poglejmo zdaj na tej spletni kontekst. In sem omenil zadnjič, da obstaja kup superglobals v PHP, da v resnici niso pomembni v ukazni vrstici. Oni so bolj pomembni v okviru z uporabo PHP v spletnem okolju. Torej teče PHP na spletni strežnik, da ustvariti stvari, kot so HTML. In smo pogledal $ _GET in $ _POST, in to je, če se samodejno uporabnikov vhod konča le, če predloži tvorijo v datoteko, ki se konča v. php na spletu strežnik kot aparata. Toda poglejmo na kratko na $ _COOKIE In $ _SESSION. Z vidika navadnega je, kaj je piškotek, kot si ga razumeti v kontekstu uporaba spleta? PUBLIKA: datoteke na računalniku. DAVID Malan: Ja. To je slika na uporabnikovem računalniku zasajene s katero koli spletno mesto se zgodi, da obiščete. Torej, ko greste na Facebooku, ko greš da bankofamerica.com, ko greš na google.com, ko greš na skoraj vse spletna stran na svetu v teh dneh, vključno cs50.net, se piškotek posadili na vašem računalniku, ki je bodisi vrednosti shranjene v RAM v vašem Računalnik v pomnilniku brskalnika ali včasih res datoteka shranjena na trdem disku. In kaj se ponavadi shranjene v tej datoteki ni vaše uporabniško ime, ni vaša geslo, običajno ni nekaj, občutljiv, če spletna stran ni tako dobro z njihove varnosti, temveč je velik edinstven identifikator med druge stvari. To je velika naključno število zasajene na vašem računalnik, vendar si lahko zamislite kot nekakšen virtualni žig roko, kot od klub ali nekaj zabaviščni park, ki dovoljuje osebje, lastniki, ki storitev, da se spomnimo, kdo ste. Torej, če je velika naključno število je všeč 12345678, čeprav je to očitno ne preveč naključno, pomislite, da je kot roko žig, da ko boste obiskali facebook.com prvič, se žig to številko na roko. In potem, ker ste govorili HTTP, si pri čemer je brskalnik, in ker Facebook očitno govori isto kot spletni strežnik, protokol HTTP pravi, da kadarkoli kasneje obiščete facebook.com, ali je to druga kasneje, uro kasneje, še naslednji dan tako dolgo, kot ste ni izrecno odjavili, ki učinkovito je kot umivanju rok. HTTP pravi, da bi morali predstaviti svoje roko žig vsakič, ko vrnitev na tej spletni strani. Kaj Facebook, nato pa je, da so poglej na tej strani žigom in pravijo, oh, 123456789. Ne vem, na prvi pogled, da je to David Malan v Cambridgeu, Massachusetts, vendar pa lahko preverijo svoje baze podatkov in reči, oh, oseba na katere računalniške smo posadili 123456789 David Malan iz Cambridgea, Massachusetts. Pokažimo, da uporabnik potem njegov profil stran ali njegov News Feed. Vendar pa je problem v tem, če je to je, kako web res deluje. Oglejmo si na hitro primer. Kaj je dejansko šel za povedati facebook.com. Toda preden lahko gremo tja, naj grem naprej in odprla Chrome Inšpektor tukaj. Naj pogledam na kartici omrežja. In zdaj gremo naprej in vnesite V https://facebook.com. In delam to tako, da ne vidimo vse te preusmeritev in odpadkov Čas je videti skozi njih. Dovolite mi, zadeti nastopiti. Vse je v redu. Bomo videli cel kup prošenj. Pride Facebook. Tam je cel kup datotek. In tu je po moje navedbe o latence zadnji čas, da se je Veliko zahtev HTTP. Toda prva je verjetno Najbolj zanimivo. Torej, dajmo se pomaknite dol, in Bom povečate v sekundi. To se dogaja, da je vrsta nered, ampak poglejmo. Facebook se nam pošljete cel kup stvari. Ampak hej, zanimivo. Oni sajenje in ne enega, ampak štiri ročni žigi na moji roki tukaj. Set-cookie, Set-piškotek, set-cookie, set-cookie. In obstaja nekaj funkcij tukaj. Vsi so omeniti nekaj nekako izteka. In izgleda, da Facebook je upal me spomnite šele leta 2015. Tako da je verjetno čas, v katerem Moram odjaviti ali jih bomo samo avtomatično domnevajo, da sem Ne bo se vrnil. Tako da je dejansko spodobno časa. In tam so nekateri drugi stvari se dogaja tukaj. Zdi se, da prisilno Ta piškotek črta z besedami, da potekel leta 1970 Pred obstajala piškotki. Torej, brskalnik le, da bo domnevati, OK, to je kot umivanje rok žig. Toda zdaj, ko je moj brskalnik omogoča naknadna prošnja - Naj gredo naprej in to znova in znova naložite. Zdaj pa me pomaknete nazaj top zahtevo in dol tukaj, zahteva glave. Opazijo. Torej, zdaj sem pod glave ne odziva, Opazil pa pravi zahtevajte glave. In opazil, da je moj brskalnik kot del njen zahtevek po hitting reload ima pošlje vsaj informacije. Ne set-cookie, toda piškotek. Torej, to je linija, glava HTTP tako govoriti, kje je moj brskalnik je nekako da ne vedoč, da je moja predstavitev moja roka za pregled Facebook. Tako da lahko ti piškotki uporablja pa za kaj? Da se spomnimo, kdo ste, ali pa se spomnimo, kako veliko krat ste bili tam, ali res karkoli. Torej, tukaj je counter.php. In mi približati pisave. In vsakič, ko sem osvežite stran, opazili to je spomniti, kolikokrat Bil sem tam. No, to še ni vse, da je impresivna. Reciva, da zaprete zavihek, in zdaj se vrnimo k http://localhost/counter.php. Oh, to je zanimivo. Še vedno spomnil, celo čeprav sem zaprt zavihek. In odkrito povedano, če zaprem brskalnik, če se izvaja na pravilen način, sem bi se še spomnite, da je ta uporabnik kdo je on ali ona je bila prvič, in Samo enkrat sem šel v meniju brskalnika Chrome, ki tukaj je tukaj in pojdite na Zgodovina in kliknite Počisti podatke brskanja, saj se nekateri od vas ima v preteklosti, šele potem se bo piškotki dejansko se črta v spletu razvoj. Torej, če gremo - dajmo blizu gedit tukaj. In če gremo zdaj v to datoteko. Dovolite mi, da gre v našem vhosts / localhost / javno, in mi to counter.php. Obvestilo, da je to precej preprost program. To je zelo preprosto spletno stran. Torej začetek datoteke je le nekaj komentarjev. Ampak tukaj je nova linija, ki jo lahko Videl že v p-set sedem, session_start (). To je linija PHP kode, ki v bistvu pove, spletni strežnik, da prepričani, da žigosa roke in se preverite ročne žige. To je vse, kar počne linijo, in to pa vse to proces za nas. Nato opazil sem pravkar dobil dve veji tukaj. Če Counter znotraj tega posebna globalna spremenljivka imenuje $ _SESSION Se določi - z drugimi besedami, če obstaja nekaj vrednost tam - kaj je to dobil in ga shranite na lokalni spremenljivko z imenom $ števec. Drugega, recimo dodelite $ števec Privzeta vrednost 0. Zdaj tukaj je en vidik PHP, ki je hkrati blagoslov in prekletstvo. PHP je malo površen. Torej, medtem ko je v C, kaj bi Obseg pultu so bili bodisi tukaj ali tukaj? To bi bila omejena za tiste zavite oklepaje. Veš kaj? V PHP, obstaja tudi zunaj tistih zavitimi oklepaji, tukaj in tukaj, in tukaj in tukaj, in tudi spodaj. Zato pravim, da je to blagoslov v smislu da vam ni treba razmišljati, kot trd kot smo to storili tednoma. Ampak to je tako malo prekletstvo v da ni važno, če boste uporabili spremenljivko PHP, vsaj v programu, kot je ta, je globalno dostopne za boljše ali slabše. Torej, moraš imeti v mislih, da je zdaj vaše spremenljivke ne sme biti neopredeljenih. Morda ste jih opredeliti drugje. Ampak kaj bom končno naredil? Grem notri shranjevanje tega globalnega spremenljivi kot vrednota Števec ključni rezultat delaš števec plus 1. Torej je to le aritmetično da ne stopnjevanja tega števca. In dejstvo, da sem shranjevanje, da Vrednost nazaj sem se sredstva za v bistvu ažuriranje baze podatkov do vedeti, da je uporabnik 123456789 Tukaj dvakrat. In ko sem to naredil še enkrat, naslednjič, ko sem osvežite stran, da se dogaja, da preverite moja roka žig in rekel, oh, Uporabnik 123456789 ima zdaj tu že trikrat. Pa kaj PHP in podobni jeziki delajo za nas so kipec izvedeti, kako in kje in kako dolgo Shranjevanje vrednosti v tej posebni superglobal. In to superglobal naslednjič, ko sem obiščite stran je nekako čudežno že poseljena, napolnjena z vrednostmi, ki bili tam zadnjič, ko ste obiskali, ali je bil to drugi nazaj, teden nazaj, ali pa v letu 2013 in smo zdaj govorimo okoli 2015. PHP in spletni strežnik poskrbel za vse to za vas. PUBLIKA: [neslišno]. DAVID Malan: Spremenljivke v PHP, so v bistvu vedno globalni, razen tebe jih razglasi znotraj funkcije, in potem so lokalne do le funkcijo. Ampak zato, ker še nikoli nisem napisal vse funkcije, so sedaj učinkovito svetovni skozi celo mojo datoteko tukaj. PUBLIKA: Ali obstaja način, da bodo lokalne? DAVID Malan: Ali obstaja tako, da bodo lokalno? Samo če jih zavijanje v funkcijah. Ki je v zadnji različici PHP, lahko to storite z anonimno funkcijo. Ampak več o tem v kontekst JavaScript. Ampak kratek odgovor je ne. Daljši odgovor je pritrdilen. Lepo. Dobro kviz vprašanje. Vse je v redu. Torej nazadnje, stran sama pravzaprav zelo preprost. Opazil, da ko sem izhod PHP, odpoklic da so vse te stvari navzdol Spodaj je le, da bo dobil pljunek iz surovega v brskalniku. Kar je v redu, ker mi želite poslati Uporabnik nekatere HTML, ampak jaz želim dinamično posodobiti HTML. In eden od načinov, da lahko to storite, je, da razvrstite zelo hitro spusti nazaj v PHP Način, uporabite oklepaj vprašajem Znak enako, nato izhodna vrednost na pultu. Ali če to izgleda malce skrivnosten, to enačaj je pravzaprav le nekaj skladenjska sladkor za to printf ($ števec). Vendar odkrito povedano, to je samo malo grdo in malo siten, da tip. Torej PHP zelo lepo ponuja to funkcijo kjer si lahko samo reči več kratko na enak način. Torej, kaj se dogaja pod hood? Oglejmo hitro gledati v omrežje Kartica tukaj za counter.php. In mi gredo naprej in prvi dajmo počistiti piškotke. Jasne podatke brskanja dajmo od začetek časa. Zdaj pa se vrnimo tja. Zdaj pa si osvežite stran. In sem spet na ničli. Ker je bila moja roka žig oprati, Sem zdaj dobil nov piškotek. Pravzaprav, če gledam na kartici omrežja in pogled na glavah odzivanja obvestilo da se mi je naprava pošilja piškotek, čigar ime je nekoliko poljubno, vendar vrsta razumno, PHPSESSID. In to me pošilja to res velika naključno število. To ni čisto številko. To ni čisto šestnajstiški. To je neke vrste alfanumerično niza, ampak verjetno je naključno. In to je žig ročno, tako da govorijo, da sem se nanašajo. Medtem, če kliknem osvežite in nato pogled na ta drugi liniji za moj drugi Zahteva, da vidite zdaj, da moja prošnja Glave so PHPSESSID enaka tem, Ne set-cookie, ampak samo piškotek. In to je predstavitev mojega brskalnika moje strani žiga. Torej, zdaj kot teaser, pa se bova pogovorila več o tem v tednu ali tako, vendar na kakšen način se to da vas ranljivi, vaš Facebook račun ranljive, in druge take računi ranljive? PUBLIKA: Če ima nekdo svoj piškot. DAVID Malan: Ja, če nekdo ima svoj piškot. Mislim res, tako kot nekateri od vas Morda so poskušali na podobnega klubu ali zabaviščni park, če poskusite nekaj takole kopirati žig, čeprav nazaj na druge osebe pa in potem on ali ona predstavlja kot sami, če je dejansko ne pogledaš enaki, 123456789, nato spletni Strežnik je očitno šele tekoč Verjamemo, da je, da si ti. In to je res temeljna Grožnja kadarkoli uporabimo piškotke ker če je nekdo samo ponaredi tako govorijo svoje piškotke, slike, kaj je to je bodisi resnično kopirate jih je videti na računalniku in je tako kot, v redu. Davidov Piškotek je JJ3JIK in tako naprej, nato pa so si dovolj pameten, da veš kako rešiti z ročno poslati, da Piškotek iz brskalnika ali iz Program, ki so napisali, da bi lahko v celoti se prijavite na spletni strani, kot ti. To ni tako težko, da se pretvarjamo, da je nekdo drug, če ne bomo ponovno p-set dva, ki je uvedel kaj? PUBLIKA: kriptografija. DAVID Malan: malo malo kriptografije. Enostavno šifriranje, vsaj Standard Edition, vendar kripto vseeno. manj. Tako se izkaže, če šifriranje vse te glave, ki uporabljajo nekaj, kar Morda zdaj vem, bolj znana kot SSL, Secure Socket Layer, ali https:// URL, nato pa vse te stvari, ki smo jih bili Že pogled na dejansko šifrirano, kar pomeni, da je tako kot ti Ne morem prebrati žig roke. Samo facebook.com lahko, ali google.com, ali v tem primeru, lahko naprava prebral, da žig z roko. Žalost, čeprav, in še enkrat, to je vse preveč je to primerno z NSA stvari pozno, čeprav SSL je razbiti. In da je dejansko ni tako težko celo poči, da šifriranje. Ne toliko s krekingom šifriranje, ampak z zvijačo Brskalnik v dešifriranje podatki prezgodaj. Ampak še enkrat, bomo zafrkavali s tem kmalu. Za zdaj, samo treba bati. To je tragično nekako res. Vse je v redu. Torej, če to zdaj nas je zapustil? No, pa dajmo. Gremo naprej in se hitro teaser, preden smo vzeli odmor. In mislim, da bomo ostajal malo dlje danes, vendar bomo potopite v Nekaj ​​čisto nov in seksi, kar bo Brušenje vaš apetit za še več. Torej, to je teaser. Torej SQL, smo začeli govoriti o kdaj tako kratko zadnjič. Boste res dobili svoje roke umazane z nekaj pa v-p nastavljena sedem. In v smislu navadnega je, kaj počne SQL - S-Q-L - stori za vas? Kaj je to? Ja. PUBLIKA: dajmo podatke imate dostop. DAVID Malan: Ja. To pa podatkov lahko dostopate v bazi podatkov. Strukturiran jezik poizvedb. In to je v bistvu programski jezik. Obstajajo sestavine, ki ne bomo uporabite tudi v razredu. Ampak si lahko učinkovito opredeljujejo naloge. Imenujejo se shranijo Postopki v SQL. Ampak ga bomo naprej dokaj preprosta in samo njegovo uporabo za nekatere osnovne operacije kot izbiro podatkov, vstavljanje podatkov, posodabljanje podatkov in brisanje podatkov. In lahko res misliš, podatkovne baze, kot zbirko podatkov SQL, kot je bilo pravkar da Microsoft Excel. Ker SQL nanaša na relacijski Podatkovna baza, kjer Odnos pomeni le tabel. Vrstice in stolpce. Torej, kaj lahko dajo v preglednici kot je ta ali Google Docs, bi si dal v bazo podatkov SQL z razglasitvijo mizo. Zdaj, kako ste dejansko dostop te informacije? No, z ukazi ali poizvedbe je to všeč. SELECT, INSERT, UPDATE in DELETE. In za večino del, to so Štiri samo sestavine, ki jih boste potrebovali, da nekaj narediti precej močno V problem določiti sedem. Zdaj pa nazaj v dan, bi si dejansko interakcijo z bazo podatkov v črni in beli okno terminal utripa poziv, kot je ta. In baza podatkov smo tekmovanje v teku na Naprava se imenuje MySQL, ki je brezplačen in open source motor baze podatkov. Če ste Google in branje Wikipedije članek, boste vedeli, da je ime bit prehoda za nekatere različic Linuxa. Maria baza podatkov je pravzaprav vilice tako rekoč MySQL. Skrajšam zgodbo, Oracle kupil MySQL. Oracle je veliko podjetje. Ljudje so bili zaskrbljeni, da bi še vedno ne čisto kot open source, tako da je to le kopija MySQL, ki je Še vedno zastonj, še open source, in nameščeni v Fedora Linux, ki ga privzeto. Ampak to je neke vrste bolečino v vratu, da se seznanijo z baze podatkov na ta način. Zato smo se vključujejo v CS50 naprave free open source orodje imenovano phpMyAdmin. Samo naključje, da to je napisano v PHP. Ni temeljno potrebujete za PHP tukaj. Toda to je šele spletno orodje, ki smo prenesli brezplačno, nameščene v Naprava, ki nam omogoča, da imajo grafični uporabniški vmesnik, s katerim raziskati-p nastavite sedem bazo podatkov z za ustvarjanje nove zbirke podatkov, reči za svoj končni projekt, če bi podobno in na koncu ustvariti dinamične spletne strani, kot CS50 finance , ki vam omogočajo, da se pozanima podatke in ažuriranje podatkov dinamično. Saj ne boste morali uporabiti samo besedilna datoteka ali CSV. Lahko dejansko uporabo pametne baze podatkov program, tako da lahko izvedete več sofisticirane poizvedbe kot samo branje skozi vse linearno. Torej, na primer, to je tisto, kar smo dali ste iz škatle za-p nastavite sedem. To je miza z očitno vsaj trije stolpci, od katerih je eden ime, od katerih je zgoščena in od tega drugo je ID. Ampak zanimiva stvar, in le na tease out eno misel tukaj, uporabniško ime je verjetno že edinstvena, kajne? Mislim, večina katero koli spletno stran, če imate uporabniško ime, se ne more biti dve Caesars. Ne more biti dve Malans. Ne more biti dve jharvards. Njegova edinstvena. Sicer pa ne vem, katera jharvard je v resnici. Torej, kaj bi lahko motivacija za tako ki ima tretjo kolono levo tam poklical ID, ki je videti kot Številka, ki je prav tako edinstven? Zdi se mi malo odveč se mi na prvi pogled. Zakaj bi moralo biti prepričljivi, da imajo ne le edinstveno uporabniška imena, ampak tudi edinstvene številke? PUBLIKA: Lahko bi imeli Enako geslo. DAVID Malan: Ljudje bi morali enako geslo, seveda. Da bi popolnoma zgodilo. Ampak, če imajo to edinstveno uporabniško ime, sem trdijo, da to sploh ni glede na to, ker če tip v svojih uporabniško ime, rabim samo za preverjanje njihove geslo, njihovi njihov hašiš. Zakaj pa? PUBLIKA: Hitrejše iskanje. DAVID Malan: Hitrejše iskanje. Zakaj? PUBLIKA: ID je samo ena. DAVID Malan: ID je samo en znak, ali natančneje, to je število, tako da je verjetno 32 bitov ali nekaj takega. Ker je ime, očitno Jason Up Hirschhorna se je nekako smešno dolgo, in da se bo da mi veliko več časa, da se niz jih primerjati H-I-R-S-Ci-H-H-O-R-N, in morda / 0 ali nekaj takega, da bi poiskati Jasona, v nasprotju s samo rekel mi uporabniško številko dve. To je 32 bitov. To je en sam INT, da boste morali primerjati. In res, to je točno, zakaj baze podatkov ponavadi dodelijo posebne identifikatorje za vrstice v njih. Zdaj, kaj drugi podatkovni tipi so tam poleg INT in očitno strune, kot je ta? No, da je bolj ustrezno, SQL baze podatkov, kot so MySQL, imajo CHAR polja. In Char malce zavajajoče ni enoten ZNAK. Polje CHAR v MySQL bazo podatkov, je enega ali več znakov, vendar je določeno število znakov. Torej za primer, če bom tja do phpMyAdmin, kot ste morda že, ali Kmalu bo problem določiti sedem, in sem šel na mojo zbirko podatkov, in samo za zabavo, pa ustvarite novo tabelo, imenovano test z le dvema stolpce. Jaz bom nato Pojdi. In to bo postalo precej pozna, še posebej, ko to vidijo okoli sami. Tukaj lahko vpišem ID za ustvarjanje nova tabela tipa INT. Ampak tukaj sem lahko vnesete uporabniško ime poustvariti to prej mizo. In opazil sem še cel kup vrst med katerimi lahko izbirate. In tudi to je razlog, zakaj phpMyAdmin je nekako lepo. To je nekako samo-učenja v tem vas Lahko samo vrsta točko in kliknite, in poglej dropdown menije, in sklepala da je tisto, kar vam daje pooblastila SQL. In res, če sem se odločil CHAR, nato pa sem navesti dolžino ali kako mnoge vrednote, koliko ožge. Tako zelo skupne vrednote so stvari, kot 255, ampak to je malo dolgo. Običajno je osem za uporabniško ime. Ampak to je malo majhen teh dneh. Tako da je ta odločitev dizajn. Je 8 znakov max, 32, 255, 1000? To je res odvisno od vas. Ampak polje CHAR je določeno število. Tako da izberejo premalo in si nekako zajebali, če želite, daljše ime. Izberite preveč in kaj je Slaba stran? PUBLIKA: [neslišno]. DAVID Malan: To je potratna. Tako kot v C, če imate večji kos pomnilnika, kot ga potrebujete, da si samo zapravljaš čas in izgubljamo prostor. Tako kot alternativa, obstaja VARCHAR, ki rešuje ta problem, ki ga zdravljenje dolžine kot fiksno dolžino, vendar kot največjo dolžino, in z uporabo spremenljivka število znakov, ki potem ponavadi uporabljajo le toliko, kot vas ožge dejansko potrebujejo. Sliši se odlično. Zakaj ne bomo znebili Podatkov CHAR tip potem? Kaj bi lahko slaba uporabo VARCHARs, ki zveni kot da je lepa zmaga? Ja? PUBLIKA: [neslišno]. DAVID Malan: OK, dobro. Torej, če vse vaše podatke, je enaka dolžina, kaj skrbi? PUBLIKA: Ker ste zapravljaš podatke, ki jih vse povedal. DAVID Malan: Torej, če vse svoje podatke, je enake dolžine, čeprav bi trdili da se določi največje dolžine na VARCHAR se ne razlikuje od določitvijo fiksne dolžine na ZNAK če veste, da je število vnaprej. Vendar pa je res, in bom nekako izpisek iz tega odgovora realnost da je še vedno največ, kar lahko moteč, še posebej, če naleteli na ime osebe, ki je nenavadno dolgo, da niste predvideti. In to je tudi malo manj učinkovit dejansko iskati na VARCHARs kot nasprotuje iščejo ožge, zlasti za dolgo mizo, ki imajo veliko, in veliko podatkov. Torej tudi tu, tematsko spet ni očitna izbira. Torej, samo da vam občutek za druge vrste podatkov, ki bi bili lahko zanimivi bodisi za-p nastavljena sedem ali prihodnost, tam je INT. Tam je BIGINT, ki je kot dolgo dolgo. To kaže, da je 64 bitov. Tam je decimalni, kar boste videli v Problem set, ki je last čistilo odgovor na težave smo naletela s plovcem in plavajoče točka nenatančnost. In potem je tu še DATETIME. Obstaja dobesedno na vrsto podatkov, ki ima videti kot eno leto, mesec, dan, in ure, minute in sekunde. Ampak podatkovnih baz SQL tudi Stvari, ki jih bom kazal. In indeks je nekaj, kar določite pri ustvarjanju tabelo da išče in drugih dejavnosti bolj učinkovito. Natančneje, obstaja nekaj imenovanih OSNOVNA indeks, ki ga lahko razglasi kot sledi. To smo storili za vas z Uporabniki tabela vam dal. Ampak obvestilo, če bi bile ročno vnovično miza uporabniki tukaj daje je ime uporabnikov. Sem že določeno številko. Jaz določeno INT. I določeno ime z največ 32 znakov. Ampak, če smo ostali pomikanjem v to dokaj široko okno, obvestilo pa je kup drugih stvari, ki sem se lahko podate. Ena, sem lahko podate atribute saj veš, kaj je to INT mora biti nepodpisani. Nočem negativne številke, zato naj bi bilo nepodpisanih. Null tu ni pomembna, ker Jaz želim, da vsak uporabnik imeti enotno številko. Ne želim, da je nična. Ampak to je zanimivo. Lahko določite, da je ID bodisi Primarni ključ te baze podatkov, ali je edinstvena, ali pa je indeksirana ali celotno besedilo. Torej za današnje namene, dolga zgodba Skratka, primarna pomeni, da se to je konceptualno in tehnično Polje, ki ga uporabljamo za edinstveno identifikacijo uporabnikov. Torej, če pogledamo gor uporabnikom, to je nekako z obljubo, da jih pogledate večinoma da se posebni identifikator. In se bo baza podatkov zagotovi, da če vam ima število uporabnikov 3, ne morete fizično vstavite drug uporabnik s tem istim številom 3. Baza podatkov bo samo zavrne , da shranite spremembe. Kar je dobro, saj si lahko zaščitite pred sebe. samozaposlene Alternativno, za uporabniško ime. Torej, druga vrstica, odpoklic, je polje uporabniško ime. Torej, v drugi vrsti je tu uporabniško ime, kot smo to storili na daleč tam pustil. Torej, kaj še lahko želim opredeliti? Ne smem, v skladu z SQL, opredeliti dve primarne ključe. lahko določite skupno ključ, kjer ste pogled na obeh področjih, vendar pa ne more posamično biti primarni ključi. Tako da je ne pride v poštev. Torej, ki bi mi želeli izbrati? No, UNIQUE je podobno v duhu, da primarni ključ, kjer si to navede polja mora biti edinstvena, vendar je ne bo ena Uporabljam ves čas. In mi ne boš tega uporabil vse čas za kakšen razlog še enkrat? To je počasnejši potencialno če To je dolga uporabniško ime. To je samo izguba časa. INDEX, medtem, določa, da je ne bo edinstven, toda rad bi vam, da si svojo čarovnijo pod hood, da bi bilo hitreje, za mene, da iskati na tem področju. Torej, to verjetno ni pomembno tukaj. Za uporabniško ime, sem trdijo, da UNIQUE je dober odgovor. Recimo, da smo naredili uporabnikom več zanimivo kot samo uporabniška imena, hash in identifikacijske številke. Kaj pa, če bomo dali ljudem polna imena? Kaj pa, če jim bomo dali naslove in druge podatke o njih? No, če si določite, da stolpec Podatkovna baza se indeksira, to pomeni, da MySQL ali Oracle, ali karkoli baze podatkov boste uporabljali, bi morali delati svojo čarobno in uporaba neke vrste modno podatkov struktura kot drevo, ali Trsta, ali hash table, ali kaj, da se zagotovi da, ko iščete podatke s pomočjo izberete na posameznem področju - kot kažejo mi vsi, ki živi na ulici Oxford Street. Poizvedbe, kot je ta. Če ste določili vnaprej, da hočeš indeks na tem področju, iskanja bo veliko, veliko hitreje. Če ne določite indeks, ki najbolje lahko naredite, je linearna iskanje po to ni urejeno. Ampak, če si določite kazalo, pametna osebe, ki so do baze podatkov - Ljudje, kot ste vi, ki zdaj vedo drevesa in poskuša in razpršene tabele - samodejno zgraditi takšno podatke struktura v RAM se prepričajte, da ti iskanja so veliko hitreje. Polno besedilo medtem Podobno je tudi v duhu, ampak vam omogoča, da wildcard iskanja, kot kažejo mi vsi, ki živi na ulicah, ki se začnejo s črka O kakršnega koli razloga. To lahko storite iskanje nadomestnih tako. Ali, bolj prepričljivi stvari, kot kažejo me vsakdo, ki ima besedo - Pokaži mi Vsakdo, čigar ime se začne z določeno črko. Lahko iščejo ključne besede na ta način. Vse je v redu. Torej, oblikovalske možnosti obstaja potencialno. Obstajajo drugi, da bom val svoje roke na. Izkazalo se je, da lahko imajo različni motorji za shranjevanje. In to je več kot arcane moramo vsekakor za problem določiti sedem. Privzeto je, da vi uporabljate nekaj, kar se imenuje InnoDB. Videli boste omembo te nekje vmesnik phpMyAdmin najbolj verjetno. Ampak, veste, da obstaja drug načrt Odločitve, ki so lahko Obrestna pridejo končne projekte, če kaj storite prek spleta. Ampak kaj je to. Pojdimo naprej in dal to na Zaslon kot teaser za zgodbo vključuje vas, cimer, in kozarec mleka. Vzemimo dve minuti ali tako prekinil tukaj. In če lahko ostal, kaj je prišel nazaj, poglej malo bolj na SQL, in potem malo JavaScript z -p nastavite osem v mislih. Vse je v redu. Torej, kaj je dobil razmišljate o Kotiček za primer, da se lahko zelo hitro pojavijo v okviru uporabe baze podatkov, ali odkrito povedano, tudi z uporabo realnem svetu stvari kot so bankomati, da bi dobili denar. Torej, tukaj je hladilnik. Recimo, da imaš eno preveč v vaš domu ali vaša hiša. In imaš enega cimra, in oba ste res všeč mleka za primer. Torej prideš domov iz razreda en dan. On ali ona še ni vrnil. Odpreš hladilnik. Bi res rad velik kozarec mleka. Ni mleko. Torej, kaj storiti? Zapreš hladilnik. Ste zgrabi ključe. Greš ven na trgu. In dobiš v vrsti na CVS na tiste samo blagajniški stvari, ki vedno traja dlje, kot dejansko ob blagajnikov. Kakorkoli že. Torej, medtem, dot dot dot, vaš cimer pride domov in on ali ona Podobno je Žudnja Za malo mleka. Torej, on ali ona odpre hladilnik, zgleda notri in oh, prekleto. Brez mleka. Torej, on ali ona vodi ven, se zgodi, da gredo drugi CVS, ki je bila le blok stran iz nekega razloga, in on ali ona dobi v vrsti za nakup malo mleka. Medtem pa prideš domov, ali ona pride domov, in kaj storiti boste na koncu imeli? Dvakrat toliko mleka. Vendar ne boste res všeč Mleko, da je veliko. Torej, sedaj imate toliko mleka, da zdaj eden od njih je le, da bo šel kislo sčasoma. Torej je to res slabo problem. Kajne? Kaj se je tako zgodilo? Torej v bistvu je to nekako A smešno npr. Ampak pod pokrovom motorja, kar smo imeli zgodi, tukaj je tako za vas preveril stanje nekaterih del pomnilnik, hladilnik. Oba si preveril stanje neke spremenljivke. Oba sta potegnila sklep, da si potem deloval naprej. Ampak na žalost, medtem ko vaš sostanovalec bil v trgovini, stanje, ki spremenljivka spremenila, on ali ona prišla nazaj in zdaj želi spremeniti stanje, vendar to je že spremenilo na njega ali njo. In seveda, on ali ona ne bi imela odšel v trgovino, če bi vedeli, da ste bili že na poti. Tako v realnem svetu, kako si lahko izognili tem problemom, ob predpostavki, da imate hladilnik, imate sostanovalko, in si dejansko všeč mleko? PUBLIKA: komuniciranje. DAVID Malan: komuniciranje. OK. Ampak, kako bi vi komunicirati? PUBLIKA: Pustite sporočilo. DAVID Malan: Pustite seznanjen, kajne? Vedno pustil sporočilo, na ljubitelji show. Vse je v redu, tako da je vedno pustil sporočilo, ali mu resnično všeč ključavnico ali kaj podobnega na hladilnik, da ohranja svoje cimer bo pregledal stanje da spremenljiva. Zdaj, zakaj bi to lahko bilo germane za Problem nastavite sedem ali na bankomatih. No, predstavljajte si svet pri bankomatu, kjer boste morda lahko šel do bankomata stroj tu, in še ATM tukaj. In to se dogaja zelo pogosto. In recimo, da je imel dva ATM kartice, ki je mogoče pridobiti. In se prijavite v obeh strojev učinkovito hkrati, upajmo nihče, medtem ko je iskal. In potem vnesete v kodo PIN približno istočasno. In potem narediš bilanco poizvedbo da vidim, koliko denarja imaš. In recimo, da imaš 100 $ ostane v vašem računu. Torej v bistvu hkrati, boste pravijo, ena, nič, nič, vpišete. In upajmo dobili nazaj nekaj denarja. Toda, koliko denarja bi dobili nazaj? Sedaj računalnikov ob koncu dneva, še posebej, če ste v pogovoru z strežniki, ni nujno, da počnejo stvari v vrstnem redu, ki je bilo pričakovano. Torej, predvidevam, kaj se zgodi, ker ne glede na omrežje hitrost vprašanj tam so ali vprašanja CPU obstajajo, ali kaj takega, domnevam, da Prvi bankomat preveri svoje stanje in vidi, oh, ta oseba je 100 $. Ampak potem postane raztresen, ker morda backup se dogaja, in zato je upočasnjuje. Ali pa morda med preverjanjem, omrežje povezava dobil malo počasneje, ker To se ne zgodi. Oni so fizične naprave. Torej medtem, drugi ATM sprašuje isto vprašanje. Koliko denarja imate David? 100 $ je odgovor. Toda, ker ima prvi ATM še ni poslano sporočilo odštejemo $ 100, tako Bankomati so pregledani trezorju banke, vidim tam je 100 $ tam, in zdaj obe naprave so potencialno bo izpljunil odgovor. No, to je super za vas, v nekem smislu če kakšna banka ne nazadnje se spremenijo znesek minus 100, ki jo nastavitev spremenljivka enaka kot vaša bančni račun enak 0, v nasprotju da delaš minus 100. Zdaj, v najslabšem primeru za banko - ali najboljše za banko, medtem, so vam $ 200, in vaš bančni račun zdaj kaže negativen 100 $, ki res ne vam koristi na vseh. Ampak bistvo je, da je ta dirka Pogoj za dve sostanovalci pridobivanje mleko ali dveh bankomatih, ki poskušajo dobiti denar in spremeniti stanje trezorju istočasno obstaja kateremkoli Čas imate zbirko podatkov. Zdaj problem določiti sedem to vprašanje Pojavljajo se v tem smislu, da če kupite Delež Facebook zalogi, nato pa za primer kupite drugo delež Facebook zalog, morate narediti Odločitev kot programer. , Da se odloči, kako posodobiti baze podatkov, odds so boste imajo eno vrstico za ta stalež, in to je eden od načinov za njeno izvajanje. In ti boš moral eno delnico FB, ki je njihov simbol zalog ticker za to ime, ali tega uporabnika ID, enotni identifikator. Ampak ista zgodba se lahko zgodi tukaj. Če boste to storili, izberite v SQL, kot boste videli V problem določiti sedem ko vidiš, oh, David ima eno delnico od Facebook zalogi. Dovolite mi, da zdaj to spremeniti, da bi dva delnic, ker hoče kupiti Drugi delež. Recimo David dejansko imela dva okna brskalnika odpreti, ali denimo, da to je skupni račun z dvema zakoncema, in oba poskuša izvesti Isti postopek, tudi tam, Potencial obstaja za odločitev, da bomo ki temelji na predhodni stanje v svetu - račun ima eno delnico - in tako ljudje, ali oba strežniki, zdaj poskusite reči, da prirastek dveh delnic. Toda v tem primeru, ste morda zaračuna mi denar za obe delnic, vendar poveča samo za to čas. Torej na kratko, temeljni problem tu, tako kot pri tistem vicu o odhodu Upoštevajte ali dajanje ključavnico na njej, je če se dve osebi ali dveh niti - pomislite na praske - Lahko preverite stanje neke spremenljivke in nato poskusite spremeniti to spremenljivko, ampak ti dve stvari ne dogajajo na istem času, vendar se lahko prekine drugih stvari se dogaja, lahko podatki priti v zelo čudnem stanju. In lahko koristi ali pa trpijo v smislu primer denarja. Torej, problem je določeno sedem, smo vam ta vrstica kode, ki je dolgo Skratka, rešuje to problem v MySQL. To zelo dolgo navodila, da ne celo ustrezal eni vrstici Zaslon tukaj zagotavlja, da vaš operacija je tisto, kar se imenuje atomski. Vse se zgodi naenkrat, ali to ne bi zgodilo. To zelo dolgo stavek ne more se delno prekine. In kaj počne, je dobesedno kaj piše. Vstavite v neki tabeli, ki sledi tri področja te posebne vrednosti, ampak na dvojnik ključa, ne delaj vložek. Narediti posodobitev. Torej, to je tako kot počne SELECT in VNESITE tako rekoč istočasno. In kaj je ključ, ki je verjetno se iz tukaj? Izkazalo se je, pa boste videli v Problem nastavite Sedem je spec, ker smo tam razglašena za edinstven ključ o tem mizo tako, da ne morete imeti več vrstic za isti uporabnik z Enako penny stock simbol - v tem primeru tukaj, DVN.V je neumno penny stock, da smo nanašajo na spec. Ker smo izjavila, da je edinstven, kaj to pomeni, da če vam poskusite vstaviti podvojene vrstice, si namesto tega bo, da ga dopolni brez kdorkoli drug, ki ima priložnost, da se spremeni stanje v svetu, bodisi. Torej na kratko, to zagotavlja Stvari so atomic. Bolj na splošno, čeprav, podatkovne baze kot MySQL - in vam ni treba to funkcijo p-set sedem, a vseeno imejte v mislih za prihodnost - podpreti tisto, kar imenujemo transakcije, , kjer boste lahko rekli, START TRANSAKCIJA dobesedno. Nato lahko izvedete dve stavki SQL. In izjavo SQL, kot boste videli v-p nastavite sedem, izgleda malo kaj takega. Posodobite tabelo imenovano račun. Nastavite bilanco stolpec, ki je enaka ne glede na bilanca stolpec trenutno je minus 1000, ko je število, številka računa, kot so ID uporabnika, enak 2, in nato posodobi Račun dot dot dot. Tako v smislu navadnega je, kaj ti dve Poizvedbe se zdi, da se delaš v realnem svetu smisel za bančništvo? PUBLIKA: Prenos prihrankov. DAVID Malan: Točno tako. Prenos sredstev iz enega računa na drugega. In to je še en primer, kjer ste res želim ti dve stvari, da se zgodi ali pa se ni zgodilo. Vi ne želite, da bi dobili nekaj, kar v Sredi njih in potencialno nered math, ali nered, koliko denarja imate, ali koliko Denar ima banka. Torej, kaj je res lepo o transakcijah MySQL je, da, in baze podatkov bolj na splošno, je, da se in pametne ljudi, ki jih izvajajo te funkcije ugotovimo, kako narediti prepričan, da sta od teh stvari se dogajajo ali pa sploh ne. In če ste resnično prizadevajo, da bi Spletna stran, ki se jih ljudje uporabljajo za kampus, ljudje v resničnem svetu, delaš Nekaj ​​v zagonskem smislu, to so vrste konstrukcijskih odločitev, da postale vedno tako pomembna. V nasprotnem primeru boste začeli izgubljati podatke, izgubijo Uporabniki, ali v najslabšem primeru kot Videli smo tukaj, potencialno izgubili denar. Torej še enkrat, več o tem v problem nastaviti sedem, kot tudi morda za nekatere ste v končnih projektov. Torej, kaj je spremenilo tisto sliko smo imeli pred nekaj trenutki samo na en način. Torej, kaj mi dejansko videli, če bom lahko - nope, da je šel. Tukaj je. Torej, to je, če smo zapustili zadnjič. In se izkaže, da bomo kretnjo še ena stvar v mešanici tukaj - jezik se imenuje JavaScript. Torej JavaScript dejansko ustreza v tem kosu - in nisem povsem pustiti dovolj prostora, tako da to ni zdaj v merilu. OK, to je res patetično. OK, tako da je JavaScript. Vse je v redu. Res sem to delaš medvedjo uslugo. Vse je v redu. Torej JavaScript je drugo programsko jezik, in naša zadnja, če to pomaga pomiriti, da ni veliko več od požarnih hidrantov tukaj. Torej JavaScript je tudi razlaga jezik, kar pomeni, da ne prevedete v ničel in enic. Pravkar ste ga zaženite. Toda kaj je bistveno drugačen z JavaScript običajno je, da vam ga ne predvajajo na svoj spletni strežnik. To ne povozi v aparat po sebi. Namesto, gets prenesli uporabnik preko HTTP v svojem brskalniku - Chrome, Safari, Internet Explorer, Firefox, karkoli - in to je brskalnik, ki izvaja to Zlasti programski jezik. Torej, da bo jasno, PHP je bila doslej izvrši bodisi v ukazni vrstici v Naša črno-belo okno, na strežniku podobno napravo, računalniško všeč aparata, ali pa je bilo ki jih spletni strežnik izvede teče na računalniku. Ampak tema tukaj je, da PHP doslej je bil izvršen strani strežnika, tako uporabnik in uporabnikov brskalnik nikoli ne vidi linijo PHP kode. V bistvu, če ste kdaj odprete brskalnik za vaše spletne strani ali drugega in si dejansko videli PHP kodo v vašem oknu nekdo je zamočil. Ker to ni mišljeno, da bo poslati v brskalniku neposredno. To naj bi se izvajale, in obrnil v nekaj podobnega HTML. Vendar JavaScript je bistveno nasprotno. To je pomenilo, da je treba zagnati navadno v notranjosti okna brskalnika uporabnika. In katere vrste spletnih strani uporabite JavaScript nato pa v teh dneh? Všeč mi je dobesedno vsako priljubljeno spletno stran. Vsak spletni strani, da se vidva uporabite dnevno uporabljajo JavaScript za Najenostavnejši in celo najbolj seksi lastnosti. Torej nekaj podobnega Facebooku Klepet, če boste uporabili to. Kako se je to dejansko deluje? No tako daleč, vse stvari ki smo jih narediti z HTML in PHP predpostavlja, da si potegnite navzgor URL in ga pritisnite tipko Enter, in boste videli nekaj HTML vsebine. In kliknete na povezavo, ki se spreminja URL, spremeni stran in osvežitev nekatere nove vsebine. Kliknite drug URL ali predložiti obrazec, se odnese na drugo stran in boste videli nekaj novih vsebin. Vendar z uporabo nekaj podobnega Facebook Chat, ali Gchat ali Google Maps, redko se celotna stran osveži, tako da vidite beli zaslon za trenutek in Nato novo vsebino. Namesto, spletne strani so danes dinamično dobili spet posodobiti in znova in znova vse vrste v ozadju. In izkazalo se je, da ko gredo na nekaj takega kot so Facebook, ali Gchat, ali Gmail in posodobitve stran samodejno, brez ponovnega celoten zaslon, kaj se je zgodilo, je, da Vaš brskalnik je dosegla nekako na skrivaj dodatne zahteve HTTP - ne za vse spletne strani, vendar samo za majhne kose podatkov, kot so hitra sporočila, da je tvoj prijatelj pravkar Vi ali posodobitev stanja poslal, da nekdo vas, ali tweet pravkar poslal da je nekdo pravkar poslal. To je samo tako malo prošenj za podatkov, nato pa z uporabo JavaScript, to programski jezik, spremeniti kaj Spletna stran izgleda kot brez Strežnik pomaga, brez strežnika ustvarjajo to HTML. Torej na kratko, lahko JavaScript treba uporabiti, nato ne samo prinese nove podatke iz strežnik, brez ponovnega celoto stran ali pa je predložil obrazec. Lahko se uporablja tudi za spremembo tako imenovani DOM - Dokument objektni model - ki je samo fancy način pravijo drevo HTML da smo videli zadnjič. Torej, da bi pomirili, da je JavaScript skladenjsko tako podobna C, kot dobro. Ni glavna funkcija. Pravkar ste začeli pisati kodo in dobil bo izvršena, ali razlagati bolj pravilno. Pogoji, ki bo videti takole. Ne razlikuje od C ali PHP za to zadevo. Boolove izraze ali-ed skupaj bo videti takole. Anded skupaj videti takole. Stikala bo videti takole. Kajti zanke izgledala takole. Medtem ko bodo zanke izgledala takole. Storiti, medtem ko bodo zanke izgledala takole. To je nova. Torej JavaScript ni še foreach konstrukt po sebi, ampak je to konstrukt Za spremenljivka i v array, in sem v to Primer postane vrednost indeksa. Tako da je malo drugačen od tistega, foreach, čeprav nove različice JavaScript prihajajo ven ves čas, tako tudi te jezikovne značilnosti se razvijajo. In kot prahi, JavaScript teh dneh Lahko se uporablja tudi v strežniku tako kot PHP uporabe okvira, imenovano Node.js. Eden od CS50 je TF, Kevin, je pripeljala Seminar o Node.js ki je na voljo na spletni cs50.net/seminars. Torej, če ste radovedni, veš, da ti To lahko uporabite na strani strežnika, kot dobro, ampak to je dokaj nov trend, ampak močan ena na to. To je nekoliko drugačna. To je niz v JavaScript. In kaj vas udari kot drugačna v primerjavi s C ali PHP? Obstaja nekaj hitrih zgodbe mi lahko poveste tukaj. Kaj manjka v primerjavi z PHP? PUBLIKA: [neslišno]. DAVID Malan: Ja? Žal mi je, še enkrat povedati? PUBLIKA: Ne napovedujemo Vrsta spremenljivke. DAVID Malan: Ne napovedujemo Vrsta spremenljivke. Tako pravzaprav precej kot so PHP, nismo opredeljujejo vrste te spremenljivke. Namesto tega smo bolj na splošno pravijo var za spremenljivko. Nimamo PHP nadloga znak za dolar, ki je hkrati mučen tipa, ne bolj jasno, da Nekaj ​​je spremenljiva. Ker so tu, mi smo nekako nazaj Pristop C je s samo kliče spremenljivka z imenom želimo dati, kot so številke. In prav tako, kot so PHP, imamo oglati oklepaj za Vrednosti znotraj te matrike. Torej spremenljivk v JavaScriptu tudi lahko videti takole. Opazil sem, da je to niz imenovan s, ampak prav tako imamo, ki niso navedeni da je niz. Tukaj, čeprav je funkcija, ki ne obstajajo na enak način v PHP, vendar je malo podobno. To je objekt v JavaScript. In predmeti so nekako Swiss Army Nož strukture podatkov v ta vas Uporabite jih lahko za poljubno število stvari. Tukaj, na primer, smo razglasitvi spremenljivka se imenuje quote. Vrsta spremenljivko je objekt. Lahko si misliš, da je to C struct da ima ključe in vrednosti. Simbol je ključ. FB je vrednost, očitno Borzni simbol. Vejica. Cena je še en ključni, njena vrednost pa je očitno plavajočo vejico, ali število bolj splošno v JavaScript, za 49,26 $. Torej PHP nima - nismo videli v PHP predmetov dokaj kot je ta, vendar nismo videli analogno, , ki je bilo kaj? PUBLIKA: [neslišno]. DAVID Malan: Povezovalne matrike. Zato ker ima PHP asociativne nize katerih sintaksa je vedno nekoliko tako drugačna - smo videli oglatih oklepajev. Videli smo čudne simbole, puščice. JavaScript ima predmetov, vendar je to predvsem pomenska razlika in drugačna sinonim za zdaj. Vendar pa, kot prahi, PHP ima tudi predmetov na način, ki Java in drugi jeziki imajo predmetov objektno programiranje. Ampak bomo uporabili to le za podatkovne tipe, za zdaj. Predmeti in asociativne nize. Ta je lahko bi bilo malo bolj jasno. Evo zakaj je objekt uporaben. Če želite, da ugotovi, študent, kot Zamyla, lahko dejansko zaobjeti tako rekoč v notranjosti, ki nasprotuje uporabi zavite oklepaje, tako kot Pred cel kup tipk in vrednote v tukaj. Imamo ID, hišo, in ime Zamyla, ki mu sledi s podpičjem kot običajno na koncu. Navzdol tudi tu, je to nekoliko različni, vendar tudi zelo močna v teh dneh. Tukaj je matrika, in vem, da zato, ker tam je oglati oklepaj up Zgornji in oglati oklepaj na dnu. In to je matrika, katere podatke tip očitno v JavaScript? To je niz je videti kot tri predmete. In vem, da je le predmet zaradi zavite oklepaje. In obvestilo, da je odprt curly brace, nekatere stvari, blizu kodrasti naramnicami, vejica, nato pa nekaj več, vejica, in še nekaj več. Torej, to je tri argumente ločeni z dvema vejice. Torej, to je niz treh objektov. In vsak od teh objektov se zdi študent ali uslužbenec nekaterih sort, vsak z ID, hiša, in ime. Ampak sem poklical tega, kaj imenovano JSON - JavaScript Object Notation. In to je format podatkov, ki dejansko je tako zelo priljubljen in v modi v teh dneh, da če ste napisali aplikacija, ki uporablja Facebook API, Twitter API, res skoraj vsaka API tam v teh dneh, vključno z nekaterimi lastno CS50 je, Podatki, ki jih dobite nazaj, ni v Stara šola v CSV formatu. Saj opozarjajo, da CSV je zelo preprosta. To je samo stolpci ločeni z vejicami. JSON podatkov vam daje več metapodatkov. Združuje ključ z vsako vrednostjo, tako nimajo samo domnevati, da stolpec Ničti je ena vrednost stolpca ena je še en, dva stolpca je drugo. Vse, kar je v JSON objekt tukaj je nekako self-opisovanje, ker vsak eno od imen v tej datoteki je dobesedno ime pred njo kot kotirajo niz. Tako da je lahko pogled na Nekaj ​​primerov tukaj. Naj grem v aparat. In me spustili v našo vhost Imenik v javnosti. In mi gredo v JavaScript imenik. In gremo naprej in odpiranje dom-0.html, kjer DOM samo pomeni, Dokument objektni model. To je drevo stvari, za katere Sem jih prej omenil. In mi predlagamo naslednje. Tukaj je spletna stran, katere Telo je zelo preprosta. Torej, tukaj na dnu, Opazil sem imela obliko. Videli smo pred tistimi. To ima dva vhoda, od katerih ima ena ID imena, od katerih ima en tip predložijo, in prvi eden je vrsta besedila. Torej je to dejansko zveni precej preprosta. Greva tukaj. Vrnimo se na to stran tukaj. Pojdimo v localhost, in gredo v naš imenik JavaScript in pojdite na dom-0, in tu imamo ta obrazec. Tako da je očitno Vse to počne stran. To je polje imena z gumb Pošlji. Ampak ne bom uporabljati PHP tukaj. Jaz bom naredil vse strani odjemalca tako rekoč v JavaScript takole. Obvestilo, da sem res dobila ime Področje tega vhoda edinstven identifikator, ki bo dejansko Reši me nekaj časa v trenutku. In opazil sem predstavil novo tablico v glavi moji spletni strani,  tag. Tako da je v tem smislu, da je JavaScript programski jezik na strani odjemalca. V tem primeru, tako kot CSS, sem dal ravne znotraj mojega HTML. Opazil sem razglasila funkcijo , ki izgleda malo všeč PHP sintaktično, ampak to je dejansko JavaScript, ker še enkrat, to je client-side v brskalniku. In ugibati, kaj se to dogaja, da narediti, čeprav so nekatere od sintakse Tukaj je nova. PUBLIKA: Pozdravi kdorkoli. DAVID Malan: To se dogaja, da se pozdravi da kdor obišče to stran. Torej, kako? Tako obvestilo, se izkaže v JavaScript tam je opozorilo (funkcija). To je zelo nekako žalostno, da je funkcija res samo ponavadi nagajati uporabnike. To ni tista, ki jo je treba res uporabiti Značilno je, ampak to je hiter in umazan način nekako tiskanje nekaj za grafični uporabniški vmesnik, kot brskalnik. Opazil sem, da imam Niz v enojnih narekovajih. Izkazalo se je, da za razliko od C, JavaScript lahko dejansko uporabljate single citira, in odkrito povedano je to nekako stilistične konvencije med JavaScript programerji uporabiti enojne narekovaje. PHP, jih dejansko imajo nekoliko drugačen pomen. Ampak za zdaj, samo vem, da To je edini razlog. Konvencija v JavaScript je pogosto Uporabite enojne narekovaje, vendar smo lahko uporabili narekovajih v obeh mestih, kot tudi. Torej je to zanimivo. Spomnimo, zadnji čas, da smo imeli, da slika na zaslonu, ki je oblikovala drevo , kjer boste imeli HTML vozlišče in glavo vozlišče in telo vozlišče, in potem nekaj besedila. Vendar je bila ena posebna vozlišče na Zelo top, da sem poklical dokument. No, izkazalo se je v JavaScript, vsak Ko boste napisati program v JavaScript v brskalniku, morate imeti dostop do posebna globalna spremenljivka. Pisane v duhu superglobals PHP, To se imenuje v vse male črke dokument. To je kot struct, ampak to struct Ima tudi funkcije znotraj njega. Torej C struct ima samo podatke običajno. Vendar JavaScript predmet, kot je to tehnično je tako ima funkcije, sicer znan kot metode, v njem. In lahko pokličete funkcijo znotraj Ta predmet dobesedno opravlja svoje ime, pika, nato ime funkcijo, ali spet metoda. To je samo sinonim, res. In kaj je ta funkcija ne? Lahko nekako ugibati z njenim imenom. Get element z ID. Torej, to se dogaja, da poiščete spletno stran, iskanje tisto drevo, ki išče karkoli vozlišče, AKA element, ima edinstven ID citatom citata imena. In potem, kaj bom naredil? Jaz bom dobil vrednosti znotraj da vozlišče v drevesu, in bom nekako pozdravit tem imenom. Torej predvidevate, čeprav Nismo še videl, kaj storiti, plus Simboli pomenijo tukaj in tukaj verjetno? PUBLIKA: Concatenate. DAVID Malan: Concatenate. Prav, in to so le nekako oblikovati sklepe ljudje so že pred leti. V PHP, sestavite Stvari s pikami. V C, ko skoči skozi več obroče in klic funkcije, kot strcopy () ali strcat () ali druge takšne funkcije. Ampak v JavaScript, uporabite pluse. Torej, to je samo concatenating trije nizi - Pozdravljeni, ime, nato pa klicaj. Torej, kdaj in zakaj je ta funkcija pozval, čeprav? No, ugibati iz HTML na dnu. Zakaj se pozdravi () pozval, ali kdaj? Očitno, kot najbolje znam povedati, na predložiti ob predložitvi tega obrazca, Jaz bom naredil vse, kar je znotraj teh ponudb. In še posebej, bom poklicati pozdravi () in se nato vrne false. No, pa poglejmo, kaj se je neto Učinek je tu prvi. Naj gredo naprej in tip v, recimo, Loren, Submit. Pozdravljeni Loren. Poglejmo, če je to morda samo Srečo izvajanje. Nope. Tako da je tipkanje ven karkoli ime pravzaprav sem dal tam. Ampak obvestilo, kaj se ne spreminja. URL je še vedno dom-0.html. Ni register.php. Ni druge datoteke. Ni dejanje atribut. Torej, kaj je to vračanje false verjetno delaš? Zato kličem pozdravim () in nato vračajo verjetno ne drži? Kaj se ponavadi zgodi, ko boste kliknili Predložijo na obrazcu, ki še imamo videli v preteklem tednu? PUBLIKA: [neslišno]. DAVID Malan: Gre nekje, kajne? Gre za nek ciljni URL. Vendar ne želim, da se to zgodi tukaj. Želim moja spletna stran, ki je popolnoma dinamično, kot so Gmail, kjer je nekoč ste tam, ostani tam. URL ne spremeni na način, ki označuje celotna stran se ponovnega nakladanja. Namesto, samo želim nekaj spremeniti kot je tiskanje nekaj tu na zaslonu. No povej mi čist to gor malo. Dovolite mi, da odprejo ne Dom-0, vendar Naj odprejo Dom-2. Samo, da ste videli nekaj sintakse tukaj. Izkazalo se je, da tisto, kar smo pravkar Poskusil je z uporabo surovega JavaScript. Torej, to je resnično jezik JavaScript. Nekateri od vas morda poznate knjižnica se imenuje jQuery. Torej jQuery ni enak stvar, kot je JavaScript. To je samo knjižnica, ki res pametno fant napisal in populariziral kot da skoraj vsi na svetu, zdaj uporablja jQuery pri uporabi JavaScript. In na prvi pogled, pošteno, Izgleda malo bolj skrivnosten. Vendar boste našli, še posebej, če greš tam za svoj končni projekt s spleta razvoj, boste ugotovili, da je to očisti stvari in vam prihrani precej nekaj vrstic kode. Torej, kaj je samo pogled na kako ta oblika dela. Obvestilo, kaj sem odstraniti navidezno iz mojega HTML? Ni na predložitev prekladanje tako rekoč. Ni atribut. Ker veste, kaj Res nisem všeč? Počutil sem se, kot da so bile pada v stare navade tam. Tako kot se je začelo, da se počutijo površni da se mešata tako CSS z HTML, ker ste nekako metanje različnih jezikov po vsem mesto, podobno kot je to začelo čutiti kot slabe ceste, da gredo dol, kjer Jaz bom dal JavaScript kodo znotraj mojega HTML namesto da bi jo faktoring ven. Torej, to je lekcija tukaj. V Dom-2.html, jo bom faktoring ven. In delam stvari nekoliko drugače. Za zdaj bom val moje roke kaj je to res Pod pokrovom. Ampak samo za zdaj predpostavimo, da je prvi vrstica kode v tej knjižnici imenovano jQuery pomeni le, ko Dokument je pripravljen, naredite naslednje. Ker spletne strani lahko traja nekaj časa za nalaganje. Lahko bi bil na počasnem internetu povezavo, in to bi lahko vrti in ožemanje, in na koncu je nabita. Ta vrstica kode samo pravi, počakajte celotna stran pripravljena, dokument je pripravljen, pred izvršitvijo te kode. In zdaj opazil, da je to verjetno Najbolj koristen prvi vzeti jQuery. Ta postavka tukaj je zelo podobna v duhu s tem precej daljše črte tukaj. Ker je v surovem JavaScript kodo, tam obstaja celovit dokument globalne objekte, ki Ima funkcijo imenovano getElementById () ljudje, ki so pisali jQuery poenostaviti, da bi samo rekel, znak za dolar, in nato znotraj oklepaje dal dve ponudbi, in nato dal simbol hash, ki mu sledi edinstven ID želite, da zgrabite. Torej je to enako document.getElementById. Medtem,. Predloži samo pomeni na predložitev ne glede na obliko, da ste sklicuje na levo, pojdite naprej in izvršiti to. Ampak to je zdaj radovednost preveč. Kaj je čudno, kaj Tu sem izpostavila? Ne samo, da je vrsta skladenjsko novo, tam je tudi nekaj manjka. PUBLIKA: To je pravkar klical funkcijo? To se ne imenuje pozorni? DAVID Malan: Ja. No, tako alert () je navzdol sem, da bo pošteno. Ampak ni omenjen ime, kot veste, foo ali Nekaj ​​sem gor. In res, to je ena od značilnosti JavaScript, ki je precej zmogljiv, ampak tudi povsem novo. In PHP dejansko ima tudi to. Dovolite mi, da gredo naprej in narediti Nekaj ​​zelo hitro. Dovolite mi, da gredo naprej in to dal ven. Dovolite mi, da to storijo. Funkcija. Recimo tega vodnika (). Funkcija za prekladanje tako rekoč. Nekaj, kar se obravnava nekaj operacijo. Dovolite mi, da počisti svoj zamik. In to mu tukaj. In dal, da je tukaj. Jap. OK. Torej, zdaj imam funkcijo imenovano Vodnik (), da jaz ne vem kaj počne še. To je samo še te stvari. Ops. Je preveč. Naredimo to. Vse je v redu. Žal mi je. Vse je v redu. Dovolite mi, da to storijo. OK. Da izgleda lepo in naravnost naj zdaj. Dovolite mi, da to storijo. Ali to. In OK. Torej, zdaj, kaj je dal to tukaj. Nič več programiranje na letenje. OK. Torej, zdaj, gremo nazaj kjer se je začela zgodba. Prej sem rekel, da je ta linija tukaj pomeni, da ko je dokument pripravljen, greva naprej in to. Kaj hočem storiti? No, posebej pa želim iti naprej in naredite naslednje. Izvršiti to vrstico kode, nato pa Kaj hočem storiti, je to imenujemo delovati, ko se predloži obrazec. Zdaj je to tisto, kar je zanimivo. To ni samo funkcija. Opazil sem, nisem za oklepaje Tukaj na običajen način. Jaz sem dobesedno mimo funkcijo imenovano Vodnik () na drugo delovno mesto imenovano predložijo () kot argument kot čeprav je kot spremenljivko. In to je eden od značilnosti JavaScript je Funkcije sami so res samo predmeti. Dejstvo je, da si res samo spremenljivke neke vrste. In če je ime funkcije je Vodnik (), ni nobenega razloga, da ne morem dajati v kot argument tukaj. In to pomeni, da ko obliki z ID demo je predložila, pokličite to funkcijo. Ampak zdaj, če sem razveljavite vse to, zakaj potem sem morda naredil To je pred nekaj trenutki? No, to je anonimen funkcija. Ker odkrito povedano, sem spoznal, zakaj sem moti, da izgubljati časa razglasitvi Funkcija se imenuje trener (), samo, da pokličete se je v enega in edinega enem mestu? Če ne rabim imena, in jaz ne morali poklicati več kot eno mesto, kaj je samo izvajanje funkcije tam, kjer rabim ga. In tako JavaScript in PHP podpirajo, kaj Imenujejo se anonimnih funkcije, ki Dovolite mi, da stori točno to tukaj. Vendar smo šele praskanja površine. Oglejmo draži z le nekaj Končni primerov tukaj. Če grem v quote.php. Opazimo, da je to pravzaprav PHP Funkcija, PHP program, ki sem napisal da pričakuje HTTP parameter se imenuje simbol, in sem lahko preide v vrednost kot FB. In če smo dejansko pogled na viru kodo, to je poizvedovanje brezplačno spletno mesto imenovano Yahoo Finance, tako kot p-set sedem, in to je vračanje k meni nekaj v navidezno format znano, je JSON - JavaScript Object Notation. To je samo predmet. Opazili zavite oklepaje, citati, debelega črevesa, in vejice. Zdaj medtem, to je zelo kul. Ker sem verjetno lahko uporabite programiranje jezik za ustvarjanje URL-jev da je videti takole dinamično, kajne? To lahko spremenite v Googlu in se vrnem Googlov stock ceno $ 1,017.55. Torej, da vidimo, če tega ne moremo uporabljati zdaj. Naj grem na Ajax 0 tu, ki Izgleda, da je naslednje. To je samo spletna stran, ki ima obrazec z gumbom. Dovolite mi, da sem šel naprej in tip v YHOO simbol Yahoo parka, kliknite Pridobi Citat, in zdaj opazil sem prišel Opozarjanje z 32,86. Dovolite mi, da dejansko šel na Ljubitelj različico za to stran, različica dva, in vnesite recimo Microsoft, MSFT. Get Quote. In sedaj opazili, ni opozorilo. Obvestilo, kjer piše cena določi? Tukaj je najpreprostejši primerov, ki namiguje na kakšni Gchat in Facebook Klepet in Gmail, in druge take spletne strani, ki delajo z dejansko spreminjanje spletne strani. Opazijo. Dovolite mi, da osvežite stran. Naj se odprejo inšpektor Chrome. Naj grem na elemente Kartica tukaj. Zdaj opazil, če sem povečate dol in odpre to gor, opazite, da je to moj HTML DOM - moj model dokument predmet. To je moja HTML. Toda zdaj opazil, čeprav se dogaja da bo malo težko, da ga vidim v obeh mestih hkrati, če sem tip v FB tu gor, pazi na dno zaslona samo. To je dejansko spreminja Moj HTML na letenje. In to je to početje preprosto s tem, kaj takega. Če sem odprla Ajax 2, obvestilo o izvajanju nekaj tako seksi, kot je da, čeprav je to precej grdo, ampak kot prefinjene, kot da funkcionalno, da ima nekaj HTML na dnu. Opazil sem rabil označiti. To smo že ne uporablja, vendar je to kot, vendar ne prisili vse na novo linijo. Samo naredi pravokotno regijo na isti liniji v bistvu. Obvestilo, da sem dal to je ID ceno. In se izkaže z enako JavaScript knjižnico, imam funkcijo imenovano quote (), ki se imenuje kadarkoli Obrazec je predloženi. In kaj počnem to. Jaz razglasitvi spremenljivke v JavaScript imenovano url, varčevanje vrednost quote.php? simbol =. Z drugimi besedami, sam sem že za pripravo zahtevo HTTP in nato Jaz sem concatenating na da s plusom ne glede na element z ID od simbola, ki je obvestilo, da tekstovno polje desno dol. Torej, tako kot smo imeli obrazce v preteklosti. In potem se je izkazalo v jQuery, če pokličite. val (), ki kliče iz val funkcija, funkcija vrednosti, da dobi karkoli je uporabnik vtipka In potem ves promet v omrežju da se zgodi, je to. $. GetJSON. In kot prahi, znak za dolar je samo okrajšava zapis. To je res jQuery.getJSON. Spravite me k JSON s tega naslova URL, in ko Zahteva pride nazaj, to imenujemo funkcija in podajte kot argument karkoli se je vrnil iz strežnika. Torej, z drugimi besedami, če se vrnem k brskalnik in grem nazaj na quote.php, kaj je moja brskalnik počne, je pridobivanje ta kos podatkov. In ko sem šel na tej spletni strani tukaj, opazili, če bomo namesto tega šel v omrežje zavihek in ga počisti, in nato vnesite v nekaj podobnega GOOG za Google in Get Citat, opazili stran ni spremenila. Vendar je bila zahteva HTTP naredil in kaj prišel nazaj, če gledamo Odziv je cel kup JSON da smo končno pogledali z to preprosto linijo tukaj. Podatke je tisto, kar je gotten od strežnika. Cena je ime Ključ me skrbi. Torej data.price mi daje to. Sedaj Medtem, in to je zadnji primer. Lahko naredite še več z strani. Ena pravzaprav tudi dva. Mi lahko prinese nazaj označiti, če se spomnite tega. To JavaScript. To lahko storimo. Zelo razburljivo. Bomo pustite, da kot Cliffhanger. Toda še bolj vznemirljivo, lahko stvari, kot je ta. Če grem na geolokacije-1, se izkaže, da Chrome ne ve, da smo v zemljepisna dolžina 42.37. -71,10. Tako da je še bolj tam na razpolago. Vendar več o tem naslednji teden. Se vidimo v ponedeljek.