>> 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í.