1 00:00:00,000 --> 00:00:01,940 >> [MUSIK SPELA] 2 00:00:01,940 --> 00:00:11,130 3 00:00:11,130 --> 00:00:14,620 >> DAVID MALAN: Detta är CS 50, och detta är början av vecka nio. 4 00:00:14,620 --> 00:00:18,240 Och vad vi trodde vi skulle göra i dag är inte Stäng bara kapitlet om förra veckans 5 00:00:18,240 --> 00:00:22,670 material där vi fokuserade på server sidowebbprogrammering med PHP och SQL, 6 00:00:22,670 --> 00:00:23,549 vissa databas grejer. 7 00:00:23,549 --> 00:00:25,590 Vi pratar om en bit av säkerhet i dag och sedan 8 00:00:25,590 --> 00:00:29,590 Övergången till ett klientsidan programmering språk kallas JavaScript. 9 00:00:29,590 --> 00:00:31,330 Men först, en del inlösen. 10 00:00:31,330 --> 00:00:35,030 >> Ni minns kanske att på Onsdag, jag ut 11 00:00:35,030 --> 00:00:37,550 att skriva en webbplats som tog i användarens input 12 00:00:37,550 --> 00:00:41,120 av ett HTML-formulär som sedan lagras den användaren ingångsnamn, telefon 13 00:00:41,120 --> 00:00:43,124 siffror, och mobiltelefon bärare i databasen. 14 00:00:43,124 --> 00:00:45,540 Och sedan hade jag en liten kommando line script skrivet i PHP 15 00:00:45,540 --> 00:00:47,956 som var tänkt att iterera över raderna i databasen 16 00:00:47,956 --> 00:00:49,400 och skicka ut textmeddelanden. 17 00:00:49,400 --> 00:00:53,870 Trots flera, flera försök, vi fick som arbetande i slutet. 18 00:00:53,870 --> 00:00:57,820 >> Så jag tillbringat hela den här veckan arbetar På denna kod för att få oss förbi den punkt 19 00:00:57,820 --> 00:01:01,220 där vi slutade, där alla Jag fick i slutet av onsdag 20 00:01:01,220 --> 00:01:05,500 var detta textmeddelande från Margo som jag kämpade, 21 00:01:05,500 --> 00:01:09,940 följt av ett textmeddelande från en annan klasskamrat, du har fått den här David. 22 00:01:09,940 --> 00:01:14,030 Följt av den här, underbart uppmuntrande. 23 00:01:14,030 --> 00:01:15,840 Hålls på att gå, mycket uppmuntrande. 24 00:01:15,840 --> 00:01:20,960 Jag fick nästan det tills then-- och det är tonen vi slutade på onsdagen. 25 00:01:20,960 --> 00:01:25,850 Och sedan faktiskt kanske min favorit, en stund senare kom det in. 26 00:01:25,850 --> 00:01:27,000 Fan Live Stream. 27 00:01:27,000 --> 00:01:31,080 >> Så idag, vi fixa detta med en snabb titta på vad jag har gjort sedan dess. 28 00:01:31,080 --> 00:01:35,440 Så allt detta koden finns tillgänglig online från förra veckans, vecka åtta, 29 00:01:35,440 --> 00:01:36,300 källkod. 30 00:01:36,300 --> 00:01:39,425 Och du kommer att se att jag gick igenom, och jag faktiskt städat upp saker och ting lite. 31 00:01:39,425 --> 00:01:42,080 Jag presenterade ett par andra funktioner i en SQL-databas. 32 00:01:42,080 --> 00:01:45,300 Till exempel, i stället för se bara till bärare av var röding 33 00:01:45,300 --> 00:01:47,310 som jag tror att jag gjorde i farten förra veckan. 34 00:01:47,310 --> 00:01:49,820 Jag stället definierat det som vad som kallas en enum. 35 00:01:49,820 --> 00:01:53,310 >> Och en del av er kanske har sett det här som vi undersökt C. Enum är faktiskt 36 00:01:53,310 --> 00:01:56,820 en funktion i C, där du kan räkna upp en massa konstanter 37 00:01:56,820 --> 00:01:59,640 och tilldela dem automatiska värden, som en, två, tre, fyra 38 00:01:59,640 --> 00:02:01,330 utan att hårda kodnummer. 39 00:02:01,330 --> 00:02:04,780 Så SQL stöder densamma, varvid om du har en databasfält som du bara 40 00:02:04,780 --> 00:02:09,389 vill ta på en av finit värden, kan du bokstavligen ange det 41 00:02:09,389 --> 00:02:13,120 som jag har gjort det för fyra populära amerikanska mobiltelefonföretag. 42 00:02:13,120 --> 00:02:13,819 >> Så jag gjorde det. 43 00:02:13,819 --> 00:02:16,610 Och jag gjorde ett antal förändringar som ja, av vilka de viktigaste 44 00:02:16,610 --> 00:02:20,090 var att få e-post som arbetar, därför minns, att detta program åberopas som 45 00:02:20,090 --> 00:02:23,470 allmänt kallas ett mail till SMS-gateway, som är bara 46 00:02:23,470 --> 00:02:27,670 ett finare sätt att säga att Verizon, och AT & T, och andra folks stödja en server, 47 00:02:27,670 --> 00:02:30,740 vari om den mottar e-post, omvandlar den till SMS 48 00:02:30,740 --> 00:02:33,290 och skickar ut en text meddelande till någons telefon. 49 00:02:33,290 --> 00:02:37,010 Så om jag gjorde det på rätt sätt, här är en ny och förbättrad form 50 00:02:37,010 --> 00:02:39,259 som kommer att prata med ny och förbättrad kod, som 51 00:02:39,259 --> 00:02:40,300 du kan spela online. 52 00:02:40,300 --> 00:02:44,140 Och det kommer förhoppningsvis göra min telefon pip på bara ett ögonblick. 53 00:02:44,140 --> 00:02:47,240 >> Så först kommer jag att skriva in mitt namn. 54 00:02:47,240 --> 00:02:51,400 För det andra, jag kommer inte att göra detta den här gången. 55 00:02:51,400 --> 00:02:53,920 Jag kommer att göra Inspektera Element. 56 00:02:53,920 --> 00:02:56,710 Och detta är bara en liten sak så jag inte 57 00:02:56,710 --> 00:02:59,250 skapa timmars postproduktion arbeta som jag gjorde förra gången. 58 00:02:59,250 --> 00:03:02,300 Det är nu mitt telefonnummer. 59 00:03:02,300 --> 00:03:03,560 >> Jag ska välja Verizon. 60 00:03:03,560 --> 00:03:10,260 Och här, låt oss slå på mikrofonen Här, och syftar detta på min mobiltelefon. 61 00:03:10,260 --> 00:03:13,130 Jag kommer att klicka på Registrera, vilken förhoppningsvis 62 00:03:13,130 --> 00:03:14,530 lägga in den i databasen. 63 00:03:14,530 --> 00:03:16,780 Nu ska jag gå till kommandorad program, som 64 00:03:16,780 --> 00:03:20,825 minns kallades dot slash text, och håll tummarna. 65 00:03:20,825 --> 00:03:24,092 66 00:03:24,092 --> 00:03:26,527 Här går vi. 67 00:03:26,527 --> 00:03:27,501 >> [PHONE DINGS] 68 00:03:27,501 --> 00:03:28,962 >> [Applåder] 69 00:03:28,962 --> 00:03:31,815 70 00:03:31,815 --> 00:03:34,940 DAVID MALAN: Så roligare än this-- det är roligt, naturligtvis, om jag får in den. 71 00:03:34,940 --> 00:03:38,004 Men det är roligare, tänkte jag, om vi skapat en av dessa film stunder 72 00:03:38,004 --> 00:03:40,420 där som något riktigt hemskt har hänt i världen, 73 00:03:40,420 --> 00:03:42,860 och som alla NSA folkets mobiltelefoner börjar pipa 74 00:03:42,860 --> 00:03:44,860 med textmeddelanden göra dem uppmärksamma på detta faktum. 75 00:03:44,860 --> 00:03:47,026 Så jag tänkte att vi skulle försöka att återskapa samma sak här, 76 00:03:47,026 --> 00:03:49,610 vari inte använder en databas, Jag stället i förväg 77 00:03:49,610 --> 00:03:51,490 skrev ett program som ser ut så här. 78 00:03:51,490 --> 00:03:53,660 >> Detta är en index.php-- och jag sätter in den här koden på nätet 79 00:03:53,660 --> 00:03:56,710 som well-- som tydligen bara återger form.php, 80 00:03:56,710 --> 00:04:00,990 med hjälp av en MVC stil paradigm som vi prata om mer ingående i problem set 81 00:04:00,990 --> 00:04:01,650 sju. 82 00:04:01,650 --> 00:04:02,910 Denna form är ganska enkel. 83 00:04:02,910 --> 00:04:06,634 Det kommer att underkasta sig en fil som heter here.php via post. 84 00:04:06,634 --> 00:04:09,300 Och det är uppenbarligen kommer att ställa efter ett namn och ett telefonnummer, 85 00:04:09,300 --> 00:04:11,400 och sedan via av s.k. Välj menyn, det är 86 00:04:11,400 --> 00:04:14,250 kommer att ge dig minst fyra populära amerikanska mobiltelefonföretag, 87 00:04:14,250 --> 00:04:17,470 och sedan kan du på ett effektivt sätt ta närvaro genom att klicka här. 88 00:04:17,470 --> 00:04:20,471 >> Och här, under tiden, kommer att låna en del av koden från förra gången. 89 00:04:20,471 --> 00:04:22,553 Och om du bara skummar detta, ser du att det finns 90 00:04:22,553 --> 00:04:23,900 en hel massa felkontroll. 91 00:04:23,900 --> 00:04:26,640 Men skönheten i slutet är att vi inte skriva till en databas i dag. 92 00:04:26,640 --> 00:04:29,130 Vi håller det enkelt och bara skicka ut förhoppningsvis 93 00:04:29,130 --> 00:04:32,190 ett textmeddelande via funktions I skrev under de senaste dagarna samtal 94 00:04:32,190 --> 00:04:36,270 Text, som är i funktioner. php, vilket återigen är tillgängliga online. 95 00:04:36,270 --> 00:04:38,210 >> Så om du vill ta del av detta. 96 00:04:38,210 --> 00:04:40,190 Vi kommer inte att lagra något. 97 00:04:40,190 --> 00:04:43,809 Gå till denna URL här i realtid. 98 00:04:43,809 --> 00:04:46,850 Skicka inte in det ännu, men låt oss se om vi kan ha en av dessa filmer 99 00:04:46,850 --> 00:04:49,830 stunder där allas mobiltelefon börjar pipa, förhoppningsvis bara 100 00:04:49,830 --> 00:04:53,580 en gång i år till skillnad från år 2011 där det gick fruktansvärt snett. 101 00:04:53,580 --> 00:04:58,910 Och när du går till den adressen, bör du se en super enkel form 102 00:04:58,910 --> 00:05:03,884 att om du har ett namn, en mobiltelefon nummer, samt en mobiltelefon bärare som 103 00:05:03,884 --> 00:05:06,175 matchar listan där, gå vidare och fyll i formuläret. 104 00:05:06,175 --> 00:05:07,880 Men slå inte lämna ännu. 105 00:05:07,880 --> 00:05:10,850 >> Formuläret kommer att se ut så här. 106 00:05:10,850 --> 00:05:13,660 Gå vidare och skriv in ditt namn, telefonnummer. 107 00:05:13,660 --> 00:05:17,670 Oop, någon kommer före kurvan. 108 00:05:17,670 --> 00:05:18,170 Det är OK. 109 00:05:18,170 --> 00:05:19,340 OK, alla har fyllt i formuläret. 110 00:05:19,340 --> 00:05:21,400 Detta bör fungera på ett telefon, även om du vill. 111 00:05:21,400 --> 00:05:23,695 Okej, på era platser, färdiga, gå. 112 00:05:23,695 --> 00:05:24,195 Hit här. 113 00:05:24,195 --> 00:05:27,275 114 00:05:27,275 --> 00:05:27,775 Vad? 115 00:05:27,775 --> 00:05:31,140 116 00:05:31,140 --> 00:05:31,640 Nej. 117 00:05:31,640 --> 00:05:34,410 118 00:05:34,410 --> 00:05:40,250 Jag svär vid Gud, testade jag detta flera gånger i dag. 119 00:05:40,250 --> 00:05:41,720 Fattar du? 120 00:05:41,720 --> 00:05:43,145 >> [Inplacering UTTRYCKER] 121 00:05:43,145 --> 00:05:46,470 122 00:05:46,470 --> 00:05:49,560 >> DAVID MALAN: OK, användarfel kanske. 123 00:05:49,560 --> 00:05:50,550 Det är två. 124 00:05:50,550 --> 00:05:53,300 Det fungerade för två av en några hundra, tre, fyra. 125 00:05:53,300 --> 00:05:55,940 OK, det är bra. 126 00:05:55,940 --> 00:05:58,520 Fyra av fem för riktighet vad sägs om. 127 00:05:58,520 --> 00:05:59,810 >> Så vad var det som hände? 128 00:05:59,810 --> 00:06:02,727 Så förmodligen, utan att se din skärmar, varför skulle det ha errored? 129 00:06:02,727 --> 00:06:05,518 Det är nog att vi var bara försöker göra för många anslutningar 130 00:06:05,518 --> 00:06:08,110 Harvard-postserver på en en gång från samma IP-adress. 131 00:06:08,110 --> 00:06:10,740 Jag bara gissar eftersom jag inte gjorde det har lyxen av att testa 132 00:06:10,740 --> 00:06:13,220 denna kod med vissa 300 personer i förväg 133 00:06:13,220 --> 00:06:16,040 men nu inser att att åtminstone bör 134 00:06:16,040 --> 00:06:18,250 har fått jobbet gjort denna gång. 135 00:06:18,250 --> 00:06:22,880 >> Okej, så varför är detta allt mer relevant för vad som händer? 136 00:06:22,880 --> 00:06:24,900 Väl först, en snabb några tillkännagivanden. 137 00:06:24,900 --> 00:06:29,350 Så en, om du skulle vilja gå med Chang, och Nick, och andra på lunch på fredag, 138 00:06:29,350 --> 00:06:32,400 gör RSVP vid vanlig webbadress där. 139 00:06:32,400 --> 00:06:35,650 Om du funderar på att koncentrera i eller göra en sekundär i CS, 140 00:06:35,650 --> 00:06:38,941 oavsett om du är en sophomore, eller nybörjare, eller till och med junior eller senior på denna punkt 141 00:06:38,941 --> 00:06:42,490 och fortfarande kan klämma in kurserna, inse att verkstadsskolan 142 00:06:42,490 --> 00:06:45,620 samlar gratis Ben och Jerrys glass och råd 143 00:06:45,620 --> 00:06:48,910 kort efter denna onsdag klass vid 04:00 på CS byggnaden 144 00:06:48,910 --> 00:06:49,771 vid Maxwell Dworkin. 145 00:06:49,771 --> 00:06:51,520 Om detta är för snabb på skärmen, bara gå 146 00:06:51,520 --> 00:06:55,260 att cs50.harvard.edu för en länk till Facebook-evenemanget 147 00:06:55,260 --> 00:06:57,140 där du kan se fler detaljer. 148 00:06:57,140 --> 00:07:01,390 >> Under tiden tänkte jag att jag skulle rätta en annan sak jag goofed på onsdagen. 149 00:07:01,390 --> 00:07:04,400 Visar sig att Marks ID på Facebook var inte tre. 150 00:07:04,400 --> 00:07:05,230 Det var fyra. 151 00:07:05,230 --> 00:07:08,330 Det visade sig att han hade mer tester konton än jag minns. 152 00:07:08,330 --> 00:07:12,400 Men vad detta kändes som en möjlighet göra är att dra upp en URL som denna. 153 00:07:12,400 --> 00:07:16,680 >> Så visar det sig att Facebook har en API, Application Programming Interface, 154 00:07:16,680 --> 00:07:20,070 som är en mekanism som gör du kan begära uppgifter programmering 155 00:07:20,070 --> 00:07:24,480 på Facebook och få tillbaka maskinen läsbar information, inte webbsidor 156 00:07:24,480 --> 00:07:28,690 men bara rå text, något kallas JavaScript Object Notation. 157 00:07:28,690 --> 00:07:32,150 Och faktiskt, om jag besöker detta URL, och zooma in, som standard, 158 00:07:32,150 --> 00:07:34,960 Detta är Marks offentligt tillgänglig information. 159 00:07:34,960 --> 00:07:37,430 >> Och intressant detalj här är bara det att hans ID 160 00:07:37,430 --> 00:07:40,670 är verkligen, nummer fyra, som jag insåg så fort jag gjorde detta. 161 00:07:40,670 --> 00:07:44,260 Du kan göra det själv om du vet ditt Facebook-användarnamn om du har en. 162 00:07:44,260 --> 00:07:45,440 Bara skriva det där uppe där. 163 00:07:45,440 --> 00:07:46,640 Och inget av detta är privat. 164 00:07:46,640 --> 00:07:48,670 Jag gör bara detta ännu i inkognitoläge. 165 00:07:48,670 --> 00:07:49,900 Så jag inte ens loggat in. 166 00:07:49,900 --> 00:07:54,440 Och du ser att jag tydligen var användarnummer 6454 167 00:07:54,440 --> 00:07:56,480 på Facebook, vilket inte synd i dessa dagar. 168 00:07:56,480 --> 00:07:59,900 Så hur som helst, kommer du också se Ytterligare information finns. 169 00:07:59,900 --> 00:08:02,150 >> Och den användbara aspekten av det är att du 170 00:08:02,150 --> 00:08:06,890 skulle kunna skriva en egen mjukvara som på något sätt integrerar uppgifter som denna 171 00:08:06,890 --> 00:08:08,170 in i din egen applikation. 172 00:08:08,170 --> 00:08:10,650 Du kan ge användarna möjlighet att logga in din hemsida, 173 00:08:10,650 --> 00:08:14,190 inte använder sina egna användarnamn och lösenord men kanske deras Facebook-inloggning 174 00:08:14,190 --> 00:08:16,170 och annan information även om sina vänner, 175 00:08:16,170 --> 00:08:18,740 om de godkänner sådana, eller liknande. 176 00:08:18,740 --> 00:08:21,430 Så notera att CS50 också, har några av sina egna API: er, 177 00:08:21,430 --> 00:08:24,620 en för kurskatalogdata, några för kramar menyerna i matsalen 178 00:08:24,620 --> 00:08:26,730 hallar, alla av byggnader och platser 179 00:08:26,730 --> 00:08:30,930 på campus har vi ett API för såväl att du kan fråga på samma sätt och få 180 00:08:30,930 --> 00:08:35,520 back textdata som du kan integrera i en PHP eller JavaScript, eller till och med, 181 00:08:35,520 --> 00:08:38,320 men mer sällan, en C baserade slutprojekt. 182 00:08:38,320 --> 00:08:41,190 >> Faktum framåt för final projekt finns några delmål. 183 00:08:41,190 --> 00:08:42,980 Du fick ett mail från oss häromdagen. 184 00:08:42,980 --> 00:08:45,761 Inse att förslaget beror denna kommande måndag. 185 00:08:45,761 --> 00:08:49,010 Det är inte nödvändigtvis bindande, men du behöver ta emot dina undervisnings medmänniskor 186 00:08:49,010 --> 00:08:51,260 godkännande innan förändringar därefter. 187 00:08:51,260 --> 00:08:54,280 Och sedan framåt är en antal andra milstolpar. 188 00:08:54,280 --> 00:08:56,542 >> Så för att retas med dig också, med vissa möjligheter, 189 00:08:56,542 --> 00:08:58,250 Vi har ett gäng dessa nyans glödlampor. 190 00:08:58,250 --> 00:09:01,190 Och en del av er har nu någon av dessa i ditt studentrum också. 191 00:09:01,190 --> 00:09:02,920 Och de har också ett API. 192 00:09:02,920 --> 00:09:07,300 Så minns dessa binära lökar veckor sedan som Dan Bradley och Ansel 193 00:09:07,300 --> 00:09:08,780 Duff skapat för oss. 194 00:09:08,780 --> 00:09:12,560 De använde en programvara gränssnitt till denna lampa, som för tillfället 195 00:09:12,560 --> 00:09:15,232 är ansluten till el och sedan via trådlöst 196 00:09:15,232 --> 00:09:17,690 är ansluten till en liten sak kallas bron här nere, 197 00:09:17,690 --> 00:09:21,280 som en liten router proprietär till denna enhet. 198 00:09:21,280 --> 00:09:26,540 >> Men det visar sig, om jag vet hur man skicka HTTP-meddelanden, som vi alla nu gör, 199 00:09:26,540 --> 00:09:31,670 Jag kan skicka ett meddelande som detta till denna lampa för att slå på eller av 200 00:09:31,670 --> 00:09:34,000 eller gör valfritt antal andra operationer på det. 201 00:09:34,000 --> 00:09:36,110 Lägg märke till att det inte blir, det är inte posta. 202 00:09:36,110 --> 00:09:37,760 Det finns en annan som heter put. 203 00:09:37,760 --> 00:09:39,630 Det finns faktiskt ett par andra sådana verb. 204 00:09:39,630 --> 00:09:42,920 Men märker att det finns en väg där, slash API, snedstreck ny utvecklare, 205 00:09:42,920 --> 00:09:44,990 slash ljus, snedstreck en, snedstreck staten. 206 00:09:44,990 --> 00:09:49,060 >> Det är tydligen bara väg som företaget, Philips, 207 00:09:49,060 --> 00:09:51,640 beslutade du måste träffa med en HTTP-begäran 208 00:09:51,640 --> 00:09:55,010 om du vill ändra tillståndet av löken med HTTP 1.1. 209 00:09:55,010 --> 00:09:56,380 Då märker den tomma raden. 210 00:09:56,380 --> 00:10:00,170 Och sedan slutligen vad som ser ut typ av en uppsättning av något slag, 211 00:10:00,170 --> 00:10:04,730 detta igen kommer att kallas JavaScript Object Notation, eller Jason. 212 00:10:04,730 --> 00:10:08,000 Och vad du ser här är att det finns tre nyckelpar value. 213 00:10:08,000 --> 00:10:09,115 >> En nyckel heter på. 214 00:10:09,115 --> 00:10:10,990 Och dess värde tydligen kommer att vara sant. 215 00:10:10,990 --> 00:10:13,612 Ljusstyrkan är 128, vilket är någon form av int. 216 00:10:13,612 --> 00:10:15,820 Och sedan övergångstiden är noll, vilket uppenbarligen är 217 00:10:15,820 --> 00:10:17,970 hur lång tid det kommer att vidta för att vända denna sak på. 218 00:10:17,970 --> 00:10:19,890 >> Så just nu denna lampa är släckt. 219 00:10:19,890 --> 00:10:22,880 Men om jag gör exakt this-- låt mig gå till en liten fusklapp 220 00:10:22,880 --> 00:10:25,200 att Dan inrättades advance-- och jag kommer 221 00:10:25,200 --> 00:10:27,920 att gå vidare och kopiera följande kommando. 222 00:10:27,920 --> 00:10:30,200 Curl, som några av er kanske har gleaned på CS50 223 00:10:30,200 --> 00:10:35,080 Diskutera är ett verktyg som Telnet sådan att man kan simulera HTTP-förfrågningar, 224 00:10:35,080 --> 00:10:36,360 specifikt sätter. 225 00:10:36,360 --> 00:10:39,710 Jag kan skicka dessa data, specifikt vad vi just 226 00:10:39,710 --> 00:10:43,430 såg en stund sedan specifikt till denna URL här. 227 00:10:43,430 --> 00:10:46,310 Och sedan Curl kommer att hantera alla nödvändiga rubriker 228 00:10:46,310 --> 00:10:47,600 och tolka det på. 229 00:10:47,600 --> 00:10:54,700 >> Så allt jag behöver göra är att kopiera detta till ett terminalfönster och sedan trycka Enter. 230 00:10:54,700 --> 00:10:56,000 Och glödlampan tänds. 231 00:10:56,000 --> 00:10:59,060 Och detta allt går igenom min dator trådlöst 232 00:10:59,060 --> 00:11:01,960 på något sätt ner till bron, som Därefter talar till denna glödlampa. 233 00:11:01,960 --> 00:11:02,960 Jag kan göra något annat. 234 00:11:02,960 --> 00:11:07,050 Jag kan göra det här go rött till exempel. 235 00:11:07,050 --> 00:11:11,040 Jag kan till exempel göra denna sak går grönt. 236 00:11:11,040 --> 00:11:12,220 Jag kan göra det gå blå. 237 00:11:12,220 --> 00:11:14,760 >> Och varsel var och en av dessa fall, alla som jag förändras 238 00:11:14,760 --> 00:11:18,540 är den så kallade nyans värde faktiskt ge det lite färg. 239 00:11:18,540 --> 00:11:20,320 Så låt mig klistrar här i också. 240 00:11:20,320 --> 00:11:21,000 Nu är det blått. 241 00:11:21,000 --> 00:11:24,672 >> Och du kan göra ännu snyggare saker where-- låt oss gå till grönt. 242 00:11:24,672 --> 00:11:26,630 Och jag kunde göra detta på kurs med min egen kod. 243 00:11:26,630 --> 00:11:30,670 Men även API själv stöder funky operationer 244 00:11:30,670 --> 00:11:35,510 så här, kommer som nu bry oss för de kommande 30 sekunder. 245 00:11:35,510 --> 00:11:39,170 >> Så det är ett smakprov på vad du kanske göra med ett API, detta involverar 246 00:11:39,170 --> 00:11:40,010 glödlampor. 247 00:11:40,010 --> 00:11:42,510 Observera att CS50 har ett par par av Google Glass om du skulle 248 00:11:42,510 --> 00:11:45,380 vilja att ta itu med något i dessa linjer, Arduino Unos, vilket 249 00:11:45,380 --> 00:11:48,670 är små små datorer, i huvudsak, på en liten kretskort 250 00:11:48,670 --> 00:11:50,470 att du kan ansluta ledningar och andra saker 251 00:11:50,470 --> 00:11:52,732 till och faktiskt kontroll er verklig miljö. 252 00:11:52,732 --> 00:11:54,940 Och så finns det ett par av nya leksaker som vi har. 253 00:11:54,940 --> 00:11:59,294 Detta bokstavligen bara kom häromdagen med post, en Myo Armband. 254 00:11:59,294 --> 00:12:01,710 Och jag tänkte att det är ett sätt att få dig upphetsad om projekt 255 00:12:01,710 --> 00:12:03,720 som du kan använda med denna hårdvara skulle 256 00:12:03,720 --> 00:12:08,900 vara att spela detta korta klipp som de använder för att retas folks 257 00:12:08,900 --> 00:12:10,500 att vi nu lever i framtiden. 258 00:12:10,500 --> 00:12:13,494 259 00:12:13,494 --> 00:12:15,490 >> [MUSIK SPELA] 260 00:12:15,490 --> 00:13:33,410 261 00:13:33,410 --> 00:13:37,109 >> DAVID MALAN: Så på bara några veckor, du också kan vara så cool på CS50 mässan. 262 00:13:37,109 --> 00:13:39,150 En annan enhet som vi har ett gäng att vi är 263 00:13:39,150 --> 00:13:42,090 gärna låna ut till projekt kallas en rörelsekänsliga handkontrollen. 264 00:13:42,090 --> 00:13:45,030 Detta är en liten USB-enhet du ansluter till en dator som 265 00:13:45,030 --> 00:13:47,520 kan du interagera med din bärbara dator, Mac eller PC, 266 00:13:47,520 --> 00:13:51,570 som om du hade som en Xbox Kinect och faktiskt göra fysiska rörelser mycket 267 00:13:51,570 --> 00:13:54,509 som vi ser i den här framtidsvision. 268 00:13:54,509 --> 00:13:56,505 >> [MUSIK SPELA] 269 00:13:56,505 --> 00:15:03,380 270 00:15:03,380 --> 00:15:06,260 >> DAVID MALAN: Så även om du har ingen aning om hur något sådant 271 00:15:06,260 --> 00:15:10,050 skulle kunna uppfinnas eller arbete på en hårdvarunivå, oavsett. 272 00:15:10,050 --> 00:15:13,520 Även efter bara några månader av CS50, och en förståelse för programmering 273 00:15:13,520 --> 00:15:19,460 mer allmänt, och webbprogrammering mer nyligen, och sedan även API: er, och HTTP, 274 00:15:19,460 --> 00:15:21,830 du har tillgång via programvaru API om du 275 00:15:21,830 --> 00:15:24,680 vill låna en av dessa enheter att faktiskt prata med den 276 00:15:24,680 --> 00:15:27,180 och inte behöver oroa sig för den underliggande genomförande 277 00:15:27,180 --> 00:15:30,220 information, vilket är helt överensstämmer med denna föreställning om skiktning 278 00:15:30,220 --> 00:15:33,610 en abstraktion som vi har sett över hela terminen. 279 00:15:33,610 --> 00:15:37,990 >> Så även under helgen, såg ett par bitar av nyheter. 280 00:15:37,990 --> 00:15:40,640 Gå först, gå på seminarier om du skulle vilja lära sig något 281 00:15:40,640 --> 00:15:42,160 mer på valfritt antal ämnen. 282 00:15:42,160 --> 00:15:43,340 Se URL där. 283 00:15:43,340 --> 00:15:45,890 Och den här skickades till mig av Chang, som ni vet, 284 00:15:45,890 --> 00:15:47,850 vem skriver ut vår armé av elefanter. 285 00:15:47,850 --> 00:15:49,910 Och det var en rubrik som följer. 286 00:15:49,910 --> 00:15:51,280 Jag är livrädd för min nya TV. 287 00:15:51,280 --> 00:15:54,301 Varför jag är rädd för att vända detta sak på och du skulle vara för. 288 00:15:54,301 --> 00:15:56,050 Så vi är nu på peka på terminen, 289 00:15:56,050 --> 00:15:58,860 också, där även om du har den minsta förståelse 290 00:15:58,860 --> 00:16:02,620 hur banan fungerar och HTTP, och säkerhet, saker som detta 291 00:16:02,620 --> 00:16:03,980 bör börja för att fånga ögat. 292 00:16:03,980 --> 00:16:07,450 Men också, kommer du att förstå om dessa saker är eller inte är 293 00:16:07,450 --> 00:16:08,430 verkliga hot. 294 00:16:08,430 --> 00:16:10,940 >> Så jag tog några utdrag från artikeln här. 295 00:16:10,940 --> 00:16:12,540 Och historien är som följer. 296 00:16:12,540 --> 00:16:14,300 Jag är nu ägare till en ny smart tv, vilket 297 00:16:14,300 --> 00:16:18,470 lovar att leverera streaming multimedieinnehåll, spel, app, 298 00:16:18,470 --> 00:16:21,450 sociala medier och internet surfning, oh och TV också. 299 00:16:21,450 --> 00:16:24,410 Det enda problemet är att jag är nu rädd för att använda den, säger författaren. 300 00:16:24,410 --> 00:16:29,592 Du skulle vara också, om du läser igenom den 46 sida sekretesspolicy för din TV. 301 00:16:29,592 --> 00:16:31,800 Mängden data här sak samlar är häpnadsväckande. 302 00:16:31,800 --> 00:16:35,710 Den loggar var, när, hur, och hur länge du använder TV: n. 303 00:16:35,710 --> 00:16:38,190 Det ställer tracking cookies, som vi har diskuterat, 304 00:16:38,190 --> 00:16:40,560 och fyrar konstruerade att upptäcka när du har 305 00:16:40,560 --> 00:16:43,185 visade särskilt innehåll eller ett visst e-postmeddelande 306 00:16:43,185 --> 00:16:45,230 om du vill kontrollera e-post på din TV. 307 00:16:45,230 --> 00:16:48,430 Det registrerar de program du använda, de webbplatser du besöker, 308 00:16:48,430 --> 00:16:52,280 och hur du interagerar med innehåll, gör allt detta via din smarta tv. 309 00:16:52,280 --> 00:16:55,470 Det också, creepier yet-- det är min addition-- 310 00:16:55,470 --> 00:16:58,140 har en inbyggd kamera med ansiktsigenkänning. 311 00:16:58,140 --> 00:17:01,010 >> Syftet är att åstadkomma rörelsekontroll för TV 312 00:17:01,010 --> 00:17:05,490 och ger dig möjlighet att logga in på personligt konto med ditt ansikte. 313 00:17:05,490 --> 00:17:08,940 På uppåtsidan och bilderna är sparas på TV istället för uppladdade 314 00:17:08,940 --> 00:17:09,940 till en företagsserver. 315 00:17:09,940 --> 00:17:12,520 På nedåtsidan, internet anslutning gör hela TV 316 00:17:12,520 --> 00:17:14,811 sårbara för hackare som ha visat förmåga 317 00:17:14,811 --> 00:17:16,700 att ta fullständig kontroll över maskinen. 318 00:17:16,700 --> 00:17:20,880 >> Mer oroande, som om det inte var smart nog, är mikrofonen. 319 00:17:20,880 --> 00:17:23,599 TV har en röst igenkänningsfunktion 320 00:17:23,599 --> 00:17:26,859 som låter tittarna att styra skärmen med röstkommandon. 321 00:17:26,859 --> 00:17:30,290 Men tjänsten kommer med en ganska illavarslande varning. 322 00:17:30,290 --> 00:17:33,030 Tänk på att om dina talade ord innefattar 323 00:17:33,030 --> 00:17:36,210 personlig eller annan känslig information att information 324 00:17:36,210 --> 00:17:40,310 kommer att vara bland de data som fångas och överförs till en tredje part. 325 00:17:40,310 --> 00:17:40,870 Fick det? 326 00:17:40,870 --> 00:17:45,860 Säg inte personlig eller känslig grejer framför TV: n. 327 00:17:45,860 --> 00:17:47,280 >> Så det här är faktiskt på riktigt. 328 00:17:47,280 --> 00:17:50,530 Och det är svårt att inte se om du gå till Best Buy eller liknande för TV-apparater 329 00:17:50,530 --> 00:17:51,030 dessa dagar. 330 00:17:51,030 --> 00:17:52,540 De är alla smarta på något sätt. 331 00:17:52,540 --> 00:17:54,740 Och de får smartare och creepier. 332 00:17:54,740 --> 00:17:57,490 Och de är helt enkelt att samla in data på ett sätt som vi har talat om 333 00:17:57,490 --> 00:18:01,840 och sedan ladda upp den via HTTP eller något annat protokoll till en viss server. 334 00:18:01,840 --> 00:18:05,720 >> Så det här var en rolig artikel i detta online webbplats 335 00:18:05,720 --> 00:18:08,940 här, som talade om en synnerhet fel eller felaktiga koden 336 00:18:08,940 --> 00:18:11,340 att vi faktiskt kan knyta i förra veckans diskussion. 337 00:18:11,340 --> 00:18:15,730 Så denna rubrik var som följer, historien går här, 338 00:18:15,730 --> 00:18:18,720 Josh Breckman arbetade för en företag som landade ett kontrakt 339 00:18:18,720 --> 00:18:22,390 att utveckla ett content management systemet, eller CMS som de kallas, 340 00:18:22,390 --> 00:18:24,380 för en ganska stor regeringens hemsida. 341 00:18:24,380 --> 00:18:27,300 Mycket av den berörda projektet utveckla ett content management system 342 00:18:27,300 --> 00:18:29,840 så att de anställda skulle vara kunna bygga och underhålla 343 00:18:29,840 --> 00:18:31,877 den ständigt föränderliga innehåll för deras webbplats. 344 00:18:31,877 --> 00:18:34,210 Det gick ganska bra för några dagar efter går live. 345 00:18:34,210 --> 00:18:37,020 Men på dag sex, det gick inte så bra. 346 00:18:37,020 --> 00:18:39,500 Allt innehåll på hemsida hade helt försvunnit. 347 00:18:39,500 --> 00:18:42,950 Och alla sidor ledde till standard, Var vänlig ange innehålls webbsida. 348 00:18:42,950 --> 00:18:43,810 Hoppsan. 349 00:18:43,810 --> 00:18:46,080 Josh kallades in till utreda och märkte 350 00:18:46,080 --> 00:18:49,390 att en särskilt besvärlig extern IP-adress hade 351 00:18:49,390 --> 00:18:53,380 gått in och raderade alla innehållet i systemet. 352 00:18:53,380 --> 00:18:56,290 >> IP-adressen inte tillhörde till vissa utomeuropeiska hacker böjd 353 00:18:56,290 --> 00:18:58,340 på att förstöra hjälp statlig information. 354 00:18:58,340 --> 00:19:05,190 Det beslutades att googlebot.com, Googles egen webbsökning spindel. 355 00:19:05,190 --> 00:19:06,010 Hoppsan. 356 00:19:06,010 --> 00:19:09,150 Efter lite forskning och förvränga runt för att hitta en noncorrupt backup, 357 00:19:09,150 --> 00:19:10,180 Josh hittat problemet. 358 00:19:10,180 --> 00:19:12,700 >> En användare hade kopierat och klistras del innehåll från en 359 00:19:12,700 --> 00:19:15,670 sida till en annan, inklusive en Redigera hyperlänk 360 00:19:15,670 --> 00:19:17,577 att redigera innehållet på sidan. 361 00:19:17,577 --> 00:19:20,160 Normalt skulle detta inte vara en fråga eftersom en utanför användaren skulle 362 00:19:20,160 --> 00:19:24,320 behöva ange ett användarnamn och lösenord, men CMS autentiseringssystem, 363 00:19:24,320 --> 00:19:27,520 inloggningssystemet, inte tog hänsyn till 364 00:19:27,520 --> 00:19:30,980 sofistikerad hacking tekniker för Google Spider. 365 00:19:30,980 --> 00:19:31,700 Hoppsan. 366 00:19:31,700 --> 00:19:33,610 >> Som det visar sig, Google Spider använder inte 367 00:19:33,610 --> 00:19:36,950 cookies, vilket innebär att det kan lätt förbi en check på 368 00:19:36,950 --> 00:19:39,840 loggas på kaka inställd för att vara falsk. 369 00:19:39,840 --> 00:19:42,620 Det skall heller inte uppmärksamma JavaScript, som normalt skulle 370 00:19:42,620 --> 00:19:45,170 uppmana och omdirigera användare vem har inte loggat in. 371 00:19:45,170 --> 00:19:48,610 Det spelar dock följa varje hyperlänk på varje sida om den, 372 00:19:48,610 --> 00:19:51,700 inklusive dem med Ta bort sida i titeln. 373 00:19:51,700 --> 00:19:52,650 Hoppsan. 374 00:19:52,650 --> 00:19:56,070 >> Så vad betyder detta i mer tekniska men ganska tillgängligt sätt? 375 00:19:56,070 --> 00:19:58,340 Det betyder bara att hela deras hemsida, 376 00:19:58,340 --> 00:20:02,287 de hade webbadresser inte olik denna som du kan se i problembild sju. 377 00:20:02,287 --> 00:20:04,620 Recall i problemet satt sju eller har problem satt sju 378 00:20:04,620 --> 00:20:06,411 att du utmanas, bl 379 00:20:06,411 --> 00:20:08,570 att sälja aktier till förmån för användarna. 380 00:20:08,570 --> 00:20:14,010 Men genomförandet av denna funktion med hjälp av får via hyperlänkar i ditt användarnamn 381 00:20:14,010 --> 00:20:16,880 gränssnitt, förmodligen inte den smartaste idén 382 00:20:16,880 --> 00:20:20,300 för om din webbplats är på något sätt nås antingen genom en människa 383 00:20:20,300 --> 00:20:23,577 vem klicka runt eller köpa en bot som Googles eller en Spider 384 00:20:23,577 --> 00:20:26,160 som de kallas det är bara söka webben försöker index 385 00:20:26,160 --> 00:20:29,060 webben som en sökmotor, de kunde mycket lätt 386 00:20:29,060 --> 00:20:31,340 hit via få denna typ av URL. 387 00:20:31,340 --> 00:20:33,770 Och det är funktionellt ekvivalent med, i detta fall, 388 00:20:33,770 --> 00:20:37,000 säljer alla aktier i Google. 389 00:20:37,000 --> 00:20:40,030 >> Nu uppriktigt sagt, det är helt åsnelikt att CMS 390 00:20:40,030 --> 00:20:43,240 begagnad JavaScript och cookies att genomföra sin inloggningssystem 391 00:20:43,240 --> 00:20:47,100 och inte göra det serversidan, som ni gör och kommer i pset 7-- 392 00:20:47,100 --> 00:20:49,940 det finns en login.php file-- alltid, alltid, 393 00:20:49,940 --> 00:20:52,789 alltid säkerheten bör vara görs på serversidan, 394 00:20:52,789 --> 00:20:56,080 inte på klientsidan, därför att, eftersom detta Artikeln föreslår och du kanske själv 395 00:20:56,080 --> 00:20:59,600 se vid någon tidpunkt, är det trivial för en användare, bra eller dåligt, 396 00:20:59,600 --> 00:21:02,860 att bara stänga av JavaScript att inte tala om cookies. 397 00:21:02,860 --> 00:21:06,020 Så det är din dagliga WTF. 398 00:21:06,020 --> 00:21:07,970 >> Det finns en mer, vilket är bara typ av skrämmande, 399 00:21:07,970 --> 00:21:11,360 så jag ska nämna det om bara som ett liv lektion. 400 00:21:11,360 --> 00:21:14,850 När du använder ett program heter som Snapchat eller liknande 401 00:21:14,850 --> 00:21:19,380 som säger dessa bilder bara varar fem sekunder, tio sekunder, eller whatnot. 402 00:21:19,380 --> 00:21:21,680 De är efemära Det är absolut inte fallet. 403 00:21:21,680 --> 00:21:25,670 Liksom det finns inget sätt, digitalt, att genomföra någon form av video, 404 00:21:25,670 --> 00:21:30,150 eller bild, eller text dela en sådan att en mottagare på den andra änden 405 00:21:30,150 --> 00:21:31,660 kan inte på något sätt spara uppgifterna. 406 00:21:31,660 --> 00:21:34,300 >> I den mest naiva sättet, någon kunde ta sin telefon. 407 00:21:34,300 --> 00:21:36,850 Och de har en 10 sekunders fönster medan du tittar på några snap 408 00:21:36,850 --> 00:21:39,410 att bara ta något annat telefonnummer och fotografera det, uppenbarligen. 409 00:21:39,410 --> 00:21:41,660 Så du kan bevara något digitalt på det sättet. 410 00:21:41,660 --> 00:21:44,620 En del av er vet hur man tar skärmdumpar på telefonen. 411 00:21:44,620 --> 00:21:49,290 Faktum är att om du inte vet detta, inse att åtminstone Snapchat, 412 00:21:49,290 --> 00:21:51,040 och jag tror att andra program dessa dagar, 413 00:21:51,040 --> 00:21:53,720 åtminstone berätta om mottagaren har faktiskt 414 00:21:53,720 --> 00:21:55,310 tagit en skärmdump av din bild. 415 00:21:55,310 --> 00:22:00,870 >> Men värre ändå, detta var snappening, som någon myntade nyligen, 416 00:22:00,870 --> 00:22:04,680 där några 100.000 snaps hade släppts 417 00:22:04,680 --> 00:22:09,310 i vad som kallas en torrent-fil på olika webbplatser i slutändan. 418 00:22:09,310 --> 00:22:12,000 Och dessa innehöll en hel drös privata meddelanden och inlägg. 419 00:22:12,000 --> 00:22:15,210 Det visar sig de flesta godartade, så inte vad du kanske tror. 420 00:22:15,210 --> 00:22:17,580 Men eftersom folk hade använde en tredje parts webbplats, 421 00:22:17,580 --> 00:22:20,270 logga in med sin Snapchat användarnamn och lösenord och sedan 422 00:22:20,270 --> 00:22:23,470 spara alla sina snaps På denna tredje parts webbplats. 423 00:22:23,470 --> 00:22:26,130 Och det var den tredje parten hemsida som var hackad, 424 00:22:26,130 --> 00:22:30,710 som just innebar någon räknat ut hur att få alla 100.000 plus av dessa bilder 425 00:22:30,710 --> 00:22:33,822 till sin egen hårddisk för efterföljande delning. 426 00:22:33,822 --> 00:22:36,030 Ärligt talat, även här är det slags av åsnelikt att Snapchat 427 00:22:36,030 --> 00:22:39,360 genomförs på ett sådant sätt att en tredje part kan sortera av intercept 428 00:22:39,360 --> 00:22:43,310 data och att det inte är knuten till ditt egen applikation som körs på telefonen. 429 00:22:43,310 --> 00:22:46,947 Men även här, inser att dessa saker ska inte fånga dig på sängen, 430 00:22:46,947 --> 00:22:49,030 eller åtminstone det bör vara ett liv lektion i här. 431 00:22:49,030 --> 00:22:52,220 Om du vill att tekniska information, gå till den URL där 432 00:22:52,220 --> 00:22:53,570 det är i dagens bilder. 433 00:22:53,570 --> 00:23:00,960 Okej, frågor om dagens liv lektioner i CS? 434 00:23:00,960 --> 00:23:02,710 Stäng av det där. 435 00:23:02,710 --> 00:23:04,970 Vad som helst? 436 00:23:04,970 --> 00:23:06,301 Vad som helst? 437 00:23:06,301 --> 00:23:09,050 Jag har en massa människor som checkar deras Snapchat eller något nu. 438 00:23:09,050 --> 00:23:11,690 >> Okej, så SQL, Structured Query Language. 439 00:23:11,690 --> 00:23:12,509 Låt oss slå in detta. 440 00:23:12,509 --> 00:23:14,300 Och också, även om vi bara repa 441 00:23:14,300 --> 00:23:16,310 ytan av detta språk, ger vi dig 442 00:23:16,310 --> 00:23:18,930 nog av språket i form av pset 7 443 00:23:18,930 --> 00:23:22,140 så att du kan ta itu med några ganska vanligt funktionalitet. 444 00:23:22,140 --> 00:23:24,912 Men inser att det finns ett par saker som vi inte kräver av dig, 445 00:23:24,912 --> 00:23:27,120 men de kommer att bli viktigt kommer examensarbeten 446 00:23:27,120 --> 00:23:30,760 och verkligen komma att göra den faktiska webbplatser med verkliga användare 447 00:23:30,760 --> 00:23:32,040 är detta beslut design. 448 00:23:32,040 --> 00:23:34,460 >> Det visar sig att i en MySQL-databas, du 449 00:23:34,460 --> 00:23:37,460 har klasar av val som datatyper för dina kolumner 450 00:23:37,460 --> 00:23:41,670 och andra saker, men du har också Valet av en s.k. lagring 451 00:23:41,670 --> 00:23:44,570 motor för alla dina data, den typ av filsystem, 452 00:23:44,570 --> 00:23:46,700 om du är bekant, för alla dina data. 453 00:23:46,700 --> 00:23:48,830 Vilket format är det i slutändan sparas in? 454 00:23:48,830 --> 00:23:53,300 Och den vanligaste, kanske, har varit MyISAM och InnoDB, tekniska termer 455 00:23:53,300 --> 00:23:56,060 att vi ska bry sig om endast till den grad att en har 456 00:23:56,060 --> 00:23:58,500 och en inte har följande funktion. 457 00:23:58,500 --> 00:24:00,390 >> Antag att du har lite student kylskåp. 458 00:24:00,390 --> 00:24:03,030 Och antar att du och din rumskamrat, som delar denna kyl, 459 00:24:03,030 --> 00:24:04,682 är verkligen förtjust i att säga mjölk. 460 00:24:04,682 --> 00:24:07,140 Och det är, faktiskt, hur berättelse berättades för mig vägen tillbaka 461 00:24:07,140 --> 00:24:10,890 i dag när jag tog en kurs heter CS 161 operativsystem, vilket 462 00:24:10,890 --> 00:24:12,580 liknande sätt utforskar detta ämne. 463 00:24:12,580 --> 00:24:13,760 Så du har fått det här kylskåpet. 464 00:24:13,760 --> 00:24:14,630 Du är ute på mjölk. 465 00:24:14,630 --> 00:24:17,000 Och du kommer hem, din rumskompis fortfarande på klass eller vad som helst, 466 00:24:17,000 --> 00:24:19,208 och du bestämmer jag ska gå ut och få lite mjölk. 467 00:24:19,208 --> 00:24:22,630 Så du stänger kylskåpet, låsning studentrum, gå över gatan 468 00:24:22,630 --> 00:24:25,330 till CVS eller var, och få i kö för att köpa lite mjölk. 469 00:24:25,330 --> 00:24:28,960 >> Samtidigt kommer hem din rumskamrat från klass, kommer in i studentrummet, 470 00:24:28,960 --> 00:24:31,802 öppnar kylskåpet, även inser ooph, är vi ut ur mjölk. 471 00:24:31,802 --> 00:24:33,760 Så att han eller hon stänger kyl och sedan händer 472 00:24:33,760 --> 00:24:35,610 att gå till den andra CVS, som råkar vara 473 00:24:35,610 --> 00:24:38,470 ett kvarter bort från de andra CVS på torget, och blir i linje 474 00:24:38,470 --> 00:24:40,230 där för att få lite mjölk. 475 00:24:40,230 --> 00:24:42,524 Nu, naturligtvis, några minuter senare, ni båda kommer tillbaka, 476 00:24:42,524 --> 00:24:44,690 och det värsta av allt är möjligt utfall hänt. 477 00:24:44,690 --> 00:24:45,792 Ni båda har mjölk. 478 00:24:45,792 --> 00:24:47,500 Och du egentligen inte som mjölk så mycket. 479 00:24:47,500 --> 00:24:49,625 Så en av dem är bara kommer att sura någon gång. 480 00:24:49,625 --> 00:24:55,941 Så nu har du en överdriven mängd mjölk i kylskåpet alla eftersom varför? 481 00:24:55,941 --> 00:24:57,072 >> [OHÖRBAR] 482 00:24:57,072 --> 00:24:59,780 DAVID MALAN: Ja, det gjorde du inte på något sätt kommunicera med varandra 483 00:24:59,780 --> 00:25:00,904 att du fick mjölk. 484 00:25:00,904 --> 00:25:04,320 Så i det enklaste av sätt i den mänskliga världen, 485 00:25:04,320 --> 00:25:08,390 Hur kan du undvika den här fåniga scenario inträffar sådana 486 00:25:08,390 --> 00:25:09,750 att du bara sluta med ett. 487 00:25:09,750 --> 00:25:10,840 Text dem, ja bra. 488 00:25:10,840 --> 00:25:12,877 Men hur annars? 489 00:25:12,877 --> 00:25:13,460 Post-it-lappar. 490 00:25:13,460 --> 00:25:14,626 DAVID MALAN: A Post-it not. 491 00:25:14,626 --> 00:25:17,150 Någon form av kommunikation som berättar din rumskamrat 492 00:25:17,150 --> 00:25:18,670 gå inte in i kylskåpet för mjölk. 493 00:25:18,670 --> 00:25:20,440 Jag kommer att gå förnya på min egen. 494 00:25:20,440 --> 00:25:22,770 Så du på något sätt behöver för att låsa denna resurs. 495 00:25:22,770 --> 00:25:27,180 Så vi kan göra this-- vi kan typ av förstöra berättelsen och förvandlas till en CS berättelse 496 00:25:27,180 --> 00:25:30,360 vari tänker på detta som precis som en variabel, vilket lagrar ett visst värde. 497 00:25:30,360 --> 00:25:32,570 Och just nu, den värdet av mjölk är noll, 498 00:25:32,570 --> 00:25:35,410 som du inte vill att ditt rumskamrat att inspektera den variabeln 499 00:25:35,410 --> 00:25:38,730 och sedan fatta ett beslut sig själv baserat på tillståndet hos den variabeln 500 00:25:38,730 --> 00:25:42,430 om du är i färd med att ändra tillståndet hos denna variabel. 501 00:25:42,430 --> 00:25:46,140 >> Så en av linjerna i SQL som vi ge dig in pset 7 specifikation 502 00:25:46,140 --> 00:25:47,310 är detta en här. 503 00:25:47,310 --> 00:25:49,740 Och vi behöver inte spendera en enorm tid att prata om det. 504 00:25:49,740 --> 00:25:55,100 Men det visar sig, om du försöker att köpa några aktier i CS50 finans 505 00:25:55,100 --> 00:25:58,000 att du redan har vissa aktier, du 506 00:25:58,000 --> 00:26:01,750 vill kunna göra ett antal saker direkt tillsammans. 507 00:26:01,750 --> 00:26:04,360 Du vill kunna ett effektivt sätt, på en hög nivå, 508 00:26:04,360 --> 00:26:06,700 kolla okej, om jag vill att köpa fler aktier i Free, 509 00:26:06,700 --> 00:26:08,780 öre på lager prata om i spec, 510 00:26:08,780 --> 00:26:10,660 Jag vill kontrollera först hur många aktier jag har. 511 00:26:10,660 --> 00:26:11,810 Och antar att det är fem. 512 00:26:11,810 --> 00:26:14,600 Och antar att jag vill köpa 10 fler, jag slutligen 513 00:26:14,600 --> 00:26:17,069 vill ha 15 aktier i lager. 514 00:26:17,069 --> 00:26:18,360 Så jag måste ställa två frågor. 515 00:26:18,360 --> 00:26:20,230 Vad är läget för rörliga? 516 00:26:20,230 --> 00:26:21,470 Vad är tillståndet i rad? 517 00:26:21,470 --> 00:26:22,970 Hur många aktier kommer jag har för närvarande? 518 00:26:22,970 --> 00:26:24,636 Då du vill gå vidare och uppdatera den. 519 00:26:24,636 --> 00:26:27,720 Så det är den analoga till den mjölk i att du kontrollerar rad, 520 00:26:27,720 --> 00:26:30,730 och då du vill uppdatera den för om du vill köpa 10 aktier, 521 00:26:30,730 --> 00:26:32,521 du inte vill ändra raden till 10, du 522 00:26:32,521 --> 00:26:35,300 vill ändra det till 5 plus 10 eller, naturligtvis, 15. 523 00:26:35,300 --> 00:26:40,030 >> Den här kodraden gör att dessa två konceptuella idéer 524 00:26:40,030 --> 00:26:42,810 ske tillsammans eller inte alls. 525 00:26:42,810 --> 00:26:46,920 Ingen, inklusive någon annan användare vem som är inloggad på samma webbplats, 526 00:26:46,920 --> 00:26:49,900 kan på något sätt avbryta kontroll av raden 527 00:26:49,900 --> 00:26:52,960 och uppdatering av raden, välja och uppdateringen om du kommer. 528 00:26:52,960 --> 00:26:57,360 Och syntaxen inte är super självklart, men denna linje, lång är det, 529 00:26:57,360 --> 00:27:01,150 säkerställer att dessa två operationer kontrollera variabeln eller kolla raden 530 00:27:01,150 --> 00:27:04,660 och uppdatera raden hända Atomically. 531 00:27:04,660 --> 00:27:06,849 >> Åh var det dags igen. 532 00:27:06,849 --> 00:27:07,890 Textmeddelande på min telefon. 533 00:27:07,890 --> 00:27:09,954 Så låt oss göra detta till en lite mer konkret. 534 00:27:09,954 --> 00:27:12,120 Anta att du inte är genomföra ett kylskåp, 535 00:27:12,120 --> 00:27:16,400 och du inte genomföra Pset 7 men en faktisk bank, 536 00:27:16,400 --> 00:27:20,000 eller en bankomat, en Automated Teller Machine, där man på något sätt 537 00:27:20,000 --> 00:27:22,960 vill kunna ge användare att överföra pengar 538 00:27:22,960 --> 00:27:24,500 från ett konto till ett annat. 539 00:27:24,500 --> 00:27:25,100 OK, hänga på. 540 00:27:25,100 --> 00:27:26,683 Jag kommer att stänga detta nu, tack. 541 00:27:26,683 --> 00:27:30,450 Så vi vill flytta pengar från ett kontonummer 542 00:27:30,450 --> 00:27:33,600 till ett annat konto nummer, i synnerhet 100 kr. 543 00:27:33,600 --> 00:27:37,690 Så det här är typ av en godtycklig exempel, där man, ATM, 544 00:27:37,690 --> 00:27:41,060 kanske vill köra två SQL frågor, subtrahera från ett konto, 545 00:27:41,060 --> 00:27:42,430 och lägg till det andra kontot. 546 00:27:42,430 --> 00:27:46,766 Men du vill se till att dessa två linjer både hända eller inte alls. 547 00:27:46,766 --> 00:27:48,640 Du vill inte något att bli avbruten. 548 00:27:48,640 --> 00:27:51,440 Du behöver inte några smarta bad guy på något sätt står vid Bank of America 549 00:27:51,440 --> 00:27:53,270 med två uttagsautomater i fronten av honom och på något sätt 550 00:27:53,270 --> 00:27:55,270 sorts skriva i kommandon samtidigt, 551 00:27:55,270 --> 00:28:01,230 förhoppningsvis försöka dra av $ 200 i stället på $ 100 och bara har $ 100 krediteras. 552 00:28:01,230 --> 00:28:04,450 Kort sagt, vill du detta till beter sig precis som du förväntar dig. 553 00:28:04,450 --> 00:28:06,540 >> Och hur du gör detta i SQL-databas är 554 00:28:06,540 --> 00:28:09,350 du linda in det i vad som är kallas för en transaktion. 555 00:28:09,350 --> 00:28:14,290 Bokstavligen i SQL, kan du ringa CS50 s sökfunktion med citat unquote start 556 00:28:14,290 --> 00:28:15,370 transaktion. 557 00:28:15,370 --> 00:28:18,640 Sedan kan du köra valfritt antal av följande SQL-frågor, 558 00:28:18,640 --> 00:28:20,870 men ingen av dem ta effekt på databasen 559 00:28:20,870 --> 00:28:25,880 tills du kallar fråge quote unquote begå, om igen med PHP. 560 00:28:25,880 --> 00:28:29,810 Och på detta sätt kan du se till att även om du har 1.000 användare allt 561 00:28:29,810 --> 00:28:32,080 träffa din databas på samma gång, SQL 562 00:28:32,080 --> 00:28:34,540 kommer att lova att dessa två förfrågningar kommer att vara 563 00:28:34,540 --> 00:28:36,740 genomfört en rätt efter den andra. 564 00:28:36,740 --> 00:28:40,330 Så du behöver inte sluta med överskott av mjölk eller fel belopp, i slutändan, 565 00:28:40,330 --> 00:28:40,830 pengar. 566 00:28:40,830 --> 00:28:43,110 >> Så ha detta i åtanke, inte så mycket för pset 7 567 00:28:43,110 --> 00:28:45,250 men för examensarbeten Om du är faktiskt 568 00:28:45,250 --> 00:28:49,690 försöker flytta data runt över bord som du kanske här. 569 00:28:49,690 --> 00:28:53,980 Men kanske ännu enklare och mer självklart att förstå med ett exempel 570 00:28:53,980 --> 00:28:54,860 är detta en här. 571 00:28:54,860 --> 00:28:57,760 Och någon mailade oss om detta häromdagen 572 00:28:57,760 --> 00:28:59,600 när han såg något liknande på nätet. 573 00:28:59,600 --> 00:29:03,480 >> Så vitt jag vet, stiftet systemet är inte sårbara för denna attack. 574 00:29:03,480 --> 00:29:06,637 Och jag har ingen aning om det ännu användningsområden SQL-databasen under huven. 575 00:29:06,637 --> 00:29:08,470 Men låt oss använda den för diskussionens skull. 576 00:29:08,470 --> 00:29:10,178 Här är skärmen som Harvard folk tenderar 577 00:29:10,178 --> 00:29:13,620 för att se när du loggar in med sina Harvard ID-nummer och deras stift. 578 00:29:13,620 --> 00:29:19,020 Och antar att stiftet systemet var förs i PHP och med en MySQL 579 00:29:19,020 --> 00:29:22,000 databas, den kod som någon kanske har skrivit år sedan 580 00:29:22,000 --> 00:29:23,270 kan se ut så här. 581 00:29:23,270 --> 00:29:25,230 Först, deklarera en variabel som heter username. 582 00:29:25,230 --> 00:29:27,560 Och bara få det från POST superglobal. 583 00:29:27,560 --> 00:29:30,140 Då kan du få en annan variabel kallas lösenord och göra samma sak. 584 00:29:30,140 --> 00:29:33,080 Och sedan bara köra denna långa fråga här, 585 00:29:33,080 --> 00:29:36,690 välj stjärna från användare där användarnamn är lika så och så 586 00:29:36,690 --> 00:29:38,510 och lösenord är lika så och så. 587 00:29:38,510 --> 00:29:40,660 >> Lägg märke till att lockigt tandställning jag har använt här 588 00:29:40,660 --> 00:29:42,880 bara betyder för PHP, gå framåt och ersättare 589 00:29:42,880 --> 00:29:45,400 värdet av dessa två variabler just där. 590 00:29:45,400 --> 00:29:50,090 De är inte absolut nödvändigt, men De tenderar att undvika subtila syntaxfel. 591 00:29:50,090 --> 00:29:53,650 Så detta ser helt korrekt vid första anblicken. 592 00:29:53,650 --> 00:29:54,240 Och det är. 593 00:29:54,240 --> 00:29:56,680 Du kan genomföra stift systemet på detta sätt. 594 00:29:56,680 --> 00:30:00,460 >> Men anta att en super smart och elak elev 595 00:30:00,460 --> 00:30:03,020 input detta som hans eller hennes stift. 596 00:30:03,020 --> 00:30:05,550 Så jag har tagit bort kulan tecken här i mock up, 597 00:30:05,550 --> 00:30:08,760 och jag har faktiskt avslöjat vad han eller hon kan vara att skriva. 598 00:30:08,760 --> 00:30:10,350 Och det är lite konstigt. 599 00:30:10,350 --> 00:30:13,850 Men vad hoppar ut på dig på potentiellt oroande om användarens input, 600 00:30:13,850 --> 00:30:16,450 även om du har ingen aning om vad SQL-injektionsangrepp innebär. 601 00:30:16,450 --> 00:30:20,300 Varför detta ser lite skumt? 602 00:30:20,300 --> 00:30:21,050 Vad är det? 603 00:30:21,050 --> 00:30:21,550 [OHÖRBAR] 604 00:30:21,550 --> 00:30:24,260 DAVID MALAN: Den eller är lite misstänksam. 605 00:30:24,260 --> 00:30:26,310 I själva verket är det ett nyckelord från SQL. 606 00:30:26,310 --> 00:30:28,105 Så det inte bådar gott. 607 00:30:28,105 --> 00:30:29,980 Det faktum att det finns alla dessa apostrof 608 00:30:29,980 --> 00:30:32,646 there-- i själva verket en av de enklaste sätt att bryta vissa databaser 609 00:30:32,646 --> 00:30:35,880 är genom att skriva in ett namn som O'Reilly som har en apostrof i den 610 00:30:35,880 --> 00:30:38,600 för om människan som skrev koden bakom kulisserna 611 00:30:38,600 --> 00:30:41,570 tar inte hänsyn till att det kan vara enkla citattecken i en användares 612 00:30:41,570 --> 00:30:45,060 ingång, och han eller hon använder enkla citationstecken i deras kod, 613 00:30:45,060 --> 00:30:46,040 dåliga saker kan hända. 614 00:30:46,040 --> 00:30:47,870 >> I själva verket, ännu värre, överväga detta. 615 00:30:47,870 --> 00:30:50,600 Om detta var igen koden att någon på Harvard år 616 00:30:50,600 --> 00:30:53,100 sedan skrev för stiftet systemet, märker vad som är 617 00:30:53,100 --> 00:30:56,220 på väg att få ersätta för användarnamn och lösenord 618 00:30:56,220 --> 00:30:59,780 Om användaren skriver in igen skroob som deras användarnamn 619 00:30:59,780 --> 00:31:03,960 och sedan en, två, tre, fyra, fem, citat eller citat unquote en jämlikar 620 00:31:03,960 --> 00:31:04,660 citera en. 621 00:31:04,660 --> 00:31:07,220 Och märker vad som är nyckeln här är att användaren inte har 622 00:31:07,220 --> 00:31:09,900 startade sitt lösenord eller deras stift med en offert. 623 00:31:09,900 --> 00:31:12,610 Och de har inte slutade det med ett citat för att han eller hon 624 00:31:12,610 --> 00:31:16,315 utgår från att om programmerare var inte så skarp, 625 00:31:16,315 --> 00:31:18,690 de kommer att ha dem apostrof i sin kod. 626 00:31:18,690 --> 00:31:19,860 >> Så här är koden. 627 00:31:19,860 --> 00:31:23,820 Och ersättning som kan nu hända är detta. 628 00:31:23,820 --> 00:31:26,350 Och jag har strukna vad användaren har skrivit in. 629 00:31:26,350 --> 00:31:28,480 Så innan, efter. 630 00:31:28,480 --> 00:31:33,330 Och märker vad som är milt oroande nu om den högra halvan av den här SQL-kod? 631 00:31:33,330 --> 00:31:36,300 Det är lite mer komplicerat, visserligen, än de frågor som vi har sett. 632 00:31:36,300 --> 00:31:38,550 Men det kan möjligen vara bra om du är 633 00:31:38,550 --> 00:31:42,240 säger välj stjärna, vilket är att välja allt från användarens bordet 634 00:31:42,240 --> 00:31:46,630 där användarnamn är lika skroob och lösenord lika med ett, två, tre, fyra, 635 00:31:46,630 --> 00:31:49,610 fem eller ett är lika med ett. 636 00:31:49,610 --> 00:31:53,860 Vad är den logiska implikationen av den sista meningen förmodligen? 637 00:31:53,860 --> 00:31:55,650 Det är bara alltid sant. 638 00:31:55,650 --> 00:31:59,930 >> Och eftersom vi har sorts gissat eller räknat ut genom trial and error 639 00:31:59,930 --> 00:32:02,760 att programmeraren som skrev den här koden inte 640 00:32:02,760 --> 00:32:07,250 räknar med en människa eller dålig människa skriva i apostrof också, 641 00:32:07,250 --> 00:32:10,350 vi kan syntaktiskt slutföra SQL-fråga 642 00:32:10,350 --> 00:32:12,260 med något meningslösa utan något som 643 00:32:12,260 --> 00:32:15,930 är syntaktiskt felaktigt som alltid utvärderas till true. 644 00:32:15,930 --> 00:32:19,130 Så om den här koden används för att svara frågan sant eller falskt bör 645 00:32:19,130 --> 00:32:22,930 denna användare tillåtas att passera, den Svaret är alltid tydligen går 646 00:32:22,930 --> 00:32:26,930 för att vara sant eftersom det kommer alltid att välja något från databasen 647 00:32:26,930 --> 00:32:29,280 eftersom en av kursen motsvarar alltid en. 648 00:32:29,280 --> 00:32:30,360 >> Så vad är lösningen? 649 00:32:30,360 --> 00:32:33,290 Väl i pset 7, vi faktiskt undvika detta alla tillsammans. 650 00:32:33,290 --> 00:32:37,360 Vi ger dig en sökfunktion, och vi uppmuntrar dig att använda frågetecken 651 00:32:37,360 --> 00:32:40,430 som platshållare, liknande i anden till printf s% s, 652 00:32:40,430 --> 00:32:43,710 men vad är nyckeln om frågetecken här är om du faktiskt läser igenom 653 00:32:43,710 --> 00:32:46,950 functions.php, där vår frågefunktion är införd, 654 00:32:46,950 --> 00:32:52,780 dessa frågetecken ska undantas, vari något potentiellt farliga 655 00:32:52,780 --> 00:32:58,210 som ett enda anbud slås in en förrymd enda anbud. 656 00:32:58,210 --> 00:33:00,590 >> Så det här är vad som är verkligen händer om du 657 00:33:00,590 --> 00:33:04,850 Använd CS50: s sökfunktion eller valfritt antal av tredje parts fria bibliotek som 658 00:33:04,850 --> 00:33:06,000 göra samma sak. 659 00:33:06,000 --> 00:33:09,850 Spelar ingen roll i det här fallet, i grönt, om användaren har matat in i en och samma pris 660 00:33:09,850 --> 00:33:12,070 eftersom fråge funktion som vi skrev är 661 00:33:12,070 --> 00:33:15,120 kommer att lägga snedstreck före sådan farlig citat. 662 00:33:15,120 --> 00:33:17,360 Så detta är inte, i faktiskt kommer att vara legit. 663 00:33:17,360 --> 00:33:20,910 Detta är som att skriva in en galen ser lösenord som är, naturligtvis, inte kommer 664 00:33:20,910 --> 00:33:23,490 vara skroob faktiska lösenord. 665 00:33:23,490 --> 00:33:28,260 >> Så takeaway för CS50 är en, absolut alltid använda något 666 00:33:28,260 --> 00:33:30,860 som CS50: s sökfunktion eller den underliggande bibliotek, 667 00:33:30,860 --> 00:33:32,560 som råkar vara kallad PDO. 668 00:33:32,560 --> 00:33:35,880 Men aldrig, aldrig, aldrig göra koden så här 669 00:33:35,880 --> 00:33:39,472 utan att fly eller skrubb som de säger ingångarna. 670 00:33:39,472 --> 00:33:42,430 Och du kommer någon gång förmodligen stött på någon hemsida som denna. 671 00:33:42,430 --> 00:33:46,060 I själva verket verkar det vara fallet som på flygplatser och hotell på platser 672 00:33:46,060 --> 00:33:48,880 där de har gratis Wi-Fi tillgång som man måste logga in på, 673 00:33:48,880 --> 00:33:51,010 dessa webbplatser är alltid fruktansvärt genomföras. 674 00:33:51,010 --> 00:33:55,680 Och så en sorts roligt hemma träning, inte för ont uppsåt eller mer 675 00:33:55,680 --> 00:33:59,170 en kul på vägen motion, är att bara skriva 676 00:33:59,170 --> 00:34:02,850 en apostrof, ett enda anbud, in i ett formulär på en viss webbplats 677 00:34:02,850 --> 00:34:03,810 och se vad som händer. 678 00:34:03,810 --> 00:34:06,660 Och om servern kraschar eller ger du någon form av felmeddelande, 679 00:34:06,660 --> 00:34:09,690 Det kan mycket väl vara så att någon har inte förutsett detta. 680 00:34:09,690 --> 00:34:15,239 Och så ska du larma rätt myndigheter och gå längre. 681 00:34:15,239 --> 00:34:20,843 >> Så nu ni ska förhoppningsvis förstå lite mer geekhumor här. 682 00:34:20,843 --> 00:34:24,120 >> [LAUGHTER] 683 00:34:24,120 --> 00:34:27,571 684 00:34:27,571 --> 00:34:29,070 DAVID MALAN: Du vet att du är en nörd. 685 00:34:29,070 --> 00:34:30,944 För nästa flera år, kommer du ihåg 686 00:34:30,944 --> 00:34:33,520 som små Bobby Tabeller är på grund av denna tecknade här. 687 00:34:33,520 --> 00:34:36,760 Så ha det i åtanke när vi kontext switch en sista gång 688 00:34:36,760 --> 00:34:38,770 idag till JavaScript. 689 00:34:38,770 --> 00:34:41,600 Vi har tillbringat ganska lite tid på syntaxen i PHP 690 00:34:41,600 --> 00:34:43,440 eftersom det är faktiskt super lik C. 691 00:34:43,440 --> 00:34:47,300 Och fint nog, Javascript för är super likt C: s syntax 692 00:34:47,300 --> 00:34:49,639 liksom vi ser i bara en stund och när vi ska 693 00:34:49,639 --> 00:34:51,205 se senare i veckan i synnerhet. 694 00:34:51,205 --> 00:34:54,080 Vad du kan göra med detta språk, dock, är desto mer kraftfulla, 695 00:34:54,080 --> 00:34:55,790 speciellt med API: er. 696 00:34:55,790 --> 00:34:56,960 >> Men först en snabb rundtur. 697 00:34:56,960 --> 00:35:00,450 Så en, i JavaScript, det finns ingen huvudfunktion, vilket är trevligt. 698 00:35:00,450 --> 00:35:02,650 Som med PHP, kan du bara skriva kod. 699 00:35:02,650 --> 00:35:04,310 Villkor se ut så här. 700 00:35:04,310 --> 00:35:07,100 Och booleska uttryck kanske se ut så här eller så här. 701 00:35:07,100 --> 00:35:09,530 Växlar existerar, och de kan se ut så här. 702 00:35:09,530 --> 00:35:10,970 Fyra slingor se ut så här. 703 00:35:10,970 --> 00:35:12,390 Medan slingor se ut så här. 704 00:35:12,390 --> 00:35:14,160 Vill whiles se ut så här. 705 00:35:14,160 --> 00:35:16,850 Och sedan arrayer ser ut detta, mycket likt PHP. 706 00:35:16,850 --> 00:35:20,740 Men märker att det i JavaScript dig deklarerar en variabel inte med en dollar 707 00:35:20,740 --> 00:35:25,190 underteckna, inte med en datatyp men bokstavligen genom att säga var för variabel innan. 708 00:35:25,190 --> 00:35:27,900 Det är alltför löst skrivit genom att den har olika typer, 709 00:35:27,900 --> 00:35:29,729 men du behöver inte explicit deklarera dem. 710 00:35:29,729 --> 00:35:31,520 Och sedan en sträng, för Exempelvis kan se 711 00:35:31,520 --> 00:35:34,350 så här, sträng som kallas s i detta fall. 712 00:35:34,350 --> 00:35:35,410 Och sedan ett objekt. 713 00:35:35,410 --> 00:35:37,010 Och dessa får vi se mer inom kort. 714 00:35:37,010 --> 00:35:41,470 Och ett objekt är kanske en av de oftast ses datastrukturer 715 00:35:41,470 --> 00:35:44,050 i ett JavaScript baserat programmet eftersom det tillåter 716 00:35:44,050 --> 00:35:46,680 du associera godtyckliga Nyckelvärdesparen bara 717 00:35:46,680 --> 00:35:51,240 som PHP: s associativa arrayer och precis som din egen hashtabell 718 00:35:51,240 --> 00:35:54,042 eller försök som vi genomfört ett par veckor tillbaka. 719 00:35:54,042 --> 00:35:56,250 Så låt oss faktiskt se vad vi kan göra med JavaScript. 720 00:35:56,250 --> 00:35:59,410 Och framför allt, det är en lista av funktioner 721 00:35:59,410 --> 00:36:02,300 att webbläsare har att tillåter oss att koppla JavaScript 722 00:36:02,300 --> 00:36:05,470 på en webbplats på följande sätt. 723 00:36:05,470 --> 00:36:09,340 Javascript används ofta som en klientsidan skriptspråk. 724 00:36:09,340 --> 00:36:10,130 Det är inte sammanställt. 725 00:36:10,130 --> 00:36:11,370 Det också tolkas. 726 00:36:11,370 --> 00:36:15,740 Men till skillnad från PHP, som har varit igång på servern, i webbservern, 727 00:36:15,740 --> 00:36:18,220 eller djupt inne i klienter, Javascript 728 00:36:18,220 --> 00:36:22,190 är annorlunda i det att den vanligtvis körs i webbläsaren. 729 00:36:22,190 --> 00:36:26,060 >> Så någon JavaScript-kod som du börjar skriva för pset 8, eller ditt slutprojekt, 730 00:36:26,060 --> 00:36:29,890 eller i den verkliga världen i allmänhet går ska sparas på servern, absolut 731 00:36:29,890 --> 00:36:33,110 i ett punkt HTML eller dot JS för JavaScript-fil. 732 00:36:33,110 --> 00:36:35,770 Men webbläsaren går att hämta att JavaScript 733 00:36:35,770 --> 00:36:39,530 kod till din egen instans av Chrome, eller IE eller Firefox, eller vad som helst. 734 00:36:39,530 --> 00:36:43,870 Och koden faktiskt kommer att få exekveras insidan av din egen webbläsare. 735 00:36:43,870 --> 00:36:46,560 Bara för att göra detta mer verkliga, låt oss se detta i konkret form. 736 00:36:46,560 --> 00:36:50,120 >> Vi har ingen aning om vad denna kod gör utan att egentligen läsa igenom det. 737 00:36:50,120 --> 00:36:52,670 Men låt mig gå till Facebook.com utan att logga in. 738 00:36:52,670 --> 00:37:00,440 Låt mig gå till Inspektera Element och gå till, låt oss säga, Nätverk och ladda om sidan. 739 00:37:00,440 --> 00:37:04,150 Och vi kommer see-- låt mig flytta Ladda den Sida att få alla förfrågningar till nya. 740 00:37:04,150 --> 00:37:08,850 Och den allra första fil jag ser är CSS, CSS. 741 00:37:08,850 --> 00:37:10,880 Här är den första JavaScript-fil, och jag har 742 00:37:10,880 --> 00:37:14,600 ingen aning om vad detta innebär, men här är några av de JavaScript-kod 743 00:37:14,600 --> 00:37:16,180 som driver Facebook. 744 00:37:16,180 --> 00:37:18,400 Det är inte ens riktigt att avslöjar att zooma in. 745 00:37:18,400 --> 00:37:20,260 Det är fortfarande lika meningslöst. 746 00:37:20,260 --> 00:37:24,341 >> Men du kommer att se ännu nere, det finns ännu mer av dessa JavaScript-filer. 747 00:37:24,341 --> 00:37:24,840 Hoppsan. 748 00:37:24,840 --> 00:37:25,440 Det är en ping. 749 00:37:25,440 --> 00:37:28,550 Låt oss gå ner lite ytterligare, vidare, vidare. 750 00:37:28,550 --> 00:37:29,894 Det finns en. 751 00:37:29,894 --> 00:37:31,238 Det finns en. 752 00:37:31,238 --> 00:37:31,880 Det finns en. 753 00:37:31,880 --> 00:37:35,820 >> Så även om Facebook, bakom scener, är skriven delvis i PHP 754 00:37:35,820 --> 00:37:39,100 och Facebooks egen version av dessa, det finns en enorm mängd av JavaScript. 755 00:37:39,100 --> 00:37:41,330 I själva verket vilken som helst av den chattar du gör på Facebook, 756 00:37:41,330 --> 00:37:45,520 någon av inline tidslinjeuppdateringar att hända i realtid, allt detta 757 00:37:45,520 --> 00:37:47,944 drivs av JavaScript. 758 00:37:47,944 --> 00:37:48,444 Yeah? 759 00:37:48,444 --> 00:37:50,235 >> PUBLIK: Jag är inte säker om detta är Facebook, 760 00:37:50,235 --> 00:37:53,624 men jag trodde att Facebook utvecklat sin egen in-house kodspråk? 761 00:37:53,624 --> 00:37:54,540 DAVID MALAN: De gjorde. 762 00:37:54,540 --> 00:37:58,110 Så det är därför jag säger en varians PHP heter Hip Hop som de faktiskt 763 00:37:58,110 --> 00:38:03,440 tilläggsfunktioner så att när Mark genomfört första Facebook, 764 00:38:03,440 --> 00:38:04,710 det var skrivet i PHP. 765 00:38:04,710 --> 00:38:07,370 Och den sortens förblivit den typ av främre språk 766 00:38:07,370 --> 00:38:09,030 som de använder för mycket av deras kodning, men det 767 00:38:09,030 --> 00:38:11,870 har inte varit ett språk som är skalar särskilt väl till miljarder 768 00:38:11,870 --> 00:38:12,630 människor. 769 00:38:12,630 --> 00:38:15,300 Och så de har lagt till sin egen förbättringar bakom kulisserna. 770 00:38:15,300 --> 00:38:17,049 Och de använda valfritt antal av andra språk 771 00:38:17,049 --> 00:38:19,170 för olika delar av sin infrastruktur. 772 00:38:19,170 --> 00:38:24,080 Så ja, det är en varians vad vi nu känner som PHP. 773 00:38:24,080 --> 00:38:26,610 >> Så låt oss ta en titt vid ett par exempel 774 00:38:26,610 --> 00:38:28,890 om hur vi kan använda JavaScript här. 775 00:38:28,890 --> 00:38:32,530 I dagens källkod, vi har en massa filer, av vilka den första, 776 00:38:32,530 --> 00:38:34,090 låt oss kallade DOM noll. 777 00:38:34,090 --> 00:38:36,770 Så DOM noll ser ut som följer. 778 00:38:36,770 --> 00:38:40,730 Låt mig gå in i den här katalogen och öppna upp domzero.html, 779 00:38:40,730 --> 00:38:44,970 vars topp har en doc typ deklarationen, säger här kommer HTML 5. 780 00:38:44,970 --> 00:38:46,440 Och nu här är en HTML-tagg. 781 00:38:46,440 --> 00:38:47,540 Här är huvudet taggen. 782 00:38:47,540 --> 00:38:49,210 Och här är vad som är nytt idag. 783 00:38:49,210 --> 00:38:52,620 >> Vi har nu en script-tagg insidan av huvudet på sidan. 784 00:38:52,620 --> 00:38:55,290 Och detta tydligen inte väldigt lite, men varsel 785 00:38:55,290 --> 00:38:58,410 som jag har definierat en manus, ett JavaScript. 786 00:38:58,410 --> 00:39:01,050 Och som en sidoreplik, eftersom detta är en vanlig missuppfattning, 787 00:39:01,050 --> 00:39:05,220 JavaScript har absolut ingenting att göra med Java, språket 788 00:39:05,220 --> 00:39:08,010 att några av er kanske har lärt sig i APC. 789 00:39:08,010 --> 00:39:10,480 Det var mer av en marknadsföring sak än något annat, 790 00:39:10,480 --> 00:39:12,980 ridning coattails av Java år sedan. 791 00:39:12,980 --> 00:39:17,300 Men JavaScript, inget att göra med Java, precis på samma sätt, och irriterande, 792 00:39:17,300 --> 00:39:18,480 förvillande namngivna. 793 00:39:18,480 --> 00:39:21,890 >> Så här är hur du deklarerar en funktion i JavaScript, bokstavligen säga funktion, 794 00:39:21,890 --> 00:39:24,556 sedan namnet på funktionen, sedan någon argument som den kan komma att vidta, 795 00:39:24,556 --> 00:39:25,530 precis som i PHP. 796 00:39:25,530 --> 00:39:28,990 Visar sig i JavaScript, en av de mest irriterande funktioner som finns är alert. 797 00:39:28,990 --> 00:39:31,392 Detta är ett litet fönster som kommer att dyka upp och varna dig 798 00:39:31,392 --> 00:39:32,600 till viss del av informationen. 799 00:39:32,600 --> 00:39:33,766 Det är allmänt ogillande. 800 00:39:33,766 --> 00:39:35,980 Men vi ska använda det som vår första övningen här. 801 00:39:35,980 --> 00:39:37,900 >> Lägg märke till några funktioner i JavaScript. 802 00:39:37,900 --> 00:39:41,524 Apostrof och dubbla citationstecken egentligen inte någon roll längre. 803 00:39:41,524 --> 00:39:43,690 Apostrof och dubbel citat kan bytas ut mot varandra, 804 00:39:43,690 --> 00:39:46,220 medan det i C, måste du använda dubbla citattecken för strängar, 805 00:39:46,220 --> 00:39:48,150 och du har två singel citerar för tecken. 806 00:39:48,150 --> 00:39:51,150 I JavaScript världen, många människor, de flesta människor 807 00:39:51,150 --> 00:39:54,970 använda enkla citattecken runt strängar bara för att det är en stilistisk sak. 808 00:39:54,970 --> 00:39:58,330 Men vad är det plusoperatören här, som vi inte har sett förut? 809 00:39:58,330 --> 00:39:59,836 >> PUBLIK: Sammanlänkning. 810 00:39:59,836 --> 00:40:00,960 DAVID MALAN: Sammanlänkning. 811 00:40:00,960 --> 00:40:02,450 Så C har inte ens detta. 812 00:40:02,450 --> 00:40:04,820 PHP har punktoperatorn, som gör detta. 813 00:40:04,820 --> 00:40:09,710 JavaScript har plusoperatören, som förvirrande är precis som Java. 814 00:40:09,710 --> 00:40:11,440 Nu vad som händer här? 815 00:40:11,440 --> 00:40:14,260 >> Så här är då en grundläggande förståelse för den bilden 816 00:40:14,260 --> 00:40:17,010 Vi kastade upp ett par dagar sedan kommer in i bilden. 817 00:40:17,010 --> 00:40:19,620 Kommer du ihåg när vi hade en enkel version av en HTML page-- 818 00:40:19,620 --> 00:40:20,830 Det sa bara, hallå världen. 819 00:40:20,830 --> 00:40:22,770 Och sedan drog vi ett träd till höger, vilket 820 00:40:22,770 --> 00:40:27,320 hade ett gäng rektanglar och linjer ansluter dem som ett släktträd. 821 00:40:27,320 --> 00:40:30,820 Så det är den så kallade DOM eller Document Object Model. 822 00:40:30,820 --> 00:40:36,759 Och det visar sig att du kan komma åt rektanglar i det trädet med syntax 823 00:40:36,759 --> 00:40:37,550 som följande. 824 00:40:37,550 --> 00:40:41,370 Du säger bokstav dokument, vilket är ett speciell global variabel i en JavaScript 825 00:40:41,370 --> 00:40:45,890 program som har en funktion i samband med det att du kan komma åt 826 00:40:45,890 --> 00:40:50,280 liknar en struct, men du helt enkelt säger prick och sedan funktionens namn, 827 00:40:50,280 --> 00:40:52,390 få del av ID. 828 00:40:52,390 --> 00:40:55,460 >> Elementet jag vill komma är tydligen citera unquote namn. 829 00:40:55,460 --> 00:40:57,150 Och så vill jag få dess värde. 830 00:40:57,150 --> 00:40:58,330 Nu vi får framför oss själva. 831 00:40:58,330 --> 00:41:00,038 Jag är inte ens säker på vad allt detta handlar om. 832 00:41:00,038 --> 00:41:03,000 Låt oss spola fram till HTML på den sida, som är super enkelt. 833 00:41:03,000 --> 00:41:05,370 >> Lägg märke till att jag har definierat a bildar här nere. 834 00:41:05,370 --> 00:41:07,940 Märker jag har gett det en unik ID, även om vi inte har använt 835 00:41:07,940 --> 00:41:08,870 detta attribut innan. 836 00:41:08,870 --> 00:41:11,300 Men det finns i HTML. 837 00:41:11,300 --> 00:41:15,570 Du kan unikt identifiera en viss bit HTML med en identifierare som denna. 838 00:41:15,570 --> 00:41:19,880 >> Observera nu this-- visar sig HTML stöder, per den tvätt lista 839 00:41:19,880 --> 00:41:22,490 för en stund sedan, en hel gäng händelsehanterare. 840 00:41:22,490 --> 00:41:25,060 Och denna händelse handler står på skicka. 841 00:41:25,060 --> 00:41:28,730 På användar inlämnandet av detta formuläret, ring följande kod. 842 00:41:28,730 --> 00:41:31,360 Och den kod som händer att kallas eller avrättas 843 00:41:31,360 --> 00:41:35,260 är just detta, den grekiska funktion följt av return false. 844 00:41:35,260 --> 00:41:37,360 Allt annat bör vara ganska bekant. 845 00:41:37,360 --> 00:41:42,050 >> Här är en ingång av typen text, vars ID, i detta fall, kommer att bli känt. 846 00:41:42,050 --> 00:41:45,430 Vi har inte en faktisk namn attribut denna time-- och en skicka-knappen. 847 00:41:45,430 --> 00:41:48,330 Så den sida som ser ut så här. 848 00:41:48,330 --> 00:41:52,890 Och det resulterande beteende, du ser, ser ut så här. 849 00:41:52,890 --> 00:41:56,940 Sidan det lokala värdar säger: hej David, knappast en estetiskt tilltalande 850 00:41:56,940 --> 00:41:58,340 sätt att hälsa en användare. 851 00:41:58,340 --> 00:41:59,950 Men vad som egentligen händer? 852 00:41:59,950 --> 00:42:01,360 >> Tja, fundera på vad det här är. 853 00:42:01,360 --> 00:42:02,310 Detta är ett textfält. 854 00:42:02,310 --> 00:42:04,635 Och i enlighet med den HTML här har jag gett den 855 00:42:04,635 --> 00:42:07,350 en unik identifierare kallas citat unquote namn. 856 00:42:07,350 --> 00:42:09,770 Under tiden har jag sagt när användaren skickar formuläret 857 00:42:09,770 --> 00:42:13,820 genom att trycka på Enter eller klicka på Skicka knappen, anropa funktionen kallas Greet 858 00:42:13,820 --> 00:42:15,410 och sedan återvända Falskt. 859 00:42:15,410 --> 00:42:16,870 Låt oss betrakta dem i omvänd ordning. 860 00:42:16,870 --> 00:42:20,590 Lägg märke till när jag klickar på Skicka, den Webbadressen till den här sidan ändras inte. 861 00:42:20,590 --> 00:42:22,420 Webbläsaren ikon inte börja snurra. 862 00:42:22,420 --> 00:42:27,050 Jag ville inte gå någonstans, och det är bokstavligen för att jag sa returnera False. 863 00:42:27,050 --> 00:42:31,534 Return false kortslutning eller stannar standardbeteendet för ett formulär. 864 00:42:31,534 --> 00:42:33,700 Så att då lämnar oss med detta en sista fråga. 865 00:42:33,700 --> 00:42:34,764 Vad betyder Greet göra? 866 00:42:34,764 --> 00:42:36,680 Tja, Hälsa tydligen anropar en funktion som kallas 867 00:42:36,680 --> 00:42:39,250 Alert, passerar i en långa argument som är 868 00:42:39,250 --> 00:42:43,950 resultatet av att sammanfoga tillsammans en gäng strängar, hej kommatecken utrymme, 869 00:42:43,950 --> 00:42:45,810 då vad detta tillbaka. 870 00:42:45,810 --> 00:42:51,490 Så dokument är som en global variabel till den rot det trädet, 871 00:42:51,490 --> 00:42:55,560 ringer en speciell funktion, annars numera känd som en metod. 872 00:42:55,560 --> 00:42:57,650 En funktion som är insidan av en variabel är 873 00:42:57,650 --> 00:42:59,640 kallas en metod i stället för en funktion. 874 00:42:59,640 --> 00:43:01,570 >> Så få inslag av ID. 875 00:43:01,570 --> 00:43:03,940 Vilken faktor gör du vill komma med sitt ID? 876 00:43:03,940 --> 00:43:06,970 Citera unquote namn och då specifikt värde. 877 00:43:06,970 --> 00:43:12,000 Så med andra ord, den koden helt enkelt finner textfält vars ID är namnet 878 00:43:12,000 --> 00:43:13,380 och sedan får sitt värde. 879 00:43:13,380 --> 00:43:16,460 Så om jag skulle ändra på detta och säger Davin istället för David, 880 00:43:16,460 --> 00:43:20,670 och klicka på Skicka, nu har vi har en hälsning till Davin. 881 00:43:20,670 --> 00:43:22,890 >> Okej, så alla fina och bra. 882 00:43:22,890 --> 00:43:25,480 Men låt oss se om vi kan göra detta lite renare eftersom bara 883 00:43:25,480 --> 00:43:28,190 skriva kod som detta är generellt kommer att vara rynkade på. 884 00:43:28,190 --> 00:43:30,060 Detta kommer att se skrämmande. 885 00:43:30,060 --> 00:43:32,330 Men vad är det första skillnaden att du noterar här 886 00:43:32,330 --> 00:43:35,970 i denna version förutom namn byta till DOM en? 887 00:43:35,970 --> 00:43:41,110 Vad strukturellt ser annorlunda om detta jämfört med andra? 888 00:43:41,110 --> 00:43:41,932 Yeah? 889 00:43:41,932 --> 00:43:43,890 PUBLIK: Är formuläret på toppen av skriptet nu? 890 00:43:43,890 --> 00:43:46,570 DAVID MALAN: Ja, är formen på topp av manus till någon nyfikna anledning. 891 00:43:46,570 --> 00:43:48,736 Så det är det första som hoppar ut på mig också. 892 00:43:48,736 --> 00:43:50,990 Och lyckligtvis åtminstone, denna del är identiska. 893 00:43:50,990 --> 00:43:53,470 Så det enda som verkar att vara annorlunda är detta. 894 00:43:53,470 --> 00:43:55,296 >> Så här är vad som är snyggt om JavaScript 2. 895 00:43:55,296 --> 00:43:57,420 Och det gör det svårt att förstå vid första anblicken, 896 00:43:57,420 --> 00:44:00,670 speciellt för examensarbeten om så du tittar på exempelkod på nätet, 897 00:44:00,670 --> 00:44:04,200 men det kokar ner till några grundläggande syntaktiska funktioner. 898 00:44:04,200 --> 00:44:06,230 Här är återigen att global variabel dokument. 899 00:44:06,230 --> 00:44:09,540 Här är återigen att metoden eller funktion som säger att få elementet genom ID. 900 00:44:09,540 --> 00:44:11,570 Den här gången vill jag få ID kallas demo. 901 00:44:11,570 --> 00:44:12,490 Var är det? 902 00:44:12,490 --> 00:44:15,400 Det är tydligen rätt här, själva formuläret. 903 00:44:15,400 --> 00:44:20,010 >> Och nu märker att tydligen om jag få tillbaka den noden från trädet som 904 00:44:20,010 --> 00:44:22,940 representerar formen själv, inte ett textfält, 905 00:44:22,940 --> 00:44:26,970 det visar sig att formen, som nod eller rektangel från trädet, 906 00:44:26,970 --> 00:44:30,450 har vad vi kallar en fastighet, mycket, mycket, mycket likt 907 00:44:30,450 --> 00:44:35,390 i anden till en struct i C. Det är bara en datamedlem insidan av denna rektangel. 908 00:44:35,390 --> 00:44:38,300 >> Så jag har fått formen här, och jag är fästa, 909 00:44:38,300 --> 00:44:44,650 eller jag tilldela, till dess On Submit handler eller snarare på Submit egendom 910 00:44:44,650 --> 00:44:45,740 följande funktion. 911 00:44:45,740 --> 00:44:49,000 Och detta är den absolut galnaste sak hittills syntaktiskt. 912 00:44:49,000 --> 00:44:53,610 Det visar sig i JavaScript och PHP, och ärligt talat för den delen i C, 913 00:44:53,610 --> 00:44:58,990 även om vi inte gör det, kan du lägga namnlös, anonym, eller AKA lambda 914 00:44:58,990 --> 00:45:03,000 funktioner som inte har ett namn men kan kallas ändå. 915 00:45:03,000 --> 00:45:07,050 >> Så vad jag gör här är att jag tilldela Detta On Skicka egendom, som 916 00:45:07,050 --> 00:45:14,330 är inne i denna nod i min DOM-trädet, en Funktionen, funktionspekaren om du kommer. 917 00:45:14,330 --> 00:45:16,310 Den funktionen har ingen namn, men det betyder inte 918 00:45:16,310 --> 00:45:19,110 roll eftersom vi får se i ett ögonblick hur man kalla det. 919 00:45:19,110 --> 00:45:21,780 När denna funktion anropas, denna kod blir avrättad, då 920 00:45:21,780 --> 00:45:24,210 false returneras precis som förut. 921 00:45:24,210 --> 00:45:25,800 >> Men lägg märke till vad jag har gjort. 922 00:45:25,800 --> 00:45:27,830 Vid denna punkt i historia, jag har ett formulär. 923 00:45:27,830 --> 00:45:30,190 Det har fått ett unikt ID som kallas demo. 924 00:45:30,190 --> 00:45:33,740 Här nere har jag en script-tagg som utför följande kod. 925 00:45:33,740 --> 00:45:37,720 Den fäster till den nod i trädet att det är på Submit 926 00:45:37,720 --> 00:45:40,260 egenskapen av denna funktion här. 927 00:45:40,260 --> 00:45:44,310 Och precis som på grund av hur webbläsare fungerar, När jag nu klicka på Skicka eller tryck Enter, 928 00:45:44,310 --> 00:45:45,889 denna funktion kommer att bli synad. 929 00:45:45,889 --> 00:45:48,680 Det behöver inte ett namn för vem fan bryr sig om vad den heter. 930 00:45:48,680 --> 00:45:52,540 Den enda gången det någonsin kommer att få heter är när jag skicka formuläret. 931 00:45:52,540 --> 00:45:55,130 Det finns ingen anledning för mig, den humana utvecklare, 932 00:45:55,130 --> 00:45:57,330 att faktiskt kalla det någon annanstans. 933 00:45:57,330 --> 00:46:00,720 >> Nu är det bara som en teaser, som om det var inte emot att böja tillräckligt, 934 00:46:00,720 --> 00:46:03,330 Vi kan även göra detta ser mer kryptiskt med hjälp av 935 00:46:03,330 --> 00:46:05,850 en super populär bibliotek som heter jQuery. 936 00:46:05,850 --> 00:46:08,760 Faktum jQuery och JavaScript är ofta sammanblandade. 937 00:46:08,760 --> 00:46:12,790 Och vad vi ska göra på onsdag är start med hjälp av detta språk och dessa bibliotek 938 00:46:12,790 --> 00:46:16,030 att bygga alltmer asynkron och dynamiska applikationer 939 00:46:16,030 --> 00:46:18,950 liknande karta få tillämpningar, tillämpningar 940 00:46:18,950 --> 00:46:22,360 att uppdatera webbsidan i realtid tiden, ungefär som Facebook eller Gchat 941 00:46:22,360 --> 00:46:27,130 göra, och inte längre begränsa oss till Att slå in med en get eller bara inlägg 942 00:46:27,130 --> 00:46:27,630 ensam. 943 00:46:27,630 --> 00:46:29,055 Så jag kommer att se dig på onsdag. 944 00:46:29,055 --> 00:46:31,805 945 00:46:31,805 --> 00:46:35,550 >> [MUSIK SPELA] 946 00:46:35,550 --> 00:48:09,728