DAVID Malan: Olgu. See on CS50, ja see on nädala lõpuks üheksa. See oli keeristorm üle Viimase paari päeva jooksul. Ja probleem pani seitse, kui sa põlve sügavale ta aru, seal on üsna natuke uus, mis seal sees on. Aga vaatame, kas me saame panema kõik koos siin lühidalt enne siis pöördub ära veel teises suunas ja nägemine Kus mujal me minna ei saa. Seega seni oleme rääkinud HTML. Me oleme rääkinud CSS. Me oleme rääkinud PHP. Sul tekkisid SQL. Täna me räägime natuke umbes JavaScript. Aga kuidas kõik need erinevad keeltes kokku sobivad? Nii me rääkisime eelmisel nädalal umbes mõiste, mille server. Teeme lihtsalt joonistada ristkülik nagu web server siin. Ja web server teenib kindlasti faile. Ja mõned neist faile saab HTML-faile. Nii et üks asi, mis veebi server saab sülitama olla faili me lihtsalt juhtida niimoodi sisaldavad mõned HTML. Nii üldarusaadavat mõttes, mida Mis HTML saate teha? Publik: Page välimus kena. DAVID Malan: OK, teeb lehe välimus kena, kuigi ma arvan, et olen tõestanud et muidu. Nii HTML ei lase sul panema lehekülge struktuurilt ja see võimaldab teil omamoodi esteetiliselt märgistada lehel märgistada staatiline sisu, nii et te saab siis vaadata seda brauseris. Aga see on võti. See on staatiline sisu. Sa kirjutad seda, mida salvestada, ja siis vedada. Ja web server siis teenib ta kuni oma külastajaid. Aga me Stilisoida asju kasutades erinevat keel üldse. Hakkasime kasutama style atribuut teatavaid koode. Ja style atribuut paneme asjad nagu kirja suurus ja värv. Ja sa oled ilmselt hakanud avastama, või sa varsti lõplikuks projektide potentsiaalselt veel teisi omadused, mida saab kasutada CSS. Ja nii üldarusaadavat mõttes, mida tõesti siis ei CSS teha? Need on vaid näited. Mis see lasta sul seda teha HTML ei tundu, mida oleme näinud siiani? Publik: Määratle laadid ise. DAVID Malan: Määratle laadid ise. Nii määratleb asjad klasside te võivad olla tekkinud või üheselt kindlaks sõlmede dokument nii et saate Stilisoida neid. Aga täpsemalt, ma ütleksin, et CSS tegelikult võimaldab teha asju viimane miil ning võimaldab teil määrata palju täpsemalt esteetika, arvestades HTML enamasti võimaldab Sa struktuuri saidile. Ja kuigi seal on mõned vaikimisi, nagu nägime silt rubriik tag, mis jämedalt öeldes tehtud asjad suur ja julge. See on üsna üldine määratlus tag - suur ja julge. Mis font size on? Mis värvi see on? Kuidas julge on? Ja CSS võimaldab rohkem peeneks tune asjad niimoodi. Samuti paigutus, nagu mõned teist on näinud. Ja ausalt öeldes, CSS on natuke räpane keel. See on väga võimas, et saate sõna otseses mõttes igal veebilehel, et olete näha veebis täna, kuid see on selline valu kaela. Ja mõned teist on põrutasin oma peaga vastu seinu juba lihtsalt teha midagi loll nagu keskus menüü probleem pani seitse kui oled õppinud Sel hetkel juba. Aga aru, need asjad saada lihtsamaks ajas. Te hakkate märkama mustreid. Ja jälle, Google on sinu sõber eri viise, mille abil saab lahendada selliseid probleeme. Julgen öelda, CSS ja HTML enam üldiselt, siis on võimalik lahendada probleeme palju rohkem võimalusi, mis kõik võiks väga õige olla, kui sa saaksid midagi nagu C, isegi nüüd PHP või JavaScripti. Seal on lihtsalt palju erinevaid kuidas panna asju teha. Aga see hakkas saada räpane, me ütlesime. Just selline segunemine oma HTML ja oma CSS stiilis atribuut oli veidi lohakas. Ja nii me selle asemel öelda, omamoodi abstraktselt öeldes, et sa peaksid vähemalt hakkavad tegur välja oma CSS ilmselt. Ei oma stiili tunnused, kuid vähemalt kasutada style tag sees, mida osa veebilehe? Publik: Head. DAVID Malan: pähe. Senini oli meil ainult pealkirja üles olemas, kuid saate lisada ka stiil sildistamiseks ja võite panna CSS jämedalt räägi poole lehekülje ülaserva. Aga siis võtsime asjad sammu edasi ja me tegureid, et rohkem eraldi faili. Ja nii need kaks faili olid kuidagi nüüd seotud. Ja tõepoolest see oli tag et seda tegin. Ja mis oli üks üldine põhjusi faktooring meie CSS kõik rohkem? Publik: korduvkasutamine. DAVID Malan: korduvkasutamine. Eks ole? Võite näinud p-set seitse juba et palju lehti, ostmine lehel müügi lehele, portfelli lehel, on ilmselt struktureeritud mõnevõrra samamoodi. Seal CS50 rahandus logo ülaosas kui sa oled otsustanud, et seda muuta. Seal on jalus allosas lehekülge. Ja CSS võimaldab teil siis tegur see välja see eraldi faili, nii et kui sa tahad midagi muuta maailmas üle kogu oma saidile, saate tõesti lihtsalt muuta seda ühes kohas. Aga seal on hind, mida maksate potentsiaalselt poolt, kes on arvutatud välja CSS mu HTML faili eraldi faili viitamise seda tag, mis me nägime esmaspäeval. Mis võib Puuduseks on see? Mõeldes tagasi nädal tagasi, et kui me oleme räägime HTTP ja TCP / IP ja kuidas Internet töötab. Midagi on siin? Publik: See võtab rohkem aega. DAVID Malan: See võtab rohkem aega. Miks? Publik: [kuuldamatu]. DAVID Malan: Jah. Nii et see väidetavalt võtab natuke rohkem aega. Sest üks, CSS on ilmselt ei ole samas failis. Nüüd sa pead tegema mitte üks, vaid kaks taotlust. Ja kõik need taotlused, nagu nägime Chrome nn inspektor, ja me vaatasime võrgu tab, iga neid faile on vaja ühe HTTP taotluse, mis me nägime võtab mõned ajaga. Nüüd võib-olla see ei ole palju. Võibolla on see vaid 20 millisekundit. Võib-olla on 200 millisekundit. Aga mõtle lehekülg nagu Facebook, või CNN või Google, mis on palju suuremad näited me oleme vaatasin siiani. Need leheküljed võivad olla kümneid faile, millest igaüks võib nõuda faili allalaadimist. Nii et asjad võivad potentsiaalselt hakata aeglustuma. Ja eriti need päevad, mil me kõik mobiiltelefonid taskus ja aeglasem internetiühendused, võttes oodake veel paar millisekundit, paar rohkem millisekundi täiendavate faile saab tegelikult aeglane. Latentsus on sõna, mis kirjeldab objekti ootab, et sul on, et sa tekib siis, kui ootad mõned tükk informatsiooni. Aga ei pea. Nii see ei ole kõik omamoodi - see on tegelikult natuke kõikuma siin. Ohustavad nüüd, aga brauserid saab teha kui nad on targad, et vältida oleks vaja taotleda sama styles.css faili uuesti saab teha mida? Cache ta. Nii vahemällu - C-C-H-E - Üldiselt tähendab siin lihtsalt säästa fail, mida taotletakse esmakordselt, ja Seejärel kontrollige oma cache seda. Kontrolli oled omamoodi hoiuruum, ja kui sul on juba koopia styles.css, isegi kui mõned teised lehekülje p-set, või mis tahes veebilehel, taotleb uuesti, lihtsalt anda kasutaja sama puhverdatud koopia. Ei viitsinud seda taotlevad. Need on valdavalt olemas, kuigi, nagu mõned teist on rakendunud üle p-set. Kui teete muudatusi serveris ja sa lähed tagasi brauser ja te reload, mõnikord brauser ei sulle teene ja ei häiri uuesti allalaadimist styles.css fail sest nüüd, mis on vastuolus et neid stiile, et Facebook kasutab muudame tund tund või igapäevases? See on üsna väike. Nad võivad aja jooksul muutuda, kuid mitte minut või tund. Nii trikk, lihtsalt FYI tehes web arengut, on sageli hoidke tõstuklahvi näiteks ja seejärel klõpsake laadida oma brauseris, ja see tavaliselt sirvija reload kõik, isegi kui sul on juba see vahemälu. Nii et taas, tasa ja varjuküljed, kuid neid kõiki lõpuks disaini otsuseid. Nüüd, me ei ole lihtsalt lõpetada lugu siin. Kui ma nüüd tagasi minna ja edasi ja tagasi ja tagasi alustasime tutvustada mitte ainult HTML, kuid PHP. Nii üldarusaadavat mõttes, mida php tehkem? Publik: [kuuldamatu]. DAVID Malan: Mis see on? Publik: Hakata loogika arvesse kood. DAVID Malan: Jah, tutvustada loogika oma kood. Nii et see on tõsi programmeerimiskeelt silmad ja muutujate ja funktsioonid ning tingimused, ja kõik asju, mida me oleme kasutanud viis tagasi kui alates nullist. Ja PHP, mida me oleme näinud, mida saab kasutada kas käsurealt - see ei pea midagi tegema, web, kuigi see on tegelikult alguse ja mida see kipub olema hea ning soodustab - kuid mida saab kasutada PHP lihtsalt loomu ning asjaolu, et see on print () funktsioon ja printf () funktsiooni, või echo () funktsiooni. Seal on kobarad võimalusi, saab printida teksti PHP. Seega saate kasutada seda programmi keel väljund täpselt mida me rääkisime varem. Võite dünaamiliselt HTML. Võib-olla mitte kõik. Äkki kõva kood asjad, nagu päise ja jaluse ning logo, ja oma stiili lehed, ja kõik see. Aga midagi sellist p-pani seitse, kuhu manipuleerides varude ja näitab kasutaja portfell, mis on läheb dünaamiliselt muuta, võid kindlasti kasutada PHP ja loogika see annab sa nagu programmeerimiskeelt väljundi dünaamiliselt alamhulki lehel. Nii et kui te räägite dünaamilisi veebisaite, või veebi programmeerimine, mis on mida sa tegelikult räägid. Kasutades keeles nagu PHP või asjad nimetatakse Python või Ruby või Java või veel teisi keeli, päringu andmebaasi Sageli, või teise serverisse ja siis dünaamiliselt sülitama HTML. Nüüd lõpptulemus, kui kõrvale jätta, on et HTML kõige veebilehed, sealhulgas oma p-set seitse, on ilmselt saab olema tohutu segadus, kui te vaatate allikas kood brauseris. See ei ole suur asi. Sel hetkel, kui me hoolime stiil, me hoolime kraam, mis sa kirjutad. Me ei hooli kraami et mida teie kood väljundid. Nii et ärge muretsege taandus siin, kas see on PHP, mis on tegelikult kirjutamine asju. Lõppude brauser ei huvita, ja inimene ei saa vaadata tekkekohas niikuinii. Me personal Näiteks oleks vaadates oma PHP. Nii et lubage mul anda kiire näide nüüd miks muidu see võib osutuda kasulikuks. Nii öeldes, ma ei mäleta viimast kord kasutasin C lahendada probleem reaalses maailmas. See oli ilmselt lõpetanud kooli kui Mul oli vaja kasutada keelt, et oli suhteliselt madal tase ja andis mulle võimalus teha midagi väga kõrge täidab tõesti päästa nii palju CPU tsüklit, kui suutsin, suuresti sest olin kasutades tohutu andmekogumid ja iga protsessori tsükli arvestata. Ja ausalt öeldes, isegi asjad nagu telefonid need päevad ja muud seadmed kui sa ei ole päris nii palju mälu ja te ei saa päris olla nii palju CPU, kasutades kiiremini keeles on ikka ahvatlev. Kuid reaalses maailmas, kui sa lihtsalt taha visata mõned programmi koos analüüsida mõningaid andmeid või olete kogunud terve hunnik registreeringud mõned üliõpilased ja tahad väga kiiresti automatiseerida saates e-kirju ükshaaval iga üks neist registreerijatele, sa lähed, et jõuda kõrgemal tasemel keeles kui C nii rääkida. Midagi PHP või Python või Ruby, või pool tosinat teised, et on olemas nendel päevadel. Aga need kolm on ilmselt kõige trendikas praegu. Ja mida see tähendab, et saate avada tekstiredaktor nagu gedit või Kõige midagi ja siis lihtsalt alustada kirjalikult koodi ilma muretsema kompileerimine, ilma, et tõesti muretsema mälu haldamine, pidades meeles, kuigi see veidi räpasus lõpuks tulevad tagasi hammustada teid, kui andmekogum saab suurem või probleem muutub suur. Aga mida see tähendab meil on järgmine. Lubage mul minna ja joosta speller alates lahendamist kuus. Nii et see on minu Prefiksipuu põhinev rakendamine et ma kasutasin on suur pardale, kus ma läbi mitte nii hästi. Me tuleme tagasi nädala pärast ja vaadata neid, kes ei jõua atop suur pardal meie viimane loeng. Aga nüüd, lubage mul minna ja lihtsalt joosta oma lahenduse teksti ja me teeme King James Bible, ja siin me läheme. Nii et need on kõik väidetavalt valesti kirjutatud sõnade välja King James Bible. Ja minu rakendamisele kulus pool sekundit kokku. Nii ei ole liiga halb on see konkreetse arvutiga. Aga mõtle, kui palju kood oli vaja kirjutada. Mõtle, kui palju koodi sa pidid kirjutama. Mõtle mitu tundi veedetud D-hall või oma Dorm või kus iganes tegelikult kodeerimine üles, et lahendus. Noh, kui ma tegelikult olema kõrgem keeles nagu PHP, võtta teadmiseks Mida ma saan teha siin. Esimese, oletame, et see on hoopis sinu distributsioon kood. See on fail nimega speller. See on saadaval osana tänapäeva jaotus kood. Ja ma lähen laine mu kätt kõige kohta üksikasju, kuid see on tegelikult Huvitav näide sellest, kuidas sa võiks port keel nagu C üle PHP. Ma sõna otseses mõttes avanud kaks teksti aknad, üks minu C versiooni speller.c, ja hakkasin lihtsalt tõlkida see minu pea PHP ja kirjutades kasutades lähim samaväärseid ülesandeid. Nii mõned need asjad on erinevad. Me nägime viimast korda, et PHP ei kasuta sisaldavad üsna ühtemoodi. See kasutab nõuavad tavaliselt, kuigi hulka ei eksisteeri. Määrake on natuke erinev # Define C, kuid see on kuidas teha püsiv. $ Argc selgub olemas PHP, nii et me oleme näinud, et enne. Need on vaid muutuja kõiki mis algavad dollar märke. Meenuta need on lihtsalt hunnik ujuva punkti. Nii pikk lugu lühike, sa oled teretulnud flip läbi selle, kui uudishimulik, see on peaaegu line-for-line konverteerimine C versiooni speller.c arvesse PHP. Ja sa võid seda uuesti pool tosinat teistes keeltes. Aga mis on huvitav on see. Või mis on ausalt ehmatavam on see. Lubage mul minna ja kirjuta umbes dictionary.php, ja väidavad, et ma olen läheb minna ja uuesti rakendada lahendamist kuus siin. Teeme ettepaneku, et esiteks on see fail, mida viiakse ellu PHP, las ma avan oma silte niimoodi. Annan ennast globaalse muutuja, $ suurus muutub null. Ja ma annan mina hash tabel. Ma kasutan hash tabel selle asja. Kuidas deklareerida hash tabelit PHP? Valmis. OK. Nii sulg sulg tähistab Mis PHP, nagu me oleme näinud? Massiiv, kuid massiivi võib olema assotsiatiivne massiiv. Assotsiatiivne massiiv on andmestruktuur seostab võtmed väärtused. Nüüd lihtsaim arvuliselt indekseeritud massiiv, need võtmed on mis? Null, üks, kaks, kolm, eks? Vana kooli värk tagasi C. Kuid see ei saa Samuti strings nagu foo ja bar, või maxwell, või mis tahes sellise string. Ma võin ära, et vaid hetk. Lubage mul minna ja kuulutada funktsioon nagu - teeme load () esimene. Seega funktsioon load (). Ja PHP on veidi teistsugune, kuna sa sõna otseses mõttes tüüpi funktsiooni, kuid te ärge tippige tagastamise tüüp. Ma lähen edasi minna ja öelda, et load () funktsiooni peaks võtma argument $ sõnastik, lihtsalt nagu C versioon tegid. Ma teen et mälust. Ja pakun, et ma olen kavatsen seda teha. Ma lihtsalt teen foreach. Ma lähen kutsun funktsiooni nimetatakse fail (), mis kulgeb nimel, et fail, mis on varieeruv $ Sõnastik $ sõna. Ja siis sees minu jaoks loop siin, ma olen läheb minna ja säilitada oma $ Tabel, $ jutud tõele. Valmis. Oh, oota. Valmis. OK. See on load () funktsioon öelda PHP. Nüüd, miks see toimib? Ja ma olen selline petmine siin. Niisiis, üks, foreach nägime lühidalt viimast korda. See tähendab lihtsalt, et saate kinnitada, üle array ilma häirib i ja n ja pluss pluss, ja kõik see. Sõnastik on muidugi faili nimi midagi suurt või väikest, kaks sõnastikud kasutasime viimast korda. Fail on funktsioon, mis avab teksti fail, loeb seda rida-realt, ja kätt tagasi tohutu hulga, iga, mille elemendid on joont, et fail. Nii et see kombinatsioon fopen ja fread ja samas loop ja kirjutamisel, ja kõik see. Lõpuks, nagu sõna tähendab lihtsalt, et see on muutuja Ma juurdepääs iga iteratsiooni selles silmus. Nii lühike, see üks liner tähendab siin avada faili, mille nimi on sisse sõnastik, muutuja, Käi see rida-realt, ja iga kord, kui sa line, kaupluse muutuja nimega sõna, ja siis midagi teha sõna. Mida ma tahan teha? Ma tahan, et sõna minu hash tabel. Noh, ma ei pane midagi minu hash tabelit just nagu C kasutades nurksulgudes. See on nimi, minu hash tabel. Ma lähen indeks et hash tabel selles kohas. Nii ei sulg null, ei sulg üks. Bracket quote lõppeb midagi, mis iganes see sõna. Ja nagu te võib-olla oma hash tabel töö Prefiksipuu, sa lihtsalt salvestada tõhusalt Loogiline kaudselt või otseselt. Valmis. Ma ladustamiseks väärtus true. Nüüd on paar asja Ma pealiskaudsust siin. Tehniliselt ei kavatse olla tüütu uuele reale / n, lõpus iga sõna. Nii et ma peaks ilmselt helistada PHP funktsiooni nimetatakse karbonaad (), mis sõnalt tükelda see välja lülitatud. Ja ma tegelikult vaja teha üks asi. Ma peaks ilmselt juurdekasvu suurus iga iteratsiooni, nii et ma olen kursis hoida maailmas, mis see on. Ja ausalt, ja see on üks lollim aspekte PHP, kui sa oled kasutades globaalse muutuja, peate selgesõnaliselt öelda, et sa oled. Nii et ma lähen tegelikult kirjutad ülemaailmne $ Suurus, global $ lauda ja nüüd mu funktsioon on täielik. Nii ei ole päris nii lihtne kui varem, kuid Tõenäoliselt jäi vähem aega kui C versioon ehk? OK. Nüüd teeme check () funktsiooni. Vaatame, kui vähemalt viis tunni lõpus, et ta võttis meid C. Seega Lubage mul minna ja kuulutada vaadake funktsioonina. Võtab argument sõna, mis on läheb tulema speller. Ja ma lihtsalt kontrollida, kas järgmine muutuja isset tabel sulg strtolower sõna - olgem tasakaalu kõigi minu sulgudes - siis tagasi tõsi. Else - See oli tõesti raske selle programmi raames. Else, tagastab false. Valmis. See kontroll (). Nüüd, miks see toimib? Noh, mida ma möödunud ühesõnaga mis on string. Kaks, Ma kontrollin sees hash tabel, kes nimetatakse $ tabel. Ma surumine väiketäheliseks helistades funktsiooni üsna sarnane tolower () in C, kuid see ei kogu sõna, mitte ühte märki. Ja kui see on seatud, teisisõnu seal on määratud väärtust, teisisõnu kui see on tõsi, siis jah, see on sõna. Sest ma panen ta sinna load (). Ja kui ei, siis ma lähen tagasi false. Nüüd teised on lihtne. Funktsioon suurus (), siis kuidas ma seda teen? Ma põhiliselt seda tagasi $ suurusest. Aga ma tehniliselt vaja seda tüütu asi. Ja tegelikult üles kuulda, olin lõikamine ühte nurka liiga palju. Mul on tõesti vaja teha global $ tabel. Aga mis öeldud, lossimiseks). Lossimiseks () on hämmastav. Funktsioon lossimiseks (). Kui ma tahan, et rakendada lossimiseks ()? Valmis. OK. Nii lossimiseks (), mälu haldamine on täiesti hoolitseda sind midagi nagu PHP ja palju kõrgemal tasemel keeles. Nii et see on hämmastav. Nagu miks kurat me veetsime viimase kaheksa pluss nädalat C kirjalikult ilmselt tõesti aeglane, tõesti aeg tarbivad probleeme kümnete tundide töö kanname vööd? Noh, üks asi, see võib töötada trahvi väikesed programmid. Kindlasti kiirendada minu arengu ajal. Aga vaatame, mis juhtub reaalses maailmas. Lase mul minna sellesse kataloogi terminali aknas. Seal speller. Ja teate, kui kõrvale, ja te võite on tekkinud selle lahendamist kuus või probleem pani seitse. Sul ei ole rangelt pea lõppu PHP faile. php. Kui paned line niimoodi esimene kell väga top, mis on eriline joon süntaks, mis sisuliselt tähendab leida programmi nimega PHP ja kasutada seda tõlgendavad seda faili. Nüüd keegi ei tea, et Ma töötab PHP programm. Ma saan käivitada see lihtsalt nii, nagu see olid midagi koostatud C. Aga siin on asi. Tegelikult teeme seda jälle. Dropbox/pset6 /. Seal speller. OK, 0,44 sekundit. See sai kiiremini seekord. Nüüd lähevad PHP versioon. Nice touch. Aga mõelge, kui palju aega Ma salvestatakse tööajal. OK. Nii 3,59 sekundit, mis tegelikult ei kõla täpne kas. Aga see on, sest pikk lugu lühike, kui sa välja printida suur summa kraami ekraan, mis ise aeglustab asju ette. Mida see tegelikult oli CPU Seade oli 3,59 sekundi sisse vastandina C, mis võttis 0,44 sekundit viimasena. See on tõeliselt järjekorras suurus erinev. Nii et kui on mis hind tuleb? Miks on nii palju aeglasem? Miks PHP täita nii halvasti? Danielle? Publik: Sa ei ole tegelikult kasutada hash tabel. DAVID Malan: ma ei ole tõesti kasutada hash tabel. Nii et ma sellist tegi. Nii et see on assotsiatiivne massiiv. Tõenäoliselt, kui inimesed PHP on väga targad, nad kasutasid all kapuuts tegelik hash tabel ellu midagi nagu C või C + +. Kuid. Jah. Publik: [kuuldamatu]. DAVID Malan: Jah. Seega iga funktsiooni Kirjutasin nüüd - tegelikult, sa võid öelda, et veel kord veidi valjem? Publik: Kõik funktsioonid, mis sa lisada on palju rohkem täis võimsus üle - DAVID Malan: Nii et see on väga õige. Seal on palju rohkem üldkulusid, et me oleme tõesti ei näe, keskendudes ainult dictionary.php, mis ma kirjutasin. Seevastu seal on terve tõlk läheb taustal. Tõepoolest, kui ma jooksin selle programmi, siis ei töötab koostatud nulli ja need mõeldud minu Intel CPU. Pigem oli see töötab rida-realt PHP kood, mis näeb välja täpselt nagu me kirjutada seda. Ja nii iga kord, kui te kasutate tõlgendada keel, siis tegelikult ei maksa seda hinda. See saab võtta aega, et lugeda fail ülevalt alla, vasakult õige, ja siis täitma iga line ja jälle. Nüüd tegelikult eriti veebis saab tegelikult kiirendada seda protsessi vahemällu tulemused PHP koodi tõlgendada. Ja mis mõtet netis, sest kui sa ei ole üks kasutaja nagu mina siin, aga 1000 või 10000 kasutajat, siis võibolla esimest korda fail on juurde see on aeglane, kuid seejärel see on palju kiirem. Aga ka see jällegi on kompromiss. Ja midagi uuringuandmed määratud, või isegi midagi suurt nagu Selle kasutajad saavad lõpuks hakata tundma, et aeglustumine. Nii lühike, tõlgendatakse keeli väga moes, väga populaarne ja ausalt ilmselt keelte tuleks jõuda ülesannete lahendamisel pärast CS50. Aga aru, kui palju sa oled tõesti võttes iseenesestmõistetavana all kapuuts tegelikult on möödunud mitu nädalat hash tabeleid ja puud, ja püüab, mida kasutatakse lõppkokkuvõttes tegelikult rakendada asjad sulg, square bracket, mis meie võimuses, praegu tänulikult enesestmõistetavaks. Võtame pilk nüüd Selles web kontekstis. Ja ma mainisin viimast korda, et seal on hunnik superglobals PHP et ei ole tõesti asjakohane at käsureal. Nad on enam asjakohane seoses kasutades PHP web kontekstis. Nii töötab PHP veebiserver, et genereerida asju HTML. Ja me vaatas $ _GET ja $ _POST, ja see on kui automaatselt kasutajate input jõuab lihtsalt kui saadate moodustada fail lõpeb. PHP web server nagu aparaat. Aga vaatame lühidalt $ _COOKIE Ja $ _SESSION. In üldarusaadavat mõttes, mida on küpsis nagu sa aru kontekstis kasutades veebis? Publik: failina arvutis. DAVID Malan: Jah. See fail kasutaja arvutisse istutatud tahes veebilehe juhtub, et külastada. Nii et kui te lähete Facebook, kui lähete et bankofamerica.com, kui lähete et google.com, kui lähete peaaegu iga kodulehel maailmas nendel päevadel, sealhulgas cs50.net, küpsise istutatud arvutisse, mis on kas väärtus salvestatakse RAM oma arvuti brauseri mällu või mõnikord tõepoolest faili talletatakse kõvakettal. Ja mida tavaliselt hoitakse seda faili ei ole sinu kasutaja nimi, mitte teie salasõna, tavaliselt mitte midagi tundlik, kui kodulehel ei ole nii hea oma julgeolekut, vaid pigem see on suur kordumatu tunnus seas muid asju. See on suur juhuslik number istutatud oma arvuti, kuid sa ei mõtle nagu omamoodi virtuaalne käsi tempel nagu alates klubi või mõned lõbustuspark, mis võimaldab töötajatele, omanikele, et teenus, et meenutada, kes sa oled. Nii et kui suur juhuslik arv on nagu 12345678, kuigi see on ilmselt mitte liiga juhuslik, mõtlevad, et kui käsitsi templi, et kui külastate facebook.com esmakordselt nad tembeldab selle numbri oma käsi. Ja siis, sest te räägite HTTP, siis on brauser, ja kuna Facebook Ilmselt räägib sama web server, protokoll HTTP ütleb, et millal sa hiljem külastada facebook.com, kas see teine hiljem tund hiljem, isegi järgmisel päeval nii kaua, kui te ei ole sõnaselgelt välja loginud, mis tõhusalt on nagu pesu käed. HTTP ütleb, et sa peaksid esitama oma käsi tempel iga kord, kui tagasi, et veebilehel. Mis Facebook siis ei on nad vaadata, et käsi tempel ja nad ütlevad, oh, 123456789. Ma ei tea, esmapilgul, et see David Malan Cambridge'is Massachusetts, kuid nad ei saa kontrollida nende andmebaasi ja öelda, oh, inimene kelle arvuti me istutatud 123456789 David Malan Cambridge, Massachusetts. Näitame, et kasutaja, siis tema konto lehel või oma News Feed. Aga seal on probleem, kui see kuidas web tõepoolest toimib. Võtame pilk kiire näite. Olgem tegelikult minna ütlema facebook.com. Aga enne kui me sinna minna, las mul minna ja avada Chrome'i Inspektor siin. Las ma vaatan võrgu alt. Ja nüüd lähme edasi ja kirjuta aastal https://facebook.com. Ja ma teen selle nii, et me ei näe, kõik need ümbersuunamisi ja jäätmed aega vaadates läbi nende. Lubage mul Enter. Hea küll. Me näeme terve hulk taotlusi. Seal tuleb Facebook. Seal on terve hunnik faile. Ja siin, iga minu mainita latentsus viimast korda, see on palju HTTP päringuid. Aga esimene on ilmselt Kõige huvitavam. Teeme keri siin, ja Ma suumida teine. See saab olema selline jama, aga vaatame. Facebook saatis meid terve hunnik asju. Aga oota, huvitav. Nad istutamist mitte üks, vaid neli poolt templite peale minu poolt siin. Set-Cookie, Set-Cookie, set-cookie, set-cookie. Ja seal on mõned funktsioonid siin. Kõik nad mainida mõningaid objekti lõppemist. Ja tundub, et Facebook loodab mäleta mind kuni 2015. Nii et ilmselt aega, mille Ma pean välja logida või nad lihtsalt automaatselt eeldada, ma olen ei tule tagasi. Nii et tegelikult korralik ajaga. Ja seal on mõned muud asjad siin toimub. See küpsis olevat sunniviisiliselt välja öelda, see aegus 1970 enne küpsised eksisteerinud. Nii brauser on lihtsalt läheb eeldada, OK, see on nagu pestes käed tempel. Aga nüüd, kui minu brauser teeb järgnevale - Lubage mul minna ja teha seda uuesti ja uuesti laadimise. Nüüd ma kerin tagasi top taotlus ja minna siin taotleda päiseid. Pange tähele, see. Nüüd ma alla ei vastus päised, aga teate seda ütleb taotluse päised. Ja teate, et minu brauser osana oma taotluse pärast lööb reload on Saadetud vähemalt järgmisi teavet. Ei ole määratud-cookie, kuid küpsise. Nii et see on joon, HTTP päis nii rääkida, kui minu brauser on omamoodi ning ilma minu teadmata esitades minu käes Facebook ülevaatus. Nii et need küpsised võivad olla kasutatakse siis mida? Tuletada meelde, kes sa oled, või mäletan, kuidas mitu korda sa oled olnud seal, või tegelikult midagi. Nii et siin on counter.php. Ja las ma suumida font. Ja iga kord, kui ma laadige see leht, teade see on meeles pidada, mitu korda Ma olen seal olnud. Noh, see pole veel kõik, et muljetavaldav. Ütleme lihtsalt sulgeb kaardi, ja nüüd lähme tagasi http://localhost/counter.php. Oh, see on huvitav. See ikka meeles, isegi kuigi ma suletud tab. Ja ausalt öeldes, kui ma brauseri sulgemiseks kui rakendatakse õigesti, I võiks ikka meeles pidada, et see kasutaja on kes ta oli esimene kord, ja ainult kord kui ma minema Chrome'i menüü mis siin on siin, ja minna Ajalugu ja klõpsa Kustuta sirvimise andmed, nagu mõned teist võib-olla ka Varem, alles siis küpsised tegelikult ajal kustutatakse web arengut. Seega, kui me läheme - olgem sulguks gedit siin. Ja kui me läheme nüüd selle faili. Lubage mul minna meie vhosts / localhost / avalik, ja las ma teen counter.php. Pange tähele, et see on päris lihtne programm. See on päris lihtne veebileht. Nii top faili on lihtsalt kommentaarid. Aga siin on uus liin, mida võib nägime juba p-pani seitse, session_start (). See on rida PHP kood, mis sisuliselt ütleb web server, teha kindel, et juurida käed ja teha Kontrollige käega marke. See on kõik, et liin ei, ja see teeb kõik, et protsessi juures. Siis teate ma pean lihtsalt mõlemad siin. Kui loendur võti sees selle eriline globaalse muutuja nimega $ _SESSION On seatud - teisisõnu, kui seal on mingi väärtus olemas - lähme see üles ja hoidke seda kohalikku muutuja nimega $ counter. Else, olgem anda $ counter Vaikimisi väärtus 0. Nüüd siin on üks aspekt, PHP, mis on nii õnnistus ja needus. PHP on natuke lohakas. Seega arvestades, C, mis oleks ulatus counter olnud kas siin või siin? See oleks olnud piiratud neile lokkis traksid. Arva ära? PHP, see on olemas ka väljaspool neid looksulg, siin ja siin, ja siin ja siin ja isegi allapoole. Nii et ma ütlen, et see on õnnistus, mis tähendab, et sa ei pea mõtlema, kui raske, kui me tegime nädalat tagasi. Aga see on ka natuke needus, et olenemata sellest, kus te kasutate muutuja PHP, vähemalt programmi niimoodi, see on ülemaailmselt kättesaadav parem või halvem. Nii et sa pead meeles pidama, et nüüd, oma muutujate ei ole määratud. Te võite need on määratud mujal. Aga mida ma teen lõpuks? Ma lähen hoida sees, et globaalne muutuja väärtus counter sisestada tulemus teeb counter + 1. Nii et see on lihtsalt aritmeetiline et ei juurdekasvu et counter. Ja see, et ma ladustamiseks et väärtus tagasi on siin tähendab sisuliselt uuendada andmebaasi meeles pidada, et kasutaja 123456789 olnud siin kaks korda. Ja kui ma seda uuesti, kui järgmine kord ma asendusostu lehekülge, see läheb kontrollima mu käsi tempel ja öelda, oh, kasutaja 123456789 on nüüd siin olnud kolm korda. Ja mis PHP jms keeles teeme meie jaoks on nad viinud kuidas ja kus ja kui kaua salvestada väärtused selles erilist superglobal. Ja see superglobal järgmine kord külastada lehekülge on justkui võluväel Eeltäidetud, täis väärtusi, seal olid sa viimati külastatud kas see oli hetk tagasi, nädal tagasi, või 2013 ja nüüd me räägime umbes 2015. PHP ja web server hoolitseda kõik selle teile. Publik: [kuuldamatu]. DAVID Malan: Muutujad PHP on sisuliselt alati globaalne kui sa deklareerida neid sees funktsiooni ja siis nad on kohalikud funktsioon ainult. Aga kuna ma ei ole kirjutanud ühtegi funktsioone, on nad nüüd tõhusalt globaalne kogu minu pilt siin. Publik: Kas on võimalik et need kohalikud? DAVID Malan: Kas on olemas kuidas teha neid kohalik? Ainult pakkimine neid funktsioone. Mis viimane versioon PHP, saad seda teha koos anonüümne funktsioon. Aga rohkem, et kontekstis JavaScript. Aga lühike vastus on ei. Pikem vastus on jah. Nice. Hea küsimusele. Hea küll. Nii lõpuks leht ise on tegelikult üsna lihtne. Pange tähele, et kui ma väljumise PHP režiim, tagasivõtmine et kõik see kraam maha Allpool on ainult hakka sülitama välja toores brauseris. Mis on hea, sest ma ei taha saata kasutaja mõned HTML, kuid ma ei taha dünaamiliselt värskendada et HTML. Ja üks viis, kuidas ma seda teha ei sorteerima väga kiiresti langeda tagasi PHP režiimis sulg küsimärk võrdusmärk ning seejärel väljund väärtus counter. Või kui see tundub veidi segasena, see võrdusmärk on tegelikult vaid mõned süntaktiline suhkur sel printf ($ counter). Aga ausalt, see on natuke inetu ja natuke tüütu tüüp. Nii PHP väga kenasti pakub see funktsioon kus saab lihtsalt öelda, et see rohkem lühidalt samamoodi. Niisiis, mis toimub all kapuuts? Lähme kiiresti vaadata võrgustik tab siin counter.php. Ja lubage mul minna ja esimene olgem kustutada oma küpsiseid. Olgem selge sirvimise andmed alates algusest. Nüüd lähme tagasi siia. Nüüd laadige leht uuesti. Ja ma olen tagasi nullis. Kuna mu käsi tempel on pestud, Nüüd ma saan uue küpsise. Tõepoolest, kui ma vaatan võrgu kaart ja vaata vastus päised, teade et seade saadab mind küpsis, kelle nimi on mõnevõrra omavoliliselt, kuid selline mõistlikult, PHPSESSID. Ja see saadab mind see tõesti suur juhuslik number. See ei ole päris mitu. See ei ole päris kuueteistkümnendsüsteemis. See on mingi täht string, kuid arvatavasti on see juhuslik. Ja see on käsitsi templi nii, et rääkida, et ma viidates. Vahepeal, kui ma nuppu reload ja siis pilk see teine ​​joon minu teine taotlused, teatised nüüd, et minu soov päised sisaldavad PHPSESSID võrdub see, ei set-cookie, kuid ainult küpsise. Ja see on minu brauseri esitlus minu käest tempel. Nüüd nagu teaser ja me räägime veel Selle nädala või nii, kuid Millisel viisil see et sa kaitsetud oma Facebook konto kaitsetud ja muu selline moodustab haavatav? Publik: Kui keegi on oma küpsise. DAVID Malan: Jah, kui keegi on oma küpsise. Ma mõtlen tõesti, palju nagu mõned teist oleks proovinud nagu klubi või lõbustuspark, kui sa püüad midagi niimoodi kopeerida tempel, ehkki tagasi peale teise isiku poolt, ja siis ta esitab selle oma, kui see tegelikult ei vaata identsed, 123456789, siis web server on ilmselt lihtsalt läheb usun, et see kasutaja on teile. Ja see on tõesti peamine ohtu iga kord, kui kasutate küpsiseid sest kui keegi lihtsalt võltsib nii et räägi oma küpsis, arvud, mida ta on, kas tõesti kopeerides vaadates arvuti ja on nagu OK. Davidi Präänik JJ3JIK ja nii edasi, ja siis nad piisavalt targad, et teavad kuidas omamoodi käsitsi saata, et küpsist brauser või programmi nad kirjutavad, mida nad võiksid täielikult logige kodulehel teile. See ei ole nii raske teeselda, et olla keegi teine, kui me uuesti p-set kaks, millega kehtestati mida? Publik: krüptograafia. DAVID Malan: vähe natuke krüptograafia. Simple krüptograafia, vähemalt Standard Edition, kuid krüpto sellegipoolest. vähem. Nii selgub, kui te krüptida kõik need pealkirjad, kasutades midagi, mida võib nüüd rohkem teada lähedalt nagu SSL, secure socket layer või https:// URL siis kõik need asjad, mida me oleme olnud põrkav tegelikult kodeeritud, mis tähendab, et see on nagu sa ei saa lugeda käsi tempel. Ainult facebook.com ei või google.com, või sel juhul võivad seadme lugesin, et käsi tempel. Traagiline on küll, ja jälle, et see on liigagi sobivaks NSA stuff hilja, isegi SSL on purunev. Ja see tegelikult ei ole nii raske isegi crack et krüpteerimist. Mitte niivõrd lõhenemist krüpteerimine kuid tricking veebilehitsejate dekrüpteerimiseks andmed enneaegselt. Aga jälle, me kiusa selle enne pikk. Praegu lihtsalt karta. See on kahjuks selline tõsi. Hea küll. Nii, et kui see nüüd jäta meid? Noh, teeme selle ära. Lähme edasi ja võtta kiire teaser enne me pausi. Ja ma arvan, et me jõlkuma veidi kauem täna, kuid me ei kavatse sukelduda midagi täiesti uut ja seksikas, mis ihuma oma isu veelgi. Nii et see teaser. Nii SQL hakkasime rääkima kunagi nii lühidalt viimast korda. Sa tõesti, et su käed määrdunud mõned seda p-set seitse. Ja üldarusaadavat mõttes, mida see SQL - S-Q-L - heaks teha? Mis see on? Jah. Publik: Teeme teile juurdepääsu andmetele. DAVID Malan: Jah. See olgem teil juurdepääs andmetele andmebaasis. Structured Query Language. Ja see on sisuliselt programmeerimiskeelt. On omadusi see, et me isegi ei kasuta seda klassis. Aga sa ei saa tõhusalt define funktsioone. Neid nimetatakse salvestatud menetlused SQL. Aga me hoiame see üsna lihtne ja lihtsalt kasutada seda mõned põhilised toimingud nagu valides andmed, andmete sisestamiseks ajakohastada andmed ja andmete kustutamine. Ja sa tõesti arvad andmebaasi nagu SQL andmebaasi, kui lihtsalt on Microsoft Excel. Kuna SQL viitab relatsiooniline andmebaasi, kus seoses tähendab lihtsalt tabeleid. Read ja veerud. Seega midagi saab panna tabelisse Asjalik või Google Docs, võid panna SQL andmebaas kuulutades tabelis. Nüüd, kuidas sa tegelikult pääseda et informatsiooni? Noh, käske või päringuid niimoodi. SELECT, INSERT, UPDATE ja DELETE. Ja enamasti on need neli ainult koostisosade pead midagi üsna võimsalt Probleemse pani seitse. Nüüd juba järgmisel päeval, siis oleks tegelikult suhelda andmebaasi must ja valge terminali aknas vilgub kiire niimoodi. Ja andmebaasi me töötab Seade on kutsutud MySQL, mis on tasuta ja avatud lähtekoodiga andmebaasi mootor. Kui sa Google ja lugeda Wikipedia artiklis, saate teada, et nimi on natuke üleminek mõnda Linuxit. Maria andmebaas on tegelikult toidulauale niiöelda MySQL. Pikk lugu lühike, Oracle ostis MySQL. Oracle on suur firma. Inimesed on mures, et see oleks enam ei ole päris nii avatud lähtekoodiga, nii et see on lihtsalt koopia MySQL, mis on veel tasuta, ikka avatud lähtekoodiga ja paigaldada Fedora Linux vaikimisi. Aga see on selline valu kael tutvuda andmebaasis nii. Nii me lisada CS50 seade tasuta avatud lähtekoodiga tööriista nimega phpMyAdmin. Lihtsalt juhus, et See on kirjutatud PHP. Ei ole olulist vaja PHP siin. Aga see on vaid veebipõhine vahend, mis me tasuta alla laadida, paigaldada seade, mis võimaldab meil graafiline kasutajaliides, mis uurida p-pani seitse andmebaas mis luua uusi andmebaase, öelda oma lõpliku projekti, kui soovite nagu, ja lõpuks luua dünaamilisi veebisaite nagu CS50 rahandus mis võimaldavad teil andmeid ning uuendada andmeid dünaamiliselt. Sa ei kavatse on kasutada lihtsalt lihttekstifaili või CSV. Võite tegelikult kasutada smart andmebaas programm, nii et saate käivitada rohkem keerukamaid päringuid lihtsalt lugemise läbi kõik lineaarselt. Nii näiteks on see, mida me anname sa karbist p-pani seitse. See tabel ilmselt vähemalt kolm veergu, millest üks on kasutajanimi, millest üks on hash, ja teine, mis on ID. Aga huvitav asi, ja ainult nalja teha üks mõte siin, kasutajanimi Oletatavalt juba unikaalne, eks? Ma mõtlen, et kõige tahes veebilehel, kui sul on kasutajanimi olemas ei saa olla kahte caesars. Ei saa olla kaks Malans. Ei saa olla kahte jharvards. Selle unikaalne. Muidu nad ei tea, mis jharvard see tegelikult on. Niisiis, milline võiks olla motivatsioon ka võttes kolmandast veerust vasakul seal nimetatakse ID, mis näeb number, mis on samamoodi unikaalne? See tundub natuke ülearune mulle esimesel pilgul. Miks võib see olla kaalukas olema mitte ainult unikaalne kasutajanimed, vaid ka unikaalne numbrid? Publik: Nad võivad olla sama salasõna. DAVID Malan: Inimesed võib-olla sama parooli, muidugi. See võib täiesti juhtuda. Aga kui nad on selle unikaalne kasutajanimi, I väidan, et see ei ole tegelikult küsimus, sest kui nad kirjuta oma kasutajanimi, ma ainult vaja vaadata oma Parooli nende hash sätestatut. Miks muidu? Publik: Faster otsimine. DAVID Malan: Faster otsimine. Miks? Publik: ID on vaid üks. DAVID Malan: ID on vaid üks märk, või täpsemalt, see on number, nii on see ilmselt 32 bitti või midagi sellist. Arvestades, et kasutajanimi, ilmselt Jason Hirschhorn on seal on mingisugune naeruväärselt pikk ja see läheb mind palju rohkem aega, et string võrrelge H-I-R-S-C-H-H-O-R-N ja võibolla / 0 või midagi sellist, et otsida Jason, mitte lihtsalt ütlesid mulle kasutaja number kaks. See on 32 bitti. See on ühe INT et sul on, mida võrrelda. Ja tõepoolest, see on täpselt, miks andmebaasid kipuvad Unikaalsete IDd rida neid. Nüüd sellest, mis muude andmete liigid on olemas lisaks INT ja ilmselt strings nagu see on? Noh, et olla õige, SQL andmebaase, nagu MySQL on CHAR väljad. Ja CHAR veidi eksitavalt ei ole ühe CHAR. CHAR väli MySQL andmebaasi üks või mitu märki, kuid see on fikseeritud arvu märke. Nii näiteks, kui ma lähen üle phpMyAdmin nagu te võib-olla juba, või varsti probleem seatud seitse, ja ma lähen minu andmebaasi ning lihtsalt lõbu pärast, olgem luua uus tabel nimega katsetada vaid kaks veergu. Ma siis nuppu Mine. Ja see muutub üsna tuttav, eriti kui te käpard ümber oma. Siin ma võiks kirjutada ID loomiseks Uue tabeli tüüp Int. Aga siin ma võiks kirjutada kasutajanime uuesti, et varem tabel. Ja teate mul on terve hunnik liiki valida. Ja just see on põhjus, miks phpMyAdmin on selline kena. See on selline enese õpetuse, mida saab lihtsalt mingi punkt ja klõpsake, ja vaata rippmenüüst menüüde ja tuletada et see, mida võimu SQL annab sulle. Ja tõepoolest, kui ma valin CHAR, ma siis tuleb täpsustada pikkus, või kuidas palju väärtusi, kui palju sümboliga. Nii väga ühised väärtused on asjad 255, kuid see on veidi pikk. Tavaliselt on kaheksa kasutajanime. Aga see on natuke väike nendel päevadel. Nii et see on disain otsus. Kas see 8 tähemärki, 32, 255, 1000? See on tõesti sinust. Aga CHAR valdkonnas on fikseeritud number. Nii et valida liiga vähe ja sa oled natuke kruvitud, kui soovite enam kasutajanimi. Vali liiga palju ja mida on Puuduseks? Publik: [kuuldamatu]. DAVID Malan: See on raiskamine. Just nagu C, kui teil on suurem tüki mälu kui vaja, sa oled lihtsalt raiskab aega ja raiskab ruumi. Nii alternatiivina olemas VARCHAR, mis lahendab selle probleemi ravivad pikkus ei fikseeritud pikkusega kuid maksimaalne pikkus, ja kasutades muutuja arvuni, mis siis kipub kasutada ainult nii palju sümboliga kui tegelikult vajavad. See kõlab ideaalne. Miks me ei saada lahti SÜMBOL andmetüüp siis? Mis võib olla negatiivsed kasutades VARCHARs, mis kõlab nagu see on tore võita? Jah? Publik: [kuuldamatu]. DAVID Malan: OK, hea. Seega, kui kõik andmed on sama pikkus, mis on mure? Publik: Sest sa raiskad andmed, öeldes neile kõik. DAVID Malan: Nii et kui kõik andmed on sama pikk, kuigi ma väidan, mis täpsustatakse maksimaalne pikkus on varchar ei erine täpsustades fikseeritud pikkusega CHAR kui sa tead, et number ette. Aga seal on tõesti, ja ma omamoodi väljavõte, vastus reaalsus et seal on veel maks, mis võiks olla tüütu, eriti kui sa tekib isiku nimi, mis on ebatavaliselt pikk, et sa ei prognoosida. Ja see on ka veidi vähem tõhus tegelikult otsida VARCHARs kui mitte otsides sümboliga, eriti kaua tabeleid, mis on palju ja palju andmeid. Nii ka siin, temaatilised on jälle ei ilmne valik. Nii lihtsalt, et anda teile tunde teiste andmetüübid, mis võivad pakkuda huvi kas p-set seitse või Tulevikus seal INT. Seal BIGINT, mis on nagu pikk pikk. See kipub olema 64 bitti. Ei Koma mis näete Ülesanded, mis on palju puhtam vastus probleemidele me esinenud float ja ujuv punkt ebatäpsus. Ja siis on DATETIME. Seal on sõna otseses mõttes andmetüüp, mis on sarnanema aasta, kuu, päev, ja tund, minut ja sekund. Aga SQL andmebaase ka asju, mida me helistame indeksid. Ja indeks on midagi, mida sa täpsustada, kui luua tabeli teha otsinguid ja muud toimingud tõhusamaks. Täpsemalt, ei midagi, mida nimetatakse PRIMARY indeks, mida võiks deklareerida järgmiselt. Me tegime seda teile kasutajate tabel anname. Aga teate kui ma käsitsi taasloomine kasutajate tabel siin annab see nimi kasutajatele. Ma juba määratud ID. Määratletud I INT. I määratletud kasutajanime maksimum 32 tähemärki. Aga kui me hoiame kerimine selles üsna lai aken, märkate seal hunnik muid asju ma ei määrata. Üks, ma ei saa määrata atribuudid meeldib, sa tead, mida see INT tuleks allkirjastamata. Ma ei taha, negatiivsed arvud, nii teeme seda allkirjastamata. Null ei ole siin oluline, sest Ma ei taha iga kasutaja olema kordumatu number. Ma ei taha, et see oleks null. Aga see on huvitav. Võin täpsustada, et ID on kas primaarvõtme selle andmebaasi või see on ainulaadne, või see on indekseeritud või täistekst. Nii tänases eesmärkidel pikk lugu Ühesõnaga, peamine vahend, et see peab olema nii sisuliselt kui ka tehniliselt valdkonnas, et me kasutame, et unikaalselt tuvastamiseks. Nii et kui me otsida kasutajatele, see on omamoodi on lubadus vaadata neid enamasti et kordumatu tunnus. Ja andmebaasi tagab, et kui sa on kasutaja number 3, siis ei saa füüsiliselt lisada uue kasutaja selle sama number 3. Andmebaas lihtsalt keelduda Muudatuste salvestamiseks. Milline on hea asi, sest sa võid kaitsta end ise. ise Alternatiivina kasutajanimi. Nii teise rea, mäletate, on kasutajanimi valdkonnas. Nii teise rea siin on kasutajanimi, nagu tegime kaugele vasakule seal. Nii et mida veel võiks ma tahan täpsustada? Ma ei tohi vastavalt SQL, täpsustada kaks peamist võtit. saab määrata ühine võti kuhu vaadata nii valdkondades, kuid nad ei saa eraldi olema esmane võtmed. Nii et see ei tule kõne allagi. Nii et mis võiks tahan valida? Noh, UNIQUE on sarnase sisuga primaarvõti, kui määrate selle valdkonnas peab olema ainulaadne, kuid see on ei kavatse olla üks Ma kasutan kogu aeg. Ja me ei kavatse kasutada seda üks kõik aeg, mis põhjusel jälle? See on aeglasem potentsiaalselt kui see on pikk kasutajanimi. See on lihtsalt aja raiskamine. INDEX, vahepeal ette, et see on ei kavatse olla unikaalne, kuid tahaks teil töötada oma võlu all kapuuts teha seda kiiremini minu jaoks otsida selles valdkonnas. Nii see ilmselt ei ole siin asjakohane. Kasutajanime, ma väita, et UNIQUE on hea vastus. Aga oletame, et me tegime kasutajatele rohkem huvitavam kui lihtsalt kasutajanimed hashes ja ID numbrid. Mis siis, kui me andsime inimestele täisnimed? Mis siis, kui me andsime neile aadressid ja muid andmeid nende kohta? Noh, kui olete määranud, et veerg andmebaasis on indekseeritud, mis tähendab, et MySQL või Oracle, või mis iganes andmebaas te kasutate, peaks töötama oma võlu ja kasutada mingit fancy andmed struktuur, nagu puu või Prefiksipuu või hash tabel või midagi, et tagada et kui sa otsida andmeid kasutades valige selle konkreetse valdkonna - nagu mulle näidata kõigile, et elab Oxford Street. Päringu niimoodi. Kui teil on eelnevalt kindlaks määratud, et soovite indeksi selles valdkonnas, otsingud on palju, palju kiiremini. Kui te ei täpsusta indeks, parim saate teha, on lineaarne otsing kui see ei järjestatud. Aga kui sa täpsustada INDEX, nutikas inimesed, kes on teinud andmebaasi - inimesed nagu sina, kes teavad nüüd puud ja püüab ja räsitabeli - automaatselt luua selliseid andmeid struktuuri RAM veenduda, et need otsingud on palju kiirem. FULLTEXT vahepeal on sarnase sisuga, kuid võimaldab teil teha wildcard otsingud, nagu mulle näidata kõigile, et elab tänavatel algab täht O ükskõik millisel põhjusel. Seda saab teha wildcard otsingud niimoodi. Või rohkem kaalukaid asju näitama mind kõigile, kes on sõna - näita mulle kõik, kelle nimi algab konkreetse kirja. Võid otsida märksõnu Sel viisil. Hea küll. Niisiis, disain võimalusi seal potentsiaalselt. On teisi, et ma laine mu käed. Selgub, et teil on eri ladustamise mootorid. Ja see on veel kauge kui me vajame Kindlasti jaoks probleem pani seitse. Vaikimisi te kasutate midagi, mida nimetatakse InnoDB. Näete mainita kusagil phpMyAdmin liides kõige tõenäolisem. Aga tean, et on ka teisi disain otsuseid, mis on potentsiaalsed huvi tulla lõpliku projekti kui sa midagi veebipõhine. Aga teeme seda. Lähme edasi ja pane see edasi ekraan nagu teaser lugu hõlmab teid, toakaaslane, ja klaas piima. Võtame kaks minutit või nii murda siin. Ja kui sa ei jääda umbes, lähme tulla tagasi, vaata natuke rohkem SQL, ja siis natuke JavaScripti p-set kaheksa meeles. Hea küll. Niisiis, oletame, et sa mõtled nurgas nii, et saate väga lihtsalt tekkida kontekstis, kasutades andmebaasi või ausalt, isegi kasutades reaalses maailmas asjad nagu sularahaautomaadid, et saada raha. Nii et siin on külmkapis. Oletame, et sul üks liiga oma Dorm või maja. Ja sul on üks toakaaslane, ja nii sa tõesti meeldib piim näiteks. Nii et sa koju klassis ühel päeval. Ta ei ole veel tagasi. Sa avada külmik. Sa tõesti tahad suur klaas piima. Ei ole piima. Nii et mida sa teed? Sa sulgeda külmik. Sa haara võtmed. Sa minema väljakule. Ja sa saad kooskõlas CVS neile ise kassasse asjad, mis alati võtab rohkem aega kui tegelikult võttes kassapidajad. Igatahes. Niisiis, vahepeal dot dot dot, oma toakaaslane koju ja ta Samamoodi on igatsus jaoks piima. Nii ta avab külmik, näeb sees, ja oh, neetud. No piim. Nii ta juhib tähelepanu, juhtub minema Lisa muud CVS, mis oli ainult blokeerida kaugusel mingil põhjusel ja tal või ta saab kooskõlas osta piima. Vahepeal sa tuled koju, ta või ta tuleb koju, ja mida teha sa lõpuks on? Kaks korda nii palju piima. Aga sa tõesti ei meeldi piima nii palju. Nüüd teil on nii palju piima, et nüüd üks neist on lihtsalt läheb hapuks lõpuks. Nii et see on tõesti halb probleem. Eks ole? Niisiis, mis juhtus? Seega põhimõtteliselt on see omamoodi on naeruväärne näide. Aga all kapuuts, mis meil on olnud juhtub siin on teile mõlemale kontrollida seisundi mõned tükk mälu, külmkapp. Mõlemad olete kontrollinud riik Mõnede muutuja. Sa juhtisid sõlmimist mis sa siis tegutses. Aga kahjuks, kui teie toakaaslane Selveri juures, seisund, mis muutuja muutunud, ta tuli tagasi ja nüüd tahab muuta riiki, kuid see on juba muutunud tema kohta. Ja muidugi, ta ei oleks läinud poodi, kui nad teadsid, et sa olid juba teel. Nii reaalses maailmas, kuidas sa võisid Et seda probleemi vältida, eeldades, et teil on külmik, teil on toakaaslane, ja mida sa tegelikult meeldib piima? Publik: teavitamine. DAVID Malan: teavitamine. OK. Aga kuidas võib suhelda? Publik: Jäta teadmiseks. DAVID Malan: Jäta teadmiseks, eks? Alati jätke NB! fännid show. Olgu, alati jätta tähele, või pane tõesti nagu tabalukk või midagi on külmkapp, mis hoiab oma toakaaslane kontrollimise seisu et muutuja. Nüüd, miks see nii Sobiv Ülesanded seitse või sularahaautomaati. Noh, kujutage ette maailma ATM kus sa võiksid minna kuni ATM masin siin, ja teise ATM siin. Ja see juhtub üsna sageli. Ja arvan, et teil on kaks ATM kaarte, mis on võimalik saada. Ja sa sisse logida mõlemad masinad tõhusalt samaaegselt loodetavasti kui keegi vaatab. Ja siis sa kirjutad oma PIN umbes samal ajal. Ja siis sa saldopäring näha, kui palju raha sul on. Ja oletame, et sul on $ 100 lahkus oma konto. Nii et sisuliselt üheaegselt, siis öelda üks, null, null, siseneda. Ja sa loodetavasti saan tagasi raha. Aga kui palju raha võiks sa tagasi? Nüüd arvutid lõpus päeval, eriti kui nad on rääkinud serverid, ei pruugi asju järjekorras, mis on oodatud. Nii oletame, mis juhtub, sest olenemata võrgu kiirus küsimusi seal on või CPU küsimusi on, või midagi sellist, arvan, et Esimene ATM kontrollib oma tasakaalu ja näeb, oh, see inimene on 100 $. Aga siis saab segane, sest võib-olla backup toimub ja seega on aeglustub. Või äkki kui kontroll-, võrk ühendus on pisut aeglasem, sest see lihtsalt juhtub. Nad on füüsiline seade. Nii vahepeal teise ATM küsib sama küsimuse. Kui palju raha David on? $ 100 on vastus. Aga sellepärast, et esimese ATM ei ole veel saatnud sõnumi lahutama $ 100, nii Sularahaautomaadid on kontrollitud panga võlvkelder, näeme seal on $ 100 olemas, ja nüüd mõlemad masinad potentsiaalselt on läheb sülitama vastus. Nüüd on see suurepärane sa mõnes mõttes kui see, mida pank teeb lõpuks on muuta summa miinus 100 võrra milles muutuja võrdseks pangakonto võrdne 0, mitte tehes miinus 100. Nüüd halvimal juhul panga jaoks - või parim pank, vahepeal nad annavad sulle $ 200, ja pangakonto näitab nüüd negatiivne $ 100, mis tegelikult ei ole kasu sa üldse. Aga asi on selles, et see rass tingimus kaks toakaaslased saada piima, või kaks pangaautomaati üritavad raha ja muuta riigi võlvkelder samal ajal on olemas mõni kord, kui on andmebaas. Nüüd probleem seatud seitse, see küsimus tekib tunne, et kui ostad osakaal Facebook stock, ja siis Näiteks ostate teine ​​osa Facebook aktsia, mida on vaja teha Otsust on programmeerija. Selleks, et otsustada, kuidas uuendada andmebaas, koefitsiendid sa lähed on üks rida, et laos ja see on üks viis seda rakendada. Ja sa lähed on üks osa FB, mis on nende börsikood Selle kasutajanime või see kasutaja ID, kordumatu tunnus. Kuid sama lugu võib juhtuda siin. Kui te ei vali SQL, kui näete Probleemse pani seitse, kui näed, oh, David on üks osa Facebooki aktsia. Lubage mul nüüd muuta, et see oleks kaks aktsiat, sest ta tahab osta Teine osa. Aga oletame David oli tegelikult kaks brauseri aknad avatud, või oletada, et see on ühine konto abikaasade ja mõlemad üritavad sooritada sama operatsiooni ka seal, võimalik, et otsus oleks baseeruvad eelmise riik maailmas - kontol on üks osa - ja nii inimesed, või mõlemad serverid nüüd proovida öelda juurdekasvu seda kaks aktsiat. Aga sel juhul, sa võisid laetud minu raha nii aktsiatesse, kuid suurendatakse ainult see üks kord. Nii lühike, põhiprobleem siin, nagu nalja lahkumist märkida või panna tabalukk, on see, kui kaks inimest, või kaks niidid - arvan, et tagasi tühjalt - saab kontrollida riigi mõne muutuja ja proovige seda muuta muutuja, kuid need kaks asja ei juhtu juures Samas aga ei saa katkestada teiste asju juhtub, andmeid saab sattuda väga imelik riik. Ja te võite saada või saab kannatada selles mõttes, et raha näiteks. Nii et probleem komplekti seitse, anname see üks rida koodi, mis pikemas lugu lühike, lahendab selle probleem MySQL. See on väga pikk juhend, mis ei isegi mahuksid ühele joon ekraan siin tagab, et teie töö on see, mida nimetatakse aatomi. See kõik juhtub korraga, või seda ei juhtu üldse. See on väga pikk lause ei saa saada katkenud osaliselt. Ja mis see on sõna otseses mõttes mida ta ütleb. Lisada mõned tabel järgmise kolm välja need konkreetsed väärtused, kuid korduv võti, ei tee sisestada. Kas uuendada. Nii et see on nagu teed SELECT ja INSERT niiöelda samal ajal. Ja mis on peamine, mis on ilmselt on nimetatud siin? Selgub, ja te näete seda probleem seatud seitse spec, sest meil tunnistada, et on olemas unikaalne võti selle konkreetse tabeli nii, et sa ei saa olla mitu rida sama kasutajaga Sama senti aktsia sümbol - selles näites siin, DVN.V on rumal senti aktsia, et me vaadake ka spec. Sest me oleme kuulutanud olema ainulaadne, mida see tähendab, et kui sa proovige sisestada dubleeritud rida, sa oled asemel läheb uuendada ilma keegi, kellel on võimalus muuta olukord maailmas nii. Nii lühike, see tagab asjad on aatomi. Üldiselt küll, andmebaaside nagu MySQL - ja sa ei pea seda funktsiooni p-set seitse, kuid hoida seda meeles tulevikus - toetama nn tehingute kui sa ei saa öelda, START TEHINGU sõnalt. Seejärel saab täita kaks SQL avaldused. Ja SQL, kui näete p-set seitse, tundub vähe midagi sellist. Uuenda tabel nimega konto. Seadke tasakaal veerg võrdne olenemata tasakaalu veerg praegu on miinus 1000, kui number konto number, nagu kasutaja ID, võrdub 2 ja seejärel ajakohastada konto dot dot dot. Nii üldarusaadavat mõttes, mida need kaks päringuid näivad teed reaalses maailmas mõttes pangandus? Publik: teisaldamine kokkuhoid. DAVID Malan: Täpselt. Raha ülekandmisega ühelt moodustavad teise. Ja see on veel üks näide, kus sa tõesti need kaks asja juhtuda või ei juhtu. Sa ei taha midagi saada Nende keskel ja potentsiaalselt segi ajama matemaatika või segi ajama, kui palju raha sul on, või kui palju raha pangas on. Niisiis, mida on tõesti tore tehingud MySQL on, ja andmebaaside üldisemalt on see, et nad ja arukad inimesed, kes olen rakendatud need funktsioonid välja mõtlema, kuidas teha kindel, et nii need asjad juhtuda või üldse mitte. Ja kui sa oled tõesti soovivad teha veebileht, mis on kasutatud inimest campus, inimesed reaalses maailmas, tehes midagi startup mõttes need on liiki disaini otsuseid, mis saanud kunagi nii oluline. Muidu hakkate kaota andmeid, kaotavad kasutajate või halvimal juhul kui oleme näinud siin, potentsiaalselt kaotada raha. Nii et taas, veel sellel aastal probleem määrata seitse, samuti võib-olla mõnede sa lõplik projekte. Nii muudame selle pildi pidime hetk tagasi just veel üks viis. Nii et lubage mul tegelikult näha, kas ma suudan - nope, mis on kadunud. Siin see on. Nii et see on koht, kus me pooleli viimast korda. Ja selgub, me Toss üks asi veel arvesse segatakse siin - keeles nimetatakse JavaScript. Nii JavaScript tegelikult sobib sellesse tükk - ja ma ei ole päris jätta piisavalt ruumi, nii see ei ole nüüd skaala. OK, see on tõesti hale. OK, nii see on JavaScript. Hea küll. Ma tõesti seda teha karuteene. Hea küll. Nii JavaScript on teine ​​programmeerimine keel ja meie viimane, kui see aitab kinnitada, et seal ei ole palju rohkem on tuletõrjehüdrandid siin. Nii JavaScript on ka tõlgendada keel, mis tähendab, et sa ei kompileerida see nulli ja ones. Sa lihtsalt käivitada. Aga mis on põhimõtteliselt erinev JavaScript tavaliselt on, et sa ärge seda oma veebiserver. See ei saa toimuda Seade iseenesest. Pigem ta saab alla laadida kasutaja poolt HTTP selaimiinsa - Chrome, Safari, Internet Explorer, Firefox, mis iganes - ja see on brauserit, mis täidab käesoleva eriti programmeerimiskeelt. Nii, et oleks selge, PHP on seni olnud täidetakse kas käsurealt meie must ja valge aknas serveris nagu seadme arvuti nagu seade, või see on olnud sooritatud veebiserver töötab arvuti. Aga teema on see, et PHP seni on teostatud server-side, nii kasutaja ja kasutaja brauseri kunagi näeb rida PHP kood. Tegelikult, kui te kunagi avada brauseri veebisaidi või teise ja sa tegelikult näha PHP kood oma aknas keegi on silmamunad. Sest see ei ole mõeldud selleks, et olla saadetakse brauser otse. See peaks olema täidetud ja välja millekski nagu HTML. Aga JavaScript on sisuliselt vastupidist. See tähendas, et sõidetakse tavaliselt sees on kasutaja brauseri aken. Ja milliseid veebisaite kasutada JavaScript siis nendel päevadel? Nagu sõna otseses mõttes iga populaarne veebilehel. Iga veebileht, et te ilmselt kasutada iga päev kasutada JavaScripti Lihtsaim ja isegi seksikaim funktsioone. Seega midagi nagu Facebook Jututuba kui te kasutate seda. Kuidas see tegelikult toimib? Noh siiani on kõik asjad oleme teha HTML ja PHP eeldab, et sa tõmba URL ja vajutad Enter, ja näed mõned HTML-sisu. Ja klõpsate linki, mis muudab URL, muutub leht ja uuestilaadimise mõned uue sisu. Klõpsake teise URL või esitama vormi, siis saada pühitakse teisele lehele ja näete mõned uue sisu. Aga kasutades midagi Facebook Chat, või Gchat või Google Maps, harva Mis terve lehekülg värskendada, nii et näete valge ekraan hetkeks ja siis uus sisu. Pigem veebilehti täna on dünaamiliselt saada ajakohastatud uuesti ja ja jälle kõik omamoodi ja kulisside taga. Ja selgub, et kui sa minna midagi nagu Facebook või Gchat, või Gmaili ja lehel uuendused automaatselt ilma pealelaadimisel kogu ekraani, mis juhtus on see, et Teie brauser on teinud omamoodi salaja täiendav HTTP taotlusi - mitte kogu veebilehti, kuid ainult vähe tükkideks andmed, nagu instant sõnum, et teie sõber lihtsalt saadetakse teile või staatuse värskendus keegi lihtsalt saata teile või piiksuma et keegi lihtsalt saata. See on lihtsalt tegemist vähe taotlusi andmed ja seejärel kasutades JavaScript, see programmeerimise keel, seda muuta veebileht välja näeb ilma server aidata, ilma et server on need HTML. Nii lühike, JavaScript saab kasutada siis mitte ainult tooma uued andmed server ümberlaadimata kogu leht või plangil. Samuti võib kasutada, et muuta nn DOM - Document Object Model - mis on lihtsalt fancy viis ütles puu HTML et me nägime viimast korda. Nii, et rahustada JavaScript on süntaktiliselt nii sarnane C samuti. Ei ole põhifunktsioon. Sa lihtsalt hakake kood ja see saab täidetud, või tõlgendada enam korralikult. Tingimused näeb välja selline. Ei erine C või PHP, et asi. Loogiline väljendeid või-ed kokku näeb välja selline. Anded koos välja nägema selline. Lülitid näeb välja selline. Sest ring näeb välja selline. Kuigi ring näeb välja selline. Kas samas silmuseid näeb välja selline. See on uus. Nii JavaScript ei ole foreach ehitada per se, kuid see ehitada muutuja i massiivi ja ma selles juhul muutub indeksi väärtus. Nii et see on natuke erinev foreach, kuigi uued versioonid JavaScript tulevad välja kogu aeg, nii et isegi need keele funktsioonid arenevad. Ja kõrvale JavaScript nendel päevadel saab kasutada ka serveris nagu PHP abil raames kutsutakse Node.js. Üks CS50 on TF, Kevin, on viinud seminar Node.js see on kättesaadav cs50.net/seminars. Nii et kui sa oled uudishimulik, tean, et sa saab kasutada seda serveripoolne nagu hästi, kuid see on üsna hiljutine suundumus, kuid võimas seda. See on veidi erinev. See on massiiv JavaScript. Ja mis lööb sind erinev versus C või PHP? Siin on mõned kiired lood saame öelda siin. Mis puudu versus PHP? Publik: [kuuldamatu]. DAVID Malan: Jah? Vabandame, ütlen veel kord? Publik: Ei kuulutatakse tüüpi muutuja. DAVID Malan: Me ei kuulutatakse tüüpi muutuja. Nii tegelikult üsna nagu PHP, me ei ole täpsustatakse tüüpi muutuja. Pigem oleme rohkem üldmõistena öeldes var muutuja. Meil ei ole PHP ebameeldivalt dollari märk, mis samas tüütu tüüp, ei tee veel selge, et midagi on muutuv. Arvestades siin, me oleme omamoodi tagasi C lähenemine just kutsudes muutuja nime me tahame anda seda, nagu numbrid. Ja samuti nagu PHP, meil Nurksulgudes eest väärtused sees, et massiivi. Nii muutujad JavaScript ka tunduda see. Teade siin see on string kutsus s, aga samamoodi on meil määratlemata et see on string. Siin aga on funktsioon, mis ei ole olemas täpselt samamoodi PHP, kuid natuke sarnaselt. See on objekt JavaScript. Ja objektid on omamoodi Šveitsi armee Nuga on andmestruktuur, mida ei kasuta neid mistahes mitmeid asju. Siin näiteks, me kuulutab muutuja nimega tsiteerida. Tüüpi muutuja on objekt. Sa ei mõtle seda kui C struct et on võtmed ja väärtused. Sümbol on võti. FB on väärtus, ilmselt aktsia sümbol. Koma. Hind on veel üks oluline ja selle väärtus on ilmselt ujukoma või number üldisemalt JavaScript on $ 49,26. Nii PHP ei ole - me ei ole näinud PHP objektid üsna meeldib see, kuid me ei vaata analoog, mis oli mis? Publik: [kuuldamatu]. DAVID Malan: assotsiatiivne massiivid. Nii et PHP on assotsiatiivne massiivid mille süntaks on kunagi veidi nii erinev - nägime nurksulgudes. Nägime imelik nooled sümbolid. JavaScript on esemeid, kuid see on enamasti semantilist ja erinevate sünonüümina nüüd. Kuid nagu kõrvale, PHP on ka objekte, nii et Java ja muude keeltes on objektide objektorienteeritud programmeerimine. Aga me kasutame neid ainult andmetüüpe nüüd. Objektid ja assotsiatiivne massiivid. Seda võiks teha natuke selgem. Siin miks ese on kasulik. Kui soovite deklareerida üliõpilane, nagu Zamyla, saame tegelikult kapseldada niiöelda seestpoolt, et objekti kasutades looksulgudes nagu enne terve hunnik võtmeid ja väärtused siin. Meil on ID, maja, ja nime Zamyla, järgneb semikoolon kui tavaline lõpus. Alla ka siin, see on veidi erinevad, kuid ka väga võimas nendel päevadel. Siin on massiiv, ja ma tean, et kuna seal nurksulg üles top ja nurksulg allosas. Ja see on massiiv, milliseid andmeid kirjuta ilmselt JavaScript? See on rida tundub nagu kolm objekti. Ja ma tean, et see objekt ainult sest lokkis traksid. Ja teate seal on avatud lokkis traksidega, mõned asjad, close lokkis traksidega, koma siis veel mõned, koma ja siis veel. Nii et kolm argumenti eraldatud kaks koma. Nii et see on massiiv kolm objekti. Ja kõik need objektid tundub olevat õpilane või töötaja mõnes sort, iga ID, maja ja nimi. Aga ma olen nimetanud seda midagi nimega JSON - JavaScript Object märke. Ja see on andmed kujul, mis tegelikult on nii väga populaarne ja moes nendel päevadel, kui sa kirjutad rakendus, mis kasutab Facebook API, Twitter API, tegelikult peaaegu iga API seal nendel päevadel, sealhulgas mõned CS50 enda, andmed saad tagasi ei vana kooli CSV formaadis. Sest tagasivõtmine et CSV on super lihtne. See on lihtsalt veerud on eraldatud komadega. JSON andmeid annab rohkem metaandmed. See seostab oluline iga väärtus nii nad ei pea lihtsalt eeldada, et zeroth veerus on üks väärtus, veerg üks on teise veeru kaks on veel. Kõik on JSON objekti siin on omamoodi ise kirjeldab, sest iga üks nimed selles failis on sõna otseses mõttes nime ees seda jutumärkide. Võtame pilk mõned näited siin. Lubage mul minna seade. Ja lubage mul minna oma vhost Kataloog avalikuks. Ja lubage mul minna JavaScript kataloog. Ja olgem minna ja avada dom-0.html, kus DOM tähendab lihtsalt Document Object Model. See on puust asju, mis Mainisin. Ja las ma välja järgmise. Siin on veebileht, mille keha on üsna lihtne. Nii siin all, teate mul vormi. Me oleme näinud neid varem. Sellel on kaks sisendit, millest üks on ID nime, millest üks on tüüpi esitada, ning esimene üks tüüp on tekst. Nii see tegelikult kõlab päris lihtne. Lähme siit. Lähme tagasi sellele lehele siin. Läheme localhost ja mine Meie JavaScript kataloog ja minna dom-0, ja siin on meil seda vormi. Nii et ilmselt kõik see leht teeb. See on nimi valdkonnas Submit nuppu. Aga ma ei kavatse kasutada PHP siin. Ma teen kõike kliendi poolel niiöelda JavaScript järgmiselt. Pange tähele, et ma olen tõepoolest antud nimetus valdkonnas selle sisendi ainulaadne tunnus, mis tegelikult päästa mind mõnda aega hetkel. Ja teate Olen tutvustas teise tag peas minu veebilehele  tag. Nii et see on selles mõttes, et JavaScript on kliendipoolse programmeerimiskeelt. Sellisel juhul nagu CSS, ma olen panna seda otse sees minu HTML. Kuid pange Olen deklareeritud funktsioon mis näeb välja natuke nagu PHP lauseehituslikult, kuid see on tegelikult JavaScript, sest jällegi, see on kliendipoolne brauser. Ja võtke ära arvata, mida see läheb teha, kuigi mõned süntaks siin on uus. Publik: Ütle tere kes. DAVID Malan: See saab öelda tere sellele, kes külastab seda lehte. Niisiis, kuidas? Nii teate, selgub JavaScript seal on alert () funktsiooni. See on väga omamoodi kurb funktsiooni tõesti lihtsalt kipub tüütama kasutajatele. See ei ole see, mida peaks tegelikult kasutama tavaliselt, kuid see on kiire ja räpane viis omamoodi trükkimise midagi et graafiline kasutajaliides liides, nagu brauseris. Pane tähele, mida ma pean string ülakoma. Selgub, et erinevalt C, JavaScript võib tegelikult olla te kasutate ühe hinnapakkumisi, ja ausalt öeldes on see lihtsalt selline stiililise konventsiooni vahel JavaScript programmeerijad kasutada ülakoma. PHP, kui neil tegelikult on veidi erinev tähendus. Aga nüüd, lihtsalt tean, et see on ainus põhjus. Konventsiooni JavaScript on sageli Kasutada ülakoma, kuid me ei kasuta jutumärgid mõlemas kohas samuti. Nii et see on huvitav. Meenuta viimast korda, et meil oli see pilt ekraanil, mis juhtis puu kus sa pidid HTML sõlm ja tippsõlme ja keha sõlme, ja siis mingi teksti. Aga seal oli üks eriline sõlm väga top, et ma helistasin dokument. Noh, tuli välja JavaScript, iga kord, kui sa kirjutad programmi JavaScript brauser, teil on juurdepääs eriline globaalse muutuja. Sarnase sisuga PHP superglobals, see üks on kutsutud väiketähti dokument. See on nagu struct, kuid see struct Samuti on funktsioonide sees on. Nii C struct lihtsalt on andmed tavaliselt. Aga JavaScript objekt, sest see Tehniliselt on ka funktsioone, muidu tuntud meetoditega sees on. Ja võite helistada funktsioon sees Selle objekti sõnalt teeb oma nimi, punkt, ja siis nimi funktsioon, või jälle meetod. See on lihtsalt sünonüüm, tõesti. Ja mida see funktsioon teeb? Võite omamoodi arvata oma nime. Hangi elemendi ID. Nii see läheb otsima veebilehe otsida, et puu, otsin sõltumata sõlme, AKA element, on unikaalse ID quote lõppeb nimi. Ja mis ma nüüd teen? Ma lähen, et saada raha sees et sõlme puust ja ma lähen kuidagi tere öelda, et nimi. Nii et arvan, kuigi me pole seda näinud veel, mida teha, pluss sümbolid tähendavad siin ja siin ilmselt? Publik: CONCATENATE. DAVID Malan: CONCATENATE. Just, ja need on vaid omamoodi disaini otsuseid inimesed tegid aastat tagasi. PHP, sa concatenate asju dots. C, kui hüpata läbi mitme kõvadele ja Kõnefunktsioonid nagu strCopyDatabaseOK () või strcat () või muid selliseid funktsioone. Aga JavaScript, kasutate plussid. Nii et see on lihtsalt concatenating kolm stringid - tere, nime ja seejärel hüüumärk. Niisiis, millal ja miks on see funktsioon nimetatakse küll? Noh, arvan, et alates HTML allosas. Miks tervitama () nimega, või millal? Ilmselt nii hästi ma võin öelda, on esitama, kui see vorm on esitatud, Ma teen kõik, mis on sees need jutumärgid. Ja just, ma lähen helistada tervitama () ja siis tagasi vale. Noh, vaatame, mis net mõju on siin esimene. Nii et lubage mul minna ja kirjuta , ütleme, Loren, Saada. Tere Loren. Vaatame, kui võib-olla see oli lihtsalt õnnelik rakendamist. Nope. Nii see on kirjutades läbi mis iganes nime ma tegelikult sinna pannakse. Aga teate, mis ei muuda. URL on ikka dom-0.html. Pole register.php. Ei ole teist faili. Teie ise ei atribuut. Mis siis on see tagasi false arvatavasti teed? Miks ma kutsudes tervitama () ja seejärel tagasisaatmisel vale ilmselt? Mis tavaliselt juhtub, kui klõpsate Esitada vastavalt vormile, et isegi meil näinud viimase nädala jooksul? Publik: [kuuldamatu]. DAVID Malan: See läheb kuhugi, eks? See läheb mõne sihtkoha URL. Aga ma ei taha, et see juhtuks siin. Ma tahan, et mu veebilehe täiesti dünaamiline nagu Gmail, kus, kui sa oled seal, siis seal viibida. URL ei muutu nii, et näitab terve lehekülg uuesti laadida. Pigem, ma tahan midagi muuta nagu printimisest midagi siin ekraanil. Noh las ma puhastan selle üles natuke. Lubage mul avada ei dom-0, kuid Lubage mul avada dom-2. Lihtsalt, et sa oled näinud mõned süntaks siin. Selgub, et see, mida me Kas kasutab toores JavaScript. Nii et see on tõesti keel JavaScript. Mõned võite teada raamatukogu kutsus jQuery. Nii jQuery ei ole sama asi nagu JavaScript. See on lihtsalt üks raamatukogu, mis tõesti nutikas kutt kirjutas ja populariseeritud selline et peaaegu kõik maailmas praegu kasutab jQuery, kasutades JavaScript. Ja esimesel pilgul, ausalt, see tundub veidi segasena. Aga sa leiad, eriti kui sa lähed seal oma lõpliku projekti web arengut, siis leiad, et see puhastab asju ja säästab üsna paar rida koodi. Niisiis olgem lihtsalt pilk kuidas see vorm töötab. Pane tähele, mida ma eemaldada ilmselt minu HTML? Pole kohta esitama käitleja nii rääkida. Ei ole atribuut. Sest sa tead, mida Ma tegelikult ei meeldi? Tundsin olime kuuluvate vanade harjumuste seal. Just nagu ta oli hakanud tundma lohakas segunevad nii CSS HTML, sest sa oled selline viskamine erinevates keeltes üle kogu koht, samamoodi ei see enesetunne nagu halb tee minna, kui Panen JavaScripti koodi sees minu HTML asemel faktooring välja. Nii et see õppetund. Dom-2.html, ma faktooring välja. Ja ma teen asju veidi erinevalt. Sest nüüd ma lähen laine mu käed , mida see tõepoolest all kapuuts. Aga just nüüd eeldada, et esimene koodirida selles raamatukogu nimetatakse jQuery tähendab lihtsalt, kui dokument on valmis, tehke järgmist. Kuna veebilehti võib võtta aega laadida. Sa võid olla aeglane internet ühendus, ja see võib olla ketramine ja ketramine, ja lõpuks see on laetud. See koodirida lihtsalt ütleb oodake Kogu leht on valmis, dokument on valmis, enne täidesaatva see kood. Ja nüüd teate, et see on ilmselt kõige esimene kasulik ära võtta jQuery. See joon siin on väga sarnase sisuga sellele palju pikem rida siin. Arvestades, et tooraine JavaScript koodi, seal olemas dokument globaalse objekti, on funktsioon nimega getElementById () inimesed, kes kirjutas jQuery lihtsustatud, et lihtsalt öelda, dollari märk, ja siis sees Sulgudes panna kaks hinnapakkumisi ja seejärel pane hash sümbol, millele järgneb unikaalne ID, mida soovite haarata. Nii et see on võrdne document.getElementById. Vahepeal. Esitama tähendab lihtsalt edasi esitamine mis tahes vormis sa oled viidates vasakul, minge minna ja täita see. Aga see on nüüd uudishimu ka. Mis on imelik, mida Olen siin esile? Mitte ainult see on omamoodi süntaktiliselt uus, seal on ka midagi puudu. Publik: See on lihtsalt kutsutud funktsioon? See ei ole nn hoiatus? DAVID Malan: Jah. Noh, nii alert () ei tööta siin, kui aus olla. Aga seal ei mainita Nime, nagu te teate, foo või midagi siin. Ja tõepoolest, see on üks funktsioone JavaScript et on üsna võimas, kuid ka üsna uus. Ja PHP tegelikult on see samuti. Lubage mul minna ja teha midagi päris kiire. Lubage mul minna ja panna see siia. Lubage mul seda teha. Funktsiooni. Kutsume seda handler (). Handler funktsioon nii rääkida. Midagi, mis käsitleb teatud tööd. Lubage mul koristada minu taandus. Ja pane see siia. Ja pane see siia. Yep. OK. Nüüd mul on funktsioon nimega handler (), et ma tõesti ei tea, mida see veel. See lihtsalt on veel see värk. Ups. Võttis liiga palju. Teeme seda. Hea küll. Vabandust. Hea küll. Lubage mul seda teha. OK. See ilus ja sirge edastada nüüd. Lubage mul seda teha. Tehke seda. Ja OK. Nüüd, paneme selle siia. Enam programmeerimine lennult. OK. Nüüd lähme tagasi kui lugu algas. Varem ma ütlesin, et see joon siin tähendab, et kui dokument on valmis, mine minna ja seda teha. Mida ma tahan teha? Noh täpsemalt, ma tahan minna edasi ja tehke järgmist. Käivita see koodirida ja seejärel mida ma tahan, et sa ei kutsuvad seda töötada, kui vorm on esitatud. Nüüd on see, mida on huvitav. See ei ole iseenesest funktsiooni. Pane tähele, ma ei esita sulgudes siin tavalisel viisil. Ma sõna otseses mõttes möödaminnes funktsioon nimega handler () teise funktsiooni kutsutakse esitama () argumendina nagu kuigi see on nagu muutuv. Ja see on üks tunnuseid JavaScript on ülesandeid ise on tõesti ainult esemed. Tegelikult on nad tõesti lihtsalt muutujad mingisugune. Ja kui nime funktsioon handler (), ei ole põhjus, miks ma ei saa andke seda argumendina siin. Ja see tähendab, kui vorm ID-demo on esitatud, nimetame seda funktsiooni. Aga nüüd, kui ma tagasi võtta kõik see, miks siis ma võib-olla teha see hetk tagasi? Noh, see on anonüümne funktsioon. Sest ausalt öeldes, ma sain aru, miks ma olen häirib raisata aega kuulutatakse funktsiooni nimetatakse handler () vaid helistada see üks ja ainus koht? Kui ma ei pea nime, ja ma ei ole vaja kutsuda rohkem kui üks koht, Ütleme lihtsalt rakendada funktsioon õigus, kus seda vaja on. Ja nii JavaScript ja PHP tugi, mida kutsutakse anonüümne funktsioone Lubage mul teha just seda siin. Aga me lihtsalt kriimustada pinda. Olgem kiusa vaid paar lõplik näited siin. Kui ma minema quote.php. Pange tähele, et see on tegelikult PHP funktsiooni PHP programm, mis ma kirjutasin mis eeldab HTTP parameeter nimega sümbol, ja ma ei liigu väärtus nagu FB. Ja kui me tegelikult vaadata allikas kood, see on päringu tasuta veebisaidi kutsus Yahoo Finance, nagu p-set seitse ja see on jälle mind midagi ilmselt formaat tuntud on JSON - JavaScript Object märke. See on lihtsalt ese. Märka lokkis traksid, jutumärgid, koolon ja koma. Nüüd vahepeal see on päris lahe. Sest ma ilmselt kasutada programmi keeles, et tekitada Aadressid mis näeb välja selline dünaamiliselt, eks? Ma ei muuda seda, et Google ja saada tagasi Google'i aktsia hind $ 1,017.55. Seega vaatame, kas me saame kasutada seda nüüd. Lubage mul minna Ajax 0 siin, mis Tundub, et järgmine. See on lihtsalt veebileht, mis on vormi nuppu. Lubage mul siin minna ja kirjuta YHOO Yahoo aktsia sümbol, kliki siia Quote, ja nüüd teate ma olen saanud tähelepanelik 32,86. Las ma tegelikult minna Kasvataja versioon Selle lehe versioon kaks ja kirjuta oletame Microsoft, MSFT. Saa Quote. Ja nüüd teate, ei ole häire. Pange tähele, kui ta ütleb hinna tuleb kindlaks määrata? On lihtsamaid näiteid, mis vihjab mida Gchat ja Facebook Vestlus ja Gmail ja muu selline veebilehed teete, tegelikult muutes veebilehele. Pange tähele, see. Lubage mul asendusostu lehekülge. Lubage mul avada Chrome'i inspektor. Lubage mul minna elemendid tab siin. Nüüd teate, kui ma suumida siin ja selle avada, teate, et see on minu HTML DOM - minu dokumendi objekti mudeli. See on minu HTML. Aga nüüd teate, kuigi see läheb olla natuke raske näha seda nii kohas korraga, kui ma tüüpi FB siin, vaata alt ekraani ainult. See on tõepoolest muutub minu HTML lennult. Ja ta teeb seda üsna lihtsalt tehes midagi sellist. Kui ma avada ajax-2, teade rakendamisel midagi nii seksikas kui , et kuigi see on päris kole, kuid nii kogenud kui et funktsionaalselt, on mõned HTML allosas. Aga teate ma kasutasin sildistada. Me ei kasuta seda enne, kuid see on nagu, kuid see ei sunni kõik peale uue rea. See muudab ristkülikukujuline piirkond samal liinil põhiliselt. Pange tähele, et ma andsin selle ID hinna. Ja selgub, kasutades sama JavaScript raamatukogu, mul on funktsioon nimetatakse quote () seda nimetatakse, kui vorm on esitatud. Ja mida ma teen on see. Teatan muutuja JavaScript nimega url, säästes raha quote.php? symbol =. Teisisõnu, ma ise olen hakanud valmistada HTTP taotluse ja seejärel Ma concatenating peale, et koos plus olenemata elemendi ID sümbol on, mida teate, et tekstiväli siinsamas. Nii lihtsalt meeldib pidime vormid minevikus. Ja siis selgub, jQuery, kui te helistada. val (), mis kutsub ja val Funktsiooni väärtus funktsioon, mis saab olenemata kasutaja on kirjutatud sisse Ja siis kõik võrguliiklust mis juhtub, on see. $. GetJSON. Ja kõrvale, dollari märk on lihtsalt stenografist märke. See on tõesti jQuery.getJSON. Viige mind JSON selle URL, ja kui taotlus tuleb tagasi, nimetame seda funktsioon ja liigu kui argument mis iganes tuli tagasi serverisse. Nii teisisõnu, kui ma tagasi minna brauser ja ma lähen tagasi quote.php, Mis minu brauser teeb on saada see patakas andmed. Ja kui ma lähen selle veebilehe siin teate, kui me selle asemel minna võrku tab ja selge see, ja siis kirjuta midagi GOOG Google ja saada Tsiteeri märka leht ei muutunud. Aga HTTP taotlus esitati, ja mida tulin siia tagasi, kui me vaatame vastus on terve hunnik JSON et me siseneme lõpuks koos Selle lihtsa line siin. Andmed, mida ei saanud serverist. Hind on nimi võti ma hoolin. Nii data.price annab mulle. Nüüd vahepeal ja see on viimane näide. Seda saab teha veel rohkem lehel. Üks tegelikult ka kaks. Saame tagasi tuua sildistada, kui sa mäletad seda. See JavaScript. Me saame seda teha. Väga põnev. Me lahkume, et pinge. Aga rohkem põnevalt, saate selliseid asju tegema. Kui ma lähen geolokaliseerimise-1, selgub et Chrome teab, et me oleme laius, pikkus 42,37. -71,10. Nii et seal on isegi rohkem seal Teie käsutuses. Aga rohkem sellest järgmisel nädalal. Näeme esmaspäeval.