HANNAH Blumberg: Ahoj všichni. Chystáme se začít jen pár minut brzy protože máme spoustu materiálu projít. Já jsem Hannah. Jsem TF. Maria se bude spojení nám za pár minut. Sekce Učí těsně před. Učím sekce právo po, takže jdeme aby ji udrželi na hodinu a půl. Tak jak uvidíte tady, máme dost několik témat musíme dostat přes, takže budeme jít trochu rychle. Ale pokud se v jakémkoli bodě řekneme něco příliš rychle, nebo nechcete pochopit, neváhejte a přerušit s otázkami. Chceme být schopni, aby se tento přezkoumá relaci jako užitečné pro všechny z vás, jak je to možné. Skvělý. Takže pojďme skočit přímo v s některá témata, že jsme vlastně velmi, velmi stručně se vztahuje pro kvíz 0 v přezkumném zasedání kvíz 0. Takže počínaje spojových seznamů. Takže jen ujistěte se, že máte nějaké základní znalosti o spojových seznamů a jsou pohodlně dělat některé ze základních operací. Takže jen přezkoumat, spojený seznamy jsou lepší než pole protože oni mohou růst dynamicky. Takže máme tu obrovskou výhodu. Viděli jsme je použit V stoly mřížky, kdy jsme nevím přesně, kolik co budeme chtít vložit do naší datové struktury. Bohužel, máme kusy propojený seznam všude paměť, takže nemusí být nutně schopný dělat konstantním čase přístup jakéhokoli prvku v Google seznamu. Aby bylo možné najít Zejména prvek, my muset opakovat všechny cesta od začátku. Takže mějte na paměti, že většina Základní operace jsou omega kyseliny 1. Takže vložka je prostě bude trvat 1. Smazat bude trvat n, protože jsme muset jít najít ji ze seznamu. A hledání může trvat, v nejhorším případě, n. Nemůžeme udělat něco jako binární vyhledávání na Google seznamu protože nemůžeme jen náhodně skok do středu. Bezva. Skvělý. Trochu stohů. To opět přišel na kvíz 0, takže vás by měly být super pohodlné s ním. Ale pro komíny, žádáme vás pamatovat stoh zásobníků. A to bude první, poslední ven. Tak jsme stack věci v zásobníku, a potom pokud se snažíme, aby se něco, off-- který nazýváme praskání off stack-- jsme přišli z vrcholu. A pokud chceme dát něco ve stohu, říkáme to tlačit. Takže je vždy bude vyrůstat ze dna jako sloupce podložek. Skvělý. Viděli jsme komíny implementována s oběma propojené seznamy a pole. Pokud jste se provádí s poli, chcete aby se ujistil, sledovat, jak velikost a kapacita. Takže velikost bude aktuální řada věcí ve vašem stacku, vzhledem k tomu, kapacita je celkový počet věcí, které můžete uložit do vašeho stacku. Bezva. Velmi podobně, máme fronty. V tomto případě, místo toho přemýšlet o stoh přihrádek, myslím, že na řádku. To bude první dovnitř, první ven. Takže pokud jste čekají, až pro něco v obchodě, doufáme, že se osoba poprvé v linka bude musí pomoci jako první. Místo toho, říká tlačit a pop jako my na stack, my jen říct zařazení do fronty a Dequeue. A opět, pokud jste se provádí to s řadou, musíme sledovat ne pouze velikost a kapacity, ale také hlava, která bude přední část naší fronty. Bezva. Jakékoli otázky týkající se něco z toho? Skvělý. Pohybující se vpravo podél. OK, hashovací tabulky. Tady je místo, kde to začíná opravdu zajímavé. Takže hash tabulka je jedna implementace asociativního pole. Takže v podstatě, co se stalo je máme všechny tohoto vstupu, a dáme ji do hash funkce, která říká, OK, to je místo, kde v hash tabulka patří. Takže nejjednodušší hashovací funkce že jsme viděli, je jen říká, OK, předpokládám, že chceme dát řetězce v našem hash tabulky. A opravdu jednoduchý nápad by mohlo být říci, v pořádku, ať to jen řadit dle První písmeno slova. Takže si můžete prohlédnout zde, bereme banán, dáme přes transformační funkce, a říká, hej, že by měl jít na indexu 1. Takže můžeme v podstatě myslet na hash stůl jako spoustu různých kbelíky. A každá z těchto lopaty se děje držet hlavu propojeného seznamu. A v tomto seznamu Google je místo, kde můžeme skutečně dát různých kusů dat. Takže potápění trochu víc do funkce hash, tady je Příklad Prostě popsal, kde jsme jen říct, OK, vezmi první písmeno slova a my jsme bude třídit do věder. Tak pravděpodobně, bude tam 26 kbelíky, jeden pro každé písmeno abecedy. Proč není to skvělá funkce hash? Co je to non-ideál? To jo. Diváků: Jdete mít kolize. HANNAH Blumberg: Jo, přesně tak. Budeš mít kolize. Takže to je jedna věc. A budeme mluvit o tom, jak můžeme opravit kolizím jen sekundu. Další problém s tímto zejména hashovací funkce je, že náš liší lopaty se bude docela drasticky různých velikostí. Víme, že tam je mnohem více slov, které začínají než X, takže budeme mít velmi nevyvážené kbelíky v naší hash tabulky. Bezva. Tak jo, pojďme se dostat zpět do bod kolizí. Co budeme dělat, když tam je kolize? Máme několik různých možností. Takže člověk, takže předpokládám, že se snažíme dát bobule do naší tabulky hash. A vidíme, oh, chceme dát do indexu 1, ale banán už tam žije. Co budeme dělat? Máme dvě hlavní možnosti. Číslo jedna je, můžeme říci, v pořádku, tam není místo v indexu 1, ale ať to jen hledat dál skrz dokud se nám nepodaří najít další volné místo. Takže budeme říkat, OK, Řekněme to v místě 3. To je jedna možnost. Tomu se říká lineární sondování. A druhá možnost říká, OK, dobře, ať to jen, aby každý z těchto kbelíky být vedoucí spojových seznamů. A je to v pořádku, pokud je toho víc než jednu věc v kbelíku. Jsme jen tak připojit jej na přední straně. Takže tady vidíte, OK, Když jsme vložena bobule, my si vzal banán, druh tlačil ji trochu a hodil bobule tam. A to je taky úplně v pohodě. To se nazývá samostatný řetězení. Můžete si myslet na to jako něco jako řada hlav na spojových seznamů. Jakékoliv dotazy týkající hash stoly, hashovací funkce? Skvělý. Stromy a pokusů. Takže strom je nějaký druh datové struktury ve kterém tam je nějaký druh hierarchie nebo nějaký druh o pořadí na vaše různé objekty. A to se stane výborný jasné, kdy vidíme příklad. A my jsme viděli pokusy, spolu se stoly mřížky, v pset5-- který, znovu, naprosto poctivá hra pro tento quiz-- jako další dat struktury, které můžeme ukládat různé věci. V případě slovníku, jsme skladovat spoustu slov. Takže pojďme se podívat na některé stromy. Tak to je příklad stromu. Má druh struktury, že hierarchické struktuře, kde můžete vidět, že Tento uzel 1 v horní části má nějaký hodnosti nad 2 a 3, , které jsou vyšší než 4, 5 a 6 a 7, které jsou nad 8 a 9. Tak to je vše, myslíme strom, takže si můžete jen tak Picture to ve vaší hlavě. Nyní máme pár specializovanější stromy. Takže jeden příklad je binární strom. A binární strom je, znovu, jen bude datová struktura s nějakou hierarchie, ale každý z uzlů mohou mít maximálně dvě děti. To je místo, kde slovo binární pochází. Takže toto je příklad binárního stromu. Tak to je menší kategorie stromů. Nyní pojďme ještě konkrétnější a mluvit o binární trees-- binárního vyhledávání stromy, spíše. Tak tady je nápad není jen každý uzel má u většiny dvou dětí, ale všechny děti do vlevo se bude menší a všechny děti do právo se bude větší. Takže oznámení v právě naší binární strom, je tu mezi čísly žádný vztah. Ale v našem binární vyhledávání strom, vidíme, OK, tady je 44. A každé číslo na levé straně 44, je menší a všechno vpravo je větší. A to platí u každé úroveň stromu. Tak zde, to je menší než 22, a to je větší než 22. A to je binární vyhledávací strom. Proč si myslíme, že je to jen binární vyhledávací strom? Co algoritmus to vám připomíná? Diváků: Binární vyhledávání. HANNAH Blumberg: Binární vyhledávání. Protože pokud hledáte Zejména čísla v této větvi, na každém místě, stačí zaklepat off polovina stromu, což je skvělé. A tak, co se děje, aby nám něco že vypadá jako binární vyhledávání. Nějaké otázky? Dobře, v pohodě. V pořádku, se snaží. Oblíbený každého z nás. Tak to je příklad, který jsme viděli spoustu ve třídě. A opět, je to jen další způsob, jak můžeme ukládat data. V případě slovníku, opět, je to jen bude řetězce. Takže pojďme se podívat, co to vlastně vypadá jako na mírně nižší úrovni. Takže pojďme se podívat na jednom uzlu v trie. A vidíme, OK, tam se děje být logická a uzel, ukazatel na uzlu. A vidíme, že Boolean se nazývá is_word. Takže v podstatě, to je bude odpovídat na těchto malých trojúhelníky, které říká, pokud jste sem dostali, jste našli kompletní slovo. Víme, že "Turing" přes Zde je kompletní slovo, vzhledem k tomu, jen T-U-R není slovo protože my nevidíme tu malou delta. A ten malý trojúhelník, opět, odpovídá tomuto is_word, tento Boolean is_word. A pak máme řadu dětí. Takže na každé úrovni, budete mají zvláštní uzel, a že uzel ukazuje na array celé abecedy. Takže vidíte, zase, V tomto picture-- Jsem bude držet skákání zpět a forth--, že, že pole na vrcholu má spoustu různých uzly přicházející z ní. To má 26, nebo 27, pokud chcete, zahrnout zvláštní charakter. A to nás si dává způsob ukládání naše data a to způsobem, který může být přihlíželi že se můžete podívat na super rychlý. Jaká je doba vyhledávání na trie? Diváků: [Neslyšitelné]. HANNAH Blumberg: Jo. Teoreticky je to konstantní čas. Je to jen bude být velikost slovo, které chcete vyhledat. I když přidáme obrovské množství více slov naší trie, není to bude trvat nás déle k určení v případě, že dané slovo je v trie. Tak to je opravdu pěkné. Diváků: Právě jsi inicializovat, že pole? Přišli jste na bod nebo dva. Můžeš jen mluvit o že na vteřinu? HANNAH Blumberg: Jasně, určitě. Dobrá otázka. Otázkou bylo, my mají celou řadu, který je bude mít uzel hvězdy as na rozdíl od pouhých uzlu, že jo? Bezva. Tak tady, co říkáme je naše pole je právě Bude odkazy na další pole. Takže to essentially-- to druh cítí jako Google seznamu tímto způsobem kde každý z těchto dětí jen bod na další uzel. A to tak, že jsme vlastně určit, hej, OK, jsme opakoval přes celý slovo, je toto slovo ve slovníku, jsme jen zkontrolovat tuto is_word. Velká otázka. To jo. Diváků: OK. Takže to, co bylo runtime pro trie? HANNAH Blumberg: Jistě. Takže runtime pro trie pro vyhledávání bude konstantní čas. Takže je to jen bude být počet písmen ve slově. To není závislé na Velikost slovníku nebo velikost datové struktury. Tak tady je to trochu jednodušší příklad. V takovém případě můžete vidět, že slovo bat je ve slovníku a máte zoom, ale vy nemají něco jako zoo. Jak bychom udělat zoo? Jak můžeme přidat zoo na náš slovník, k našemu trie? To jo. Publikum: Udělat is_word platí pro [neslyšitelných]. HANNAH Blumberg: Dobrý. Takže bychom říci, Z-O-O, a pak jsme si chcete zaškrtnout políčko, že stejně. Skvělý. Srovnejme velmi stručně se snaží proti stoly mřížky. Pokusy jsou opravdu skvělé protože, jak jsme řekli, poskytují konstantní-time vyhledávání. Ale obrovská nevýhoda je, že jsou humongous. Můžete získat pocit, dokonce i při pohledu na to, že to bude trvat obrovské množství paměti. Takže oni bude mnohem větší než hash tabulky, ale jdou dát nás mnohem rychlejší časy vyhledávání. Takže to je druh vašeho Kompromis, co vám záleží, ať už je to rychlost nebo paměť. Jakékoliv dotazy na nic z toho, všechny C datových struktur. Krásný. DOBŘE. Chystáme se přejít na trochu bit vývoj webových aplikací s Marií. MARIA ZLATKOVA: Lovely. DOBŘE. HANNAH Blumberg: Můžete používat svůj notebook. MARIA ZLATKOVA: Nice. OK v pohodě. Jak jsme se přestěhovat nyní na web vývoj, mluvili jsme trochu o měnících se oprávnění souborů a adresářů tak, aby mohly být přístupné pro ostatní uživatele, do světa, a tak, že můžeme vidět, jak v podstatě jim můžeme sdělit při vývoji webových stránek věci jako že jsme většinou dělali. Takže jsme viděli příkaz chmod, což je režim změnit, v podstatě. To je příkaz Linux a mění oprávnění k přístupu z objektů systému souborů. A objekt souborový systém jen adresář, soubor, cokoliv, co můžete změnit oprávnění. Takže vidět soubor oprávnění, jsme zadejte příkaz ls -l, seznam. A když jsme typ, který jsme obvykle vidět nějaké oprávnění které vypadají nějak takhle v přední části názvu adresáře. Takže d odkazuje na adresář. A pak máme tři trojice, které v podstatě odkazují na oprávněními buď uživatel, skupina, nebo svět. Typy oprávnění, které můžeme mít pro tyto tři skupiny lidí jsou buď r pro čtení, w pro psát, a X pro spustit. A můžeme mít pro ty, skupina a svět stejně. Nejtěžší věc je, že někdy když jsme zadejte příkaz chmod, bychom zadejte nějaké číslo že se skládala ze tří bitů. Takže jsme mohli udělat jako 777, a které v podstatě odkazoval se na přidané hodnotě každého z těchto triád protože r odkazuje na 4, by w odkazují na 2, a x odkazuje na 1, takže když sečtou, každé z čísel přijde až na kumulativní číslo na kumulativní hodnotou mezi 0 a 7. Tak bychom mohli také 0 k vůbec žádné oprávnění. A to by v podstatě dá nám oprávnění buď pro uživatele, skupina, nebo svět. Jakékoli otázky týkající se to tak daleko? Diváků: jste řekl číst byl 4? MARIA ZLATKOVA: Ano. Diváků: [Neslyšitelné]. HANNAH Blumberg: Jo. Diváků: A pak přidáním všichni ti, jiní by uveďte vaše číslo. MARIA ZLATKOVA: Jo. To jo. To jsou velké otázky. Půvabný. Dále jsme skočili do HTML a něco více o vývoj webových aplikací. Takže HTML prostě znamená, Hyper Text Markup Language. A to je značky jazyk, který je standardní že to používá k vytvoření webové stránky. Jmenuje se to značkovací jazyk protože to není ve skutečnosti sestavují. Neříká, jak nějaký kód by měl být provedeny, nebo něco takového. Je to jen a vymezuje popisuje, jak web stránka by měla být zřízena s každým z jejích prvků a jak by měly vypadat pro uživatele. Některé z HTML tagů, které jsme přešel jsou následující. Všechny naše dokumenty HTML začala s DOCTYPE html. Pak máme vždy html tag. Máme hlavu a tělo. A to je důležité, že má HTML tento druh vnořené struktury protože to je velmi jasné. A pak se to stává velmi jasné, kdy my je třeba otevřít a zavřít vlastně tagy. A vždy je třeba zavřít tagy, které jsme otevřeli. A máme zde některé z typů věcí příštích, které chceme mít. Takže máme, například, název CS50. A pak jsme vlastně můžete propojit stylů že definuje, jak styl naše webové stránky. To je CSS. Chystáme se jít přes to v další pár snímků stejně. V těle, nastavíme některé třídy a ID. A jako připomínka, znovu, ID jsou jedinečné a třídy lze přiřadit k více položek. A to právě znamená, že můžeme použít třídy a ID v rámci druhé structures-- tak, pro Například v rámci CSS souborů nebo stylu sheets-- se odkazovat na zvláštní prvky a v podstatě říkají, že chceme styl nebo navrhnout nějaký prvek nějakým konkrétním způsobem. A máme na mysli jim jejich ID a třídy. A můžeme také odkazovat na různé věci podle tagů stejně, ale ID a třídy nám jen dát nějaké všestrannost a co konkrétně my chcete odkázat. Takže jen příklad. Můžeme opět v rámci soubor CSS, kde jsme chcete definovat některé style-- takže barvy, typ písma, a tak podobně that-- můžeme definovat styl pro tělo. Tak, že by ji definují pro celé tělo tag. Ale pak se můžeme také definovat styl pro #title. A opět se hashtag se vztahuje k našemu ID a dot odkazuje na naší třídy. A pak se pro .info, jsme můžete také nastavit některé atributy. A opět, když se vrátíme, jsme měli třídy nazvané info a náš titul ID. A my můžeme vidět, že mluvíme které jim #title a .info. Diváků: Řekl byste, hashtag [? přijímá mě? ?] MARIA ZLATKOVA: Sorry? Diváků: Řekl byste, hashtag [? přijímá mě? ?] MARIA ZLATKOVA: hashtag znamená ID, takže #title se týká jakýchkoliv prvků mají toto ID s názvem titulu. A pak dot odkazuje na třídu. Takže .info se odkazuje na tento prvek proto, že má informace třídy. Jo. Diváků: Proč vás odlišit je v HTML? Proč říkáte, některé věci jsou ID a některé věci jsou třídy? MARIA ZLATKOVA: To je jen na vás-- HANNAH Blumberg: Zopakujte otázku. MARIA ZLATKOVA: Oh, promiň. Proč rozlišujeme určité prvky jako ID a dalšími prvky, jako jsou třídy? Je to jen proto, že je to opravdu často výběr designu. To vám dává hodně všestrannost v tom, že schopný říct, že jsem chci tuto konkrétní položky mít toto ID, protože chtějí udělat hodně věcí s ním, a já jsem jen chcete definovat styl, určitý styl nebo barvu bez ohledu na tuto položku. A způsob, jak to udělat, je prostě dávat to ID. A pak, pokud chci mít několik různých položek které mají, že místo jít a nastavení their-- místo toho, dělat jej tag, protože by tag nastavit buňku pro celý tag pro každou dobu se používá, že tag, můžete nastavit třídu na více položek. A pak už jen přístup k dané třídě a říkat Chci stylu s třídu, která cestu. A opět, třída může být více různých položek a ID musí být unikátní. Velké otázky. Nějaké další otázky? OK, úžasné. Opět platí, že je to, jak se tyto voliče jsou zmíněny v CSS, s hashtag, s tečkou, nebo bez ničem přiřazení styl nějakého tagu, jako tělo. A máme tady obecný syntax, jak se to dělá. Chcete-li zopakovat některé nejlepší postupy pro HTML a CSS, musíme znovu, zavřete všechny značky HTML, které jsme otevřené. A to, co jsme vás doporučuje udělat pro vaše závěrečných prací, jakož i pro CS50 finance, je, aby se jisti, že všechny vaše HTML potvrzuje. A to udělal s W3 Validator. A pak to, co jsme dělali a to, co doporučujeme dělat odděluje styl, takže CSS z HTML značky. Takže vše, co se týká jak vaše stránka bude vizuálně vypadat a jak to bude upraven by měl jít do CSS dokumentu. A pak se vaše značky říkat, jak se věci jsou ve vztahu k sobě navzájem, je HTML, a to by mělo jít dovnitř z vašich dokumentů HTML. Nějaké otázky? MHM. Diváků: Co přesně se děje na s validaci stránky když jsme potvrzování HTML, že [neslyšitelný] vytvořil? MARIA ZLATKOVA: Takže what--, že ty. Takže co přesně se děje Na stránce s validací a proč musíme udělat, že? V podstatě, musíme k tomu, že protože mnoho časů, váš prohlížeč, pokud nechcete uzavřít tag nebo něco takového, Váš prohlížeč je stále na vykreslení stránku a může stále fungovat, ale to je nejlepší praxe, aby se ujistil, že jste opět zavřel všechny své značky, že všechny vaše prvky jsou tak, že by měly být, a v podstatě, že je touto konvence, které jsou přednastaveny. Je to opět, jen věc, kterou byste měli je naučit se dělat, na rozdíl od mít nedbalejší kód a tak podobně. To jo. Promiň. Myslel jsem, že zvyšování ruku. Publikum: Ne, jen jsem [neslyšitelných]. MARIA ZLATKOVA: OK. Diváků: Děkuji. MARIA ZLATKOVA: Samozřejmě, děkuji. Takže znovu, děje na tom, jak informace se přenáší a komunikační modely k přenosu informací. TCP / IP. TCP prostě znamená, Převodovka Control Protocol a IP odkazuje na internetový protokol. A to jen odkazuje na způsob jakým jsou data doručena. Pokud máme nějaké údaje, které je třeba doručit tak vás-- uděláte žádost o nějakém serveru. Například, když jsme pokusu o přístup k cs50.net, uděláme žádost CS50 serveru a my vidět, že chceme dostat tento druh informací. A pak se na základě tohoto protokolu na to, jak je tato informace doručena, server poskytuje informace zpět k nám, klient. A pak jsme schopni zobrazit informace pro stránku a pak ji použít. Takže Hypertext Transfer Protocol je jen další protokol nebo nastavení úmluv, které určuje, jak webový prohlížeč a webový server by měly sdělovat. A to vše uvedení spolu, HTTP, opět, definuje, jak jen to hypertext definováno o HTML, které jsme pracovali to, jak to by mělo být dodáno na vás a jak to data, která je dodávána na vás dostane k vám. A to je důvod, proč, pokud vy pamatovat ze třídy, měli jsme spoustu žádostí a měli jsme spoustu syntaxe pro tyto požadavky, které jsme jít přes právě teď. Takže znovu, když jsme se poslat požadavek na server, musíme definovat několik věcí. Proto musíme najít typ požadavku, že jsme nastavení. A opět, máme, například, GET je jeden typ metody že máme v naší žádosti. A pak HTTP / 1.1 je jen Protokol, který používáme v současné době. Většinu času, že se děje do protokolu, že používáte. Takže pokud máte dotaz takhle na kvíz. To je konvence že máme tak daleko. Zpětné lomítko označuje, jaká věcí jsme požádá. Potom, náš hostitel je, například, v tomto Případ, snažíme se jít na google.com. Tak tohle je hodnota pro hostitele. Jedná se o typ žádosti které by mohly být zaslány. A pak typ reakce, které by mohly být odeslán, opět na základě tohoto protokolu, je opět, HTTP / 1.1. Tak to je zase verze protokolu HTTP. 200 OK je jen stavový kód. A to v pořádku, je jen fráze na základě tohoto stavového kódu. A pak Content-Type Odkazuje na druh která je vrácena se vám, že je pro danou webovou stránku, která se zobrazí a že ve vašem prohlížeči může způsobit později. A to je text / html. Diváků: Co to 1.1 znamená? MARIA ZLATKOVA: To je právě verze of-- oh, co 1.1 znamená? To je jen verze, HTTP Verze protokolu, který jsme používáte. Velká otázka. Další otázky? Diváků: Mohl byste shrnout Content-Type opravdu rychle? MARIA ZLATKOVA: Takže to je to, co je server. typ information--, co je typ obsahu bylo otázky. A tak, že byl typ informace, které se dostanete zpět ze serveru, typ Data, že prohlížeč pak mohou vykreslení, které používáte. Diváků: Je to to, co tato Protokol je ti dělat? MARIA ZLATKOVA: Sorry? Diváků: Je to to, co protokol říct? MARIA ZLATKOVA: The protocol-- Publikum: --what Content-Type je nebo what-- MARIA ZLATKOVA: Protokol je založen on-- co je protokol říkám? Je to přesně tak, jak že tyto informace se vydal na vás na bázi o jaký druh protokolu byla tato informace se dostal doručeno zpět k vám. Dává to smysl druh? HANNAH Blumberg: Vy může myslet protokolu jak je-- Myslím, že profesor Malan popisoval to ve třídě jako něco jako je-- to je ekvivalent lidské handshaking. Řekněme, stejně jako, hej, já jsem žádost a já vědět, jak zacházet HTTP verze 1.1. A pak server říká, oh, OK, já-- a oba existují. Také vím, jak se vypořádat s HTTP / 1.1. A já jdu dát vám zpět nějaký obsah. V tomto případě, bude to být typu text / html. Takže je to trochu jen způsob, z nich communicating-- MARIA ZLATKOVA: Je to jen potvrzující, že jste a to jak po stejné Protokol a to jak klient a tak server-- Váš prohlížeč a server-- trochu vím, co jste mluví, a mají konvence pro předávání v datech. Diváků: Takže Content-Type part-- Content-Type text / html-- to je Samostatnou částí stejné zprávě? Nebo je to součástí řekněme, 200? Má 200 Řekněte jim, že nebo je-- MARIA ZLATKOVA: 200 říká, že to všechno proběhlo v pořádku. A pak typ obsahu je něco jako Samostatnou částí stejné zprávě, a říkat, co mám Vráceno má tento typ text / html. Je to jen dávat více informací. Mít něco dodat? DOBŘE. Nějaké další otázky o tom myslíte? Skvělý. Takže některé další HTTP stavy, které bychom se mohli dostat navíc k 200 OK, Ty, které jsme viděli možná možná hodně, jsou 403 a 404. Takže 404, pokud jste se snažili Přístup něco, co neexistuje. Tak například ve vaší CS50 Finance psets, pokud jste byli rendering quote.html a jste neměli tento soubor, ale místo toho jste měli quote.php, že by mělo za následek 404 Not Found protože soubor nemusí existovat. Pro 403 zakázáno, že odkazuje na oprávnění. Takže pokud nějaký soubor není čitelné svět, byste mohli dostat 403 se vrátil. Někteří jiní, že by vás mohly get-- 301, Trvale přesunuto; 302, nalezeno; 304, Modified; 400, Bad Request; a pak Vnitřní chyba serveru pro 500 a 503, Služba není k dispozici. Ano. Diváků: Will jsme očekávali pamatovat všechny ty stavy? MARIA ZLATKOVA: Já bych měl je na tahák. [SMÍCH] Diváků: Jsme očekává, vím, co spouští každý z nich? MARIA ZLATKOVA: Jsou? HANNAH Blumberg: Pro ty, které jsme spustit into-- takže otázka was-- MARIA ZLATKOVA: Jsou Očekává se, vědět, co každé z těchto stavu kódy by mohly být vyvolány? Takže pro ty, které jsme použili a narazil na, řekl bych, že ano. Takže jsme určitě viděli 200 OK a přednášel ji psets. Viděli jsme 403, 404. Pro ty ostatní? HANNAH Blumberg: Rád bych říkají, 500 se zdá spravedlivé hry. MARIA ZLATKOVA: 500, jo. HANNAH Blumberg: Jo. Stačí mít všeobecný pocit z toho, co je způsobuje. A také právě jimi jména, můžete druh stejně jako provést kvalifikovaný odhad jako k čemu vlastně způsobilo je. Například přesunout natrvalo, pravděpodobně Soubor byl přesunut natrvalo. Diváků: Ale na předchozí zkouška, tam byl tak jak si nás očekávat, že to odpovědět? HANNAH Blumberg: To stálo za nula bodů. Otázka na 418 na konvici je technicky stav HTTP, ale stálo to za nula bodů. Je zřejmé, že nejste Očekává se, že je známe. Diváků: Je to skutečný? HANNAH Blumberg: Je to skutečný člověk, ale to nic neznamená. Je to jen vtip. Internetové lidé jsou legrační. MARIA ZLATKOVA: Velké otázky, chlapi. Nějaké další otázky? Diváků: Co je vnitřní chyba serveru? MARIA ZLATKOVA: Vnitřní chyba serveru jen Znamená to, že jste byli schopen komunikovat se serverem z nějakého důvodu. Takže to není nezbytně něco, co má co do činění s klientem, nebo něco takového. Nevím o žádné konkrétní příklad že jsme přešli k vysvětlení, ale jo. HANNAH Blumberg: Jistě. Tak například, jako je ať to že jste pracovali na mashup a server Google klesly pro některé Důvodem, výpadek proudu, řekněme. To by být interní server Chyba, nebo nějaký druh of-- tě rád by se nedostal odpověď zpět. MARIA ZLATKOVA: Jo. Je to jen, když jste schopen komunikovat se serverem z nějakého důvodu následujících důvodů to jít dolů, nebo nějaký jiný důvod. Takže skákání do PHP. PHP, na rozdíl od HTML, je programovací jazyk. A my jsme začali používat, protože je to velmi užitečné pro vývoj webových aplikací. Poprvé jsme se používal to v CS50 financí. A to v podstatě pomáhá nám přivést spolu toto značení, design, a jak vlastně používat údaje zobrazit věci na webové stránce. Takže PHP samo o sobě znamená, že PHP Hypertext Preprocessor, takže je to rekurzivní backnorym sám. A otevření značky pro PHP jsme levý a pravou šipku s otazníky a php. Takže jsme již viděli spoustu to. Teď jsme to jen tak přejít některé základní věci o tom. Takže s PHP, proměnné názvy začínají znakem dolaru. Nechceme specifikovat, znovu, typ proměnná ještě. Stejně jako jsme to udělali s C, nepotřebujeme k tomu, že. Můžeme dělat spoustu různých věci s proměnnými. Můžeme dát dohromady tím, že je zřetězením s tečkové notace, který jsme nemohli udělat v C znovu. Opět platí, že máme trochu větší univerzálnost s PHP, pokud jde o proměnných. Opět platí, že nemáme mít hlavní funkci. A PHP je interpretován na rozdíl od zkompilovaný, Tak, jak jsme se vytvořit pro soubory C, nemusíme dělat, že pro PHP. Ale spíše tak, že jazyka je provozován sám o sobě, je interpretován. A pak volně zadali prostě znamená, že my Nemusíte specifikovat proměnnou typ, a typy proměnných se rozumí za běhu. Diváků: Ale to, co jste udělal mysli dot konkatenace? MARIA ZLATKOVA: Jistě. Když chceme dát věci together-- takže pokud bychom měli nějaké proměnné měl hodnotu 3 a my jsme měli další proměnná, která měla hodnotu řetězce, bychom mohli dát dohromady proměnné tím, že tečku mezi nimi a zřetězení je. Nebo bychom mohli vytvořit proměnná s názvem název a dát to dohromady zřetězení dvou řetězců. Takže pokud jsme měli řetězec v double citace a klademe tečku za ním, a pak jsme měli další řetězec, který by vytvořila řetězec úplně. Diváků: OK. MARIA LOTYŠSKO: Bylo to jasné? Diváků: Jo. MARIA ZLATKOVA: OK. Ano. Diváků: Když se řekne vykládán spíše než zkompilovaný, mluvíte o vás ne musí být co nejkonkrétnější, pokud jde o PHP ve srovnání s C? MARIA ZLATKOVA: Když říkáme, vykládat tak, na rozdíl od zkompilovaný, Co máme na mysli? Takže to znamená, že nepotřebujeme spustitelné soubory spustit PHP. To znamená, že to běží, jak to chodí. Dává to smysl? Trochu více. HANNAH Blumberg: Takže vy může myslet na tlumočníka jako další program, který je zodpovědný pro přechod řádek po řádku pomocí PHP a vlastně spuštěním, jak protichůdný k sestavování to všechno až do binární. To není ve skutečnosti nic neznamená o tom, jak specifické musíme být. Stále potřebujeme být přesné, a ne zapomněli středník, a ujistěte se, máte znak dolaru, a podobné věci. Dobrá otázka. MARIA ZLATKOVA: Jo. Takže řádek po řádku, as na rozdíl od se soubory C, musíme celý finále než budeme moci skutečně spustit. To je hlavní rozdíl. Ale opět, nemůžeme opravdu méně konkrétní. Takže pole v PHP představují vlastně objednal mapa. Takže pole přidružených hodnot ke klíčům. Tyto dva způsoby, jak deklarovat pole, na základě této syntaxi, můžeme být více explicitní když říká, máme řadu a máme tuto key1, která mapuje tento hodnota1, key2, která mapuje hodnota2. Nebo můžeme jen vytvořit pole , který obsahuje hodnoty sám a pak jsou klíče chápat způsobem. Jakékoliv dotazy na to? Diváků: Co by klíče se v druhém příkladu? 0, 1, 2, 3? MARIA ZLATKOVA: Například, je to jen klíče v této nemusí nutně dělat rozdíl. Prostě definovat, jak je to možné použít hodnoty uvnitř ní. Takže pokud jsme měli foreach smyčka v PHP, který by nám umožní projít všechny hodnoty, můžeme jít přes všechny hodnoty, i když jsme měli, nebo že není definován konkrétní klíč v rámci webu předchozí syntax. Takže i tento druh z pole, mohli bychom ještě mají smyčky foreach že prochází každý hodnot v klíči v poli. Takže syntaxi foreach smyčka, začneme s řadou. Tato $ arr proměnná je naše skutečná array , že je definována v předchozí snímek jako hodnota, které doslova jde přes každou z hodnot, bez ohledu na to, zda jsme měl klíč, nebo ne. A pak můžeme něco udělat s hodnota uvnitř smyčky foreach. Takže znovu, pokud jsme měli pole takhle tady created-- takže máme klíč foo a hodnoty bar, klíč Baz a hodnotu qux-- můžeme mít smyčky foreach, který prochází pole jako na hodnoty klíče a pak dělat něco s klíčem a / nebo hodnoty. Ale ne nutně vždy musí mít foreach smyčky, která prochází polem jako klíčový mapy do hodnoty. Můžeme jít přes foreach smyčky pole jako hodnotu. HANNAH Blumberg: A myslím, že to-- byla vaše otázka, co je implicitní index? Diváků: Kinda. MARIA ZLATKOVA: Oh. HANNAH Blumberg: Jo, jo. Takže v podstatě, pokud nechcete zadat klíč, to bude 01. MARIA ZLATKOVA: Jo. Stejně jako v C, je to nula indexované pokud nechcete zadat klíč. Diváků: Omlouvám se. Mohl byste zkusit mluvit trochu hlasitěji? Mám trochu potíže všechno sluchu. MARIA ZLATKOVA: Je mi to moc líto. Jo samozřejmě. Tak chceš se mnou jít přes to znovu? Nebo je tohle-- Diváků: Tak na předchozí slide-- pokud můžete prostě vrátit na jednu sekundu. MARIA ZLATKOVA: Samozřejmě, je mi líto. Diváků: Takže druhý array zde není Zdá se, že mají hodnotu pro zadání, druh [? příčina. ?] MARIA ZLATKOVA: Dobře, dobře. Diváků: Tak jak to funguje když říkáte, že je to všechno, nebo nic. Pro mě, že vypadá jako A [? foo?] už. MARIA ZLATKOVA: Jo, jo. Takže znovu, to je objednat mapa v tomto smyslu , že se rozumí, například indexy zde je možno chápat jako 0, 1, 2, 3. Opět platí, že to mají ti, Indexy je naše ekvivalentní mít klíče mapovaných na hodnoty. Takže pokud naše klíčové bylo 0-- líto. HANNAH Blumberg: Ne, Je tu křída sem. Ve skutečnosti je to opravdu pěkné. MARIA ZLATKOVA: To je skvělé. DOBŘE. Takže znovu, $ arr 0 by bylo klíč pro hodnotu 1. 0 by být klíčem pro hodnotu 1. Diváků: Je mi to líto. Je to neviditelné. HANNAH Blumberg: Dobře, nevadí. Křída byl špatný nápad. Beru to zpátky. Můžete si myslet klíčů as 0 mapy na hodnotu 1. MARIA ZLATKOVA: Jo. Takže to je 0, to je 1, 2, 3. Ty mohou být vaše klíče. Můžete si myslet z nich as-- jo. A tak místo toho, explicitní klíče, jsou nějak chápáno jako indexy začínající při 0 ° C. Křída nepomohlo. To jo. Obecenstvo: pro foreach smyčky, Pokud bychom chtěli zobrazit jako hodnota, by to prostě automaticky index na 0? MARIA ZLATKOVA: Jo. To by projít každou z hodnot. Diváků: [Neslyšitelné] as 0 nebo by to prostě udělat 0? MARIA ZLATKOVA: Ty by musely tedy jako znak dolaru a pak někteří název proměnné, hodnota. Diváků: [Neslyšitelné]. MARIA ZLATKOVA: Sorry? Publikum: Omlouvám se, že jsem Jen se snažím vzpomenout. Jak byste si, že když to dokážeš automatické indexace je jen 0 z? MARIA ZLATKOVA: Tak jak byste to udělal pokud jste neměli konkrétní jména klíčů? Diváků: Jo. MARIA ZLATKOVA: Ty by prostě define-- jen říct, sami sebe jako nějaká jména. Takže ve vašich psets, vy by mohla pamatovat foreach $ řádek $ jako řádky, jsme vytvořili sami tuto $ řádek rčení chceme projít řadě, jak $ řádky. I když jsme neměli Tento explicitní $ řádků definovaný, mohli bychom prostě jít a říkají, že toto může být náš klíč, a prostě projít každou z hodnot. Diváků: Takže je hodnota nová proměnná vytváříme uložit [neslyšitelných]? MARIA ZLATKOVA: Takže to není neodmyslitelně nový variabilní. Je to proměnná, která odkazuje na uvnitř pole na každý z nich. HANNAH Blumberg: Je to nový název proměnné. MARIA ZLATKOVA: Jo, je to nový název proměnné, ale není to inherently-- jo. Je to jen nová proměnná které můžete udělat. Tak, jak jsme to udělali dělat $ řadě, jak $ řádky, řádky byl nový název proměnné, které jsme mohl vytvořit v naší foreach smyčce. Nemusí se preexist před tím. Diváků: Mohl si projít Logika pro každý, na příkladu tam? MARIA ZLATKOVA: Mhm. Promiň. Tady je příklad. Jistě. Takže pro každý tak array-- to znamená, že jít do tohoto pole jako klíč value--, co se děje projít tohoto pole a jako první jít a dostat foo se key foo a hodnota bar. A pak na druhý iteraci smyčky for, že to bude projít a vzít klíč baz a hodnota qux. A pak můžete něco udělat s jeden z nich nebo oba. Diváků: Takže myšlenka které mají klíčový bod na hodnotu, co jste skončili přístup? MARIA ZLATKOVA: Jaká je idea mít klíč ukazující na hodnotu? Je to jen další konvence, další způsob, jak prochází polem a jsou schopni přistupovat buď klíč nebo hodnotu, nebo obojí a jejich použití. Diváků: Jaká je role pro nařídit, že foreach pracuje v? Takže pokud bychom měli přidat prvky do pole později by ti, být první z nich zavolal foreach poli, nebo by to bylo později? MARIA ZLATKOVA: Takže to, co je objednávka, že foreach smyčka prochází pole v? To prochází první element na poslední prvek, na poslední přidaný prvek. Pokud přidáte prvky později, oni odkázaný být accessed-- první prvky by získat přístup jako první prvky pole, a pak bych šel přes každého prvky jako jakýsi ordered-- není objednané, ale tak, že jejich uvedení do pole. Diváků: Takže nové prvky jsou přidány později? Takže oni added-- budou být poslední z nich v [? opakování. ?] MARIA ZLATKOVA: Nové prvky can-- v podstatě, když jsou přidány nové prvky, se přidali do konce pole? Diváků: Jo. MARIA ZLATKOVA: Myslím, že ano. Ano. A pak se svým smyčky foreach, poté, co jste přidali nové prvky a jít přes ně, nové prvky by být accessed-- nového prvku, pokud je to přidána jako poslední, bylo by být přístupné jako poslední. Diváků: Můžete jen dát příklad něčeho, co by [neslyšitelných] s něčím s hodnotou jako [neslyšitelný] nebo hodnoty, Líbí se mi, jak byste formátovat, že? MARIA ZLATKOVA: Jistě. Mohu uvést příklad toho, co budeme dělat s hodnotou? Takže to, co si kluci by mohlo být obeznámeni s je, že jsme prošli pole a v podstatě tištěný každý z prvků, například jako součást objednal seznam nebo něco, co. Dává to smysl, nebo chceme to-- Diváků: Můžeme vytiskněte si tyto hodnoty ven? MARIA ZLATKOVA: Jo, mohli bychom vytisknout a pak v podstatě $ value, protože v že konkrétní hodnota, budeme tisk hodnotu uvnitř ní. Takže pokud jsme byli na naší první iteraci to a my tištěný $ value, budeme tisknout bar. Diváků: Jsou zde také smyčky v PHP nebo jen foreach smyčky? MARIA ZLATKOVA: Existuje i pro smyček v PHP. A jejich logika je většinou stejně jako to, co jste byli zvyklí. Diváků: Takže jeho hodnota je null. MARIA ZLATKOVA: Je to jako stejný. To jo. Diváků: Já jsem prostě jít zeptat. Takže když jste prohlásit pole, nepotřebujete říct, co velikost to bude být, což znamená, že můžete jen přidat a odnést prvky [neslyšitelných]. MARIA ZLATKOVA: Jo. Jo. Přesně. Když jsme se prohlásit pole, my Nemusíte říkat, co velikost to je, takže můžeme jen přidat prvky na to i později. Další otázky? Takže přinášet PHP a HTML dohromady, to, co jsme seen-- dobře, Například, v tomto příkladu, máme HTML forma, která má vstupní pole. A je vstupní pole jen název a pak má tlačítko Odeslat. A když stisknete tlačítko Odeslat Tlačítko, v naší hello.php souboru, protože metoda pro formu je dostat, můžeme přistupovat co je v názvu tím získat globální proměnnou, která je-- syntaxe pro to je $ _GET. A pak můžeme získat přístup bez ohledu na Uživatel vstup uvnitř daného formuláře pro název zadáním názvu této oblasti. Jakékoliv další dotazy nebo jakékoli Otázky týkající se této konkrétní příklad? Diváků: Kde je PHP? MARIA ZLATKOVA: Tady. Tak tohle je naše otevírací tag pro PHP. Publikum: Jo, jasně. MARIA ZLATKOVA: Ano. HANNAH Blumberg? Odpověď: = je zkratka k tomu je PHP a jen ozvěna. Diváků: Oh. MARIA ZLATKOVA: Jo, je mi líto. Měl jsem udělal to jasné. HANNAH Blumberg: Print. MARIA ZLATKOVA: Je to prostě funkce který nám umožňuje tisknout něco. Velká otázka. Takže going-- ano. Diváků: Je tam bude dost trochu ruky kódování PHP a HTML na kvíz 1? MARIA ZLATKOVA: Tam může být slušné množství interpretace PHP a HTML, ne nutně jako obrovské množství kódování, i když budete muset napsat foreach smyčky, i když, je pro smyčce. Jedno ze smyček, které jsme pokrytí tady je poctivá hra. A to je většinou to. HANNAH Blumberg: Já bych být připraven. Stejným způsobem, že jsme vás o to prosil napsat spoustu funkcí C na kvíz 0, Chtěl bych být připraveni dělat Totéž v PHP a JavaScript. MARIA ZLATKOVA: Jo. HANNAH Blumberg: Řekl bych, little--, jako že nejsme bude, abyste napsat obrovský HTML stránky jen proto, že je to trochu nudné, ale můžete mít dílů. To je naprosto fér hra. Stejně jako malý HTML stránky, úplně fér. Diváků: OK. Jak se asi v JavaScriptu stejně? HANNAH Blumberg: Jo. JavaScript je fér. MARIA ZLATKOVA: Jo. To je naprosto fér hra. HANNAH Blumberg: Dostaneme se, že v, jako je 10 minut. MARIA ZLATKOVA: SQL, znovu, Strukturovaný dotazovací jazyk. To v podstatě nám umožňuje spravovat data v relační databázový systém. To v podstatě znamená, jen že máme někde ukládat některá data, že bychom mohli chtít použití na internetových stránkách nebo v nějaké jiné formě. A pak jsme se dostat dotazy Informace z naší databáze, nebo vložit informace v nich. Mnoho společného ones-- UPDATE, INSERT, SELECT a DELETE. Takže pro UPDATE, to je syntaxe pro aktualizaci dat v databázi. Aktualizace tuto tabulku nazvanou stůl tím, že říká SET, můžeme nastavit některé hodnoty ve všech řádků na rovné něco jiného. Takže můžeme také určit některé konkrétní položky, které chceme změnit a to může být pomocí WHERE. A můžeme určit, že chceme jen upravit některé řádky, kde dům, kdybychom měli tabulku studentů a všichni studenti měli dům, tak bychom jen změnit některé hodnoty kde dům se rovná jirchář například. Pro INSERT, můžeme vložit určité hodnoty do tabulky. Takže INSERT INTO tabulky, a pak se hodnoty, a pak se v závorkách, specifikujeme které hodnoty chcete vložit. Takže INSERT INTO tabulky, col1 a col2, je hodnota val1 a hodnota2. Takže to v podstatě vloží nový řádek do tabulku, která obsahuje hodnoty 1 a 2 Ve sloupci 1 a 2. A pak budeme jít přes rychlý příklad toho, jak to vypadá stejně jako v naší databázi trochu. Ale to, že jsem v konečném dotaz že budeme jít přes, SELECT, to nám právě umožňuje k výběru dat z tabulky eventuálně používat později. A způsob, jak to udělat, je, že jsme stačí uložit jej do nějaké proměnné. A pak můžeme případně znovu použít. Takže SELECT hvězda znamená vyberte všechny. To je jen zkratka pro výběr všechny. FROM stolu, kde hledáme pro některé specifické podmínky, tak kde sloupec se rovná něco, například. Pokud bychom jen chtěli vybrat vše z tabulky, to jen vybere všechny sloupce a všechny řádky z tabulky. A pak DELETE FROM tabulka WHERE col rovná něco, to jen odstraní některé řádek z našeho stolu kde máme nějaké specifické podmínky. V tomto případě, podmínky jsou sloupec se rovná něco. Takže jen rychlý příkladem. Máme-li tuto tabulku tady a my vložte ji do tabulky, tyto hodnoty, že by vložení nového řádku. A kdybychom měli auto-přírůstek, to by jen zvýšit naši ID od 0 do 1 až 2. Pokud jsme vybrali všichni ze studentů to, Jen vrátí všechna pole a všechny řádky. Kde rok je větší než nebo se rovná 2016, že by prostě vrátí Hannah a já. A pak, pokud jsme právě zvolena id rok a rok od studentů kde dům je Cabot dům, že by se opět vrátit Hannah a já. Pak, pokud jsme se zrušuje od studentů kde název je rovno Rob, které by odstranit celý řádek. A pak, když jsme se nastavit jméno, UPDATE studenti SET název rovná Daven KDE Dům je rovna Cabot dům, který půjde do ty řádky a aktualizovat název. A pak několik datových typů SQL jsou CHAR, VARCHAR, INT, a plavidlo. Jsou to poctivá hra. Chtěl bych jít znovu a ujistěte se, že víte, a mít je na vaší tahák, co každý z těchto znaků, byly použity pro to, co jste použili je na svých psets, a ujistěte se, že jste se seznámili a pohodlné s muset vybrat z různých typů dat ve vašem pset. Ano. Diváků: Co to bylo, že tabulka uložena? Ano, pokud je tato tabulka uložena? MARIA ZLATKOVA: No, právě teď, to není uloženo. V každém případě, pokud je tato tabulka uložena? Ale to může být uloženo v databázi SQL. Diváků: A kde je SQL databáze? V počítači, online Někde, server? MARIA ZLATKOVA: To může být počet různých věcí. HANNAH Blumberg: jsme propojen s SQL tabulky většinou s phpMyAdmin. A tak bychom mohli požádat server uložit je pro nás. Mohli bychom je uložit na vlastním počítači. MARIA ZLATKOVA: Záleží jen na jak chcete, aby to pro sebe. Ale my jsme byli skladování je, jak bylo uvedeno Hannah, na phpMyAdmin, který je online. A pak způsob, jakým využíváme PHP a SQL, uložíme ho do nějaké proměnné co jsme dotázán na. Takže pokud budeme-li vybrat všechny z historie kde user_id rovná ID relace, že by vybrat všechny řádky pro konkrétní osobu, která je zaznamenána z historie stůl a třídit je do řad. Cool věc je vědět, je že funkci dotazu CS50 je chrání proti SQL injection tagy. To prostě znamená, že dbá na to, vstup, který je zadán správný a že osoba, která vstupuje do vstupu se nesnaží vstup některé typy škodlivého Kód buď klesnout naše stoly nebo odstranit všechno uvnitř naší databázi. Rychlý Přehled Model Model View Controller, je to jen způsob, jak organizovat a přemýšlet o kódu. Je to opět, design paradigma. Znamená to, že jsme can-- a je to dobré praxe k oddělení jednotlivých částí z našeho kódu a to, co ovládání do těchto tří paradigmat. Takže náš pohled je nejčastěji naše šablony, naše dispozice, jak že jsme si stanovili, jak náš kód vypadá. To je hlavně naše CSS souborů a způsob, jakým že jsme definovali návrh našeho kódu, v podstatě. Náš regulátor je většinou to, co jsme dělali s PHP soubory. Takže znovu, práci s informace, které máme a definování jak to informace se používají, a pak předá tuto informaci a to buď na zobrazení nebo modelu. A model, tak, že máme Používám v němž bylo naše databáze, takže kde naše informace uložen tak, že má někde k životu, a některou z kód, který se vztahuje na způsob, jakým že jsme si tyto informace nebo způsob, jakým můžeme uvedené informace aktualizuje. Takže v modelu MVC, HTTP Žádosti jsou odesílány na webový server. Potom se interpretuje regulátor požadavek od uživatele a pak ověřuje vstup uživatele. Je volitelná, že máme regulátor komunikovat s modelem, tak něco jako naší databázi nebo nějaké jiné funkce že relé informace. A nakonec, regulátor předá informace na pohled tak, že to může být tavené a že může stává viditelným na jakoukoli osobu přístupu na webové stránky. Nějaké otázky? Skvělý. Takže znovu, model, jeho funkce, opět, je trvalé uchovávání informací, správu a organizaci dat. A to, co jsme viděli tak pokud je databáze MySQL a všechny datové soubory, které mohou používat. Pohled, prezentace informací Uživatel, uživatelské rozhraní, nebo uživatelské rozhraní. A příkladem je HTML. A pak bychom mohli mít minimální PHP. Takže pro smyčce, která iteruje přes data, která jsou vytištěna je součástí toho názoru, as na rozdíl od regulátoru. A pak spousta našich PHP soubory spadají do kategorie regulátoru. Je to jen zpracovává požadavky uživatelů a získává informace z modelu. Skákání do dokumentu Object Model, to jen se vztahuje na způsob, jakým HTML dokumenty jsou organizovány. A oni jsou organizovány do stromu struktura, která má hierarchii. Takže pokud máme přístup k [neslyšitelných] reprezentace dokumentu, můžeme pracovat s dokumentem, jako jsme manipulaci s objekty v podstatě. A aby to trochu jasnější, když Máme mnoho našich různé značky reagovat se různými cestami v našem stromu. A pak se pro tento příklad, jsme mají počáteční uzel dokumentu. Máme tedy naše HTML uzel která rozděluje do hlavy a těla. Hlava má titul a poté titul obsahuje ahoj, svět. A naše tělo právě obsahuje ahoj, svět stejně. Takže jakékoli otázky týkající se některý z věci, které jsme dosud na které se vztahuje? A pokud ne, bude Hannah převzít s JavaScriptem. Skvělý. HANNAH Blumberg: OK, v pohodě. Pokud něco přijde s PHP nebo HTML, nebo některý z věcí Maria vztahuje, můžeme vždy pozastavit. Děláme lépe čas znovu, tak úžasné. A jen proto, aby se vrátit velmi rychle na to, když se podíváte na každý Loňské zkouška, to přichází either-- zde některé HTML, aby tento diagram. Nebo tady je to schéma, aby některé HTML, takže určitě praktikovat to. A pak to je jeden zaručené Otázka, která se můžete dostat pravdu. Bezva. Tak pojďme mluvit o JavaScriptu a jak je to trochu odlišný od jazyků, jako je PHP a C, oba jazyky jsme viděli předtím. Takže číslo jedna, je to volně zadali. To je jako PHP, ale na rozdíl od C. Je to interpretovaný jazyk. Opět platí, že je jako PHP, na rozdíl od C a to se chystá, aby nám to use-- funguje opravdu dobře s webovými stránkami. Bude to nám umožňuje manipulovat obsah a jak to vypadá, a co to dělá. Budeme vidět trochu Ajax. To nám umožňuje komunikovat asynchronně s různými servery a získat informace. A to je věc, která opravdu odděluje JavaScript z PHP a C je to, že je na straně klienta. Oba PHP a C jsou obvykle na straně serveru. Z větší části, a téměř úplně, co jsme viděli, alespoň v tato třída, JavaScript působí na straně klienta, což znamená, že prohlížeč je vlastně odpovědný za spuštěním. A to znamená, že my ne je třeba komunikovat se serverem. Takže to znamená, že může být mnohem rychlejší protože je to vlastně jen, že je to Chrome, to je Safari, Firefox je to, co vás používat ve skutečnosti spuštěn váš JavaScript. Diváků: Co to asynchronní znamená? HANNAH Blumberg: Ach, co to asynchronně znamená? Velká otázka. Asynchronní means-- dobře, obsah, v němž používáme to je, OK, vytvářejí webové stránky a potřebujeme získat nějaké informace. Tak na příkladu mashup, Některé informace, že bychom mohli chtít Je tituly článek. Nyní jsme could-- jednu možnost je to synchronně a to znamená, pojďme zastavit, jdi si článek, ten článek Zpět, a potom render, ale to by bylo docela pomalé. To by bylo špatné uživatelské zkušenosti protože byste jen sedět čeká na něco reagovat. Asynchronní znamená, že budeme i nadále se o našem podnikání, vykreslování stránky, a budeme odeslat žádost Je to něco jako jít do stát v pozadí. Myslím, že jsme použít příklad v přednáška volání Rob a říká, hej, můžete se podívat toto nahoru Pro mě a vrátit se ke mně, na rozdíl od právě mně čekání na telefonu. Takže asynchronně znamená, že se stane V pozadí se od nás paralelně. Velká otázka. Něco dalšího? Skvělý. Budeme skákat mnohem více do asynchronních požadavků s Ajax. Diváků: Má JavaScript-- Odkud spadnout s Model-View-Controller? HANNAH Blumberg: Velká otázka. Odkud JavaScript pád s Model-View-Controller? Hm. Myslím, že to může fall-- takže my obvykle Líbí se přebít ji do toho paradigma, ale myslím, že bych řekl, OK, takže JavaScriptu ve skutečnosti bude umožnění nám shromáždit údaje, interpretovat data, vlastně dělat smysluplné věci s daty. Tímto způsobem, je to velmi podobné ovládání. Ale je to také bude, aby nám umožňují zobrazit věcí a tiskové věci. Tímto způsobem, je to velmi pohled-podobně. To jo. Takže je to něco jako v PHP kde může být trochu obojí. Dobrá otázka. Něco dalšího? V pořádku, úžasné. Pohybující se vpravo podél. Tak se podívejme, příklad o tom, jak můžeme použít JavaScript v jednom z našich webových programů. Tak jsem si to považují index.html s partou HTML. A věc, kterou chci tě zaměřit se na to tag skript. A to říká, OK, já chci spustit některé JavaScript a tady je místo, kde to žije. Žije ve hello.js. A velmi podobně jako CSS, mohli bychom vložit JavaScript v HTML. Proč bychom mohli chtít oddělit to? To jo. Diváků: Snadnější přepsat? HANNAH Blumberg: Jo. Je to jednodušší používat napříč různé webové stránky. Udržuje věci čistší. Je to prostě dobré praxe. Skvělý. Dobrá odpověď. Tak dobře, takže to se děje aby byl naším index.html. A pak tady je naše malinké soubor JavaScript. A všechno, co říká, že je ostražitý Hello, world. Takže co se stane, když je Tato stránka renders-- takže pokud jdete na jakékoliv webové stránky to je-- všechno, co se bude dít Je to bude říkat, OK, já jsem chystá spustit tento kód JavaScript. A tento kód JavaScript jen říká upozornění Hello, world. Takže budu si to Přátelská malá pop-up. Bezva? To je něco jako naše první JavaScript programu, naše Hello, world. Pojďme se podívat trochu víc o tom, co syntaxe JavaScriptu vypadá. A konkrétně, pojďme porovnat ji s C a PHP, které jsme viděli předtím. V JavaScriptu, budeme mít var, název proměnné, a pak jeho skutečná hodnota. A my neurčíte typ, jen stejně jako v PHP, ale velmi na rozdíl od C. Tak například, když jsme chtěli pro uložení hodnoty 50, v C, museli bychom říci, hej, C, chci celé číslo, Chystám se to nazvat i, a jeho hodnota je 50. V PHP, je to trochu jednodušší. My říkáme, hej, já chci proměnnou Zavolal jsem a jeho hodnota je 50. Velmi podobně, v JavaScript, jsme říkají hej, chci proměnná zavolal jsem, jeho hodnota je 50. Každý další čas, který jsem použít i, nemám potřebu psát var. Je to jen jsem od tohoto okamžiku. Stejným způsobem, v C, kde se jakmile řekneme int i, my stačí použít i. Bezva? Dobře. Přesun do smyčky, naštěstí, tyto téměř vypadat exactly-- Myslím, že jsou přesně stejné jako to, co smyčky budou vypadat v něco jako C, kde se vaše pro smyčce bude mít tři parts-- inicializaci, podmínka, a aktualizace. Smyčka while, to vypadá přesně stejný. Právě jsme dát podmínku. A dělat, zatímco smyčka, opět, přesně stejné. Dáváme to podmínkou. Řekněme, že jsem chtěl opakovat over-- Chtěl jsem udělat něco pětkrát. V jazyce C, můžeme psát pro init i rovná 0. i je menší než 5, i ++. Jediný rozdíl, v JavaScriptu, místo toho říká, int i = 0, říkáme var i = 0. Krásný. To je jediný rozdíl. Jakékoli otázky týkající se něco z toho? Ano. Diváků: Takže v PHP, je to stejné věc, s výjimkou ale jako proměnné? Nebo to byl příklad var? HANNAH Blumberg: Jo. Takže v PHP, bude to být znak dolaru. Tak to bude i $ rovným 0, $ i je menší než 5, $ i ++. Velká otázka. Nyní pojďme mluvit o deklarace funkce. V jazyce C, když prohlásil funkce, dal nám jméno a dal nám některé parametry. A na začátku, jsme napsali typ. V JavaScript, všechno, co jsme musíte udělat, je napsat funkce klíčové slovo říká, hej, JavaScript, Chystám se definování funkce. V tomto případě, má název součet. A to trvá dva argumenty, X a Y. Všimněte si, že je nám jedno, o typech x a y. A stejně jako C, my máme tento návrat klíčové slovo, takže můžeme něco udělat jako zpáteční x a y. A teď najednou psali jsme to poprvé funkce, můžeme použít součet kdekoliv. A to je úplně v pohodě. Jedna opravdu cool věc, o JavaScript, že je velmi na rozdíl od C je to, že funkce mohou zacházet jako hodnoty. Takže můžeme něco takového zde kde jsem, že jsem to pokrýt up-- Zakryl jsem si var součet part-- a my jsme jen řekl Funkce xy rovná se zpáteční X plus y. To je to, co by byl nazýván anonymní funkce. Je to funkce bez názvu. Vzhledem k tomu, tato funkce říká suma, bla, bla, bla, To by jen říct funkci. Ale teď, i když mám tato anonymní funkce, tato funkce je opravdu jen hodnotu. Můžeme to zacházet jako hodnotu. Takže můžeme uložit do proměnné stejného Způsob, jakým mohl uložit 50 v proměnné. Takže můžeme říci, v pořádku, chci variabilní, je to jen součet, a je to právě tato funkce. Takže tyto dvě věci jsou ve skutečnosti dělat přesně to samé, ale syntaxe je poněkud odlišný a druh zábavné poznámky. To jo. Diváků: Takže jste mohli nazvat funkce, která byla anonymní tím, že říká, Suma konzole 2, 5? HANNAH Blumberg: Jo. Můžete volat to anonymní funkce stejným způsobem. Ty by to součet (2, 5) ;. To by bylo úplně v pohodě. Kdybych to neudělal var suma rovná funkce, když jsem právě smazal tohle-- Vím, že je na mé straně, ale předstírat, že vypouští tohle-- poté tato funkce je druh prostě pryč. Můžete nikdy znovu použít, protože nemáte jeho název. Je těžké odkazovat na něco nevíte, jak to nazvat. Dobrá otázka. To jo. Diváků: Můžete odkazovat sumu v dalších míst s hodnotou X plus Y? HANNAH Blumberg: Můžete reference součet v okolí s hodnotou X plus y? Nejsem si úplně jistý, co máte na mysli. Diváků: Takže vaše minulost semi-anonymní funkce je součet je roven této Funkce anonymní, takže součet Nyní proměnná, která vám can-- HANNAH Blumberg: Správně. Aby součet je proměnná, ale je to actually-- aby součet je proměnná, jejíž hodnota je funkce. Tak to je funkce, která je druh podivné věci zabalit hlavu kolem od té doby jsme se hrát s C a můžete to dělat v C. Ale teď se můžeme nazývat se sečtou Stejně tak bychom mohli nazvat součet zde. Diváků: OK. HANNAH Blumberg: Jo. Dobrá otázka. To jo. Diváků: Takže nepoužívejte prototypy v PHP nebo JavaScript? HANNAH Blumberg: Ne, my Nemusíte používat prototypy, zejména v JavaScriptu. Takže člověk praxe věc špatně, že jsem chtěl říct, že byste neměli dělat je nemusíte psát var i = 50. Dalo by se prostě začít dělat i = 50. A bude jen aby i globální proměnnou. Je to velmi špatné praxe nikdy neříkej výslovně var i, ale je to něco, co můžete udělat. Tlumočník není bude řvát na vás. JavaScript je docela rád, můžete dělat, co chcete. Promiň. Je tu dva. V oranžové kalhoty. Pokračuj. Publikum: Ne, ty první. Publikum: Ne, já jsem jen říct Neměl jsem svou ruku. DOBŘE. Takže pokud jste byli volat že poprvé, nyní shrnout, říkáme, že stejným způsobem, x, y, stejně jako každý čas? HANNAH Blumberg: Jo. Takže tyto dvě v podstatě dělají stejnou věc. Diváků: A jaká je výhoda použití jednoho nebo druhého? HANNAH Blumberg: žádná výhoda použití jedno nebo druhé. Chtěl jsem vám ukázat dva různé části syntaxe. Mnohokrát, kde anonymní Funkce mají smysl je-li argument na jiný funkce by měla být funkce. A uvidíme, že v jen na druhém místě s Ajax. Takže pokud to nedávalo žádný smysl, uložte ho do zadní části hlavy. To je místo, kde anonymní Funkce mohou být užitečné protože to není opravdu stojí za to dávat to jméno, protože jsme jen bude jednou použít. To jo. Diváků: Je-li x a y později změnit na, bude součet změní stejně? HANNAH Blumberg: Je-li x a y změna později, shrne změní stejně? Takže to je vlastně já myslím, něco, co je, znovu, to prostě cítí velmi odlišné z C. Toto není hodnota. Není to 5. Je to jen samotná funkce. Takže jakmile si jej parametry, pak budete skutečně vypočítat hodnotu. MARIA ZLATKOVA: A pak můžete volat funkci a používat to, aby si nějakou hodnotu. HANNAH Blumberg: Správně. Přesně. To jo. Diváků: Takže pokud jste právě uložte ji do proměnné, jako var x se rovná součtu dvou values-- HANNAH Blumberg: Jo. Takže jste mohli jen dělat var součet se rovná součtu dvou hodnot. To jo. Nějaké další otázky? To jo. Diváků: Ale by to zmást částku a částku? Stejně jako Pokud zavoláte své variabilní částky, by volání funkce částku? HANNAH Blumberg: MM. Mm. Pokud jste něco jako, částka se rovná součtu 2, 5? Diváků: Jo. HANNAH Blumberg: Věřím, že by se přepsat hodnotu částky. Takže další zajímavé věc, o JavaScriptu je to, že jedna proměnná může trvat na spoustu různých typů. Špatná praxe. Neměli byste dělat něco jako to, co jste právě řekl. Ale v C, pokud jsem je nastaven rovná celé číslo, víme, že to nikdy stane řetězec. To není případ v JavaScriptu. Jo, dobrá otázka. Něco dalšího? Dobře. Dělat všechno přesně na čas. Vedení jít. Dobře. Pokud se podíváme na pole v JavaScriptu, tady je rychlý příklad pole řetězců. A pole může růst dynamicky. Oni nemají pevné velikosti stejným způsobem že to dělají v C. Můžeme přístup k prvky s jen v hranatých závorkách. To vypadá hodně jako PHP a spoustou jako je C, kde se můžeme říci, v tomto případě, kdybych chtěl slovo JavaScript, udělal bych to se arr hranatých závorek s 0, 1, 2. A pak, pokud si vzpomínáte, když jsme v C chtěl dostat délku pole, to bylo opravdu otravné. Ale v JavaScriptu, super snadné. Všechno, co děláme, .length. Dává jí délky. To je všechno. Diváků: To je jednoduché. HANNAH Blumberg: Jo, dělá váš život mnohem jednodušší. OK, object-- tam není. Objekty v JavaScriptu pocit hodně jako structs v C a asociativní pole v PHP. Takže to, co jsme viděli Hodně je JSON, který je zkratka pro JavaScript Object Notation. A je to v podstatě způsob, strukturovat naše data. Tak uvidíme příklad, asi nejjednodušší. Tak tady je příklad objektu který ukládá třídu, CS50. A když říkám třídu, mám na mysli samozřejmě, Není jako-- jo, běh, CS50. A uvidíte, že vše v objektu se bude obsažena do složených závorek. A začneme spojovat názvy polí nebo klávesy s různými hodnotami. Takže můžete začít vidět, jak tento druh cítí jako asociativní pole v PHP. Takže budeme spojovat pole nebo název klíče, samozřejmě, s řetězci, CS50. Budeme mít instruktora. Budeme muset TFS. Budeme mít řadu psets a budeme mít zaznamenány. A jedna super věc k poznámce je všechny tyto věci mají různé typy, a to je naprosto v pořádku. To je v pořádku pro objekt, ve skutečnosti, je to asi očekávali pro objekt mít kombinace řetězců a čísla a Booleans a pole a cokoli jiného, ​​co byste mohli Chcete mít uvnitř vašeho objektu. A všimněte si, že tyto se bude názvy nebo klíče, a pak jsme jen nastavit tak, rovný s malou tlustého střeva. Diváků: Co přesně JSON znamená? HANNAH Blumberg: Co přesně to JSON znamená? JSON jen zkratka pro JavaScript Object Notation. Je to jen způsob, jak formátování. To jo. Je to způsob, jak formátování naše data. V jazyce C, je to structs. V PHP, je to asociativní pole. V JavaScriptu, máme objekty. Diváků: Takže CS50 to objekt? HANNAH Blumberg: CS50 je objekt v tomto případě. A teď, jak to vlastně přístup tato pole nebo změnit těchto polí. Předpokládejme například, že jsme se rozhodli, že jste chtěl jeden méně pset tomto semestru. Místo toho, devět, my jsme prostě muset osm. Jak bychom to změnit? Oh, špatně. Existují dva způsoby, jak to můžeme udělat. Číslo jedna je s tečkou notace a číslo dvě je s hranatých závorkách notace. Tak například, pokud I chtěli změnit nebo přístup pole psets v naší CS50 objektu, co budu dělat, je CS50.psets, takže název objektu tečkou název pole nebo klíče. Velmi podobně, to je přesně to, ekvivalentní k tomu CS50, a poté v hranatých závorkách, psets. Bezva? To jo. Diváků: Tak je JSON technicky stále JavaScript, i když v psets jsme oddělit ji [neslyšitelných]? HANNAH Blumberg: Jistě. Takže otázka zní, jsou JavaScript a JSON ekvivalent? Takže JSON je zápis, v zásadě tak, že jsme se zapsat objekt z jazyka JavaScript. Takže to nejsou úplně stejné. Řekl bych, že JavaScript, tam jsou objekty v JavaScriptu. JSON vezme ty objekty a vytiskne je a zobrazuje je nebo ukládá je v příjemném způsobem. Takže JSON není programovací jazyk, tak, že JavaScript je. Je to jen zápis pro v JavaScriptu naše objekty. To jo. Diváků: Takže co přesně [Neslyšitelný] kompletní? HANNAH Blumberg: Jistě. Takže to vlastně nic nedělá. To je jen způsob, jak získat přístup. Takže řekněme, že bychom chtěli změnit počet problémových sad z devíti na osm. To, co děláme, je něco udělat jako CS50.psets = 8 ;. Jo, skvělá otázka. To je jen ukázat vám syntaxi. Není ve skutečnosti dělat nic užitečného. Nějaké otázky? Pohybující se vpravo podél. Takže pojďme se podívat na rychlý příklad toho, jak JavaScript funguje, protože jsem vám řekl, že to dělá všechny tyto věci a chladné nám umožňuje upravovat webové stránky. Pojďme se skutečně vidět v akci. Tak se například tento soubor HTML. A věc, kterou chci, abys zaměřit, je tento konkrétní tag, který je tlačítko, s id search_button. Je to jen na stránce. Takže teď uvidíme, co můžeme vlastně dělat. No, předpokládám, že když klepnete na toto tlačítko, chceme udělat alert-- jste klikli na tlačítko. Podívejme se, jak to můžeme udělat. Takže window.onload-- to není něco, že jste viděli ve třídě, a proto nebudou muset znát na kvíz. Ale to v podstatě říká, OK, call Tuto funkci použijte při načte okno. Tak to je jen trochu nastavení kódu. Nebojte se tolik o tom. To, co chci, abyste zaměřit, je tady. Říkáme var searchButton rovná document.getElementById search_button. Takže, jak asi tušíte, co to dělá, je to říká, OK, jdi najít prvek s ID search_button. A teď máme, že Aktuální prvek a já jsem chystá uložit v variabilní searchButton. A nyní můžeme skutečně používat tento prvek a změnit nebo otevřít své hodnoty, takovéhle věci. Můžeme skutečně začít zapojit s webovou stránkou. Tak tady říkám, v pořádku, teď, když mám toto tlačítko, když na něj klepnete, volání této anonymní funkce. Takže tohle je místo, kde anonymní Funkce se stal užitečným. A co dělá funkce dělat? No, to prostě nazývá funkce upozornění a říká, jste klikli na tlačítko Hledat. Takže co se stane, když půjdu tam, kam tento HTML žije a já klepněte na tlačítko, Dostanu vymyšleného trochu upozornění který říká, že jste klikli na tlačítko. Takže věci, aby se zaměřily na here-- document.getElementById dostane konkrétní HTML prvek s daným ID. A teď můžeme nastavit co se má stát, když že určitý prvek kliknutí. Diváků: Musíme dát vše v? HANNAH Blumberg: Sorry? Diváků: Musíme fyzicky kódovat všechno, že? HANNAH Blumberg: Musíme fyzicky kódovat všechno, že? Ano. Není to trochu nepříjemné? To je hodně kódu. Diváků: Dalo by se něco importovat. HANNAH Blumberg: Správně. Mohli bychom použít něco. A v particular-- ach, to je mi říkal, musím naučit sekci. Zejména, pojďme používat knihovnu jQuery, protože to bylo opravdu dlouhá a opravdu otravné a já chci, aby bylo možné jej zjednodušit a aby bylo kratší a jednodušší napsat. Takže jQuery je knihovna JavaScript. Takže JavaScript je programovací jazyk; jQuery je knihovna. A to dělá spoustu věcí jednodušší. To je měnící se a jít napříč dokument HTML mnohem jednodušší. To je akce pro manipulaci s jednodušší. To dělá animace jednodušší a to je Ajax jednodušší. Takže pojďme se skočit do dvou ty věci hned teď. Omluvte mě. Než tak učiníme, některé základní syntaxe. To je to, co většina volání knihovna jQuery vypadat. Používáme tento dolar sign-- žádné připojení znamení PHP, Jen inconvenient-- na jméno Volič, tečka, a pak akce. Takže pojďme se podívat na nějaké konkrétní příklady, které. Takže to je vlastně stejný Kód ze snímku události. Tak dlouho, ošklivá věc se stane to mnohem hezčí, menší věc. Takže pojďme se pokusit rozčlenit tento systém. To říká, OK, jQuery-- tento dolar sign-- jQuery, najděte mi okno. Tak to je volič. Když se to načte, tuto funkci volat. Takže to je všechno uvnitř. DOBŘE. Zatím je vše dobré? Dobře. Nyní, jQuery, najít mě o ta věc s ID search_button. A co na něj klepnete, volání této funkce. A pak se tato funkce je přesně to samé. Jen to trochu výstrahy, jste klikli na tlačítko Hledat. Takže je to opravdu pěkné. Je to opravdu kondenzuje a zjednodušuje náš kód. Jak jsem věděl, že je to ID search_button a ne jako třídní search_button? Publikum: hashtag? HANNAH Blumberg: Jo. Tento symbol hash, je to jen jako CSS. Takže pamatujte, že se CSS, když jsme se chtěl vybrat něco podle ID, jsme použili libry. A když jsme chtěli vybrat něco podle třídy, používáme tečku. Skvělý. Dávat smysl? Takže jQuery má jen aby se náš život jednodušší. To jo. Diváků: Takže jsem trochu zmatený, jak s tím, jak anonymní funkce pracuje. Myslíte si název tohoto anonymní funkce, fungují? Jak se to jmenuje? HANNAH Blumberg: Jistě. Takže funkce je jen klíčové slovo říká, že jsem asi pro definování funkce. Publikum: Oh, OK. HANNAH Blumberg: OK? A pak jsme to projít jako Argument to-- pojďme tento vnitřní one-- funkci click. Tak jo, takže funkce, tato anonymní funkce, se stává skutečný argument. Takže pamatujte v JavaScriptu, my může léčit funkce jako hodnoty. Publikum: Oh, OK. HANNAH Blumberg: Jo. Líbí se mi, že "Aha." Pěkný. Další otázky? Čas? MARIA ZLATKOVA: Dobrý. Dobrý. HANNAH Blumberg: Úžasné. Některé rychlé užitečné jQuery. Nebudu jít přes všechny z nich. Tyto snímky budou up on-line trochou později, takže můžete zkontrolovat it out o něco později. Ale v podstatě, generální vzor drží kde říkáme, OK, hej, jQuery, tady je moje Volič, a pak je tu akce. A vy můžete dělat věci, jako je přístup k Hodnota formy, přístup k některým HTML, Ovládání co se stane, když uživatel předloží formulář, takové věci. Ano. Diváků: Takže v zkouška, budeme potřebovat vědět, hodně z dokumentace jQuery. Takže vzhledem k tomu, že jsme se kopírovat / vložit jQuery dokumentace k naší tahák, Kde je čára? Stejně jako to, kolik potřebujeme vědět? HANNAH Blumberg: Velká otázka. Otázkou je, v podstatě vzhledem k tomu, že vás nemůže získat přístup k dokumentaci k jQuery během testu, kolik byste měli vědět? Neměli bychom očekávat, že vám přijde s nějakou náhodnou funkcí že bychom vás očekávat, že Google. Věci, které jsou poctivá hra jsou bych říkají jen tak obecné syntaxe, budou moci vybrat podle ID a podle class-- tak jen jako CSS. A pak skutečné funkce themself, budeme pravděpodobně řekne. To jo. Diváků: Takže když zvolíte podle třídy by znamenalo bod. HANNAH Blumberg: Ano, přesně tak. Dobrý. Pokud vyberete podle třídy, bude to se tečka namísto libry. Ano. Publikum: Chtěli byste projít tím rozdílem, mezi výběrem podle ID a podle třídy? HANNAH Blumberg: Jistě. Rozdíl mezi výběru ID a výběru podle třídy. Tak jak říká Maria a trochu dříve, tam může být pouze jedním prvkem HTML s daným ID, vzhledem k tomu, třídy, to nám umožňuje skupině banda různých prvků dohromady, takže věci, které se vztahují, ale ne přesně to samé. Znamená to, že odpověď na otázku? Skvělý. Ano. Diváků: Co když máte více věci, které jsou ve stejné třídě? HANNAH Blumberg: Co se stane, pokud máte více věcí, které jsou stejné třídy? Tak, například, když jsme jen s použitím čistého JavaScript, budeme dělat něco takového document.getElementsByClass. A potom, co to vlastně dělá je vrátí pole prvků. A budete muset buď iteraci je nebo zjistit, který z nich chcete. Nebude to dát Jste jediný prvek. Bude to, aby vám pole prvků. Velká otázka. Něco dalšího? Skvělý. Takže si myslím, pokud jste obeznámeni s jakýkoli jQuery jste viděli v pset, měli byste být dobré jít. Otázka? Ale ne. Opravdu musím učit. Relaxovat. Bude to v pořádku. Budu tam dostat. Pojďme se bavit o Ajax. Takže Ajax bude je-- dobře, začněme s tím, co to znamená. Je to zkratka. To je zkratka pro asynchronní JavaScript a XML. A XML je v podstatě bude [Neslyšitelný] s typem našich dat. Ale my jsme to vlastně použitý XML. Místo toho stačí použít JSON. Takže v podstatě, je to nějaký data-- asynchronní, JavaScript, a data, V tomto případě, JSON. A náš cíl, jak jsme již uvedli trochu dříve, je, aby bylo možné, aby se Požadavek, že se žádost dělat jeho věc v pozadí, ale i nadále dělat, co jsme byli v úmyslu dělat. A pak, když jsou tyto informace připravený, pak budeme začlenit ji. Takže pojďme se podívat, co to ve skutečnosti vypadá. A to, měli byste být trochu povědomý od pset8, ten, který jste právě obrátil. Tak tady je platný jQuery funkce, kterou bychom mohli Chcete vědět about-- tento znak dolaru. Tak to říká funkce jQuery, .getJson. A to, co tato funkce dělá, je to trvá URL a některé parameters-- takže myslím, že v případě, z pset8, bylo to jako, URL byla articles.php a Parametry byl go = nějaký poštovní směrovací číslo. A říká, OK, podat žádost adresovanou Tato adresa URL s danými parametry. A to se prostě stává. Když to skončí, je to buď bude úspěšně dokončit nebo to bude k nezdaru. Tak to je ekvivalent výzvy Rob a požádat ho, aby něco udělat. A pak, když mu zavolá zpátky, je to buď chystá říct, že jsem udělal, nebo jsem selhal. Takže v případě, kam hotovo, říkáte, OK, já jsem udělal. A pak budete volat tuto funkci. V tomto případě, bude to být funkce, která vezme nějaké informace. Ten obvykle zajímá je dat, Data, která jsme vlastně vrátili jako výsledek volání .getJSON. A vy můžete udělat něco s ním. Takže v případě pset8, my zobrazeno jako seznam. Fail bude funkce která je aktivována, jestliže požadavek selže z jakéhokoli důvodu. A v případě pset8, my jen console.log to. Jakékoliv dotazy na to? To jo. Diváků: Můžeme stačí použít funkci theta namísto funkce, textStatus, jqHXR. HANNAH Blumberg: Jistě. Tak jo, myslím, že v pset, jsme právě viděli funkci data. Takže je to jen the-- ano, OK. To je to, co jsme viděli v pset. To je naprosto v pořádku. To jsou jen pokud jste chtěli vytáhnout více informací, to jsou věci, které byste mohli dostat od .getJSON. Dobrá otázka. Něco dalšího? To jo. Diváků: Takže .getJSON je Ajax? HANNAH Blumberg: OK. Tak tohle je ten druh choulostivé části. Jedná se o funkci, která umožňuje jQuery jste k tomu asynchronní volání. A ty asynchronní volání, to je co jsme na mysli jako Ajax. To jo. To mi trvalo opravdu dlouho tahat od sebe, když jsem byl studentem. Diváků: Můžete říci, že znovu? HANNAH Blumberg: Jo. Mohu říci, že znovu? Tato funkce .getJSON, to je funkce jQuery. A bude to dělat asynchronní volání. A tyto asynchronní volání, máme byl na mysli ty, jako Ajax. Nějaké další otázky? Máme jen pár minut odešel. A Maria se chystá zabalit s bezpečností a pak půjdeme třeba jen o hotové. MARIA ZLATKOVA: Super, OK. Tak to je-- jen vzít pár sekund se podívat přes to. A to není něco, co opravdu skvělé. A může mi někdo říct, proč? To, co se děje v foo a mohou se mohl potenciálně vyústit v něco špatného, a co, že se jmenuje? To jo. Diváků: V případě, že argument, že je prošel v roce je více než 12 znaků, to může přetékat. MARIA ZLATKOVA: Správně. Perfektní. Jak se to jmenuje? Právě jste se o tom zmínil. Diváků: přetečení vyrovnávací paměti. MARIA ZLATKOVA: Jo, přetečení vyrovnávací paměti. Tak to je něco, co označujeme jako přetečení vyrovnávací paměti. A vidíme, že uvnitř foo, jsme formulovali jsme vyrovnávací paměti, C, o velikosti 12. Nicméně, v hlavní, my ne zjistit v žádném případě vůbec zda tak, že argv1-- byl druhý argument. Nechceme kontrolovat, zda Velikost je to vhodné. Takže pokud jsme měli Uživatel se zlými úmysly, zejména kteří se dát do nějaké tvrzení, že byl déle než 12 let, a poté případně za hranice, které Argument, měl nějaký spustitelný kód že se snaží udělat něco špatného s tím; pak to, co by se stalo, by se přepsat návrat adresa funkce foo, způsobující funkci, která při vracet k provedení tohoto kódu. A pak se špatné věci se může stát. Má to smysl, aby všechny? A jak můžeme chránit proti tomu? Nějaké návrhy? V podstatě, uvnitř potenciálně foo, jak můžeme zkontrolovat, aby se ujistil , že se nemůže stát? Diváků: Pokud je překročena velikost 12, byste přidělit další paměť? MARIA ZLATKOVA: návrh je, přidělit překročeny další paměť velikosti. Ve skutečnosti, můžeme udělat něco mnohem jednodušší, než je také. Můžeme jen získat délka řetězce argumentu, který je zadán, zkontrolovat, zda, který je méně než nebo rovno 12-- což je to, co to chceme být, protože nechceme to překročit meze naší paměti. A pak, pokud tomu tak není, my může pracovat s argumentem. A pak, pokud se tak stane, budeme skutečně chtějí na Yello potenciálně u uživatele. Ale to je, jak bychom to udělat. Ano. Publikum: Mohl byste vysvětlit memcpy opravdu rychle? MARIA ZLATKOVA: Oh, promiň. Ano. Memcpy vezme cokoliv je-- líto, OK. Memcpy bere, co je v barech, co je předán na foo jako argument příkazového řádku. Takže to bude trvat argv1. Argv1 se nazývá bar zde. Takže to bude trvat a baru to bude kopírovat to do cca. Diváků: OK. MARIA ZLATKOVA: A bude to copy-- třetí argument prostě se odkazuje na to, jak moc to bude kopírovat do cca. Diváků: Ah. Takže tohle je kopírování všechno to pak. MARIA ZLATKOVA: Jo, je to kopírování všechno. Ano. Za prvé, jsme se ujistěte, že bar není rovná null, protože je to ukazatel. Pak jsme si délka řetězce bar. Snažíme se o to, že je to menší než nebo rovný 12. A pak proto, že jsme ujistil, můžeme vlastně memcpy a ujistěte se, že to je v pořádku. Nějaké otázky? Skvělý. Mám dvě true nebo false otázky. Může mi někdo říct hned pokud se jedná o pravdivé nebo nepravdivé? Ano, je to falešné. Přesně. Oba z nich jsou falešné. Takže za použití jedno heslo je nikdy opravdu dobrý nápad protože pokud někdo ví, vaše heslo, mohou jen přístup ke všem vaše další účty. A pak ikony dělat nic aby byla zajištěna bezpečnost. Měli bychom se obvykle vypadají na HTTPS místo HTTP a URL. A některé další druhy útoky, které jsme uváděné že David je uvedeno v přednáška, SQL injection útoky. Už jsme viděli, že pokud budeme ne-- Funkce CS50 dotaz zaručuje, že SQL injection útoky nemůže nastat. Ale když jsme nebyli používat CS50, citát, konec citátu "v dotazu" bychom se ujistit, že vstup uživatele není vlastně nějaký SQL dotaz, který způsobí, vše naše stoly být zrušen nebo něco špatného na stane s naší databázi. Session je únos jiný typ útoku že se stane, když některé špatné osoba používá relace nějaké oběti ID pro přístup k přihlašovací údaje. Takže velmi triviální příklad, který je jako když máme veřejného počítače, pak je špatný člověk přihlásí a pak mají soubory cookie, které jsou uloženy. A cookies nemění na zasedání. Pak máme oběť jít a pak se přihlásit na webových stránkách. Cookies se nemění pro určitou relaci. A pak oběť přihlásí do webové stránky a pak odejde. A pak ten, kdo se vrací pak mohou i nadále používat své ID relace pro přístup k jejich informace. Takže to je jeden z příkladů, jak se to mohlo stát. A pak bych si starosti příliš mnoho o zvláštní kód nebo cokoliv jako to, které by mohly způsobit to, ale má nějaký nápad, co zahrnuté proměnné jsou v tom. A pak manipulace záhlaví Data je jiný typ útoku že má David mluvil o. A to jen odkazuje na co se může stát, když byly reakce, HTTP odezva uvnitř naší hlavičky není správně dezinfikují. A každý z fields-- například, pokud někdo přepíše jeden z hlavičky Hodnoty, které mají obsahovat nic víc, než co by měli contain-- a vlastně obsahovat, například, 200 OK stavový kód, pak se by mohly dělat škodlivý věci, když nemáš. Ale já bych si starosti příliš moc o zvláštním kódem které by mohly způsobit to, jen trochu porozumění na vysoké úrovni takové věci. Myslím, že to je vše, že musíme pokrýt. Úžasný. Každý, kdo má nějaké otázky týkající se některý z věcí, které jsme na které se vztahuje? Ano. Diváků: Takže jeden druh více logistické otázka. Je zaměřena především obsah na věci, po kvíz 1? MARIA ZLATKOVA: So Otázkou je, je obsah zaměřena především na věci po kvíz 1? Takže je kladen důraz na později kvíz 1, s výjimkou že se musíme soustředit na věci v pset5 a mnoho datových struktur že se vztahuje. A nemůžeme říci, že jsme můžete ignorovat cokoli předtím, než že proto, že navazuje na to, jak dobře. Tak se zaměřují na to, že navíc pset5 materiál jako zahrnující propojené seznamy, stohy, fronty, a vše, co že Hannah přešel. HANNAH Blumberg: Správně. Jo, šli jsme přes všechny věci C hned na začátku velmi rychle. Ale ujistěte se, že přezkoumat. Vraťte se zpět a dívat se na kvíz 0 hodnocení. Pár více logistické poznámky, Jen když máme vaši pozornost. Budeme mít úřední hodiny a to jak v pondělí a úterý večer. Chystají se být v MD 119. To vše je na webových stránkách, tak pokud nechcete slyšet, žádné starosti. MARIA ZLATKOVA: 08:30 do 11:00. HANNAH Blumberg: Jo, 08:30 do 11:00. Budeme tam. Budeme tam odpovědět na otázky. Je to docela chladno a zábavné. Vy můžete klást žádné otázky že budete mít na kvíz 1. A kvíz 1 je Středa, tak hodně štěstí. Máte-li jakékoli dotazy, možná přijít s námi mluvit tady one-on-one. Bezva. Díky moc. MARIA ZLATKOVA: Díky moc, kluci. Diváků: Hurá. [POTLESK]