1 00:00:00,000 --> 00:00:01,940 >> [MUSIC SPILLE] 2 00:00:01,940 --> 00:00:11,130 3 00:00:11,130 --> 00:00:14,620 >> DAVID MALAN: Dette er CS 50, og Dette er begynnelsen av uke ni. 4 00:00:14,620 --> 00:00:18,240 Og det vi trodde vi skulle gjøre i dag er ikke bare lukke kapittelet om forrige ukes 5 00:00:18,240 --> 00:00:22,670 materiale der vi fokuserte på serveren side web-programmering med PHP og SQL, 6 00:00:22,670 --> 00:00:23,549 noen database ting. 7 00:00:23,549 --> 00:00:25,590 Vi skal snakke om litt av sikkerhet i dag, og deretter 8 00:00:25,590 --> 00:00:29,590 Overgangen til et klientsiden programmering språket kjent som Javascript. 9 00:00:29,590 --> 00:00:31,330 Men først, noen forløsning. 10 00:00:31,330 --> 00:00:35,030 >> Du husker kanskje at på Onsdag, jeg satt ut 11 00:00:35,030 --> 00:00:37,550 å skrive et nettsted som tok i brukerens input 12 00:00:37,550 --> 00:00:41,120 av et HTML-skjema som deretter lagres at brukerundersøkelser navn, telefonnummer 13 00:00:41,120 --> 00:00:43,124 tall, og mobiltelefon bærere i databasen. 14 00:00:43,124 --> 00:00:45,540 Og så hadde jeg en liten kommando linje skript skrevet i PHP 15 00:00:45,540 --> 00:00:47,956 som var ment å iterere over radene i databasen 16 00:00:47,956 --> 00:00:49,400 og sende ut tekstmeldinger. 17 00:00:49,400 --> 00:00:53,870 Til tross for flere, flere forsøk, vi fikk ikke at arbeiderklassen ved utgangen. 18 00:00:53,870 --> 00:00:57,820 >> Så jeg brukte hele denne uken jobber på at koden for å få oss forbi det punktet 19 00:00:57,820 --> 00:01:01,220 der vi slapp, hvor alle Jeg fikk ved utgangen av onsdag 20 00:01:01,220 --> 00:01:05,500 var denne tekstmeldingen fra Margo som jeg slet, 21 00:01:05,500 --> 00:01:09,940 etterfulgt av en tekstmelding fra en annen klassekamerat, Du har fått dette David. 22 00:01:09,940 --> 00:01:14,030 Etterfulgt av denne, fantastisk oppmuntrende. 23 00:01:14,030 --> 00:01:15,840 Holdt på å gå, veldig oppmuntrende. 24 00:01:15,840 --> 00:01:20,960 Jeg fikk det nesten til then-- og det er notatet vi endte på onsdag. 25 00:01:20,960 --> 00:01:25,850 Og deretter faktisk kanskje min favoritt, et øyeblikk senere, dette kom inn. 26 00:01:25,850 --> 00:01:27,000 Damn live stream. 27 00:01:27,000 --> 00:01:31,080 >> Så i dag, vi fikse dette med en rask se på hva jeg har gjort siden. 28 00:01:31,080 --> 00:01:35,440 Så alt av denne koden er tilgjengelig online fra forrige ukes, uke åtte, 29 00:01:35,440 --> 00:01:36,300 kildekoden. 30 00:01:36,300 --> 00:01:39,425 Og du vil se at jeg gikk gjennom, og jeg faktisk ryddet opp ting litt. 31 00:01:39,425 --> 00:01:42,080 Jeg introduserte et par andre funksjoner i en SQL-database. 32 00:01:42,080 --> 00:01:45,300 For eksempel, i stedet for bare gjøre transportør av Var røye 33 00:01:45,300 --> 00:01:47,310 som jeg tror jeg gjorde på fly i forrige uke. 34 00:01:47,310 --> 00:01:49,820 Jeg i stedet definerte det som det som kalles en enum. 35 00:01:49,820 --> 00:01:53,310 >> Og noen av dere kanskje har sett denne som vi utforsket C. Enum er faktisk 36 00:01:53,310 --> 00:01:56,820 en funksjon i C der du kan oppsummere en hel haug med konstanter 37 00:01:56,820 --> 00:01:59,640 og tilordne dem automatiske verdier, som en, to, tre, fire 38 00:01:59,640 --> 00:02:01,330 uten å måtte harde kodenumre. 39 00:02:01,330 --> 00:02:04,780 Så SQL støtter den samme, hvorved Hvis du har en database felt som bare du 40 00:02:04,780 --> 00:02:09,389 ønsker å ta på ett av begrenset verdier, kan du bokstavelig talt spesifisere det 41 00:02:09,389 --> 00:02:13,120 som jeg har gjort det for fire populære amerikanske mobiltelefon operatører. 42 00:02:13,120 --> 00:02:13,819 >> Så jeg gjorde det. 43 00:02:13,819 --> 00:02:16,610 Og jeg gjorde en rekke endringer som vel, det viktigste av disse 44 00:02:16,610 --> 00:02:20,090 var å få e-post fungerer fordi tilbakekalling, at dette programmet avhengig av hvilke 45 00:02:20,090 --> 00:02:23,470 vanligvis kalles en e-post til SMS gateway, som er bare 46 00:02:23,470 --> 00:02:27,670 en fancy måte å si at Verizon, og AT & T, og andre folk støtte en server, 47 00:02:27,670 --> 00:02:30,740 der hvis den mottar e-post, konverterer den det til SMS 48 00:02:30,740 --> 00:02:33,290 og sender ut en tekst melding til noens telefon. 49 00:02:33,290 --> 00:02:37,010 Så hvis jeg gjorde dette riktig, her er en ny og forbedret form 50 00:02:37,010 --> 00:02:39,259 som kommer til å snakke med ny og forbedret kode, som 51 00:02:39,259 --> 00:02:40,300 du kan spille med på nettet. 52 00:02:40,300 --> 00:02:44,140 Og det vil forhåpentligvis gjøre mitt Telefonen piper i bare et øyeblikk. 53 00:02:44,140 --> 00:02:47,240 >> Så først, jeg kommer til å skrive i mitt navn. 54 00:02:47,240 --> 00:02:51,400 For det andre, jeg kommer ikke til å gjøre dette på dette tidspunktet. 55 00:02:51,400 --> 00:02:53,920 Jeg kommer til å gjøre Inspiser Element. 56 00:02:53,920 --> 00:02:56,710 Og dette er bare en liten ting så jeg ikke 57 00:02:56,710 --> 00:02:59,250 skape timer med post produksjon jobbe som jeg gjorde forrige gang. 58 00:02:59,250 --> 00:03:02,300 Det er nå min telefonnummer. 59 00:03:02,300 --> 00:03:03,560 >> Jeg velger Verizon. 60 00:03:03,560 --> 00:03:10,260 Og her, la oss slå på denne mikrofonen her, og tar sikte på dette på telefonen min her. 61 00:03:10,260 --> 00:03:13,130 Jeg kommer til å klikke Register, Hvilken bør forhåpentligvis 62 00:03:13,130 --> 00:03:14,530 sette det inn i databasen. 63 00:03:14,530 --> 00:03:16,780 Nå kommer jeg til å gå til kommandolinje program, som 64 00:03:16,780 --> 00:03:20,825 tilbakekalling ble kalt dot slash tekst, og krysser fingrene. 65 00:03:20,825 --> 00:03:24,092 66 00:03:24,092 --> 00:03:26,527 Here we go. 67 00:03:26,527 --> 00:03:27,501 >> [PHONE dings] 68 00:03:27,501 --> 00:03:28,962 >> [APPLAUSE] 69 00:03:28,962 --> 00:03:31,815 70 00:03:31,815 --> 00:03:34,940 DAVID MALAN: Så mer moro enn dette-- det er gøy, selvfølgelig, hvis jeg kommer inn i det. 71 00:03:34,940 --> 00:03:38,004 Men det er mer moro, tenkte jeg, hvis vi skapt en av disse filmøyeblikk 72 00:03:38,004 --> 00:03:40,420 der som noe virkelig ille har skjedd i verden, 73 00:03:40,420 --> 00:03:42,860 og som alle NSA folks mobiltelefoner begynner å pipe 74 00:03:42,860 --> 00:03:44,860 med tekstmeldinger varsle dem om dette faktum. 75 00:03:44,860 --> 00:03:47,026 Så jeg tenkte vi skulle prøve å gjenskape den samme her, 76 00:03:47,026 --> 00:03:49,610 der du ikke bruker en database, Jeg i stedet på forhånd 77 00:03:49,610 --> 00:03:51,490 skrev et program som ser ut som dette. 78 00:03:51,490 --> 00:03:53,660 >> Dette er en index.php-- og jeg setter denne koden online 79 00:03:53,660 --> 00:03:56,710 samt-- som tilsynelatende bare gjengir form.php, 80 00:03:56,710 --> 00:04:00,990 ved hjelp av en MVC stil paradigme som vi snakke om i mer detalj i Oppgavesettet 81 00:04:00,990 --> 00:04:01,650 syv. 82 00:04:01,650 --> 00:04:02,910 At formen er ganske enkel. 83 00:04:02,910 --> 00:04:06,634 Det kommer til å underkaste seg en fil som heter here.php via post. 84 00:04:06,634 --> 00:04:09,300 Og det er tilsynelatende kommer til å spørre etter et navn, og et telefonnummer, 85 00:04:09,300 --> 00:04:11,400 og deretter via såkalt Velg menyen, er det 86 00:04:11,400 --> 00:04:14,250 kommer til å gi deg minst fire populære amerikanske mobiltelefon operatører, 87 00:04:14,250 --> 00:04:17,470 og deretter tillate deg å effektivt ta frammøte ved å klikke her. 88 00:04:17,470 --> 00:04:20,471 >> Og her, i mellomtiden, kommer til å låne noen av koden fra forrige gang. 89 00:04:20,471 --> 00:04:22,553 Og hvis du bare skumme dette, vil du se at det er 90 00:04:22,553 --> 00:04:23,900 en hel haug med feilsjekking. 91 00:04:23,900 --> 00:04:26,640 Men skjønnheten på slutten er at vi ikke skrive til en database i dag. 92 00:04:26,640 --> 00:04:29,130 Vi holder det enkelt og bare sende ut forhåpentligvis 93 00:04:29,130 --> 00:04:32,190 en tekstmelding via funksjon jeg skrev i løpet av de siste dagene samtale 94 00:04:32,190 --> 00:04:36,270 Tekst, som er i funksjoner. php, som igjen er tilgjengelig på nettet. 95 00:04:36,270 --> 00:04:38,210 >> Så hvis du ønsker å delta i dette. 96 00:04:38,210 --> 00:04:40,190 Vi kommer ikke til å være lagring av noe. 97 00:04:40,190 --> 00:04:43,809 Gå til denne nettadressen her i sanntid. 98 00:04:43,809 --> 00:04:46,850 Ikke legg det til ennå, men la oss se om vi kan ha en av disse film 99 00:04:46,850 --> 00:04:49,830 øyeblikkene der alles mobiltelefon begynner å pipe, forhåpentligvis bare 100 00:04:49,830 --> 00:04:53,580 en gang i år i motsetning til i 2011 hvor dette gikk fryktelig galt. 101 00:04:53,580 --> 00:04:58,910 Og når du går til denne adressen, du skal se en super enkel form 102 00:04:58,910 --> 00:05:03,884 at hvis du har et navn, en mobiltelefon nummer, og en mobiltelefon carrier som 103 00:05:03,884 --> 00:05:06,175 matcher listen der, gå videre og fyll ut skjemaet. 104 00:05:06,175 --> 00:05:07,880 Men ikke treffer sender ennå. 105 00:05:07,880 --> 00:05:10,850 >> Skjemaet kommer til å se slik ut. 106 00:05:10,850 --> 00:05:13,660 Gå videre og skriver inn ditt navn, telefonnummer. 107 00:05:13,660 --> 00:05:17,670 Oop, er noen som kommer i forkant av kurven. 108 00:05:17,670 --> 00:05:18,170 Det er OK. 109 00:05:18,170 --> 00:05:19,340 OK, alle har fylt ut skjemaet. 110 00:05:19,340 --> 00:05:21,400 Dette skal fungere på en telefon, også, hvis du vil. 111 00:05:21,400 --> 00:05:23,695 All right, på Klar, ferdig, gå. 112 00:05:23,695 --> 00:05:24,195 Hit her. 113 00:05:24,195 --> 00:05:27,275 114 00:05:27,275 --> 00:05:27,775 Hva? 115 00:05:27,775 --> 00:05:31,140 116 00:05:31,140 --> 00:05:31,640 Nei. 117 00:05:31,640 --> 00:05:34,410 118 00:05:34,410 --> 00:05:40,250 Jeg sverger til Gud, jeg testet dette flere ganger i dag. 119 00:05:40,250 --> 00:05:41,720 Du fikk den? 120 00:05:41,720 --> 00:05:43,145 >> [Interposing VOICES] 121 00:05:43,145 --> 00:05:46,470 122 00:05:46,470 --> 00:05:49,560 >> DAVID MALAN: OK, brukerfeil kanskje. 123 00:05:49,560 --> 00:05:50,550 Det er to. 124 00:05:50,550 --> 00:05:53,300 Det fungerte for to ut av en noen hundre, tre, fire. 125 00:05:53,300 --> 00:05:55,940 OK, det er bra. 126 00:05:55,940 --> 00:05:58,520 Fire av fem for korrekthet hvor om. 127 00:05:58,520 --> 00:05:59,810 >> Så hva skjedde? 128 00:05:59,810 --> 00:06:02,727 Så formodentlig, uten å se din skjermer, hvorfor kan det ha errored? 129 00:06:02,727 --> 00:06:05,518 Det er nok at vi var bare prøver å gjøre for mange tilkoblinger 130 00:06:05,518 --> 00:06:08,110 til e-postserver Harvards alle på en gang fra det samme IP-adresse. 131 00:06:08,110 --> 00:06:10,740 Jeg bare gjetter siden jeg ikke gjorde det har luksusen av testing 132 00:06:10,740 --> 00:06:13,220 denne koden med noen 300 personer i forveien 133 00:06:13,220 --> 00:06:16,040 men for nå innse at at minst bør 134 00:06:16,040 --> 00:06:18,250 har fått jobben gjort denne gangen. 135 00:06:18,250 --> 00:06:22,880 >> All right, så hvorfor er dette hele mer relevante for hva som skjer? 136 00:06:22,880 --> 00:06:24,900 Vel først, en rask par kunngjøringer. 137 00:06:24,900 --> 00:06:29,350 Så en, hvis du ønsker å bli med Chang, og Nick, og andre til lunsj denne fredagen, 138 00:06:29,350 --> 00:06:32,400 gjøre RSVP til vanlig nettadresse der. 139 00:06:32,400 --> 00:06:35,650 Hvis du tenker på å konsentrere seg i eller gjør en sekundær i CS, 140 00:06:35,650 --> 00:06:38,941 enten du er en sophomore, eller freshman, eller til og med junior eller senior på dette punktet 141 00:06:38,941 --> 00:06:42,490 og kan fortsatt presse på kursene, innse at ingeniørskole 142 00:06:42,490 --> 00:06:45,620 samler gratis Ben og Jerrys iskrem og råd 143 00:06:45,620 --> 00:06:48,910 denne onsdagen kort tid etter klasse 4:00 PM i CS bygningen 144 00:06:48,910 --> 00:06:49,771 på Maxwell Dworkin. 145 00:06:49,771 --> 00:06:51,520 Hvis dette er for fort på skjermen, bare gå 146 00:06:51,520 --> 00:06:55,260 å cs50.harvard.edu for en koble til Facebook-event 147 00:06:55,260 --> 00:06:57,140 hvor du kan se flere detaljer. 148 00:06:57,140 --> 00:07:01,390 >> I mellomtiden, jeg trodde jeg ville rette en annen ting jeg goofed på onsdag. 149 00:07:01,390 --> 00:07:04,400 Det viser seg at Markus ID på Facebook var ikke tre. 150 00:07:04,400 --> 00:07:05,230 Det var fire. 151 00:07:05,230 --> 00:07:08,330 Det viser seg at han hadde mer test kontoer enn jeg husker. 152 00:07:08,330 --> 00:07:12,400 Men hva dette føltes som en mulighet å gjøre er å trekke opp en URL som dette. 153 00:07:12,400 --> 00:07:16,680 >> Så det viser seg at Facebook har en API, Application Programming Interface, 154 00:07:16,680 --> 00:07:20,070 som er en mekanisme der du kan be om data programma 155 00:07:20,070 --> 00:07:24,480 på Facebook og få tilbake maskinen lesbar informasjon, ikke websider 156 00:07:24,480 --> 00:07:28,690 men bare rå tekst, noe kalt Javascript Object Notation. 157 00:07:28,690 --> 00:07:32,150 Og faktisk, hvis jeg besøker dette URL, og zoome inn, som standard, 158 00:07:32,150 --> 00:07:34,960 dette er Marks offentlig tilgjengelig informasjon. 159 00:07:34,960 --> 00:07:37,430 >> Og interessant detalj her er bare at hans ID 160 00:07:37,430 --> 00:07:40,670 er faktisk nummer fire, som jeg realiseres så snart jeg gjorde dette. 161 00:07:40,670 --> 00:07:44,260 Du kan gjøre dette selv hvis du vet Facebook-brukernavn hvis du har en. 162 00:07:44,260 --> 00:07:45,440 Bare skriv det opp toppen der. 163 00:07:45,440 --> 00:07:46,640 Og ingenting av dette er privat. 164 00:07:46,640 --> 00:07:48,670 Jeg bare gjør dette selv i inkognitomodus. 165 00:07:48,670 --> 00:07:49,900 Så jeg er ikke engang logget inn. 166 00:07:49,900 --> 00:07:54,440 Og du ser at jeg tilsynelatende var bruker nummer 6454 167 00:07:54,440 --> 00:07:56,480 på Facebook, som ikke er så ille i disse dager. 168 00:07:56,480 --> 00:07:59,900 Så uansett, vil du også se tilleggsinformasjon der. 169 00:07:59,900 --> 00:08:02,150 >> Og nyttig aspekt for det er at du 170 00:08:02,150 --> 00:08:06,890 kunne skrive din egen programvare som en eller annen måte integrerer data som dette 171 00:08:06,890 --> 00:08:08,170 inn din egen søknad. 172 00:08:08,170 --> 00:08:10,650 Du kan styrke brukerne til logge inn på nettstedet ditt, 173 00:08:10,650 --> 00:08:14,190 ikke bruker sine egne tilpassede brukernavn og passord, men kanskje deres Facebook login 174 00:08:14,190 --> 00:08:16,170 og få informasjon selv om sine venner, 175 00:08:16,170 --> 00:08:18,740 hvis de godkjenne sådan, eller lignende. 176 00:08:18,740 --> 00:08:21,430 Så merk at CS50, også, har noen av sine egne APIer, 177 00:08:21,430 --> 00:08:24,620 en for kurskatalogdata, noen for de hugs menyene i spise 178 00:08:24,620 --> 00:08:26,730 haller, alle av bygninger og steder 179 00:08:26,730 --> 00:08:30,930 på campus har vi en API for så vel at du kan spørre på samme måte og få 180 00:08:30,930 --> 00:08:35,520 tilbake tekstlig data som du kan integrere inn i en PHP eller Javascript, eller enda, 181 00:08:35,520 --> 00:08:38,320 men mindre vanlig, en C basert avsluttende prosjekt. 182 00:08:38,320 --> 00:08:41,190 >> Faktisk videre til finalen Prosjektet er noen milepæler. 183 00:08:41,190 --> 00:08:42,980 Du fikk en epost fra oss om dagen. 184 00:08:42,980 --> 00:08:45,761 Innse at forslaget skyldes denne kommende mandag. 185 00:08:45,761 --> 00:08:49,010 Det er ikke nødvendigvis bindende, men du trenger å motta undervisning stipendiater 186 00:08:49,010 --> 00:08:51,260 godkjenning før du gjør eventuelle endringer deretter. 187 00:08:51,260 --> 00:08:54,280 Og så videre er en rekke andre milepæler. 188 00:08:54,280 --> 00:08:56,542 >> Så for å erte deg, også, med noen muligheter, 189 00:08:56,542 --> 00:08:58,250 Vi har en haug med disse hue lyspærer. 190 00:08:58,250 --> 00:09:01,190 Og noen av dere nå har noen av disse i din hybel også. 191 00:09:01,190 --> 00:09:02,920 Og de også har en API. 192 00:09:02,920 --> 00:09:07,300 Så husker de binære pærer uker siden at Dan Bradley og Ansel 193 00:09:07,300 --> 00:09:08,780 Duff skapt for oss. 194 00:09:08,780 --> 00:09:12,560 De brukte et programvaregrensesnitt til Dette lyspære, som i øyeblikket 195 00:09:12,560 --> 00:09:15,232 er koblet til strøm og deretter via trådløst 196 00:09:15,232 --> 00:09:17,690 er koblet til en liten ting kalt Bridge her nede, 197 00:09:17,690 --> 00:09:21,280 som en liten router proprietær til denne spesielle enhet. 198 00:09:21,280 --> 00:09:26,540 >> Men det viser seg om jeg vet hvordan du sende HTTP-meldinger, som vi alle nå gjør, 199 00:09:26,540 --> 00:09:31,670 Jeg kan sende en melding som dette til denne lyspæren for å slå den av eller på 200 00:09:31,670 --> 00:09:34,000 eller gjøre en rekke andre operasjoner på det. 201 00:09:34,000 --> 00:09:36,110 Legg merke til at det ikke er få, det er ikke poste. 202 00:09:36,110 --> 00:09:37,760 Det er en annen en som heter put. 203 00:09:37,760 --> 00:09:39,630 Det er faktisk et par andre slike verb. 204 00:09:39,630 --> 00:09:42,920 Men legg merke til det er en bane der, slash API, slash ny utvikler, 205 00:09:42,920 --> 00:09:44,990 slash lys, skråstrek en, slash tilstand. 206 00:09:44,990 --> 00:09:49,060 >> Det er tydeligvis bare banen at selskapet, Philips, 207 00:09:49,060 --> 00:09:51,640 besluttet du må treffe med en HTTP-forespørsel 208 00:09:51,640 --> 00:09:55,010 Hvis du ønsker å endre tilstanden av pære ved hjelp av HTTP 1.1. 209 00:09:55,010 --> 00:09:56,380 Så oppdager den blanke linjen. 210 00:09:56,380 --> 00:10:00,170 Og så til slutt det ser ut som typen en rekke av noe slag, 211 00:10:00,170 --> 00:10:04,730 dette igjen kommer til å bli kalt Javascript Object Notation, eller Jason. 212 00:10:04,730 --> 00:10:08,000 Og det du ser her, er at er det tre sentrale verdi par. 213 00:10:08,000 --> 00:10:09,115 >> En nøkkel kalles på. 214 00:10:09,115 --> 00:10:10,990 Og dens verdi tilsynelatende kommer til å være sant. 215 00:10:10,990 --> 00:10:13,612 Lysstyrke er 128, noe som er en slags int. 216 00:10:13,612 --> 00:10:15,820 Og så overgangstid er null, som er tilsynelatende 217 00:10:15,820 --> 00:10:17,970 hvor lang tid det kommer til å ta å slå denne tingen på. 218 00:10:17,970 --> 00:10:19,890 >> Så akkurat nå er dette lyspære er av. 219 00:10:19,890 --> 00:10:22,880 Men hvis jeg gjør akkurat dette-- la meg gå til en liten jukselapp 220 00:10:22,880 --> 00:10:25,200 at Dan satt opp i advance-- og jeg kommer 221 00:10:25,200 --> 00:10:27,920 å gå videre og kopiere følgende kommando. 222 00:10:27,920 --> 00:10:30,200 Curl, som noen av dere kanskje har sanket på CS50 223 00:10:30,200 --> 00:10:35,080 Diskuter er et verktøy som Telnet slikt at du kan simulere HTTP-forespørsler, 224 00:10:35,080 --> 00:10:36,360 spesielt setter. 225 00:10:36,360 --> 00:10:39,710 Jeg kan sende disse dataene, spesifikt hva vi bare 226 00:10:39,710 --> 00:10:43,430 så et øyeblikk siden spesifikt til denne nettadressen over her. 227 00:10:43,430 --> 00:10:46,310 Og så Curl kommer til å håndtere alle de nødvendige topptekster 228 00:10:46,310 --> 00:10:47,600 og analysering der av. 229 00:10:47,600 --> 00:10:54,700 >> Så alt jeg har å gjøre er å kopiere dette inn i et terminalvindu, og trykk Enter. 230 00:10:54,700 --> 00:10:56,000 Og lyspæren fortsetter. 231 00:10:56,000 --> 00:10:59,060 Og dette er alt går gjennom min datamaskin trådløst 232 00:10:59,060 --> 00:11:01,960 liksom ned til broen, som deretter å snakke med denne lyspære. 233 00:11:01,960 --> 00:11:02,960 Jeg kan gjøre noe annet. 234 00:11:02,960 --> 00:11:07,050 Jeg kan gjøre denne tingen gå rødt for eksempel. 235 00:11:07,050 --> 00:11:11,040 Jeg kan for eksempel gjøre denne tingen gå grønt. 236 00:11:11,040 --> 00:11:12,220 Jeg kan gjøre det gå blå. 237 00:11:12,220 --> 00:11:14,760 >> Og legg merke til i hver av disse forekomster, alle som jeg forandrer 238 00:11:14,760 --> 00:11:18,540 er den såkalte fargetone verdi til faktisk gi det litt farge. 239 00:11:18,540 --> 00:11:20,320 Så la meg lime dette i tillegg. 240 00:11:20,320 --> 00:11:21,000 Nå er det blå. 241 00:11:21,000 --> 00:11:24,672 >> Og du kan gjøre enda mer avansert ting where-- la oss gå til grønt. 242 00:11:24,672 --> 00:11:26,630 Og jeg kunne gjøre dette av Selvfølgelig med min egen kode. 243 00:11:26,630 --> 00:11:30,670 Men selv API selv støtter funky operasjoner 244 00:11:30,670 --> 00:11:35,510 som dette, vil som nå bry oss for de neste 30 sekunder. 245 00:11:35,510 --> 00:11:39,170 >> Så det er en smakebit av hva du kanskje gjøre med en API, dette involverer 246 00:11:39,170 --> 00:11:40,010 lyspærer. 247 00:11:40,010 --> 00:11:42,510 Merk at CS50 har et par par av Google Glass hvis du vil 248 00:11:42,510 --> 00:11:45,380 liker å takle noe langs disse linjene, Arduino Unos, som 249 00:11:45,380 --> 00:11:48,670 er bitte små datamaskiner, i hovedsak, på en liten kretskort 250 00:11:48,670 --> 00:11:50,470 at du kan koble ledninger og andre ting 251 00:11:50,470 --> 00:11:52,732 til og faktisk kontroll ditt virkelige verden miljø. 252 00:11:52,732 --> 00:11:54,940 Og så er det et par av nye leker som vi har. 253 00:11:54,940 --> 00:11:59,294 Denne bokstavelig talt bare kom andre dagen i posten, en Myo Armband. 254 00:11:59,294 --> 00:12:01,710 Og jeg syntes det er en måte å få deg opphisset om prosjekter 255 00:12:01,710 --> 00:12:03,720 som du kan bruke med denne maskinvaren ville 256 00:12:03,720 --> 00:12:08,900 være å spille denne korte klipp at de bruker å erte folk 257 00:12:08,900 --> 00:12:10,500 at vi nå lever i fremtiden. 258 00:12:10,500 --> 00:12:13,494 259 00:12:13,494 --> 00:12:15,490 >> [MUSIC SPILLE] 260 00:12:15,490 --> 00:13:33,410 261 00:13:33,410 --> 00:13:37,109 >> DAVID MALAN: Så på bare noen uker, du kan også være at kul på CS50 rettferdig. 262 00:13:37,109 --> 00:13:39,150 En annen enhet som vi har en haug med at vi er 263 00:13:39,150 --> 00:13:42,090 glade for å låne ut til prosjekter kalles en bevegelseskontroller. 264 00:13:42,090 --> 00:13:45,030 Dette er en liten USB-enhet du kobler til en datamaskin som 265 00:13:45,030 --> 00:13:47,520 lar deg kommunisere med din bærbare, Mac eller PC, 266 00:13:47,520 --> 00:13:51,570 som om du hadde som en Xbox Kinect og faktisk gjøre fysiske bevegelser mye 267 00:13:51,570 --> 00:13:54,509 som vi ser i denne visjon av fremtiden. 268 00:13:54,509 --> 00:13:56,505 >> [MUSIC SPILLE] 269 00:13:56,505 --> 00:15:03,380 270 00:15:03,380 --> 00:15:06,260 >> DAVID MALAN: Så selv om du har aner ikke hvordan noe sånt 271 00:15:06,260 --> 00:15:10,050 kan muligens bli oppfunnet eller arbeid på et nivå maskinvare, uansett. 272 00:15:10,050 --> 00:15:13,520 Selv etter bare noen få måneder med CS50, og en forståelse av programmering 273 00:15:13,520 --> 00:15:19,460 mer generelt, og webprogrammering mer nylig, og da også APIer, og HTTP, 274 00:15:19,460 --> 00:15:21,830 Du vil få tilgang via programvaregrensesnitt hvis du 275 00:15:21,830 --> 00:15:24,680 ønsker å låne en av disse enheter for å faktisk snakke med det 276 00:15:24,680 --> 00:15:27,180 og ikke trenger å bekymre deg for den underliggende implementeringen 277 00:15:27,180 --> 00:15:30,220 detaljer, noe som er helt forenlig med denne oppfatningen av lagdeling 278 00:15:30,220 --> 00:15:33,610 en abstraksjon som vi har sett gjennom hele semesteret. 279 00:15:33,610 --> 00:15:37,990 >> Så også over helgen, så et par biter av nyheter. 280 00:15:37,990 --> 00:15:40,640 Gå først, gå til seminarer om du ønsker å lære noe 281 00:15:40,640 --> 00:15:42,160 mer på en rekke emner. 282 00:15:42,160 --> 00:15:43,340 Se nettadressen der. 283 00:15:43,340 --> 00:15:45,890 Og dette ble sendt til meg av Chang, som du vet, 284 00:15:45,890 --> 00:15:47,850 hvem som skriver ut vår hær av elefanter. 285 00:15:47,850 --> 00:15:49,910 Og det var en overskrift som følger. 286 00:15:49,910 --> 00:15:51,280 Jeg er livredd for min nye TV. 287 00:15:51,280 --> 00:15:54,301 Hvorfor jeg er redd for å snu dette ting på, og du vil være for. 288 00:15:54,301 --> 00:15:56,050 Så vi er nå på peke i semesteret, 289 00:15:56,050 --> 00:15:58,860 også, der selv om du har den minste forståelse 290 00:15:58,860 --> 00:16:02,620 av hvordan nettet fungerer, og HTTP, og sikkerhet, ting som dette 291 00:16:02,620 --> 00:16:03,980 bør begynne å fange øyet. 292 00:16:03,980 --> 00:16:07,450 Men også, vil du forstå se om disse ting er eller ikke 293 00:16:07,450 --> 00:16:08,430 faktiske trusler. 294 00:16:08,430 --> 00:16:10,940 >> Så jeg tok et par utdrag fra denne artikkelen her. 295 00:16:10,940 --> 00:16:12,540 Og historien er som følger. 296 00:16:12,540 --> 00:16:14,300 Jeg er nå eier av en ny smart-TV, noe som 297 00:16:14,300 --> 00:16:18,470 lover å levere streaming multimedieinnhold, spill, app, 298 00:16:18,470 --> 00:16:21,450 sosiale medier, og internett surfing, oh og TV også. 299 00:16:21,450 --> 00:16:24,410 Det eneste problemet er at jeg er nå redd for å bruke den, sier forfatteren. 300 00:16:24,410 --> 00:16:29,592 Du ville være, også, hvis du leser gjennom 46 Privacy Policy for din TV. 301 00:16:29,592 --> 00:16:31,800 Mengden av data dette ting samler er svimlende. 302 00:16:31,800 --> 00:16:35,710 Den logger hvor, når, hvordan og hvor lenge du bruker TV-en. 303 00:16:35,710 --> 00:16:38,190 Det setter tracking cookies, som vi har diskutert, 304 00:16:38,190 --> 00:16:40,560 og beacons designet å oppdage når du har 305 00:16:40,560 --> 00:16:43,185 sett bestemt innhold eller en bestemt e-postmelding 306 00:16:43,185 --> 00:16:45,230 Hvis du ønsker å sjekke e-post på din TV. 307 00:16:45,230 --> 00:16:48,430 Den registrerer appene du bruke, nettstedene du besøker, 308 00:16:48,430 --> 00:16:52,280 og hvordan du kommuniserer med innhold, gjør alt dette via smart TV. 309 00:16:52,280 --> 00:16:55,470 Det også, creepier yet-- det er min addition-- 310 00:16:55,470 --> 00:16:58,140 har et innebygd kamera med ansiktsgjenkjenning. 311 00:16:58,140 --> 00:17:01,010 >> Hensikten er å gi bevegelseskontroll for TV 312 00:17:01,010 --> 00:17:05,490 og gir deg mulighet til å logge på personlig konto ved hjelp av ansiktet ditt. 313 00:17:05,490 --> 00:17:08,940 På oppsiden, bildene er lagret på TV i stedet for lastet opp 314 00:17:08,940 --> 00:17:09,940 til bedriftens server. 315 00:17:09,940 --> 00:17:12,520 På nedsiden, internett tilkoblingen gjør hele TV 316 00:17:12,520 --> 00:17:14,811 sårbare for hackere som har vist evne 317 00:17:14,811 --> 00:17:16,700 å ta fullstendig kontroll over maskinen. 318 00:17:16,700 --> 00:17:20,880 >> Mer problematisk, som om det ikke var smart nok, er mikrofonen. 319 00:17:20,880 --> 00:17:23,599 TV skryte av en stemme gjenkjenning 320 00:17:23,599 --> 00:17:26,859 som lar seerne til å kontrollere skjermen med talekommandoer. 321 00:17:26,859 --> 00:17:30,290 Men tjenesten kommer med en ganske illevarslende advarsel. 322 00:17:30,290 --> 00:17:33,030 Vær oppmerksom på at hvis dine talte ord inkluderer 323 00:17:33,030 --> 00:17:36,210 personlig eller annen sensitiv informasjon, denne informasjonen 324 00:17:36,210 --> 00:17:40,310 vil være blant de data som samles inn og overføres til en tredjepart. 325 00:17:40,310 --> 00:17:40,870 Fikk det? 326 00:17:40,870 --> 00:17:45,860 Ikke si personlig eller sensitiv ting foran TV-en. 327 00:17:45,860 --> 00:17:47,280 >> Så dette er faktisk på ordentlig. 328 00:17:47,280 --> 00:17:50,530 Og det er vanskelig ikke å se om du gå til Best Buy eller liknende for TVer 329 00:17:50,530 --> 00:17:51,030 i disse dager. 330 00:17:51,030 --> 00:17:52,540 De er alle smart på noen måte. 331 00:17:52,540 --> 00:17:54,740 Og de får smartere og creepier. 332 00:17:54,740 --> 00:17:57,490 Og de er rett og slett å samle inn data på måter som vi har snakket om 333 00:17:57,490 --> 00:18:01,840 og deretter laste det via HTTP eller en annen protokoll til noen server. 334 00:18:01,840 --> 00:18:05,720 >> Så dette var en morsom artikkel i dette online nettsted 335 00:18:05,720 --> 00:18:08,940 her, som snakket om en Særlig bug eller feil kode 336 00:18:08,940 --> 00:18:11,340 at vi faktisk kan knytte i forrige ukes diskusjon. 337 00:18:11,340 --> 00:18:15,730 Så denne overskriften var som følger, historien går her, 338 00:18:15,730 --> 00:18:18,720 Josh Breckman jobbet for en selskap som landet en kontrakt 339 00:18:18,720 --> 00:18:22,390 å utvikle et innholdshåndteringssystem system, eller CMS som de kalles, 340 00:18:22,390 --> 00:18:24,380 for en ganske stor statlig nettside. 341 00:18:24,380 --> 00:18:27,300 Mye av prosjektet involvert utvikle et content management system 342 00:18:27,300 --> 00:18:29,840 slik at de ansatte ville være stand til å bygge og vedlikeholde 343 00:18:29,840 --> 00:18:31,877 stadig skiftende innhold for deres nettsted. 344 00:18:31,877 --> 00:18:34,210 Ting gikk ganske bra for noen dager etter går live. 345 00:18:34,210 --> 00:18:37,020 Men på dag seks, ting gikk ikke så bra. 346 00:18:37,020 --> 00:18:39,500 Alt innholdet på Nettstedet hadde helt forsvunnet. 347 00:18:39,500 --> 00:18:42,950 Og alle sidene førte til standard, vennligst skriv innhold nettside. 348 00:18:42,950 --> 00:18:43,810 Uff da. 349 00:18:43,810 --> 00:18:46,080 Josh ble kalt inn for å undersøke og lagt merke til 350 00:18:46,080 --> 00:18:49,390 som en spesielt plagsom ekstern IP-adresse hadde 351 00:18:49,390 --> 00:18:53,380 gått inn og slettet alle innholdet på systemet. 352 00:18:53,380 --> 00:18:56,290 >> IP-adressen ikke tilhører til noen oversjøiske hacker bøyd 353 00:18:56,290 --> 00:18:58,340 på å ødelegge nyttig offentlig informasjon. 354 00:18:58,340 --> 00:19:05,190 Det vedtok å googlebot.com, Googles egen web kryp edderkopp. 355 00:19:05,190 --> 00:19:06,010 Uff da. 356 00:19:06,010 --> 00:19:09,150 Etter litt forskning og scrambling rundt for å finne en noncorrupt backup, 357 00:19:09,150 --> 00:19:10,180 Josh fant problemet. 358 00:19:10,180 --> 00:19:12,700 >> En bruker hadde kopiert og limt inn noe innhold fra en 359 00:19:12,700 --> 00:19:15,670 side til en annen, inkludert en Rediger link 360 00:19:15,670 --> 00:19:17,577 å redigere innholdet på siden. 361 00:19:17,577 --> 00:19:20,160 Normalt vil dette ikke ville være en problem siden en ekstern bruker ville 362 00:19:20,160 --> 00:19:24,320 må skrive inn et navn og passord, men CMS autentiseringssystemet, 363 00:19:24,320 --> 00:19:27,520 innloggingssystemet, ikke ta hensyn 364 00:19:27,520 --> 00:19:30,980 sofistikert hacking teknikker for Google Spider. 365 00:19:30,980 --> 00:19:31,700 Uff da. 366 00:19:31,700 --> 00:19:33,610 >> Som det viser seg, Google Spider bruker ikke 367 00:19:33,610 --> 00:19:36,950 cookies, som betyr at den kan lett omgå en sjekk for 368 00:19:36,950 --> 00:19:39,840 er logget på cookie satt til å være falske. 369 00:19:39,840 --> 00:19:42,620 Det heller ikke ta hensyn til Javascript, noe som ville normalt 370 00:19:42,620 --> 00:19:45,170 spør og omdirigere brukere som ikke er logget inn. 371 00:19:45,170 --> 00:19:48,610 Det gjør imidlertid følge hvert hyperkobling på hver side den finner, 372 00:19:48,610 --> 00:19:51,700 inkludert de med Slett side i tittelen. 373 00:19:51,700 --> 00:19:52,650 Uff da. 374 00:19:52,650 --> 00:19:56,070 >> Så hva betyr dette i mer tekniske, men ganske tilgjengelig form? 375 00:19:56,070 --> 00:19:58,340 Det betyr bare at gjennom deres hjemmeside, 376 00:19:58,340 --> 00:20:02,287 de hadde webadresser ikke ulikt denne som du kan se i oppgavesettet sju. 377 00:20:02,287 --> 00:20:04,620 Recall i oppgavesettet syv eller vet i oppgavesettet syv 378 00:20:04,620 --> 00:20:06,411 at du er utfordret, blant annet 379 00:20:06,411 --> 00:20:08,570 å selge aksjer på vegne av brukerne. 380 00:20:08,570 --> 00:20:14,010 Men implementere denne funksjonen ved hjelp av få via hyperkoblinger i din bruker 381 00:20:14,010 --> 00:20:16,880 grensesnitt, sannsynligvis ikke den smarteste ideen 382 00:20:16,880 --> 00:20:20,300 fordi hvis området er liksom tilgjengelig enten med et menneske 383 00:20:20,300 --> 00:20:23,577 hvem har klikke rundt eller kjøpe en bot som Googles eller en Spider 384 00:20:23,577 --> 00:20:26,160 som de blir kalt det er bare Internett-gjennomgang prøver å indeksere 385 00:20:26,160 --> 00:20:29,060 nettet som en søkemotor, de kunne svært lett 386 00:20:29,060 --> 00:20:31,340 truffet via få denne type URL. 387 00:20:31,340 --> 00:20:33,770 Og det er funksjonelt tilsvarende, i dette tilfellet, 388 00:20:33,770 --> 00:20:37,000 selger alle aksjer i Google. 389 00:20:37,000 --> 00:20:40,030 >> Nå ærlig, det er helt asinine at CMS 390 00:20:40,030 --> 00:20:43,240 brukte Javascript og informasjonskapsler å gjennomføre sin login system 391 00:20:43,240 --> 00:20:47,100 og ikke gjøre det server side, som dere gjør og vil i PSet 7-- 392 00:20:47,100 --> 00:20:49,940 det er en login.php file-- alltid, alltid, 393 00:20:49,940 --> 00:20:52,789 alltid sikkerhet bør være gjøres på serversiden, 394 00:20:52,789 --> 00:20:56,080 ikke på klientsiden, fordi, ettersom dette Artikkelen antyder, og du kanskje deg selv 395 00:20:56,080 --> 00:20:59,600 se ved et tidspunkt, er det trivielt for en bruker, gode eller dårlige, 396 00:20:59,600 --> 00:21:02,860 å bare slå av Javascript for ikke å nevne cookies. 397 00:21:02,860 --> 00:21:06,020 Så det er din daglige WTF. 398 00:21:06,020 --> 00:21:07,970 >> Det er én mer, noe som er bare litt skummelt, 399 00:21:07,970 --> 00:21:11,360 så jeg skal nevne det hvis bare som et liv leksjon. 400 00:21:11,360 --> 00:21:14,850 Når du bruker et program heter som Snapchat eller lignende 401 00:21:14,850 --> 00:21:19,380 som sier disse bildene bare vare i fem sekunder, ti sekunder eller whatnot. 402 00:21:19,380 --> 00:21:21,680 De er flyktig Det er absolutt ikke tilfelle. 403 00:21:21,680 --> 00:21:25,670 Som det er ingen måte, digitalt, for å implementere en eller annen form av video, 404 00:21:25,670 --> 00:21:30,150 eller bilde, eller tekstlig å dele en slik at en mottaker på den andre enden 405 00:21:30,150 --> 00:21:31,660 kan ikke en eller annen måte lagre dataene. 406 00:21:31,660 --> 00:21:34,300 >> I den mest naive måte, noen kunne ta telefonen. 407 00:21:34,300 --> 00:21:36,850 Og de har en 10 sekunders vindu mens du ser på noen blunk 408 00:21:36,850 --> 00:21:39,410 å bare ta et annet telefonnummer og fotografere den, selvsagt. 409 00:21:39,410 --> 00:21:41,660 Så du kan bevare noe digitalt på den måten. 410 00:21:41,660 --> 00:21:44,620 Noen av dere vet hvordan de skal ta skjermbilder på telefonen. 411 00:21:44,620 --> 00:21:49,290 Faktisk, hvis du ikke vet dette, innse at minst Snapchat, 412 00:21:49,290 --> 00:21:51,040 og jeg tror andre programmer i disse dager, 413 00:21:51,040 --> 00:21:53,720 minst fortelle deg om mottakeren har faktisk 414 00:21:53,720 --> 00:21:55,310 tatt en skjermdump av bildet. 415 00:21:55,310 --> 00:22:00,870 >> Men enda verre, dette var snappening, som noen laget det nylig, 416 00:22:00,870 --> 00:22:04,680 der noen 100.000 snaps hadde blitt løslatt 417 00:22:04,680 --> 00:22:09,310 i det som kalles en torrent-fil på ulike nettsteder slutt. 418 00:22:09,310 --> 00:22:12,000 Og disse inneholdt en hel haug av private meldinger og innlegg. 419 00:22:12,000 --> 00:22:15,210 Det viser seg de fleste av dem godartet, så ikke hva man kunne forvente. 420 00:22:15,210 --> 00:22:17,580 Men fordi folk hadde brukt en tredjeparts nettside, 421 00:22:17,580 --> 00:22:20,270 logge inn med sin Snapchat brukernavn og passord, og deretter 422 00:22:20,270 --> 00:22:23,470 sparer alle sine snaps på denne tredjeparts nettsted. 423 00:22:23,470 --> 00:22:26,130 Og det var at tredjemann nettside som ble hacket, 424 00:22:26,130 --> 00:22:30,710 som nettopp mente noen funnet ut hvordan å få alle 100.000 pluss av disse bildene 425 00:22:30,710 --> 00:22:33,822 inn i sin egen harddisk for senere deling. 426 00:22:33,822 --> 00:22:36,030 Oppriktig, her også, det er liksom av asinine at Snapchat 427 00:22:36,030 --> 00:22:39,360 er implementert på en slik måte at en tredjepart kan sortere på skjærings 428 00:22:39,360 --> 00:22:43,310 data og at det ikke er knyttet til din egen applikasjon som kjører på telefonen. 429 00:22:43,310 --> 00:22:46,947 Men også her, skjønner at disse ting skal ikke ta deg av overraskelse, 430 00:22:46,947 --> 00:22:49,030 eller i det minste det burde være et liv leksjon i her. 431 00:22:49,030 --> 00:22:52,220 Hvis du ønsker det tekniske detaljer, gå til denne nettadressen der 432 00:22:52,220 --> 00:22:53,570 det er i dagens lysbilder. 433 00:22:53,570 --> 00:23:00,960 Greit, noen spørsmål om dagens livsvisdom i CS? 434 00:23:00,960 --> 00:23:02,710 Slå den av. 435 00:23:02,710 --> 00:23:04,970 Noe som helst? 436 00:23:04,970 --> 00:23:06,301 Noe som helst? 437 00:23:06,301 --> 00:23:09,050 Jeg har fått en masse folk sjekker deres Snapchat eller noe nå. 438 00:23:09,050 --> 00:23:11,690 >> All right, så SQL, Structured Query Language. 439 00:23:11,690 --> 00:23:12,509 La oss bryte dette. 440 00:23:12,509 --> 00:23:14,300 Og også, selv om vi bare skrape 441 00:23:14,300 --> 00:23:16,310 overflaten av denne språk, vil vi gi deg 442 00:23:16,310 --> 00:23:18,930 nok av språket i form av PSet 7 443 00:23:18,930 --> 00:23:22,140 slik at du kan takle noen ganske vanlig funksjonalitet. 444 00:23:22,140 --> 00:23:24,912 Men innser at det er et par ting vi ikke krever av deg, 445 00:23:24,912 --> 00:23:27,120 men de kommer til å være viktig kommet endelige prosjekter 446 00:23:27,120 --> 00:23:30,760 og sikkert komme å gjøre faktiske nettsteder med faktiske brukere 447 00:23:30,760 --> 00:23:32,040 Dette designbeslutning. 448 00:23:32,040 --> 00:23:34,460 >> Det viser seg at i en MySQL database, du 449 00:23:34,460 --> 00:23:37,460 har bunter av valg som de datatyper for kolonner 450 00:23:37,460 --> 00:23:41,670 og andre ting, men du har også Valget av en såkalt lagrings 451 00:23:41,670 --> 00:23:44,570 motor for alle dine data, slags filsystem, 452 00:23:44,570 --> 00:23:46,700 Hvis du er kjent, for alle dine data. 453 00:23:46,700 --> 00:23:48,830 Hvilket format er det til syvende og sist lagret i? 454 00:23:48,830 --> 00:23:53,300 Og den mest vanlige, kanskje, har vært MyISAM og InnoDB, tekniske termer 455 00:23:53,300 --> 00:23:56,060 at vi vil bry seg om bare i den grad at man har 456 00:23:56,060 --> 00:23:58,500 og man ikke har følgende funksjon. 457 00:23:58,500 --> 00:24:00,390 >> Anta at du har litt dorm kjøleskap. 458 00:24:00,390 --> 00:24:03,030 Og anta at du og din romkamerat, som deler denne kjøleskap, 459 00:24:03,030 --> 00:24:04,682 er veldig glad i å si melk. 460 00:24:04,682 --> 00:24:07,140 Og dette er, faktisk, hvordan Historien ble fortalt til meg vei tilbake 461 00:24:07,140 --> 00:24:10,890 i dag da jeg tok et kurs kalt CS 161 Operating Systems, som 462 00:24:10,890 --> 00:24:12,580 på samme måte utforsker dette emnet. 463 00:24:12,580 --> 00:24:13,760 Så du har fått dette kjøleskapet. 464 00:24:13,760 --> 00:24:14,630 Du er ute av melk. 465 00:24:14,630 --> 00:24:17,000 Og du kommer hjem, din romkamerat fortsatt på klassen eller hva, 466 00:24:17,000 --> 00:24:19,208 og du bestemmer deg for jeg kommer til å gå ut og få litt melk. 467 00:24:19,208 --> 00:24:22,630 Så du lukke kjøleskapet, lockup hybel, gå over gaten 468 00:24:22,630 --> 00:24:25,330 til CVS eller der, og få i kø for å kjøpe litt melk. 469 00:24:25,330 --> 00:24:28,960 >> I mellomtiden, får din romkamerat hjem fra klassen, kommer inn i hybel, 470 00:24:28,960 --> 00:24:31,802 åpner kjøleskapet, også innser ooph, vi er ute av melk. 471 00:24:31,802 --> 00:24:33,760 Slik at han eller hun lukker kjøleskap og deretter skjer 472 00:24:33,760 --> 00:24:35,610 å gå til den andre CVS, som skjer for å være 473 00:24:35,610 --> 00:24:38,470 ett kvartal unna de andre CVS på torget, og får i kø 474 00:24:38,470 --> 00:24:40,230 der for å få litt melk. 475 00:24:40,230 --> 00:24:42,524 Nå, selvfølgelig, noen få minutter senere, dere begge komme tilbake, 476 00:24:42,524 --> 00:24:44,690 og det verste av alt mulig utfall har skjedd. 477 00:24:44,690 --> 00:24:45,792 Begge to har melk. 478 00:24:45,792 --> 00:24:47,500 Og du egentlig ikke som melk så mye. 479 00:24:47,500 --> 00:24:49,625 Så en av dem er bare kommer til å forsure på enkelte punkt. 480 00:24:49,625 --> 00:24:55,941 Så nå har du en overdreven mengde melk i kjøleskapet all grunn hvorfor? 481 00:24:55,941 --> 00:24:57,072 >> [Uhørbart] 482 00:24:57,072 --> 00:24:59,780 DAVID MALAN: Ja, det gjorde du ikke en eller annen måte kommunisere med hverandre 483 00:24:59,780 --> 00:25:00,904 at du var å få melk. 484 00:25:00,904 --> 00:25:04,320 Så i de enkleste måter i den menneskelige verden, 485 00:25:04,320 --> 00:25:08,390 hvordan kan du unngå dette dumme scenario skjer slikt 486 00:25:08,390 --> 00:25:09,750 at du bare ende opp med en. 487 00:25:09,750 --> 00:25:10,840 Tekst dem, ja bra. 488 00:25:10,840 --> 00:25:12,877 Men hvor ellers? 489 00:25:12,877 --> 00:25:13,460 Post-it-lapper. 490 00:25:13,460 --> 00:25:14,626 DAVID MALAN: A Post-it lapp. 491 00:25:14,626 --> 00:25:17,150 Enhver form for kommunikasjon som forteller romkameraten 492 00:25:17,150 --> 00:25:18,670 ikke gå inn i kjøleskapet for melk. 493 00:25:18,670 --> 00:25:20,440 Jeg kommer til å gå fylle opp igjen på min egen. 494 00:25:20,440 --> 00:25:22,770 Så du liksom trenger å låse denne ressursen. 495 00:25:22,770 --> 00:25:27,180 Så vi kan gjøre dette-- vi kan slags ødelegge historien og forvandles til en CS historie 496 00:25:27,180 --> 00:25:30,360 der tenke på dette som akkurat som en variabel, som blir lagring av noen verdi. 497 00:25:30,360 --> 00:25:32,570 Og akkurat nå, den verdien av melk er null, 498 00:25:32,570 --> 00:25:35,410 som du ikke vil at dine romkamerat å inspisere den variabelen 499 00:25:35,410 --> 00:25:38,730 og deretter ta en beslutning ham eller henne selv basert på tilstanden i den variabelen 500 00:25:38,730 --> 00:25:42,430 hvis du er i ferd med å å endre tilstanden til den variabelen. 501 00:25:42,430 --> 00:25:46,140 >> Så en av linjene av SQL at vi gi deg i PSet 7 spesifikasjon 502 00:25:46,140 --> 00:25:47,310 er denne her. 503 00:25:47,310 --> 00:25:49,740 Og vi ikke bruke en stor mengde tid på å snakke om det. 504 00:25:49,740 --> 00:25:55,100 Men det viser seg, hvis du prøver å kjøpe noen aksjer i CS50 finans 505 00:25:55,100 --> 00:25:58,000 at du allerede har noen aksjer i, du 506 00:25:58,000 --> 00:26:01,750 ønsker å være i stand til å gjøre en rekke ting kjapt sammen. 507 00:26:01,750 --> 00:26:04,360 Du ønsker å være i stand til å effektivt, på et høyt nivå, 508 00:26:04,360 --> 00:26:06,700 kontrollere all right, hvis jeg vil til å kjøpe flere aksjer i Free, 509 00:26:06,700 --> 00:26:08,780 penny stock vi snakke om i spec, 510 00:26:08,780 --> 00:26:10,660 Jeg vil først sjekke hvor mange aksjer jeg har. 511 00:26:10,660 --> 00:26:11,810 Og antar at det er fem. 512 00:26:11,810 --> 00:26:14,600 Og antar at jeg vil kjøpe 10 mer, jeg til slutt 513 00:26:14,600 --> 00:26:17,069 vil ha 15 aksjer på lager. 514 00:26:17,069 --> 00:26:18,360 Så jeg må spørre to spørsmål. 515 00:26:18,360 --> 00:26:20,230 Hva er status for variabel? 516 00:26:20,230 --> 00:26:21,470 Hva er state of the rad? 517 00:26:21,470 --> 00:26:22,970 Hvor mange aksjer har jeg for tiden? 518 00:26:22,970 --> 00:26:24,636 Så du ønsker å gå videre og oppdatere den. 519 00:26:24,636 --> 00:26:27,720 Så det er analog til melk i at du sjekker rad, 520 00:26:27,720 --> 00:26:30,730 og deretter du ønsker å oppdatere den fordi hvis du ønsker å kjøpe 10 aksjer, 521 00:26:30,730 --> 00:26:32,521 du ikke ønsker å endre raden til 10, du 522 00:26:32,521 --> 00:26:35,300 ønsker å endre det til 5 pluss 10 eller, selvfølgelig, 15. 523 00:26:35,300 --> 00:26:40,030 >> Dette kodelinje sikrer at disse to konseptuelle ideer 524 00:26:40,030 --> 00:26:42,810 skje sammen eller ikke i det hele tatt. 525 00:26:42,810 --> 00:26:46,920 Ingen, inkludert en annen bruker hvem som er logget inn på samme nettsted, 526 00:26:46,920 --> 00:26:49,900 kan liksom avbryte kontroll av raden 527 00:26:49,900 --> 00:26:52,960 og oppdatering av den rad, velge og oppdateringen hvis du vil. 528 00:26:52,960 --> 00:26:57,360 Og syntaksen er ikke super opplagt, men denne linje, blir det er lang, 529 00:26:57,360 --> 00:27:01,150 sikrer at disse to operasjoner sjekk variabel eller sjekk rad 530 00:27:01,150 --> 00:27:04,660 og oppdatere raden skje atomically. 531 00:27:04,660 --> 00:27:06,849 >> Oh her vi gå igjen. 532 00:27:06,849 --> 00:27:07,890 Tekstmelding på telefonen min. 533 00:27:07,890 --> 00:27:09,954 Så la oss gjøre dette til en Litt mer konkret. 534 00:27:09,954 --> 00:27:12,120 Anta at du ikke er implementere et kjøleskap, 535 00:27:12,120 --> 00:27:16,400 og du ikke implementere PSet 7, men en faktisk bank, 536 00:27:16,400 --> 00:27:20,000 eller en minibank, en Automated Teller Maskin, der du liksom 537 00:27:20,000 --> 00:27:22,960 ønsker å være i stand til å styrke brukere å overføre penger 538 00:27:22,960 --> 00:27:24,500 fra én konto til en annen. 539 00:27:24,500 --> 00:27:25,100 OK, henge på. 540 00:27:25,100 --> 00:27:26,683 Jeg kommer til å dempe dette nå, takk. 541 00:27:26,683 --> 00:27:30,450 Så vi ønsker å flytte penger fra ett kontonummer 542 00:27:30,450 --> 00:27:33,600 inn i en annen konto antall, spesielt $ 100. 543 00:27:33,600 --> 00:27:37,690 Så dette er litt av en vilkårlig eksempel, der du, ATM, 544 00:27:37,690 --> 00:27:41,060 kan det være lurt å kjøre to SQL spørringer, trekke fra én konto, 545 00:27:41,060 --> 00:27:42,430 og legge til den andre kontoen. 546 00:27:42,430 --> 00:27:46,766 Men du ønsker å sikre at disse to linjer både skje eller ikke i det hele tatt. 547 00:27:46,766 --> 00:27:48,640 Du ønsker ikke noe bli avbrutt. 548 00:27:48,640 --> 00:27:51,440 Du trenger ikke noen smart bad guy en eller annen måte står ved Bank of America 549 00:27:51,440 --> 00:27:53,270 med to minibanker i fronten av ham og liksom 550 00:27:53,270 --> 00:27:55,270 liksom skrive i kommandoer på samme tid, 551 00:27:55,270 --> 00:28:01,230 forhåpentligvis prøver å trekke $ 200 i stedet på $ 100 og kun ha $ 100 kreditert. 552 00:28:01,230 --> 00:28:04,450 Kort sagt, du ønsker at dette skal oppføre seg nøyaktig slik du forventer. 553 00:28:04,450 --> 00:28:06,540 >> Og måten du gjør dette i SQL database er 554 00:28:06,540 --> 00:28:09,350 du pakker det inn i hva som er kalt en transaksjon. 555 00:28:09,350 --> 00:28:14,290 Bokstavelig talt i SQL, kan du ringe CS50 s spørring funksjon med quote unquote start 556 00:28:14,290 --> 00:28:15,370 transaksjon. 557 00:28:15,370 --> 00:28:18,640 Deretter kan du utføre en rekke av etterfølgende SQL-spørringer, 558 00:28:18,640 --> 00:28:20,870 men ingen av dem tar Effekt på databasen 559 00:28:20,870 --> 00:28:25,880 før du ringer spør quote unquote begå, hvis igjen ved hjelp av PHP. 560 00:28:25,880 --> 00:28:29,810 Og på denne måten, kan du sikre at selv om du har 1000 brukere 561 00:28:29,810 --> 00:28:32,080 treffer databasen på samme tid, SQL 562 00:28:32,080 --> 00:28:34,540 vil love at disse to spørsmål vil være 563 00:28:34,540 --> 00:28:36,740 implementert en rett etter den andre. 564 00:28:36,740 --> 00:28:40,330 Så du ikke ender opp med overskudd av melk eller feil beløp, til slutt, 565 00:28:40,330 --> 00:28:40,830 av penger. 566 00:28:40,830 --> 00:28:43,110 >> Så ha dette i bakhodet, ikke så mye for PSet 7 567 00:28:43,110 --> 00:28:45,250 men for endelige prosjekter hvis du er faktisk 568 00:28:45,250 --> 00:28:49,690 prøver å flytte data rundt på tvers av bordene som du kanskje her. 569 00:28:49,690 --> 00:28:53,980 Men kanskje enda enklere og mer åpen å forstå med et eksempel 570 00:28:53,980 --> 00:28:54,860 er denne her. 571 00:28:54,860 --> 00:28:57,760 Og noen mailet oss om dette bare den andre dagen 572 00:28:57,760 --> 00:28:59,600 da han så noe lignende på nettet. 573 00:28:59,600 --> 00:29:03,480 >> Så vidt jeg vet, pinnesystem er ikke sårbar for dette angrepet. 574 00:29:03,480 --> 00:29:06,637 Og jeg aner ikke om det enda bruksområder SQL-databasen under panseret. 575 00:29:06,637 --> 00:29:08,470 Men la oss bruke det for skyld diskusjonen. 576 00:29:08,470 --> 00:29:10,178 Her er skjermen som Harvard folk har en tendens 577 00:29:10,178 --> 00:29:13,620 å se når du logger inn med sin Harvard-ID-nummer og deres pin. 578 00:29:13,620 --> 00:29:19,020 Og anta at tappen systemet var implementert i PHP, og med en MySQL 579 00:29:19,020 --> 00:29:22,000 database, den kode som noen kunne ha skrevet år siden 580 00:29:22,000 --> 00:29:23,270 kan se slik ut. 581 00:29:23,270 --> 00:29:25,230 Først erklære en variabel kalt brukernavn. 582 00:29:25,230 --> 00:29:27,560 Og bare få det fra POST superglobal. 583 00:29:27,560 --> 00:29:30,140 Så får en annen variabel kalt passord og gjøre det samme. 584 00:29:30,140 --> 00:29:33,080 Og så bare kjøre denne lange spørring her, 585 00:29:33,080 --> 00:29:36,690 Velg stjernen fra brukere der brukernavn lik slik og slik 586 00:29:36,690 --> 00:29:38,510 og passord er lik slik og slik. 587 00:29:38,510 --> 00:29:40,660 >> Legg merke til at krøllete bukseseler jeg har brukt her 588 00:29:40,660 --> 00:29:42,880 bare bety for PHP, gå fremover og erstatning 589 00:29:42,880 --> 00:29:45,400 verdien av de to variabler rett der. 590 00:29:45,400 --> 00:29:50,090 De er strengt tatt ikke nødvendig, men de har en tendens til å unngå subtile syntaksfeil. 591 00:29:50,090 --> 00:29:53,650 Så dette ser helt riktig ved første øyekast. 592 00:29:53,650 --> 00:29:54,240 Og det er. 593 00:29:54,240 --> 00:29:56,680 Du kan implementere stiften system på denne måte. 594 00:29:56,680 --> 00:30:00,460 >> Men anta at en super smart og ondsinnet student 595 00:30:00,460 --> 00:30:03,020 innspill dette som hans eller hennes pin. 596 00:30:03,020 --> 00:30:05,550 Så jeg har fjernet kulen skilt her i uekte opp, 597 00:30:05,550 --> 00:30:08,760 og jeg har faktisk avslørt hva han eller hun kan være å skrive. 598 00:30:08,760 --> 00:30:10,350 Og det er litt rart. 599 00:30:10,350 --> 00:30:13,850 Men hva hopper ut på deg på potensielt betenkelig om brukerens input, 600 00:30:13,850 --> 00:30:16,450 selv om du har ingen anelse om hva en SQL-injeksjon angrep betyr. 601 00:30:16,450 --> 00:30:20,300 Hvorfor dette ser litt fishy? 602 00:30:20,300 --> 00:30:21,050 Hva er det? 603 00:30:21,050 --> 00:30:21,550 [Uhørbart] 604 00:30:21,550 --> 00:30:24,260 DAVID MALAN: Den eller er litt mistenkelig. 605 00:30:24,260 --> 00:30:26,310 Faktisk, det er et søkeord fra SQL. 606 00:30:26,310 --> 00:30:28,105 Så det lover ikke godt. 607 00:30:28,105 --> 00:30:29,980 Det faktum at det finnes alle disse enkle anførselstegn 608 00:30:29,980 --> 00:30:32,646 det-- faktisk en av de enkleste måter å bryte noen databaser 609 00:30:32,646 --> 00:30:35,880 er ved å skrive inn et navn som O'Reilly som har en apostrof i det 610 00:30:35,880 --> 00:30:38,600 fordi hvis det menneskelige som skrev koden bak kulissene 611 00:30:38,600 --> 00:30:41,570 tar ikke hensyn til at det kan være enkle anførselstegn i en brukers 612 00:30:41,570 --> 00:30:45,060 innspill, og han eller hun bruker apostrof i koden sin, 613 00:30:45,060 --> 00:30:46,040 dårlige ting kan skje. 614 00:30:46,040 --> 00:30:47,870 >> Faktisk enda verre, bør du vurdere dette. 615 00:30:47,870 --> 00:30:50,600 Hvis dette var igjen koden at noen på Harvard år 616 00:30:50,600 --> 00:30:53,100 siden skrev for pinnen system, merke hva som er 617 00:30:53,100 --> 00:30:56,220 i ferd med å bli byttet ut for brukernavn og passord 618 00:30:56,220 --> 00:30:59,780 hvis brukeren taster inn igjen skroob som deres brukernavn 619 00:30:59,780 --> 00:31:03,960 og deretter en, to, tre, fire, fem, sitat eller quote unquote en equals 620 00:31:03,960 --> 00:31:04,660 sitere en. 621 00:31:04,660 --> 00:31:07,220 Og legg merke til hva som er nøkkelen her er at brukeren ikke har 622 00:31:07,220 --> 00:31:09,900 startet sitt passord eller sin pin med et tilbud. 623 00:31:09,900 --> 00:31:12,610 Og de har ikke endte det med et tilbud fordi han eller hun 624 00:31:12,610 --> 00:31:16,315 er forutsatt at dersom programmerer var ikke så skarp, 625 00:31:16,315 --> 00:31:18,690 de kommer til å ha de apostrof i koden sin. 626 00:31:18,690 --> 00:31:19,860 >> Så her er koden. 627 00:31:19,860 --> 00:31:23,820 Og at substitusjonen kan nå skje er dette. 628 00:31:23,820 --> 00:31:26,350 Og jeg har understreket hva brukeren har skrevet inn. 629 00:31:26,350 --> 00:31:28,480 Så før, etter. 630 00:31:28,480 --> 00:31:33,330 Og legg merke til hva som er mildt urovekkende nå om høyre halvdel av denne SQL-kode? 631 00:31:33,330 --> 00:31:36,300 Det er litt mer komplisert, riktignok, enn de spørsmål vi har sett. 632 00:31:36,300 --> 00:31:38,550 Men dette kan umulig være en god ting hvis du er 633 00:31:38,550 --> 00:31:42,240 sier velger stjernen, som er å velge alt fra brukerens tabellen 634 00:31:42,240 --> 00:31:46,630 der brukernavn er lik skroob og passord er lik én, to, tre, fire, 635 00:31:46,630 --> 00:31:49,610 fem eller en lik en. 636 00:31:49,610 --> 00:31:53,860 Hva er den logiske implikasjonen av det siste klausulen formodentlig? 637 00:31:53,860 --> 00:31:55,650 Det er bare alltid sant. 638 00:31:55,650 --> 00:31:59,930 >> Og fordi vi har liksom gjettet eller funnet ut ved prøving og feiling 639 00:31:59,930 --> 00:32:02,760 at programmerer som skrev ikke denne koden 640 00:32:02,760 --> 00:32:07,250 forutse et menneske eller dårlig person skrive i enkle anførselstegn i tillegg, 641 00:32:07,250 --> 00:32:10,350 vi kan syntaktisk full SQL-spørringen 642 00:32:10,350 --> 00:32:12,260 med noe nonsens men noe som 643 00:32:12,260 --> 00:32:15,930 er syntaktisk feil som alltid evalueres til sant. 644 00:32:15,930 --> 00:32:19,130 Så hvis denne kode blir brukt for å svare spørsmålet sant eller usant bør 645 00:32:19,130 --> 00:32:22,930 denne brukeren få lov til å passere, den Svaret er alltid tilsynelatende kommer 646 00:32:22,930 --> 00:32:26,930 til å være sant fordi dette er alltid kommer å velge noe fra databasen 647 00:32:26,930 --> 00:32:29,280 fordi man selvfølgelig alltid er lik én. 648 00:32:29,280 --> 00:32:30,360 >> Så hva er løsningen? 649 00:32:30,360 --> 00:32:33,290 Vel i PSet 7, vi faktisk unngå dette alle sammen. 650 00:32:33,290 --> 00:32:37,360 Vi gir deg en spørring funksjon, og vi oppfordrer deg til å bruke spørsmålstegn 651 00:32:37,360 --> 00:32:40,430 som plassholdere, som ligner i ånden til printf s% s, 652 00:32:40,430 --> 00:32:43,710 men hva er nøkkelen om spørsmålstegnene her er hvis du faktisk lese gjennom 653 00:32:43,710 --> 00:32:46,950 functions.php, hvor vår spørringsfunksjonen iverksettes, 654 00:32:46,950 --> 00:32:52,780 disse spørsmålstegnene er rømt, hvor noe potensielt farlig 655 00:32:52,780 --> 00:32:58,210 som et enkelt sitat er slått inn en rømt enkelt sitat. 656 00:32:58,210 --> 00:33:00,590 >> Så dette er hva som er virkelig skjer hvis du 657 00:33:00,590 --> 00:33:04,850 bruke CS50 spørring funksjon eller hvilket som helst tall av tredjeparts gratis biblioteker som 658 00:33:04,850 --> 00:33:06,000 gjøre det samme. 659 00:33:06,000 --> 00:33:09,850 Spiller ingen rolle i dette tilfellet, i grønt, hvis brukeren har skrevet i et enkelt sitat 660 00:33:09,850 --> 00:33:12,070 fordi spørringen funksjon som vi skrev er 661 00:33:12,070 --> 00:33:15,120 kommer til å legge backslashes før enhver slik farlig sitat. 662 00:33:15,120 --> 00:33:17,360 Så dette er ikke, i Faktisk kommer til å være legit. 663 00:33:17,360 --> 00:33:20,910 Dette er som å skrive i en gal ute passord som er, selvfølgelig, ikke kommer 664 00:33:20,910 --> 00:33:23,490 å være skroob faktiske passord. 665 00:33:23,490 --> 00:33:28,260 >> Så takeaway for CS50 er en, absolutt alltid bruke noe 666 00:33:28,260 --> 00:33:30,860 som CS50 spørring funksjon eller den underliggende bibliotek, 667 00:33:30,860 --> 00:33:32,560 som skjer for å bli kalt PUD. 668 00:33:32,560 --> 00:33:35,880 Men aldri, aldri, aldri gjøre kode som dette 669 00:33:35,880 --> 00:33:39,472 uten rømme eller skrubbing som de sier dataen. 670 00:33:39,472 --> 00:33:42,430 Og du vil på et tidspunkt trolig kommer over noen nettside som dette. 671 00:33:42,430 --> 00:33:46,060 Faktisk ser det ut til å være tilfelle som på flyplasser og hoteller på steder 672 00:33:46,060 --> 00:33:48,880 der de har gratis Wi-Fi tilgang som du må logge inn på, 673 00:33:48,880 --> 00:33:51,010 disse nettstedene er alltid horribly implementert. 674 00:33:51,010 --> 00:33:55,680 Og så en slags moro hjemme trening, ikke med onde hensikter eller mer 675 00:33:55,680 --> 00:33:59,170 av en morsom på veien mosjon, er å bare skrive 676 00:33:59,170 --> 00:34:02,850 en apostrof, et enkelt sitat, til en form på noen nettside 677 00:34:02,850 --> 00:34:03,810 og se hva som skjer. 678 00:34:03,810 --> 00:34:06,660 Og hvis serveren krasjer eller gir du noen form for feilmelding, 679 00:34:06,660 --> 00:34:09,690 det kan godt være at noen har ikke forventet dette. 680 00:34:09,690 --> 00:34:15,239 Og så bør du varsle riktig myndigheter og fortsette lenger. 681 00:34:15,239 --> 00:34:20,843 >> Så nå dere skal forhåpentligvis forstå litt mer geek humor her. 682 00:34:20,843 --> 00:34:24,120 >> [Latter] 683 00:34:24,120 --> 00:34:27,571 684 00:34:27,571 --> 00:34:29,070 DAVID MALAN: Du vet du er en geek. 685 00:34:29,070 --> 00:34:30,944 For neste flere år, vil du huske 686 00:34:30,944 --> 00:34:33,520 som små Bobby Tables er på grunn av denne tegnefilmen her. 687 00:34:33,520 --> 00:34:36,760 Så holder det i bakhodet når vi kontekst bryter en siste gang 688 00:34:36,760 --> 00:34:38,770 dag til Javascript. 689 00:34:38,770 --> 00:34:41,600 Vi har brukt relativt lite tid på syntaksen til PHP 690 00:34:41,600 --> 00:34:43,440 fordi det er faktisk super lik C. 691 00:34:43,440 --> 00:34:47,300 Og pent nok, Javascript for er super lik C sin syntaks 692 00:34:47,300 --> 00:34:49,639 så vel som vi vil se i bare et øyeblikk, og som vi vil 693 00:34:49,639 --> 00:34:51,205 se senere denne uken spesielt. 694 00:34:51,205 --> 00:34:54,080 Hva du kan gjøre med dette språket, skjønt, er desto mer kraftfull, 695 00:34:54,080 --> 00:34:55,790 spesielt med APIer. 696 00:34:55,790 --> 00:34:56,960 >> Men først en rask gjennomgang. 697 00:34:56,960 --> 00:35:00,450 Så en, i Javascript, er det ingen hovedfunksjon, som er fint. 698 00:35:00,450 --> 00:35:02,650 Som med PHP, kan du bare skrive kode. 699 00:35:02,650 --> 00:35:04,310 Forhold se slik ut. 700 00:35:04,310 --> 00:35:07,100 Og boolske uttrykk kanskje se slik eller slik. 701 00:35:07,100 --> 00:35:09,530 Brytere finnes, og de kan se slik ut. 702 00:35:09,530 --> 00:35:10,970 Fire sløyfer se slik ut. 703 00:35:10,970 --> 00:35:12,390 Mens looper se slik ut. 704 00:35:12,390 --> 00:35:14,160 Gjør whiles se slik ut. 705 00:35:14,160 --> 00:35:16,850 Og så arrays ligne dette, svært lik PHP. 706 00:35:16,850 --> 00:35:20,740 Men legg merke til at i Java deg deklarere en variabel ikke med en krone 707 00:35:20,740 --> 00:35:25,190 signere, ikke med en datatype, men bokstavelig talt ved å si Var for variabel før det. 708 00:35:25,190 --> 00:35:27,900 Det også er løst skrevet ved at den har typer, 709 00:35:27,900 --> 00:35:29,729 men du ikke eksplisitt erklære dem. 710 00:35:29,729 --> 00:35:31,520 Og deretter en streng, etter eksempel kan se 711 00:35:31,520 --> 00:35:34,350 som dette, at strengen bli kalt s i dette tilfellet. 712 00:35:34,350 --> 00:35:35,410 Og deretter et objekt. 713 00:35:35,410 --> 00:35:37,010 Og disse vi vil se mer før lenge. 714 00:35:37,010 --> 00:35:41,470 Og et objekt er kanskje en av de mest sett datastrukturer 715 00:35:41,470 --> 00:35:44,050 i en Javascript-basert programmet fordi det gir 716 00:35:44,050 --> 00:35:46,680 du knytte vilkårlig sentrale verdi parene bare 717 00:35:46,680 --> 00:35:51,240 som PHP sin assosiative arrays og akkurat som din egen hash table 718 00:35:51,240 --> 00:35:54,042 eller prøve som vi implementert et par uker tilbake. 719 00:35:54,042 --> 00:35:56,250 Så la oss faktisk se hva vi kan gjøre med Javascript. 720 00:35:56,250 --> 00:35:59,410 Og spesielt, er denne et vaskeri liste over funksjoner 721 00:35:59,410 --> 00:36:02,300 at nettlesere har som tillate oss å hekte Java 722 00:36:02,300 --> 00:36:05,470 inn i en nettside på følgende måte. 723 00:36:05,470 --> 00:36:09,340 Javascript er ofte brukt som en klientsiden skriptspråk. 724 00:36:09,340 --> 00:36:10,130 Det er ikke utarbeidet. 725 00:36:10,130 --> 00:36:11,370 Det også er tolket. 726 00:36:11,370 --> 00:36:15,740 Men i motsetning til PHP, som har kjørt på serveren, i web-server, 727 00:36:15,740 --> 00:36:18,220 eller dypt inne i kunder, Java 728 00:36:18,220 --> 00:36:22,190 er annerledes ved at den vanligvis kjører i nettleseren. 729 00:36:22,190 --> 00:36:26,060 >> Så noen Javascript-kode du begynne å skrive for PSet 8, eller det endelige prosjektet, 730 00:36:26,060 --> 00:36:29,890 eller i den virkelige verden er generelt kommer skal lagres på serveren, absolutt 731 00:36:29,890 --> 00:36:33,110 i en prikk HTML eller dot JS for Javascript-fil. 732 00:36:33,110 --> 00:36:35,770 Men nettleseren kommer for å laste ned at Java 733 00:36:35,770 --> 00:36:39,530 koden til din forekomst av Chrome, eller IE eller Firefox, eller hva. 734 00:36:39,530 --> 00:36:43,870 Og koden er faktisk kommer til å få henrettet inne i din egen nettleser. 735 00:36:43,870 --> 00:36:46,560 Bare for å gjøre dette mer ekte, La oss se dette i konkret form. 736 00:36:46,560 --> 00:36:50,120 >> Vi har ingen anelse om hva denne koden gjør uten egentlig å lese gjennom den. 737 00:36:50,120 --> 00:36:52,670 Men la meg gå til Facebook.com uten å logge inn. 738 00:36:52,670 --> 00:37:00,440 La meg gå til Inspiser Element og gå til, la oss si, Nettverk og oppdater siden. 739 00:37:00,440 --> 00:37:04,150 Og vi vil see-- la meg skifte Last den Side å få alle forespørsler til nye. 740 00:37:04,150 --> 00:37:08,850 Og den aller første filen jeg ser er CSS, CSS. 741 00:37:08,850 --> 00:37:10,880 Her er det første Javascript-fil, og jeg har 742 00:37:10,880 --> 00:37:14,600 ingen anelse om hva dette betyr, men her er noen av Javascript-kode 743 00:37:14,600 --> 00:37:16,180 som driver Facebook. 744 00:37:16,180 --> 00:37:18,400 Det er ikke engang virkelig at avslørende for å zoome inn. 745 00:37:18,400 --> 00:37:20,260 Det er fortsatt like tåpelig. 746 00:37:20,260 --> 00:37:24,341 >> Men du vil se enda der nede, det er enda mer av disse Javascript-filer. 747 00:37:24,341 --> 00:37:24,840 Uff da. 748 00:37:24,840 --> 00:37:25,440 Det er en ping. 749 00:37:25,440 --> 00:37:28,550 La oss gå ned litt videre, videre, videre. 750 00:37:28,550 --> 00:37:29,894 Det er ett. 751 00:37:29,894 --> 00:37:31,238 Det er ett. 752 00:37:31,238 --> 00:37:31,880 Det er ett. 753 00:37:31,880 --> 00:37:35,820 >> Så selv om Facebook, bak scener, er skrevet delvis i PHP 754 00:37:35,820 --> 00:37:39,100 og Facebooks egen versjon av denne, det er en enorm mengde av Javascript. 755 00:37:39,100 --> 00:37:41,330 Faktisk hvilken som helst av chatter du gjør på Facebook, 756 00:37:41,330 --> 00:37:45,520 noen av inline tidslinje oppdateringer at skje i sanntid, alle av at 757 00:37:45,520 --> 00:37:47,944 er drevet av Javascript. 758 00:37:47,944 --> 00:37:48,444 Yeah? 759 00:37:48,444 --> 00:37:50,235 >> PUBLIKUM: Jeg er ikke sikker hvis dette er Facebook, 760 00:37:50,235 --> 00:37:53,624 men jeg tenkte at Facebook utviklet sin egen in-house kode språ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 er derfor jeg sier en variasjon av PHP kalt Hip Hop at de faktisk 763 00:37:58,110 --> 00:38:03,440 lagt til funksjoner til slik at når Mark først implementert Facebook, 764 00:38:03,440 --> 00:38:04,710 den ble skrevet i PHP. 765 00:38:04,710 --> 00:38:07,370 Og den slags har forblitt slags front end språk 766 00:38:07,370 --> 00:38:09,030 at de bruker for mye av deres koding, men det 767 00:38:09,030 --> 00:38:11,870 har ikke vært et språk som er skalerer spesielt godt til milliarder 768 00:38:11,870 --> 00:38:12,630 mennesker. 769 00:38:12,630 --> 00:38:15,300 Og så har de lagt sine egne forbedringer bak kulissene. 770 00:38:15,300 --> 00:38:17,049 Og de bruker en rekke andre språk 771 00:38:17,049 --> 00:38:19,170 for ulike deler av sin infrastruktur. 772 00:38:19,170 --> 00:38:24,080 Så ja, det er en variasjon av det vi nå kjenner som PHP. 773 00:38:24,080 --> 00:38:26,610 >> Så la oss ta en titt på et par eksempler 774 00:38:26,610 --> 00:38:28,890 av hvordan vi kan bruke Java her. 775 00:38:28,890 --> 00:38:32,530 I dagens kildekode, har vi en haug med filer, hvorav den første, 776 00:38:32,530 --> 00:38:34,090 la oss kalt DOM null. 777 00:38:34,090 --> 00:38:36,770 Så DOM null ser ut som følger. 778 00:38:36,770 --> 00:38:40,730 La meg gå inn i denne katalogen og åpne opp domzero.html, 779 00:38:40,730 --> 00:38:44,970 toppen som har en doc typen erklæringen, sier her kommer HTML 5. 780 00:38:44,970 --> 00:38:46,440 Og nå her er en HTML-kode. 781 00:38:46,440 --> 00:38:47,540 Her er hodet tag. 782 00:38:47,540 --> 00:38:49,210 Og her er hva som er nytt i dag. 783 00:38:49,210 --> 00:38:52,620 >> Vi har nå en script tag innsiden av hodet på siden. 784 00:38:52,620 --> 00:38:55,290 Og dette tilsynelatende gjør svært lite, men varsel 785 00:38:55,290 --> 00:38:58,410 at jeg har definert en manus, en Javascript. 786 00:38:58,410 --> 00:39:01,050 Og som en side, siden dette er en vanlig misforståelse, 787 00:39:01,050 --> 00:39:05,220 Java har absolutt ingenting å gjøre med Java, språket 788 00:39:05,220 --> 00:39:08,010 at noen av dere kanskje har lært i APCS. 789 00:39:08,010 --> 00:39:10,480 Det var mer et markedsførings ting enn noe annet, 790 00:39:10,480 --> 00:39:12,980 riding coattails av Java år siden. 791 00:39:12,980 --> 00:39:17,300 Men Javascript, ingenting å gjøre med Java, bare på samme måte, og grammatikken, 792 00:39:17,300 --> 00:39:18,480 forveksling navngitt. 793 00:39:18,480 --> 00:39:21,890 >> Så her er hvordan du deklarerer en funksjon i Javascript, bokstavelig talt si funksjon, 794 00:39:21,890 --> 00:39:24,556 deretter navnet på funksjonen, da noen argumenter det kan ta, 795 00:39:24,556 --> 00:39:25,530 akkurat som i PHP. 796 00:39:25,530 --> 00:39:28,990 Slår ut i Javascript, en av de mest irriterende funksjoner som eksisterer er Alert. 797 00:39:28,990 --> 00:39:31,392 Dette er et lite vindu som vil dukke opp og varsle deg 798 00:39:31,392 --> 00:39:32,600 til en viss del av informasjonen. 799 00:39:32,600 --> 00:39:33,766 Det er generelt mislikt. 800 00:39:33,766 --> 00:39:35,980 Men vi skal bruke det som vår første øvelsen her. 801 00:39:35,980 --> 00:39:37,900 >> Legg merke til et par funksjoner i Javascript. 802 00:39:37,900 --> 00:39:41,524 Apostrof og anførselstegn ikke egentlig noen rolle lenger. 803 00:39:41,524 --> 00:39:43,690 Apostrof og dobbel sitater kan byttes, 804 00:39:43,690 --> 00:39:46,220 mens i C, må du bruke anførselstegn for strenger, 805 00:39:46,220 --> 00:39:48,150 og du har to single sitater for tegn. 806 00:39:48,150 --> 00:39:51,150 I Java verden, mange mennesker, de fleste 807 00:39:51,150 --> 00:39:54,970 bruke enkle anførselstegn rundt strenger bare fordi det er et stilistisk ting. 808 00:39:54,970 --> 00:39:58,330 Men hva er pluss operatøren her, som vi ikke har sett før? 809 00:39:58,330 --> 00:39:59,836 >> PUBLIKUM: Sammenkobling. 810 00:39:59,836 --> 00:40:00,960 DAVID MALAN: Sammenkobling. 811 00:40:00,960 --> 00:40:02,450 Så C har ikke engang dette. 812 00:40:02,450 --> 00:40:04,820 PHP har dot operatør, som gjør dette. 813 00:40:04,820 --> 00:40:09,710 Java har pluss operatør, som til forveksling er akkurat som Java. 814 00:40:09,710 --> 00:40:11,440 Nå hva som skjer her? 815 00:40:11,440 --> 00:40:14,260 >> Så her er der en grunnleggende forståelse av det bildet 816 00:40:14,260 --> 00:40:17,010 vi kastet opp et par dager siden kommer inn i bildet. 817 00:40:17,010 --> 00:40:19,620 Husker da vi hadde en enkel versjon av en HTML page-- 818 00:40:19,620 --> 00:40:20,830 det bare sa hallo verden. 819 00:40:20,830 --> 00:40:22,770 Og da vi trakk et tre til høyre, som 820 00:40:22,770 --> 00:40:27,320 hadde en haug med rektangler og linjer koble dem som et familietre. 821 00:40:27,320 --> 00:40:30,820 Så det er den såkalte DOM eller Document Object Model. 822 00:40:30,820 --> 00:40:36,759 Og det viser seg at du kan få tilgang rektangler i det treet med syntaks 823 00:40:36,759 --> 00:40:37,550 som følgende. 824 00:40:37,550 --> 00:40:41,370 Du bokstavelig talt si dokumentet, som er en spesiell global variabel i en Javascript 825 00:40:41,370 --> 00:40:45,890 program som har en funksjon forbundet med det at du kan få tilgang 826 00:40:45,890 --> 00:40:50,280 som ligner på et struct, men man simpelthen si prikk og deretter funksjonens navn, 827 00:40:50,280 --> 00:40:52,390 få element av ID. 828 00:40:52,390 --> 00:40:55,460 >> Elementet jeg ønsker å få er tilsynelatende sitere unquote navn. 829 00:40:55,460 --> 00:40:57,150 Og så jeg ønsker å få sin verdi. 830 00:40:57,150 --> 00:40:58,330 Nå får vi i forkant av oss selv. 831 00:40:58,330 --> 00:41:00,038 Jeg er ikke engang sikker på hva alt dette handler om. 832 00:41:00,038 --> 00:41:03,000 La oss spole frem til HTML på siden, som er super enkelt. 833 00:41:03,000 --> 00:41:05,370 >> Legg merke til at jeg har definert En form her nede. 834 00:41:05,370 --> 00:41:07,940 Merke til at jeg har gitt det en unik ID, selv om vi ikke har brukt 835 00:41:07,940 --> 00:41:08,870 dette attributtet før. 836 00:41:08,870 --> 00:41:11,300 Men dette finnes i HTML. 837 00:41:11,300 --> 00:41:15,570 Du kan entydig identifisere noen blings av HTML med en identifikator som dette. 838 00:41:15,570 --> 00:41:19,880 >> Innkalling nå dette-- viser seg HTML støtter, per at vaskeri liste 839 00:41:19,880 --> 00:41:22,490 et øyeblikk siden, en hel haug med hendelsesbehandlinger. 840 00:41:22,490 --> 00:41:25,060 Og denne hendelsen behandleren står på send. 841 00:41:25,060 --> 00:41:28,730 På brukerens innlevering av dette form, ringe følgende kode. 842 00:41:28,730 --> 00:41:31,360 Og koden som kommer å bli kalt eller henrettet 843 00:41:31,360 --> 00:41:35,260 er akkurat dette, den greske funksjon fulgt av return false. 844 00:41:35,260 --> 00:41:37,360 Alt annet bør være ganske kjent. 845 00:41:37,360 --> 00:41:42,050 >> Her er en inngang av type tekst, som ID, i dette tilfelle kommer til å være navn. 846 00:41:42,050 --> 00:41:45,430 Vi har ikke en faktisk navn attributt dette tid-- og en send-knappen. 847 00:41:45,430 --> 00:41:48,330 Så resultatsiden ser slik ut. 848 00:41:48,330 --> 00:41:52,890 Og den resulterende oppførsel, du vil se, ser ut som dette. 849 00:41:52,890 --> 00:41:56,940 Siden det lokale verter sier hei David, knapt en estetisk tiltalende 850 00:41:56,940 --> 00:41:58,340 måte å hilse en bruker. 851 00:41:58,340 --> 00:41:59,950 Men hva som faktisk skjer? 852 00:41:59,950 --> 00:42:01,360 >> Vel, vurdere hva dette er. 853 00:42:01,360 --> 00:42:02,310 Dette er et tekstfelt. 854 00:42:02,310 --> 00:42:04,635 Og i henhold til HTML her, har jeg gitt det 855 00:42:04,635 --> 00:42:07,350 en unik identifikator kalt quote unquote navn. 856 00:42:07,350 --> 00:42:09,770 I mellomtiden har jeg sagt når brukeren sender dette skjemaet 857 00:42:09,770 --> 00:42:13,820 ved å trykke på Enter eller klikke på Send knappen, kaller funksjonen kalles Greet 858 00:42:13,820 --> 00:42:15,410 og deretter tilbake False. 859 00:42:15,410 --> 00:42:16,870 La oss vurdere de i revers. 860 00:42:16,870 --> 00:42:20,590 Legg merke til når jeg klikker Send inn, den URL for siden endres ikke. 861 00:42:20,590 --> 00:42:22,420 Nettleseren ikon ikke begynne å spinne. 862 00:42:22,420 --> 00:42:27,050 Jeg fikk ikke gå hvor som helst, og det er bokstavelig talt fordi jeg sa tilbake False. 863 00:42:27,050 --> 00:42:31,534 Return false kortslutning eller stopp standardvirkemåten til et skjema. 864 00:42:31,534 --> 00:42:33,700 Slik at da etterlater oss med dette et siste spørsmål. 865 00:42:33,700 --> 00:42:34,764 Hva gjør Greet gjøre? 866 00:42:34,764 --> 00:42:36,680 Vel, Hils tilsynelatende kaller en funksjon som heter 867 00:42:36,680 --> 00:42:39,250 Alert, går i ett lang argument som er 868 00:42:39,250 --> 00:42:43,950 resultatet av å sette sammen sammen en haug med dels, hallo komma plass, 869 00:42:43,950 --> 00:42:45,810 så hva dette returnerer. 870 00:42:45,810 --> 00:42:51,490 Så dokument er som en global variabelen til at roten av dette treet, 871 00:42:51,490 --> 00:42:55,560 ringer en spesiell funksjon, ellers nå kjent som en metode. 872 00:42:55,560 --> 00:42:57,650 En funksjon som er innsiden av en variabel er 873 00:42:57,650 --> 00:42:59,640 kalt en fremgangsmåte i stedet for en funksjon. 874 00:42:59,640 --> 00:43:01,570 >> Så får element av ID. 875 00:43:01,570 --> 00:43:03,940 Hva element gjør du ønsker å få av sin ID? 876 00:43:03,940 --> 00:43:06,970 Quote unquote navn og da spesielt verdsetter. 877 00:43:06,970 --> 00:43:12,000 Så med andre ord, at koden bare finner tekstfeltet hvis ID er navn 878 00:43:12,000 --> 00:43:13,380 og deretter får sin verdi. 879 00:43:13,380 --> 00:43:16,460 Så hvis jeg skulle endre dette og sier Davin i stedet for David, 880 00:43:16,460 --> 00:43:20,670 og klikk Send, nå er vi har en hilsen til Davin. 881 00:43:20,670 --> 00:43:22,890 >> Greit, så alt fint og bra. 882 00:43:22,890 --> 00:43:25,480 Men la oss se om vi kan gjøre dette litt renere siden like 883 00:43:25,480 --> 00:43:28,190 skrive kode som dette er generelt kommer til å bli mislikt. 884 00:43:28,190 --> 00:43:30,060 Dette kommer til å se mer skremmende. 885 00:43:30,060 --> 00:43:32,330 Men hva er det første forskjellen at du noterer her 886 00:43:32,330 --> 00:43:35,970 i denne versjonen foruten den navn endre til DOM en? 887 00:43:35,970 --> 00:43:41,110 Hva strukturelt ser annerledes om dette kontra den andre? 888 00:43:41,110 --> 00:43:41,932 Yeah? 889 00:43:41,932 --> 00:43:43,890 PUBLIKUM: Er formen på toppen av skriptet nå? 890 00:43:43,890 --> 00:43:46,570 DAVID MALAN: Ja, er formen på topp av skriptet for noen nysgjerrige grunn. 891 00:43:46,570 --> 00:43:48,736 Så det er det første som hopper ut på meg også. 892 00:43:48,736 --> 00:43:50,990 Og heldigvis minst, denne delen er identiske. 893 00:43:50,990 --> 00:43:53,470 Så det eneste som virker å være annerledes er dette. 894 00:43:53,470 --> 00:43:55,296 >> Så her er det som er ryddig om Javascript to. 895 00:43:55,296 --> 00:43:57,420 Og det gjør det vanskelig å forstå ved første øyekast, 896 00:43:57,420 --> 00:44:00,670 spesielt for endelige prosjekter hvis du ser på eksempelkode på nettet, 897 00:44:00,670 --> 00:44:04,200 men det koker ned til noen grunnleggende syntaktiske funksjoner. 898 00:44:04,200 --> 00:44:06,230 Her igjen er at global variabel dokument. 899 00:44:06,230 --> 00:44:09,540 Her igjen er at metoden eller funksjon som sier få element av ID. 900 00:44:09,540 --> 00:44:11,570 Denne gangen ønsker jeg å få ID kalt demo. 901 00:44:11,570 --> 00:44:12,490 Hvor er det? 902 00:44:12,490 --> 00:44:15,400 Det er tilsynelatende riktig her, selve skjemaet. 903 00:44:15,400 --> 00:44:20,010 >> Og merker at det nå tydeligvis hvis jeg komme tilbake som node fra treet som 904 00:44:20,010 --> 00:44:22,940 representerer skjema seg selv, ikke et tekstfelt, 905 00:44:22,940 --> 00:44:26,970 det viser seg at form, at node eller rektangel fra treet, 906 00:44:26,970 --> 00:44:30,450 har det vi vil kalle en eiendom, veldig, veldig, veldig lik 907 00:44:30,450 --> 00:44:35,390 i ånden til en struct i C. Det er bare en data medlem innsiden av dette rektangel. 908 00:44:35,390 --> 00:44:38,300 >> Så jeg har fått skjemaet her, og jeg legger ved, 909 00:44:38,300 --> 00:44:44,650 eller jeg tilordne, til sin On Send behandleren eller snarere På Send eiendom 910 00:44:44,650 --> 00:44:45,740 følgende funksjon. 911 00:44:45,740 --> 00:44:49,000 Og dette er langt, den galeste ting så langt syntaktisk. 912 00:44:49,000 --> 00:44:53,610 Det viser seg i Javascript, og i PHP, og rett og slett for den saks skyld i C, 913 00:44:53,610 --> 00:44:58,990 selv om vi ikke gjør det, kan du legge navnløs, anonym eller AKA lambda 914 00:44:58,990 --> 00:45:03,000 funksjoner som ikke har et navn men kan kalles likevel. 915 00:45:03,000 --> 00:45:07,050 >> Så det jeg gjør her er jeg tildele Dette On Send eiendom, som 916 00:45:07,050 --> 00:45:14,330 er inne i denne noden av min DOM treet, en funksjon, funksjonspeker hvis du vil. 917 00:45:14,330 --> 00:45:16,310 At funksjonen har ingen nevne, men som ikke gjør det 918 00:45:16,310 --> 00:45:19,110 saken fordi vi vil se i et øyeblikk hvor å kalle det. 919 00:45:19,110 --> 00:45:21,780 Når denne funksjonen kalles, denne koden blir utført, deretter 920 00:45:21,780 --> 00:45:24,210 false returneres på samme måte som før. 921 00:45:24,210 --> 00:45:25,800 >> Men legg merke til hva jeg har gjort. 922 00:45:25,800 --> 00:45:27,830 På dette punktet i historien, har jeg et skjema. 923 00:45:27,830 --> 00:45:30,190 Det har en unik ID som heter demo. 924 00:45:30,190 --> 00:45:33,740 Her nede, har jeg et script tag som utfører følgende kode. 925 00:45:33,740 --> 00:45:37,720 Den festes til den noden i treet til det er On Send 926 00:45:37,720 --> 00:45:40,260 Eiendommen denne funksjonen her. 927 00:45:40,260 --> 00:45:44,310 Og bare av natur på hvordan nettlesere fungerer, når jeg nå klikker Send eller trykk Enter, 928 00:45:44,310 --> 00:45:45,889 den funksjonen kommer til å bli kalt. 929 00:45:45,889 --> 00:45:48,680 Det trenger ikke et navn fordi hvem pokker bryr seg om hva det heter. 930 00:45:48,680 --> 00:45:52,540 Den eneste gangen det noensinne kommer til å få heter er når jeg sender inn skjemaet. 931 00:45:52,540 --> 00:45:55,130 Det er ikke nødvendig for meg, den menneskelige utbygger, 932 00:45:55,130 --> 00:45:57,330 å faktisk kalle det noe annet. 933 00:45:57,330 --> 00:46:00,720 >> Nå bare som en teaser, som om det ble ikke noe imot å bøye nok, 934 00:46:00,720 --> 00:46:03,330 Vi kan selv gjøre dette ser mer kryptisk hjelp 935 00:46:03,330 --> 00:46:05,850 en super populære bibliotek kalt jQuery. 936 00:46:05,850 --> 00:46:08,760 Faktisk jQuery og Javascript blir ofte blandet sammen. 937 00:46:08,760 --> 00:46:12,790 Og hva vi skal gjøre på onsdag er starten bruker dette språket, og disse bibliotekene 938 00:46:12,790 --> 00:46:16,030 å bygge stadig mer asynkron og dynamiske applikasjoner 939 00:46:16,030 --> 00:46:18,950 som kartet får programmer, programmer 940 00:46:18,950 --> 00:46:22,360 som oppdaterer nettsiden i sanntid tid, mye som Facebook eller Gchat 941 00:46:22,360 --> 00:46:27,130 gjøre, og ikke lenger begrense oss til Treffer Send inn etter en get eller bare post 942 00:46:27,130 --> 00:46:27,630 alene. 943 00:46:27,630 --> 00:46:29,055 Så jeg vil se deg på onsdag. 944 00:46:29,055 --> 00:46:31,805 945 00:46:31,805 --> 00:46:35,550 >> [MUSIC SPILLE] 946 00:46:35,550 --> 00:48:09,728