DAVID Malan: Dobře. To je CS50, a to je Konec týdne devět. Bylo to vichřice přes Posledních pár dní. A problém nastavit sedm, pokud jste koleno hluboko do ní, uvědomit si, že je to docela trochu nového, co tam je. Ale uvidíme, jestli nemůžeme kus vše dohromady zde stručně do té doby skáčou off v ještě jiný směr a vidění kam jinam můžeme jít. Takže tak daleko, že jsme mluvili o HTML. Mluvili jsme o CSS. Mluvili jsme o PHP. Začali jste zažít SQL. Dnes budeme mluvit trochu o JavaScriptu. Ale jak se všechny tyto nesourodé jazyky zapadají? Takže jsme mluvili minulý týden o Pojem má server. Takže pojďme jen kreslit tento obdélník jako webový server zde. A webový server slouží jistě souborů. A některé z těchto souborů mohou být soubory HTML. Takže jedna z věcí, které webový server může vyplivnout může být soubor, který budeme jen kreslit takhle obsahuje nějaké HTML. Takže laicky řečeno, to, co se HTML nechat udělat? DIVÁKŮ: Page sluší. DAVID Malan: OK, aby stránky vypadat hezky, i když myslím, že jsem ukázala které by jinak. Takže HTML se vám rozvrhnout stránky strukturálně, a to umožňuje trochu esteticky označit stránku, označí se statický obsah, takže pak jej prohlížet pomocí webového prohlížeče. Ale to je ten klíč. Je to statický obsah. Můžete psát, můžete ji uložit, a pak si to loď. A webový server pak slouží že až vaše návštěvníky. Ale stylizovat věci pomocí odlišné jazyka vůbec. Začali jsme používat atribut stylu o některých značek. A atribut style vydejme věci, jako je velikost a barvu písma. A pravděpodobně jste začali objevovat, nebo brzy bude na finále projekty potenciálně, zatím ostatní vlastnosti, které můžete použít v CSS. A tak v Laicky řečeno, to, co Opravdu pak se CSS dělat? To jsou jen příklady z nich. Co to nechat udělat HTML Nezdá se, že z toho, co Viděli jsme tak daleko? DIVÁKŮ: Definovat styly sami. DAVID Malan: Definovat styly sami. Takže definovat věci jako třídy jako vy může se setkali, nebo jedinečné identifikaci uzlů v dokumentu tak, které si můžete stylizovat je. Ale přesněji, řekl bych, že CSS Opravdu vám umožní vzít věci poslední míle a umožňuje specifikovat mnohem přesněji estetika, vzhledem k tomu, HTML z větší části umožňuje strukturovat své stránky. A i když tam jsou některé výchozí hodnoty, jak jsme viděli značku pro číslo tag, který zhruba řečeno dělal věci velké a tučné. To je dost obecná definice tagu - velký a odvážný. Co velikost písma je, že? Jakou barvu má, že? Jak tučně je, že? A CSS vám umožní jemněji naladit podobné věci. Stejně jako vzhled, jako některé o které jste viděli. A upřímně řečeno, CSS je trochu nepořádek jazyka. Je to velmi silný v tom, že si můžete dělat doslova všechny webové stránky, které jste vidět na webu dnes, ale je to docela bolest v krku. A někteří z vás se praštil hlavou proti zdi už jen udělat něco hloupého jako centra nabídek na problém nastavit sedm, pokud jste se dostali do tento bod již. Ale uvědomit si, ty věci mít snazší v průběhu času. Začnete všímat vzory. A opět, Google bude váš přítel pro různé způsoby, ve kterém můžete řešit tyto druhy problémů. A troufám si říci, CSS, HTML a další Obecně platí, že můžete vyřešit problémy mnohem více způsobů, z nichž všechny by mohly velmi dobře být v pořádku, než byste mohli něco jako C, a to i PHP nebo JavaScript teď. Existuje jen mnoho různých způsoby, jak laické věci. Ale to se začali chaotický, řekli jsme. Jen trochu směšování vaše HTML a Váš CSS s atributem style byla trochu nedbalý. A tak jsme místo toho řekl, druh abstraktně řečeno, že byste měli alespoň začít faktor z vašeho CSS pravděpodobně. Atributy, není váš styl, ale alespoň používat značku stylu v co část webové stránky? DIVÁKŮ: Head. DAVID Malan: V čele. Až dosud jsme měli jen titul až tam, ale můžete také přidat styl označit, a můžete dát svůj CSS zhruba mluvení směrem k horní části stránky. Ale pak jsme si vzali věci o krok dále a my zapracovány, že z více do samostatného souboru. A tak se tyto dva soubory byly nějak se podnikem propojeny. A opravdu to bylo tag, že to udělal. A to, co bylo jednou z hlavních motivace pro vytknutí naši CSS o to více? DIVÁKŮ: Znovupoužitelnost. DAVID Malan: Znovupoužitelnost. Je to tak? Možná jste viděli v p-set sedm již že mnoho stránek, nákup strana, prodejní stránky, portfolio stránky, jsou pravděpodobně strukturované poněkud podobně. Je tu CS50 finance logo nahoře Pokud jste se rozhodli to změnit. K dispozici je zápatí na spodní stran. A CSS umožňuje pak faktor ven je do samostatného souboru tak, aby v případě, Chcete-li něco změnit na celém světě v rámci celého vašeho webu, můžete opravdu Jen ji změnit na jednom místě. Ale je tu cena, kterou zaplatíte potenciálně by mít zapracovány ven CSS z mého souboru HTML do samostatné soubor odkazování ji tag, který jsme viděli v pondělí. Co by mohlo být nevýhodou to? Vzpomínal před týdnem, když jsme mluví o HTTP a TCP / IP a jak internet funguje. Něco tady? DIVÁKŮ: Je to zabere více času. DAVID Malan: Je to zabere více času. Proč? DIVÁKŮ: [neslyšitelné]. DAVID Malan: Jo. Takže to pravděpodobně zabere trochu více času. Vzhledem k tomu, jeden, CSS je samozřejmě není ve stejném souboru. Takže teď musíte udělat ne jedna, ale dvě žádosti. A každý z těchto požadavků, jak jsme viděli v Chrome v tzv. inspektor, a podívali jsme se na síťové kartě, každý z těchto souborů vyžaduje jeden HTTP Žádost, kterou jsme viděli se nějaké množství času. Nyní, možná to není moc. Možná je to jen 20 milisekund. Možná je to 200 milisekund. Ale myslet na stránce jako je Facebook, nebo CNN nebo Google, které jsou mnohem větší než příkladech jsme Podíval se na tak daleko. Tyto stránky mohou mít desítky souborů, z nichž každá může vyžadovat stahování souboru. Takže, co může potenciálně začít zpomalovat. A zejména v těchto dnech, kdy jsme se všichni mají mobilní telefony v našich kapsách a pomalejší připojení k internetu, které mají na počkejte několik milisekund, pár více milisekund pro další soubory mohou být ve skutečnosti pomalé. Latence je slovo, které popisuje druh čekání, že jste, že jste zkušenosti při čekání na některé údaj. Ale je tu vzhůru. Takže to není jen druh - ve skutečnosti je trochu houpačce zde. Zpomalení teď, ale co můžete udělat prohlížeče pokud jsou inteligentní, aby se zabránilo museli žádat stejný Styles.css soubor opět možné udělat co? Cache je. Tak caching - C-A-C-H-E - obecně znamená, zde jen ušetřit soubor, který požádal poprvé, a pak zkontrolovat cache pro něj. Zkontrolujte, zda jste tak trochu zásobníku, a pokud již kopie styles.css, i když jiné Stránka v p-set, nebo webové stránky, žádá znovu, jen aby uživatel, který stejný mezipaměti kopie. Neobtěžujte se o to požádá. Nevýhodou je, i když, jak někteří z vás se zakopl v p-set. Pokud provedete změnu na serveru a se vrátíte zpět do prohlížeče a vy znovu, někdy dělá prohlížeč si laskavost a neobtěžuje si znovu stáhnout si soubor Styles.css protože, no tak, jaká je pravděpodobnost, že tyto styly, které Facebook používá se bude měnit každou hodinu, nebo ze dne na den? Je to docela nízká. Mohou v průběhu času měnit, ale ne minutu od minuty nebo hodiny. Takže trik, jen FYI, když dělá web vývoj, je často podržte klávesa Shift pro instance a pak klepněte na tlačítko znovu v prohlížeči, a které budou typicky říct prohlížeče znovu načíst všechno, i když už máte se ve vyrovnávací paměti. Takže znovu, upsides a nevýhody, ale všechny z nich nakonec rozhodnutí o návrhu. Takže teď jsme nejen konec příběhu zde. Kdybych se vrátit a znovu a znovu a zpět, jsme začali zavádět nejen HTML, ale PHP. Takže laicky řečeno, to, co PHP se pojďme dělat? DIVÁKŮ: [neslyšitelné]. DAVID Malan: Co je to? DIVÁKŮ: Zavést logiku do kódu. DAVID Malan: Jo, zavést logika do kódu. Takže je to pravda, programovací jazyk se smyčkami a proměnných a funkce, a podmínky, a všechny věci, které jsme používali cestu zpět když od nuly. A PHP, jsme viděli, může být použit buď na příkazovém řádku - to nemusí mít nic společného s webem, i když je to opravdu jeho původ a co to inklinuje být dobrý v a přispívá k - ale můžete použít PHP pouze od přírody k tomu, že má na tisk () funkci a funkci printf (), nebo echo () funkce. Je tu hrozny způsobů, jak si můžete tisknout text s PHP. Proto, můžete použít tento programování Jazyk pro výstup přesně to, co jsme mluvili předtím. Můžete dynamicky generovat vaše HTML. Možná, že ne všechno. Možná, že tvrdé kód věci, jako záhlaví a zápatí, a logo, a vaše stylů, a to vše. Ale něco jako p-set sedm, kam manipulaci zásoby a ukazuje uživatele portfolio, které je bude dynamicky měnit, můžete určitě používat PHP a logiku to dává Vy jako programovací jazyk pro výstup dynamicky podmnožiny části stránky. Takže když mluvíte o dynamických webových stránek, nebo webové programování, je to co jste o tom mluvili. Používání jazyka, jako je PHP, nebo věci tzv. Python, Ruby nebo, nebo Java, nebo Zatím další jazyky, dotazů na databázový často, nebo jiný server, a pak dynamicky vyplivnout HTML. Nyní konečný výsledek, jako stranou, je že HTML většiny internetových stránek, včetně vašeho p-set sedm, je pravděpodobně Bude to obrovský zmatek, pokud se podíváte na zdroje kód v prohlížeči. To není velký problém. V tomto okamžiku, kdy nám záleží styl, Staráme se o věci, které píšete. Nebudeme starat o věci že to, co váš kód výstupy. Takže se nemusíte starat o odsazení zde, pokud je to PHP je to vlastně výstup věci. Koneckonců, bude prohlížeč nezajímá, a lidské nebude hledat u zdroje v každém případě. My zaměstnanci, například, by při pohledu na vaše PHP. Takže mi dovolte dát rychlý příklad nyní proč jinak by to mohlo být užitečné. Takže upřímně řečeno, nemůžu si vzpomenout poslední Když jsem použít C vyřešit problém reálný svět. Bylo to pravděpodobně v postgraduálním studiu, když Potřeboval jsem se použít jazyk, který Byl poměrně nízké úrovni, a dal mi příležitost udělat něco velmi vysokou předvádění opravdu ušetřit tolik CPU cyklů, jak jsem mohl, z velké části protože jsem byl s použitím velké datové soubory, a každý CPU cyklu počítá. A upřímně řečeno, i ve věcech, jako jsou mobilní telefony v těchto dnech a další zařízení kde nemáte dost mít tolik paměti a nemáte dost mít za hodně CPU, díky rychlejším jazyků je stále atraktivní. Ale v reálném světě, když jste právě chci hodit nějaký program, společně se analyzovat některé údaje, nebo jste nasbírali Celá parta registrací pro některé studentská skupina a chcete se velmi rychle automatizovat odesílání e-mailů jeden po druhém, aby každý z těch o registraci, budete dosáhnout na jazyk vyšší úrovně než C, abych tak řekl. Něco jako PHP nebo Python nebo Ruby, nebo půl tuctu dalších, které existují v těchto dnech. Ale ti tři jsou pravděpodobně Nejvíce trendy právě teď. A co to znamená, je to, že můžete otevřít do textového editoru, například gedit nebo většina něco jiného a pak už jen začít psaní kódu, aniž by se museli starat o sestavování, aniž byste museli opravdu starat o správu paměti, mít na paměti, že i když trochu povrchnost se nakonec vrátí vás kousnout, pokud datový soubor dostane větší nebo problém dostane velký. Ale co to znamená pro nám je následující. Nech mě jít napřed a spustit pravopisu od problém nastavit šest. Tak tohle je moje implementace trie na bázi které jsem použil na velký board, kde jsem provedl to tak dobře. Vrátíme se za týden a znovu ty, kteří se skončit na vrcholu velká tabule na naší poslední přednášce. Ale teď, nech mě jít dopředu a jen spustit můj řešení v textu, a budeme dělat King James Bible, a jdeme na to. Tak to jsou všichni údajně chybně zapsaná slova z King James Bible. A můj realizace se půl druhé v celkem. Takže není tak špatné na to zejména počítače. Ale přemýšlet o tom, kolik Kód jsem musel napsat. Zamyslete se, kolik kód, který musel napsat. Zamyslete se, kolik hodin jste strávili v D-haly nebo na koleji, nebo tam, kde vlastně kódování se toto řešení. No, když jsem ve skutečnosti mají vyšší úroveň jazyk jako PHP, vzít na vědomí co se dá dělat. Nejprve předpokládejme, že je to místo vaše distribuce kódu. Jedná se o soubor s názvem pravopisu. Je k dispozici jako součást dnešní distribuce kód. A budu mávat mou ruku nanejvýš detailů, ale to je vlastně zajímavý příklad toho, jak byste mohli portu jazyk jako C přes PHP. Doslova jsem otevřel dvě textová okna, jeden s mým C verze speller.c, a já jsem právě začal jeho překlad v mém zamiřte do PHP a psát to pomocí nejbližší ekvivalentní funkce. Takže některé z těchto věcí jsou různé. Viděli jsme minule, že PHP nepoužívá jsou ve zcela stejným způsobem. Používá se obvykle vyžaduje, i když patří skutečně existuje. Definujte je trochu odlišný od # Define v C, ale to je jak udělat konstantu. $ Argc to dopadá existuje v PHP, takže jsme předtím viděli, že. To jsou jen proměnné, vše z které začínají znaky dolaru. Připomeňme, to jsou jen banda plovoucí bodů. Tak dlouhý příběh krátký, jste vítáni flip přes to, pokud zvědavý, je to téměř line-pro-line konverze C verze speller.c do PHP. A můžete to udělat znovu půl tuctu dalších jazyků. Ale co je zajímavé je to. Nebo to, co je řečeno skličující je to. Nech mě jít do toho a napište o dictionary.php, a tvrdí, že jsem jít dopředu a re-implementovat problém nastavit šest zde. Takže pojďme navrhnout jako první, že v tomto soubor, který bude realizován v roce PHP, tak ať mi otevře své značky, jako je to. Dovolte mi, abych sám globální Proměnná $ velikost dostane na nulu. A já jdu dát Sám hash tabulky. Budu používat hash tabulky pro tuto věc. Jak mohu vyhlásit hash tabulky v PHP? Hotovo. OK. Takže levá závorka závorka představuje co v PHP, jak jsme viděli? Pole, ale pole, které by mohly být asociativní pole. Asociativní pole je datová struktura, která sdružuje klíče s hodnotami. Nyní v nejjednodušší číselně indexované pole, tyto klávesy jsou, co? Nula, jedna, dva, tři, jo? Old school věci zpět od C. Ale to může být i řetězce jako foo a bar, nebo Maxwell, popřípadě za řetězec. Takže můžu využít, že za chvíli. Nech mě jít dopředu a prohlásit funkce jako - pojďme udělat první load (). Takže funkce load (). A PHP je v tom, že trochu jinak doslova typ funkce, ale nezadáte návratový typ. Chystám se jít dál a říkají, že funkce load () by měla v Argument $ slovník, jen jako C verze dělala. Dělám, že z paměti. A já navrhuji, že jsem bude to dělat. Já prostě dělat foreach. Jdu zavolat funkci nazvanou soubor (), procházející v názvu, která soubor, který je variabilní $ Slovník jako $ slovo. A pak se v mé smyčky for tady, jsem jít dopředu a skladovat v mém $ Tabulka $ slovo dostane pravda. Hotovo. Oh, počkej. Hotovo. OK. To je zátěž funkce () říkají v PHP. A teď, proč to má fungovat? A já jsem trochu podvádění zde. Tak, jeden, foreach jsme viděli krátce minule. To jen znamená, že můžete iteraci pole, aniž by se obtěžoval se i a n a a a, a to všechno. Slovník je samozřejmě název souboru, něco jako velký nebo malý, dva slovníky, které jsme použili minule. Soubor je funkce, která otevírá textu soubor, přečte ji v řádek po řádku, a ruce můžete zálohovat obrovskou škálu, každý z jehož prvků se řádek z tohoto souboru. Tak to je kombinace fopen, a fread, a zatímco smyčka, a fclose, a všechny, které. Konečně, jak slovo prostě znamená, že je Proměnná Budu mít přístup k na každé iteraci v této smyčce. Takže ve zkratce, tato jedna vložka se zde rozumí otevřít soubor, jehož jméno je v slovník, variabilní, iteraci je řádek po řádku, a pokaždé, když se linka, sklad v proměnné s názvem slovem, a pak udělat něco se slovem. Co chci dělat? Chci vložit slovo do mého hash tabulky. No, můžu dát něco v mém hash tabulky, stejně jako v C pomocí hranatých závorek. To je jméno mé tabulky hash. Budu index do tohoto hash tabulka na tomto místě. Takže není bracketing nula, není bracketing jeden. Držák citace konec citátu něco, co to slovo je. A stejně jako můžete mít ve vašem hash table práce trie, který jste právě obchod účinně Boolean, implicitně nebo explicitně. Hotovo. Já skladování hodnota true. Teď je tu pár věcí, Jsem řezání zatáček na tady. Technicky vzato, tam to bude nepříjemné nový řádek, / n, na konci každé z těchto slov. Takže jsem měl asi zavolat funkci PHP tzv. chop (), která bude doslova sekat to pryč. A já opravdu potřebujete udělat ještě jednu věc. Asi bych měla zvýšit velikost na každém iterace, takže jsem sledování na celém světě o tom, co to je. A upřímně řečeno, a to je jeden z hloupější aspekty PHP pokud jste použití globální proměnné, je nutné explicitně říci, že jste. Takže budu vlastně psát v globálním $ Velikost, global $ table, a teď má funkce je kompletní. Takže není tak jednoduché, jako předtím, ale Pravděpodobně trvalo kratší dobu než C verze, možná? OK. Takže teď pojďme udělat kontrolu funkce (). Uvidíme, jestli to alespoň se hodiny na konci, že nám to trvalo v C. Takže nech mě jít dopředu a prohlásit kontrolu jako funkce. Bere v argumentu slovo, které je přijde z pravopisu. A já jsem prostě jít zkontrolovat, zda Následující proměnné isset, stolní Držák strtolower slova - pojďme vyvážit všechny mé závorkách - pak se vrátit pravda. Else - to bylo opravdu těžké Součástí tohoto programu. Else, vrátí false. Hotovo. To je kontrola (). A teď, proč to funguje? No, jednou jsem prošel ve slově, což je řetězec. Za druhé, já jsem kontrolu uvnitř hash stůl, který se nazývá $ tabulka. Já nutit ji, aby malá voláním funkce velmi podobné tolower () v C, ale to dělá celé slovo, není jediný znak. A v případě, že je nastaven, jinými slovy, že je nastavena hodnota, jinými slovy, jestli je to pravda, pak ano, to je slovo. Protože jsem ji tam s load (). A jestli ne, budu se vrátit false. Nyní ostatní jsou jednoduché. Velikost Function (), jak to mám udělat? V podstatě jsem to vrátit $ velikost. Ale já to technicky nutné udělat tento nepříjemný věc. A vlastně se slyšet, byl jsem řezání jeden roh příliš mnoho. Já opravdu potřeba udělat global $ tabulku. Ale to bylo řečeno, vyložit). Uvolnit () je úžasná. Funkce vyložit (). Jak mohu chtějí zavést vyložit ()? Hotovo. OK. Takže vyložit (), správa paměti je kompletně postaráno pro vás něco jako PHP a mnoho v jazycích vyšší úrovně. Tak to je úžasné. Jako důvod, proč to sakra jsme strávili na minulost osm plus týdnů na C písemně zřejmě docela pomalé, ale opravdu čas náročné problémy s desítkami hodin z práce pod našimi pásy? No, na jednu věc, to může fungovat pokuta pro malé programy. To jistě zrychlil my doba vývoje. Ale pojďme se podívat, co se děje v reálném světě. Nech mě jít do tohoto adresáře v terminálu. Tam je kontrola pravopisu. A všimněte si, jak stranou, a vy byste mohli se setkal tento problém v nastavení šest nebo problém nastavit sedm. Nemusíte striktně nutné konec PHP soubory s příponami. php. Pokud vložíte řádek, jako ten první na samém vrcholu, to je zvláštní linka syntaxe, která v podstatě znamená, že si program s názvem PHP a používat to, aby interpretovat tento soubor. Takže teď nikdo neví, že Běžím PHP program. Mohu spustit stejně jako by to bylo něco sestaveny v C. Ale tady je to věc. Ve skutečnosti, pojďme to udělat znovu. Dropbox/pset6 /. Tam je kontrola pravopisu. OK, 0,44 sekundy. To má rychlejší tentokrát. Teď pojďme do verze PHP. Hezké. Ale jen pomyslete, jak mnoho času Zachránil jsem v úředních hodinách. OK. Takže 3,59 sekundy, což ve skutečnosti nezní přesné jeden. Ale to je proto, že dlouhý příběh krátký, když tisknete z obrovské množství věcí na obrazovce, které sám zpomaluje věci dolů. Co to vlastně vzal v CPU Přístroj byl 3,59 sekundy, v kontrast na C, který se 0,44 sekund nejnověji. To je opravdu pořadí velikost jinak. Takže tam, kde je to, že cena jde? Proč je to tak mnohem pomalejší? Proč PHP provádět tak špatně? Danielle? DIVÁKŮ: Vy jste opravdu použít hash tabulky. DAVID Malan: Já jsem opravdu použít hash tabulky. Tak nějak jsem to udělal. Takže je to asociativní pole. S největší pravděpodobností, pokud lidé v PHP jsou opravdu chytrý, oni používali pod kapuce aktuální hash tabulka implementována v něco jako C nebo C + +. Ale. Jo. DIVÁKŮ: [neslyšitelné]. DAVID Malan: Jo. Takže každý z funkcí jsem psal nyní - ve skutečnosti, můžete říci, že ještě jednou trochu hlasitěji? DIVÁKŮ: Každá z funkcí, které jste součástí má mnohem plnější kapacita než - DAVID Malan: Tak to je pravda. Je tu mnohem víc hlavou, že jsme není opravdu vidět, že se zaměří pouze na dictionary.php, který jsem napsal. Naopak, je tu celá tlumočník děje v pozadí. Opravdu, když jsem běžel tohoto programu je nebyla spuštěna sestavené nul a jedniček určen pro svůj procesor Intel. Spíše to byl spuštěn řádek po řádku PHP kód, který vypadá přesně rádi bychom zadali. A tak při každém použití interpretovaný jazyk, můžete skutečně zaplatit tuto cenu. Bude to trvat nějaký čas na čtení váš soubor shora dolů, zleva vpravo, a pak provést každý seřadit znovu a znovu. Nyní ve skutečnosti, a to zejména na internetu, můžete skutečně urychlit tento proces ukládání do mezipaměti výsledky PHP kód se vykládá. A to dává smysl na webu, protože Pokud nemáte jeden uživatel podobného mě tady, ale 1000 nebo 10000 uživatelů, pak možná poprvé, kdy je soubor přístup je pomalé, ale poté je to mnohem rychlejší. Ale i toto je opět kompromis. A něco jako údaje z výzkumu nastavení, nebo dokonce něco jako velké to bude nakonec uživatelé začínají cítit, že zpomalení. Takže ve zkratce, interpretované jazyky velmi hodně v módě velmi oblíbená, a upřímně řečeno, jsou pravděpodobně jazyky, by se měly dostat k při řešení problémů Po CS50. Ale uvědomí, jak moc jste opravdu brát jako samozřejmost pod pokličku opravdu těch několik posledních týdnů hash tabulky a stromy, a snaží se, které se používají v konečném důsledku ke skutečně realizovat věci, jako je levá závorka, hranatá závorka, kterou můžeme nyní vděčně brát za samozřejmost. Takže pojďme se podívat teď V této souvislosti web. A už jsem zmínil minule, že je tu banda superglobálních v PHP, který opravdu nejsou důležité na příkazovém řádku. Jsou více relevantní v kontextu použití PHP ve webovém kontextu. Takže PHP běží na webovém serveru, aby vytvářet věci, jako je HTML. A my jsme se podíval na $ _GET a $ _POST a to je místo, kde uživatelé automaticky " vstup skončí prostě pokud zadáte tvoří na soubor s příponou. php v na webu serveru jako zařízení. Ale podívejme se krátce na $ A $ _SESSION _COOKIE. Laicky řečeno, to, co je jako cookie chápete to v kontextu pomocí web? DIVÁKŮ: Soubor v počítači. DAVID Malan: Jo. Je to soubor v počítači uživatele vysazeny z nějakého webu jste náhodou navštívit. Takže když jdete na Facebooku, když jdete na bankofamerica.com, když jdete na google.com, když jdete do téměř jakékoliv internetové stránky na světě v těchto dnech, včetně cs50.net, je zasazen cookie na počítači, který je buď hodnota uložená v paměti RAM v počítače v paměti prohlížeče, nebo někdy opravdu soubor uložen na pevném disku. A co je obvykle uložena v tomto souboru není vaše uživatelské jméno, ne heslo, obvykle není něco, citlivé, pokud webové stránky není tak dobře se jejich bezpečnosti, ale spíše to je velký jedinečný identifikátor mezi dalších věcí. Je to velké náhodné číslo zasadil na vašem počítač, ale můžete myslet, jak jakýsi virtuální ruky razítko jako z klub nebo nějaký zábavní park, který umožňuje zaměstnanci, majitelé, které služby, se vzpomenout si, kdo jste. Takže v případě, že velké náhodné číslo jako 12345678, i když to je samozřejmě ne příliš náhodné, myslím, že o tom, jak ruční razítko, že při návštěvě facebook.com poprvé, že razítko, že číslo na ruce. A pak, protože mluvíte HTTP, vás je prohlížeč, a protože Facebook samozřejmě mluví stejně jako web server, HTTP protokol říká, že kdykoliv následně dostaví facebook.com, ať už je to druhá později o hodinu později, i další den, tak dlouho, jak máte explicitně odhlášeni, který účinně je jako mytí rukou. HTTP říká, že byste měli prezentovat své předat razítko Pokaždé, když vrátit se k dané internetové stránce. Co Facebook pak dělá, je, že podívejte se na té straně razítko a říkají, ach, 123456789. Nevím, na první pohled, že tento je David Malan v Cambridge, Massachusetts, ale mohou kontrolovat své databáze a říkají, ach, člověk na jehož počítače se zasadil 123456789 je David Malan z Cambridge, Státě Massachusetts. Ukažme, že uživatel pak jeho profil strana nebo jeho News Feed. Ale je tu problém, pokud to je, jak web opravdu funguje. Pojďme se podívat na rychlý příklad. Pojďme skutečně jít říct facebook.com. Ale dříve, než jsme mohli jít tam, ať mě jít dopředu a otevřít Chrome je Inspektor tady dole. Podívejme se na kartě sítě. A teď pojďme do toho a zadejte v https://facebook.com. A dělám to tak, že nevidíme všechny tyto přesměrování a odpadů čas dívat se skrz ty. Dovolte mi, abych stiskněte klávesu Enter. Dobrá. Vidíme spoustu žádostí. Tam je Facebook. Je tu celá banda souborů. A tady, na mé zmínky o Latence poslední době, to je Mnoho požadavků HTTP. Ale první z nich je pravděpodobně nejzajímavější. Takže pojďme přejděte sem, a Budu přiblížit ve vteřině. To bude trochu nepořádek, ale pojďme se podívat. Facebook se zasláním Spoustu věcí. Ale hej, zajímavé. Jsou výsadbu ne jeden, ale čtyři ruční razítka na ruce zde. Set-cookie, Set-cookie, set-cookie, set-cookie. A existuje několik funkcí zde. Všechny z nich zmínit některé druh expirace. A vypadá to, že Facebook je doufat, že pamatovat si mě až do roku 2015. Tak to je pravděpodobně čas od které Musím se odhlásit nebo se budu jen automaticky předpokládat, že jsem nevrátí. Takže to je vlastně slušný množství času. A tam jsou některé další co se děje tady. Tato cookie se zdá být násilně odstraněny tím, že říká, že skončila v roce 1970 před sušenky existoval. Takže prohlížeč právě děje předpokládat, OK, to je jako mytí rukou razítko. Ale teď, když můj prohlížeč je následné žádosti - nech mě jít napřed a to Znovu a znovu načíst. Nyní mi dovolte přejděte zpět do top žádost a jít dolů zde požádat záhlaví. Všimněte si toto. Takže teď jsem za ne hlavičky odpovědi, ale všimnete, že říká, že záhlaví požadavků. A všimněte si, že můj prohlížeč jako součást jeho žádost poté, co udeřil znovu načíst je poslal alespoň následující informace. Nezadáno-cookie, však cookie. Tak tohle je řádek, záhlaví HTTP tak, mluvit, kde můj prohlížeč je druh z, aniž bych věděl, že předložení moje ruka na Facebooku kontrole. Takže tyto soubory cookie mohou být použít pak na co? Chcete-li si vzpomenout, kdo jste, nebo si vzpomenout, jak kolikrát jste tam byli, nebo opravdu něco. Takže tady je counter.php. A dovolte mi, abych zvětšit písmo. A pokaždé, když jsem znovu načtěte tuto stránku, oznámení je to pamatovat, kolikrát Byl jsem tam. No, to není tak působivé. Řekněme, zavřete tuto kartu, a teď se vraťme k http://localhost/counter.php. Ach, to je zajímavé. To ještě si pamatoval, i když jsem zavřel kartu. A upřímně řečeno, když zavřete prohlížeč, pokud by byla provedena správným způsobem, jsem mohl ještě pamatovat, že tento uživatel je který on nebo ona byla poprvé, a jen jednou jsem se jít do nabídky Chrome, který tady je tady, a přejděte na Historie a klepněte na tlačítko Vymazat údaje o prohlížení, jak někteří z vás mohou mít v minulých, jen pak soubory cookie ve skutečnosti se v průběhu webu smazány vývoj. Takže, pokud půjdeme - pojďme zblízka gedit zde. A když jsme se jít do tohoto souboru. Nech mě jít do našeho vhosts / localhost / public, a nech mě to udělat counter.php. Všimněte si, že to je dost jednoduchý program. Je to docela jednoduché webové stránky. Takže v horní části souboru je jen komentář. Ale tady je nová linka, která vám může viděli již v p-set sedm, session_start (). Toto je řádek PHP kódu, který v podstatě říká, webový server, make Ujistěte se, že razítko rukou a učinit Ujistěte se, že kontrolu ručních razítek. To je vše, co vedení dělá, a to dělá všechno tento proces pro nás. Pak všimnete Právě jsem dostal dvě pobočky zde. Je-li čítač klíč uvnitř této speciální globální proměnná s názvem $ _SESSION Se nachází - jinými slovy, v případě, že je nějaká hodnota, že - pojďme ji a uložit je do místní proměnné s názvem $ counter. Else, pojďme přiřadit $ counter Výchozí hodnota 0. Tady je jeden aspekt PHP, který je požehnáním i prokletím. PHP je trochu nedbalý. Takže zatímco v C, co by Rozsah počítadla byly buď tady, nebo tady? To by byla omezena na těchto složených závorek. Hádejte, co? V PHP existuje i mimo ty, složené závorky, tady a tady, a tady a tady, a i dole. Takže říkám, to je požehnání v tom smyslu, že nemusíte přemýšlet, jak těžké, jak jsme to udělali před několika týdny. Ale je to také trochu prokletí v tom, že bez ohledu na to, kde můžete použít proměnnou v PHP, alespoň v programu, jako je tento, je to globálně přístupné pro lepší nebo horší. Takže budete muset mít na paměti, že se Vaše proměnné nemusí být definováno. Možná jste je definovali jinde. Ale co mám dělat nakonec? Jdu uložit uvnitř, že globální proměnná jako hodnota Počítadlo klíč výsledek dělá počítadlo plus 1. Takže je to jen aritmetický že dělá inkrementace tohoto pultu. A skutečnost, že jsem ukládání, které hodnota v roce je zde znamená v podstatě aktualizovat databázi si uvědomit, že uživatel 123456789 byla zde dvakrát. A když jsem to zase příště znovu načíst stránku, bude to kontrolovat moje ruka razítko a říkají, ach, uživatel 123456789 má nyní zde byl třikrát. A tak to, co PHP a podobné jazyky dělají pro nás je, že se zjišťuje, jak a kde a na jak dlouho ukládat hodnoty v této speciální superglobal. A to superglobal na příště navštivte stránku je trochu magicky pre-obydlený, naplní hodnotami, které tam byli naposled jste navštívili, zda to bylo před druhou, týden před, nebo v roce 2013 a my teď mluvíme o 2015. PHP a webový server take care ze všech, které pro vás. DIVÁKŮ: [neslyšitelné]. DAVID Malan: Proměnné v PHP jsou v podstatě vždy globální, pokud Prohlašuji, je uvnitř funkce, a pak jsou místní pouze funkce. Ale protože jsem nenapsal jakékoliv funkce, které jsou nyní efektivně Globální během celého mého souboru zde. DIVÁKŮ: Je tam způsob, jak tak, aby byly místní? DAVID Malan: Je nějaká způsob, jak je místní? Pouze tím, že balí je do funkce. Který v nejnovější verzi PHP, můžete to udělat s anonymní funkce. Ale o tom více v kontext JavaScript. Ale krátká odpověď je ne. Delší odpověď je ano. Pěkný. Dobrý kvíz otázka. Dobrá. Tak konečně, samotná stránka je vlastně docela jednoduché. Všimněte si, že jednou jsem se ukončit režim PHP, odvolání že všechny tyto věci dolů Níže je jen tak nechat plivat z raw do prohlížeče. Což je v pořádku, protože já chci poslat uživatel některé HTML, ale chci dynamicky aktualizovat tento HTML. A jeden způsob, jak to udělat, je setřídit velmi rychle klesnout zpět do PHP režim, používání otevřené držák otazník znaménko rovná se, a pak výstupní hodnota čítače. Nebo v případě, že to vypadá trochu záhadné, to znaménko rovná se vlastně jen některé syntaktický cukr pro tento printf ($ counter). Ale upřímně řečeno, to je jen malý ošklivý a trochu nepříjemné psát. Takže PHP velmi pěkně nabízí tuto funkci kde si můžete jen říct, že více stručně stejným způsobem. Takže to, co se děje pod kapuce? Pojďme se rychle podívat na síti Karta pro counter.php zde. A nech mě jít napřed a první pojďme vymazat soubory cookie. Pojďme Vymazat údaje o prohlížení od počátku času. Nyní se pojďme vrátit sem. Nyní se pojďme znovu načtete stránku. A jsem zpátky na nulu. Vzhledem k tomu, moje ruka razítko bylo prát, I nyní získat nové cookie. Ve skutečnosti, pokud se podívám na kartě sítě a podívejte se na hlavičky odpovědi, oznámení že spotřebič je mi posílá cookie, jehož název je poněkud libovolně, ale druh rozumně, PHPSESSID. A to mi to posílá opravdu velké náhodné číslo. Není to celá řada. Není to úplně hexadecimální. Je to nějaký druh alfanumerický řetězec, ale pravděpodobně je to náhodné. A to je ruční razítko tak, aby mluvit, že jsem na mysli. Mezitím, když klepněte na tlačítko Načíst znovu a pak podívejte se na tomto druhém řádku mé druhé Žádost, oznámení nyní, že moje žádost Hlavičky jsou PHPSESSID rovná to, není set-cookie, ale jen cookie. A to je prezentace mého prohlížeče z mé ruky razítko. Takže teď jako ukázku, a promluvíme si více o tom za týden nebo tak, ale jakým způsobem to, aby vás zranitelné, váš účet Facebook zranitelné, a jiné takové účty zranitelné? DIVÁKŮ: Pokud někdo má své cookie. DAVID Malan: Jo, když někdo má své cookie. Myslím opravdu, stejně jako někteří z vás může se snažili na jako klub nebo zábavní park, pokud se pokusíte něco takhle kopírovat razítko, i když zpět na jiné osoby ruky, a pak on nebo ona prezentuje jako vlastní, je-li to skutečně vypadá identické, 123456789, pak web Server je zřejmě jen tak věřit, že uživatel je vám. A to je skutečně zásadní Hrozba kdykoliv budete používat cookies protože pokud někdo jen tak spoofs na Mluvíme vaším cookie, zjistí, co je je, a to buď skutečně je kopírování při pohledu na počítači a je rád, OK. David cookie je JJ3JIK a tak dále, a pak jsou dost chytrý, aby věděl jak třídit ručně odeslat, že cookie z prohlížeče nebo z Program píší, že by mohla zcela přihlásit do webové stránky jako vy. Není to tak těžké předstírat, že je někdo jiný, pokud se znovu p-set dvě, které představil, co? DIVÁKŮ: kryptografie. DAVID Malan: málo bit kryptografie. Jednoduché kryptografie, alespoň v Standard Edition, ale crypto nicméně. méně. Tak to dopadá, když se šifrovat všechny Tyto hlavičky pomocí něco, co vás může nyní víme, známější jako SSL, secure socket layer, nebo https:// adresy URL, pak se všechny tyto věci jsme byli podíval se na skutečně šifrována, což znamená, že je to jako ty nemůže číst ruční razítko. Pouze facebook.com může, nebo google.com, nebo v tomto případě přístroj může četl, že ruční razítko. Tragicky však, a znovu, je to příliš vhodné s NSA věci pozdě, dokonce i SSL je křehký. A je to ve skutečnosti není tak těžké dokonce prasknout, že šifrování. Ani ne tak tím, praskání šifrování, ale tím, že napálí prohlížeč na dešifrování údaje předčasně. Ale opět, budeme vás škádlit se, že zanedlouho. Pro tuto chvíli, jen se nebojte. Je to tragicky docela pravda. Dobrá. Takže tam, kde to teď nás opustil? Dobře, pojďme na to. Pojďme do toho a vzít rychle teaser, než jsme si pauzu. A myslím, že se budeme zdržovat déle dnes, ale budeme se ponořit do něco zcela nového a sexy, což bude povzbudit chuť k jídlu ještě víc. Tak to je teaser. Takže SQL, začali jsme mluvit o někdy tak krátce minule. Budete opravdu dostat své špinavé ruce s některými z nich v p-set sedm. A v Laicky řečeno, to, co dělá SQL - S-Q-L - udělat pro vás? Co je to? Jo. DIVÁKŮ: Pojďme si přístupové údaje. DAVID Malan: Jo. Je to pojďme přístupu k datům v databázi. Structured Query Language. A to je v podstatě programovací jazyk. K dispozici jsou funkce tom, že nebudeme používat i ve třídě. Ale můžete efektivně definování funkcí. Říká se jim uloženy postupy v SQL. Ale budeme držet to docela jednoduché a stačí jej použít pro některé základní operace jako je výběr dat, vkládání dat, aktualizace dat a mazání dat. A vy si opravdu myslíte, že databáze, jako SQL databázi, jak jen je Microsoft Excel. Vzhledem k tomu, SQL odkazuje na relační databáze, kde vztah prostě znamená tabulky. Řádky a sloupce. Takže vše, co můžete dát v tabulce jako je tento, nebo Google Docs, byste mohli dát do SQL databáze prohlášením tabulky. Nyní, jak se ve skutečnosti přístup že informace? No, s příkazy nebo dotazy, jako je tento. SELECT, INSERT, UPDATE a DELETE. A z velké části, které jsou Čtyři pouze ingredience, které budete potřebovat, aby něco docela silně v problému set sedm. Nyní zpět v den, byste ve skutečnosti interakci s databází v černá a bílá okna terminálu na blikající výzva takhle. A databáze jsme běží na Přístroj se nazývá MySQL, která je zdarma a open source databázový stroj. Pokud jste Google a přečtěte si Wikipedie článek, budete vědět, že název je bit přechodu pro některé verze Linuxu. Maria databáze je ve skutečnosti vidlice tak mluvit o MySQL. Dlouhý příběh krátký, Oracle koupil MySQL. Oracle je to velká firma. Lidé byli obávají, že by již zůstávají zcela jako open source, takže je to jen kopie MySQL, která je ještě volný, stále open source, a instalovány v Fedora Linux ve výchozím nastavení. Ale to je trochu bolesti v krk, aby se seznámili s Databáze tímto způsobem. Takže jsme se zahrnout do CS50 spotřebiče svobodný open source nástroj s názvem phpMyAdmin. Jen náhoda, že je to napsaný v PHP. Neexistuje žádný zásadní Potřebujeme zde pro PHP. Ale to je jen webový nástroj, který jsme stáhli zdarma, instalovaný v spotřebič, který nám umožňuje mít grafické uživatelské rozhraní, které se prozkoumat p-set sedm databázi pro vytvoření nové databáze, říci, pro vlastní konečné projektu, pokud by jako je, a nakonec vytvořit dynamické webové stránky, jako CS50 financí které umožňují data dotazu a aktualizovat data dynamicky. Nebudete muset použít jen jednoduchý textový soubor nebo CSV. Můžete dokonce použít inteligentní databáze program, takže můžete spustit více sofistikované dotazy, než jen čtení přes všechno lineárně. Tak například, to je to, co dáváme si po vybalení z krabice pro p-set sedm. Toto je tabulka s zřejmě alespoň tři sloupce, z nichž jeden je uživatelské jméno, z nichž jeden je hash, a z nichž druhý je ID. Ale zajímavá věc, a jen proto, aby škádlit se jednu myšlenku tady, uživatelské jméno je pravděpodobně již unikátní, že jo? Myslím, že většinu jakékoliv webové stránky, pokud Máte-uživatelské jméno, tam nemohou být dva Caesars. Nemůže být dva Malans. Nemůže být dva jharvards. Jeho jedinečná. V opačném případě, že nevíte, která jharvard to vlastně je. Takže to, co by mohlo být motivací pro i s třetí sloupec vlevo existuje tzv. ID, který vypadá jako číslo, které je podobně jedinečný? Je toho názoru, trochu redundantní se mi na první pohled. Proč by mohlo být přesvědčivé, aby se nejen unikátní uživatelská jména, ale také jedinečná čísla? DIVÁKŮ: Mohli mít stejné heslo. DAVID Malan: Lidé mohou mít stejné heslo, jistě. To by mohlo naprosto stalo. Ale pokud mají tuto jedinečnou uživatelské jméno, jsem by mohl namítnout, že není opravdu záležitost, protože kdyby zadejte své uživatelské jméno, jen musím zkontrolovat jejich heslo, jejich hash z nich. Proč jinak? DIVÁKŮ: Rychlejší vyhledávání. DAVID Malan: Rychlejší vyhledávání. Proč? DIVÁKŮ: ID je jen jeden. DAVID Malan: ID je jen jeden znak, nebo přesněji řečeno, je to číslo, takže je to asi 32 bitů nebo něco takového. Vzhledem k tomu, uživatelské jméno, zřejmě Jason Hirschhorn je tam je trochu směšně dlouhý, a bude to se mi mnohem více času na řetězec porovnat H-I-R-S-C-H-H-O-R-N, a možná / 0, nebo něco takového, aby vyhledat Jasona, jak protilehlý k jen řekl mi dát uživatelské číslo dvě. To je 32 bitů. Je to jediný INT, že Máte k porovnání. A vskutku, to je přesně důvod, proč databáze mají tendenci přiřadit jedinečné identifikátory, aby řádky v nich. A teď, co ostatní datové typy jsou tam Kromě INT a zřejmě řetězce, jako je tento? No, abych byl vhodnější, SQL databází, jako je MySQL, mají CHAR pole. A CHAR trochu zavádějícím není jediný CHAR. CHAR pole v databázi MySQL je jeden nebo více znaků, ale je to pevný počet znaků. Tak například, když jsem přejít na phpMyAdmin, jak jste již možná, nebo brzy bude problém nastavit sedm, a já jdu do mé databáze, a jen tak pro zábavu, pojďme vytvořit novou tabulku s názvem test s pouze dvěma sloupy. Budu klepněte na tlačítko Přejít. A to se stane poměrně známé, zejména pokud si pohrát asi na vlastní pěst. Tady bych mohl zadat ID vytvořit nová tabulka typu INT. Ale tady jsem mohl zadat uživatelské jméno znovu, že dřívější tabulky. A všimněte si, mám spoustu typů z čeho vybírat. A to i proto phpMyAdmin je docela hezký. Je to druh self-učení v tom, že může jen tak bod a klepněte na tlačítko, a podívejte se na rozevíracích nabídek, a vyvodit z že to, co síly SQL vám dává. A skutečně, když se rozhodnu CHAR, jsem pak je třeba zadat délku, nebo jak mnoho hodnot, kolik znaků. Takže velmi běžné hodnoty, jsou věci jako 255, ale to je trochu dlouho. Běžně je osm na uživatelské jméno. Ale to je trochu malá v těchto dnech. Tak to je rozhodnutí designu. Je to maximálně 8 znaků, 32, 255, 1000? Je to opravdu jen na vás. Ale CHAR pole pevné číslo. Tak si vyberte příliš málo a jste trochu šroubované, pokud chcete delší jméno. Vyberte si příliš mnoho, a to, co je nevýhoda? DIVÁKŮ: [neslyšitelné]. DAVID Malan: Je to plýtvání. Stejně jako v C, pokud máte větší kus paměti, než budete potřebovat, budete jen ztrácíš čas a plýtváte diskovým prostorem. Tak jako alternativa, existuje VARCHAR, který řeší tento problém tím, že léčení délku ne jako pevnou délkou, ale jako maximální délku, a pomocí proměnlivý počet znaků, který pak inklinuje používat pouze jako mnoho připálí jako vy skutečně potřebují. To zní skvěle. Proč bychom se zbavit CHAR typ dat a pak? Co by mohlo být nevýhodou pomocí VARCHARs, který zní jako by to bylo hezké vyhrát? Jo? DIVÁKŮ: [neslyšitelné]. DAVID Malan: OK, dobře. Takže pokud všechna vaše data je stejný délka, co je to starost? DIVÁKŮ: Vzhledem k tomu, ztrácíte údaje podle nich všechno říkat. DAVID Malan: Takže pokud všechny vaše data je stejné délky, i když já bych tvrdit, že určení maximální délku na VARCHAR se nijak neliší od určení pevné délky na CHAR-li Víte, že číslo v předstihu. Ale tam je opravdu, a já budu trochu extrakt z této odpovědi realitu že je tu ještě max, které by mohly být nepříjemné, zvláště pokud se narazíte na jméno osoby, která je neobvykle dlouho, že ne předvídat. A je to také o něco méně efektivní skutečně hledat na VARCHARs jako na rozdíl od vyhledávacích znaků, a to zejména na dlouhých stolů, které mají hodně a velké množství dat. Takže i zde, tematické je opět no jasná volba. Takže stačí, aby vám smysl pro jiné datové typy, které by mohly být zajímavé a to buď pro p-set sedm nebo budoucnost, je tu INT. K dispozici je BIGINT, které je jako long long. To inklinuje být 64 bitů. K dispozici je DECIMAL, které uvidíte v Problém set, což je mnohem čistič odpovědí na problémy, se se setkal s plovákem a plovoucí bod nepřesnosti. A pak je tu DATETIME. Tam je doslova datový typ, který má vypadat jako rok, měsíc, den, a hodiny, minuty a sekundy. Ale SQL databáze také věci, zavoláme indexy. A index je něco, co zadejte při vytváření tabulky aby vyhledávání a další operace účinnější. Konkrétně, je tu něco, co nazývá primární index, který by mohl deklarovat takto. Udělali jsme to za vás Uživatelé stůl dáme vám. Ale všimněte kdybych ručně obnovovat Tabulka uživatelé zde dává je jméno uživatele. Už jsem je uvedeno ID. I podle INT. Specifikovány jsem uživatelské jméno s maximálně 32 znaků. Ale pokud budeme držet rolování v tomto poměrně široké okno, upozornění, že je spoustu dalších věcí, které jsem si určíte. Jeden, mohu nastavit atributy jako, víš co, to INT by měla být UNSIGNED. Nechci záporná čísla, tak se pojďme dělat to UNSIGNED. Null není relevantní, protože Já chci, aby každý uživatel má jedinečné číslo. Nechci, aby to bylo null. Ale to je zajímavé. Mohu určit, že ID je buď primární klíč této databáze, nebo je to Unikátní, nebo je to indexovaný, nebo celý text. Takže pro dnešní účely, dlouhý příběh Stručně řečeno, primární znamená, že musí být jak koncepčně a technicky pole, které se používají pro jednoznačnou identifikaci uživatele. Takže když se podíváme do uživatelů, je to druh o slibu je vyhledat většinou že jedinečný identifikátor. A databáze zajistí, že pokud mají uživatelské číslo 3, nemůžete fyzicky vložit další uživatele se stejným číslem 3. Databáze bude prostě odmítne uložte změny. Což je dobrá věc, protože můžete chránit před sebe. já Alternativně, pro uživatelské jméno. Takže druhá řada, vyvolání, je uživatelské jméno pole. Takže druhý řádek je zde uživatelské jméno, jak jsme se tam daleko vlevo. Takže co jiného bych mohl chtít specifikovat? Nesmím, podle SQL, specifikovat dva primární klíče. můžete určit společný klíč, kde se podívejte se na obou polích, ale nemohou individuálně být primární klíče. Takže to nepřipadá v úvahu. Takže, které by mohly chci vybrat? No, UNIQUE je podobný v duchu, aby primární klíč, kde zadáte tento pole musí být jedinečné, ale je to nebude jedním I používat po celou dobu. A my nebudeme používat tuhle všechny Doba jakého důvodu znovu? Je to pomalejší, případně pokud je to dlouhý uživatelské jméno. Je to jen ztráta času. INDEX, mezitím, uvádí, že je to nebude jedinečná, ale rád bych vám umožní pracovat své kouzlo pod kapuce, aby to rychleji, abych hledat v této oblasti. Takže to asi není relevantní. Pro uživatelským jménem, ​​já tvrdím, že UNIKÁTNÍ je dobrá odpověď. Ale předpokládám, že jsme uživatelům více zajímavější než jen uživatelská jména, hashe, a identifikační čísla. Co kdyby jsme dali lidem celá jména? Co kdybychom jim dali adresy a další údaje o nich? No, pokud zadáte, že sloupec Databáze je indexována, to znamená, že MySQL nebo Oracle, nebo cokoliv databáze , kterou používáte, by měl fungovat její kouzlo a používat nějaký druh fantazie dat strukturu jako strom, nebo trie, nebo hash tabulky, nebo něco k zajištění že při hledání dat pomocí vyberte v daném poli - jako mi ukázat všem, že žije na Oxford Street. Dotaz takhle. Pokud jste zadali předem, že Chcete-index na tomto poli, vyhledávání bude mnohem, mnohem rychleji. Pokud nezadáte index, nejlepší můžete udělat, je lineární hledání, pokud to není seřazena. Ale pokud zadáte INDEX, smart lidé, kteří se do databáze - lidé jako vy, kteří nyní vědí, stromy a pokusy a hashovací tabulky - automaticky vytvořit takové údaje struktura v paměti RAM, aby se ujistil, že tyto prohlídky jsou mnohem rychlejší. FULLTEXT zatím je podobný v duchu, ale umožňuje udělat zástupný znak vyhledávání, stejně jako mi ukázat všem, že žije na ulicích, které začínají písmeno O jakéhokoli důvodu. Můžete to udělat zástupné vyhledávání takhle. Nebo, více závažné věci, jako je představení mi každý, kdo má slovo - Ukaž mi všechny, jejichž název začíná se zvláštním dopisem. Můžete vyhledávat klíčová slova tímto způsobem. Dobrá. Takže, design příležitosti tam potenciálně. Tam jsou jiní, že budu vlna ruce na. Ukazuje se, že můžete mít různé ukládací motory. A to je více tajemný, než potřebujeme Určitě na problém nastavit sedm. Ve výchozím nastavení je vy používáte něco, co nazývá InnoDB. Uvidíte zmínku o tomto někde v rozhraní phpMyAdmin je s největší pravděpodobností. Ale vím, že existují i ​​jiné konstrukce rozhodnutí, která mají potenciál zájem přijít finální projekty, pokud děláte něco webový. Ale pojďme na to. Pojďme do toho a dát na to Obrazovka jako ukázku pro příběh zahrnující vás, spolubydlící, a sklenici mléka. Pojďme se dvě minuty nebo tak zlomit zde. A pokud můžete držet kolem, pojďme zpět, podívejte se trochu na SQL, a pak trochu JavaScriptu se p-set osm v mysli. Dobrá. Takže, pojďme si myslet rohový případ, který může velmi snadno vzniknout v souvislosti s pomocí databáze, nebo Upřímně řečeno, i za použití skutečných světových věci jako bankomaty získat peníze. Tak tady je lednička. Předpokládejme, že máte taky v Váš koleji nebo váš dům. A máte jednu spolubydlící, a to jak z se vám líbí mléko například. Takže jste přišel domů ze třídy jeden den. On nebo ona ještě není zpátky. Otevřete ledničku. Opravdu chceš velkou sklenici mléka. Není mléko. Takže to, co děláte? Můžete zavřete ledničku. Můžete chytit klíče. Jdete ven na náměstí. A máte ve frontě na CVS na ty, vlastní pokladní věci, které vždy trvat déle, než ve skutečnosti s pokladní. Tak či onak. Takže, zatím, dot dot dot, vaše spolubydlící přijde domů a on nebo ona Podobně má touhu pro trochu mléka. Takže on nebo ona otevře ledničku, vypadá uvnitř, a oh, sakra. Žádné mléko. Takže on nebo ona jde ven, stane se jít na druhou CVS, který byl jen blok pryč z nějakého důvodu, a to ani ona se dostane do souladu se koupit nějaké mléko. Mezitím, přijdete domů, on nebo ona přijde domů, a co dělat, budete nakonec mít? Dvakrát tolik mléka. Ale nemáte opravdu rád mléko, které hodně. Takže teď máte tolik mléka, že nyní jedním z nich je právě jít kyselé nakonec. Tak tohle je opravdu špatný problém. Je to tak? Tak co se stalo? Takže v podstatě, je to druh ze směšné příklad. Ale pod kapotou, to, co jsme měli stát, zde je jak vás zkontrolovat stav nějakého kusu paměti, lednička. Oba vás zkontrolovat stav nějaké proměnné. Oba došli k závěru , který pak jednal dál. Ale bohužel, zatímco váš spolubydlící byl v obchodě, stav, který Proměnná změnila, on nebo ona se vrátila a nyní chce změnit stav, ale to již bylo změněno na něm nebo ní. A samozřejmě by se on nebo ona nemá šel do obchodu, pokud věděli, že jste již na cestě. Takže v reálném světě, jak jsi mohl se tomuto problému vyhnout, za předpokladu, že máte lednička, budete mít spolubydlící, a vlastně rádi mléko? DIVÁKŮ: Komunikace. DAVID Malan: Komunikace. OK. Ale jak můžete komunikovat? DIVÁKŮ: Nechte poznámku. DAVID Malan: Zanechat vzkaz, že jo? Vždy nechte poznámku, pro fanoušci přehlídky. Dobře, takže vždy zanechat vzkaz, nebo dát opravdu jako visací zámek, nebo tak něco na lednici, která udržuje vaše spolubydlící z kontroly stavu tato proměnná. A teď, proč by to mohlo být relevantní k problém nastavit sedm, nebo do bankomatů. No, představte si svět, v bankomatu, kde byste měli být schopni jít až do bankomatu stroje zde, a další zde ATM. A to se stává docela často. A předpokládejme, že měl dvě ATM karty, které je možno získat. A se přihlásit do obou strojích účinně současně, doufejme, že zatímco nikdo nedívá. A pak zadáte PIN zhruba současně. A pak děláte dotaz bilance vidět, kolik peněz máte. A řekněme, že máte 100 dolarů vlevo na vašem účtu. Takže v podstatě současně, můžete řekl jeden, nula, nula, zadejte. A doufejme, že se vrátit nějaké peníze. Ale kolik peněz můžete dostat zpět? Nyní počítače na konci dne, zvláště když mluvíte servery, nemusí nutně dělat věci, v pořadí, které se očekává. Takže předpokládat, co se stane, protože bez ohledu na síť rychlost otázky tam jsou, nebo problémy CPU existují, nebo něco takového, předpokládám, že První bankomat zkontroluje rovnováhu a vidí, oh, má tato osoba 100 dolarů. Ale pak dostane roztržitý, protože možná zálohování se děje, a tak je to zpomaluje. Nebo snad při kontrole, sítě Připojení mám trochu pomalejší, protože to se prostě stává. Jsou to fyzická zařízení. Tak zatím, druhý bankomat je ptá stejnou otázku. Kolik peněz se David má? 100 dolarů je odpověď. Ale protože první bankomat dosud není zpráva odeslána odečíst $ 100, a to jak Bankomaty jsou kontrolovány trezoru banky, vidět, že je to 100 dolarů tam, a teď Oba stroje jsou potenciálně jít vyplivnout odpověď. Nyní, to je skvělé pro vás v určitém smyslu jestli to, co banka dělá nakonec je změnit výši minus 100 o nastavení proměnné rovná vaší bankovní účet rovna 0, na rozdíl od dělat minus 100.. Nyní, v nejhorším případě pro banku - nebo v nejlepším pro banku, zatím, dávají 200 dolarů, a váš bankovní účet nyní ukazuje negativní 100 dolarů, což opravdu není přínosem pro vás vůbec. Ale jde o to, že tento závod Podmínkou pro dva spolubydlící dostat mléko, nebo pro dva bankomaty, kteří se snaží získat hotovost a změnit stav klenby současně existují nějaké když budete mít databázi. Nyní v problému nastavit sedm tato otázka vyvstává v tom smyslu, že pokud si koupíte Podíl Facebooku skladem, a pak na instance můžete koupit druhý díl Facebook skladem, budete muset provést rozhodnutí jako programátor. Aby bylo možné rozhodnout, jak aktualizovat databáze, kurzy se budete má jeden řádek pro tuto populaci, a to je jeden způsob, jak to provést. A budeš mít jednu akcii FB, což je jejich burzovní symbol Pro tuto uživatelské jméno, nebo tohoto uživatele ID, jedinečný identifikátor. Ale stejný příběh se může stát zde. Pokud si vyberete v SQL, jak uvidíte v problému nastavit sedm, když vidíte, oh, David má jeden akcí Facebook skladem. Dovolte mi, abych se změnit to být dvě akce, proto, že chce koupit Druhý podíl. Ale předpokládejme, že David vlastně měl dva okna prohlížeče otevřete, nebo předpokládat, že je to společný účet se dvěma manželi, a oba se snaží plnit stejná operace, tam taky, existuje potenciál pro rozhodnutí bylo provedena na základě předchozího stav světa - účet má jednu share - a oba lidé, nebo oba servery, nyní zkuste říci, zvýšit ji na dva podíly. Ale v tomto případě, možná jste nabitá mi peníze na obou akcií, ale zvýší jenom jednou. Takže ve zkratce, zásadní problém zde, stejně jako u vtipu o odchodu Upozorňujeme, nebo uvedení visací zámek na něm, je pokud dva lidé, nebo dva závity - myslíte, že zpět do nuly - můžete zkontrolovat stav nějaké proměnné a pak zkuste změnit tuto proměnnou, ale tyto dvě věci se nedějí na Zároveň ale může dostat přerušen ostatní, co se děje, údaje může dostat do velmi podivné stavu. A můžete využít, nebo můžete trpět ve smyslu peněžního příkladu. Takže problém nastavit sedm, my vám tento jeden řádek kódu, který dlouhá Stručně řečeno, tento problém řeší problém v MySQL. Jedná se o velmi dlouhé instrukce, která není ještě vejde do jednoho řádku na screen zde zajišťuje, že váš provoz je to, co se říká atomová. To vše se děje najednou, nebo to nestane vůbec. Jedná se o velmi dlouhou frázi nelze se přeruší částečně. A to, co dělá, je doslova to, co říká. Vložit do nějaké tabulky následující tři pole tyto specifické hodnoty, ale duplicitní klíč, nedělají vložku. Proveďte aktualizaci. Takže je to jako dělat SELECT a INSERT tak říkajíc ve stejnou dobu. A co je klíčem, který je pravděpodobně bytí odkazovalo se na tady? Ukazuje se, a uvidíte to v problém nastavit sedm je spec, protože jsme tam prohlásila, že je jedinečný klíč Na tomto stole tak, že nemůžete mít více řádků pro stejného uživatele s Totéž penny stock symbol - V tomto příkladu zde, DVN.V je hloupý cent populace, která se naleznete v spec. Vzhledem k tomu, že jsme prohlásil, že je jedinečný, co to znamená, že pokud vám pokusu o vložení duplicitní řádek, jste místo toho bude ji aktualizovat, aniž by někdo jiný má šanci na změnu stav světa a to buď. Takže ve zkratce, což zajišťuje věci jsou atomické. Obecněji však, databáze jako je MySQL - a nemusíte tuto funkci pro p-set sedm, ale mějte na paměti, pro budoucnost - podporu, co se nazývá transakce, kde si můžete říct, START TRANSACTION doslova. Pak můžete spustit dva SQL příkazy. A SQL, jak uvidíte v p-set sedm, vypadá trochu něco takového. Aktualizovat tabulku s názvem účtu. Nastavte vyvážení sloupec rovnající se bez ohledu na Sloupec Zůstatek v současné době je minus 1000, kdy je počet, číslo účtu, stejně jako ID uživatele, se rovná 2, a pak aktualizovat Účet dot dot dot. Takže laicky řečeno, co tyto dva dotazy Zdá se, že dělat v reálný svět smysl bankovnictví? DIVÁKŮ: Přenos k úsporám. DAVID Malan: Přesně tak. Převod peněžních prostředků z jednoho účtu na druhý. A to je další příklad, kde se Opravdu chcete tyto dvě věci se stane nebo nestane. Nechcete něco dostat do prostřední z nich a potenciálně zkazit matematika, nebo zkazit, kolik peněz máte, nebo kolik Peníze banka. Takže to, co je opravdu pěkné o transakcích v MySQL je, že, a databáze obecněji, je to, že a chytří lidé, kteří si realizované Tyto funkce přijít na to, jak se dělá Ujistěte se, že oba z těchto věcí se stalo nebo vůbec ne. A pokud jste skutečně ucházejí, aby webové stránky, které je používají lidé na kampus, lidé v reálném světě, dělá něco ve smyslu uvedení do provozu, jedná se o druhy Rozhodnutí design, který stávají stále tak důležité. V opačném případě, začnete ztrácet data ztratit Uživatelé, nebo v nejhorším případě jako jsme zde viděli, potenciálně přijít o peníze. Takže znovu, o tom více v problému nastavení sedm, stejně jako možná pro některé jste v závěrečných prací. Takže změňme ten obraz jsme měli před chvílí jen v jedné další cestě. Dovolte mi tedy skutečně vidět, jestli můžu - Ne, že je pryč. Tady to je. Tak tohle je místo, kde jsme opustili minule. A ukázalo se, že budeme hodit ještě jedna věc, do mixu zde - jazyk volal JavaScript. Takže JavaScript ve skutečnosti odpovídá do tohoto kusu - a já jsem docela dostatek místa, takže se není v měřítku. OK, to je opravdu ubohé. OK, takže to JavaScript. Dobrá. Jsem opravdu dělat to medvědí službu. Dobrá. Takže JavaScript je další programovací jazyk, a naše poslední, jestli to pomůže ujistit, že to není o mnoho víc z požárních hydrantů zde. Takže JavaScript je interpretovaný jazyk, což znamená, že ne zkompilovat do nul a jedniček. Stačí jej spustit. Ale to, co je zásadně odlišná s JavaScript je obvykle, že vám neběží to na vašem webovém serveru. Není se spustit v Přístroj sám o sobě. Spíše to stáhne uživatel přes HTTP do svého prohlížeče - Chrome, Safari, Internet Explorer, Firefox, cokoliv - a to je prohlížeč, který vykonává toto zejména programovací jazyk. Takže aby bylo jasno, PHP dosud bylo provedeny buď na příkazovém řádku naše černé a bílé okno, na serveru stejně jako zařízení, počítačové Líbí se spotřebič, nebo to bylo provedený webový server běžící na počítači. Ale téma je, že PHP tak daleko byl proveden na straně serveru, tak uživatel a prohlížeč uživatele nikdy nevidí řádek PHP kódu. Ve skutečnosti, pokud jste někdy otevřít prohlížeč pro vaše webové stránky nebo jiný a vy skutečně vidět PHP kód v okně, někdo zvoral. Vzhledem k tomu, že to nemá být poslal do prohlížeče přímo. Má to být provedeny a obrátil se do něčeho, jako je HTML. Ale JavaScript je v podstatě opak. Je určen pro běh typicky uvnitř okna prohlížeče uživatele. A jaké druhy webových stránek používat JavaScript pak v těchto dnech? Jako doslova každý oblíbených webových stránek. Každé webové stránky, které vy nejspíš používat denně používat JavaScript pro Nejjednodušší a dokonce sexy vlastnosti. Takže něco jako Facebook Chat pokud používáte to. Jak to vlastně funguje? No tak daleko, všechny věci máme udělat s HTML a PHP se předpokládá, že můžete vytáhnout URL, a stiskněte klávesu Enter, a vidíte nějaký obsah HTML. A kliknete na odkaz, který změní URL, změní stránku, a znovu načte nějaký nový obsah. Klepněte na jinou adresu, nebo odeslat formulář, musíte se bleskurychle na jinou stránku a Vidíte nějaký nový obsah. Ale pomocí něco jako Facebook Chat, nebo Gchat, nebo Google Maps, zřídka se celá stránka aktualizovat tak, aby uvidíte bílou obrazovku okamžik a pak nový obsah. Spíše, webové stránky jsou dnes dynamicky stále znovu aktualizován a znovu a znovu všechno nějak ze zákulisí. A ukázalo se, že když jdou na něco jako Facebook, nebo Gchat, nebo Gmail a aktualizace stránek automaticky, bez překládky Celá obrazovka, co se stalo, je, že Váš prohlížeč má z trochu tajně další požadavky HTTP - ne celých webových stránek, ale jen pro malé kousky dat, jako jsou rychlé zprávy, že váš přítel právě poslal vás, nebo aktualizaci stavu, který někdo, nebo tweet poslal že někdo poslal. Je to prostě dělat malé požadavky na dat, a pak pomocí JavaScriptu, tento programovací jazyk, změnit to, co webová stránka vypadá bez Server pomáhají, bez serveru generování tento HTML. Takže ve zkratce, JavaScript může být použit a pak nejen načíst nová data z serveru bez překládky celek stránky nebo odeslání formuláře. To může být také použit ke změně tzv. DOM - Document Object Model - který je jen fantazie způsob, jak říká strom HTML že jsme viděli minule. Takže ujistit, JavaScript je syntakticky tak podobný C i. Není hlavní funkce. Stačí začít psát kód a to bude vykonán, nebo vykládat správně. Podmínky budou vypadat takto. Se nijak neliší od C nebo PHP na to přijde. Booleovské výrazy nebo-ed spolu bude vypadat takto. Anded spolu vypadat takto. Spínače bude vypadat takto. Pro smyčky bude vypadat takto. Zatímco smyčky bude vypadat takto. Do while bude vypadat takto. To je nové. Takže JavaScript nemá s foreach postavit per se, ale tento konstrukt pro variabilní i v poli, a i v tomto Případ se hodnota indexu. Takže je to trochu odlišné od foreach, ale nové verze JavaScript je coming out po celou dobu, takže i tato funkce jazyka se vyvíjejí. A jako stranou, JavaScript těchto dnech může být také použit na serveru, stejně jako PHP pomocí rámce s názvem Node.js. Jeden z CS50 je TFs, Kevin, vedlo seminář o Node.js, že je k dispozici na adrese cs50.net/seminars. Takže pokud jste zvědaví, vím, že vám lze použít na straně serveru, jak to dobře, ale to je poměrně nedávný trend, ale mocný na to. To je trochu jiný. To je pole v JavaScriptu. A co udeří vás, jak různé ve srovnání s C nebo PHP? Existuje několik rychlých příběhů můžeme říci zde. Co chybí ve srovnání s PHP? DIVÁKŮ: [neslyšitelné]. DAVID Malan: Ano? Omlouváme se, ještě jednou? DIVÁKŮ: Není vyhlášení typ proměnné. DAVID Malan: Nejsme vyhlášení typ proměnné. Takže vlastně docela jako PHP, nejsme uvede typy této proměnné. Spíše jsme více druhově říká var pro proměnné. Nemáme PHP obtěžování znak dolaru, což při únavné typ, to aby se více zřejmé, že něco, co je variabilní. Zatímco tady, jsme trochu zpět do C je přístup jen o volání proměnná názvem chceme dát to, jako čísla. A také jako PHP, máme hranaté závorky pro hodnoty uvnitř tohoto pole. Takže proměnné v JavaScriptu i může vypadat například takto. Všimněte si, to je řetězec s názvem s, ale stejně máme neurčeno že je to řetězec. Zde však je funkce, která není existují v přesně stejným způsobem v PHP, ale trochu podobně. Toto je objekt v JavaScriptu. A objekty jsou trochu Swiss Army Nůž na datové struktury v tom, že lze použít pro libovolný počet věcí. Zde, například, budeme deklarovat proměnná s názvem citace. Typ této proměnné je objekt. Můžete myslet na to jako C struct že má klíče a hodnoty. Symbol je klíč. FB je hodnota, zřejmě symbol stock. Čárka. Cena je dalším klíčovým, a jeho hodnota je zřejmě s plovoucí desetinnou čárkou, nebo číslo obecněji v JavaScript, na 49,26 dolarů. Takže PHP nemá - jsme neviděli v PHP objekty zcela takhle, ale my jsme vidět analogové, který byl, co? DIVÁKŮ: [neslyšitelné]. DAVID Malan: Asociativní pole. Takže zatímco PHP má asociativní pole jehož syntax je někdy mírně tak různé - jsme viděli hranaté závorky. Viděli jsme podivné šipky symboly. JavaScript musí objektů, ale je to především sémantické rozdíly a jiný synonymem pro tuto chvíli. Nicméně, jak stranou, PHP také objekty, a to způsobem, který Java a další jazyky mají objekty objektově orientované programování. Ale budeme používat to jen Pro datové typy pro teď. Objekty a asociativní pole. To by se dalo dělat, že trochu jasnější. Zde je důvod, proč je užitečný objekt. Chcete-li deklarovat studenta, jako Zamyla, můžeme skutečně zapouzdřit tak říkajíc uvnitř, které objekt pomocí složených závorek, stejně jako před celým svazkem klíčů a hodnoty zde. Máme ID, dům, a název Zamyla, následuje středník jako obvykle na konci. Tady dole také, což je o něco odlišné, ale i velmi silný v těchto dnech. Zde je pole, a já vím, že proto, tam je hranatá závorka up Horní a hranatá závorka ve spodní části. A to je pole, jaká data napište zřejmě v JavaScriptu? To je řada z nich vypadá jako tři objekty. A já vím, že je to jen objekt protože složených závorek. A všimněte si, že je otevřený složená závorka, některé věci, blízko složená závorka, čárka, pak ještě víc, čárka, a pak ještě víc. Tak to je tři argumenty odděleny dvěma čárkami. Tak tohle je pole ze tří objektů. A každý z těchto objektů, se zdá, že je student nebo zaměstnancem některých třídění, každý s ID, dům, a jméno. Ale já jsem to nazval něco tzv. JSON - JavaScript Object Notation. A to je formát dat, který skutečně Je to velmi populární a ve móda v těchto dnech, že pokud píšete aplikace, která používá Facebook API, Twitter API, opravdu téměř jakékoliv API tam v těchto dnech, včetně některých CS50 vlastní, Údaje se vrátíš není old school formát CSV. Vzhledem k tomu, že odvolání CSV je velmi jednoduchá. Je to jen sloupce oddělené čárkou. JSON dat vám dává další metadata. Sdružuje klíč s každou hodnotou, aby nemají jen předpokládat, že nultý sloupec je jedna hodnota, sloupec z nich je jiný, sloupec dvě další. Vše, co se v objektu JSON zde je něco self-popisovat, protože každý jedním z jmen v tomto souboru má doslova jméno před ním jako řetězec v uvozovkách. Takže pojďme se podívat na Pár příkladů zde. Nech mě jít do přístroje. A nech mě jít do naší VHOST adresář na veřejnosti. A dovolte mi jít do JavaScript adresář. A pojďme do toho a otevřít dom-0.html, kde DOM prostě znamená, Document Object Model. Je to strom, věci, na které Jsem se zmínil již dříve. A dovolte mi navrhnout následující. Zde je webová stránka, jejíž Tělo je poměrně jednoduchý. Tak zde se na dně, Všiml jsem si formu. Už jsme viděli ty. To má dva vstupy, z nichž jeden má ID jména, z nichž jeden je typu předložit, a první něčí typ textu. Takže to vlastně zní docela jednoduché. Pojďme sem. Vraťme se na tuto stránku zde. Pojďme na localhost, a jít do náš adresář JavaScript, a jít do dom-0, a tady máme tento formulář. Tak to je zřejmě vše Tato stránka nemá. Má název pole, se tlačítko Odeslat. Ale já nebudu používat PHP zde. Budu dělat vše straně klienta tak říkajíc v JavaScriptu takto. Všimněte si, že jsem se opravdu dostal jméno Pole tohoto vstupu jedinečný identifikátor, který bude skutečně dej mi nějaký čas na chvíli. A všimněte si, co jsem představil další tag v hlavě mé webové stránky,  tag. Takže je to v tomto smyslu, že JavaScript je programovací jazyk na straně klienta. V tomto případě, stejně jako CSS, jsem dal je přímo uvnitř mého HTML. Ale nevšimla jsem deklaroval funkci že vypadá trochu jako PHP syntakticky, ale je to ve skutečnosti JavaScript, protože opět, je to na straně klienta v prohlížeči. A hádejte, co je to chystá ano, i když některé syntaxe Zde je nový. DIVÁKŮ: Pozdravuj kdokoli. DAVID Malan: Bude to pozdravit každému, kdo navštíví tuto stránku. Tak jak? Takže všimnete, že se ukáže v JavaScriptu tam je upozornění function (). To je velmi jakési smutné funkce, které opravdu jen inklinuje k obtěžovat uživatele. Není to jeden, měli byste opravdu používat obvykle, ale je to rychlé a špinavé způsob, druh tisku něco s grafickým uživatelským rozhraní, jako prohlížeče. Všimněte si, že mám řetězec v apostrofech. Ukazuje se, že na rozdíl od C JavaScript může mít ve skutečnosti použít jeden cituje, a upřímně řečeno, je to jen trochu o stylistické konvence mezi JavaScript programátory použít apostrofy. PHP, ale ve skutečnosti mají mírně jiný význam. Ale teď, jen vím, že To je jediný důvod. Konvence v JavaScriptu je často použít apostrofy, ale můžeme použít dvojité uvozovky v obou místech stejně. Tak to je zajímavé. Připomeňme si poslední čas, který jsme měli, že obraz na obrazovce, který kreslil strom kde jste měli uzel HTML, a hlava uzel a uzel těla, a pak nějaký text. Ale byl tam jeden speciální uzel na velmi top, který jsem nazval dokument. No, ukázalo se, v JavaScriptu, jakékoliv čas si napsat program v JavaScriptu v prohlížeči, máte přístup k speciální globální proměnné. Podobné duchem PHP superglobálních, tahle se jmenuje v vše malými písmeny dokument. Je to jako struct, ale to struct Má také funkce uvnitř ní. Takže C struct má jen údaje obvykle. Ale objekt JavaScript, protože to technicky je také funkce, jinak známý jako způsob, uvnitř ní. A můžete volat funkci uvnitř tento objekt doslova dělá svou název, tečka, a pak název funkce, nebo také metoda. Je to jen synonymum, opravdu. A co tato funkce dělat? Můžete trochu hádat z názvu. Získat element podle ID. Takže to bude prohledávat webové stránky, hledat ten strom, hledali bez ohledu na uzel, AKA element, má Unikátní ID citátem konec citátu jméno. A pak to, co mám dělat? Chystám se získat hodnotu uvnitř že uzel ve stromu, a jdu nějak pozdravit tímto jménem. Tak se hádat, i když máme ne viděl ještě, co dělat, a symboly znamenají tady a tady asi? DIVÁKŮ: Zřetězit. DAVID Malan: Zřetězit. Správně, a to jsou jen druh navrhnout rozhodnutí lid před lety. V PHP můžete zřetězit věci s tečkami. V jazyce C, budete skákat přes několik obručí a volání funkce, jako je strCopyDatabaseOK () nebo strcat () nebo jiné podobné funkce. Ale v JavaScriptu, můžete použít plusy. Takže je to jen zřetězení tři řetězce - ahoj, jméno, a pak vykřičník. Takže, kdy a proč je tato funkce volal i když? No, hádat z HTML v dolní části. Proč se pozdravit () volána, nebo kdy? Zdá se, že jak nejlépe mohu říct, na podat, je-li předložen tento formulář, Budu dělat vše, co je uvnitř těchto uvozovek. A konkrétně, jdu volat pozdravit () a pak se vrátit false. Dobře, pojďme se podívat, co je čistá účinek je zde jako první. Tak mě nech jít dopředu a zadejte v, řekněme, Loren, Odeslat. Ahoj Loren. Pojďme se podívat, jestli by to bylo jen štěstí implementace. Ne. Takže je to psaní se bez ohledu na jméno vlastně jsem tam dal. Ale všimněte, co se nemění. URL je stále dom-0.html. Není register.php. Neexistuje žádný druhý soubor. Tam je žádná akce atribut. Takže co je to return false pravděpodobně dělat? Proč jsem volání pozdravit () a poté vrací false asi? Co se obvykle stane, když klepnete na tlačítko Odeslat na formuláři, který ještě máme viděl v minulém týdnu? DIVÁKŮ: [neslyšitelné]. DAVID Malan: Jde to někde, že jo? Jde do určité cílové adresy URL. Ale já nechci aby se to stalo tady. Chci webové stránky, aby se zcela dynamický, jako je Gmail, kde kdysi, kterou jste tam, zůstaň tam. URL nezmění způsobem, který označuje celá stránka je překládce. Spíše, jen chci něco změnit jako je tisk na něco tady na obrazovce. No dovolte mi uklidit to až trochu. Dovolte mi, abych otevřít ne dom-0, ale dovolte mi, abych otevřela dom-2. Jen aby jste viděli nějaké syntaxe zde. Ukazuje se, že to, co jsme právě se používá syrové JavaScript. Tak tohle je opravdu jazyk JavaScript. Někteří z vás možná vědí o knihovna s názvem jQuery. Takže jQuery není totéž věc jako JavaScript. Je to jen knihovna, která opravdu chytrý kluk napsal a propagován jako že téměř všichni na světě nyní používá jQuery při používání JavaScript. A na první pohled, upřímně, to Vypadá trochu záhadné. Ale zjistíte, zvláště pokud jdete tam pro konečného projektu s webu vývoj, zjistíte, že tento čistí věci a ušetří docela pár řádků kódu. Takže řekněme, pohled na to, jak Tato forma je v pořádku. Všimněte si, co jsem odstranit zřejmě z mého HTML? Není na předložení handler abych tak řekl. Neexistuje žádný atribut. Protože víte, co Nechtěl jsem opravdu rád? Měl jsem pocit, jako bychom padali do starých kolejí tam. Stejně jako, že se začíná cítit nedbalý se prolínají i CSS se HTML, protože jste trochu házení různých jazyků po celém místo, podobně jako se to začít cítit jako špatné silnici jít dolů, kde Dávám kód JavaScript uvnitř mého HTML spíše než factoring to. Tak to je ponaučení. V dom-2.html, jsem factoring to. A já jsem něco dělal věci jinak. Pro teď, budu mávat ruce na to, co to vlastně dělá pod kapotou. Ale právě teď předpokládat, že první řádek kódu v této knihovně s názvem jQuery právě znamená, že když Dokument je připraven, proveďte následující kroky. Vzhledem k tomu, webové stránky mohou mít nějaký čas k načtení. Ty by mohly být na pomalém internetu spojení, a to by mohlo být předení a točí, a nakonec je nabitá. To řádek kódu jen říká, počkejte, dokud Celá stránka je připravena, dokument je připraven, před spuštěním tohoto kódu. A teď všimnete, je to pravděpodobně nejužitečnější první odnést z jQuery. Tato linka je zde velmi podobný v duchu k tomuto mnohem delší linky zde. Zatímco v surovém kódu JavaScript, tam existuje dokument globální objekt, který má funkci nazvanou getElementById (), lidé, kteří psali jQuery zjednodušený, že jen říct, znak dolaru, a pak se uvnitř závorky dát dvě citace, a pak vložit symbol hash následuje jedinečný identifikátor, který chcete chytit. Tak to je ekvivalentní document.getElementById. Mezitím,. Podat jen znamená, že na podání bez ohledu na formu, že jste s odkazem na vlevo, jděte dopředu a spustit to. Ale to je teď zvědavost příliš. Co je to divné, co Já jsem tady zdůraznil? Nejen, že druh syntakticky nové, je tu také něco chybí. DIVÁKŮ: Je to jen volaná funkce? Není to nazývá varování? DAVID Malan: Jo. No, tak alert () je dole zde, abychom byli spravedliví. Ale není tam žádná zmínka o jméno, jako víte, foo nebo něco, co se tady. A skutečně, to je jeden z prvků, JavaScript, který je zcela silný, ale také zcela nové. A PHP vlastně je to stejně. Nech mě jít dál a dělat něco opravdu rychle. Nech mě jít dopředu a dát to sem. Nech mě to udělat. Funkce. Říkejme toto zpracování (). Funkce handler, abych tak řekl. Něco, co se zabývá nějakou operaci. Dovolte mi, abych uklidit svůj odsazení. A dát to sem. A dej to sem. Jo. OK. Takže teď mám funkci nazvanou handler (), že jsem opravdu nevím co to dělá ještě. Je to prostě pořád má ty věci. Jejda. Trvalo příliš mnoho. Pojďme na to. Dobrá. Promiňte. Dobrá. Nech mě to udělat. OK. To vypadá hezky a rovně předal dnes. Nech mě to udělat. Udělej to. A OK. Takže teď, pojďme dát to sem. Žádné další programování v reálném čase. OK. Takže teď, pojďme se vrátit do kde začal příběh. Dříve jsem řekl, že tato linka zde znamená, že pokud je dokument připraven, jít dopředu a to. Co chci dělat? No konkrétně, chci jít dopředu a proveďte následující. Provést tento řádek kódu, a pak to, co chci, abyste udělat, je zavolat to fungovat, pokud je předložen formulář. Nyní to je to, co je zajímavé. To není samo o sobě funkcí. Všimněte si, nejsem uvedení závorky zde v normálním způsobem. Jsem doslova kolem funkci nazvanou handler () na jinou funkci tzv. předložit () jako argument jako i když je to jako proměnné. A to je jeden z rysů JavaScript je svou funkcí sami jsou opravdu jen objekty. Ve skutečnosti, oni jsou opravdu jen proměnné nějakého druhu. A v případě, že název funkce je handler (), není žádný důvod, proč nemůžu předat jej v jako argument zde. A to znamená, když je formulář s ID demo je předloženy, volání této funkce. Ale teď když jsem zpět všechno to, proč pak jsem asi dělat před tento okamžik? No, to je anonymní funkce. Vzhledem k tomu, upřímně řečeno, jsem si uvědomil, proč jsem obtěžovat ztrácet čas vyhlášení Funkce tzv. handler () pouze pro volání že v jednom a pouze jednom místě? Pokud Nepotřebuji jméno, a já ne třeba říkat více než jedno místo, řekněme, implementovat funkce přesně tam, kde jsem ji potřebují. A tak JavaScript a PHP podporovat co jsou tzv. anonymní funkce, které dovolte mi, abych to přesně to tady. Ale my jsme jen poškrábání povrchu. Pojďme dráždit se jen pár Konečné příklady zde. Pokud jdu do quote.php. Všimněte si, že je to ve skutečnosti PHP funkce, PHP program, který jsem napsal která očekává parametr HTTP s názvem symbol, a mohu předat hodnota jako FB. A pokud se skutečně podívat na zdroje kód, to je dotazování webové stránky zdarma volal Yahoo Finance, stejně jako p-set sedm, a to je návrat do mě něco, co se zřejmě formát známý je JSON - JavaScript Object Notation. Je to jen objekt. Všimněte složené závorky, uvozovky, tlustého střeva a čárky. Nyní mezitím, to je docela v pohodě. Protože jsem si asi použít programování jazyk pro generování adresy URL které vypadají jako to dynamicky, že jo? Mohu změnit na Google a vrátit společnosti Google Cena akcií $ 1,017.55. Tak uvidíme, jestli nemůžeme použít nyní. Nech mě jít na ajax-0, která sem vypadá následovně. Je to jen webová stránka, která má formulář s tlačítkem. Dovolte mi, abych tady do toho pusťte a zadejte yhoo Yahoo burzovní symbol, klepněte na tlačítko Načíst Citace, a teď Všiml jsem si, jsem dostal upozornění na 32,86. Dovolte mi, abych skutečně jít do milovník verze na tuto stránku, verze dva, a zadejte řekněme Microsoft, MSFT. Získat cenovou nabídku. A teď všimnete, žádný záznam. Všimněte si, kde se říká, že cena , které mají být stanoveny? Je nejjednodušší příklady, které naznačuje, v jakém Gchat a Facebook Chat a Gmail, a jiné takové webové stránky dělají podle skutečnosti měnící se webové stránky. Všimněte si toto. Dovolte mi, abych znovu načíst stránku. Dovolte mi, abych otevřela Chrome Inspector. Nech mě jít na prvky Karta tady dole. Teď všimnout, jestli jsem přiblížit tady a otevřít toto nahoru, zjistíte, že to je moje HTML DOM - můj objektový model dokumentu. To je můj HTML. Ale teď nevšiml, i když to bude být trochu těžké ho vidět v obou míst najednou, když jsem zadat FB tady, dívat se na dno na obrazovce pouze. Je to skutečně mění, můj HTML za běhu. A to dělá to docela jednoduše tím, že dělá něco takového. Pokud otevřu ajax-2, oznámení, kterým se provádí něco tak sexy jako že, i když je to dost ošklivé, ale propracovaný jako funkčně, že má některé HTML v dolní části. Ale všimněte jsem se označit. Jsme nepoužívá dříve, ale to je jako, ale nenutí vše na nový řádek. Je to prostě dělá obdélníkovou oblast, na stejném řádku v podstatě. Všimněte si, že jsem dal tomu ID ceny. A ukázalo se, s použitím stejné JavaScript knihovna, mám funkci tzv. uvozovky (), která je volána při každém Formulář je předkládán. A to, co dělám, je to. Jsem deklarování proměnné v JavaScriptu volal url, uložení hodnoty quote.php symbol? =. Jinými slovy, já sám jsem začínal připravit požadavku HTTP, a pak Já zřetězení na které se znaménkem plus bez ohledu na element s ID o symbol, který oznámení je, že textové pole přímo sem. Takže stejně jako jsme měli formuláře v minulosti. A pak to dopadá v jQuery, pokud volání. Val (), která volá o val funkce, funkce hodnotu, která se dostane co uživatel zadal palců A pak všichni síťový provoz že se stane tohle. $. GetJSON. A jak stranou, znak dolaru je jen zkratka notace. Je to opravdu jQuery.getJSON. Dostaň mě do JSON z této adresy URL, a když žádost vrátí, volat toto funkce a předat jako argument co se vrátil ze serveru. Takže jinými slovy, když jsem se vrátit do prohlížeč, a jdu zpátky do quote.php, co můj prohlížeč dělá, je stále Tento kus dat. A když jdu na této webové stránce zde, Všimněte si, kdybychom místo toho jít do sítě Záložka a vyčistit jej, a poté zadejte něco jako GOOG pro Google a získat Citace, všimněte si stránku nezměnil. Ale požadavek HTTP byl vyroben, a to vrátil se sem, pokud se podíváme na odpověď je celá banda JSON že přístup nakonec tento jednoduchý řádek zde. Dat je to, co se dostal ze serveru. Cena je název key mi záleží. Takže data.price mi to dává. Nyní mezitím, a to je poslední příklad. Můžete to udělat ještě více se stránkou. Jeden dokonce, i dvě. Můžeme přivést zpět označit, pokud si pamatovat. To je JavaScript. Můžeme to udělat. Velmi vzrušující. Necháme to jako cliffhanger. Ale víc vzrušující, můžete dělat věci, jako je tento. Pokud jdu do Geolocation-1, ukázalo se, že Chrome ví, že jsme na Zeměpisná šířka a délka 42.37. -71,10. Takže je tu ještě existuje k dispozici. Ale o tom až příští týden. Uvidíme se v pondělí.