1 00:00:00,000 --> 00:00:01,940 >> [Muziek] 2 00:00:01,940 --> 00:00:11,130 3 00:00:11,130 --> 00:00:14,620 >> DAVID MALAN: Dit is CS 50, en Dit is het begin van week negen. 4 00:00:14,620 --> 00:00:18,240 En wat we dachten dat we vandaag zouden doen is niet alleen het hoofdstuk over de vorige week sluiten 5 00:00:18,240 --> 00:00:22,670 materiaal waar we ons gericht op server side web programmeren met PHP en SQL, 6 00:00:22,670 --> 00:00:23,549 een database stuff. 7 00:00:23,549 --> 00:00:25,590 We praten een beetje veiligheid nu en dan 8 00:00:25,590 --> 00:00:29,590 overgang naar een client-side programmeren taal bekend als JavaScript. 9 00:00:29,590 --> 00:00:31,330 Maar eerst een paar verlossing. 10 00:00:31,330 --> 00:00:35,030 >> U herinnert zich misschien dat op Woensdag heb ik uiteengezet 11 00:00:35,030 --> 00:00:37,550 om een ​​website te schrijven dat nam in ingang gebruiker 12 00:00:37,550 --> 00:00:41,120 door een HTML vorm die vervolgens opgeslagen dat gebruikersinvoer namen, telefoonnummers 13 00:00:41,120 --> 00:00:43,124 nummers, en mobiele telefoon dragers in de database. 14 00:00:43,124 --> 00:00:45,540 En toen had ik een beetje commando lijn script geschreven in PHP 15 00:00:45,540 --> 00:00:47,956 dat moest herhalen over de rijen in de database 16 00:00:47,956 --> 00:00:49,400 en het verzenden van SMS-berichten. 17 00:00:49,400 --> 00:00:53,870 Ondanks verscheidene, verschillende pogingen, we leverde dat werken niet door het einde. 18 00:00:53,870 --> 00:00:57,820 >> Dus bracht ik deze hele week werken op die code om ons voorbij het punt 19 00:00:57,820 --> 00:01:01,220 waar we gebleven, waarbij alle Ik kreeg aan het einde van woensdag 20 00:01:01,220 --> 00:01:05,500 was dit SMS-bericht van Margo zoals ik worstelde, 21 00:01:05,500 --> 00:01:09,940 gevolgd door een SMS-bericht van een ander klasgenoot, je hebt deze David. 22 00:01:09,940 --> 00:01:14,030 Gevolgd door deze, heerlijk bemoedigend. 23 00:01:14,030 --> 00:01:15,840 Ging maar door, heel bemoedigend. 24 00:01:15,840 --> 00:01:20,960 Ik kreeg het bijna tot then-- en dat is de notitie eindigden we op woensdag. 25 00:01:20,960 --> 00:01:25,850 En dan eigenlijk misschien wel mijn favoriet, Even later, kwam dit in. 26 00:01:25,850 --> 00:01:27,000 Verdomme Live stream. 27 00:01:27,000 --> 00:01:31,080 >> Dus vandaag hebben we dit oplossen met een snelle kijk naar wat ik sinds heb gedaan. 28 00:01:31,080 --> 00:01:35,440 Dus alles van deze code is beschikbaar online van vorige week, week acht, 29 00:01:35,440 --> 00:01:36,300 broncode. 30 00:01:36,300 --> 00:01:39,425 En je zult zien dat ik ging door, en ik eigenlijk opgeruimd dingen een beetje. 31 00:01:39,425 --> 00:01:42,080 Ik een paar andere geïntroduceerd kenmerken van een SQL-database. 32 00:01:42,080 --> 00:01:45,300 Bijvoorbeeld, in plaats van gewoon drager van var char 33 00:01:45,300 --> 00:01:47,310 als ik denk dat ik deed op de fly vorige week. 34 00:01:47,310 --> 00:01:49,820 Ik plaats gedefinieerd als wat heet een enum. 35 00:01:49,820 --> 00:01:53,310 >> En sommigen van u misschien dit gezien hebben als we verkend C. Enum is eigenlijk 36 00:01:53,310 --> 00:01:56,820 een kenmerk van C, waar u kunt sommen een hele hoop van constanten 37 00:01:56,820 --> 00:01:59,640 en deze toewijzen automatische waarden, als een, twee, drie, vier 38 00:01:59,640 --> 00:02:01,330 zonder harde codenummers. 39 00:02:01,330 --> 00:02:04,780 Dus SQL ondersteunt dezelfde, waarbij indien je hebt een database veld dat alleen u 40 00:02:04,780 --> 00:02:09,389 wil op een van eindige te nemen waarden, kunt u letterlijk specificeren het 41 00:02:09,389 --> 00:02:13,120 als ik er voor vier hebben gedaan populaire Amerikaanse mobiele telefoon carriers. 42 00:02:13,120 --> 00:02:13,819 >> Dus deed ik dat. 43 00:02:13,819 --> 00:02:16,610 En ik maakte een aantal wijzigingen ten goed, de belangrijkste daarvan 44 00:02:16,610 --> 00:02:20,090 werd om aan de slag email met werken omdat recall, dat dit programma gebruikt dat 45 00:02:20,090 --> 00:02:23,470 over het algemeen wel een e-mail naar SMS gateway, dat is gewoon 46 00:02:23,470 --> 00:02:27,670 een mooie manier om te zeggen dat Verizon, en AT & T, en andere mensen te ondersteunen met een server, 47 00:02:27,670 --> 00:02:30,740 waarbij indien zij ontvangt e, zet het SMS 48 00:02:30,740 --> 00:02:33,290 en stuurt een tekst bericht naar de telefoon van iemand. 49 00:02:33,290 --> 00:02:37,010 Dus als ik het goed deed, Hier is een nieuw en verbeterd vorm 50 00:02:37,010 --> 00:02:39,259 dat gaat om te praten nieuwe en verbeterde code die 51 00:02:39,259 --> 00:02:40,300 je kunt spelen met online. 52 00:02:40,300 --> 00:02:44,140 En het zal hopelijk mijn telefoon piep in slechts een moment. 53 00:02:44,140 --> 00:02:47,240 >> Dus eerst ga ik om te typen op mijn naam. 54 00:02:47,240 --> 00:02:51,400 Ten tweede, ik ga niet om dit deze keer doen. 55 00:02:51,400 --> 00:02:53,920 Ik ga denk Inspect Element. 56 00:02:53,920 --> 00:02:56,710 En dit is slechts een klein ding dus ik doe niet 57 00:02:56,710 --> 00:02:59,250 creëren uren postproductie werken als ik de vorige keer deed. 58 00:02:59,250 --> 00:03:02,300 Er is nu mijn telefoonnummer. 59 00:03:02,300 --> 00:03:03,560 >> Ik zal Verizon selecteren. 60 00:03:03,560 --> 00:03:10,260 En hier, laten we zet deze microfoon hier, en richt dit op mijn telefoon hier. 61 00:03:10,260 --> 00:03:13,130 Ik ga klik Register, dat moet hopelijk 62 00:03:13,130 --> 00:03:14,530 zet het in de database. 63 00:03:14,530 --> 00:03:16,780 Nu ga ik naar de command line programma, dat 64 00:03:16,780 --> 00:03:20,825 recall werd dot slash genoemd tekst, en steek uw vingers. 65 00:03:20,825 --> 00:03:24,092 66 00:03:24,092 --> 00:03:26,527 Daar gaan we dan. 67 00:03:26,527 --> 00:03:27,501 >> [PHONE DINGS] 68 00:03:27,501 --> 00:03:28,962 >> [Applaus] 69 00:03:28,962 --> 00:03:31,815 70 00:03:31,815 --> 00:03:34,940 DAVID MALAN: Dus leuker dan dit-- het is leuk, natuurlijk, als ik in het. 71 00:03:34,940 --> 00:03:38,004 Maar het is meer leuk, ik dacht, als we creëerde een van die filmmomenten 72 00:03:38,004 --> 00:03:40,420 waar als iets echt slecht is gebeurd in de wereld, 73 00:03:40,420 --> 00:03:42,860 en net als alle NSA People's mobiele telefoons beginnen te piepen 74 00:03:42,860 --> 00:03:44,860 met SMS-berichten waarschuwen zij dit feit. 75 00:03:44,860 --> 00:03:47,026 Dus ik dacht dat we zouden proberen om hier hetzelfde te herscheppen, 76 00:03:47,026 --> 00:03:49,610 waarbij geen database gebruikt, Ik plaats op voorhand 77 00:03:49,610 --> 00:03:51,490 schreef een programma dat er als volgt uitziet. 78 00:03:51,490 --> 00:03:53,660 >> Dit is een index.php-- en ik zet deze code online 79 00:03:53,660 --> 00:03:56,710 als goed-- die blijkbaar gewoon renders form.php, 80 00:03:56,710 --> 00:04:00,990 met een MVC stijl paradigma dat we praten over in meer detail in probleem set 81 00:04:00,990 --> 00:04:01,650 zeven. 82 00:04:01,650 --> 00:04:02,910 Dat formulier is vrij eenvoudig. 83 00:04:02,910 --> 00:04:06,634 Het gaat om een ​​in te dienen bestand genaamd here.php per post. 84 00:04:06,634 --> 00:04:09,300 En het is blijkbaar gaan vragen voor een naam en een telefoonnummer, 85 00:04:09,300 --> 00:04:11,400 en dan via zogenaamde Selecteer het menu, het is 86 00:04:11,400 --> 00:04:14,250 ga je minstens vier geven populaire Amerikaanse mobiele telefoon carriers, 87 00:04:14,250 --> 00:04:17,470 en dan kun je effectief neem bijwonen door hier te klikken. 88 00:04:17,470 --> 00:04:20,471 >> En hier, ondertussen, gaat lenen een deel van de code van de vorige keer. 89 00:04:20,471 --> 00:04:22,553 En als je dit gewoon romen, je zult zien dat er 90 00:04:22,553 --> 00:04:23,900 een hele hoop fouten te controleren. 91 00:04:23,900 --> 00:04:26,640 Maar de schoonheid eind dat we zijn niet schrijven naar een database van vandaag. 92 00:04:26,640 --> 00:04:29,130 We houden het simpel en gewoon uit te sturen hopelijk 93 00:04:29,130 --> 00:04:32,190 een SMS-bericht via de functie I schreef de afgelopen dagen oproep 94 00:04:32,190 --> 00:04:36,270 Tekst, die in functies. php, dat is weer online beschikbaar. 95 00:04:36,270 --> 00:04:38,210 >> Dus als je wilt deelnemen aan dit. 96 00:04:38,210 --> 00:04:40,190 We zijn niet van plan iets te opslaan. 97 00:04:40,190 --> 00:04:43,809 Naar deze URL hier in real time. 98 00:04:43,809 --> 00:04:46,850 Ook niet te verstrekken gewoon nog niet, maar laten we kijken of we een van deze film kan hebben 99 00:04:46,850 --> 00:04:49,830 momenten waar ieders cellphone begint te piepen, hopelijk net 100 00:04:49,830 --> 00:04:53,580 keer dit jaar in tegenstelling tot in 2011 waar dit ging vreselijk mis. 101 00:04:53,580 --> 00:04:58,910 En als je eenmaal naar dat adres, moet je een super eenvoudig formulier te zien 102 00:04:58,910 --> 00:05:03,884 dat als je een naam, een mobiele telefoon nummer, en een mobiele telefoon vervoerder dat 103 00:05:03,884 --> 00:05:06,175 overeenkomt met de lijst daar, ga je gang en vul het formulier in. 104 00:05:06,175 --> 00:05:07,880 Maar niet op submit drukt gewoon nog niet. 105 00:05:07,880 --> 00:05:10,850 >> De vorm gaat er als volgt uitzien. 106 00:05:10,850 --> 00:05:13,660 Ga je gang en type in uw naam, telefoonnummer. 107 00:05:13,660 --> 00:05:17,670 Oop, iemand gaat voor de kromme. 108 00:05:17,670 --> 00:05:18,170 Het is OK. 109 00:05:18,170 --> 00:05:19,340 OK, iedereen is het formulier ingevuld. 110 00:05:19,340 --> 00:05:21,400 Dit zou moeten werken op een telefoon, ook, als je wilt. 111 00:05:21,400 --> 00:05:23,695 Oké, op uw plaatsen, klaar, af. 112 00:05:23,695 --> 00:05:24,195 Hit Hier. 113 00:05:24,195 --> 00:05:27,275 114 00:05:27,275 --> 00:05:27,775 Wat? 115 00:05:27,775 --> 00:05:31,140 116 00:05:31,140 --> 00:05:31,640 Nee. 117 00:05:31,640 --> 00:05:34,410 118 00:05:34,410 --> 00:05:40,250 Ik zweer bij God, heb ik getest dit meerdere keren vandaag. 119 00:05:40,250 --> 00:05:41,720 Heb je het? 120 00:05:41,720 --> 00:05:43,145 >> [Tussenplaatsen VOICES] 121 00:05:43,145 --> 00:05:46,470 122 00:05:46,470 --> 00:05:49,560 >> DAVID MALAN: OK, gebruikersfouten misschien. 123 00:05:49,560 --> 00:05:50,550 Dat is twee. 124 00:05:50,550 --> 00:05:53,300 Het werkte voor twee uit een paar honderd, drie, vier. 125 00:05:53,300 --> 00:05:55,940 OK, dat is goed. 126 00:05:55,940 --> 00:05:58,520 Vier van de vijf voor correctheid hoe zit. 127 00:05:58,520 --> 00:05:59,810 >> Dus wat is er gebeurd? 128 00:05:59,810 --> 00:06:02,727 Dus vermoedelijk, zonder het zien van uw schermen, waarom zou het hebben errored? 129 00:06:02,727 --> 00:06:05,518 Het is waarschijnlijk dat we waren gewoon proberen om te veel verbindingen maken 130 00:06:05,518 --> 00:06:08,110 aan Harvard's mailserver allemaal op eenmaal van hetzelfde IP-adres. 131 00:06:08,110 --> 00:06:10,740 Ik ben alleen maar gissen, omdat ik niet hebben de luxe van het testen 132 00:06:10,740 --> 00:06:13,220 deze code met een aantal 300 mensen bij voorbaat 133 00:06:13,220 --> 00:06:16,040 maar voor nu beseffen dat ten minste moeten 134 00:06:16,040 --> 00:06:18,250 de klus deze keer hebben gekregen. 135 00:06:18,250 --> 00:06:22,880 >> Oké, dus waarom is dit alles de meer relevant voor wat er gaande is? 136 00:06:22,880 --> 00:06:24,900 Nou ten eerste, een snelle paar aankondigingen. 137 00:06:24,900 --> 00:06:29,350 Dus een, als u wilt Chang mee, en Nick, en anderen tijdens de lunch deze vrijdag, 138 00:06:29,350 --> 00:06:32,400 doen RSVP op het gebruikelijke URL daar. 139 00:06:32,400 --> 00:06:35,650 Als u denkt aan het concentreren in of het doen van een secundaire in CS, 140 00:06:35,650 --> 00:06:38,941 of je nu een tweedejaars, of eerstejaars, of zelfs junior of senior op dit punt 141 00:06:38,941 --> 00:06:42,490 en kan nog steeds knijpen in de cursussen, beseffen dat de technische school 142 00:06:42,490 --> 00:06:45,620 is het verzamelen voor gratis Ben en Jerry's ijs en advies 143 00:06:45,620 --> 00:06:48,910 deze woensdag kort na de les op 4:00 in het CS gebouw 144 00:06:48,910 --> 00:06:49,771 bij Maxwell Dworkin. 145 00:06:49,771 --> 00:06:51,520 Als dit te snel op het scherm, ga je gewoon 146 00:06:51,520 --> 00:06:55,260 om cs50.harvard.edu een link naar het Facebook event 147 00:06:55,260 --> 00:06:57,140 waar u meer details kunt zien. 148 00:06:57,140 --> 00:07:01,390 >> Ondertussen dacht ik dat ik zou corrigeren een ander ding ik goofed op woensdag. 149 00:07:01,390 --> 00:07:04,400 Blijkt dat Mark's ID Op Facebook was niet drie. 150 00:07:04,400 --> 00:07:05,230 Het was vier. 151 00:07:05,230 --> 00:07:08,330 Blijkt dat hij meer onderzoek had rekeningen dan ik me herinner. 152 00:07:08,330 --> 00:07:12,400 Maar wat dit voelde als een kans te doen is om omhoog te trekken een URL zoals deze. 153 00:07:12,400 --> 00:07:16,680 >> Dus het blijkt dat Facebook heeft een API, Application Programming Interface, 154 00:07:16,680 --> 00:07:20,070 dat is een mechanisme waarbij u programmatisch kan gegevens opvragen 155 00:07:20,070 --> 00:07:24,480 op Facebook en krijg terug machine leesbare informatie, geen webpagina's 156 00:07:24,480 --> 00:07:28,690 maar gewoon rauwe tekst, iets riep JavaScript Object Notation. 157 00:07:28,690 --> 00:07:32,150 En in feite, als ik dit bezoek URL, en opnieuw in, standaard, 158 00:07:32,150 --> 00:07:34,960 dit is Mark's openbaar toegankelijke informatie. 159 00:07:34,960 --> 00:07:37,430 >> En het interessante detail hier is gewoon dat zijn ID 160 00:07:37,430 --> 00:07:40,670 inderdaad, nummer vier, die ik gerealiseerd zodra ik dit deed. 161 00:07:40,670 --> 00:07:44,260 U kunt dit zelf doen als je weet uw Facebook-gebruikersnaam als je die hebt. 162 00:07:44,260 --> 00:07:45,440 Typ het gewoon top daar. 163 00:07:45,440 --> 00:07:46,640 En niets van dit is privé. 164 00:07:46,640 --> 00:07:48,670 Ik ben gewoon dit zelfs doen in de incognito-modus. 165 00:07:48,670 --> 00:07:49,900 Dus ik ben niet eens ingelogd. 166 00:07:49,900 --> 00:07:54,440 En je ziet dat ik blijkbaar was gebruikersnummer 6454 167 00:07:54,440 --> 00:07:56,480 op Facebook, dat is niet te slecht deze dagen. 168 00:07:56,480 --> 00:07:59,900 Dus hoe dan ook, ziet u ook aanvullende informatie daar. 169 00:07:59,900 --> 00:08:02,150 >> En de nuttige aspect van dat is dat je 170 00:08:02,150 --> 00:08:06,890 zou uw eigen software te schrijven die een of andere manier integreert gegevens zoals deze 171 00:08:06,890 --> 00:08:08,170 in uw eigen applicatie. 172 00:08:08,170 --> 00:08:10,650 U kunt gebruikers machtigen inloggen op uw website, 173 00:08:10,650 --> 00:08:14,190 niet met behulp van hun eigen aangepaste gebruikersnaam en wachtwoord maar misschien hun Facebook login 174 00:08:14,190 --> 00:08:16,170 en informatie zelfs over hun vrienden, 175 00:08:16,170 --> 00:08:18,740 indien zij erkent deze of soortgelijke. 176 00:08:18,740 --> 00:08:21,430 Zodat er rekening mee dat CS50, ook, heeft een aantal van zijn eigen API's, 177 00:08:21,430 --> 00:08:24,620 een voor de studiegids data, sommige voor de knuffels menu's in de restaurants 178 00:08:24,620 --> 00:08:26,730 hallen, alle gebouwen en locaties 179 00:08:26,730 --> 00:08:30,930 op de campus hebben we een API voor zowel dat u op dezelfde manier kunt opvragen en krijgen 180 00:08:30,930 --> 00:08:35,520 terug tekstuele gegevens die u kunt integreren in een PHP of JavaScript, of zelfs, 181 00:08:35,520 --> 00:08:38,320 hoewel minder vaak, een C gebaseerd afstudeerproject. 182 00:08:38,320 --> 00:08:41,190 >> Inderdaad vooruit voor de finale project zijn een paar mijlpalen. 183 00:08:41,190 --> 00:08:42,980 Je kreeg een e-mail van ons de andere dag. 184 00:08:42,980 --> 00:08:45,761 Realiseer je dat het voorstel is het gevolg van deze komende maandag. 185 00:08:45,761 --> 00:08:49,010 Het is niet per se bindend, maar u nodig hebben om uw onderwijs fellows ontvangen 186 00:08:49,010 --> 00:08:51,260 goedkeuring alvorens wijzigingen daarna. 187 00:08:51,260 --> 00:08:54,280 En dan vooruit zijn een aantal andere mijlpalen. 188 00:08:54,280 --> 00:08:56,542 >> Dus om u te plagen, ook, enkele mogelijkheden 189 00:08:56,542 --> 00:08:58,250 we hebben een heleboel deze tint gloeilampen. 190 00:08:58,250 --> 00:09:01,190 En sommigen van jullie nu hebben een aantal van deze in uw dorm kamer ook. 191 00:09:01,190 --> 00:09:02,920 En ook zij hebben een API. 192 00:09:02,920 --> 00:09:07,300 Dus herinneren die binair bollen weken geleden dat Dan Bradley en Ansel 193 00:09:07,300 --> 00:09:08,780 Duff voor ons geschapen. 194 00:09:08,780 --> 00:09:12,560 Ze gebruikten een software interface Deze lamp, die momenteel 195 00:09:12,560 --> 00:09:15,232 is aangesloten op elektriciteit en dan via een draadloze 196 00:09:15,232 --> 00:09:17,690 is verbonden met een klein ding heet de Brug hier beneden, 197 00:09:17,690 --> 00:09:21,280 als een kleine router proprietary om dit apparaat. 198 00:09:21,280 --> 00:09:26,540 >> Maar het blijkt dat als ik weet hoe stuur HTTP berichten, zoals we nu allemaal doen, 199 00:09:26,540 --> 00:09:31,670 Ik kan een bericht als dit te sturen naar deze lamp om deze aan of uit te schakelen 200 00:09:31,670 --> 00:09:34,000 of voert u een aantal andere bewerkingen op het. 201 00:09:34,000 --> 00:09:36,110 Merk op dat het niet te krijgen, is het niet te posten. 202 00:09:36,110 --> 00:09:37,760 Er is er nog een zogenaamde put. 203 00:09:37,760 --> 00:09:39,630 Er is eigenlijk een paar andere dergelijke werkwoorden. 204 00:09:39,630 --> 00:09:42,920 Maar let op er is een pad daar, slash API, slash nieuwe ontwikkelaar, 205 00:09:42,920 --> 00:09:44,990 slash licht, slash één, schuine streep staat. 206 00:09:44,990 --> 00:09:49,060 >> Dat is blijkbaar gewoon de pad dat het bedrijf, Philips, 207 00:09:49,060 --> 00:09:51,640 besloten dat u hoeft te raken met een HTTP-verzoek 208 00:09:51,640 --> 00:09:55,010 als je wilt om de status te wijzigen van de lamp met behulp van HTTP 1.1. 209 00:09:55,010 --> 00:09:56,380 Dan merk de lege regel. 210 00:09:56,380 --> 00:10:00,170 En dan tot slot wat lijkt op soort van een array van een soort, 211 00:10:00,170 --> 00:10:04,730 Dit bericht zal worden genoemd JavaScript Object Notation, of Jason. 212 00:10:04,730 --> 00:10:08,000 En wat je hier ziet is dat Er zijn drie belangrijke waarde paren. 213 00:10:08,000 --> 00:10:09,115 >> Eén sleutel wordt opgeroepen. 214 00:10:09,115 --> 00:10:10,990 En de waarde ervan blijkbaar gaat om waar te zijn. 215 00:10:10,990 --> 00:10:13,612 Helderheid is 128, die is een soort van int. 216 00:10:13,612 --> 00:10:15,820 En dan overgang is nul, die blijkbaar 217 00:10:15,820 --> 00:10:17,970 hoe lang het gaat nemen om dit ding aan te zetten. 218 00:10:17,970 --> 00:10:19,890 >> Dus nu deze lamp uit is. 219 00:10:19,890 --> 00:10:22,880 Maar als ik dat doe precies dit-- laten ik ga naar een klein spiekbriefje 220 00:10:22,880 --> 00:10:25,200 dat Dan opgezet in advance-- en ik ga 221 00:10:25,200 --> 00:10:27,920 om verder te gaan en te kopiëren de volgende opdracht. 222 00:10:27,920 --> 00:10:30,200 Krul, zoals sommigen van jullie misschien hebben opgedaan op CS50 223 00:10:30,200 --> 00:10:35,080 Bespreek is een hulpprogramma zoals Telnet dergelijke dat je HTTP-verzoeken kan simuleren, 224 00:10:35,080 --> 00:10:36,360 specifiek zet. 225 00:10:36,360 --> 00:10:39,710 Ik kan deze gegevens verzenden, specifiek wat we zojuist 226 00:10:39,710 --> 00:10:43,430 zag daarnet specifiek om deze URL hier. 227 00:10:43,430 --> 00:10:46,310 En dan Krul gaat behandelen alle vereiste headers 228 00:10:46,310 --> 00:10:47,600 en het ontleden er van. 229 00:10:47,600 --> 00:10:54,700 >> Dus alles wat ik moet doen is kopieer deze in een terminal venster en vervolgens drukt u op Enter. 230 00:10:54,700 --> 00:10:56,000 En de lamp gaat branden. 231 00:10:56,000 --> 00:10:59,060 En dit is allemaal doormaakt mijn computer draadloos 232 00:10:59,060 --> 00:11:01,960 een of andere manier tot aan de brug, die wordt vervolgens in gesprek met deze lamp. 233 00:11:01,960 --> 00:11:02,960 Ik kan iets anders doen. 234 00:11:02,960 --> 00:11:07,050 Ik kan dit ding maken ga rood bijvoorbeeld. 235 00:11:07,050 --> 00:11:11,040 Ik kan bijvoorbeeld te maken dit ding gaat groen. 236 00:11:11,040 --> 00:11:12,220 Ik kan het blauw gaan. 237 00:11:12,220 --> 00:11:14,760 >> En bericht in elk van deze gevallen, alles wat ik ben het veranderen 238 00:11:14,760 --> 00:11:18,540 is de zogenaamde tint waarde eigenlijk geef het wat kleur. 239 00:11:18,540 --> 00:11:20,320 Dus laat me dit ene plakken in ook. 240 00:11:20,320 --> 00:11:21,000 Nu is het blauw. 241 00:11:21,000 --> 00:11:24,672 >> En je kunt zelfs liefhebber doen dingen where-- laten we gaan naar groen. 242 00:11:24,672 --> 00:11:26,630 En ik kon dit van doen Natuurlijk met mijn eigen code. 243 00:11:26,630 --> 00:11:30,670 Maar ook de API zelf ondersteunt funky operaties 244 00:11:30,670 --> 00:11:35,510 als dit, zal die nu moeite ons voor de komende 30 seconden. 245 00:11:35,510 --> 00:11:39,170 >> Dus dat is een voorproefje van wat je misschien doen met een API, deze betrekken 246 00:11:39,170 --> 00:11:40,010 gloeilampen. 247 00:11:40,010 --> 00:11:42,510 Merk op dat CS50 heeft een paar paren van Google Glass als je wilt 248 00:11:42,510 --> 00:11:45,380 graag samen iets aan te pakken die lijnen, Arduino Unos, die 249 00:11:45,380 --> 00:11:48,670 zijn piepkleine computers, wezen, op een kleine printplaat 250 00:11:48,670 --> 00:11:50,470 dat u verbinding kunt maken draden en andere 251 00:11:50,470 --> 00:11:52,732 tot en eigenlijk control je echte wereld omgeving. 252 00:11:52,732 --> 00:11:54,940 En dan zijn er een paar van nieuwe speelgoed dat we hebben. 253 00:11:54,940 --> 00:11:59,294 Deze ene letterlijk net aangekomen het de andere dag per post, een Myo-armband. 254 00:11:59,294 --> 00:12:01,710 En ik dacht dat het een manier is om word je enthousiast over projecten 255 00:12:01,710 --> 00:12:03,720 dat je zou kunnen gebruiken met Deze hardware zou 256 00:12:03,720 --> 00:12:08,900 zijn om deze korte clip te spelen die ze gebruiken om mensen te plagen 257 00:12:08,900 --> 00:12:10,500 dat we nu leven in de toekomst. 258 00:12:10,500 --> 00:12:13,494 259 00:12:13,494 --> 00:12:15,490 >> [Muziek] 260 00:12:15,490 --> 00:13:33,410 261 00:13:33,410 --> 00:13:37,109 >> DAVID MALAN: Dus in slechts een paar weken, u kan ook zijn dat koel in de CS50 beurs. 262 00:13:37,109 --> 00:13:39,150 Een ander apparaat dat we hebben een heleboel dat we 263 00:13:39,150 --> 00:13:42,090 blij om te lenen voor projecten heet een motion controller. 264 00:13:42,090 --> 00:13:45,030 Dit is een kleine USB-apparaat u verbinding maakt met een computer die 265 00:13:45,030 --> 00:13:47,520 hiermee kunt u de interactie met uw laptop, Mac of pc, 266 00:13:47,520 --> 00:13:51,570 alsof je had als een Xbox Kinect en eigenlijk maken fysieke bewegingen veel 267 00:13:51,570 --> 00:13:54,509 zoals we zien in deze visie op de toekomst. 268 00:13:54,509 --> 00:13:56,505 >> [Muziek] 269 00:13:56,505 --> 00:15:03,380 270 00:15:03,380 --> 00:15:06,260 >> DAVID MALAN: Dus zelfs als je hebt geen idee hoe zoiets 271 00:15:06,260 --> 00:15:10,050 kan eventueel worden uitgevonden of werk op hardware niveau, maakt niet uit. 272 00:15:10,050 --> 00:15:13,520 Zelfs na een paar maanden van de CS50, en inzicht programmering 273 00:15:13,520 --> 00:15:19,460 meer in het algemeen, en web programmeren meer onlangs, en dan ook API's, en HTTP, 274 00:15:19,460 --> 00:15:21,830 heb je toegang hebt via software API's als u 275 00:15:21,830 --> 00:15:24,680 wil wel een van deze lenen apparaten om daadwerkelijk te praten om het te 276 00:15:24,680 --> 00:15:27,180 en niet zorgen te maken over de onderliggende implementatie 277 00:15:27,180 --> 00:15:30,220 Gegevens, die volledig is overeenstemming met dit begrip gelaagdheid 278 00:15:30,220 --> 00:15:33,610 een abstractie die we hebben gezien tijdens het semester. 279 00:15:33,610 --> 00:15:37,990 >> Dus ook in het weekend, zag een paar nieuwtjes. 280 00:15:37,990 --> 00:15:40,640 Ga eerst, ga naar seminars als je wil graag iets leren 281 00:15:40,640 --> 00:15:42,160 meer op een aantal onderwerpen. 282 00:15:42,160 --> 00:15:43,340 Zie de URL daar. 283 00:15:43,340 --> 00:15:45,890 En deze werd verzonden naar me door Chang, wie je kent, 284 00:15:45,890 --> 00:15:47,850 wie het afdrukken van ons leger van olifanten. 285 00:15:47,850 --> 00:15:49,910 En het was hier een titel als volgt. 286 00:15:49,910 --> 00:15:51,280 Ik ben doodsbang van mijn nieuwe TV. 287 00:15:51,280 --> 00:15:54,301 Waarom ben ik bang om dit te zetten ding op en je zou ook. 288 00:15:54,301 --> 00:15:56,050 Dus we zijn nu aan het wijzen in het semester, 289 00:15:56,050 --> 00:15:58,860 ook, waar ook al heb je de geringste van begrip 290 00:15:58,860 --> 00:16:02,620 van hoe het web werkt, en HTTP, en veiligheid, dit soort dingen 291 00:16:02,620 --> 00:16:03,980 moet beginnen om uw aandacht te trekken. 292 00:16:03,980 --> 00:16:07,450 Maar ook, zult u begrijpen of deze dingen wel of niet 293 00:16:07,450 --> 00:16:08,430 werkelijke bedreigingen. 294 00:16:08,430 --> 00:16:10,940 >> Dus nam ik een paar fragmenten uit dit artikel hier. 295 00:16:10,940 --> 00:16:12,540 En het verhaal is als volgt. 296 00:16:12,540 --> 00:16:14,300 Ik ben nu de eigenaar van een nieuwe Smart TV, die 297 00:16:14,300 --> 00:16:18,470 belooft streaming leveren multimedia content, games, app, 298 00:16:18,470 --> 00:16:21,450 sociale media en internet browsen, oh en TV ook. 299 00:16:21,450 --> 00:16:24,410 Het enige probleem is dat ik nu bang om het te gebruiken, zegt de auteur. 300 00:16:24,410 --> 00:16:29,592 Je zou zijn, ook, als je door te lezen de 46 pagina privacybeleid voor uw TV. 301 00:16:29,592 --> 00:16:31,800 De hoeveelheid gegevens die deze ding verzamelt is onthutsend. 302 00:16:31,800 --> 00:16:35,710 Het registreert waar, wanneer, hoe, en voor hoe lang u de TV gaat gebruiken. 303 00:16:35,710 --> 00:16:38,190 Het zet tracking cookies, zoals we hebben besproken, 304 00:16:38,190 --> 00:16:40,560 en bakens ontworpen om te detecteren wanneer u 305 00:16:40,560 --> 00:16:43,185 bekeken bepaalde inhoud of een bepaald e-mailbericht 306 00:16:43,185 --> 00:16:45,230 als u wilt e-mail checken op je TV. 307 00:16:45,230 --> 00:16:48,430 Het registreert de apps die u gebruiken, de websites die u bezoekt, 308 00:16:48,430 --> 00:16:52,280 en hoe je interactie met de inhoud, alles om dat te doen via uw Smart TV. 309 00:16:52,280 --> 00:16:55,470 Ook, creepier yet-- dat is mijn addition-- 310 00:16:55,470 --> 00:16:58,140 heeft een ingebouwde camera met gezichtsherkenning. 311 00:16:58,140 --> 00:17:01,010 >> Het doel is te voorzien gesture control voor de TV 312 00:17:01,010 --> 00:17:05,490 en stellen u in staat om in te loggen op gepersonaliseerde account met uw gezicht. 313 00:17:05,490 --> 00:17:08,940 Op de kop, de beelden zijn opgeslagen op de TV ipv geupload 314 00:17:08,940 --> 00:17:09,940 om een ​​corporate server. 315 00:17:09,940 --> 00:17:12,520 Aan de andere kant, het internet aansluiting maakt het hele TV 316 00:17:12,520 --> 00:17:14,811 kwetsbaar voor hackers die het vermogen hebben aangetoond 317 00:17:14,811 --> 00:17:16,700 om volledige controle over de machine te nemen. 318 00:17:16,700 --> 00:17:20,880 >> Meer verontrustend, alsof dat nog niet slim genoeg, is de microfoon. 319 00:17:20,880 --> 00:17:23,599 De TV beschikt over een stem feature herkenning 320 00:17:23,599 --> 00:17:26,859 waarmee kijkers te controleren het scherm met spraakopdrachten. 321 00:17:26,859 --> 00:17:30,290 Maar de service wordt geleverd met een nogal onheilspellende waarschuwing. 322 00:17:30,290 --> 00:17:33,030 Houd er rekening mee dat als uw gesproken woorden bevatten 323 00:17:33,030 --> 00:17:36,210 persoonlijke of andere gevoelige informatie, die informatie 324 00:17:36,210 --> 00:17:40,310 zal een van de gegevens die zijn vastgelegd en overgedragen aan een derde partij. 325 00:17:40,310 --> 00:17:40,870 Heb je dat? 326 00:17:40,870 --> 00:17:45,860 Gebruik geen persoonlijke of gevoelige zeggen spullen in de voorkant van uw TV. 327 00:17:45,860 --> 00:17:47,280 >> Dus dit is eigenlijk voor de echte. 328 00:17:47,280 --> 00:17:50,530 En het is niet moeilijk om te zien of je ga naar Best Buy en dergelijke voor televisies 329 00:17:50,530 --> 00:17:51,030 deze dagen. 330 00:17:51,030 --> 00:17:52,540 Ze zijn allemaal slim op een bepaalde manier. 331 00:17:52,540 --> 00:17:54,740 En ze krijgen slimmer en griezeliger. 332 00:17:54,740 --> 00:17:57,490 En ze zijn gewoon het verzamelen van gegevens op manieren die we hebben gesproken over 333 00:17:57,490 --> 00:18:01,840 en vervolgens uploaden via HTTP of sommige andere protocol om enkele server. 334 00:18:01,840 --> 00:18:05,720 >> Dus was van een leuke artikel van deze in deze online website 335 00:18:05,720 --> 00:18:08,940 hier, die sprak over een specifieke bug of verkeerde code 336 00:18:08,940 --> 00:18:11,340 dat we eigenlijk kunnen binden in de discussie van vorige week. 337 00:18:11,340 --> 00:18:15,730 Dus deze kop was als volgt, gaat het verhaal hier, 338 00:18:15,730 --> 00:18:18,720 Josh Breckman werkte voor een bedrijf dat een contract geland 339 00:18:18,720 --> 00:18:22,390 naar een content management ontwikkelen systeem, of CMS zoals ze heten, 340 00:18:22,390 --> 00:18:24,380 voor een vrij grote website van de overheid. 341 00:18:24,380 --> 00:18:27,300 Een groot deel van het project betrokken zijn het ontwikkelen van een content management systeem 342 00:18:27,300 --> 00:18:29,840 zodat de werknemers zou zijn in staat zijn om te bouwen en te onderhouden 343 00:18:29,840 --> 00:18:31,877 de steeds veranderende content voor hun site. 344 00:18:31,877 --> 00:18:34,210 Het ging vrij goed voor een paar dagen na livegang. 345 00:18:34,210 --> 00:18:37,020 Maar op dag zes, ging het niet zo goed. 346 00:18:37,020 --> 00:18:39,500 Alle van de inhoud op de website was volledig verdwenen. 347 00:18:39,500 --> 00:18:42,950 En alle pagina's heeft geleid tot de standaard, Voer inhoud webpagina. 348 00:18:42,950 --> 00:18:43,810 Whoops. 349 00:18:43,810 --> 00:18:46,080 Josh werd ingeschakeld om onderzoeken en merkte 350 00:18:46,080 --> 00:18:49,390 dat een bijzonder lastig extern IP-adres had 351 00:18:49,390 --> 00:18:53,380 gegaan en verwijderde alle de inhoud van het systeem. 352 00:18:53,380 --> 00:18:56,290 >> Het IP-adres behoorde niet naar een aantal overzeese hacker verbogen 353 00:18:56,290 --> 00:18:58,340 op het vernietigen behulpzaam overheidsinformatie. 354 00:18:58,340 --> 00:19:05,190 Het besloten googlebot.com, Google's eigen web kruipen spider. 355 00:19:05,190 --> 00:19:06,010 Whoops. 356 00:19:06,010 --> 00:19:09,150 Na een beetje onderzoek en klauteren rond om een ​​noncorrupt backup te vinden, 357 00:19:09,150 --> 00:19:10,180 Josh vond het probleem. 358 00:19:10,180 --> 00:19:12,700 >> Een gebruiker had gekopieerd en geplakt bepaalde content van de ene 359 00:19:12,700 --> 00:19:15,670 pagina naar een andere, zoals Een Hyperlink bewerken 360 00:19:15,670 --> 00:19:17,577 om de inhoud van de pagina te wijzigen. 361 00:19:17,577 --> 00:19:20,160 Normaal gesproken zou dit niet een probleem, omdat een externe gebruiker zou 362 00:19:20,160 --> 00:19:24,320 nodig hebt om een ​​naam en wachtwoord in te voeren, maar het CMS authenticatiesysteem, 363 00:19:24,320 --> 00:19:27,520 het login-systeem, geen rekening gehouden met 364 00:19:27,520 --> 00:19:30,980 geavanceerde hacking technieken van Google Spider. 365 00:19:30,980 --> 00:19:31,700 Whoops. 366 00:19:31,700 --> 00:19:33,610 >> Aangezien het blijkt, Google Spider niet gebruiken 367 00:19:33,610 --> 00:19:36,950 cookies, hetgeen betekent dat het kan gemakkelijk te omzeilen een cheque voor de 368 00:19:36,950 --> 00:19:39,840 is aangemeld cookie-set te zijn vals. 369 00:19:39,840 --> 00:19:42,620 Het maakt ook geen aandacht besteden aan JavaScript, dat normaal zou doen 370 00:19:42,620 --> 00:19:45,170 prompt en gebruikers worden doorverwezen wie bent niet ingelogd. 371 00:19:45,170 --> 00:19:48,610 Het nochtans volgt elke hyperlink op elke pagina het vindt, 372 00:19:48,610 --> 00:19:51,700 waaronder die met Pagina verwijderen in de titel. 373 00:19:51,700 --> 00:19:52,650 Whoops. 374 00:19:52,650 --> 00:19:56,070 >> Dus wat betekent dit in meer technische maar vrij toegankelijke termen? 375 00:19:56,070 --> 00:19:58,340 Het betekent alleen dat gedurende hun website, 376 00:19:58,340 --> 00:20:02,287 zij URLs niet anders deze die je zou kunnen zien in probleem stelde zeven. 377 00:20:02,287 --> 00:20:04,620 Recall in probleem stelde zeven of weet in probleem stelde zeven 378 00:20:04,620 --> 00:20:06,411 dat je uitgedaagd, onder andere, 379 00:20:06,411 --> 00:20:08,570 om de voorraden te verkopen ten behoeve van gebruikers. 380 00:20:08,570 --> 00:20:14,010 Maar de uitvoering van die functie door middel van te krijgen via hyperlinks in uw gebruikersprofiel 381 00:20:14,010 --> 00:20:16,880 interface waarschijnlijk niet het slimste idee 382 00:20:16,880 --> 00:20:20,300 want als uw site is een of andere manier bereikbaar met de mens 383 00:20:20,300 --> 00:20:23,577 wie er rond te klikken of koop een bot zoals Google of een Spider 384 00:20:23,577 --> 00:20:26,160 zo heten ze dat gewoon het web te doorzoeken proberen te indexeren 385 00:20:26,160 --> 00:20:29,060 het web als een zoekmachine, ze konden heel gemakkelijk 386 00:20:29,060 --> 00:20:31,340 hit via krijgen dit soort URL. 387 00:20:31,340 --> 00:20:33,770 En dat is functioneel gelijk aan, in dit geval, 388 00:20:33,770 --> 00:20:37,000 de verkoop van alle aandelen van Google. 389 00:20:37,000 --> 00:20:40,030 >> Nu eerlijk gezegd, het is volledig stompzinnig dat het CMS 390 00:20:40,030 --> 00:20:43,240 gebruikte JavaScript en cookies om zijn login systeem te implementeren 391 00:20:43,240 --> 00:20:47,100 en niet het doen van die server side, zoals jullie doen en zal in Pset 7-- 392 00:20:47,100 --> 00:20:49,940 er is een login.php file-- altijd, altijd, 393 00:20:49,940 --> 00:20:52,789 altijd de beveiliging zou moeten zijn gedaan op de server, 394 00:20:52,789 --> 00:20:56,080 niet aan de client omdat dit artikel suggereert en die je misschien zelf 395 00:20:56,080 --> 00:20:59,600 zien op een bepaald punt, het is triviaal voor een gebruiker, goed of slecht, 396 00:20:59,600 --> 00:21:02,860 om gewoon uit te schakelen JavaScript niet om cookies te noemen. 397 00:21:02,860 --> 00:21:06,020 Dus dat is je dagelijkse WTF. 398 00:21:06,020 --> 00:21:07,970 >> Er is nog één, die is gewoon een beetje eng, 399 00:21:07,970 --> 00:21:11,360 dus ik zal het vermelden of alleen als een levensles. 400 00:21:11,360 --> 00:21:14,850 Wanneer u een toepassing gebruiken genoemd als Snapchat of iets dergelijks 401 00:21:14,850 --> 00:21:19,380 die zegt dat deze foto's alleen duren vijf seconden, tien seconden of zo. 402 00:21:19,380 --> 00:21:21,680 Ze zijn kortstondige Dat is absoluut niet het geval. 403 00:21:21,680 --> 00:21:25,670 Alsof er geen manier, digitaal, uit te voeren of andere vorm van video, 404 00:21:25,670 --> 00:21:30,150 of afbeelding, of tekstuele delen van dergelijke dat de ontvanger aan de andere kant 405 00:21:30,150 --> 00:21:31,660 kan niet een of andere manier de gegevens op te slaan. 406 00:21:31,660 --> 00:21:34,300 >> In de meest naïeve manier, iemand konden hun telefoon mee te nemen. 407 00:21:34,300 --> 00:21:36,850 En ze hebben een 10 tweede venster terwijl kijken naar een aantal snap 408 00:21:36,850 --> 00:21:39,410 om gewoon een ander telefoonnummer en fotograferen, natuurlijk. 409 00:21:39,410 --> 00:21:41,660 Dus je kunt behouden iets digitaal op die manier. 410 00:21:41,660 --> 00:21:44,620 Sommigen van jullie weten hoe te nemen screenshots op je telefoon. 411 00:21:44,620 --> 00:21:49,290 In feite, als je dit niet weet, realiseren dat ten minste Snapchat, 412 00:21:49,290 --> 00:21:51,040 en ik denk dat andere applicaties deze dagen, 413 00:21:51,040 --> 00:21:53,720 je tenminste als het vertellen ontvanger heeft eigenlijk 414 00:21:53,720 --> 00:21:55,310 genomen een screenshot van uw afbeelding. 415 00:21:55,310 --> 00:22:00,870 >> Maar erger nog, dit was de snappening, iemand bedacht onlangs, 416 00:22:00,870 --> 00:22:04,680 waar zo'n 100.000 snaps was vrijgelaten 417 00:22:04,680 --> 00:22:09,310 in wat een torrent bestand genaamd op diverse websites uiteindelijk. 418 00:22:09,310 --> 00:22:12,000 En deze bevatte een hele hoop van privé-berichten en berichten. 419 00:22:12,000 --> 00:22:15,210 Het blijkt dat de meeste van hen goedaardig, dus niet wat je zou verwachten. 420 00:22:15,210 --> 00:22:17,580 Maar omdat mensen hadden gebruik gemaakt van een website van derden, 421 00:22:17,580 --> 00:22:20,270 inloggen met hun Snapchat gebruikersnaam en wachtwoord en vervolgens 422 00:22:20,270 --> 00:22:23,470 het opslaan van al hun kiekjes Op deze website van derden. 423 00:22:23,470 --> 00:22:26,130 En het was die derde website die is gehackt, 424 00:22:26,130 --> 00:22:30,710 die net betekende iemand bedacht hoe om alle 100.000 plus van die beelden te krijgen 425 00:22:30,710 --> 00:22:33,822 in hun eigen harde schijf voor volgende delen. 426 00:22:33,822 --> 00:22:36,030 Eerlijk gezegd, ook hier, het is een soort van stompzinnige dat Snapchat 427 00:22:36,030 --> 00:22:39,360 zodanig is uitgevoerd dat een derde partij kunt sorteren van onderscheppen 428 00:22:39,360 --> 00:22:43,310 de gegevens en dat het niet is gekoppeld aan uw eigen applicatie die op de telefoon. 429 00:22:43,310 --> 00:22:46,947 Maar ook hier beseffen dat deze dingen moet je niet verrast wordt door, 430 00:22:46,947 --> 00:22:49,030 of in ieder geval er moet zijn een levensles in hier. 431 00:22:49,030 --> 00:22:52,220 Indien u graag de technische informatie, ga naar de URL er 432 00:22:52,220 --> 00:22:53,570 dat is in de dia's van vandaag. 433 00:22:53,570 --> 00:23:00,960 Oké, nog vragen op het leven van vandaag de lessen in CS? 434 00:23:00,960 --> 00:23:02,710 Zet dat af. 435 00:23:02,710 --> 00:23:04,970 Helemaal niets? 436 00:23:04,970 --> 00:23:06,301 Helemaal niets? 437 00:23:06,301 --> 00:23:09,050 Ik heb veel mensen inchecken kreeg hun Snapchat of iets nu. 438 00:23:09,050 --> 00:23:11,690 >> Oké, dus SQL, Structured Query Language. 439 00:23:11,690 --> 00:23:12,509 Laten we wikkel dit. 440 00:23:12,509 --> 00:23:14,300 Ook, hoewel we zijn gewoon krabben 441 00:23:14,300 --> 00:23:16,310 het oppervlak van deze taal, geven wij u 442 00:23:16,310 --> 00:23:18,930 genoeg van de taal in de vorm van Pset 7 443 00:23:18,930 --> 00:23:22,140 zodat u wat kunt pakken vrij algemeen functionaliteit. 444 00:23:22,140 --> 00:23:24,912 Maar beseffen dat er een paar dingen die we niet nodig hebben van u, 445 00:23:24,912 --> 00:23:27,120 maar ze gaan worden belangrijke komen afstudeeropdrachten 446 00:23:27,120 --> 00:23:30,760 en zeker komen waardoor werkelijke websites met feitelijke gebruikers 447 00:23:30,760 --> 00:23:32,040 is dit ontwerp beslissing. 448 00:23:32,040 --> 00:23:34,460 >> Het blijkt dat in een MySQL database, u 449 00:23:34,460 --> 00:23:37,460 hebben trossen van keuzes, zoals de data types voor uw columns 450 00:23:37,460 --> 00:23:41,670 en andere dingen, maar je hebt ook de keuze van een zogenaamde storage 451 00:23:41,670 --> 00:23:44,570 motor voor al uw gegevens, het soort bestandssysteem, 452 00:23:44,570 --> 00:23:46,700 als je bekend bent, voor al uw gegevens. 453 00:23:46,700 --> 00:23:48,830 Welk formaat is het uiteindelijk opgeslagen in? 454 00:23:48,830 --> 00:23:53,300 En de meest voorkomende, misschien, is MyISAM en InnoDB, technische termen 455 00:23:53,300 --> 00:23:56,060 dat we alleen zullen de zorg over in zoverre dat men 456 00:23:56,060 --> 00:23:58,500 en men niet de volgende functie. 457 00:23:58,500 --> 00:24:00,390 >> Stel dat je hebt een kleine slaapzaal koelkast. 458 00:24:00,390 --> 00:24:03,030 En stel dat u en uw kamergenoot, die deze koelkast te delen, 459 00:24:03,030 --> 00:24:04,682 zijn echt dol op zeg melk. 460 00:24:04,682 --> 00:24:07,140 En dit is in feite hoe de verhaal werd verteld om me weg terug 461 00:24:07,140 --> 00:24:10,890 in de dag toen ik een cursus genaamd CS 161 Operating Systems, dat 462 00:24:10,890 --> 00:24:12,580 evenzo verkent dit onderwerp. 463 00:24:12,580 --> 00:24:13,760 Dus je hebt deze koelkast. 464 00:24:13,760 --> 00:24:14,630 Je bent uit melk. 465 00:24:14,630 --> 00:24:17,000 En kom je thuis, je kamergenoot's nog in de klas of wat dan ook, 466 00:24:17,000 --> 00:24:19,208 en je besluit ik ga naar buiten en krijgen wat melk. 467 00:24:19,208 --> 00:24:22,630 Zodat u de koelkast te sluiten, lockup de slaapzaal, naar de overkant van de straat 468 00:24:22,630 --> 00:24:25,330 CVS of waar dan ook, en krijg in de rij om wat melk te kopen. 469 00:24:25,330 --> 00:24:28,960 >> Ondertussen, je kamergenoot thuiskomt uit de klas, krijgt in de slaapzaal, 470 00:24:28,960 --> 00:24:31,802 opent de koelkast, beseft ook ooph, we zijn uit melk. 471 00:24:31,802 --> 00:24:33,760 Zodat hij of zij sluit de koelkast en dan gebeurt 472 00:24:33,760 --> 00:24:35,610 om naar de andere CVS, die gebeurt te zijn 473 00:24:35,610 --> 00:24:38,470 een blok afstand van de andere CVS op het plein, en krijgt in de lijn 474 00:24:38,470 --> 00:24:40,230 er om wat melk te krijgen. 475 00:24:40,230 --> 00:24:42,524 Nu, natuurlijk, een paar minuten later, jullie beiden terug te krijgen, 476 00:24:42,524 --> 00:24:44,690 en het ergste van alles mogelijk uitkomsten is gebeurd. 477 00:24:44,690 --> 00:24:45,792 Beide heb je melk. 478 00:24:45,792 --> 00:24:47,500 En je echt niet zoals melk dat veel. 479 00:24:47,500 --> 00:24:49,625 Dus een van hen is gewoon gaan verzuren op een bepaald punt. 480 00:24:49,625 --> 00:24:55,941 Dus nu heb je een te hoog bedrag van melk in de koelkast al want waarom? 481 00:24:55,941 --> 00:24:57,072 >> [Onverstaanbaar] 482 00:24:57,072 --> 00:24:59,780 DAVID MALAN: Ja, je deed het niet of andere manier met elkaar 483 00:24:59,780 --> 00:25:00,904 dat je krijgt melk. 484 00:25:00,904 --> 00:25:04,320 Dus in de eenvoudigste wijze de menselijke wereld, 485 00:25:04,320 --> 00:25:08,390 hoe kun je voorkomen dat deze domme scenario van het gebeuren zoals 486 00:25:08,390 --> 00:25:09,750 dat je alleen maar eindigen met een. 487 00:25:09,750 --> 00:25:10,840 Tekst hen, ja goed. 488 00:25:10,840 --> 00:25:12,877 Maar hoe anders? 489 00:25:12,877 --> 00:25:13,460 Post-it notes. 490 00:25:13,460 --> 00:25:14,626 DAVID MALAN: een post-it note. 491 00:25:14,626 --> 00:25:17,150 Elke vorm van communicatie dat vertelt je kamergenoot 492 00:25:17,150 --> 00:25:18,670 ga niet in de koelkast voor de melk. 493 00:25:18,670 --> 00:25:20,440 Ik ga om te gaan werkbezoek op mijn eigen. 494 00:25:20,440 --> 00:25:22,770 Zodat u een of andere manier nodig om dit onderdeel te vergrendelen. 495 00:25:22,770 --> 00:25:27,180 Dus we kunnen dit-- maken we can soort verpesten het verhaal en om te zetten in een CS verhaal 496 00:25:27,180 --> 00:25:30,360 waarbij te denken aan dit als net als een variabele, die opslag een bepaalde waarde. 497 00:25:30,360 --> 00:25:32,570 En op dit moment, de van melk nul, 498 00:25:32,570 --> 00:25:35,410 die u niet wilt dat uw kamergenoot om die variabele inspecteren 499 00:25:35,410 --> 00:25:38,730 en dan een beslissing nemen hem of haarzelf gebaseerd op de toestand van die variabele 500 00:25:38,730 --> 00:25:42,430 als je in het proces van veranderen van de toestand van die variabele. 501 00:25:42,430 --> 00:25:46,140 >> Dus een van de regels van SQL dat we geven u in Pset 7 specificatie 502 00:25:46,140 --> 00:25:47,310 is dit één hier. 503 00:25:47,310 --> 00:25:49,740 En we niet uitgeven een enorme hoeveelheid tijd die er over te praten. 504 00:25:49,740 --> 00:25:55,100 Maar het blijkt, als je probeert om wat aandelen te kopen in CS50 finance 505 00:25:55,100 --> 00:25:58,000 dat je al hebt aantal aandelen van, u 506 00:25:58,000 --> 00:26:01,750 willen in staat zijn om een ​​nummer te doen dingen direct bij elkaar. 507 00:26:01,750 --> 00:26:04,360 U wilt in staat zijn om effectief, op een hoog niveau, 508 00:26:04,360 --> 00:26:06,700 check in orde, als ik wil om meer aandelen van Free kopen, 509 00:26:06,700 --> 00:26:08,780 de penny stock we praten over in de spec, 510 00:26:08,780 --> 00:26:10,660 Ik wil eerst controleren hoeveel aandelen ik heb. 511 00:26:10,660 --> 00:26:11,810 En veronderstel dat het vijf. 512 00:26:11,810 --> 00:26:14,600 En stel dat ik wil uiteindelijk koopt 10 meer, ik 513 00:26:14,600 --> 00:26:17,069 willen 15 aandelen van de voorraad hebben. 514 00:26:17,069 --> 00:26:18,360 Dus ik heb twee vragen stellen. 515 00:26:18,360 --> 00:26:20,230 Wat de stand van de variabele? 516 00:26:20,230 --> 00:26:21,470 Wat is de staat van de rij? 517 00:26:21,470 --> 00:26:22,970 Hoeveel aandelen heb ik op dit moment? 518 00:26:22,970 --> 00:26:24,636 Dan wil je om verder te gaan en te actualiseren. 519 00:26:24,636 --> 00:26:27,720 Zodat de analoog de melk in dat u de rij te controleren, 520 00:26:27,720 --> 00:26:30,730 en dan wil je om het te actualiseren want als je wilt 10 aandelen te kopen, 521 00:26:30,730 --> 00:26:32,521 je niet wilt veranderen de rij om 10 u 522 00:26:32,521 --> 00:26:35,300 wil om het te veranderen naar 5 plus 10 of natuurlijk 15. 523 00:26:35,300 --> 00:26:40,030 >> Deze regel code zorgt ervoor dat die twee conceptuele ideeën 524 00:26:40,030 --> 00:26:42,810 gebeuren samen of helemaal niet. 525 00:26:42,810 --> 00:26:46,920 Niemand, ook een andere gebruiker wie er ingelogd op dezelfde website, 526 00:26:46,920 --> 00:26:49,900 kan een of andere manier te onderbreken de controle van de rij 527 00:26:49,900 --> 00:26:52,960 en de actualisering van de rij, de selecteren en de update als je wil. 528 00:26:52,960 --> 00:26:57,360 En de syntax is niet super voor de hand liggend, maar deze lijn, lang is het is, 529 00:26:57,360 --> 00:27:01,150 garandeert dat deze twee operaties controleer de variabele of controleer de rij 530 00:27:01,150 --> 00:27:04,660 en update de rij gebeuren atomair. 531 00:27:04,660 --> 00:27:06,849 >> Oh daar gaan we weer. 532 00:27:06,849 --> 00:27:07,890 Tekstbericht op mijn telefoon. 533 00:27:07,890 --> 00:27:09,954 Dus laten we dit een beetje meer beton. 534 00:27:09,954 --> 00:27:12,120 Stel dat u niet het implementeren van een koelkast, 535 00:27:12,120 --> 00:27:16,400 en je bent niet de uitvoering Pset 7, maar een werkelijke bank, 536 00:27:16,400 --> 00:27:20,000 of een geldautomaat, een Automated Teller Machine, waarbij je een of andere manier 537 00:27:20,000 --> 00:27:22,960 willen in staat zijn om te machtigen gebruikers om geld 538 00:27:22,960 --> 00:27:24,500 van de ene rekening naar de andere. 539 00:27:24,500 --> 00:27:25,100 OK, hang op. 540 00:27:25,100 --> 00:27:26,683 Ik ga dit nu dempen, dank je. 541 00:27:26,683 --> 00:27:30,450 Dus we willen geld verhuizen van het ene rekeningnummer 542 00:27:30,450 --> 00:27:33,600 in een ander account nummer, bijzonder 100 $. 543 00:27:33,600 --> 00:27:37,690 Dus dit is een soort van een willekeurige bijvoorbeeld, waarbij u, de ATM, 544 00:27:37,690 --> 00:27:41,060 Misschien wil je twee SQL-code queries, aftrekken van de ene rekening, 545 00:27:41,060 --> 00:27:42,430 en toe te voegen aan de andere rekening. 546 00:27:42,430 --> 00:27:46,766 Maar wilt u ervoor zorgen dat deze twee lijnen zowel gebeuren of helemaal niet. 547 00:27:46,766 --> 00:27:48,640 Je iets niet wilt krijgen onderbroken. 548 00:27:48,640 --> 00:27:51,440 Je hoeft niet een aantal slimme bad guy een of andere manier staan ​​bij Bank of America 549 00:27:51,440 --> 00:27:53,270 met twee geldautomaten in de voorkant van hem en een of andere manier 550 00:27:53,270 --> 00:27:55,270 soort van typen in de opdrachten tegelijkertijd, 551 00:27:55,270 --> 00:28:01,230 hopelijk proberen op aftrek $ 200 in plaats van $ 100 en alleen het hebben van $ 100 bijgeschreven. 552 00:28:01,230 --> 00:28:04,450 Kortom, dit wilt u gedragen zich precies zoals je verwacht. 553 00:28:04,450 --> 00:28:06,540 >> En de manier waarop je dat doet Dit in SQL database 554 00:28:06,540 --> 00:28:09,350 je het verpakken in wat zogenaamde transactie. 555 00:28:09,350 --> 00:28:14,290 Letterlijk in SQL, kunt u bellen met CS50's query-functie met quote unquote start 556 00:28:14,290 --> 00:28:15,370 transactie. 557 00:28:15,370 --> 00:28:18,640 Dan kunt u een willekeurig aantal uit te voeren latere SQL queries, 558 00:28:18,640 --> 00:28:20,870 maar geen van hen te nemen Effect op de database 559 00:28:20,870 --> 00:28:25,880 totdat je vraag offerte unquote noemen plegen, indien het nogmaals met behulp van PHP. 560 00:28:25,880 --> 00:28:29,810 En op deze manier kunt u ervoor zorgen dat zelfs als je 1.000 gebruikers alle 561 00:28:29,810 --> 00:28:32,080 het raken van uw database tegelijkertijd, SQL 562 00:28:32,080 --> 00:28:34,540 zal beloven dat deze twee vragen zullen worden 563 00:28:34,540 --> 00:28:36,740 geïmplementeerd ene na de andere. 564 00:28:36,740 --> 00:28:40,330 Zodat je niet eindigen met een overmaat van melk of het verkeerde bedrag, uiteindelijk, 565 00:28:40,330 --> 00:28:40,830 van het geld. 566 00:28:40,830 --> 00:28:43,110 >> Dus dit in gedachten houden, niet zozeer voor Pset 7 567 00:28:43,110 --> 00:28:45,250 maar voor de laatste projecten als je werkelijk bent 568 00:28:45,250 --> 00:28:49,690 probeert data verplaatsen in de tabellen als je misschien hier. 569 00:28:49,690 --> 00:28:53,980 Maar misschien nog eenvoudiger en meer duidelijk te begrijpen met een voorbeeld 570 00:28:53,980 --> 00:28:54,860 is dit één hier. 571 00:28:54,860 --> 00:28:57,760 En iemand ons gemaild over dit alleen de andere dag 572 00:28:57,760 --> 00:28:59,600 toen hij iets zag gelijkaardige online. 573 00:28:59,600 --> 00:29:03,480 >> Dus naar mijn weten, het pin-systeem is niet kwetsbaar voor deze aanval. 574 00:29:03,480 --> 00:29:06,637 En ik heb geen idee of het nog gebruik de SQL-database onder de motorkap. 575 00:29:06,637 --> 00:29:08,470 Maar laten we het gebruiken voor Ter wille van de discussie. 576 00:29:08,470 --> 00:29:10,178 Hier is het scherm dat Harvard mensen hebben de neiging 577 00:29:10,178 --> 00:29:13,620 om te zien als je inlogt op hun Harvard ID-nummer en hun pin. 578 00:29:13,620 --> 00:29:19,020 En stel dat het pin-systeem waren in PHP en een MySQL geïmplementeerd 579 00:29:19,020 --> 00:29:22,000 databank, de code die iemand misschien hebben geschreven jaar geleden 580 00:29:22,000 --> 00:29:23,270 kan er zo uitzien. 581 00:29:23,270 --> 00:29:25,230 Eerste, verklaren een variabele genaamd gebruikersnaam. 582 00:29:25,230 --> 00:29:27,560 En gewoon dat vanaf de POST superglobal. 583 00:29:27,560 --> 00:29:30,140 Dan krijg een andere variabele riep wachtwoord en hetzelfde doen. 584 00:29:30,140 --> 00:29:33,080 En dan gewoon uit te voeren deze lange vraag hier, 585 00:29:33,080 --> 00:29:36,690 select ster van gebruikers waar gebruikersnaam is gelijk aan die en die 586 00:29:36,690 --> 00:29:38,510 en het wachtwoord is gelijk aan die en die. 587 00:29:38,510 --> 00:29:40,660 >> Merk op dat de krullend braces Ik heb hier gebruikt 588 00:29:40,660 --> 00:29:42,880 gewoon betekenen voor PHP, ga vooruit en vervangende 589 00:29:42,880 --> 00:29:45,400 de waarde van deze twee variabelen daar. 590 00:29:45,400 --> 00:29:50,090 Ze zijn niet strikt noodzakelijk, maar hebben ze de neiging om subtiele syntax fouten te voorkomen. 591 00:29:50,090 --> 00:29:53,650 Dus dit ziet er heel correct op het eerste gezicht. 592 00:29:53,650 --> 00:29:54,240 En het is. 593 00:29:54,240 --> 00:29:56,680 Je zou de uitvoering van het pin-systeem op deze manier. 594 00:29:56,680 --> 00:30:00,460 >> Maar stel dat een super slim en kwaadaardige student 595 00:30:00,460 --> 00:30:03,020 inbreng dit als zijn of haar pin. 596 00:30:03,020 --> 00:30:05,550 Dus ik heb de kogel verwijderd tekenen hier in de mock-up, 597 00:30:05,550 --> 00:30:08,760 en ik heb eigenlijk onthuld wat hij of zij zou kunnen typen. 598 00:30:08,760 --> 00:30:10,350 En het is een beetje vreemd. 599 00:30:10,350 --> 00:30:13,850 Maar wat uit bij u springt op potentieel zorgelijk over invoer van de gebruiker, 600 00:30:13,850 --> 00:30:16,450 zelfs als je geen idee hebt wat een SQL-injectie aanval betekent. 601 00:30:16,450 --> 00:30:20,300 Waarom heeft deze er een beetje fishy? 602 00:30:20,300 --> 00:30:21,050 Wat is dat? 603 00:30:21,050 --> 00:30:21,550 [Onverstaanbaar] 604 00:30:21,550 --> 00:30:24,260 DAVID MALAN: Het is of een beetje achterdochtig. 605 00:30:24,260 --> 00:30:26,310 In feite, dat is een trefwoord uit SQL. 606 00:30:26,310 --> 00:30:28,105 Dus dat voorspelt niet veel goeds. 607 00:30:28,105 --> 00:30:29,980 Het feit dat er al deze enkele aanhalingstekens 608 00:30:29,980 --> 00:30:32,646 er-- in feite een van de eenvoudigste manieren om wat databases breken 609 00:30:32,646 --> 00:30:35,880 is door het intypen van een naam als O'Reilly waarvan een apostrof daarin 610 00:30:35,880 --> 00:30:38,600 want als de mens die schreef de code achter de schermen 611 00:30:38,600 --> 00:30:41,570 geen rekening mee gehouden dat er misschien enkele aanhalingstekens in een gebruiker 612 00:30:41,570 --> 00:30:45,060 input, en hij gebruikt enkele aanhalingstekens in hun code, 613 00:30:45,060 --> 00:30:46,040 slechte dingen kunnen gebeuren. 614 00:30:46,040 --> 00:30:47,870 >> In feite, erger nog, overweeg dan dit. 615 00:30:47,870 --> 00:30:50,600 Als dit was weer de code dat iemand op Harvard jaar 616 00:30:50,600 --> 00:30:53,100 geleden schreef voor de pin systeem, let op wat is 617 00:30:53,100 --> 00:30:56,220 over te krijgen vervangen voor gebruikersnaam en wachtwoord 618 00:30:56,220 --> 00:30:59,780 Als de gebruiker types weer skroob als hun gebruikersnaam 619 00:30:59,780 --> 00:31:03,960 en daarna één, twee, drie, vier, vijf, offerte of prijsopgave unquote één gelijken 620 00:31:03,960 --> 00:31:04,660 citeer één. 621 00:31:04,660 --> 00:31:07,220 En let op wat is key hier is de gebruiker heeft niet 622 00:31:07,220 --> 00:31:09,900 begonnen hun wachtwoord of hun pin met een citaat. 623 00:31:09,900 --> 00:31:12,610 En ze hebben het niet afgelopen met een citaat, omdat hij of zij 624 00:31:12,610 --> 00:31:16,315 wordt aangenomen dat indien de programmeur was niet zo scherp, 625 00:31:16,315 --> 00:31:18,690 ze gaan die hebben enkele aanhalingstekens in hun code. 626 00:31:18,690 --> 00:31:19,860 >> Dus hier is de code. 627 00:31:19,860 --> 00:31:23,820 En de vervanging die misschien nu gebeuren is dit. 628 00:31:23,820 --> 00:31:26,350 En ik heb onderstreept wat de gebruiker heeft getypt. 629 00:31:26,350 --> 00:31:28,480 Dus voordat na. 630 00:31:28,480 --> 00:31:33,330 En let op wat is mild zorgelijk nu over de rechter helft van deze SQL-code? 631 00:31:33,330 --> 00:31:36,300 Het is een beetje ingewikkelder, toegegeven, dan de vragen die we hebben gezien. 632 00:31:36,300 --> 00:31:38,550 Maar dit kan onmogelijk een goede zaak als je 633 00:31:38,550 --> 00:31:42,240 zeggen select ster, die is select alles van de tafel van de gebruiker 634 00:31:42,240 --> 00:31:46,630 waar gebruikersnaam gelijk skroob en wachtwoord gelijk aan één, twee, drie, vier, 635 00:31:46,630 --> 00:31:49,610 vijf of één gelijk is aan één. 636 00:31:49,610 --> 00:31:53,860 Wat is de logische implicatie van die laatste clausule vermoedelijk? 637 00:31:53,860 --> 00:31:55,650 Het is gewoon altijd waar. 638 00:31:55,650 --> 00:31:59,930 >> En omdat we een soort van geraden of bedacht door trial and error 639 00:31:59,930 --> 00:32:02,760 dat de programmeur die schreef deze code niet 640 00:32:02,760 --> 00:32:07,250 anticiperen op een mens of een slecht persoon typen in enkele aanhalingstekens als goed, 641 00:32:07,250 --> 00:32:10,350 we kunnen syntactisch voltooi de SQL-query 642 00:32:10,350 --> 00:32:12,260 met iets onzinnige maar iets dat 643 00:32:12,260 --> 00:32:15,930 syntactisch onjuist die altijd true. 644 00:32:15,930 --> 00:32:19,130 Als deze code wordt gebruikt om te antwoorden de vraag waar of onwaar moet 645 00:32:19,130 --> 00:32:22,930 Deze gebruiker worden toegestaan ​​om, het passeren antwoord is altijd blijkbaar gaat 646 00:32:22,930 --> 00:32:26,930 om waar te zijn, want dit zal altijd om iets uit de database selecteren 647 00:32:26,930 --> 00:32:29,280 omdat een natuurlijk altijd gelijk aan één. 648 00:32:29,280 --> 00:32:30,360 >> Dus wat is de oplossing? 649 00:32:30,360 --> 00:32:33,290 Welnu, in Pset 7, we eigenlijk vermijd dit allemaal samen. 650 00:32:33,290 --> 00:32:37,360 Wij geven u een query-functie, en we moedigen u aan om vraagtekens te gebruiken 651 00:32:37,360 --> 00:32:40,430 als placeholders, vergelijkbaar in de geest om printf's% s, 652 00:32:40,430 --> 00:32:43,710 maar wat is sleutel over de vraagtekens hier is als je daadwerkelijk door te lezen 653 00:32:43,710 --> 00:32:46,950 functions.php, waar onze query-functie wordt uitgevoerd, 654 00:32:46,950 --> 00:32:52,780 die vraagtekens zijn ontsnapt, waarbij iets potentieel gevaarlijke 655 00:32:52,780 --> 00:32:58,210 als een enkele quote is ingeschakeld in een ontsnapte enkele offerte. 656 00:32:58,210 --> 00:33:00,590 >> Dus dit is wat is echt gebeurt als je 657 00:33:00,590 --> 00:33:04,850 Gebruik CS50's query-functie of een aantal van derden vrije bibliotheken die 658 00:33:04,850 --> 00:33:06,000 hetzelfde doen. 659 00:33:06,000 --> 00:33:09,850 Maakt niet uit in dit geval, in het groen, als de gebruiker in één offerte heeft getypt 660 00:33:09,850 --> 00:33:12,070 omdat de query functie die we schreven is 661 00:33:12,070 --> 00:33:15,120 ga backslashes toevoegen voordat dergelijke gevaarlijke offerte. 662 00:33:15,120 --> 00:33:17,360 Dus dit is niet in Eigenlijk gaat legit te zijn. 663 00:33:17,360 --> 00:33:20,910 Dit is als het typen in een gek op zoek wachtwoord dat is, uiteraard, niet van plan 664 00:33:20,910 --> 00:33:23,490 om skroob werkelijke wachtwoord. 665 00:33:23,490 --> 00:33:28,260 >> Dus de afhaalmaaltijden voor CS50 is één, absoluut altijd wel iets gebruiken 666 00:33:28,260 --> 00:33:30,860 zoals CS50's query-functie of de onderliggende bibliotheek 667 00:33:30,860 --> 00:33:32,560 die toevallig worden genoemd BOB. 668 00:33:32,560 --> 00:33:35,880 Maar nooit, nooit, nooit code doen als dit 669 00:33:35,880 --> 00:33:39,472 zonder ontsnapt of schrobben zoals ze zeggen uw input. 670 00:33:39,472 --> 00:33:42,430 En je zult op een gegeven moment waarschijnlijk tegenkomen website als deze. 671 00:33:42,430 --> 00:33:46,060 Sterker nog, het lijkt het geval te zijn zoals op luchthavens en hotels in plaatsen 672 00:33:46,060 --> 00:33:48,880 waar ze hebben gratis Wi-Fi toegang dat je moet inloggen om, 673 00:33:48,880 --> 00:33:51,010 deze websites zijn altijd afschuwelijk geïmplementeerd. 674 00:33:51,010 --> 00:33:55,680 En dus een soort van plezier thuis oefenen, niet voor kwaadaardige doeleinden of meer 675 00:33:55,680 --> 00:33:59,170 een plezier onderweg oefening, is om gewoon te typen 676 00:33:59,170 --> 00:34:02,850 een apostrof, een enkel citaat, in een formulier sommige website 677 00:34:02,850 --> 00:34:03,810 en zie wat er gebeurt. 678 00:34:03,810 --> 00:34:06,660 En als de server crasht of geeft je een soort van foutmelding, 679 00:34:06,660 --> 00:34:09,690 het kan heel goed zijn dat iemand heeft dit niet verwacht. 680 00:34:09,690 --> 00:34:15,239 En dan moet je de juiste waarschuwen instanties en ga niet verder. 681 00:34:15,239 --> 00:34:20,843 >> Dus nu moeten jullie hopelijk begrijpen een beetje meer geek humor hier. 682 00:34:20,843 --> 00:34:24,120 >> [Lachen] 683 00:34:24,120 --> 00:34:27,571 684 00:34:27,571 --> 00:34:29,070 DAVID MALAN: Je weet dat je een geek. 685 00:34:29,070 --> 00:34:30,944 Voor de komende paar jaar, zal je nog 686 00:34:30,944 --> 00:34:33,520 die weinig Bobby Tables is vanwege deze cartoon hier. 687 00:34:33,520 --> 00:34:36,760 Dus hou dat in gedachten als we context switch nog een laatste keer 688 00:34:36,760 --> 00:34:38,770 vandaag om JavaScript. 689 00:34:38,770 --> 00:34:41,600 We hebben relatief weinig uitgegeven tijd op de syntaxis van PHP 690 00:34:41,600 --> 00:34:43,440 want het is eigenlijk super Soortgelijke C. 691 00:34:43,440 --> 00:34:47,300 En mooi genoeg, JavaScript te super vergelijkbaar C's syntax 692 00:34:47,300 --> 00:34:49,639 zo goed als we zullen zien in gewoon een moment en zoals we zullen 693 00:34:49,639 --> 00:34:51,205 zie later deze week in het bijzonder. 694 00:34:51,205 --> 00:34:54,080 Wat u kunt doen met deze taal, echter is de krachtiger, 695 00:34:54,080 --> 00:34:55,790 vooral API. 696 00:34:55,790 --> 00:34:56,960 >> Maar eerst een korte rondleiding. 697 00:34:56,960 --> 00:35:00,450 Zo één, in JavaScript, er is geen hoofdfunctie, dat is leuk. 698 00:35:00,450 --> 00:35:02,650 Zoals met PHP, kun je gewoon schrijven code. 699 00:35:02,650 --> 00:35:04,310 Voorwaarden uitzien. 700 00:35:04,310 --> 00:35:07,100 En Booleaanse uitdrukkingen zou uitzien of zo. 701 00:35:07,100 --> 00:35:09,530 Switches bestaan, en ze kan er zo uitzien. 702 00:35:09,530 --> 00:35:10,970 Vier lussen uitzien. 703 00:35:10,970 --> 00:35:12,390 Terwijl loops uitzien. 704 00:35:12,390 --> 00:35:14,160 Doe whiles uitzien. 705 00:35:14,160 --> 00:35:16,850 En dan arrays eruit deze, zeer vergelijkbaar met PHP. 706 00:35:16,850 --> 00:35:20,740 Maar let op, dat in JavaScript u verklaren een variabele niet met een dollar 707 00:35:20,740 --> 00:35:25,190 teken, niet met een gegevenstype maar letterlijk door te zeggen var voor variabele voordat het. 708 00:35:25,190 --> 00:35:27,900 Ook deze is losjes getypt doordat het type, 709 00:35:27,900 --> 00:35:29,729 maar je hoeft niet expliciet verklaren ze. 710 00:35:29,729 --> 00:35:31,520 En vervolgens een tekenreeks voor Bijvoorbeeld, zou kunnen kijken 711 00:35:31,520 --> 00:35:34,350 als deze, die string wordt genoemd in deze zaak. 712 00:35:34,350 --> 00:35:35,410 En dan een object. 713 00:35:35,410 --> 00:35:37,010 En deze zullen we meer het duurde niet lang te zien. 714 00:35:37,010 --> 00:35:41,470 En een object is misschien wel een van de meest gezien datastructuren 715 00:35:41,470 --> 00:35:44,050 in een JavaScript-gebaseerde programma omdat het mogelijk maakt 716 00:35:44,050 --> 00:35:46,680 u te associëren arbitraire sleutel waarde paren net 717 00:35:46,680 --> 00:35:51,240 zoals PHP's associatieve arrays en net als je eigen hash table 718 00:35:51,240 --> 00:35:54,042 of probeer als we geïmplementeerd een paar weken terug. 719 00:35:54,042 --> 00:35:56,250 Dus laten we echt zien wat we kunnen doen met JavaScript. 720 00:35:56,250 --> 00:35:59,410 Met name is dit een waslijst van features 721 00:35:59,410 --> 00:36:02,300 dat browsers hebben dat stellen ons in staat aan te haken JavaScript 722 00:36:02,300 --> 00:36:05,470 in een website op de volgende manier. 723 00:36:05,470 --> 00:36:09,340 JavaScript wordt vaak gebruikt als een client-side scripttaal. 724 00:36:09,340 --> 00:36:10,130 Het is niet gecompileerd. 725 00:36:10,130 --> 00:36:11,370 Ook deze wordt geïnterpreteerd. 726 00:36:11,370 --> 00:36:15,740 Maar in tegenstelling PHP, dat loopt op de server, in de webserver 727 00:36:15,740 --> 00:36:18,220 of diep in de cliënten, JavaScript 728 00:36:18,220 --> 00:36:22,190 anders omdat het loopt meestal in de browser. 729 00:36:22,190 --> 00:36:26,060 >> Dus elke JavaScript-code die u beginnen met het schrijven voor Pset 8, of je afstudeerproject, 730 00:36:26,060 --> 00:36:29,890 of in de echte wereld algemeen gaat worden opgeslagen op de server, absoluut 731 00:36:29,890 --> 00:36:33,110 in een dot HTML of dot JS voor JavaScript-bestand. 732 00:36:33,110 --> 00:36:35,770 Maar de browser gaat te downloaden dat JavaScript 733 00:36:35,770 --> 00:36:39,530 code om uw eigen exemplaar van Chrome, of IE of Firefox, of wat dan ook. 734 00:36:39,530 --> 00:36:43,870 En de code is eigenlijk gaat krijgen uitgevoerd binnenkant van uw eigen browser. 735 00:36:43,870 --> 00:36:46,560 Gewoon om dit reëler te maken, laten we zien dit in concreet vorm. 736 00:36:46,560 --> 00:36:50,120 >> We hebben geen idee wat deze code doet zonder echt te lezen doorheen. 737 00:36:50,120 --> 00:36:52,670 Maar laat me gaan naar Facebook.com zonder in te loggen. 738 00:36:52,670 --> 00:37:00,440 Laat me gaan naar Element inspecteren en ga naar, laten we zeggen, het netwerk en de pagina opnieuw laden. 739 00:37:00,440 --> 00:37:04,150 En we zullen see-- laat me verschuiven Reload de Pagina om alle verzoeken om nieuwe te krijgen. 740 00:37:04,150 --> 00:37:08,850 En de eerste bestand wat ik zie is CSS, CSS. 741 00:37:08,850 --> 00:37:10,880 Hier is de eerste JavaScript-bestand, en ik heb 742 00:37:10,880 --> 00:37:14,600 geen idee wat dit doet, maar hier is een deel van de JavaScript-code 743 00:37:14,600 --> 00:37:16,180 dat drijft Facebook. 744 00:37:16,180 --> 00:37:18,400 Het is zelfs niet echt dat onthullend in te zoomen. 745 00:37:18,400 --> 00:37:20,260 Het is nog steeds net zo onzinnig. 746 00:37:20,260 --> 00:37:24,341 >> Maar je zult zelfs beneden te zien, er is nog meer van deze bestanden JavaScript. 747 00:37:24,341 --> 00:37:24,840 Whoops. 748 00:37:24,840 --> 00:37:25,440 Dat is een ping. 749 00:37:25,440 --> 00:37:28,550 Laten we gaan een beetje naar beneden verder, verder, verder. 750 00:37:28,550 --> 00:37:29,894 Er is één. 751 00:37:29,894 --> 00:37:31,238 Er is één. 752 00:37:31,238 --> 00:37:31,880 Er is één. 753 00:37:31,880 --> 00:37:35,820 >> Dus ook al Facebook, achter de scènes, is geschreven in deel in PHP 754 00:37:35,820 --> 00:37:39,100 en Facebook's eigen versie daarvan, er is een enorme hoeveelheid van JavaScript. 755 00:37:39,100 --> 00:37:41,330 In feite kan elk van de chatten je doet op Facebook, 756 00:37:41,330 --> 00:37:45,520 een van de inline tijdlijn updates die gebeuren in real time, dat alles 757 00:37:45,520 --> 00:37:47,944 wordt gedreven door JavaScript. 758 00:37:47,944 --> 00:37:48,444 Yeah? 759 00:37:48,444 --> 00:37:50,235 >> Publiek: Ik ben niet zeker als dit is Facebook, 760 00:37:50,235 --> 00:37:53,624 maar ik dacht dat Facebook ontwikkeld hun eigen in-house codetaal? 761 00:37:53,624 --> 00:37:54,540 DAVID MALAN: Ze deden. 762 00:37:54,540 --> 00:37:58,110 Dus dat is waarom ik zeg een variantie van PHP genaamd Hip Hop dat ze eigenlijk 763 00:37:58,110 --> 00:38:03,440 extra functies aan, zodanig dat wanneer Markeer eerst geïmplementeerd Facebook, 764 00:38:03,440 --> 00:38:04,710 het werd in PHP geschreven. 765 00:38:04,710 --> 00:38:07,370 En dat soort is gebleven het soort front-end taal 766 00:38:07,370 --> 00:38:09,030 dat zij voor veel hun codering, maar 767 00:38:09,030 --> 00:38:11,870 is een taal die is niet geweest schalen bijzonder goed voor miljarden 768 00:38:11,870 --> 00:38:12,630 van mensen. 769 00:38:12,630 --> 00:38:15,300 En dus hebben ze hun eigen toegevoegde verbeteringen achter de schermen. 770 00:38:15,300 --> 00:38:17,049 En ze gebruiken een willekeurig aantal van andere talen 771 00:38:17,049 --> 00:38:19,170 diverse stukken hun infrastructuur. 772 00:38:19,170 --> 00:38:24,080 Dus ja, het is een verschil van wat we nu kennen als PHP. 773 00:38:24,080 --> 00:38:26,610 >> Dus laten we eens een kijkje nemen naar een paar voorbeelden 774 00:38:26,610 --> 00:38:28,890 van hoe wij hier gebruik van JavaScript. 775 00:38:28,890 --> 00:38:32,530 In de huidige broncode we een aantal bestanden, de eerste, 776 00:38:32,530 --> 00:38:34,090 laten we noemen DOM nul. 777 00:38:34,090 --> 00:38:36,770 Dus DOM nul ziet er als volgt uit. 778 00:38:36,770 --> 00:38:40,730 Laat me gaan in deze map en open domzero.html, 779 00:38:40,730 --> 00:38:44,970 waarvan de top heeft een type doc verklaring, zegt hier komt HTML 5. 780 00:38:44,970 --> 00:38:46,440 En nu hier is een HTML-tag. 781 00:38:46,440 --> 00:38:47,540 Hier is het hoofd tag. 782 00:38:47,540 --> 00:38:49,210 En hier is wat er nieuw is vandaag. 783 00:38:49,210 --> 00:38:52,620 >> We hebben nu een script tag binnenkant van het hoofd van de pagina. 784 00:38:52,620 --> 00:38:55,290 En dit blijkbaar heel weinig, maar kennisgeving 785 00:38:55,290 --> 00:38:58,410 die ik heb gedefinieerd een script, een JavaScript. 786 00:38:58,410 --> 00:39:01,050 En als een terzijde, aangezien dit is een veel voorkomende misvatting, 787 00:39:01,050 --> 00:39:05,220 JavaScript heeft absoluut niets te maken met Java, de taal 788 00:39:05,220 --> 00:39:08,010 dat sommigen van u misschien hebben geleerd in APCS. 789 00:39:08,010 --> 00:39:10,480 Het was meer een marketing ding dan iets, 790 00:39:10,480 --> 00:39:12,980 rijden de coattails van Java jaar geleden. 791 00:39:12,980 --> 00:39:17,300 Maar JavaScript, niets te maken met Java, net op dezelfde manier, en hinderlijk, 792 00:39:17,300 --> 00:39:18,480 verwarrend genoemd. 793 00:39:18,480 --> 00:39:21,890 >> Dus hier is hoe je een functie declareren in JavaScript, letterlijk functie zeggen, 794 00:39:21,890 --> 00:39:24,556 vervolgens de naam van de functie, dan alle argumenten zou kunnen ondernemen, 795 00:39:24,556 --> 00:39:25,530 net als in PHP. 796 00:39:25,530 --> 00:39:28,990 Blijkt dat in JavaScript, één van de meest irritante functies die er bestaan ​​is Alert. 797 00:39:28,990 --> 00:39:31,392 Dit is een klein venster dat zal verschijnen en waarschuwen u 798 00:39:31,392 --> 00:39:32,600 om een ​​stukje informatie. 799 00:39:32,600 --> 00:39:33,766 Het is over het algemeen afgekeurd. 800 00:39:33,766 --> 00:39:35,980 Maar we zullen het gebruiken als onze eerste oefening hier. 801 00:39:35,980 --> 00:39:37,900 >> Let op een aantal kenmerken van JavaScript. 802 00:39:37,900 --> 00:39:41,524 Enkele aanhalingstekens en dubbele aanhalingstekens eigenlijk niet meer toe. 803 00:39:41,524 --> 00:39:43,690 Enkele aanhalingstekens en dubbele quotes kunnen worden uitgewisseld, 804 00:39:43,690 --> 00:39:46,220 terwijl in C, die je moet gebruiken dubbele aanhalingstekens voor strings, 805 00:39:46,220 --> 00:39:48,150 en je twee enkele hebben citeert voor chars. 806 00:39:48,150 --> 00:39:51,150 In de JavaScript-wereld, veel mensen, de meeste mensen 807 00:39:51,150 --> 00:39:54,970 Gebruik enkele aanhalingstekens rond strings gewoon omdat het een stilistische ding. 808 00:39:54,970 --> 00:39:58,330 Maar wat is de plus operator hier, die we nog niet eerder hebben gezien? 809 00:39:58,330 --> 00:39:59,836 >> Publiek: Concatenation. 810 00:39:59,836 --> 00:40:00,960 DAVID MALAN: Concatenation. 811 00:40:00,960 --> 00:40:02,450 Dus C niet zelfs dit hebben. 812 00:40:02,450 --> 00:40:04,820 PHP heeft de dot-operator, dat doet. 813 00:40:04,820 --> 00:40:09,710 JavaScript heeft de plus-operator, dat verwarrend is net als Java. 814 00:40:09,710 --> 00:40:11,440 Nu, wat is er hier aan? 815 00:40:11,440 --> 00:40:14,260 >> Dus hier is waar een basis begrip van dat beeld 816 00:40:14,260 --> 00:40:17,010 we gooiden een paar dagen geleden in het spel komt. 817 00:40:17,010 --> 00:40:19,620 Weet je nog dat we een eenvoudige versie van een HTML page-- 818 00:40:19,620 --> 00:40:20,830 het net zei, hallo wereld. 819 00:40:20,830 --> 00:40:22,770 En trok toen we een boom rechts, dat 820 00:40:22,770 --> 00:40:27,320 had een bos van rechthoeken en lijnen ze aan te sluiten als een stamboom. 821 00:40:27,320 --> 00:40:30,820 Dus dat is de zogenaamde DOM of Document Object Model. 822 00:40:30,820 --> 00:40:36,759 En het blijkt dat u toegang rechthoeken in die boom met syntax 823 00:40:36,759 --> 00:40:37,550 als het volgende. 824 00:40:37,550 --> 00:40:41,370 U zegt letterlijk document, dat is een speciale globale variabele in een JavaScript 825 00:40:41,370 --> 00:40:45,890 programma dat een functie heeft ermee verbonden zijn die u kunt openen 826 00:40:45,890 --> 00:40:50,280 vergelijkbaar met een structuur, maar je gewoon zeggen dot en vervolgens de naam van de functie, 827 00:40:50,280 --> 00:40:52,390 krijgen element door ID. 828 00:40:52,390 --> 00:40:55,460 >> Het element ik wil krijgen is blijkbaar citeren unquote naam. 829 00:40:55,460 --> 00:40:57,150 En dan wil ik haar waarde te krijgen. 830 00:40:57,150 --> 00:40:58,330 Nu krijgen we de zaken vooruit lopen. 831 00:40:58,330 --> 00:41:00,038 Ik weet niet eens zeker wat dit allemaal over gaat. 832 00:41:00,038 --> 00:41:03,000 Laten we snel vooruit naar de HTML op de pagina, die is super eenvoudig. 833 00:41:03,000 --> 00:41:05,370 >> Merk op dat ik heb gedefinieerd een formulier hier beneden. 834 00:41:05,370 --> 00:41:07,940 Let op, ik heb het gezien een unieke ID, hoewel we niet hebben gebruikt 835 00:41:07,940 --> 00:41:08,870 dit kenmerk voor. 836 00:41:08,870 --> 00:41:11,300 Maar dit bestaat in HTML. 837 00:41:11,300 --> 00:41:15,570 U kunt een unieke identificatie van sommige brok van HTML met een id als deze. 838 00:41:15,570 --> 00:41:19,880 >> Let nu dit-- blijkt HTML ondersteunt, per die waslijst 839 00:41:19,880 --> 00:41:22,490 een moment geleden, een hele stelletje event handlers. 840 00:41:22,490 --> 00:41:25,060 En dit event handler zegt op te dienen. 841 00:41:25,060 --> 00:41:28,730 Op de gebruiker indiening van dit formulier, bel dan de volgende code. 842 00:41:28,730 --> 00:41:31,360 En de code die gaat worden genoemd of uitgevoerd 843 00:41:31,360 --> 00:41:35,260 is precies dit, de Griekse functie gevolgd door return false. 844 00:41:35,260 --> 00:41:37,360 Al het andere zou moeten zijn redelijk bekend. 845 00:41:37,360 --> 00:41:42,050 >> Hier is een ingang van het type tekst, waarvan ID, in dit geval, zal naam zijn. 846 00:41:42,050 --> 00:41:45,430 We hebben geen een feitelijke attribuut naam hebben dit tijd-- en een submit knop. 847 00:41:45,430 --> 00:41:48,330 Dus de resulterende pagina ziet er als volgt uit. 848 00:41:48,330 --> 00:41:52,890 En het resulterende gedrag je zult zien, ziet er zo uit. 849 00:41:52,890 --> 00:41:56,940 De pagina die het lokale hosts zegt hallo David, nauwelijks een esthetisch verantwoorde 850 00:41:56,940 --> 00:41:58,340 manier om een ​​gebruiker te begroeten. 851 00:41:58,340 --> 00:41:59,950 Maar wat er eigenlijk aan de hand? 852 00:41:59,950 --> 00:42:01,360 >> Nou, overwegen wat dit is. 853 00:42:01,360 --> 00:42:02,310 Dit is een tekstveld. 854 00:42:02,310 --> 00:42:04,635 En volgens de HTML hier, heb ik het gegeven 855 00:42:04,635 --> 00:42:07,350 een unieke identificatie genoemd citaat unquote naam. 856 00:42:07,350 --> 00:42:09,770 Ondertussen heb ik al zei toen de gebruiker dit formulier indient 857 00:42:09,770 --> 00:42:13,820 een druk op ENTER of klik op de Submit knop, bellen met de functie genaamd Greet 858 00:42:13,820 --> 00:42:15,410 en dan terug Valse. 859 00:42:15,410 --> 00:42:16,870 Laten we eens kijken die in omgekeerde richting. 860 00:42:16,870 --> 00:42:20,590 Merken wanneer ik op Verzenden klikt, de URL van de pagina verandert niet. 861 00:42:20,590 --> 00:42:22,420 Pictogram van de browser niet beginnen met draaien. 862 00:42:22,420 --> 00:42:27,050 Ik heb niet overal te gaan, en dat is letterlijk, want ik zei return false. 863 00:42:27,050 --> 00:42:31,534 Return false kortsluiting of stops het standaard gedrag van een formulier. 864 00:42:31,534 --> 00:42:33,700 Zodat vervolgens laat ons achter met deze laatste vraag. 865 00:42:33,700 --> 00:42:34,764 Wat doet Greet doen? 866 00:42:34,764 --> 00:42:36,680 Nou, Greet blijkbaar noemt een functie genaamd 867 00:42:36,680 --> 00:42:39,250 Alert, gaat in één lange argument dat is 868 00:42:39,250 --> 00:42:43,950 het resultaat van elkaar een aaneenschakelen stelletje substrings, hello komma ruimte, 869 00:42:43,950 --> 00:42:45,810 dan wat deze terugkeert. 870 00:42:45,810 --> 00:42:51,490 Dus document zoals globale variabele die wortel van die boom, 871 00:42:51,490 --> 00:42:55,560 aanroepen van een speciale functie, anders is nu bekend als een methode. 872 00:42:55,560 --> 00:42:57,650 Een functie die is binnenkant van een variabele 873 00:42:57,650 --> 00:42:59,640 genoemd een methode in plaats van een functie. 874 00:42:59,640 --> 00:43:01,570 >> Dus maak je element door ID. 875 00:43:01,570 --> 00:43:03,940 Welke element heb je wil door zijn ID te krijgen? 876 00:43:03,940 --> 00:43:06,970 Quote unquote naam en vervolgens specifiek te waarderen. 877 00:43:06,970 --> 00:43:12,000 Met andere woorden, de code eenvoudig vindt het tekstveld waarvan de ID naam 878 00:43:12,000 --> 00:43:13,380 en krijgt dan de waarde ervan. 879 00:43:13,380 --> 00:43:16,460 Dus als ik om dit te veranderen en zeggen Davin in plaats van David, 880 00:43:16,460 --> 00:43:20,670 en klik op Verzenden, nu we een groet voor Davin. 881 00:43:20,670 --> 00:43:22,890 >> Oké, dus allemaal prima en goed. 882 00:43:22,890 --> 00:43:25,480 Maar laten we eens kijken of we kunnen maken dit een beetje schoner, omdat net 883 00:43:25,480 --> 00:43:28,190 code te schrijven als dit is over het algemeen zal worden afgekeurd. 884 00:43:28,190 --> 00:43:30,060 Dit gaat enger uitzien. 885 00:43:30,060 --> 00:43:32,330 Maar wat is het eerste verschil dat u hier rekening mee 886 00:43:32,330 --> 00:43:35,970 in deze uitvoering naast het noem het veranderen naar DOM één? 887 00:43:35,970 --> 00:43:41,110 Wat structureel ziet er anders uit over versus de andere? 888 00:43:41,110 --> 00:43:41,932 Yeah? 889 00:43:41,932 --> 00:43:43,890 Publiek: Is het formulier op top van het script nu? 890 00:43:43,890 --> 00:43:46,570 DAVID MALAN: Ja, de vorm is op de top van het script voor een aantal merkwaardige reden. 891 00:43:46,570 --> 00:43:48,736 Dus dat is het eerste wat dat springt uit bij mij ook. 892 00:43:48,736 --> 00:43:50,990 En gelukkig tenminste, Dit deel is identiek. 893 00:43:50,990 --> 00:43:53,470 Dus het enige dat lijkt anders te zijn is dit. 894 00:43:53,470 --> 00:43:55,296 >> Dus hier is wat er netjes ongeveer JavaScript 2. 895 00:43:55,296 --> 00:43:57,420 En het maakt het moeilijk om begrijpen op het eerste gezicht, 896 00:43:57,420 --> 00:44:00,670 met name voor de laatste projecten als u op zoek bent naar voorbeeldcode online, 897 00:44:00,670 --> 00:44:04,200 maar het komt erop neer dat een aantal elementaire syntactische functies. 898 00:44:04,200 --> 00:44:06,230 Ook hier is dat globale variabele document. 899 00:44:06,230 --> 00:44:09,540 Ook hier is deze methode of functie dat zegt krijgt het element door ID. 900 00:44:09,540 --> 00:44:11,570 Deze keer wil ik krijgen de ID demo genaamd. 901 00:44:11,570 --> 00:44:12,490 Waar is dat? 902 00:44:12,490 --> 00:44:15,400 Dat is blijkbaar recht hier, het formulier zelf. 903 00:44:15,400 --> 00:44:20,010 >> En nu merken dat blijkbaar als ik terug te krijgen dat knooppunt van de boom die 904 00:44:20,010 --> 00:44:22,940 vertegenwoordigt het formulier zelf, niet een tekstveld, 905 00:44:22,940 --> 00:44:26,970 het blijkt dat formulier, dat knooppunt of een rechthoek uit de boom, 906 00:44:26,970 --> 00:44:30,450 heeft wat wij een woning zullen noemen, zeer, zeer, zeer vergelijkbaar 907 00:44:30,450 --> 00:44:35,390 in de geest naar een struct in C. Het is gewoon een data-lid binnenkant van deze rechthoek. 908 00:44:35,390 --> 00:44:38,300 >> Dus ik heb de vorm gekregen hier, en ik ben het bevestigen, 909 00:44:38,300 --> 00:44:44,650 of ik het toewijzen, om haar On Submit handler of liever On eigendom Submit 910 00:44:44,650 --> 00:44:45,740 de volgende functie. 911 00:44:45,740 --> 00:44:49,000 En dit is veruit de gekste ding tot nu toe syntactisch. 912 00:44:49,000 --> 00:44:53,610 Het blijkt in JavaScript en in PHP, en eerlijk gezegd wat dat betreft in C, 913 00:44:53,610 --> 00:44:58,990 ook al hebben we het niet doen, je kan toevoegen naamloos, anoniem, of AKA lambda 914 00:44:58,990 --> 00:45:03,000 functies die geen naam hebben maar kan toch worden genoemd. 915 00:45:03,000 --> 00:45:07,050 >> Dus wat ik hier doe is dat ik het toewijzen Deze On Submit pand, dat 916 00:45:07,050 --> 00:45:14,330 is de binnenkant van dit knooppunt van mijn DOM boom, een functie, de functie pointer als je wil. 917 00:45:14,330 --> 00:45:16,310 Die functie heeft geen te noemen, maar dat betekent niet 918 00:45:16,310 --> 00:45:19,110 uit want we zullen zien in een moment hoe je het ook noemt. 919 00:45:19,110 --> 00:45:21,780 Wanneer deze functie wordt aangeroepen, deze code wordt uitgevoerd, dan 920 00:45:21,780 --> 00:45:24,210 valse wordt geretourneerd, net als voorheen. 921 00:45:24,210 --> 00:45:25,800 >> Maar let op wat ik heb gedaan. 922 00:45:25,800 --> 00:45:27,830 Op dit punt in de verhaal, ik heb een formulier. 923 00:45:27,830 --> 00:45:30,190 Het heeft een uniek ID-demo genaamd. 924 00:45:30,190 --> 00:45:33,740 Hier beneden, ik heb een script tag dat voert de volgende code. 925 00:45:33,740 --> 00:45:37,720 Zij hecht aan dat knooppunt in de boom om het op Submit 926 00:45:37,720 --> 00:45:40,260 eigendom van deze functie hier. 927 00:45:40,260 --> 00:45:44,310 En juist door de aard van hoe browsers werken, als ik nu klik op Verzenden of druk op Enter, 928 00:45:44,310 --> 00:45:45,889 die functie gaat gecalled. 929 00:45:45,889 --> 00:45:48,680 Het heeft geen naam, omdat die het nodig hebben heck schelen hoe het heet. 930 00:45:48,680 --> 00:45:52,540 De enige keer dat het ooit gaat krijgen heet is wanneer ik verzend het formulier. 931 00:45:52,540 --> 00:45:55,130 Er is geen noodzaak voor mij, het menselijk ontwikkelaar, 932 00:45:55,130 --> 00:45:57,330 om daadwerkelijk te noemen het ergens anders. 933 00:45:57,330 --> 00:46:00,720 >> Nu net als een teaser, alsof dat waren niet erg buigen genoeg, 934 00:46:00,720 --> 00:46:03,330 we kunnen dit ook te maken kijken meer cryptische gebruik 935 00:46:03,330 --> 00:46:05,850 een super populaire library genaamd jQuery. 936 00:46:05,850 --> 00:46:08,760 In feite jQuery en JavaScript worden vaak samengevoegd. 937 00:46:08,760 --> 00:46:12,790 En wat we op woensdag zullen doen is start met behulp van deze taal en deze bibliotheken 938 00:46:12,790 --> 00:46:16,030 steeds asynchrone bouwen en dynamische toepassingen 939 00:46:16,030 --> 00:46:18,950 achtige kaart krijgen toepassingen, applicaties 940 00:46:18,950 --> 00:46:22,360 dat de webpagina in real updaten tijd, net als Facebook of Gchat 941 00:46:22,360 --> 00:46:27,130 doen, en ons niet meer beperken tot hitting te dienen door een get of gewoon bericht 942 00:46:27,130 --> 00:46:27,630 alleen. 943 00:46:27,630 --> 00:46:29,055 Dus zie ik je op woensdag. 944 00:46:29,055 --> 00:46:31,805 945 00:46:31,805 --> 00:46:35,550 >> [Muziek] 946 00:46:35,550 --> 00:48:09,728