1 00:00:00,000 --> 00:00:02,570 [Powered by Google Translate] [Týden 9] 2 00:00:02,570 --> 00:00:04,740 [David J. Malan - Harvard University] 3 00:00:04,740 --> 00:00:07,170 [To je CS50. - CS50.TV] 4 00:00:07,170 --> 00:00:12,350 Dobrá. Vítejte zpět. To je CS50, a to je začátek týdne 9. 5 00:00:12,350 --> 00:00:16,600 Dnes jsme se zaměřili zejména na design, již v souvislosti s C 6 00:00:16,600 --> 00:00:20,010 ale v kontextu PHP a kouskem SQL a trochu JavaScriptu, 7 00:00:20,010 --> 00:00:23,730 zejména ke konci jak PSet 7 a také vaše konečný projekt. 8 00:00:23,730 --> 00:00:26,310 Ve skutečnosti, pokud jste v tomto bodě v konečné projektu 9 00:00:26,310 --> 00:00:30,100 kde pravděpodobně jako o hodinu nebo tak před vámi alespoň začala zamyslet 10 00:00:30,100 --> 00:00:33,730 do konečného projektu a myslíš si přejete spolupracovat s 1 nebo 2 spolužáky, 11 00:00:33,730 --> 00:00:36,150 pokud máte potíže s připojením s uvedenou spolužáky, 12 00:00:36,150 --> 00:00:40,570 neváhejte vyplnit formulář na cs50.net/partners/form. 13 00:00:40,570 --> 00:00:42,880 Je to jen zeptá, kdo jste, jaké projektu myslíš o tom, 14 00:00:42,880 --> 00:00:44,870 kde žijete jen pro logistických důvodů. 15 00:00:44,870 --> 00:00:49,510 A pak, pokud chcete sledovat v průběhu příštího týdne nebo tak tabulkového URL tam, 16 00:00:49,510 --> 00:00:53,520 pak můžete vidět jen pro čtení verze Google doc 17 00:00:53,520 --> 00:00:56,010 , ve kterém jsme shromažďování těchto informací. 18 00:00:56,010 --> 00:00:58,930 Takže pokud chcete pracovat s někým, a to všemi prostředky, neváhejte oslovit lidi 19 00:00:58,930 --> 00:01:00,480 prostřednictvím tohoto mechanismu. 20 00:01:00,480 --> 00:01:02,690 Ale většina lidí to práce sólo. To je naprosto v pořádku. 21 00:01:02,690 --> 00:01:06,120 Takže se domnívají, že toto je v žádném případě povinné. 22 00:01:06,120 --> 00:01:09,680 V pátek to byl jen já a několik z týmu tady, 23 00:01:09,680 --> 00:01:11,100 prázdné divadlo z větší části. 24 00:01:11,100 --> 00:01:14,600 Tam byly 3 turistů sedí tam, takže to bylo trochu trapné. 25 00:01:14,600 --> 00:01:18,970 O čem jsme mluvili byla databáze a mluvili jsme o PSet 7 trochu. 26 00:01:18,970 --> 00:01:22,200 A pokud jste náhodou chytit, že na videu ještě ne, to je v pořádku. 27 00:01:22,200 --> 00:01:26,770 Pokusím se definovat všechny pojmy, které bychom jinak považujeme za samozřejmé 28 00:01:26,770 --> 00:01:28,840 na základě přednášky páteční. 29 00:01:28,840 --> 00:01:32,550 >> Ale dnes se budeme snažit, aby vám do bodu 30 00:01:32,550 --> 00:01:34,990 ze dne nejen schopen udělat něco jako PSet 7 31 00:01:34,990 --> 00:01:37,360 ale opravdu pochopit, co se děje na pod pokličku, 32 00:01:37,360 --> 00:01:41,910 zejména některé abstrakce, které jsme zavedeny do functions.php souboru 33 00:01:41,910 --> 00:01:45,780 aby vaše životy trochu jednodušší, ale tak, že si nakonec porozuměli 34 00:01:45,780 --> 00:01:48,760 tak, že když se školení kola sundat za pár týdnů můžete ještě přežít 35 00:01:48,760 --> 00:01:53,750 v reálném světě a dělat ty věci bez CS50 rámci pod vámi. 36 00:01:53,750 --> 00:01:57,500 Tento $ _SESSION, pro ty z vás, kteří jsou obeznámeni 37 00:01:57,500 --> 00:02:01,960 nebo kteří již zachytil na video v pátek, co SESSION, dejte nám to 38 00:02:01,960 --> 00:02:04,330 v PHP-založené webové aplikace? 39 00:02:04,330 --> 00:02:09,650 To je superglobal variabilní, což znamená, že je to podobné jako v duchu GET a POST 40 00:02:09,650 --> 00:02:13,970 a pár dalších, ale to, co je to za věc užitečná pro? 41 00:02:13,970 --> 00:02:18,320 >> Co je SESSION používá? Jo. [Student] přihlášení 42 00:02:18,320 --> 00:02:21,040 Je nám líto? [Student] přihlášení přihlášení Opravdu. 43 00:02:21,040 --> 00:02:25,100 V PSet 7 jsme pomocí tohoto SESSION superglobal usnadnit přihlášení 44 00:02:25,100 --> 00:02:28,600 A co je hezké o této superglobal je, že je asociativní pole. 45 00:02:28,600 --> 00:02:33,190 Asociativní pole, odvolání, je jen pole, ale jejichž indexů již nemusí být čísla 46 00:02:33,190 --> 00:02:37,670 jako 012. Mohou být čísla, nebo mohou být dokonce řetězce. 47 00:02:37,670 --> 00:02:44,890 A tak pokud jste se ponořila do PSet 7 ještě, mohou si vzpomenete, že jsme se ukládají klíč nazvaný ID 48 00:02:44,890 --> 00:02:50,330 uvnitř tohoto asociativní pole, jehož hodnota je něco jako 123 - 49 00:02:50,330 --> 00:02:53,780 bez ohledu na aktuálně přihlášeného ID uživatele je. 50 00:02:53,780 --> 00:02:59,470 Motivace je to, že i poté, co uživatel navštívil localhost 51 00:02:59,470 --> 00:03:02,720 nebo moje webové stránky obecněji a pak se přihlásíte, 52 00:03:02,720 --> 00:03:07,320 i v případě, že nejsou klikněte na odkaz, nebo se vrátit do svého webu po dobu 5 minut 53 00:03:07,320 --> 00:03:10,730 nebo dokonce hodinu, nebo dokonce denně, ale opustit svůj okno prohlížeče otevřené, 54 00:03:10,730 --> 00:03:14,370 prostřednictvím tohoto superglobal mohu pamatovat, že jsou přihlášeni 55 00:03:14,370 --> 00:03:21,140 >> Jinými slovy, mi umožňuje uložit mírně dlouhodobou co chci o uživateli. 56 00:03:21,140 --> 00:03:24,390 A můžete si ji opravdu jako ztělesnění nákupním košíku. 57 00:03:24,390 --> 00:03:27,740 Místa jako Amazon zřejmě vám dát věci do nákupního košíku, 58 00:03:27,740 --> 00:03:32,230 ale HTTP, protokol, který pohání web, je bez státní příslušnosti 59 00:03:32,230 --> 00:03:34,230 v tom smyslu, že při návštěvě webové stránky, 60 00:03:34,230 --> 00:03:37,290 z větší části nemáte nějakou konstantní připojení k síti 61 00:03:37,290 --> 00:03:39,270 mezi prohlížečem a serverem. 62 00:03:39,270 --> 00:03:42,190 Jakmile jste si stáhli HTML a obrázky ve formátu JPEG a GIF a všechno, 63 00:03:42,190 --> 00:03:48,200 připojení zmizí a vy prostě máte kopii HTML a kdoví co ještě ze serveru. 64 00:03:48,200 --> 00:03:53,000 Ale pokud server chce mít na paměti, něco o sobě, 65 00:03:53,000 --> 00:03:57,580 zatížení je na serveru skutečně zaznamenat, že informace. 66 00:03:57,580 --> 00:04:00,130 A tak jste programátor, kteří mají kontrolu nad serverem 67 00:04:00,130 --> 00:04:04,400 může dát nejvíce, co chcete v této superglobal asociativního pole 68 00:04:04,400 --> 00:04:06,850 a to tam bude příště uživatel přijde zpět, 69 00:04:06,850 --> 00:04:12,070 ať už je to minut nebo dokonce dní později, pokud zavřete své okno prohlížeče, 70 00:04:12,070 --> 00:04:14,360 na kterém místě SESSION zmizí. 71 00:04:14,360 --> 00:04:17,779 Takže je to pomíjivé skladování, je to non-perzistentní, a to znamenalo jít pryč 72 00:04:17,779 --> 00:04:22,360 jakmile uživatel zavře svůj prohlížeč - nejen, že karta, často na celý prohlížeč, 73 00:04:22,360 --> 00:04:24,930 čímž účinně přihlášení uživatele ven. 74 00:04:24,930 --> 00:04:28,000 Tak, jak je ta věc skutečně realizována? 75 00:04:28,000 --> 00:04:31,360 Pojďme se rychle podívat na jednoduchém příkladě jsme se podívali na pátek. 76 00:04:31,360 --> 00:04:33,340 Pro ty, kteří neznají, to bylo tak jednoduché, jak to. 77 00:04:33,340 --> 00:04:35,910 Toto je webová stránka, jejímž jediným smyslem života je mi 78 00:04:35,910 --> 00:04:38,000 kolikrát jsem navštívil tuto stránku. 79 00:04:38,000 --> 00:04:41,670 To je poprvé, co tady v pondělí, že jsem ji navštívil, tak to říká 0 krát. 80 00:04:41,670 --> 00:04:46,940 >> Ale kdybych začal načtení této stránky říká, že 1 čas, 2, 3, 4, 5, 81 00:04:46,940 --> 00:04:49,800 a to bude nakonec jen se udržet na čítání nahoru, nahoru, nahoru, nahoru, nahoru 82 00:04:49,800 --> 00:04:53,130 pro každou dobu jsem vlastně klepněte na tlačítko Obnovit na to. 83 00:04:53,130 --> 00:04:58,830 Tak, jak je to nefunguje? Nech mě jít dovnitř tohoto souboru s názvem counter.php. 84 00:04:58,830 --> 00:05:02,490 Horní část je všechny modré komentáře, ale zajímavá část je tady. 85 00:05:02,490 --> 00:05:06,670 Na řádku 13 nazýváme tuto funkci session_start, 86 00:05:06,670 --> 00:05:09,600 a to je doslova vše, co musíte udělat, pokud chcete mít přístup 87 00:05:09,600 --> 00:05:13,610 k tomu speciální superglobal s názvem $ _SESSION. 88 00:05:13,610 --> 00:05:17,430 To je to všechno možné, a uvidíme za chvíli, jak je to vůbec možné. 89 00:05:17,430 --> 00:05:20,350 V řádku 16 oznámení, co dělám. 90 00:05:20,350 --> 00:05:25,960 Pokud je klíč, tzv. pult - jinými slovy, hodnota indexu - "počítadlo" 91 00:05:25,960 --> 00:05:32,310 existuje uvnitř tohoto pole nazývá SESSION, pak to, co dělám s ní v souladu níže? 92 00:05:32,310 --> 00:05:36,650 Co je linka 18 dělá? 93 00:05:36,650 --> 00:05:40,360 >> [Neslyšitelné Student odpověď] Co je to? [Student] Ukládání hodnoty. Dobré. 94 00:05:40,360 --> 00:05:45,800 Je to ukládání hodnotu, která je v SESSION teď v nové místní dočasné proměnné, 95 00:05:45,800 --> 00:05:48,250 $ Counter ve všech malými písmeny. 96 00:05:48,250 --> 00:05:50,770 Všimněte si, že PHP už byl trochu líný zde. 97 00:05:50,770 --> 00:05:55,550 Všimněte si, nemáme žádnou zmínku o int nebo float nebo řetězec nebo něco takového 98 00:05:55,550 --> 00:06:00,480 protože PHP je slabě typovaný, kdy nemusíte specifikovat typ proměnné, 99 00:06:00,480 --> 00:06:03,310 a v tomto případě tady jsem to dokonce prohlásil to ještě. 100 00:06:03,310 --> 00:06:08,980 Jsem prohlásil, že uvnitř těchto složených závorek a na rozdíl od C, je to vlastně v pořádku. 101 00:06:08,980 --> 00:06:13,800 Bez ohledu na to, jak hluboce vnořené proměnné prohlášení je v PHP - 102 00:06:13,800 --> 00:06:16,650 uvnitř ortézy kudrnaté, uvnitř ortézy vlnité a jako - 103 00:06:16,650 --> 00:06:21,230 že bude v tomto okamžiku v době existují pro zbytek programu, 104 00:06:21,230 --> 00:06:22,680 k lepšímu nebo k horšímu. 105 00:06:22,680 --> 00:06:26,930 Tak to okamžitě stává globální jakmile jej definovat jako tady děláme. 106 00:06:26,930 --> 00:06:31,620 >> Jinak, když nemám zjistil, že tam je něco v SESSION superglobal, 107 00:06:31,620 --> 00:06:34,680 Jsem zřejmě inicializaci tuto proměnnou čítač na 0, 108 00:06:34,680 --> 00:06:37,580 čímž jen za předpokladu, že uživatel nikdy tu nebyla. 109 00:06:37,580 --> 00:06:40,030 A pak samozřejmě je zvyšování counter, jak? 110 00:06:40,030 --> 00:06:44,480 Já jsem aktualizaci hodnotu, která je uvnitř tohoto asociativního pole 111 00:06:44,480 --> 00:06:49,530 nastavením je rovna co čítač je v současné době + 1. 112 00:06:49,530 --> 00:06:53,520 Kdybych přejděte sem na HTML stránky, je to vlastně docela jednoduché. 113 00:06:53,520 --> 00:06:58,920 Jediné, co mám v těle této stránky je: "Vy jste navštívili tyto stránky tak-a-tak čas." 114 00:06:58,920 --> 00:07:00,350 A to je pojem PHP. 115 00:07:00,350 --> 00:07:06,080 Pokud tak učiníte 00:07:12,600 Je to opravdu odpovídá na něco jako printf, který jsme viděli mnohokrát v C, 117 00:07:12,600 --> 00:07:15,940 ačkoliv, jak možná víte již od spec v PSet 7, 118 00:07:15,940 --> 00:07:20,160 tisk je také funkce, která vytiskne pouze něco, to dělá ne vlastně používat formátovací kódy, 119 00:07:20,160 --> 00:07:23,270 a můžete skutečně říci, echo stejně. 120 00:07:23,270 --> 00:07:27,460 Jsou to všechno někdy tak trochu jinak, i když čistý efekt je nakonec stejný. 121 00:07:27,460 --> 00:07:31,270 Takže toto použití od rovnítka je jen jakýsi elegantní způsob, jak to udělat 122 00:07:31,270 --> 00:07:34,910 stručněji než byste jinak mohli. 123 00:07:34,910 --> 00:07:38,370 Takže to je vše, na tomto webu dělá. To vytiskne hodnotu čítače. 124 00:07:38,370 --> 00:07:40,550 Jak to všechno vlastně děje? 125 00:07:40,550 --> 00:07:43,250 Možná si vzpomínáte, týden nebo tak dávno jsme začali hledat pod pokličku 126 00:07:43,250 --> 00:07:47,910 na to, jak webová stránka funguje pomocí tohoto modulu kartu. 127 00:07:47,910 --> 00:07:51,900 >> Chrome má tento i ve verzi Mac, verze Windows, a dokonce i verze pro Linux, 128 00:07:51,900 --> 00:07:59,510 a Firefox a IE mají podobné mechanismy, jimiž jste tento vestavěný debugger 129 00:07:59,510 --> 00:08:01,400 uvnitř prohlížeče. 130 00:08:01,400 --> 00:08:03,040 Pojďme se podívat na následující. 131 00:08:03,040 --> 00:08:06,960 Máme spoustu karet zde, a připomínají, že jeden je vlevo Elements, 132 00:08:06,960 --> 00:08:10,700 a bez ohledu na to, jak godawful HTML a JavaScript je na stránce, 133 00:08:10,700 --> 00:08:15,710 Připomínám, že se Elements kartě můžete skutečně procházet HTML hierarchicky 134 00:08:15,710 --> 00:08:17,050 a pěkné a úhledně. 135 00:08:17,050 --> 00:08:19,370 Takže pokud se snažíte naučit z webové stránky, jako Google nebo Facebook 136 00:08:19,370 --> 00:08:22,370 nebo opravdu všechny webové stránky, si uvědomit, že jste pravděpodobně lépe 137 00:08:22,370 --> 00:08:26,360 při pohledu na zdrojový kód tímto způsobem, jak protichůdný k prohlížení surového zdroj, 138 00:08:26,360 --> 00:08:29,580 který může být zmatek, jak jsme viděli především na stránkách Google. 139 00:08:29,580 --> 00:08:32,220 Takže když jsem místo toho klikněte na kartě Síť tady, 140 00:08:32,220 --> 00:08:34,830 Podívejme se, co se děje, když jsem navštivte tuto stránku. 141 00:08:34,830 --> 00:08:38,669 Nejprve mi dovolte pročistit cache. 142 00:08:38,669 --> 00:08:43,570 Chystám se jít do nastavení v Chrome a pak jít do historie 143 00:08:43,570 --> 00:08:46,420 a pak Vymazat všechny údaje o prohlížení. 144 00:08:46,420 --> 00:08:48,170 Ty by mohly být použity k děláte pro jiné účely, [smích] 145 00:08:48,170 --> 00:08:51,990 ale když přijde do rozvojových webové stránky, je to skutečně užitečné - 146 00:08:51,990 --> 00:08:55,980 pokud se smějete víš. [Smích] 147 00:08:55,980 --> 00:08:59,310 Je to opravdu užitečné při rozvoji webových stránek, protože realita je 148 00:08:59,310 --> 00:09:04,100 věci, jako sušenky a podobné věci mezipaměti soubory HTML, cache soubory JavaScriptu 149 00:09:04,100 --> 00:09:06,390 může skutečně stát velkým bolesti hlavy, protože pokud z jakéhokoli důvodu 150 00:09:06,390 --> 00:09:11,500 prohlížeč rozhodne mezipaměti nějaký soubor, a přesto jste provedli změny tohoto souboru na serveru 151 00:09:11,500 --> 00:09:14,670 ale prohlížeč není opravdu uvědomil, že soubor byl změněn 152 00:09:14,670 --> 00:09:19,060 a proto není ve skutečnosti znovu stáhnout, i když klepnete na tlačítko Načíst znovu, 153 00:09:19,060 --> 00:09:23,210 jeden z nejvíce Surefire způsoby, jak jen se ujistěte, chyba není na vašem kódu, 154 00:09:23,210 --> 00:09:26,480 je to s chováním prohlížeče, je jít tady v prohlížeči 155 00:09:26,480 --> 00:09:29,950 a jen vymazat celou historii tak, aby tam žádný zmatek. 156 00:09:29,950 --> 00:09:33,210 >> A pak, pokud opravdu chcete být paranoidní, ukončete prohlížeč, restartujte jej, 157 00:09:33,210 --> 00:09:35,660 a ujistěte se, vše funguje podle očekávání. 158 00:09:35,660 --> 00:09:38,820 Takže ve zkratce, po vymazání mezipaměti je dobré, když dělá rozvoj. 159 00:09:38,820 --> 00:09:40,690 Takže tady máme na kartu Síť. 160 00:09:40,690 --> 00:09:46,020 I předtím navštívil místo 9 krát, ale nechte mě jít napřed nyní a klepněte na tlačítko Obnovit. 161 00:09:46,020 --> 00:09:47,500 A já jsem zpátky na 0. 162 00:09:47,500 --> 00:09:52,100 Pojďme skutečně vidět, jak je možné, že tento SESSION superglobal je prováděn. 163 00:09:52,100 --> 00:09:55,990 Jdu klikněte na 1 HTTP požadavku, který byl vyroben, 164 00:09:55,990 --> 00:09:58,810 a to ladění okna mi umožňuje podívat dovnitř toho. 165 00:09:58,810 --> 00:10:01,970 Tady vidím jen odpověď ze serveru, který není zajímavé. 166 00:10:01,970 --> 00:10:04,030 Viděl jsem to v libovolném počtu cest. 167 00:10:04,030 --> 00:10:06,350 Ale to, co je technicky zajímavé jsou záhlaví. 168 00:10:06,350 --> 00:10:11,770 Kdybych přejděte sem a zaměřit se na hlavičkách a klepněte na tlačítko Zobrazit zdroj, 169 00:10:11,770 --> 00:10:14,400 co budu vidět, je doslova požadavek HTTP 170 00:10:14,400 --> 00:10:17,250 že prostě šel z mého prohlížeče na server, 171 00:10:17,250 --> 00:10:21,400 GET je správné slovo a pak / counter.php bytí název souboru, 172 00:10:21,400 --> 00:10:25,670 HTTP/1.1 být jen verze HTTP že můj prohlížeč používá. 173 00:10:25,670 --> 00:10:31,070 Tato linka je zde trochu připomíná z prohlížeče na server, co název serveru je 174 00:10:31,070 --> 00:10:33,020 že chce mluvit. 175 00:10:33,020 --> 00:10:38,200 A pak zbytek je to někdy zajímavé, ale není relevantní právě teď. 176 00:10:38,200 --> 00:10:40,090 >> To je jen trochu zvědavosti. 177 00:10:40,090 --> 00:10:43,530 Cryptic ačkoli je tento řetězec je, kdykoli váš prohlížeč navštíví webovou stránku 178 00:10:43,530 --> 00:10:47,110 je informování server jaký prohlížeč používáte 179 00:10:47,110 --> 00:10:50,040 a jaký operační systém používáte a jakou verzi této smlouvy. 180 00:10:50,040 --> 00:10:52,650 Takže pokud jste se někdy nad tím, jak webové stránky, jako CNN a kdoví co ještě 181 00:10:52,650 --> 00:10:56,860 vědět, jaké jsou procenta uživatelů Mac na webu, uživatele PC, 182 00:10:56,860 --> 00:11:00,820 Uživatelům IE, Chrome uživatelé a podobné, je to proto, že všechny naše prohlížeče 183 00:11:00,820 --> 00:11:04,300 říkají každý web tam, co jsme. 184 00:11:04,300 --> 00:11:07,410 To nemusí nutně obsahovat osobní identifikační údaje, 185 00:11:07,410 --> 00:11:13,060 ale to přece říct, server, jaké jsou vaše IP adresa je a jaký prohlížeč a OS používáte. 186 00:11:13,060 --> 00:11:14,720 Tak to je, pokud je tato informace. 187 00:11:14,720 --> 00:11:19,960 Ale co je ještě zajímavější teď, když jde o těchto školeních je hlavička odpovědi. 188 00:11:19,960 --> 00:11:22,530 Dovolte mi, abych na příkaz Zobrazit zdrojový vedle odpovědi. 189 00:11:22,530 --> 00:11:24,590 Co je zajímavé, je zde několik věcí. 190 00:11:24,590 --> 00:11:27,580 1, jsme se vrátili stavový kód 200. 191 00:11:27,580 --> 00:11:29,840 Nikdy jsme neviděli tento stavový kód, protože to znamená, že je vše v pořádku. 192 00:11:29,840 --> 00:11:32,920 To znamená, doslova v pořádku na rozdíl od něčeho jiného. 193 00:11:32,920 --> 00:11:36,380 Co je to číslo někdy vidět, že je to špatné? [Student] 404. 194 00:11:36,380 --> 00:11:39,860 404, soubor nebyl nalezen, může 403 můžete být klopýtnutí na již, 195 00:11:39,860 --> 00:11:43,660 které je zakázáno, což znamená, že jste zapomněli na něco chmod, s největší pravděpodobností. 196 00:11:43,660 --> 00:11:45,190 A je tu banda dalších. 197 00:11:45,190 --> 00:11:47,760 >> Tady dole, to je trochu blázen. 198 00:11:47,760 --> 00:11:52,340 Opravdu jsem to napsal tento soubor pár minut před vložením do gedit. 199 00:11:52,340 --> 00:11:57,100 Proč tuto stránku vyprší v roce 1981 předtím, než tam opravdu Web? 200 00:11:58,010 --> 00:12:00,730 Co se to tam děje? 201 00:12:00,730 --> 00:12:04,390 >> [Neslyšitelné Student odezvy] Časové razítko. Ale proč? 202 00:12:06,110 --> 00:12:09,120 Je to poněkud svévolné, ale ve skutečnosti je to užitečné. 203 00:12:09,120 --> 00:12:15,500 Co to říká na svého prohlížeče je tento soubor PHP, kterou jste právě požádal již vypršela. 204 00:12:15,500 --> 00:12:18,580 Ve skutečnosti, to, že skončila před 30 lety. 205 00:12:18,580 --> 00:12:20,260 Ale co to vlastně znamená? 206 00:12:20,260 --> 00:12:22,500 To jen znamená, že příště uživatel navštíví tuto stránku, 207 00:12:22,500 --> 00:12:25,540 ať už překládce nebo zadáním adresy URL v adresním řádku, 208 00:12:25,540 --> 00:12:28,010 ujistěte se, že jste jít a přines novou kopii. 209 00:12:28,010 --> 00:12:30,840 To je jakýsi příklad mezipaměti mlátit, 210 00:12:30,840 --> 00:12:33,790 hloupý slovo, které znamená jen se snaží odradit prohlížeče 211 00:12:33,790 --> 00:12:37,260 od skutečně cache HTML je, že byl odeslán ze serveru 212 00:12:37,260 --> 00:12:41,490 takže se nebudete zasáhla znovu načíst a pak uvidíte stejnou verzi souboru. 213 00:12:41,490 --> 00:12:43,730 Vy vlastně chcete, aby server odeslat novou kopii. 214 00:12:43,730 --> 00:12:47,440 Takže skutečnost, že je to 1981 znamená to, že to je to, co je přístroj výběru 215 00:12:47,440 --> 00:12:50,280 jako libovolná data v minulosti. 216 00:12:50,280 --> 00:12:53,380 Ale skutečný šťavnaté linka je nyní tohle. 217 00:12:53,380 --> 00:12:57,550 Ještě předtím, než 50 pravděpodobně jste povědomě s cookies. 218 00:12:57,550 --> 00:13:01,820 Jak teď, zejména mezi těmi, méně pohodlné, nebo mezi, 219 00:13:01,820 --> 00:13:04,120 co je cookie ve vašem pochopení právě teď 220 00:13:04,120 --> 00:13:06,980 i když jsme o tom, aby se vaše chápání více technické? 221 00:13:08,150 --> 00:13:10,070 Co je to soubor cookie? Jo. 222 00:13:10,070 --> 00:13:13,890 [Student] Informace o uživateli, jako v případě, že jste napsali své uživatelské jméno nebo něco. 223 00:13:13,890 --> 00:13:17,370 >> Dobré. Je to informace o uživateli, ať už jste napsali ve svém uživatelské jméno již. 224 00:13:17,370 --> 00:13:21,190 Cookies jsou způsob, jak, kdy servery si pamatuji něco o uživateli. 225 00:13:21,190 --> 00:13:25,810 A co cookie je opravdu je textový soubor nebo některé posloupnost bajtů 226 00:13:25,810 --> 00:13:28,340 , který je zasazen server uvnitř vašeho prohlížeče, 227 00:13:28,340 --> 00:13:31,960 a uvnitř tohoto souboru nebo mezi těmito bajtů je nějaký identifikátor. 228 00:13:31,960 --> 00:13:35,640 Možná je to doslova vaše uživatelské jméno, ale často je to něco víc mystické vypadající 229 00:13:35,640 --> 00:13:43,700 podobné věci tady - bo8dal3ct a tak dále - je to opravdu velký alfanumerický řetězec 230 00:13:43,700 --> 00:13:47,050 to je opravdu jen chtěl být jedinečný identifikátor pro vás. 231 00:13:47,050 --> 00:13:49,790 Nebo si můžete myslet na to, jako jakýsi virtuální ruky razítko. 232 00:13:49,790 --> 00:13:53,020 Pokud půjdete do nějaké klubu, nebo zábavní park, na paměti, že jste skutečně zaplacená 233 00:13:53,020 --> 00:13:55,850 a pryč, dali malý červený štítek na ruce nějakého druhu, 234 00:13:55,850 --> 00:13:59,270 a že připomíná lidem na přepážce, že jste již zaplacené 235 00:13:59,270 --> 00:14:01,340 a můžete přijít a odejít, jak je libo. 236 00:14:01,340 --> 00:14:04,250 Cookies jsou trochu podobné v duchu na to. 237 00:14:04,250 --> 00:14:08,070 Poprvé jsem navštívil tuto stránku, jak jsem to udělal po odstranění mé cache, 238 00:14:08,070 --> 00:14:11,620 webový server, přístroj v tomto případě, dát razítko na ruce 239 00:14:11,620 --> 00:14:15,030 jehož jméno je PHPSESSID, session ID, 240 00:14:15,030 --> 00:14:18,260 jehož hodnota je to opravdu dlouhý alfanumerický řetězec. 241 00:14:18,260 --> 00:14:22,470 >> Takže to je teď trochu nápisem na mé straně, takže příště jsem narazil jiný 242 00:14:22,470 --> 00:14:25,230 nebo ručně navštivte tuto adresu URL v prohlížeči, 243 00:14:25,230 --> 00:14:29,230 můj prohlížeč z definice HTTP představí ruční razítko 244 00:14:29,230 --> 00:14:31,940 znovu a znovu a znovu. 245 00:14:31,940 --> 00:14:34,550 Takže i když je server nemusí nutně vědět, kdo jsem, 246 00:14:34,550 --> 00:14:39,610 se alespoň vědět, že jsem stejný uživatel nebo alespoň konkrétněji, stejný prohlížeč. 247 00:14:39,610 --> 00:14:45,660 A tak to je v konečném důsledku, jak je implementována SESSION superglobal. 248 00:14:45,660 --> 00:14:51,200 Server nemá tušení, kdo jste, když jste přehodnotily webové stránky pro druhé nebo třetí čas 249 00:14:51,200 --> 00:14:53,410 pokud předložíte tento ruční razítko. 250 00:14:53,410 --> 00:14:55,530 A jakmile si představit, že ruční razítko, 251 00:14:55,530 --> 00:14:59,370 webový server v podstatě jde do malé databáze vlastní 252 00:14:59,370 --> 00:15:06,040 a kontroly, v pořádku, já jsem právě viděl ruční razítko uživatelského bo8dal3ct a tak dále. 253 00:15:06,040 --> 00:15:09,850 Podívám se, jaké informace programátor uložena 254 00:15:09,850 --> 00:15:12,380 uvnitř superglobal o tomto uživatele, 255 00:15:12,380 --> 00:15:17,000 a pak mě ujistit, že tyto údaje jsou opět uvnitř SESSION superglobal 256 00:15:17,000 --> 00:15:19,830 tak, že programátor může znovu přístup k datům 257 00:15:19,830 --> 00:15:23,360 i když to bylo nastaveno několik minut nebo hodin před. 258 00:15:23,360 --> 00:15:26,150 Takže jinými slovy, sušenky, které dostal špatný rap na nějakou dobu 259 00:15:26,150 --> 00:15:29,990 z důvodu nejistoty v prohlížečích a je opravdu možné porušovat naše soukromí a to vše, 260 00:15:29,990 --> 00:15:31,900 oni vlastně mají skvělý nástroj, protože bez nich 261 00:15:31,900 --> 00:15:36,110 byste být neustále přihlášení do každé stránky, kterou navštívíte Facebook 262 00:15:36,110 --> 00:15:40,680 nebo každý Gmail e-mail přečíst, pokud prohlížeč nemá nějaký způsob, jak si pamatovat 263 00:15:40,680 --> 00:15:43,320 že jste již byl ověřen. 264 00:15:43,320 --> 00:15:46,640 >> Takže tímto způsobem se soubory cookie poslán zpět a dále přes drát. 265 00:15:46,640 --> 00:15:52,470 Další zvědavost sušenky, zejména zde, je to, že je to zcela v podobě prostého textu. 266 00:15:52,470 --> 00:15:54,930 Není šifrování děje vůbec, 267 00:15:54,930 --> 00:15:57,240 a opravdu jsem pomocí HTTP v tuto chvíli. 268 00:15:57,240 --> 00:16:00,890 Jeden z našich oblíbených momentů ve CS50, který je nyní před 2 lety, 269 00:16:00,890 --> 00:16:04,750 byl v době kolem nástroj s názvem Firesheep vyšel. 270 00:16:04,750 --> 00:16:08,320 To byl volný kus software, který byl vyroben bezpečnostní výzkumník 271 00:16:08,320 --> 00:16:13,250 jako budíček pro komunitu říci, jak otřesně prováděna 272 00:16:13,250 --> 00:16:17,900 některé autentizační mechanismy na webu byly. 273 00:16:17,900 --> 00:16:22,880 Takže na nějakou dobu, Facebook byl téměř úplně přes HTTP, HTTPS ne. 274 00:16:22,880 --> 00:16:25,640 A i když nemáte tušení, jak crypto pracuje, S je zabezpečený 275 00:16:25,640 --> 00:16:27,950 tak to znamená, že je alespoň nějaký šifrování zapojeny. 276 00:16:27,950 --> 00:16:30,610 Facebook se používá k zašifrování uživatelská jména a hesla, 277 00:16:30,610 --> 00:16:33,560 ale jakmile se podíval na své tropí nebo vaše zprávy nebo vaše zprávy krmivo, 278 00:16:33,560 --> 00:16:35,360 to vše bylo nešifrované. 279 00:16:35,360 --> 00:16:37,870 Tak byl Gmail do doby těsně rok nebo 2 před. 280 00:16:37,870 --> 00:16:41,100 Kdykoliv jste přihlášeni, ano, oni používají bezpečné šifrování, 281 00:16:41,100 --> 00:16:44,300 ale poté, že ne. A proč by to mohlo být? 282 00:16:44,300 --> 00:16:49,210 Proč ne jen používat kryptografii po celou dobu v případech užití, jako je tento? 283 00:16:49,210 --> 00:16:53,700 Co je to? Myslím, že jsem něco slyšel. [Student] Speed. 284 00:16:53,700 --> 00:16:56,250 Rychlost, ne? Existují způsoby, jak vyřešit tento problém. 285 00:16:56,250 --> 00:16:59,610 Ale pokud si to prostě o tom přemýšlet logicky, pokud zašifrovat něco, 286 00:16:59,610 --> 00:17:01,820 co musíte udělat, alespoň trochu více práce. 287 00:17:01,820 --> 00:17:05,460 V PSet 2, když jste zavedli Caesara nebo Vigenère nebo dokonce Crack, 288 00:17:05,460 --> 00:17:07,760 pouze tisk řetězec je poměrně snadné. 289 00:17:07,760 --> 00:17:12,040 Šifrování a pak tisk řetězec minimálně vyžaduje trochu více práce. 290 00:17:12,040 --> 00:17:14,520 >>  Za super populární webové stránky, jako Google a Facebook, 291 00:17:14,520 --> 00:17:18,839 Máte-li udělat více práce pro každého uživatele pro každou jednotlivou webové stránky, které navštívíte, 292 00:17:18,839 --> 00:17:20,520 že prostě trvá více procesorového času. 293 00:17:20,520 --> 00:17:22,920 A pokud potřebujete více času procesoru, možná budete potřebovat další servery, 294 00:17:22,920 --> 00:17:24,270 což znamená, že budete potřebovat více peněz. 295 00:17:24,270 --> 00:17:27,579 A tak na mnoho let to prostě opravdu není nejlepší praxe. 296 00:17:27,579 --> 00:17:31,440 Lidé by používat šifrování SSL pouze tehdy, když potřeboval. 297 00:17:31,440 --> 00:17:34,960 Ale dopadlo to, a jak tento chlapík s Firesheep z super clear, 298 00:17:34,960 --> 00:17:37,920 Když se kluci, kteří jsou v současné době na Facebooku teď - 299 00:17:37,920 --> 00:17:39,880 Ze zvědavosti, uvidíme, jestli budete Přiznáme se. 300 00:17:39,880 --> 00:17:42,620 Pokud jste na Facebooku teď v některých kartě, i když to není na popředí, 301 00:17:42,620 --> 00:17:46,610 je vaše URL HTTP nebo HTTPS? 302 00:17:46,610 --> 00:17:50,560 [Více] Studenti S. S? [Smích] 303 00:17:50,560 --> 00:17:55,510 Dobře. Jakékoliv HTTP? Jen 1? Dobře. 304 00:17:55,510 --> 00:17:58,940 Takže každý z nás může zaseknout ten chlap je Facebook účtu právě teď. 305 00:17:58,940 --> 00:18:04,100 Z velké části se to stalo ve výchozím nastavení zapnutá, alespoň v některých internetových stránkách. 306 00:18:04,100 --> 00:18:08,120 A dlouhý příběh krátký, pokud váš webový provoz není šifrována, 307 00:18:08,120 --> 00:18:12,960 Nejen, že HTML jít tam a zpět přes WiFis nešifrované, 308 00:18:12,960 --> 00:18:16,760 takže věci jako cookies, jděte tam a zpět po celém vzduchu 309 00:18:16,760 --> 00:18:18,940 bez jakékoli formy šifrování. 310 00:18:18,940 --> 00:18:23,540 Takže pokud máte jen trochu programování znalostmi nebo udělat něco Googling dovedností 311 00:18:23,540 --> 00:18:27,410 najít volné software, který to dělá, vše, co musíte udělat, je sedět v Starbucks 312 00:18:27,410 --> 00:18:30,680 nebo sedět na letišti, kde je obecně nešifrované WiFi 313 00:18:30,680 --> 00:18:36,070 a jen sledovat klíčová slova, jako Set-Cookie: PHPSESSID nebo 314 00:18:36,070 --> 00:18:39,300 protože pokud máte technický důvtipný jen dívat WiFi 315 00:18:39,300 --> 00:18:43,010 pro všechny bity, které proudí v celém vzduchu pro tento vzorek, 316 00:18:43,010 --> 00:18:50,840 pak můžete říct, že ten chlap je PHPSESSID se stane, že bo8dal a tak dále. 317 00:18:50,840 --> 00:18:53,890 A pak znovu, pokud jste dostatečně technicky zdatné, nebo mají ten správný nástroj, 318 00:18:53,890 --> 00:18:58,890 pak můžete jen překonfigurovat svůj prohlížeč, kdo prezentaci, aby příruční razítko 319 00:18:58,890 --> 00:19:05,030 na Facebook.com, a Facebook je jen tak předpokládat, že jste ten chlap 320 00:19:05,030 --> 00:19:09,880 protože všechno, co vím, je, není, kdo jste, ale že máte tento jedinečný identifikátor. 321 00:19:09,880 --> 00:19:14,650 Takže pokud budete krást, že jedinečný identifikátor a předložit jej na webový server, jako vaše vlastní, 322 00:19:14,650 --> 00:19:16,860 že se právě chystá ukázat vám, že osoby novinek 323 00:19:16,860 --> 00:19:18,980 nebo taková osoba tyto zprávy nebo tropí. 324 00:19:18,980 --> 00:19:23,190 >> A já bych Google nyní, jak aktivovat HTTPS pro Facebook možná. 325 00:19:23,190 --> 00:19:25,150 Ale je to opravdu tak jednoduché. 326 00:19:25,150 --> 00:19:27,660 A tak Facebook a Google a podobné dostali opravdu dobrý na to, 327 00:19:27,660 --> 00:19:31,870 ale dávat pozor o to více pro všechny webové stránky, které navštívíte, které nepoužívají protokol HTTP 328 00:19:31,870 --> 00:19:35,020 a mít nějakou citlivých informací o nich, 329 00:19:35,020 --> 00:19:37,490 ať už je to finanční nebo osobní nebo podobně. 330 00:19:37,490 --> 00:19:43,180 Pokud se nejste použití tohoto nástroje můžete dost možná cookie líbí to být velmi snadno ukradena 331 00:19:43,180 --> 00:19:46,270 a pak se propracovali, a to je přesně to, co Firesheep udělal. 332 00:19:46,270 --> 00:19:48,250 Nemusel jsi být programátor. 333 00:19:48,250 --> 00:19:51,680 Vše, co musel udělat, bylo se připojení k internetu, stáhnout bezplatný nástroj, 334 00:19:51,680 --> 00:19:56,490 a co to udělá, je přihlášení se a pak by to ukážu Facebook názvy 335 00:19:56,490 --> 00:20:00,170 ze dne všichni Sanders, v tomto konkrétním demonstrace, kolem vás 336 00:20:00,170 --> 00:20:03,260 a vše, co musel udělat, bylo klikněte na jméno a software automatizovaný proces 337 00:20:03,260 --> 00:20:05,970 z šňupání, že cookie a předložila ji Facebooku jako své vlastní, 338 00:20:05,970 --> 00:20:07,990 a voila, jste přihlášeni 339 00:20:07,990 --> 00:20:11,190 Tak tohle je další z těch "nedělej to" oficiálně. 340 00:20:11,190 --> 00:20:14,660 Pokud máte vlastní domácí síť a chcete pohrát, všemi prostředky, 341 00:20:14,660 --> 00:20:17,530 ale uvědomte si, to dělá přes čáru na univerzitním prostředí. 342 00:20:17,530 --> 00:20:20,030 >> Ale cílem je zde opravdu zdůraznit to, jak to udělat 343 00:20:20,030 --> 00:20:22,320 ale jak se bránit proti těmto druhům věcí. 344 00:20:22,320 --> 00:20:26,180 A triviální řešení zde, i když to samo o sobě je vadný, 345 00:20:26,180 --> 00:20:31,360 je opravdu snížit používání jiných stránek, které nejsou pomocí HTTPS neustále. 346 00:20:31,360 --> 00:20:34,520 Takže lokalit, jako je Facebook a Google mají stále políčka 347 00:20:34,520 --> 00:20:36,200 kde se můžete přihlásit do takovéhle věci, 348 00:20:36,200 --> 00:20:40,000 a měly banky let se o to z obdobných důvodů. 349 00:20:40,000 --> 00:20:43,580 Takže jen tak trochu strach faktorem, pokud můžeme. Ale to je to v kostce. 350 00:20:43,580 --> 00:20:46,420 To je, jak server, pamatuje, kdo jste. 351 00:20:46,420 --> 00:20:50,760 A jakmile si vzpomenout, kdo jste, můžete si vzpomenout na něco o vás 352 00:20:50,760 --> 00:20:56,140 že programátor má uloženy uvnitř tohoto zvláštního superglobal názvem $ _SESSION. 353 00:20:56,140 --> 00:20:59,750 A pro PSet 7 jsme používat triviálně jen pamatovat si int, 354 00:20:59,750 --> 00:21:02,260 totiž jedinečné ID uživatele, který se přihlásil, 355 00:21:02,260 --> 00:21:05,880 takže víme, že jsem tam byl předtím. 356 00:21:05,880 --> 00:21:12,450 Jakékoliv dotazy pak na zasedání nebo sušenky nebo jako? 357 00:21:12,450 --> 00:21:15,130 Firesheep nefunguje tak dobře už, 358 00:21:15,130 --> 00:21:18,310 a vy budete muset dát počítač do zvláštního promiskuitním režimu 359 00:21:18,310 --> 00:21:20,700 takže jste vlastně posloucháte za provoz vedle sebe. 360 00:21:20,700 --> 00:21:23,940 Takže pokud jste v současné době stahování Firesheep, uvědomit, že to není zas až tak jednoduché 361 00:21:23,940 --> 00:21:26,850 jak to kdysi bylo prokázat. 362 00:21:26,850 --> 00:21:29,070 Dobrá. A nedělají to v Sanderse. To udělat doma. 363 00:21:29,070 --> 00:21:30,890 Databáze. 364 00:21:30,890 --> 00:21:33,580 Jedna z věcí, které jsme udělali v PSet 7 velmi uváženě 365 00:21:33,580 --> 00:21:37,780 byla bychom vám ukázkovou databázi tabulku pro uživatele, který má některá uživatelská ID, 366 00:21:37,780 --> 00:21:41,020 Některé uživatelská jména, a některé zašifrované hesla v něm. 367 00:21:41,020 --> 00:21:44,520 A jak uvidíte, pokud jste tak již neučinili, budete muset změnit v tabulce trochu. 368 00:21:44,520 --> 00:21:47,710 Budeš muset přidat nějaké cache každého uživatele v této tabulce, 369 00:21:47,710 --> 00:21:51,130 a budete muset přidat další tabulky historie, portfolia stůl, 370 00:21:51,130 --> 00:21:53,310 nebo snad říkat něco jiného. 371 00:21:53,310 --> 00:21:56,740 Ale pokud jde o přemýšlení o tom, jak to udělat, pojďme otevřít tento nástroj 372 00:21:56,740 --> 00:22:00,570 které jsme použili v pátek, ale pokud neznámé, přístroj je dodáván s nástrojem 373 00:22:00,570 --> 00:22:04,680 tzv. phpMyAdmin, který je shodou okolností napsaný v PHP, 374 00:22:04,680 --> 00:22:07,950 ale jeho účel v životě, co jsem se přihlásit zde jharvard s karmínové, 375 00:22:07,950 --> 00:22:15,160 je mi uživatelsky přívětivý způsob prohlížení a změnit svůj databázi. 376 00:22:15,160 --> 00:22:18,040 >> Databáze, která Běžím na zařízení se nazývá MySQL. 377 00:22:18,040 --> 00:22:23,420 To je velmi populární, a to je svobodný open source databáze, která je nádherně snadné použití, 378 00:22:23,420 --> 00:22:25,620 zejména s předním končí takhle. 379 00:22:25,620 --> 00:22:29,350 Co tento nástroj umožňuje, abych to udělal, například, je poke kolem stolu. 380 00:22:29,350 --> 00:22:30,890 Nech mě jít dál a dělat to. 381 00:22:30,890 --> 00:22:36,580 V pátek jsme vytvořili tabulku s názvem Studenti, kteří bylo super jednoduchý. 382 00:22:36,580 --> 00:22:41,680 Měl 3 sloupce - id, jméno, e-maily a - a já ručně vložil pár řádků 383 00:22:41,680 --> 00:22:44,420 jako David a Mike v tomto konkrétním případě. 384 00:22:44,420 --> 00:22:47,290 Pojďme si to trochu dále, a předpokládejme, že chceme pamatovat více 385 00:22:47,290 --> 00:22:49,660 než jen jméno a e-mail o uživateli. 386 00:22:49,660 --> 00:22:53,090 Dovolte mi, abych klikněte struktura tady nahoře. 387 00:22:53,090 --> 00:22:55,440 A opět, Pset vás provede potřebnými kroky zde, 388 00:22:55,440 --> 00:22:58,150 takže se nemusíte obávat, pokud něco z toho je trochu rychlé. 389 00:22:58,150 --> 00:22:59,690 Pak budu klikněte na zde. 390 00:22:59,690 --> 00:23:02,270 Chystám se přidat nějaké počet sloupců po e-mailu 391 00:23:02,270 --> 00:23:04,130 protože chci přidat něco jako dům. 392 00:23:04,130 --> 00:23:06,640 Zapomněl jsem nahrávat studenta domu. 393 00:23:06,640 --> 00:23:11,400 Dovolte mi, abych klepněte na tlačítko Přejít, a nyní máme tento formulář, který bohužel je trochu zeširoka zleva doprava, 394 00:23:11,400 --> 00:23:13,710 ale budu volat název tohoto pole domu, 395 00:23:13,710 --> 00:23:16,050 a pak typu I nyní vybrat. 396 00:23:16,050 --> 00:23:18,870 Takže pojďme se stručně promluvit o různých typech v MySQL 397 00:23:18,870 --> 00:23:24,590 protože vzhledem k tomu, PHP je slabě typovaný a tak nějak hraje velmi jednoduché a volné s typy, 398 00:23:24,590 --> 00:23:29,430 v databázi, zejména, že je to super důležité, aby skutečně používat psaní ve svůj prospěch 399 00:23:29,430 --> 00:23:33,260 protože jedna z věcí, MySQL a další databáze motorů může udělat pro vás 400 00:23:33,260 --> 00:23:37,910 je zajistit, aby nechcete dát falešné údaje do databáze. 401 00:23:37,910 --> 00:23:41,850 To je jakási volná kontroly chyb k dispozici. 402 00:23:41,850 --> 00:23:46,250 >> Pro domu jsme samozřejmě nechceme, aby to bylo int, což je 32-bitová hodnota v MySQL. 403 00:23:46,250 --> 00:23:49,810 Udělali jsme krátce pohovořil v pátek o varchar, což je zkratka pro proměnnou délkou char. 404 00:23:49,810 --> 00:23:54,720 Co je to? To vám umožní určit, že chcete to být řetězec nějakého druhu. 405 00:23:54,720 --> 00:23:56,840 Nemáte opravdu věděli předem, jak dlouho to je, 406 00:23:56,840 --> 00:24:00,100 takže budeme libovolně říci, dům Název může mít 255 znaků, 407 00:24:00,100 --> 00:24:04,190 ale mohli jste jít s 32, 64 - libovolný počet skutečně. 408 00:24:04,190 --> 00:24:10,700 Ale výhodou použití varchar přes pole s názvem char je to, co? 409 00:24:10,700 --> 00:24:15,110 Jen intuitivně, když přejděte sem, zjistíte, že je to char a tam je varchar. 410 00:24:15,110 --> 00:24:19,520 Varchar je proměnná délka char; char je pevné délky char. 411 00:24:19,520 --> 00:24:24,730 Takže pouze na základě této definice, co je výhoda nebo nevýhoda každé z nich? 412 00:24:24,730 --> 00:24:30,490 Jinými slovy, kdo se zajímá o rozlišování, nebo proč by vám záleží? 413 00:24:31,660 --> 00:24:35,750 >> Jo. [Student] Varchar má větší flexibilitu, ale zabere více paměti. 414 00:24:35,750 --> 00:24:40,730 Dobré. Varchar zabírá více - Pojďme se podívat,. Nejsem si jistý, jestli jsem slyšel toto právo. 415 00:24:40,730 --> 00:24:42,360 Můžete říct, že ještě jednou? 416 00:24:42,360 --> 00:24:45,850 [Student] Řekl jsem varchar má pravděpodobně větší flexibilitu, ale zabere více paměti. 417 00:24:45,850 --> 00:24:51,170 Zajímavé. Dobře. Varchar pravděpodobně vám dává větší flexibilitu, ale zabere více paměti. 418 00:24:51,170 --> 00:24:53,220 Ten nemusí být nutně pravda. 419 00:24:53,220 --> 00:24:56,290 Záleží na kontextu, ale pojďme se vrátit k tomu. 420 00:24:56,290 --> 00:25:03,230 >> [Neslyšitelné Student odpověď] Přesně tak. 421 00:25:03,230 --> 00:25:06,900 Je to vlastně případ, že char bude obvykle využívají více paměti 422 00:25:06,900 --> 00:25:10,950 protože char, stejně jako v C, je jako řetězec, je to pole znaků. 423 00:25:10,950 --> 00:25:13,690 Takže pokud řeknete char pole délky 255, 424 00:25:13,690 --> 00:25:16,910 Databáze je doslova bude vám 255 znaků. 425 00:25:16,910 --> 00:25:22,290 A pokud dům skončí být Mather a 6 znaků celkem, 426 00:25:22,290 --> 00:25:25,090 ztrácíte nad 200 znaků. 427 00:25:25,090 --> 00:25:29,640 >> Takže varchar efektivně používá pouze tolik znaků, jak je nezbytné 428 00:25:29,640 --> 00:25:31,590 až do maximální částky. 429 00:25:31,590 --> 00:25:35,470 Ale cena, kterou zaplatíte, je skutečně výkon, potenciálně. 430 00:25:35,470 --> 00:25:39,740 Pokud předem víte, že všechny vaše řetězců se bude 8 znaků - 431 00:25:39,740 --> 00:25:43,090 Například předpokládejme, že budete potřebovat hesla délky 8 - 432 00:25:43,090 --> 00:25:47,350 vzhůru použití char pole na příležitosti, i když ne často, 433 00:25:47,350 --> 00:25:51,100 je stanovit pevnou délku něco jako heslo 434 00:25:51,100 --> 00:25:53,300 protože nyní databáze může být ještě chytřejší. 435 00:25:53,300 --> 00:25:58,160 Pokud se ví, že každý char pole, každý řetězec ve sloupci je stejné délky, 436 00:25:58,160 --> 00:26:00,780 dostanete zpět funkci náhodného přístupu. 437 00:26:00,780 --> 00:26:05,110 Můžete skákat kolem mezi různými znakovými oblastech v databázové tabulce 438 00:26:05,110 --> 00:26:07,940 protože si v databázi jako řádcích a sloupcích. 439 00:26:07,940 --> 00:26:11,670 Takže pokud každý z řetězců je stejné délky, 440 00:26:11,670 --> 00:26:17,820 víte, že první z nich je na bajtu 0, další je na bajtu 8 441 00:26:17,820 --> 00:26:20,240 a pak 16 a pak 24 a tak dále. 442 00:26:20,240 --> 00:26:24,500 Takže pokud jsou všechny řetězce jsou stejné délky, můžete skákat kolem mnohem efektivněji. 443 00:26:24,500 --> 00:26:26,710 Tak, že může být výhodou, pokud jde o výkon, 444 00:26:26,710 --> 00:26:29,420 ale obvykle nemáte luxus ví předem, 445 00:26:29,420 --> 00:26:32,170 takže varchar je způsob, jak jít. 446 00:26:32,170 --> 00:26:36,030 Tady je další detail, že i Facebook běžel do nakonec. 447 00:26:36,030 --> 00:26:39,670 Ints jsou skvělé, a jsme trochu používat je ve výchozím nastavení kdykoliv chceme číslo, 448 00:26:39,670 --> 00:26:41,750 ale je to jen 32 bitů. 449 00:26:41,750 --> 00:26:46,210 >> A i když Facebook není úplně mít 4000000000 uživatelů nyní, 450 00:26:46,210 --> 00:26:48,680 tam určitě někteří lidé tam venku s více účty 451 00:26:48,680 --> 00:26:50,960 nebo účty, které byly otevřeny, a pak zavřela, 452 00:26:50,960 --> 00:26:55,130 a tak Facebook sám jsem přesvědčen, že před několika lety musela přechodu z int 453 00:26:55,130 --> 00:27:00,010 na, jak je výstižně nazývá, bigint, která je jen 64 bitů místo. 454 00:27:00,010 --> 00:27:02,230 Takže i to je konstrukční rozhodnutí. 455 00:27:02,230 --> 00:27:06,570 Ty by se úžasně štěstí, když vaše poslední projekt změní startup, 456 00:27:06,570 --> 00:27:10,010 má 4 miliardy 1 uživatelé, dávat nebo brát, 457 00:27:10,010 --> 00:27:13,200 v takovém případě použití Ints může být poněkud krátkozraké. 458 00:27:13,200 --> 00:27:16,230 Ale ve skutečnosti, váš uživatelé tabulka je pravděpodobně v pořádku s ints. 459 00:27:16,230 --> 00:27:19,340 Ale na něco takového PSet 7, jako je vaše tabulky historie, 460 00:27:19,340 --> 00:27:23,700 můžete mít tisíce, miliony uživatelů, pokud se vyvíjejí do etrade.com. 461 00:27:23,700 --> 00:27:26,020 Takže vzhledem k tomu, možná nemáte více než 4 miliardy uživatelů, 462 00:27:26,020 --> 00:27:30,070 tito uživatelé máte může mít více než 4 miliard transakcí v průběhu času - 463 00:27:30,070 --> 00:27:33,200 nakupuje a prodává, a věci v jejich historii. 464 00:27:33,200 --> 00:27:38,090 Takže pokud si předvídat - opět se jedná o správnou problémy mají, pokud máte to mnohem údaje - 465 00:27:38,090 --> 00:27:40,920 pokud si předvídat dat přesahující velikost int, 466 00:27:40,920 --> 00:27:47,740 jít s něčím, jako je bigint je směr není dost často přijata designérů 467 00:27:47,740 --> 00:27:49,710 protože lidé postava, která se nebude problém, 468 00:27:49,710 --> 00:27:51,930 ale je to tak snadné vybrat něco větší, než je. 469 00:27:51,930 --> 00:27:55,380 Desetinná jsme použili v PSet 7, který stanoví pevnou přesnost 470 00:27:55,380 --> 00:27:59,840 takže se můžete vyhnout problémy týkající se plováky a dvoulůžkových a reals a podobně. 471 00:27:59,840 --> 00:28:02,440 >> A pak je tu několik dalších oborů zde. Budeme mávat rukama na ně do jisté míry. 472 00:28:02,440 --> 00:28:07,270 Ale data, časy mají předepsaný formát v MySQL, 473 00:28:07,270 --> 00:28:10,830 a výhodou ukládání dat jako data a ne varchars 474 00:28:10,830 --> 00:28:15,730 Znamená to, že databáze je skutečně přeformátovat je do různých formátů, 475 00:28:15,730 --> 00:28:18,800 zda je formát USA nebo evropský formát nebo jako - však budete chtít - 476 00:28:18,800 --> 00:28:22,700 mnohem efektivněji, než kdyby to byl jen nějaký obecný varchar. 477 00:28:22,700 --> 00:28:25,150 A pak je tu nějaký jiný binární, varbinary, kuličky. 478 00:28:25,150 --> 00:28:28,580 Jedná se o binární velké objekty, a můžete také uložit binární data 479 00:28:28,580 --> 00:28:30,750 stejně jako geometrických dat v databázi. 480 00:28:30,750 --> 00:28:34,350 Ale pro nás budeme obvykle záleží ints a varchars a jako. 481 00:28:34,350 --> 00:28:36,230 Pojďme dokončit tento příklad s domem. 482 00:28:36,230 --> 00:28:40,030 Dům Budu libovolně říci bude 255 znaků. 483 00:28:40,030 --> 00:28:42,850 Pak výchozí hodnota, kterou mohl udělat. 484 00:28:42,850 --> 00:28:47,440 Mohli bychom ve výchozím nastavení aby všichni v Mather domě, například. 485 00:28:47,440 --> 00:28:49,710 To je, jak můžeme určit, že databáze 486 00:28:49,710 --> 00:28:52,460 by měly zajistit, že někdo má vždy hodnotu. Ale nechám to být. 487 00:28:52,460 --> 00:28:55,270 Ve skutečnosti, pro lidi, kteří žijí mimo kampus, a ne v domě, 488 00:28:55,270 --> 00:28:59,590 možná jsem vlastně chcete určit, že výchozí hodnota pro dům je NULL, 489 00:28:59,590 --> 00:29:04,890 a pak jsem třeba zaškrtnout a řekněte databáze je to v pořádku, pokud uživatel dům je NULL. 490 00:29:04,890 --> 00:29:07,270 >> I v tomto případě je další obranný mechanismus můžete zavést 491 00:29:07,270 --> 00:29:10,590 takže ani nemusíte dát ji do svého PHP kódu nutně. 492 00:29:10,590 --> 00:29:14,630 Databáze bude zajištěno, že věci jsou, nebo nejsou NULL. 493 00:29:14,630 --> 00:29:17,310 A pak konečně, Atributy. 494 00:29:17,310 --> 00:29:18,920 Žádný z nich jsou opravdu důležité. 495 00:29:18,920 --> 00:29:22,880 Binární, nesignováno - žádná z nich jsou relevantní pro varchar. 496 00:29:22,880 --> 00:29:24,220 Index. 497 00:29:24,220 --> 00:29:27,320 Ví někdo, nebo si pamatovat, nebo mají hádat o tom, co index 498 00:29:27,320 --> 00:29:29,510 něco jako dům? 499 00:29:29,510 --> 00:29:35,240 I to je vlastně důležité a poměrně snadno konstrukční rozhodnutí. 500 00:29:35,240 --> 00:29:39,200 Pro ty, kteří ještě neviděli, v pátek jsme hovořili krátce o primárních klíčů. 501 00:29:39,200 --> 00:29:43,240 V databázové tabulky, primární klíč je pole nebo sloupce 502 00:29:43,240 --> 00:29:46,270 , který jednoznačně identifikuje řádků v tabulce. 503 00:29:46,270 --> 00:29:49,150 Takže v aktuální tabulce máme ID, máme jména a e-maily. 504 00:29:49,150 --> 00:29:52,050 Který z nich je nejlepším kandidátem být primární klíč, 505 00:29:52,050 --> 00:29:55,810 jehož úkolem je jednoznačně identifikovat řádky? 506 00:29:55,810 --> 00:29:57,530 Pravděpodobně ID. 507 00:29:57,530 --> 00:29:59,930 Pravděpodobně bychom mohli také použít to, co když? 508 00:29:59,930 --> 00:30:02,860 Možná bys mohl použít e-mail, protože v teorii, že je to jedinečná 509 00:30:02,860 --> 00:30:05,380 pokud lidé sdílejí e-mailových účtů. 510 00:30:05,380 --> 00:30:09,980 Skutečnost je však taková, že pokud používáte číselné ID, jako 1234, 511 00:30:09,980 --> 00:30:14,170 to je jen 32 bitů, zatímco e-mailová adresa může být tento mnoho bytů nebo tento mnoho bytů. 512 00:30:14,170 --> 00:30:16,610 Takže pokud jde o účinnost jednoznačných identifikačních kódů, 513 00:30:16,610 --> 00:30:19,270 to bývá dobrým zvykem stačí použít int 514 00:30:19,270 --> 00:30:23,090 i když máte nějaký řetězec kandidáta, který byste mohli pravděpodobně používat. 515 00:30:23,090 --> 00:30:26,760 >> Pro něco jako dům, nemělo by to být primární klíč 516 00:30:26,760 --> 00:30:30,770 protože pak pouze 1 osoba mohla žít v Mather a 1 osoba v Currier a podobně. 517 00:30:30,770 --> 00:30:32,790 Stejně by to nemělo být jedinečné. 518 00:30:32,790 --> 00:30:37,830 Rozdíl mezi primární a unikátní je, že v případě, že si aktuální tabulky 519 00:30:37,830 --> 00:30:42,620 ID by být primární, ale e-mail není primární z důvodu jsme právě zmínil - 520 00:30:42,620 --> 00:30:44,740 výkon - ale to by mělo být stále jedinečný. 521 00:30:44,740 --> 00:30:47,200 Takže můžete stále vynutit jedinečnost, aniž by nárok 522 00:30:47,200 --> 00:30:49,520 že je to super důležité primární pole. 523 00:30:49,520 --> 00:30:52,610 Ale tohle je docela užitečné: Index. 524 00:30:52,610 --> 00:30:56,180 Pokud víte předem za Vaši závěrečného projektu, pro PSet 7, nebo obecně, 525 00:30:56,180 --> 00:30:59,480 že toto pole dům se bude něco, co hledat na pozemku 526 00:30:59,480 --> 00:31:01,910 pomocí select klíčového slova, nebo něco jiného, 527 00:31:01,910 --> 00:31:05,180 pak můžete preventivně říct databáze do práce své kouzlo 528 00:31:05,180 --> 00:31:10,510 a ujistěte se, že vytvoří v paměti žádné efektní datové struktury nezbytné 529 00:31:10,510 --> 00:31:13,770 urychlení vyhledávání založené na domě. 530 00:31:13,770 --> 00:31:17,860 Možná to bude používat hash tabulku, možná to bude používat propojeného seznamu. 531 00:31:17,860 --> 00:31:21,260 Ve skutečnosti, to inklinuje používat strom, často struktura se nazývá B-strom - 532 00:31:21,260 --> 00:31:24,090 není binární strom, ale B-strom - což je velmi široký strom 533 00:31:24,090 --> 00:31:27,370 které jste mohli vidět ve třídě, jako CS124, datové struktury třídy. 534 00:31:27,370 --> 00:31:31,800 Ale v krátké, nemusíte se bát, že při použití inteligentní databázového softwaru. 535 00:31:31,800 --> 00:31:35,890 Stačí si jen říct to, "Index toto pole, takže můžu vyhledávat na něj efektivněji." 536 00:31:35,890 --> 00:31:40,250 >> Necháte-li toto vypnete a pokusíte se hledat pro každého v databázi, která žije v Mather, 537 00:31:40,250 --> 00:31:42,710 bude přešla do lineární hledání. 538 00:31:42,710 --> 00:31:45,360 A pokud máš 6000 undergrads všechny žijící v nějakém domě, 539 00:31:45,360 --> 00:31:47,900 budete prohledávat celou tabulku najít Matherites, 540 00:31:47,900 --> 00:31:52,190 vzhledem k tomu, když řeknete Index, doufejme, že to bude něco podobného na logaritmické vyhledávání 541 00:31:52,190 --> 00:31:54,510 najít ty druhy studentů. 542 00:31:54,510 --> 00:31:56,750 To je jen funkcionalita zdarma zapnout, 543 00:31:56,750 --> 00:31:59,530 i když to přijde za cenu nějakého množství prostoru. 544 00:31:59,530 --> 00:32:02,690 Konečně, auto-increment, toto pole AI, 545 00:32:02,690 --> 00:32:05,830 který jen znamená, že pokud je to int, a nechcete se starat, aby zvýšit sami 546 00:32:05,830 --> 00:32:07,570 pokaždé, když je nový uživatel, zkontrolujte, zda, 547 00:32:07,570 --> 00:32:11,910 a každý uživatel, který se vkládá automaticky získá nové ID. 548 00:32:11,910 --> 00:32:15,620 Pojďme klepněte na tlačítko Uložit, a teď pojďme najít chybu s tímto designem. 549 00:32:15,620 --> 00:32:20,200 Pokud bych jít do Procházet, upozornění, že jak Mike a můj dům je NULL. 550 00:32:20,200 --> 00:32:22,420 Mohu použít phpMyAdmin editovat ručně. 551 00:32:22,420 --> 00:32:25,110 Můžu jít sem a zadejte Mather a stiskněte Enter, 552 00:32:25,110 --> 00:32:27,740 a nyní všimnete tabulky se liší. 553 00:32:27,740 --> 00:32:29,270 Ale nevšiml jsem mohl dělat něco jiného stejně. 554 00:32:29,270 --> 00:32:33,530 Davidova ID je 1, takže phpMyAdmin je opět jen administrativní nástroj; 555 00:32:33,530 --> 00:32:35,970 to není něco, co vaši uživatelé vůbec bude vidět. 556 00:32:35,970 --> 00:32:38,810 Takže když jsem místo toho klikněte na kartě SQL up horní - 557 00:32:38,810 --> 00:32:41,450 a znovu, bude Pset 7 představí vám více z těchto dotazů - 558 00:32:41,450 --> 00:32:45,260 Mohu ručně spustit SQL Structured Query Language příkaz 559 00:32:45,260 --> 00:32:56,410 UPDATE uživatelé SET dům = 'PfoHo' WHERE id = 1. 560 00:32:56,410 --> 00:33:00,830 Tyto SQL dotazy jsou pěkně dost, dost čitelné zleva doprava. 561 00:33:00,830 --> 00:33:04,350 Aktualizace tabulky uživatelů, nastavte pole s názvem dům PfoHo 562 00:33:04,350 --> 00:33:06,830 kde ID uživatele je 1. 563 00:33:06,830 --> 00:33:11,480 Nebo bych mohl udělat i kde email = 'malan@harvard.edu'. 564 00:33:11,480 --> 00:33:14,860 Tak dlouho, jak který jednoznačně identifikuje mě, to by mohlo fungovat stejně. 565 00:33:14,860 --> 00:33:18,810 Ale ID inklinuje být vyšší výkon, tak se pojďme udělat. 566 00:33:18,810 --> 00:33:22,950 Pojďme klepněte na tlačítko Přejít. Dobře, lecture.users neexistuje. Jaký je můj chyba? 567 00:33:22,950 --> 00:33:26,220 Co je to vlastně tabulka zde nazývají? 568 00:33:26,220 --> 00:33:28,770 Říká se studenti jen proto, že je to to, co jsme udělali tady vlevo nahoře. 569 00:33:28,770 --> 00:33:31,860 Říká se tomu studenti, ne uživatelů. Takže klikněte na tlačítko Přejít teď. 570 00:33:31,860 --> 00:33:34,330 1 řádek ovlivněny. Dotaz trvalo 0.01 sekund. 571 00:33:34,330 --> 00:33:38,010 Kdybych klepněte na tlačítko Procházet teď, teď Malan žije v PfoHo. 572 00:33:38,010 --> 00:33:42,070 Takže to je další chuť SQL, ale Pset vás provede trochu víc. 573 00:33:42,070 --> 00:33:44,710 >> Tam je hloupá rozhodnutí, už jsem tady. 574 00:33:44,710 --> 00:33:47,820 Řekl bych, že tato databáze design je neefektivní 575 00:33:47,820 --> 00:33:51,650 protože čím více lidí, které jsem přidat do tabulky Studenti, 576 00:33:51,650 --> 00:33:54,730 více z nás začnu přidávat, více TFS jsem začít přidávat, 577 00:33:54,730 --> 00:33:58,320 budeme začít vidět, co propouštění v této tabulce? 578 00:34:00,840 --> 00:34:06,020 >> Jo. [Student] Když viděl, že je to u studentů, jsme použili stejný [neslyšitelné] 579 00:34:06,020 --> 00:34:07,360 Totéž - Right, přesně. 580 00:34:07,360 --> 00:34:10,400 Takže pokud 400 lidí žije v Mather, dávat nebo brát, 581 00:34:10,400 --> 00:34:15,000 nakonec tato tabulka bude mít 400 řádky, které říkají, že "Mather," "Mather," 582 00:34:15,000 --> 00:34:16,590 "Mather," "Mather," "Mather." 583 00:34:16,590 --> 00:34:19,820 Ztrácíme všech těchto bytů, a je tu pár takeaways tam. 584 00:34:19,820 --> 00:34:23,080 1, je tu šílený koutek případ, kdy pokud někdo zaplatí hodně peněz 585 00:34:23,080 --> 00:34:25,949 a přejmenovává Mather, nyní musíme změnit celý náš databázové tabulky. 586 00:34:25,949 --> 00:34:29,730 To se to nestane často, ačkoli PfoHo bylo jednou nazvané North dům před 15 lety, 587 00:34:29,730 --> 00:34:32,310 tak se to stane. Ale to není všechno, že přesvědčivé. 588 00:34:32,310 --> 00:34:36,000 Přesvědčivější než rohovou případě, jako je to potřebují aktualizovat data ve velkém 589 00:34:36,000 --> 00:34:41,150 pro databázi je důvod, proč jste skladování Mather znovu a znovu a znovu a znovu? 590 00:34:41,150 --> 00:34:43,020 To je hodně znaků, 6 znaků. 591 00:34:43,020 --> 00:34:45,500 Nemůžeme dělat ještě lépe, než to, že zejména pro Pforzheimer? 592 00:34:45,500 --> 00:34:48,320 Jistě můžeme dělat lépe, než že mnoho znaků. 593 00:34:48,320 --> 00:34:51,790 Proč ne jen přiřadit jedinečný identifikátor s každým domem 594 00:34:51,790 --> 00:34:55,020 a obchod, který pro každého uživatele? Tak pojďme to zkusit. 595 00:34:55,020 --> 00:35:00,610 Spíše než jen používat studenti tabulku, nechte mě jít do mé přednášky databázi tady vlevo nahoře. 596 00:35:00,610 --> 00:35:02,600 Všimněte si, že říká, že vytvořit tabulku. 597 00:35:02,600 --> 00:35:04,550 Dovolte mi, abych vytvořit novou tabulku s názvem domů. 598 00:35:04,550 --> 00:35:08,880 Počet sloupců bude 2. Enter. 599 00:35:08,880 --> 00:35:11,200 Teď mám 2 pole. 600 00:35:11,200 --> 00:35:14,600 Jdu volat toto jméno, a to bude varchar délky 255, 601 00:35:14,600 --> 00:35:18,770 >> ale to je docela svévolné. Dovolte mi, abych to tady konvencí. 602 00:35:18,770 --> 00:35:22,840 Takže dát ID sem. Dejme každý dům jedinečný identifikátor. 603 00:35:22,840 --> 00:35:25,360 Dejme každého domu jméno. 604 00:35:25,360 --> 00:35:30,980 Pojďme upřesnit, že identifikátor bude unsigned jen podle konvence používat pouze kladná čísla. 605 00:35:30,980 --> 00:35:35,020 Pojďme dál a dát to auto-inkrementace pole pro teď. 606 00:35:35,020 --> 00:35:38,160 A my potřebujeme něco jiného? 607 00:35:38,160 --> 00:35:41,010 Pojďme dál a klepněte na tlačítko Uložit. 608 00:35:41,010 --> 00:35:42,480 Teď mám druhou tabulku. 609 00:35:42,480 --> 00:35:45,860 Všimněte si, jak je stranou to je trochu záhadné SQL příkaz 610 00:35:45,860 --> 00:35:50,280 že byste museli zadat ručně, pokud nepoužíváte, nástroje pro správu, jako je phpMyAdmin. 611 00:35:50,280 --> 00:35:51,990 Takže další důvod, proč je užíváme. 612 00:35:51,990 --> 00:35:55,480 Je to nádherně užitečné druh pedagogicky, protože můžete klikněte kolem 613 00:35:55,480 --> 00:36:01,050 a zjistit, jak věci fungují, jen o kopírování a vkládání, co phpMyAdmin udělal. 614 00:36:01,050 --> 00:36:04,150 Ale tabulka Vytvořit příkaz je to, co se právě vykonán, a tady je můj stůl. 615 00:36:04,150 --> 00:36:11,370 Nech mě jít napřed se a využívejte syrové SQL, spíše než zjednodušovat klepnutím na kartu Vložení. 616 00:36:11,370 --> 00:36:15,040 Dovolte mi, abych se INSERT INTO domů, 617 00:36:15,040 --> 00:36:22,230 a já řeknu jméno domu bude mít hodnotu "Mather". 618 00:36:22,230 --> 00:36:24,790 To je všechno. Tato syntaxe je trochu záhadný. 619 00:36:24,790 --> 00:36:26,660 To je název pole, které chceme vložit. 620 00:36:26,660 --> 00:36:30,390 Jsou to hodnoty, které chcete vložit do těchto polí. Dovolte mi, abych klepněte na tlačítko Přejít. 621 00:36:30,390 --> 00:36:34,410 1 vkládá řádek trvalo 0.02 sekund. Dovolte mi, abych na tlačítko Procházet teď. 622 00:36:34,410 --> 00:36:42,020 >> Všimněte si, když jsem klepněte na tlačítko Procházet, tam je Mather, jehož ID je prostřednictvím automatizace číslo 1. 623 00:36:42,020 --> 00:36:45,000 Dovolte mi, abych to ještě jednu. Nech mě jít do záložce SQL. 624 00:36:45,000 --> 00:36:52,950 INSERT INTO domů. Název domu bude mít hodnotu PfoHo a tak dále. 625 00:36:52,950 --> 00:36:56,350 Přejít. A můžu to dělat znovu a znovu a znovu. 626 00:36:56,350 --> 00:36:59,470 Nebo pokud jste nudit pomocí phpMyAdmin, stačí použít kartu Vložení 627 00:36:59,470 --> 00:37:01,000 a nebudou se muset zadat surového SQL. 628 00:37:01,000 --> 00:37:04,690 Stačí si jen bouchnout to rychleji na psacím stroji, například, Currier, Enter, 629 00:37:04,690 --> 00:37:07,610 a teď, když jsme klepněte na tlačítko Procházet, tam je Currier s ID 3 let. 630 00:37:07,610 --> 00:37:09,920 Tak tohle je to, co máme na mysli auto-přírůstku. 631 00:37:09,920 --> 00:37:12,280 Ale teď musíme něco spravit u studentů. 632 00:37:12,280 --> 00:37:16,240 V studenti, co by se datový typ domu pole nyní? 633 00:37:16,240 --> 00:37:19,450 Mělo by být int, ne? 634 00:37:19,450 --> 00:37:23,950 Takže cílem je vytknout, jinak známý jako normalizovat, tabulky 635 00:37:23,950 --> 00:37:27,940 takže nemáme ukládat informace redundantně v některém z mých tabulek. 636 00:37:27,940 --> 00:37:31,130 A opět, cesta my jsme byli na tu se říct Mather, Mather, 637 00:37:31,130 --> 00:37:34,220 Mather, Mather, PfoHo, PfoHo, PfoHo, PfoHo, což je velmi nadbytečná 638 00:37:34,220 --> 00:37:36,240 pokud jde o plýtvání z znaků. 639 00:37:36,240 --> 00:37:40,820 Tak nech mě jít napřed a změnit tím, že kliknutím struktury, 640 00:37:40,820 --> 00:37:44,620 a nech mě jít napřed a zaškrtnout dům pole, klepněte na tlačítko Změnit, 641 00:37:44,620 --> 00:37:46,990 a teď budu měnit to být int. 642 00:37:46,990 --> 00:37:49,490 255 již není relevantní. 643 00:37:49,490 --> 00:37:54,010 Nech mě jít dál a říct, že je to v pořádku, pokud je to ještě NULL. Uložit. 644 00:37:54,010 --> 00:37:55,870 Nyní tabulka studenti byla změněna úspěšně, 645 00:37:55,870 --> 00:37:59,090 a všimněte si, opět dům je int. 646 00:37:59,090 --> 00:38:02,220 Jak stranou, ignorovat číslo v závorkách, pokud jde o ints. 647 00:38:02,220 --> 00:38:03,770 >> To je pro starší důvodů. 648 00:38:03,770 --> 00:38:06,920 Zpět v den, kdy jste neměli GUI, můžete místo toho musel příkazového řádku prostředí, 649 00:38:06,920 --> 00:38:11,580 na 10 a 11 uvedené kolik znaků jste měl ukázat 650 00:38:11,580 --> 00:38:13,950 v terminálovém okně skutečně zobrazit pole. 651 00:38:13,950 --> 00:38:19,150 To nemá nic společného s bitovou délkou skutečného pole, takže prostě budeme ignorovat, že pro tuto chvíli. 652 00:38:19,150 --> 00:38:20,990 Teď musím jít do této tabulky. 653 00:38:20,990 --> 00:38:24,610 A pokud David žije v Mather, by sněmovna neměla být 0, 654 00:38:24,610 --> 00:38:27,350 která je výchozí int hodnota nejblíže NULL. 655 00:38:27,350 --> 00:38:29,810 Měl by žít v domě 1. 656 00:38:29,810 --> 00:38:36,870 Řekněme libovolně říci, že Mike žije v PfoHo, takže dům číslo 2. 657 00:38:36,870 --> 00:38:40,160 Teď můj stůl vypadá trochu záhadný. 658 00:38:40,160 --> 00:38:41,960 Ale zvážit efektivitu. 659 00:38:41,960 --> 00:38:44,860 Já jsem teď s použitím pouze 32 bitů pro identifikaci dům, 660 00:38:44,860 --> 00:38:49,530 což znamená, že je pouze 1 kanonické definice mého domu Mather a PfoHo 661 00:38:49,530 --> 00:38:52,090 a to v domech tabulce. 662 00:38:52,090 --> 00:38:55,880 Takže pokud chci teď vrátit tyto tabulky, myslím, že to tímto způsobem. 663 00:38:55,880 --> 00:39:01,980 Tady mám studenti stůl, a na pravé straně je tu tato čísla, 1 a 2. 664 00:39:01,980 --> 00:39:04,180 1 je Mather, 2 je PfoHo. 665 00:39:04,180 --> 00:39:08,580 Máme ty stejná čísla v této druhé tabulce, která se nazývá domů, 666 00:39:08,580 --> 00:39:11,020 1 a 2, a 3 pro ty 3 domy. 667 00:39:11,020 --> 00:39:14,990 Co teď chceme udělat, je mít možnost v kódu, PHP a SQL, 668 00:39:14,990 --> 00:39:18,800 se trochu vrátit tyto tabulky, kde pokud jsou studenti, a to jsou domy, 669 00:39:18,800 --> 00:39:22,050 chceme nějak zkombinovat tak, že 1 linie s 1, 670 00:39:22,050 --> 00:39:25,670 2 řádky s 2, a tak, abychom mohli zjistit, kde David 671 00:39:25,670 --> 00:39:28,000 a kde Mike a kde všichni ostatní bydlí. 672 00:39:28,000 --> 00:39:31,850 Chcete-li to provést, můžeme provést SQL dotaz podobný následujícímu. 673 00:39:31,850 --> 00:39:40,470 SELECT * FROM studenti JOIN domy ON - 674 00:39:40,470 --> 00:39:43,000 A teď, co pole chceme připojit na? 675 00:39:43,000 --> 00:39:49,520 Takže students.house = houses.id. 676 00:39:49,520 --> 00:39:54,150 >> Trochu záhadné, ale tato část znamená doslova vytvořit novou dočasnou tabulku 677 00:39:54,150 --> 00:39:56,690 to je výsledek spojení studentů a domy. 678 00:39:56,690 --> 00:40:00,340 A jak se chcete spojit špičky mých prstů tady? 679 00:40:00,340 --> 00:40:05,280 Nastavte studentů dům pole rovnou domů "číslo pole. 680 00:40:05,280 --> 00:40:10,220 A když jsem teď klepněte na tlačítko Přejít, vrátím přesně to, co jsem doufal, že se. 681 00:40:10,220 --> 00:40:15,890 David je v Mather, Mike je v PfoHo, a vidím také jedinečné identifikátory. 682 00:40:15,890 --> 00:40:18,640 Ale jde o to, teď mám kompletní tabulku. 683 00:40:18,640 --> 00:40:23,020 A tak takeaway zde pro PSet 7 nebo opravdu pro konečného projektu: 684 00:40:23,020 --> 00:40:25,830 Pokud zjistíte, že jste ukládání každý kus informace redundantně, 685 00:40:25,830 --> 00:40:28,850 ať už je to dům, možná je to město, stát, a ZIP 686 00:40:28,850 --> 00:40:32,050 kde ZIP obvykle, ale ne vždy být použit jako jednoznačný identifikátor, 687 00:40:32,050 --> 00:40:35,810 jdou přes cvičení mentálně a pak s něčím, jako je phpMyAdmin 688 00:40:35,810 --> 00:40:40,660 factoringu, že společná data, protože zejména jako vaše webové stránky dostane více dobře použít 689 00:40:40,660 --> 00:40:45,440 a více populární, je to, jak se ujistit, že je vše v super rychlý, 690 00:40:45,440 --> 00:40:51,930 tím, že databáze tolik rad jak na jedinečnost jak je to možné. 691 00:40:51,930 --> 00:40:53,860 To bylo hodně. 692 00:40:53,860 --> 00:40:59,010 Nějaké otázky? Dobrá. Pojďme se 5-minut přestávku tam a přeskupit. 693 00:41:01,600 --> 00:41:03,540 Dobrá. 694 00:41:03,540 --> 00:41:08,680 Následující je příkladem toho, že byl použit před několika lety, když jsem se CS161, 695 00:41:08,680 --> 00:41:10,960 který je operační systémy třídy na koleji 696 00:41:10,960 --> 00:41:15,160 který je známý pro bytí úžasné, ale šílený množství práce, 697 00:41:15,160 --> 00:41:19,810 a zaměřuje se opravdu na některé low-level problémy, které vznikají v operačních systémech 698 00:41:19,810 --> 00:41:22,700 a také i na světě databází. 699 00:41:22,700 --> 00:41:27,040 >> Příběh, který byl řekl můj profesor, Margo Seltzer, že rok byl takto. 700 00:41:27,040 --> 00:41:30,990 Předpokládejme, že máte malý kolejní lednička pro vás a vaše spolubydlící 701 00:41:30,990 --> 00:41:34,030 a oba vás opravdu rád mléko. 702 00:41:34,030 --> 00:41:36,360 Takže jsi přišel domů ze třídy jeden den, váš spolubydlící ještě není tam, 703 00:41:36,360 --> 00:41:39,650 otevřete ledničku, a vy si uvědomíte, "Oh sakra, jsme z mléka." 704 00:41:39,650 --> 00:41:42,070 Takže zavřete ledničku, jdete přes ulici k CVS 705 00:41:42,070 --> 00:41:45,830 a dostat do stále dlouhé fronty na nákup nějaké mléko v CVS. 706 00:41:45,830 --> 00:41:48,470 Mezitím, váš spolubydlící přijde domů ze své třídy, 707 00:41:48,470 --> 00:41:51,690 přichází do místnosti, otevře lednice opravdu chtějí trochu mléka, 708 00:41:51,690 --> 00:41:54,130 otevře ledničku a, "Sakra, bez mléka." 709 00:41:54,130 --> 00:41:57,890 Tak on nebo ona se zavře ledničku, vyjde ze dveří, a jde do ABP 710 00:41:57,890 --> 00:42:00,910 nebo někde jinde, než CVS, kde si nebudete narazit do sebe 711 00:42:00,910 --> 00:42:02,790 jít trochu mléka. 712 00:42:02,790 --> 00:42:04,820 Samozřejmě o několik minut později, a to jak z vás dostat zpátky domů 713 00:42:04,820 --> 00:42:07,740 a nyní máte dvakrát tolik mléka, jak jste vlastně chtěli. 714 00:42:07,740 --> 00:42:10,670 A je mléko, teď to půjde špatně, protože se vám líbí mléko 715 00:42:10,670 --> 00:42:14,200 ale nemám rád mléko, takže teď máte příliš mnoho mléka, takže to bude ochlazovat. 716 00:42:14,200 --> 00:42:16,830 To je hrozný, hrozný stav. 717 00:42:16,830 --> 00:42:22,920 Co by mohlo vyřešit tuto prekérní situaci, pokud jste byli první spolubydlící doma? Ano. 718 00:42:22,920 --> 00:42:25,970 [Student] Měl jsi nechal vzkaz. [Smích] 719 00:42:25,970 --> 00:42:28,090 Dobré. Měl jsi nechal vzkaz. 720 00:42:28,090 --> 00:42:32,320 Měl jste dát Post-it poznámku nebo jako říkat, "Gone mléka," 721 00:42:32,320 --> 00:42:36,830 a pak se váš spolubydlící koncepčně by byl uzamčen skutečně dělat to. 722 00:42:36,830 --> 00:42:38,010 Nebo můžete jít 1 krok dále. 723 00:42:38,010 --> 00:42:41,060 Dalo by se doslova zamknout lednici s nějakým visací zámek, 724 00:42:41,060 --> 00:42:44,870 a nyní váš spolubydlící bude doslova pod zámkem z ledničky. 725 00:42:44,870 --> 00:42:48,520 Pokud bychom zobecnit zpět do programování, 726 00:42:48,520 --> 00:42:51,610 můžete téměř myslet na lednici jako nějakou proměnnou nebo struct, 727 00:42:51,610 --> 00:42:53,500 nějaký druh nádoby pro informaci. 728 00:42:53,500 --> 00:42:58,290 Problém zásadně zde je, že oba z vás bylo umožněno nahlížet do 729 00:42:58,290 --> 00:43:02,370 nebo číst stav tohoto datové struktury, 730 00:43:02,370 --> 00:43:08,050 ale považoval to v různých časech, a přesto oba jste se rozhodli 731 00:43:08,050 --> 00:43:11,920 v závislosti na stavu světa si ty různé okamžiky v čase. 732 00:43:11,920 --> 00:43:15,570 Takže kdybyste zamkli ledničku, by jste alespoň zabránit své spolubydlící 733 00:43:15,570 --> 00:43:19,070 od mít been schopni zkontrolovat stav světa, 734 00:43:19,070 --> 00:43:22,530 tak on nebo ona nemohla z téhož rozhodnutí. 735 00:43:22,530 --> 00:43:25,780 Takže databází, jak se ukázalo, mají tento problém neustále. 736 00:43:25,780 --> 00:43:31,050 >> Pojďme se podívat, jestli se nám podaří postavit scénář. 737 00:43:31,050 --> 00:43:34,310 Předpokládejme, že jste něco jako špatný člověk, a jdete do Bank of America 738 00:43:34,310 --> 00:43:37,950 nebo jeden z dalších míst na náměstí, které mají pár bankomatů bok po boku, 739 00:43:37,950 --> 00:43:41,200 a nějak jste přišel na to, jak duplikovat ATM kartu - není všechno tak těžké. 740 00:43:41,200 --> 00:43:42,730 Je to jen magnetický proužek. 741 00:43:42,730 --> 00:43:45,180 A tak to, co chcete, aby se pokusili udělat, je hrát tuto hru 742 00:43:45,180 --> 00:43:49,060 přičemž dáte 1 kartu do 1 stroje, další kartu do jiného zařízení, 743 00:43:49,060 --> 00:43:51,980 a vy v podstatě chcete zkusit vybrat peníze najednou, 744 00:43:51,980 --> 00:43:54,930 protože si představit, že příběh je takto. 745 00:43:54,930 --> 00:43:57,350 Stroj na levé straně má svůj kartu a PIN, 746 00:43:57,350 --> 00:44:00,240 a pak řekl: "Dej mi 100 dolarů." 747 00:44:00,240 --> 00:44:04,790 ATM je naprogramován tak, aby nejprve udělat select ve své databázi nebo ekvivalent - 748 00:44:04,790 --> 00:44:10,780 bez ohledu na databáze je to s použitím - pro zobrazení to mít uživatel alespoň $ 100 v jeho účtu? 749 00:44:10,780 --> 00:44:16,180 Pokud ano, pak vyplivněte $ 100 a odečteme 100 dolarů z jejich bilancí. 750 00:44:16,180 --> 00:44:20,470 Ale samozřejmě, pokud je více strojů zde nebo více způsoby kontroly 751 00:44:20,470 --> 00:44:23,560 stav tohoto světa, bank vault, vidět, kolik peněz máte, 752 00:44:23,560 --> 00:44:26,780 Předpokládám, že jen náhodou stroj na levé a pravé 753 00:44:26,780 --> 00:44:30,140 jak položit tuto otázku na zhruba stejném okamžiku. 754 00:44:30,140 --> 00:44:34,160 >> A to určitě stát. Bankomaty jsou počítače v těchto dnech. 755 00:44:34,160 --> 00:44:37,670 Takže pokud stroj na levé straně říká: "Ano, máte alespoň 100 dolarů," 756 00:44:37,670 --> 00:44:42,150 Mezitím stroj na pravé straně říká: "Ano, máte alespoň 100 dolarů," 757 00:44:42,150 --> 00:44:47,420 pak oba přistoupit k dokončení své programy a vlastně vyplivnout 100 dolarů 758 00:44:47,420 --> 00:44:50,820 a říkají, "Dříve jste museli 200 dolarů." 759 00:44:50,820 --> 00:44:54,890 "Dovolte mi, abych aktualizovat proměnnou nyní 100 dolarů vlevo na účtu." 760 00:44:54,890 --> 00:44:58,780 Ale pokud oba mají kontrolovat zůstatek na účtu a zjistil, že je to 200 dolarů 761 00:44:58,780 --> 00:45:02,000 a oba pak si to spočítejte a říct 200-100, 762 00:45:02,000 --> 00:45:06,990 stroje mají potenciálně vyplivnout na dvě $ 100 účty v každém stroji, 763 00:45:06,990 --> 00:45:11,360 ale už jen aktualizovali částku zůstatek na účtu je 100 dolarů. 764 00:45:11,360 --> 00:45:15,130 Jinými slovy, jste vyřazeno $ 200, ale protože kontrolovány na stav světa 765 00:45:15,130 --> 00:45:18,840 současně a pak se rozhodli na základě této hodnoty, 766 00:45:18,840 --> 00:45:21,930 oni by nemohli dělat matematiku nakonec správně. 767 00:45:21,930 --> 00:45:25,520 Takže v bankovním situaci příliš si opravdu chcete mít nějaký blokování 768 00:45:25,520 --> 00:45:28,450 tak, že jakmile jste zkontrolovali stav některé proměnné 769 00:45:28,450 --> 00:45:31,220 že je opravdu důležité, stejně jako zůstatek účtu, 770 00:45:31,220 --> 00:45:36,070 nedovolte, aby někdo jiný rozhodovat se na základě, že až budete hotovi, dělá svou věc, 771 00:45:36,070 --> 00:45:38,920 kde v tomto případě jsou ATM na levé straně. 772 00:45:38,920 --> 00:45:41,160 Lock všichni ostatní ven. 773 00:45:41,160 --> 00:45:44,650 Můžete si skutečně dosáhnout tohoto efektu v několika různými způsoby. 774 00:45:44,650 --> 00:45:48,660 >> Nejjednodušší způsob, jak v MySQL je řada SQL, které jsme vám dali 775 00:45:48,660 --> 00:45:52,030 v problému nastavené specifikaci, která vypadá přesně takhle. 776 00:45:52,030 --> 00:45:57,420 Vložit do tabulky - jak se to jmenuje - id, symbol, a podíl, počet akcií, 777 00:45:57,420 --> 00:45:59,660 následující hodnoty, například. 778 00:45:59,660 --> 00:46:03,370 Pokud jste nečetli spec ještě, je to příklad na to, jak se vám jít o 779 00:46:03,370 --> 00:46:07,340 nákup 10 akcí tohoto Penny doručení prezidenta Skroob, 780 00:46:07,340 --> 00:46:10,340 jehož ID uživatele se stane, že číslo 7? 781 00:46:10,340 --> 00:46:14,070 To říká, že INSERT INTO tabulka následující id, symbol, a počet akcií 782 00:46:14,070 --> 00:46:18,200 7., "DVN.V", a 10. 783 00:46:18,200 --> 00:46:21,510 Ale - ale, ale, ale - druhý řádek je důležitý. 784 00:46:21,510 --> 00:46:26,310 ON duplicitní klíč UPDATE akcií = akcie + VALUES (akcie). 785 00:46:26,310 --> 00:46:28,350 Takže zcela mystická vypadající na první pohled. 786 00:46:28,350 --> 00:46:31,990 Ale fakt, že tento dotaz SQL, i když se zalomí na 2 řádky, 787 00:46:31,990 --> 00:46:35,920 je 1 dlouhý dotaz, to znamená, že je atomová 788 00:46:35,920 --> 00:46:41,000 v tom smyslu, že tento dotaz bude buď proveden dohromady nebo vůbec ne. 789 00:46:41,000 --> 00:46:45,100 A podle definice MySQL, to je, jak se provádí tento dotaz. 790 00:46:45,100 --> 00:46:51,010 To je samozřejmě v příručce zaručeně provést všechny najednou, nebo vůbec ne. 791 00:46:51,010 --> 00:46:54,020 Motivace pro to je následující. 792 00:46:54,020 --> 00:46:58,540 Pokud v tomto případě se snaží koupit 10 akcí na skladě, 793 00:46:58,540 --> 00:47:02,260 je to trochu ze stejného příběhu jako mléko, je to docela stejný příběh jako ATM. 794 00:47:02,260 --> 00:47:04,970 >> Pokud uděláte chybu, která není pomocí této syntaxe 795 00:47:04,970 --> 00:47:09,610 ale výběr z databáze vidět, kolik akcií této penny zásob 796 00:47:09,610 --> 00:47:13,750 nemá prezident Skroob mají, a předpokládám, že má 10 akcí, 797 00:47:13,750 --> 00:47:19,330 a pak některé zlomek vteřiny později si pak dělat příkazu UPDATE, 798 00:47:19,330 --> 00:47:24,810 což je další příkaz v SQL, který říká, že jít dopředu a přidat 10 dalších akcií 799 00:47:24,810 --> 00:47:28,700 Do své současné 10 tak, aby v ideálním případě celková je 20, 800 00:47:28,700 --> 00:47:33,490 Problém je, že v dnešních databázových systémů a protože v dnešních počítačích 801 00:47:33,490 --> 00:47:35,990 máte více procesorů, více jader - 802 00:47:35,990 --> 00:47:38,920 Jinými slovy, mohou počítače doslova dělat více věcí najednou - 803 00:47:38,920 --> 00:47:44,270 není zaručeno, že váš SELECT a vaše UPDATE v tomto případě 804 00:47:44,270 --> 00:47:46,150 Budou se dít zády k sobě. 805 00:47:46,150 --> 00:47:49,140 Tak špatný scénář by uděláte SELECT 806 00:47:49,140 --> 00:47:51,670 vidět, kolik akcií této populace penny nemá Skroob mají, 807 00:47:51,670 --> 00:47:54,710 a pak už jen náhodou se provádí další databázový dotaz - 808 00:47:54,710 --> 00:47:57,740 Možná, že její Skroob v jiném okně prohlížeče se snaží koupit 10 akcí 809 00:47:57,740 --> 00:48:00,700 v jiném okně úplně, podobně jako ATM - 810 00:48:00,700 --> 00:48:05,410 a předpokládám, že další dotaz dostane mezi SELECT a UPDATE. 811 00:48:05,410 --> 00:48:10,210 To by mohl být případ, že Skroob nyní ztrácí určitý počet akcií 812 00:48:10,210 --> 00:48:14,340 , protože jiný proces zjišťuje stav svého světa, 813 00:48:14,340 --> 00:48:17,800 nebo se dostane více akcií, než by měl mít. 814 00:48:17,800 --> 00:48:23,250 Nebudeme zacházet do podrobností, co přesně tyto konkrétní dějové linie by být, 815 00:48:23,250 --> 00:48:28,380 ale jde o to, pokud máte ke kontrole proměnné hodnoty a pak učinit rozhodnutí, 816 00:48:28,380 --> 00:48:32,500 v případě, že je riziko, někdo jiný něco mezi těmito 2 prohlášení, 817 00:48:32,500 --> 00:48:36,220 jako je tomu v systémech s více procesory, v vícejádrových systémů, 818 00:48:36,220 --> 00:48:41,220 počítače s možností dělat více věcí najednou, může špatné věci se stávají 819 00:48:41,220 --> 00:48:44,530 jako bankovní účty byly odepsány nesprávně, nákup dvakrát tolik mléka, 820 00:48:44,530 --> 00:48:46,730 nebo v tomto případě nesprávné počet podílů. 821 00:48:46,730 --> 00:48:48,370 Ale je tu jednodušší způsob, jak přemýšlet o tom. 822 00:48:48,370 --> 00:48:53,290 >> Ukazuje se, že SQL podporuje také, pokud si nastavit tabulku správně, 823 00:48:53,290 --> 00:48:56,920 něco jako transakce, které bych si dovolil tvrdit, je vlastně ještě srozumitelnější 824 00:48:56,920 --> 00:49:00,650 než to, ale není to 1-liner, takže je to vlastně trochu více zapojit. 825 00:49:00,650 --> 00:49:04,960 Tam je doslova prohlášení v SQL názvem START TRANSACTION. 826 00:49:04,960 --> 00:49:08,300 Stejně jako tam SELECT, UPDATE, INSERT, DELETE, a JOIN a spoustu dalších, 827 00:49:08,300 --> 00:49:10,970 tam jsou klíčová slova jako START TRANSAKCE. 828 00:49:10,970 --> 00:49:13,560 A co potom dělat v rámci PSet 7 - 829 00:49:13,560 --> 00:49:17,270 nemusíte udělat pro PSet 7, je to výslovně popřel jako není nutné, 830 00:49:17,270 --> 00:49:18,830 ale pro konečné projektů to může být užitečné - 831 00:49:18,830 --> 00:49:22,820 Pokud zavoláte dotaz na START transakce a pak další dotaz 832 00:49:22,820 --> 00:49:25,620 a pak další dotaz a pak další, další a další, 833 00:49:25,620 --> 00:49:31,860 tyto dotazy nebude ve skutečnosti být provedena, dokud nezavoláte SQL příkaz COMMIT, 834 00:49:31,860 --> 00:49:37,220 na kterém místě, ať už je to 2 prohlášení nebo 20 prohlášení, budou všichni být provedeny najednou, 835 00:49:37,220 --> 00:49:42,770 což znamená, že nikdo jiný nemůže náhodně koupit příliš mnoho mléka nebo debetní příliš mnoho peněz 836 00:49:42,770 --> 00:49:46,340 nebo koupit příliš mnoho akcií, protože všechny vaše dotazy bude provádět 837 00:49:46,340 --> 00:49:48,410 zády k sobě, aby se zády k sobě. 838 00:49:48,410 --> 00:49:51,580 A to je super důležité, zvláště když děláte něco takového. 839 00:49:51,580 --> 00:49:54,900 Toto je libovolný příklad, který říká, že pojďme aktualizovat bankovní účet 840 00:49:54,900 --> 00:50:00,200 nastavením vyvážení rovnající se zůstatku - 1000 dolarů, kde číslo účtu je 2. 841 00:50:00,200 --> 00:50:04,260 A pak druhý příkaz je nyní pojďme vklad, že 1000 dolarů 842 00:50:04,260 --> 00:50:07,310 do někoho jiného bankovní účet, jehož číslo účtu je 1. 843 00:50:07,310 --> 00:50:10,400 >> Jinými slovy, je to dokonalý příklad, kde chcete, aby se ujistil 844 00:50:10,400 --> 00:50:13,590 že obě tato prohlášení stane, nebo vůbec ne 845 00:50:13,590 --> 00:50:15,450 protože jinak zákazník se chystá přišroubováním 846 00:50:15,450 --> 00:50:17,670 a budete mít své peníze a neuloží ji jinde, 847 00:50:17,670 --> 00:50:20,470 nebo banka se chystá přišroubovat kam se chystáte uložit peníze 848 00:50:20,470 --> 00:50:23,140 ale ve skutečnosti odečteme z účtu uživatele. 849 00:50:23,140 --> 00:50:25,810 Takže chcete oba provést společně. 850 00:50:25,810 --> 00:50:29,140 Tak vstupuje do světa transakcí. 851 00:50:29,140 --> 00:50:31,360 Tak to je něco, co mít na zadní části své mysli, 852 00:50:31,360 --> 00:50:34,710 ani ne tak pro účely jen konečný projekt, 853 00:50:34,710 --> 00:50:36,700 ale pokud chcete, aby vaše konečné projekt někam, 854 00:50:36,700 --> 00:50:39,040 pokud chcete spustit nějakou společnost kolem něj, 855 00:50:39,040 --> 00:50:41,270 Chcete-li vyřešit nějakém studentském skupiny problém na akademické půdě 856 00:50:41,270 --> 00:50:45,210 a skutečně živé, aktivní webové stránky, jsou druh jemné chyb, které mohou vzniknout 857 00:50:45,210 --> 00:50:49,480 pokud nemáte dost promýšlet, co se může stát, pokud 2 lidé 858 00:50:49,480 --> 00:50:54,190 se snaží získat přístup k internetové stránky na adrese doslova ve stejném okamžiku v čase, 859 00:50:54,190 --> 00:50:56,890 přičemž by jejich dotazy jinak si prolíná. 860 00:50:58,840 --> 00:51:01,420 >> Připraveno pro některé JavaScript, ukázku jejich? 861 00:51:01,420 --> 00:51:04,320 Tohle je naše poslední jazyk pro semestru. Dobrá. 862 00:51:04,320 --> 00:51:09,940 Naštěstí, JavaScript vypadá velmi, velmi, velmi podobný 2 jazyků, C a PHP, 863 00:51:09,940 --> 00:51:11,140 jsme udělali tak daleko. 864 00:51:11,140 --> 00:51:14,340 Není JavaScript ve PSet 7, ale je to velmi užitečný nástroj 865 00:51:14,340 --> 00:51:18,840 pokud jde dělat webové závěrečných prací, nebo opravdu jen webové programování obecně. 866 00:51:18,840 --> 00:51:20,950 Tak rychlý přehled něčím, co nazývají DOM. 867 00:51:20,950 --> 00:51:23,600 Zde je super jednoduchý webové stránky, která opravdu jen říká ahoj, svět 868 00:51:23,600 --> 00:51:25,970 a to jak v názvu, a v těle. 869 00:51:25,970 --> 00:51:29,270 Jak odsazení bylo naznačuje nějakou dobu, 870 00:51:29,270 --> 00:51:31,380 tam je opravdu hierarchie na webové stránky. 871 00:51:31,380 --> 00:51:34,220 Mohl bych nakreslit stejný fragment HTML jako strom, 872 00:51:34,220 --> 00:51:37,470 vzpomínal na naše diskuse o datových struktur v C, takto. 873 00:51:37,470 --> 00:51:40,710 Mám nějaké speciální kořenový uzel uzel dokumentu, 874 00:51:40,710 --> 00:51:43,650 a uvidíme, na analogový tohoto v JavaScriptu za chvíli. 875 00:51:43,650 --> 00:51:48,330 První dítě a jediné dítě, které je v tomto případě HTML tag. 876 00:51:48,330 --> 00:51:49,880 Tam je žádný přímý mapování DOCTYPE. 877 00:51:49,880 --> 00:51:53,170 To je zvláštní věc, a tak jsme měli prostě ignorovat, pokud jde o tuto DOM, 878 00:51:53,170 --> 00:51:55,810 Tento Document Object Model stromu. 879 00:51:55,810 --> 00:51:59,530 Všimněte si, že tag HTML, které jsem líčil svévolně jako obdélník, 880 00:51:59,530 --> 00:52:02,890 má 2 děti: hlava a tělo. 881 00:52:02,890 --> 00:52:04,840 >> Ty jsou podobně kreslen jako obdélníky. 882 00:52:04,840 --> 00:52:08,970 Je smysluplné obrazově, že hlava je na levé straně těla. 883 00:52:08,970 --> 00:52:11,960 Důsledkem je, že hlava je na prvním místě ve stromu. 884 00:52:11,960 --> 00:52:14,910 Takže je to vlastně objednání do stromu při kreslení to takhle, 885 00:52:14,910 --> 00:52:17,460 i když tvary a kdoví co ještě jsou libovolné. 886 00:52:17,460 --> 00:52:20,360 Vedoucí mezitím má jedno dítě s názvem název, 887 00:52:20,360 --> 00:52:25,170 a název vlastně má jeho vlastní dítě, které je "hello, world", 888 00:52:25,170 --> 00:52:32,210 které jsem záměrně kreslil jako ovál zde, aby to trochu odlišné od obdélníku. 889 00:52:32,210 --> 00:52:37,420 Tyto obdélníky jsou prvky, vzhledem k tomu, ahoj, svět je opravdu textový uzel. 890 00:52:37,420 --> 00:52:39,850 Takže je to uzel ve stromu, ale je to jiný typ uzlu 891 00:52:39,850 --> 00:52:41,730 tak jsem vytáhl ho libovolně jinak. 892 00:52:41,730 --> 00:52:45,000 Podobně se tělo mít dítě s názvem hello, world i, 893 00:52:45,000 --> 00:52:47,910 tak odlišný uzel, i když jsou shodou okolností stejný text, 894 00:52:47,910 --> 00:52:52,100 ale já jsem vypracována to pomocí stejného tvaru. Takže koho to zajímá? 895 00:52:52,100 --> 00:52:56,820 No, co je hezké o HTML, je, že nemá tuto hierarchickou povahu. 896 00:52:56,820 --> 00:53:01,010 A co je hezké o JavaScriptu a zejména knihoven, které jsou volně k dispozici 897 00:53:01,010 --> 00:53:07,120 a populární jako jQuery, můžete procházet stromovou strukturu tak úžasně snadné. 898 00:53:07,120 --> 00:53:11,790 Každá z věcí jsme dělali v C s ukazateli a posuvu stromy a recursing na uzlech 899 00:53:11,790 --> 00:53:15,300 vlevo dítě pravé dítě, najednou můžeme nějak brát za samozřejmost 900 00:53:15,300 --> 00:53:19,450 jako úžasně poučné, ne-li trochu frustrující 901 00:53:19,450 --> 00:53:22,470 ale zdaleka ne efektivní způsob, jak jít o programování. 902 00:53:22,470 --> 00:53:24,470 A tak s těmito jazycích vyšší úrovně, jako je JavaScript 903 00:53:24,470 --> 00:53:28,340 budeme moci přejít tento strom mnohem více intuitivně. 904 00:53:28,340 --> 00:53:30,430 >> A skutečně syntaxe bude docela povědomě. 905 00:53:30,430 --> 00:53:32,950 Pokud jste nikdy neviděli JavaScript předtím, je to opravdu pěkný odkaz 906 00:53:32,950 --> 00:53:35,910 od Mozilly lidí, že lidé, kteří, aby Firefox, 907 00:53:35,910 --> 00:53:38,370 takže se klidně procházet, že na vaše pohodlí. 908 00:53:38,370 --> 00:53:41,590 Co najdete - a tyto snímky jsou totožné s tím, co jsme druhý den - 909 00:53:41,590 --> 00:53:44,030 podobně, je pryč hlavní. 910 00:53:44,030 --> 00:53:47,010 Takže když napíšete program v JavaScriptu, není hlavní funkce. 911 00:53:47,010 --> 00:53:48,690 Stačí začít psát kód. 912 00:53:48,690 --> 00:53:51,660 Ale klíčový rozdíl mezi JavaScript a C a PHP 913 00:53:51,660 --> 00:53:55,890 je to, že vzhledem k tomu, C a PHP dosud byly provedeny na straně serveru 914 00:53:55,890 --> 00:53:59,180 spotřebičem v tomto případě, nebo obecněji serveru, 915 00:53:59,180 --> 00:54:04,270 JavaScript záměrné je obvykle provádí pomocí prohlížeče. 916 00:54:04,270 --> 00:54:08,440 Jinými slovy, můžete si napsat kód JavaScriptu, protože se chystáme, 917 00:54:08,440 --> 00:54:13,080 na serveru v zařízení, ale jej zahrnout mezi HTML, mezi vaše CSS, 918 00:54:13,080 --> 00:54:16,100 mezi svými GIF a PNG vaše a vašich obrázků ve formátu JPEG 919 00:54:16,100 --> 00:54:19,170 tak, že když uživatel navštíví webovou stránku, pokud používáte JavaScript, 920 00:54:19,170 --> 00:54:21,770 že kód JavaScript pochází ze serveru do prohlížeče, 921 00:54:21,770 --> 00:54:24,540 a to je prohlížeč, který skutečně spustí jej. 922 00:54:24,540 --> 00:54:27,960 Takže to má důsledky pro smysluplné i duševního vlastnictví. 923 00:54:27,960 --> 00:54:32,600 Je to trochu hloupé dokonce přemýšlet o tom, chrání vaše IP, pokud jde o kód JavaScript 924 00:54:32,600 --> 00:54:37,560 protože podle povahy jazyka dostane byl proveden obvykle straně prohlížeče. 925 00:54:37,560 --> 00:54:40,360 >> Můžete poplést to, což znamená, že může to vypadat blázen a ošklivý 926 00:54:40,360 --> 00:54:45,400 bez mezery, hrozné názvy proměnných, aby bylo těžší pro lidi ukrást vaše IP, 927 00:54:45,400 --> 00:54:48,120 ale klíč je, že se provádí straně prohlížeče. 928 00:54:48,120 --> 00:54:51,790 I když jako stranou JavaScript lze použít straně serveru, 929 00:54:51,790 --> 00:54:54,480 nejčastější případ použití právě teď je ještě na prohlížeči. 930 00:54:54,480 --> 00:54:59,800 A tady je to, co vypadá. Zde je if-else if-else, stejně jako C, stejně jako PHP. 931 00:54:59,800 --> 00:55:02,420 Zde je booleovský výraz, když jste "nebo" 2 věci dohromady. 932 00:55:02,420 --> 00:55:04,330 Zde je, když se "a" 2 věci dohromady. 933 00:55:04,330 --> 00:55:08,300 Zde je switch, který je podobný PHP 934 00:55:08,300 --> 00:55:10,810 v tom, že si můžete přepnout na různé typy hodnot. 935 00:55:10,810 --> 00:55:15,180 Smyčky podobně mají pro smyčky, která sem jsou strukturovány stejným způsobem s tím, co jsme viděli předtím. 936 00:55:15,180 --> 00:55:18,110 Zatímco smyčky, jsme dostali udělat while. 937 00:55:18,110 --> 00:55:20,290 Proměnné, někdy tak trochu jinak. 938 00:55:20,290 --> 00:55:24,560 Ty deklarovat proměnné, jako to děláte v PHP a C, 939 00:55:24,560 --> 00:55:27,860 ale stejně je JavaScript slabě zadali. 940 00:55:27,860 --> 00:55:32,730 Neurčíte int nebo float nebo provázek nebo něco podobného, ​​že obvykle. 941 00:55:32,730 --> 00:55:34,240 Můžete zadat var. 942 00:55:34,240 --> 00:55:38,040 Nemusíte specifikovat var, ale to má důsledky, pokud nechcete. 943 00:55:38,040 --> 00:55:42,000 Obvykle, pokud vynecháte var, omylem vytvořit globální proměnnou místo místních. 944 00:55:42,000 --> 00:55:46,420 Takže mi dovolte navrhnout, aby si téměř vždy jen říct, var a pak název proměnné. 945 00:55:46,420 --> 00:55:48,740 Není to typ, je to jen var pro proměnnou. 946 00:55:48,740 --> 00:55:52,930 To by byl příklad, ať už je to 123 nebo "hello, world". 947 00:55:52,930 --> 00:55:58,910 Pole jsou přítomny a syntakticky podobný PHP. 948 00:55:58,910 --> 00:56:03,690 Řeknu var čísla a pak jsem použít hranaté závorky znovu deklarovat proměnnou 949 00:56:03,690 --> 00:56:08,870 jehož typ je pole, které má tyto konkrétní čísla v něm oddělené čárkami. 950 00:56:08,870 --> 00:56:11,740 A pak konečně, to je pouze jeden, že skutečně vypadá jinak. 951 00:56:11,740 --> 00:56:16,700 Připomeňme, že v PHP bychom zavedli asociativní pole pro studenta 952 00:56:16,700 --> 00:56:20,220 jako Zamyla by mohl vypadat takhle, kde je proměnná nazývá student. 953 00:56:20,220 --> 00:56:23,370 Hranaté závorky znamenají, tady je pole. 954 00:56:23,370 --> 00:56:28,500 >> Skutečnost, že nejsem pomocí číselných indexů, ale řetězce - id, dům, a jméno - 955 00:56:28,500 --> 00:56:30,990 Znamená to, že se jedná o asociativní pole, 956 00:56:30,990 --> 00:56:34,490 a tyto šipky s rovnítkem a šikmé konzole 957 00:56:34,490 --> 00:56:37,310 Znamená to, že klíč je "id", je hodnota 1; 958 00:56:37,310 --> 00:56:39,310 Klíčem k úspěchu je "dům", je hodnota Winthrop House; 959 00:56:39,310 --> 00:56:41,800 Klíčem k úspěchu je "název", je hodnota Zamyla Chan. 960 00:56:41,800 --> 00:56:47,110 Takže tam je 3 klíče uvnitř tohoto asociativního pole, z nichž každý má svou vlastní hodnotu. 961 00:56:47,110 --> 00:56:52,880 Viděli jsme, že v PSet 7, nebo brzy bude, v JavaScriptu stejný nápad, 962 00:56:52,880 --> 00:56:55,220 ale bude to vypadat takto. 963 00:56:55,220 --> 00:57:00,070 Tak var student - no dolaru a žádná zmínka o typu ještě, ale var - 964 00:57:00,070 --> 00:57:05,860 rovná a potom otevřete složené závorky, protože v JavaScriptu, když máte klíč hodnota páry, 965 00:57:05,860 --> 00:57:08,900 ve skutečnosti používáte něco jako objekt. 966 00:57:08,900 --> 00:57:13,490 A ti z vás, kteří se transportéry nebo jako by připomenout objekty z Java 967 00:57:13,490 --> 00:57:15,140 nebo podobné jazyky. 968 00:57:15,140 --> 00:57:17,880 JavaScript není Java, především. 969 00:57:17,880 --> 00:57:21,600 Jednalo se o úmyslné lety návrhu rozhodnutí před ukrást něco jiného, ​​že byla populární, 970 00:57:21,600 --> 00:57:25,640 jeho jméno, i když nemá žádnou zásadní vztah k Java sám. 971 00:57:25,640 --> 00:57:31,490 JavaScript má objekty, a vytvořit jim prostřednictvím notace ortézy kudrnaté. 972 00:57:31,490 --> 00:57:36,710 Objekty v JavaScriptu jsou do značné míry odpovídá asociativní pole v PHP 973 00:57:36,710 --> 00:57:40,030 pokud jde o ukládání dat uvnitř nich. 974 00:57:40,030 --> 00:57:44,100 >> Ale ještě silněji v JavaScriptu můžete přiřadit velmi snadno funkce 975 00:57:44,100 --> 00:57:48,040 uvnitř objektu, a když si to udělat v jiných jazycích, 976 00:57:48,040 --> 00:57:50,040 je to docela běžné paradigma, jak uvidíme. 977 00:57:50,040 --> 00:57:54,380 Stručně řečeno, tento objekt reprezentuje studenta, který je zvláště Zamyla, 978 00:57:54,380 --> 00:58:00,380 a je to podobné jako koncepčně, jen syntakticky odlišné od tohoto. 979 00:58:00,380 --> 00:58:03,840 Pojďme vlastně používat JavaScript v souboru. 980 00:58:03,840 --> 00:58:05,570 Ukazuje se, že je to skript tag. 981 00:58:05,570 --> 00:58:08,180 Viděli jsme styl značku a my jsme viděli další HTML tagy. 982 00:58:08,180 --> 00:58:11,510 Skript tag vlastně bude obsahovat nějaký kód JavaScript. 983 00:58:11,510 --> 00:58:15,500 Nech mě jít do zařízení, kde máme nějaký zdrojový kód pre-made. 984 00:58:15,500 --> 00:58:18,700 Nemám zanecháno to ještě na webových stránkách, ale budu dělat, že po třídě. 985 00:58:18,700 --> 00:58:21,770 Pojďme otevřít tuhle, blink.html. 986 00:58:21,770 --> 00:58:27,560 Zpět v roce 1990, tam byl doslova HTML tag nazývá blikají tag, 987 00:58:27,560 --> 00:58:30,340 a toto byl jeden z nejvíce nádherně nadměrně značky na internetu 988 00:58:30,340 --> 00:58:36,140 kdy byste navštívit nějaký 1990 ve stylu webové stránky a začít vidět textu blikat tě takhle, 989 00:58:36,140 --> 00:58:39,810 výsledky markýz tagu, který textu bude takhle. 990 00:58:39,810 --> 00:58:45,070 Jeden z mála okamžiků, kdy se svět skutečně dohodnutých na webovém standardu, 991 00:58:45,070 --> 00:58:48,250 všichni plošně zabil blikání značku před několika lety. 992 00:58:48,250 --> 00:58:52,860 Ale můžeme vzkřísit s JavaScriptem jako demonstraci síly máte 993 00:58:52,860 --> 00:58:56,660 když můžete napsat program uvnitř webové stránky. 994 00:58:56,660 --> 00:59:00,240 Nejprve se přeskočit nové věci a soustředit se pouze na starý. 995 00:59:00,240 --> 00:59:01,780 >> Zde je staré věci v tomto příkladu. 996 00:59:01,780 --> 00:59:06,350 Mám tag HTML, hlavu značku, a titul tag. 997 00:59:06,350 --> 00:59:11,210 Pak mám tag body zde div, který odvolání je jen obdélníkový rozdělení stránky 998 00:59:11,210 --> 00:59:14,720 že jsem dostal jedinečnou ID libovolně z "pozdrav", aby, 999 00:59:14,720 --> 00:59:18,320 Jen tak jsem si způsob, jak jednoznačně odkazuje na to, že má některé velmi jednoduchý text: 1000 00:59:18,320 --> 00:59:20,220 ahoj, svět. 1001 00:59:20,220 --> 00:59:23,940 Nyní mi dovolte rolovat nahoru na začátek tohoto souboru a zjistit, co je nového. 1002 00:59:23,940 --> 00:59:27,710 První věc, která je nová až nahoru, je skript tag, 1003 00:59:27,710 --> 00:59:31,280 a uvnitř oznámení tag script jsem deklaroval funkci. 1004 00:59:31,280 --> 00:59:34,610 Chcete-li deklarovat funkci v JavaScriptu, dost podobný PHP, 1005 00:59:34,610 --> 00:59:37,930 budete doslova napsat Funkce potom na název funkce, závorka, 1006 00:59:37,930 --> 00:59:40,400 a možná některé argumenty, pokud to trvá nějaký. 1007 00:59:40,400 --> 00:59:43,510 Pak jsem dostal můj složená závorka jako obvykle, a teď máme nějaký mírně nového kódu, 1008 00:59:43,510 --> 00:59:45,230 ale uvidíme, co to znamená. 1009 00:59:45,230 --> 00:59:48,670 Tak var div, to prostě znamená, dát mi proměnnou s názvem div. 1010 00:59:48,670 --> 00:59:50,530 Mohl jsem to nazval foo, ale já jsem chtěl, aby to nazvat div 1011 00:59:50,530 --> 00:59:52,620 z důvodů, které budou zřejmé v druhé. 1012 00:59:52,620 --> 00:59:57,480 Pak to dopadá v JavaScriptu - a to je JavaScript kód vložený v mé webové stránky - 1013 00:59:57,480 --> 01:00:01,760 je zvláštní globální proměnná druhů tzv. dokument. 1014 01:00:01,760 --> 01:00:04,780 JavaScript je ve skutečnosti objektově orientovaný jazyk. 1015 01:00:04,780 --> 01:00:07,230 Nebudeme zacházet do detailů v 50, co to znamená, 1016 01:00:07,230 --> 01:00:11,180 ale teď vím, že objekt je skoro jako struct. 1017 01:00:11,180 --> 01:00:14,740 Stejně jako jsme viděli při cestě zpět v jednom z prvních problému sety 1018 01:00:14,740 --> 01:00:17,150 kde jsme dát hodně informací v struct, 1019 01:00:17,150 --> 01:00:21,330 Podobně je dokumentovat zvláštní struct, který je dodáván s prohlížečem, 1020 01:00:21,330 --> 01:00:24,810 přichází s libovolnou webovou stránku. Není to něco, co jsem vytvořil. 1021 01:00:24,810 --> 01:00:28,210 Uvnitř tohoto dokumentu struktury, i když budete mít nejen data 1022 01:00:28,210 --> 01:00:30,010 ale také mají funkce. 1023 01:00:30,010 --> 01:00:34,090 >> A kdykoliv budete mít funkci uvnitř struktury, uvnitř objektu, 1024 01:00:34,090 --> 01:00:36,490 je to tzv. metoda. Ale je to to samé. 1025 01:00:36,490 --> 01:00:40,110 Metoda je funkce, která jen tak se stane, že je uvnitř něco jiného. 1026 01:00:40,110 --> 01:00:42,990 Takže to znamená, že tato speciální globální proměnné s názvem dokumentu 1027 01:00:42,990 --> 01:00:47,690 je funkce nazvaná getElementById, že doslova dělá, že. 1028 01:00:47,690 --> 01:00:52,460 To se vám element z DOM, Document Object Model strom, 1029 01:00:52,460 --> 01:00:55,520 jehož ID je v tomto případě pozdrav. 1030 01:00:55,520 --> 01:00:59,200 Jinými slovy, celou tu dobu jsme strávili na datových strukturách přichází do hry. 1031 01:00:59,200 --> 01:01:01,400 Tento obraz DOM, který jsme měli před chvílí, 1032 01:01:01,400 --> 01:01:06,100 i když stránka je trochu jiný, kdybych měl div na tomto obrázku, 1033 01:01:06,100 --> 01:01:11,180 co document.getElementById by se vrátil ke mně by účinně se ukazatel 1034 01:01:11,180 --> 01:01:15,440 k obdélníku ve stromu, odkaz na obdélník ve stromu. 1035 01:01:15,440 --> 01:01:18,410 Takže to, co to znamená ve skutečnosti zavolejte na jedno z těchto funkcí. 1036 01:01:18,410 --> 01:01:21,960 V tomto případě je to opět div. Není to subjekt nebo titul. 1037 01:01:21,960 --> 01:01:26,480 Tak se podívejme, co jsem pak dělat s touto div teď, že jsem si to v této proměnné nazvané div. 1038 01:01:26,480 --> 01:01:32,580 Ukázalo se, že s JavaScriptem máte možnost doladit CSS vaší stránky dynamicky. 1039 01:01:32,580 --> 01:01:39,060 Až teď, všechny CSS jsme kdy udělali, i když omezený, je ve stylu atributy, 1040 01:01:39,060 --> 01:01:41,730 nebo kde jinde jsme dát CSS? 1041 01:01:42,730 --> 01:01:45,810 Tak nějak jsem zkažený, že jeden. Ve stylu značky v horní části souboru. 1042 01:01:45,810 --> 01:01:49,180 Nebo třetí místo byl v? 1043 01:01:50,710 --> 01:01:54,590 >> Externí soubor, něco. Css. 1044 01:01:54,590 --> 01:01:56,730 Takže to jsou ty 3 místa jsme udělali CSS tak daleko, 1045 01:01:56,730 --> 01:01:59,310 ale úlovek je, že jsme pevně dáno, že všechno. 1046 01:01:59,310 --> 01:02:04,060 Rozhodli jste se, jak si ponořila do PSet 7, rozhodli jsme se před přednášet to, co naše CSS bude. 1047 01:02:04,060 --> 01:02:07,380 Ale pokud chcete změnit svůj CSS, můžete skutečně udělat 1048 01:02:07,380 --> 01:02:09,370 Jakmile budete mít skutečný programovací jazyk. 1049 01:02:09,370 --> 01:02:13,910 CSS, HTML - není programovací jazyky. JavaScript je. 1050 01:02:13,910 --> 01:02:18,200 Tak to dopadá, že jakmile máte jeden z těch obdélníků ze stromu 1051 01:02:18,200 --> 01:02:23,050 volal DOM, to má sám nějaké data v ní. 1052 01:02:23,050 --> 01:02:27,820 Takže div, že jsem popadl ze stromu má to, co budeme říkat vlastnost uvnitř něj 1053 01:02:27,820 --> 01:02:34,390 volal styl, a vlastnost stylu má sám vlastnost nazvanou viditelnost. 1054 01:02:34,390 --> 01:02:37,330 Já bych si toho až při pohledu do uživatelovo CSS příručce. 1055 01:02:37,330 --> 01:02:41,160 Ukazuje se, že je viditelnost CSS vlastnost, která dělá to, co říká. 1056 01:02:41,160 --> 01:02:44,530 To je něco viditelné či nikoliv, viditelné nebo ne. 1057 01:02:44,530 --> 01:02:46,810 A jak to děláte, že je to. 1058 01:02:46,810 --> 01:02:50,510 Ptám se programově, pokud viditelnost tohoto div se skrývá, 1059 01:02:50,510 --> 01:02:53,390 co mám změnit to? Viditelné. 1060 01:02:53,390 --> 01:02:58,840 Jinak, pokud viditelnost této stránce není skrytá, logicky jsem si, aby to skryté. 1061 01:02:58,840 --> 01:03:04,070 Nemám ponětí, proč je to viditelné a skryté a nejsou viditelné a neviditelné. 1062 01:03:04,070 --> 01:03:06,000 To byl špatný tvar rozhodnutí na cestě. 1063 01:03:06,000 --> 01:03:09,530 Ale to jsou opravdu protiklady v CSS: k prohlédnutí a skryté. 1064 01:03:09,530 --> 01:03:15,520 To vše dělá je, znamená to změnit CSS mého souboru zapnutí a vypnutí, zapnutí a vypnutí 1065 01:03:15,520 --> 01:03:16,870 pro daný div. 1066 01:03:16,870 --> 01:03:20,630 Ale znovu, to je funkce nazvaná blikají. Když je blikání funkce se nazývá? 1067 01:03:20,630 --> 01:03:24,080 Ukazuje se, že je tu ještě zvláštní globální proměnná tzv. okno, 1068 01:03:24,080 --> 01:03:28,220 svým duchem podobat dokumentu, ale vzhledem k tomu, že dokument odkazuje na své webové stránky, 1069 01:03:28,220 --> 01:03:31,700 jako strom DOM, HTML jsi poslal ze serveru, 1070 01:03:31,700 --> 01:03:35,250 Okno se odkazuje na chrom kolem něj, do adresního řádku, v záhlaví, 1071 01:03:35,250 --> 01:03:37,880 a všechny ty věci kolem své webové stránky. 1072 01:03:37,880 --> 01:03:42,800 >> A ukázalo se, že objekt window má speciální funkci uvnitř něj volal setInterval 1073 01:03:42,800 --> 01:03:44,360 že dělá to, co říká. 1074 01:03:44,360 --> 01:03:48,600 Bude-li nastavit interval - v tomto případě každých 500 milisekund - 1075 01:03:48,600 --> 01:03:52,270 a hádat, co to bude dělat každých 500 milisekund? 1076 01:03:52,270 --> 01:03:55,240 Bude to provést tuto funkci blikání. 1077 01:03:55,240 --> 01:03:58,560 A co to tu pěkné, že jsme mohli udělat to v C, i když jsme nikdy neudělal. 1078 01:03:58,560 --> 01:04:01,580 C má něco, co nazývá ukazatelů funkcí, kde si můžete projít funkce kolem 1079 01:04:01,580 --> 01:04:03,140 jako argumenty. 1080 01:04:03,140 --> 01:04:07,620 Podobně v JavaScriptu můžete předat název funkce do jiné funkce. 1081 01:04:07,620 --> 01:04:10,630 A upozornění, co dělám. Já to nedělám. 1082 01:04:10,630 --> 01:04:14,380 Pokud jsem závorky po mrknutí, znamenalo by to volání blikat funkce. 1083 01:04:14,380 --> 01:04:17,430 Kdybych jejich zrušení, to znamená, že je zde blikání funkce 1084 01:04:17,430 --> 01:04:21,330 takže setInterval dá říkat každých 500 milisekund. 1085 01:04:21,330 --> 01:04:28,200 Takže konečný výsledek, otřesné ačkoli to je, je to, že když půjdu do localhost a jít do blink.html, 1086 01:04:28,200 --> 01:04:32,120 Nyní mám tuto událost znovu a znovu. 1087 01:04:32,120 --> 01:04:34,950 A když jsem vlastně Zkontrolujte prvek, uvidíme, jestli můžeme vidět. 1088 01:04:34,950 --> 01:04:38,550 Dovolte mi, abych Zkontrolujte prvek, dovolte mi, abych přejděte dolů jen trochu, 1089 01:04:38,550 --> 01:04:44,320 dovolte mi, abych si vybrat Elements sem, a všimněte si DOM vnitřek inspektora Chrome. 1090 01:04:44,320 --> 01:04:48,840 Je to doslova mění tam a zpět každých 500 milisekund. 1091 01:04:48,840 --> 01:04:55,660 Pokud půjdeme do našeho přítele Nate, 1092 01:04:55,660 --> 01:05:00,020 pokud jste se někdy nad tím, jak to funguje, podobný nápad s intervalem, 1093 01:05:00,020 --> 01:05:04,810 ale Nate je vlastně dělat velmi účinné využití barvy v tomto konkrétním případě zde. 1094 01:05:04,810 --> 01:05:07,350 Takže co víc můžeme vlastně dělat s tím? 1095 01:05:07,350 --> 01:05:09,990 Pojďme otevřít další příklad a zkusit něco 1096 01:05:09,990 --> 01:05:12,940 že je programově ještě užitečnější, než dělat věci blikat. 1097 01:05:12,940 --> 01:05:17,990 Nech mě jít do našeho formuláře adresáře dnes a jít do form0. 1098 01:05:17,990 --> 01:05:20,820 To bylo nejošklivější možné formulář, který jsem mohl přijít s, 1099 01:05:20,820 --> 01:05:23,290 a dovolte mi, abych vám ukázat, jak vypadá v prohlížeči. 1100 01:05:23,290 --> 01:05:28,960 >> Nech mě jít do localhost / formulářů, a to je form0. 1101 01:05:28,960 --> 01:05:33,400 To je super ošklivé HTML formulář, který má několik polí pro e-mail, na heslo, 1102 01:05:33,400 --> 01:05:37,190 heslo, a pak se trochu zaškrtávací políčko, aby se dohodly na některých pojmů a podmínek. 1103 01:05:37,190 --> 01:05:41,350 Háček je, jestli jsem navštívit tento formulář a já nechci, aby vám svou e-mailovou adresu, 1104 01:05:41,350 --> 01:05:44,730 Nechci, aby se dohodly na podmínkách možná, mohu klepněte na tlačítko Zaregistrovat 1105 01:05:44,730 --> 01:05:46,920 a to umožňuje mě stejně. 1106 01:05:46,920 --> 01:05:50,800 To se stává, aby se podrobil stupidní souboru PHP s názvem dump.php. 1107 01:05:50,800 --> 01:05:58,420 Vše, co to udělá, je vytisknout obsah $ _GET jen pro diagnostické účely. 1108 01:05:58,420 --> 01:06:01,580 To bylo to, co bylo předloženo uživatelem právě teď. 1109 01:06:01,580 --> 01:06:05,010 Předpokládejme však, že chceme skutečně ověřit uživatele odeslání formuláře. 1110 01:06:05,010 --> 01:06:06,530 Nech mě jít do verze 1. 1111 01:06:06,530 --> 01:06:11,420 To je form1.html. Vypadá to esteticky stejně jako špatné, ale všimněte si, jak je to fantazie. 1112 01:06:11,420 --> 01:06:15,450 Kdybych na tlačítko Registrovat bez spolupráce, jsem si zařval na. 1113 01:06:15,450 --> 01:06:17,320 "Musíte zadat vaši e-mailovou adresu." 1114 01:06:17,320 --> 01:06:21,670 Dobrá. Tak zkusím to. Tak malan@harvard.edu. Nepotřebuji heslo. 1115 01:06:21,670 --> 01:06:25,100 Registrace. "Musíte zadat heslo." Dobrá. 1116 01:06:25,100 --> 01:06:28,470 Tak jsem se zadat heslo Crimson. Registrace. 1117 01:06:28,470 --> 01:06:32,300 "Hesla se neshodují." Musím teď psát crimson zde. 1118 01:06:32,300 --> 01:06:35,710 Omylem jsem četl, že. Registrace. 1119 01:06:35,710 --> 01:06:39,860 "Vy musíte souhlasit s podmínkami." Dobrá. Souhlasím tam. Registrace. 1120 01:06:39,860 --> 01:06:43,700 A teď to ukazuje mi diagnostický výstup támhle. 1121 01:06:43,700 --> 01:06:45,630 >> Takže to, co se právě stalo? 1122 01:06:45,630 --> 01:06:48,330 Jsme měli tuto schopnost ověřit odesílání formuláře. 1123 01:06:48,330 --> 01:06:51,420 Ve skutečnosti, pokud jste ponořit do PSet 7, je tu omluvit funkce 1124 01:06:51,420 --> 01:06:54,620 že je to docela snadné křičet na uživatele s hlášením na obrazovce. 1125 01:06:54,620 --> 01:06:57,580 Já používám trochu jiný mechanismus, záznam funkce, 1126 01:06:57,580 --> 01:07:03,690 která není funkce, která je se usmál na, protože to dělá velmi ošklivé uživatelské zprávy. 1127 01:07:03,690 --> 01:07:05,710 Ale podívejme se, co tady dělám. 1128 01:07:05,710 --> 01:07:09,620 To je form1.html, a všimněte si, že mám nějaký docela známý syntaxi: 1129 01:07:09,620 --> 01:07:12,920 tělo tag, tag formuláře, akce atribut, metoda atribut. 1130 01:07:12,920 --> 01:07:17,050 Ale nevšiml jsem stejně moje forma jedinečné ID pro pohodlí. 1131 01:07:17,050 --> 01:07:19,190 Pak jsem dostal e-mail pole, jehož typ je text, 1132 01:07:19,190 --> 01:07:23,780 pole pro heslo, jehož typ je heslo, potvrzení pole, jehož typ je heslo, 1133 01:07:23,780 --> 01:07:28,070 a pak checkbox, jehož jméno je smlouva tady, typ checkbox. 1134 01:07:28,070 --> 01:07:30,380 A pak mám tlačítko Odeslat. 1135 01:07:30,380 --> 01:07:33,050 Povšimněme si ale na vrcholu, co víc mám. 1136 01:07:33,050 --> 01:07:35,810 Za prvé, je tu další použití skriptu značky. 1137 01:07:35,810 --> 01:07:40,520 Pokud máte nějaký kód JavaScriptu v jiném souboru, stejně jako s CSS můžete zahrnout. 1138 01:07:40,520 --> 01:07:44,530 A vy, že se skript zdroje, a pak zjistíte jsem připojení zřejmě 1139 01:07:44,530 --> 01:07:50,349 na googleapis.com na velmi dlouhé cestě, ale jehož jméno končí v jquery.min 1140 01:07:50,349 --> 01:07:52,420 pro minimum. js. 1141 01:07:52,420 --> 01:07:55,969 jQuery je super populární knihovna pro JavaScript, který prostě dělá JavaScript 1142 01:07:55,969 --> 01:07:58,230 všechny uživatelsky přívětivější k použití. 1143 01:07:58,230 --> 01:08:00,610 Je to skutečně stalo de facto standardem. 1144 01:08:00,610 --> 01:08:04,090 Takže i když to, co jste asi vidět není čistá JavaScript samo o sobě, 1145 01:08:04,090 --> 01:08:09,340 to je knihovna na vrcholu JavaScriptu podobně jako na CS50 knihovny vrstva 1146 01:08:09,340 --> 01:08:13,670 na vrcholu low-level kód C, realita je téměř každý na internetu používá. 1147 01:08:13,670 --> 01:08:18,030 Takže se nejedná o školení kola. To je jen nejlepší praxe v těchto dnech. 1148 01:08:18,030 --> 01:08:22,830 Nyní všimnete níže, že je můj vlastní scénář tag, a všimněte si, co jsem tady udělal. 1149 01:08:22,830 --> 01:08:27,450 Ukazuje se, že jQuery dělá něco trochu fantazie. 1150 01:08:27,450 --> 01:08:29,660 JavaScript má dolary, ale oni jsou bezvýznamní. 1151 01:08:29,660 --> 01:08:32,870 >> Jsou jako písmeno A nebo B nebo C. 1152 01:08:32,870 --> 01:08:36,670 jQuery je prostě přijala konvenci nebo druhu položil požadavek na skutečnost, 1153 01:08:36,670 --> 01:08:40,280 že $ bude jejich speciální symbol. 1154 01:08:40,280 --> 01:08:44,950 Takže jakmile vložíte tento globální JavaScript soubor tady s skriptu značky, 1155 01:08:44,950 --> 01:08:49,080 máte přístup k speciálním globální proměnné, která se jmenuje $. 1156 01:08:49,080 --> 01:08:53,009 Je to více vhodně volal jQuery, ale to nevypadá zdaleka tak sexy jako $. 1157 01:08:53,009 --> 01:08:56,250 Ale $ nemá žádný zvláštní význam. V PHP to mělo zvláštní význam. 1158 01:08:56,250 --> 01:08:58,440 Musel jsi mít před proměnné. 1159 01:08:58,440 --> 01:09:01,670 To je jen sexy věc, kterou přijal. 1160 01:09:01,670 --> 01:09:03,389 Co se to tady děje? 1161 01:09:03,389 --> 01:09:08,830 Všimněte si, jsem kolem na jQuery funkce mou globální proměnné dokumentu 1162 01:09:08,830 --> 01:09:10,860 a pak volám. připraven. 1163 01:09:10,860 --> 01:09:15,480 Co jQuery podstatě dělá, je, že vám umožní vzít nějaké vanilkové JavaScriptu věci 1164 01:09:15,480 --> 01:09:17,889 jako objektu dokumentu, objekt window, 1165 01:09:17,889 --> 01:09:20,790 a pokud si předat ho do jQuery funkce - 1166 01:09:20,790 --> 01:09:24,429 a znovu, aby bylo jasno, to je funkce nazvaná jQuery - 1167 01:09:24,429 --> 01:09:28,240 to, co dělá, je, že se vrátí k vám speciální verzi dokumentu 1168 01:09:28,240 --> 01:09:30,700 , který má více funkcí, s ním spojené. 1169 01:09:30,700 --> 01:09:34,760 Takže v surovém JavaScript není k dispozici žádný funkce, 1170 01:09:34,760 --> 01:09:37,810 ale pokud předáte dokument jQuery funkce jako první, 1171 01:09:37,810 --> 01:09:40,960 se vrátí do Vás speciální verzi objektu dokumentu 1172 01:09:40,960 --> 01:09:43,030 že má více fantazie funkcí. 1173 01:09:43,030 --> 01:09:48,230 A to je důvod, proč lidé rádi. Je to prostě dělá věci jednodušší udělat, jak jsme o tom vidět. 1174 01:09:48,230 --> 01:09:49,820 Takže co tento řádek kódu znamená? 1175 01:09:49,820 --> 01:09:52,690 Tento řádek kódu zde znamená, že když je dokument připraven - 1176 01:09:52,690 --> 01:09:56,830 jinými slovy, jakmile prohlížeč přečtení tohoto souboru shora dolů - 1177 01:09:56,830 --> 01:09:59,200 jděte do toho a spustit následující funkce. 1178 01:09:59,200 --> 01:10:03,540 Co je opravdu zajímavé v JavaScriptu - a PHP je to stejně - 1179 01:10:03,540 --> 01:10:05,450 je anonymní funkce. 1180 01:10:05,450 --> 01:10:10,560 V JavaScriptu můžete deklarovat funkce, které nemají jméno, ale oni přece mají tělo. 1181 01:10:10,560 --> 01:10:12,570 Všimněte si, co se tu děje. 1182 01:10:12,570 --> 01:10:16,220 >> To je funkce nazvaná připravený, a znamená to, provést následující 1183 01:10:16,220 --> 01:10:20,220 kdy se celá webová stránka je připravena, když je to všechno bylo číst v ze serveru. 1184 01:10:20,220 --> 01:10:23,090 Co chcete udělat? Chci spustit kus kódu. 1185 01:10:23,090 --> 01:10:27,120 Všimněte si, že nechceme, aby spuštění tohoto kódu hned. 1186 01:10:27,120 --> 01:10:34,350 Pokud jsem vynechal to, znamenalo by to okamžitě začít provádění těchto řádků kódu. 1187 01:10:34,350 --> 01:10:39,040 Ale skutečnost, že říkám ne, ne, ne, zabalit to v anonymní funkce, jako je tato 1188 01:10:39,040 --> 01:10:43,000 prostředky nespustit ji dosud; říkat to nakonec. 1189 01:10:43,000 --> 01:10:45,430 Viděli jsme to před chvílí v našem předchozím příkladu formuláře. 1190 01:10:45,430 --> 01:10:49,990 Jakou funkci jsme zavolat nakonec, 500 milisekund později? Blink. 1191 01:10:49,990 --> 01:10:51,480 Takže stejný nápad. 1192 01:10:51,480 --> 01:10:53,950 Opět platí, že i když to vypadá trochu divně, vezměte prozatím o víře 1193 01:10:53,950 --> 01:10:57,060 že prohlásit anonymní funkce, která říká se nakonec, 1194 01:10:57,060 --> 01:11:01,720 stačí napsat function () { 1195 01:11:01,720 --> 01:11:05,380 Takže, jaký kód se budeme provádět nakonec? Následující. 1196 01:11:05,380 --> 01:11:10,460 To také vypadá trochu nový, ale to znamená, tady je jQuery funkce, 1197 01:11:10,460 --> 01:11:13,430 a to je nyní zkratka. 1198 01:11:13,430 --> 01:11:18,830 Tento úryvek HTML v dolní části obrazovky, samozřejmě má nějaký strom zastoupení. 1199 01:11:18,830 --> 01:11:21,730 To není to. Tato stránka je mnohem zajímavější než tento Hello, World například. 1200 01:11:21,730 --> 01:11:25,210 Ale tam je nějaký strom, který odpovídá tomuto HTML. 1201 01:11:25,210 --> 01:11:28,910 Bylo by bolest v krku muset realizovat nějaký rekurzivní funkce 1202 01:11:28,910 --> 01:11:34,380 začít na kořenový uzel a pak najít uzel, jehož ID je registrace. 1203 01:11:34,380 --> 01:11:38,340 Takže to, co dělá jQuery super snadné pro nás je doslova to. 1204 01:11:38,340 --> 01:11:43,000 Nestyď se a dostat mě, co div, nebo jakékoli podobě, bez ohledu na HTML element 1205 01:11:43,000 --> 01:11:45,820 má ID registrace. 1206 01:11:45,820 --> 01:11:52,440 Toto je ekvivalent k document.getElementById ("registrace"). 1207 01:11:52,440 --> 01:11:54,170 >> Proč lidé jako jQuery? 1208 01:11:54,170 --> 01:12:00,110 Vzhledem k tomu, že je to kratší psát. Ale to je vše, co je. Je to stejná myšlenka. 1209 01:12:00,110 --> 01:12:02,630 Dejte mi tag, jehož ID je registrace. 1210 01:12:02,630 --> 01:12:06,300 A když se nám, že tag, který se stane být forma,, 1211 01:12:06,300 --> 01:12:08,300 jděte do toho a spuštění tohoto kódu. 1212 01:12:08,300 --> 01:12:11,320 Takže pojďme se jeden pohled nyní na to, jak si vedeme formuláře ověření. 1213 01:12:11,320 --> 01:12:15,950 Syntaxe je sice záhadné na první, ale to, co se děje? 1214 01:12:15,950 --> 01:12:21,050 Pokud tento řádek kódu je pravda, budu křičet na uživateli, aby jeho nebo její e-mailovou adresu. 1215 01:12:21,050 --> 01:12:22,970 Takže to, co je tento řádek kódu? 1216 01:12:22,970 --> 01:12:25,560 $ Znamená jQuery. Teď si toho všimnout. 1217 01:12:25,560 --> 01:12:27,920 To je něco jako CSS. 1218 01:12:27,920 --> 01:12:33,370 Pokud jste se ponořila do CSS ještě, budete vědět, že to znamená, že prvek, jehož ID je registrace. 1219 01:12:33,370 --> 01:12:39,840 Prostor znamená najít dítě nebo potomek registraci, jehož jméno je na vstupu. 1220 01:12:39,840 --> 01:12:42,970 A pak se ta věc v hranatých závorkách je trochu filtr. 1221 01:12:42,970 --> 01:12:47,010 A i když to vypadá tajemná, to jen znamená jít do formuláře, jehož ID je registrace, 1222 01:12:47,010 --> 01:12:51,230 přejít na vnitřní vstupní prvek toho, jehož jméno je e-mail, 1223 01:12:51,230 --> 01:12:55,440 a pak se jeho hodnotu, bez ohledu na jeho hodnotu se stane, že - 1224 01:12:55,440 --> 01:12:59,670 asdf jestli je to všechno, co jsem na psacím stroji nebo malan@harvard.edu jestli to, co jsem napsal. 1225 01:12:59,670 --> 01:13:05,250 Takže, pokud je hodnota formuláře emailovou pole == nic, řvát na uživatele. 1226 01:13:05,250 --> 01:13:09,700 Nebo jestliže je hodnota v poli hesla == nic, řvát na uživatele. 1227 01:13:09,700 --> 01:13:19,520 >> Nebo jestliže je hodnota v poli hesla není rovnat hodnotě pole pro potvrzení, 1228 01:13:19,520 --> 01:13:22,850 který byl jiný prvek formuláře, řvát na uživatele. 1229 01:13:22,850 --> 01:13:25,680 A pak konečně - a to taky má nějakou novou syntaxi vlastní, 1230 01:13:25,680 --> 01:13:29,270 ale jakmile jste viděli, že je to alespoň trochu rozumné - 1231 01:13:29,270 --> 01:13:34,060 else if formulář, jehož ID je registrace má vstupní prvek, jehož jméno je smlouva 1232 01:13:34,060 --> 01:13:39,720 a je kontrolována, jděte do toho a řvát na uživatele. 1233 01:13:39,720 --> 01:13:42,520 Tak jsem úplně přiznat, je to naprosto ohromující na první pohled. 1234 01:13:42,520 --> 01:13:46,530 Je to hodně nové syntaxi. Ale všichni jQuery se řídí těmito druhy vzorů. 1235 01:13:46,530 --> 01:13:49,880 A upřímně, já ani nevěděl, to existoval ještě před několika minutami. 1236 01:13:49,880 --> 01:13:53,640 I Googled, "Jak byste zkontrolovat, zda je zaškrtnuto políčko v jQuery?" 1237 01:13:53,640 --> 01:13:55,680 a to je syntaxe, protože tam je různé způsoby, jak to udělat 1238 01:13:55,680 --> 01:13:58,010 s aktuálním zdrojovém kódu JavaScript. 1239 01:13:58,010 --> 01:14:01,030 Tak jako první stránka problému Set 7 zdůrazňuje, 1240 01:14:01,030 --> 01:14:04,500 Pset 7 je velmi cvičení v bootstrappingu sami 1241 01:14:04,500 --> 01:14:08,650 kde jsme za předpokladu, doufejme, koncepční rámec, se kterým se vypořádat s PSet. 1242 01:14:08,650 --> 01:14:12,280 >> Ale jak je tomu často v případě web design, je to na vás opravdu hrabat kolem, 1243 01:14:12,280 --> 01:14:16,680 začlenil úryvky kódu a příklady z webu tak dlouho, jak budete citovat je 1244 01:14:16,680 --> 01:14:17,960 Podle podmínek na tomto prvním listu, 1245 01:14:17,960 --> 01:14:21,460 a uvědomit si, že učení HTML, CSS, JavaScript, a dokonce i SQL 1246 01:14:21,460 --> 01:14:26,020 je opravdu chtěl být tento at-home cvičení, jak jsme začali brát tyto vzdělávací kola off. 1247 01:14:26,020 --> 01:14:29,150 A uvědomit si, taky je tu mnohem více věcí, které můžete dělat s prohlížečem. 1248 01:14:29,150 --> 01:14:33,790 Uvnitř většiny z těchto prvků existují i ​​jiné věci, tzv. obslužné rutiny. 1249 01:14:33,790 --> 01:14:37,140 A i když jsme se podíval na ty tzv. onsubmit a onready, 1250 01:14:37,140 --> 01:14:40,310 můžete dělat věci, jako OnKeyDown, OnKeyUp, 1251 01:14:40,310 --> 01:14:43,410 rád, když se uživatel dotkne klíč, můžete poslouchat, že i klávesu nahoru. 1252 01:14:43,410 --> 01:14:45,940 Gmail má klávesové zkratky. 1253 01:14:45,940 --> 01:14:49,490 Jak Google implementovat klávesové zkratky, jako je C pro psaní? 1254 01:14:49,490 --> 01:14:54,120 Oni naslouchat událostem, jak se jim říká, jako onkeypress nebo OnKeyUp a OnKeyDown. 1255 01:14:54,120 --> 01:14:56,360 Pokud jste někdy vznášel myši nad nějakým menu 1256 01:14:56,360 --> 01:15:00,180 a najednou, máte to, objeví nabídka nebo grafiku mění barvu, 1257 01:15:00,180 --> 01:15:01,920 jak to dělají? 1258 01:15:01,920 --> 01:15:06,940 Spíše než poslouchat onready nebo OnSubmit, můžete poslouchat onmouseover nebo onmouseout. 1259 01:15:06,940 --> 01:15:10,920 >> Takže ve zkratce, s těmito velmi jednoduché základy, které jsme začali, abyste nepoškrábali povrch dnes 1260 01:15:10,920 --> 01:15:13,940 a budeme potápět v návaznosti na středu, budete mít stále více, 1261 01:15:13,940 --> 01:15:17,530 pravomoc provádět spoustu věcí, které jste již zvyklí. 1262 01:15:17,530 --> 01:15:21,620 Takže pojďme nekončí, a my budeme pokračovat v tomto středu. 1263 01:15:22,690 --> 01:15:24,320 >> [CS50.TV]