[Musikken afspilles] DAVID MALAN: Dette er CS 50, og dette er begyndelsen af ​​uge ni. Og hvad vi troede, vi ville gøre i dag, er ikke kun lukke kapitlet om sidste uges materiale, hvor vi fokuserede på server side webprogrammering med PHP og SQL, nogle database stuff. Vi vil tale om lidt af sikkerhed i dag og derefter overgang til en klient side programmering sprog er kendt som JavaScript. Men først, nogle forløsning. Du husker måske, at der på Onsdag Jeg fastsat at skrive en hjemmeside, tog i brugerens input ved en HTML-form og lagres derefter at brugeren indtaste navne, telefon numre, og mobiltelefon luftfartsselskaber i databasen. Og så havde jeg en lille kommando line script skrevet i PHP der skulle gentage over rækkerne i databasen og sende SMS-beskeder. Trods adskillige, flere forsøg, vi fik ikke at arbejderklassen ved udgangen. Så jeg brugt hele denne uge arbejder på denne kode for at få os forbi det punkt hvor vi slap, hvorved alle Jeg fik ved udgangen onsdag var denne tekstbesked fra Margo som jeg kæmpede, efterfulgt af en SMS-besked fra en anden klassekammerat, Du har fået denne David. Efterfulgt af denne ene, vidunderligt opmuntrende. Holdt på igangværende, meget opmuntrende. Jeg fik næsten det indtil then-- og det er den tone, vi endte på onsdag. Og så faktisk måske min favorit, et øjeblik senere, kom ind. Damn Live Stream. Så i dag, vi løse dette med en hurtig se på, hvad jeg har gjort siden. Så alt dette kodeks er til rådighed online fra sidste uges, uge ​​otte, kildekode. Og du vil se, at jeg gik igennem, og jeg faktisk ryddet op tingene en smule. Jeg introducerede et par andre funktioner i en SQL-database. For eksempel, snarere end bare gøre bærer af var char som jeg tror, ​​jeg gjorde på flue i sidste uge. Jeg stedet definerede det som hvad der kaldes en enum. Og nogle af jer måske har set denne som vi udforsket C. Enum er faktisk en funktion af C, hvor man kan opregne en hel bunke af konstanter og tildele dem automatiske værdier, som en, to, tre, fire uden at skulle hårde kodenumre. Så SQL understøtter den samme, idet såfremt du har en database felt, at du kun ønsker at tage på en af ​​finite værdier, kan du bogstaveligt talt angive det som jeg har gjort der for fire populære amerikanske cellphone luftfartsselskaber. Så jeg gjorde det. Og jeg foretaget en række ændringer som godt, hvoraf de vigtigste var at få e-mail arbejde, fordi tilbagekaldelse, at dette program har påberåbt sig som generelt kaldes en mail til SMS gateway, som er lige en fancy måde at sige, at Verizon, og AT & T, og andre folk støtter en server, hvorved, hvis den modtager email, det konverterer det til SMS og sender en tekst besked til en anden persons telefon. Så hvis jeg gjorde det korrekt, her er en ny og forbedret form, der kommer til at tale med ny og forbedret kode, som du kan spille med online. Og det vil forhåbentlig gøre min telefon bip på bare et øjeblik. Så det første, vil jeg skrive mit navn. For det andet, jeg ikke vil at gøre det denne gang. Jeg har tænkt mig at gøre Undersøg Element. Og dette er blot en lille ting, så jeg ikke oprette timers postproduktion arbejde som jeg gjorde sidste gang. Der nu er mit telefonnummer. Jeg vælger Verizon. Og her, lad os slå denne mikrofon her, og sigter dette på min telefon her. Jeg har tænkt mig at klikke på Register, som bør forhåbentlig sætte det ind i databasen. Nu vil jeg gå til kommandolinje program, som tilbagekaldelse blev kaldt dot skråstreg tekst, og krydse dine fingre. Her går vi. [Telefonnummer dings] [Applaus] DAVID MALAN: Så sjovere end denne-- det er sjovt, selvfølgelig, hvis jeg kommer ind i det. Men det er mere sjovt, tænkte jeg, hvis vi skabt en af ​​disse film øjeblikke hvor som noget virkelig slemt er sket i verden, og ligesom alle NSA folks mobiltelefoner begynder at bippe med tekstbeskeder gøre dem opmærksomme på dette faktum. Så jeg troede, vi ville forsøge at genskabe den samme her, hvorved ikke bruger en database, I stedet på forhånd skrev et program, der ligner dette. Dette er en index.php-- og jeg sætter denne kode online som well-- der tilsyneladende bare gør form.php, ved hjælp af en MVC stil paradigme, vi tale om mere detaljeret i problem sæt syv. Denne formular er temmelig simpel. Det kommer til at underkaste sig en fil kaldet here.php via posten. Og det er tilsyneladende vil bede efter et navn og et telefonnummer, og derefter via såkaldte Vælg menu, det er vil give dig mindst fire populære amerikanske cellphone luftfartsselskaber, og derefter give dig mulighed for effektivt tage fremmøde ved at klikke her. Og her, i mellemtiden, vil låne nogle af koden fra sidste gang. Og hvis du bare skimme dette, vil du se, at der er en hel masse fejlkontrol. Men skønheden i slutningen er, at vi ikke skrive til en database i dag. Vi holder det simpelt og bare sende forhåbentlig en SMS-besked via funktion jeg skrev løbet af de seneste par dage opkald Tekst, som er i funktioner. php, hvilket igen er tilgængelig online. Så hvis du gerne vil deltage i dette. Vi kommer ikke til at være lagre noget. Gå til denne URL her i realtid. Må ikke indsende det bare endnu, men lad os se, om vi kan få en af ​​disse film øjeblikke, hvor alles cellphone begynder at bippe, forhåbentlig bare når dette år i modsætning til i 2011 hvor det gik grueligt galt. Og når du går til denne adresse, bør du se en super simpel formular at hvis du har et navn, en mobiltelefon nummer og en mobiltelefon bærer, matcher listen der, gå videre og udfyld formularen. Men du behøver ikke ramt indsende endnu. Formularen kommer til at se sådan ud. Værsgo og skriv dit navn, telefonnummer. OOP, nogen kommer foran kurven. Det er OK. OK, alle har udfyldt formularen. Dette bør arbejde på en telefon, også, hvis du ønsker. Okay, på dine karakterer, få sæt, gå. Hit her. Hvad? Nej. Jeg sværger til Gud, testede jeg dette flere gange i dag. Du fik det? [Indskyde VOICES] DAVID MALAN: OK, brugerfejl måske. Det er to. Det virkede for to ud af en få hundrede, tre, fire. OK, det er godt. Fire ud af fem for Korrekthed hvordan omkring. Så hvad skete der lige? Så formentlig, uden at se din skærme, hvorfor kunne det have errored? Det er nok, at vi var lige forsøger at gøre for mange forbindelser Harvard mailserver alle på gang fra den samme IP-adresse. Jeg er bare gætte da jeg gjorde ikke har den luksus test denne kode med nogle 300 mennesker i forvejen men for nu indser, at at mindst bør har fået jobbet gjort denne gang. Okay, så hvorfor er alt dette mere relevant for, hvad der foregår? Nå først, en hurtig par meddelelser. Så en, hvis du gerne vil tilslutte Chang, og Nick, og andre til frokost denne fredag, gøre RSVP på det sædvanlige URL der. Hvis du tænker på at koncentrere i eller laver en sekundær i CS, uanset om du er en sophomore eller freshman, eller endda junior eller senior på dette punkt og kan stadig klemme i kurserne, indse, at den tekniske skole samler gratis Ben og Jerrys is og rådgivning denne onsdag kort efter klassen 4:00 PM i CS bygning på Maxwell Dworkin. Hvis dette er for hurtig på skærmen, bare gå at cs50.harvard.edu for en link til Facebook-event hvor du kan se flere detaljer. I mellemtiden, jeg troede, jeg ville korrigere en anden ting jeg goofed på onsdag. Viser sig, at Mark ID på Facebook var ikke tre. Det var fire. Slår ud af at han havde mere test konti, end jeg husker. Men hvad dette følte ligesom en lejlighed at gøre, er at trække op en URL som denne. Så det viser sig, at Facebook har en API Application Programming Interface, som er en mekanisme, hvorved man kan anmode om data programmatisk på Facebook og komme tilbage maskine læsbare oplysninger, ikke websider men bare rå tekst, noget kaldet JavaScript Object Notation. Og i virkeligheden, hvis jeg besøger dette URL, og zoome ind, som standard, dette er Mark offentligt tilgængelig information. Og interessant detalje her er bare, at hans ID er faktisk nummer fire, som jeg realiseres, så snart jeg gjorde dette. Du kan gøre dette selv, hvis du kender din Facebook-brugernavn, hvis du har en. Bare skriv det op toppen er der. Og intet af dette er privat. Jeg er bare at gøre dette selv i inkognitotilstand. Så jeg ikke engang logget ind. Og du ser, at jeg tilsyneladende var brugernummer 6.454 på Facebook, som ikke er alt for dårlig i disse dage. Så alligevel, vil du også se yderligere oplysninger der. Og nyttigt aspekt heraf er, at man kunne skrive din egen software, en eller anden måde integrerer data som denne ind i din egen applikation. Du kan give brugere til logge ind på din hjemmeside, ikke bruger deres egne brugerdefinerede brugernavn og kodeord, men måske deres Facebook login og få oplysninger selv om deres venner, hvis de godkender sådan eller lignende. Så bemærk, at CS50, også, har nogle af sine egne API'er én til kursuskatalog data nogle for hugs menuer i spisesalen haller, alle af bygninger og steder på campus, vi har en API for såvel at du kan forespørge på samme måde og få tilbage tekstlige data, som du kan integrere ind i en PHP eller JavaScript, eller endog, om end mindre hyppigt, en C baseret afgangsprojekt. Faktisk forud for den endelige projekt er et par milepæle. Du fik en e-mail fra os den anden dag. Indse, at forslaget skyldes denne kommende mandag. Det er ikke nødvendigvis bindende, men du behøver at modtage din undervisning stipendiater godkendelse før ændringer derefter. Og så videre er en række andre milepæle. Så for at drille dig, også, med nogle muligheder, vi har en masse disse hue pærer. Og nogle af jer nu har nogle af disse i dit kollegieværelse så godt. Og de har også en API. Så husker de binære pærer uger siden, at Dan Bradley og Ansel Duff skabt til os. De brugte en software interface til denne pære, som i øjeblikket er sluttet til strøm og derefter via trådløs er forbundet til en lille ting kaldet Bridge hernede, som en lille router proprietær til denne enhed. Men det viser sig, hvis jeg ved, hvordan man sende HTTP-beskeder, som vi alle gør nu, Jeg kan sende en besked som denne til at denne pære til at slå den til eller fra eller gøre et vilkårligt antal andre operationer på det. Bemærk, at det ikke er få, er det ikke skrive. Der er en anden kaldet put. Der er faktisk et par andre sådanne verber. Men bemærk at der er en sti der, slash API, skråstreg ny udvikler, slash lys, skråstreg én, skråstreg stat. Det er tilsyneladende kun den sti, at selskabet, Philips, besluttet, at du nødt til at slå med en HTTP-anmodning hvis du ønsker at ændre tilstanden af pæren ved hjælp af HTTP 1.1. Så opdager den tomme linje. Og så endelig, hvad der ligner form af et array af en slags, dette igen kommer til at hedde JavaScript Object Notation, eller Jason. Og hvad du ser her, er, at der er tre Nøgleværdiparrene. Én nøgle kaldes på. Og dens værdi tilsyneladende kommer til at være sandt. Lysstyrken er 128, som er en slags int. Og derefter overgangen tid er nul, hvilket er åbenbart hvor lang tid det kommer til at tage at slå denne ting på. Så lige nu er denne pære er slukket. Men hvis jeg gør præcis denne-- lade mig gå til en lille snyde ark at Dan oprettet i advance-- og jeg har tænkt mig at gå videre og kopiere følgende kommando. Curl, som nogle af jer måske har forstået på CS50 Diskuter er et hjælpeprogram ligesom Telnet sådan at du kan simulere HTTP-anmodninger, specifikt sætter. Jeg kan sende disse data, specifikt, hvad vi lige oplevede for et øjeblik siden specifikt til denne webadresse herovre. Og derefter Curl kommer til at håndtere alle de nødvendige headers og parsing der af. Så alt hvad jeg skal gøre, er at kopiere denne ind et terminal vindue og derefter trykke Enter. Og pæren går. Og det er alt sammen går igennem min computer trådløst måde ned til broen, som Derefter taler til denne pære. Jeg kan gøre noget andet. Jeg kan gøre denne ting gå rød f.eks. Jeg kan for eksempel gøre denne ting gå grøn. Jeg kan gøre det gå blå. Og mærke i hver af disse forekomster, alle, at jeg ændrer er den såkaldte nuance værdi faktisk give det lidt farve. Så lad mig indsætte denne ene i så godt. Nu er det blå. Og du kan gøre endnu mere avanceret ting where-- lad os gå til grøn. Og jeg kunne gøre dette af kursus med min egen kode. Men selv API selv understøtter funky operationer som dette, vil der nu gider os for de næste 30 sekunder. Så det er en forsmag på, hvad du måske gøre med et API, denne ene involverer pærer. Bemærk, at CS50 har et par par af Google Glass, hvis du vil gerne at tackle noget sammen disse linjer, Arduino Uno, som er bittesmå computere, i det væsentlige, på en lille printplade at du kan tilslutte ledninger og andet til og faktisk kontrol Deres virkelige verden miljø. Og så er der et par af nye legetøj, som vi har. Denne ene bogstaveligt talt bare ankom anden dag med posten, en Myo armbind. Og jeg troede, at det er en måde at få dig ophidset om projekter at du kan bruge med denne hardware ville være at spille dette kort klip at de bruger til at drille folk at vi nu lever i fremtiden. [Musikken afspilles] DAVID MALAN: Så på blot et par uger, du også kan være så cool på CS50 fair. Anden enhed, som vi har en masse, at vi er glade for at låne ud til projekter kaldes en motion controller. Dette er en lille USB-enhed du opretter forbindelse til en computer, giver dig mulighed for at interagere med din bærbare computer, Mac eller PC, som om du havde ligesom en Xbox Kinect og faktisk gøre fysiske bevægelser meget ligesom vi ser i dette vision for fremtiden. [Musikken afspilles] DAVID MALAN: Så selvom du har ingen idé om, hvordan sådan noget kunne muligvis være opfundet eller arbejde på hardware-niveau, uanset. Selv efter blot et par måneder af CS50, og en forståelse af programmering mere generelt, og webprogrammering mere nylig, og så også API'er, og HTTP, du har adgang via software API'er, hvis du ønsker at låne en af ​​disse enheder til rent faktisk at tale med det og ikke behøver at bekymre sig om den underliggende implementering detaljer, som er helt overensstemmelse med denne opfattelse af lagdeling en abstraktion, som vi har set over hele semesteret. Så også i weekenden, så et par stykker af nyheder. Gå først, gå til seminarer, hvis du gerne vil lære noget mere på et vilkårligt antal emner. Se URL'en der. Og denne ene blev sendt til mig ved Chang, hvem du kender, hvem der udskriver vores hær af elefanter. Og det var en overskrift som følger. Jeg er rædselsslagen for mit nye TV. Hvorfor jeg er bange for at slå denne ting på og du ville være for. Så vi er nu på det pege i semesteret, også, hvor selv hvis du har den mindste forståelse hvordan nettet fungerer, og HTTP, og sikkerhed, ting som dette bør begynde at fange din interesse. Men også, vil du forstå hvorvidt disse ting er eller ikke egentlige trusler. Så jeg tog et par uddrag fra denne artikel her. Og historien er som følger. Jeg er nu ejer af en ny Smart TV, som lover at levere streaming multimedieindhold, spil, app, sociale medier og internet browsing, oh og TV også. Det eneste problem er, at jeg nu bange for at bruge det, siger forfatteren. Du ville være, også, hvis du læser igennem 46 side privacy policy til dit TV. Mængden af ​​data denne ting indsamler er overvældende. Den logger hvor, hvornår, hvordan og hvor længe du bruger TV'et. Det sætter tracking cookies, som vi har diskuteret, og beacons designet at opdage, når du har set bestemt indhold eller en særlig e-mail hvis du ønsker at tjekke e-mail på dit TV. Den registrerer de programmer, du bruge de websteder, du besøger, og hvordan du interagerer med indhold, gør alt dette via din Smart TV. Det er også, creepier yet-- det er min addition-- har et indbygget kamera med ansigtsgenkendelse. Formålet er at give gestus kontrol til TV og gøre det muligt for dig at logge på personlig konto ved hjælp af dit ansigt. På opsiden, billederne er gemt på tv i stedet for uploadet til en corporate server. På negativsiden internettet forbindelse gør hele TV sårbare over for hackere, der have demonstreret evne at tage fuld kontrol over maskinen. Mere bekymrende, som om det ikke var smart nok, er mikrofonen. TV kan prale af en stemme feature genkendelse der tillader seerne til at styre skærmen med stemmekommandoer. Men tjenesten leveres med en temmelig ildevarslende advarsel. Vær opmærksom på, at hvis dine talte ord omfatter personlige eller andre følsomme information, at information vil være blandt de indsamlede data og overføres til en tredjepart. Fik det? Må ikke sige personlige eller følsomme kram foran dit TV. Så dette er faktisk for alvor. Og det er svært ikke at se, hvis du gå til Best Buy eller lignende til TV disse dage. De er alle smart i en eller anden måde. Og de får smartere og creepier. Og de er simpelthen at indsamle data på måder, som vi har talt om og derefter uploade den via HTTP eller en anden protokol til nogle server. Så dette var en sjov artiklen i dette online website her, som talte om en særlig fejl eller fejlagtige kode at vi faktisk kan binde i sidste uges diskussion. Så denne overskrift var som følger historien går her, Josh Breckman arbejdede for en selskab, der landede en kontrakt at udvikle et content management system eller CMS som de kaldes, for en temmelig stor regering hjemmeside. Meget af den involverede projekt udvikle et content management system så medarbejderne ville være stand til at opbygge og vedligeholde den stadigt skiftende indhold til deres site. Tingene gik temmelig godt for et par dage efter går live. Men på dag seks, tingene gik ikke så godt. Alt indhold på webstedet havde helt forsvundet. Og alle sider førte til standard, angiv indhold webside. Hovsa. Josh blev kaldt ind til undersøge og bemærket at en særlig generende eksterne IP-adresse havde gået i og udgår alle indholdet på systemet. IP-adressen ikke hørte til nogle oversøiske hacker bøjet på at ødelægge hjælpsom offentlig information. Det besluttede at googlebot.com, Googles helt egen web-crawling edderkop. Hovsa. Efter en smule forskning og scrambling rundt for at finde en noncorrupt backup, Josh fandt problemet. En bruger havde kopieret og indsat noget indhold fra en side til en anden, herunder en Edit Hyperlink at redigere indholdet på siden. Normalt ville dette ikke være et spørgsmål, da en ekstern bruger ville nødt til at indtaste et navn og en adgangskode, men CMS authentication system, login-system, ikke tager hensyn til sofistikerede hacking teknikker til Google Spider. Hovsa. Da det viser sig, Google Spider bruger ikke cookies, hvilket betyder, at det kan nemt omgå en check på er logget på cookie sæt at være falsk. Det betyder heller ikke opmærksomme på JavaScript, som normalt ville tilskynde og omdirigere brugere der er ikke logget ind. Det betyder dog følge hvert hyperlink på hver side, det finder, herunder dem med Slet side i titlen. Hovsa. Så hvad betyder det i mere tekniske men temmelig tilgængelige vilkår? Det betyder blot, at hele deres hjemmeside, de havde URL'er ikke ulig denne, der du kan se i problem sæt syv. Recall i problem sæt syv eller kender i problemet sæt syv at du er udfordret, bl.a. at sælge aktier på vegne af brugere. Men gennemførelsen af ​​denne funktion ved måde af får via hyperlinks i dit bruger interface, sandsynligvis ikke den smarteste idé fordi hvis dit websted er en eller anden måde tilgængelig enten af ​​et menneske hvem der klikker rundt eller købe en bot ligesom Googles eller en Spider som de kaldes, det er bare gennemgang af internettet forsøger at indeksere internettet som en søgemaskine, de kunne meget nemt hit via få denne form for URL. Og det er funktionelt svarende til i dette tilfælde, sælge alle aktier i Google. Nu ærligt, det er helt asinine at CMS Brugte JavaScript og cookies at gennemføre sin login-system og ikke at gøre det server side, som du fyre gøre og vil i pset 7-- der er en login.php file-- altid, altid, altid sikkerhed bør være udført på serveren side, ikke på klientsiden, fordi, som det artikel antyder, og du kan selv se på et tidspunkt, er det trivielt for en bruger, god eller dårlig, bare slukke JavaScript for ikke at nævne cookies. Så det er dit daglige WTF. Der er en mere, som er bare lidt skræmmende, så jeg vil hvis nævne det kun som et liv lektion. Når du bruger et program kaldet ligesom Snapchat eller lignende der siger disse fotos kun vare fem sekunder, ti sekunder eller whatnot. De er flygtig Det er absolut ikke tilfældet. Ligesom der er ingen måde, digitalt, at gennemføre en form for video, eller billede, eller tekstmæssige deler sådan at modtageren i den anden ende kan ikke en eller anden måde gemme dataene. I den mest naive måde nogen kunne tage deres telefon. Og de har en 10 anden vindue mens du kigger på nogle snap at bare tage et andet telefonnummer og fotografere det, naturligvis. Så du kan bevare noget digitalt på den måde. Nogle af jer ved, hvordan man tager screenshots på din telefon. I virkeligheden, hvis du ikke kender denne, indse, at mindst Snapchat, og jeg tror, ​​andre applikationer i disse dage, i det mindste fortælle dig, hvis modtageren har faktisk taget et screenshot af dit billede. Men værre endnu, dette var snappening, som nogen opfandt det for nylig, hvor nogle 100.000 snaps var blevet frigivet i, hvad der kaldes en torrent-fil på forskellige hjemmesider i sidste ende. Og disse indeholdt en hel masse af private beskeder og indlæg. Det viser sig, de fleste af dem godartet, så ikke hvad man kunne forvente. Men fordi folk havde brugt en tredjeparts websted, logge ind med deres Snapchat brugernavn og adgangskode, og derefter besparelse alle deres snaps på denne tredjeparts websted. Og det var denne tredjemand hjemmeside, der blev hacket, som netop betød nogen regnet ud, hvordan at få alle 100.000 plus på disse billeder ind i deres egen harddisk for efterfølgende deling. Helt ærligt, også her, det er sortering af tåbelige at Snapchat gennemføres på en sådan måde, at en tredjepart kan sortere af intercept data, og at det ikke er bundet til din eget program, der kører på telefonen. Men også her er klar over, at disse tingene skal ikke fange dig som en overraskelse, eller i det mindste der bør være et liv lektion i her. Hvis du gerne vil den tekniske detaljer, gå til denne URL der der er i dagens dias. Okay, spørgsmål om nutidens liv lektioner i CS? Slå det fra. Noget overhovedet? Noget overhovedet? Jeg har fået en masse af folk tjekker deres Snapchat eller noget nu. Okay, så SQL, Structured Query Language. Lad os wrap dette. Og også, selvom vi bare skrabe overfladen af ​​denne sprog, giver vi dig nok af sprog i form af pset 7 så du kan løse nogle temmelig fælles funktionalitet. Men indse der er et par ting, vi ikke kræver af dig, men de kommer til at være vigtigt komme afgangsprojekter og helt sikkert komme gøre faktiske hjemmesider med faktiske brugere er dette design beslutning. Det viser sig, at i en MySQL-database, du har klaser af valg ligesom datatyperne for dine kolonner og andre ting, men du har også valget af en såkaldt opbevaring motor til alle dine data, slags filsystemet, hvis du er fortrolig, for alle dine data. Hvilket format er det i sidste ende er gemt i? Og den mest almindelige, måske, har været MyISAM og InnoDB, fagudtryk at vi interesserer os kun i det omfang, at man har og man ikke har følgende funktion. Antag, at du har en lille dorm køleskab. Og formoder, at du og din roommate, der deler dette køleskab, er virkelig glad for at sige mælk. Og dette er i virkeligheden, hvordan Historien blev fortalt mig vej tilbage i dag, da jeg tog et kursus kaldet CS 161 Operating Systems, som ligeledes udforsker dette emne. Så du har fået denne køleskab. Du er ude af mælk. Og du kommer hjem, din værelseskammerat stadig på klasse eller hvad, og du beslutter jeg har tænkt mig at gå ud og få noget mælk. Så du lukker køleskabet, lockup kollegieværelse, gå på tværs af gaden til CVS eller hvor, og få i kø for at købe nogle mælk. I mellemtiden, din værelseskammerat kommer hjem fra klassen, kommer ind i kollegieværelse, åbner køleskabet, også indser ooph, vi er ude af mælk. Så han eller hun lukker køleskab og så sker at gå til den anden CVS, hvilket sker for at være en blok væk fra de andre CVS på pladsen, og får på linje der for at få nogle mælk. Nu, selvfølgelig, et par minutter senere, kan du både få tilbage, og værst af alle mulige resultater, der er sket. Begge du har mælk. Og du ikke rigtig som mælk så meget. Så en af ​​dem er lige vil sur på et tidspunkt. Så nu har du en stor mængde af mælk i køleskabet alt fordi hvorfor? [Uhørligt] DAVID MALAN: Ja, du gjorde ikke anden måde kommunikere med hinanden at du var at få mælk. Så på enkleste måder i den menneskelige verden, hvordan kan du undgå denne tåbelige scenario sker sådan at du kun ender med en. Tekst dem, ja god. Men hvordan ellers? Post-it noter. DAVID MALAN: A Post-it note. Enhver form for kommunikation der fortæller din roommate ikke gå ind i køleskabet for mælk. Jeg har tænkt mig at gå genpåfyldning på min egen. Så du en eller anden måde har brug for at låse denne ressource. Så vi kan gøre denne-- vi kan slags ødelægge historien og forvandles til en CS historie hvorved tænke på dette som ligesom en variable, som lagrer en vis værdi. Og lige nu er det værdien af ​​mælk er nul, som du ikke ønsker din roommate at inspicere den pågældende variabel og derefter træffe en beslutning ham eller hende selv baseret på tilstanden af ​​denne variabel hvis du er i færd med at at ændre status for denne variabel. Så en af ​​de strækninger i SQL, som vi give dig i pset 7 specifikation er dette en her. Og vi bruger ikke en enorm mængde tid på at tale om det. Men det viser sig, hvis du forsøger at købe nogle aktier i CS50 finans at du allerede har nogle aktier, du ønsker at være i stand til at gøre en række af ting med det samme sammen. Du ønsker at være i stand til effektivt, på et højt niveau, tjek okay, hvis jeg vil at købe flere aktier i Free, penny stock vi taler om i spec, Jeg ønsker først at kontrollere hvor mange aktier jeg har. Og formoder, det er fem. Og formoder jeg ønsker at købe 10 mere, jeg i sidste ende ønsker at have 15 aktier i bestanden. Så jeg er nødt til at stille to spørgsmål. Hvad er status for den variable? Hvad er status for rækken? Hvor mange aktier har jeg i øjeblikket? Så du ønsker at gå videre og opdatere den. Så det er den analoge til den mælk i, at du kontrollerer rækken, og så du ønsker at opdatere den fordi hvis du ønsker at købe 10 aksjer, du ikke ønsker at ændre rækken til 10, du ønsker at ændre det til 5 plus 10 eller, selvfølgelig, 15. Denne linje kode sikrer, at disse to konceptuelle ideer ske sammen eller slet ikke. Ingen, heller ikke nogle andre bruger der har logget ind på samme hjemmeside, eller anden måde kan afbryde kontrol af rækken og ajourføring af rækken, den vælge og opdateringen, hvis du vil. Og syntaksen er ikke super oplagt, men denne ene linje, der længe er det, sikrer, at de to operationer kontrollere variabel eller kontrollere rækken og opdatere rækken ske atomically. Oh her vi gå igen. Sms på min telefon. Så lad os gøre dette til en lidt mere konkret. Antag, at du ikke er gennemførelse af et køleskab, og du er ikke at gennemføre Pset 7, men en faktisk bank, eller en ATM, en Automated Teller Maskine, hvor du eller anden måde vil være i stand til at give brugere at overføre penge fra en konto til en anden. OK, hænge på. Jeg har tænkt mig at slå det nu, tak. Så vi ønsker at flytte penge fra en konto nummer i en anden konto antal, specifikt 100 dollars. Så dette er sådan en vilkårlig eksempel, hvor du, ATM, måske ønsker at udføre to SQL forespørgsler, trække fra en konto, og tilføje til den anden konto. Men du ønsker at sikre, at disse to linjer både ske eller slet ikke. Du ønsker ikke noget blive afbrudt. Du behøver ikke nogle smarte skidt fyr en eller anden måde står på Bank of America med to pengeautomater foran ham og på en måde slags skrive i kommandoer på samme tid, forhåbentlig forsøger at fratrække 200 dollars i stedet på $ 100 og kun have $ 100 krediteret. Kort sagt, du ønsker, at dette opfører sig præcis som du forventer. Og den måde, du gør dette i SQL database du pak det i, hvad der er kaldes en transaktion. Bogstaveligt talt i SQL, kan du ringe CS50 s søgefunktion med citat citat slut begyndelse transaktion. Derefter kan du udføre et vilkårligt antal efterfølgende SQL-forespørgsler, men ingen af ​​dem tage Virkning på databasen indtil du kalder query citat Citat slut begå, hvis igen ved hjælp af PHP. Og på denne måde kan du sikre, at selvom du har 1.000 brugere alle ramme din database på samme tid, SQL vil love, at disse to forespørgsler vil være implementeret en ret efter den anden. Så du ikke ender med overskud af mælk eller det forkerte beløb, i sidste ende, penge. Så holde dette i tankerne, ikke så meget for pset 7 men for de endelige projekter hvis du rent faktisk forsøger at flytte data rundt på tværs af tabeller som du måske her. Men måske endnu enklere og mere vanskeligt at forstå med et eksempel er dette en her. Og nogen emailet os om dette blot den anden dag da han så noget lignende online. Så vidt jeg ved, den pin-systemet er ikke sårbare over for dette angreb. Og jeg har ingen idé om det overhovedet anvendelser SQL-databasen under motorhjelmen. Men lad os bruge det til skyld diskussion. Her er den skærm, der Harvard folk har en tendens til at se, når du logger ind med deres Harvard ID-nummer og deres pin. Og formoder at stiften systemet var implementeret i PHP og med en MySQL database, koden at nogen kunne have skriftlige år siden kunne se sådan ud. Først erklære en variabel kaldet brugernavn. Og bare få det fra POST superglobal. Så får en anden variabel kaldet password og gøre det samme. Og så bare eksekvere denne lange forespørgsel her, Vælg stjerne fra brugerne, hvor brugernavn lig sådan og sådan og adgangskode lig sådan og sådan. Bemærk, at krøllede seler jeg har brugt her bare betyder for PHP, gå fremad og erstatning værdien af ​​de to variabler lige der. De er ikke strengt nødvendigt, men de har tendens til at undgå subtile syntaksfejl. Så dette ser helt korrekt ved første øjekast. Og det er. Du kunne gennemføre pin system på denne måde. Men formoder, at en super smart og ondsindet student input dette som hans eller hendes pin. Så jeg har fjernet kuglen skilte her i mock up, og jeg har faktisk afsløret hvad han eller hun kan være at skrive. Og det er lidt mærkeligt. Men hvad springer ud på dig på potentielt bekymrende om brugerens input, selv hvis du ikke har nogen idé om, hvad en SQL-injektion angreb betyder. Hvorfor dette ser lidt fishy? Hvad er det? [Uhørligt] DAVID MALAN: Den eller er lidt mistænksom. I virkeligheden, det er et nøgleord fra SQL. Så det lover ikke godt. Den omstændighed, at der er alle disse enkelte anførselstegn there-- faktisk en af ​​de letteste måder at bryde nogle databaser er ved at skrive et navn som O'Reilly der har en apostrof i det fordi hvis menneske, der skrev koden bag kulisserne tager ikke højde for, at der kan være enkelte citater i en brugers input, og han eller hun bruger enlige citater i deres kode, dårlige ting kan ske. Faktisk værre endnu, overveje dette. Hvis dette var igen koden at en person på Harvard år siden skrev til stiften systemet, mærke, hvad der er ved at få substitueret om brugernavn og adgangskode hvis brugeren skriver i igen skroob som deres brugernavn og derefter en, to, tre, fire, fem, citat eller citat Citat slut en er lig citere en. Og læg mærke til, hvad der er nøglen her er brugeren ikke har startede deres adgangskode eller deres pin med et citat. Og de der ikke er afsluttet den med et citat, fordi han eller hun antager, at hvis programmør var ikke så skarp, de vil have dem, enlige citater i deres kode. Så her er koden. Og substitution, måske nu ske, er dette. Og jeg har understreget, hvad brugeren har indtastet. Så før, efter. Og læg mærke til, hvad der er mildt bekymrende nu om den højre halvdel af denne SQL-kode? Det er lidt mere kompliceret, ganske vist, end de forespørgsler, vi har set. Men dette kan ikke muligvis være en god ting, hvis du er siger vælg stjerne, som er at vælge alt fra brugerens tabel hvor brugernavn er lig skroob og kodeord lig med en, to, tre, fire, fem eller et lig én. Hvad er den logiske konsekvenser af denne sidste bestemmelse formentlig? Det er bare altid sandt. Og fordi vi har en slags gættet eller regnet ud ved trial and error at programmøren, der skrev denne kode ikke foregribe et menneske eller dårligt menneske skrive i enkelte anførselstegn så godt, vi kan syntaktisk fuldføre SQL-forespørgsel med noget meningsløse men noget der er syntaktisk forkert der altid evalueres til sand. Så hvis denne kode anvendes til at besvare spørgsmålet sandt eller falsk, bør denne bruger tillades at passere, det Svaret er altid tilsyneladende vil til at være sandt, fordi det altid vil at vælge noget fra databasen fordi man jo altid lig én. Så hvad er løsningen? Godt i pset 7, vi faktisk undgå dette alle sammen. Vi giver dig en søgefunktion, og vi opfordre dig til at bruge spørgsmålstegn som pladsholdere, der ligner i ånden til printf s% s, men hvad er nøglen om spørgsmålstegnene her er, hvis du rent faktisk læst igennem functions.php, hvor vores query funktion er gennemført, disse spørgsmålstegn er undsluppet, hvorved noget potentielt farligt som en apostrof er slået i en flygtet ét tilbud. Så dette er, hvad der er virkelig sker, hvis du bruge CS50 forespørgsel funktion eller en række af tredjeparts frie biblioteker, gøre det samme. Betyder ikke noget i denne sag, i grøn, hvis brugeren har indtastet en apostrof fordi forespørgslen funktion, som vi skrev er kommer til at tilføje backslashes før en sådan farlig citat. Så dette er ikke i Faktisk kommer til at være legit. Det er ligesom at skrive i en vanvittig leder adgangskode, der er, selvfølgelig, vil ikke at være skroob s egentlige adgangskode. Så takeaway for CS50 er én, absolut altid bruge noget ligesom CS50 forespørgsel funktion eller den underliggende bibliotek, hvilket sker for at blive kaldt BOB. Men aldrig, aldrig, aldrig gøre kode som denne uden at flygte eller skrubbe som de siger dine input. Og du vil på et tidspunkt sandsynligvis komme på tværs af nogle hjemmeside som denne. Faktisk ser det ud til at være tilfældet ligesom i lufthavne og hoteller i steder hvor de har gratis Wi-Fi adgang, som du er nødt til at logge på, disse websteder er altid grueligt gennemføres. Og så en slags sjov derhjemme motion, ikke til skadelige formål eller mere af en sjov på vejen motion, er at bare skrive en apostrof, et enkelt tilbud, til en form på nogle hjemmeside og se hvad der sker. Og hvis serveren går ned eller giver du en slags fejlmeddelelse, kan det meget vel være, at nogen har ikke forudset dette. Og så skal du advare korrekte myndigheder og fortsætte længere. Så nu jer vil forhåbentlig forstå lidt mere nørd humor her. [Latter] DAVID MALAN: Du ved du er en nørd. For de næste mange år, vil du huske der lidt Bobby Tables er på grund af denne tegneserie her. Så holder det i tankerne, som vi kontekst skifte en sidste gang i dag til JavaScript. Vi har brugt relativt lidt tid på syntaksen i PHP fordi det er faktisk super ligner C. Og pænt nok, JavaScript også er super lig C syntaks såvel som vi vil se i bare et øjeblik, og da vi får se senere i denne uge i særdeleshed. Hvad du kan gøre med dette sprog, Men så meget desto mere magtfulde, især med API. Men først en hurtig rundvisning. Så man, i JavaScript, der er ingen vigtigste funktion, hvilket er rart. Som med PHP, kan du bare skrive kode. Betingelser ligne dette. Og boolske udtryk måske se sådan ud eller lignende dette. Skifter eksisterer, og de kunne se sådan ud. Fire loops se sådan ud. Mens loops se sådan ud. Gør whiles se sådan ud. Og derefter arrays ligner dette er meget lig PHP. Men bemærk, at det i JavaScript dig erklære en variabel ikke med en dollar underskrive, ikke med en datatype men bogstaveligt ved at sige var for variabel før det. Det er for løst maskinskrevet i, at det har typer, men du behøver ikke eksplicit erklære dem. Og så en snor, for Eksempelvis kan se som dette, at streng blive kaldt s i dette tilfælde. Og derefter et objekt. Og disse vil vi se mere inden længe. Og et objekt er måske en af ​​de ses hyppigst datastrukturer i en JavaScript-baseret program, fordi det giver du at knytte vilkårlige Nøgleværdiparrene bare ligesom PHP associative arrays og ligesom din egen hashtabel eller prøve så vi implementeret et par uger tilbage. Så lad os faktisk se, hvad vi kan gøre med JavaScript. Og i særdeleshed, er det et vaskeri liste over funktioner at browsere har at tillade os at tilslutte JavaScript i et websted på følgende måde. JavaScript bruges ofte som en client side scripting sprog. Det er ikke kompileret. Det også bliver fortolket. Men i modsætning til PHP, som har kørt på serveren, i web-server, eller dybt inde i den klienter, JavaScript er anderledes, idet den normalt kører i browseren. Så enhver JavaScript-kode, du begynde at skrive for pset 8 eller din endelige projekt, eller i den virkelige verden er generelt går skal gemmes på serveren, absolut i en prik HTML eller dot JS til JavaScript-fil. Men browseren går at downloade, at JavaScript kode til din egen udgave af Chrome, eller IE eller Firefox, eller hvad. Og koden er faktisk kommer til at få henrettet indersiden af ​​din egen browser. Blot for at gøre dette mere reel, lad os se det i konkret form. Vi har ingen idé om, hvad denne kode gør uden egentlig at læse igennem den. Men lad mig gå til Facebook.com uden at logge ind. Lad mig gå til at inspicere Element og gå til, lad os sige, Netværk og genindlæse siden. Og vi vil see-- lad mig skifte Reload den Side at få alle de anmodninger til nye. Og den allerførste fil jeg ser, er CSS, CSS. Her er den første JavaScript-fil, og jeg har ingen idé om, hvad det betyder, men her er nogle af JavaScript-koden der driver Facebook. Det er ikke engang virkelig, at afslører at zoome ind. Det er stadig lige så meningsløst. Men du vil se endnu dernede, er der endnu mere af disse JavaScript-filer. Hovsa. Det er en ping. Lad os gå lidt ned yderligere, endvidere yderligere. Der er én. Der er én. Der er én. Så selvom Facebook, bag scener, der er skrevet i en del i PHP og Facebooks egen version heraf, der er en enorm mængde af JavaScript. Faktisk kan enhver af de chatter du gør på Facebook, nogen af ​​de inline tidslinje opdateringer at ske i real tid, alt dette drives af JavaScript. Ja? PUBLIKUM: Jeg er ikke sikker hvis dette er Facebook, men jeg troede, at Facebook er udviklet deres eget in-house kodesprog? DAVID MALAN: De gjorde. Så det er derfor, jeg siger en varians PHP kaldet Hip Hop, at de faktisk tilføjet funktioner til sådan, at når Mark først implementeret Facebook, det var skrevet i PHP. Og den slags er forblevet slags forenden sprog at de bruger for meget af deres kodning, men det har ikke været et sprog, der er skalerer særlig godt til milliarder mennesker. Og så har de tilføjet deres egen forbedringer bag kulisserne. Og de bruge et vilkårligt antal andre sprog for forskellige dele af deres infrastruktur. Så ja, det er en varians hvad vi nu kender som PHP. Så lad os tage et kig på et par eksempler af, hvordan vi kan bruge JavaScript her. I dagens kildekode, har vi en masse filer, hvoraf den første, lad os kaldet DOM nul. Så DOM nul ser ud som følger. Lad mig gå ind i denne mappe og åbne op domzero.html, hvis top har en doc typen erklæring siger her kommer HTML 5. Og nu her er et HTML-tag. Her er hovedet tag. Og her er hvad der er nyt i dag. Vi har nu et script-tag indersiden af ​​hovedet på siden. Og denne tilsyneladende gør meget lidt, men varsel at jeg har defineret en script, et JavaScript. Og som en side, eftersom dette er en udbredt misforståelse, JavaScript har absolut intet at gøre med Java, sproget at nogle af jer måske har lært i APCS. Det var mere af en markedsføringstilladelse ting end noget andet, Ridning frakkeskøderne af Java år siden. Men JavaScript, intet at gøre med Java, bare på samme måde, og irriterende, forvirrende navngivet. Så her er, hvordan du erklærer en funktion i JavaScript, bogstaveligt sige funktion, derefter navnet på den funktion, så nogen argumenter, det kan tage, ligesom i PHP. Slår ud i JavaScript, en af ​​de mest irriterende funktioner, der findes, er Alert. Dette er et lille vindue, vil poppe op og advare dig til nogle stykke information. Det er generelt ildeset. Men vi vil bruge det som vores første øvelse her. Læg mærke til et par funktioner i JavaScript. Enkelte anførselstegn og dobbelte anførselstegn faktisk ikke noget længere. Enlige citater og dobbelt citater kan ombyttes, hvorimod i C, er du nødt til at bruge dobbelte anførselstegn i strenge, og du har to single citater for tegn. I JavaScript verden, mange mennesker, de fleste mennesker Brug enkelt anførselstegn omkring strygere bare fordi det er en stilistisk ting. Men hvad er plus operatør her, som vi ikke har set før? PUBLIKUM: Sammenkædning. DAVID MALAN: Sammenkædning. Så C ikke engang har dette. PHP har dot operatør, som gør dette. JavaScript har plus operatør, som forvirrende er ligesom Java. Nu, hvad der foregår her? Så her er, hvor en grundlæggende forståelse af det billede vi kastede op et par dage siden kommer i spil. Husk, når vi havde en enkel version af et HTML page-- det bare sagde hej verden. Og så trak vi et træ til højre, som havde en flok af rektangler og linjer forbinde dem ligesom et stamtræ. Så det er det såkaldte DOM eller Document Object Model. Og det viser sig, at du kan få adgang rektangler i det træ med syntaks som følgende. Du bogstaveligt talt sige dokument, som er en særlig global variabel i et JavaScript program, der har en funktion forbundet med det, at du kan få adgang til ligner en struct, men du simpelthen sige prik og derefter funktionens navn, få element af ID. Elementet jeg ønsker at få, er tilsyneladende citerer citat slut navn. Og så jeg ønsker at få sin værdi. Nu får vi foran os selv. Jeg er ikke engang sikker på, hvad alt dette handler om. Lad os hurtigt frem til HTML på den side, som er super enkel. Bemærk, at jeg har defineret En form hernede. Bemærk, at jeg har givet det en unik ID, selvom vi ikke har brugt denne attribut før. Men det findes i HTML. Du kan entydigt identificere nogle luns af HTML med en identifikator som denne. Notice nu denne-- viser sig HTML støtter, pr at vasketøj liste for et øjeblik siden, en hel bundt af hændelseshandlere. Og denne begivenhed handleren siger på send. På brugerens indsendelse af dette formularen, ring følgende kode. Og den kode, der kommer at blive kaldt eller henrettes er netop dette, den græske funktion efterfulgt af tilbagevenden falsk. Alt andet burde være temmelig velkendt. Her er et input af typen tekst, hvis ID, i dette tilfælde, vil være navn. Vi har ikke en faktiske navn attribut denne time-- og en indsende knap. Så den side ligner denne. Og den resulterende adfærd, du vil se, ligner dette. Siden, den lokale værter siger goddag David, næppe en æstetisk måde at hilse en bruger. Men hvad der rent faktisk sker? Nå, overveje, hvad det er. Dette er et tekstfelt. Og ifølge den HTML her, jeg har givet det en entydig identifikator kaldet citat citat slut navn. I mellemtiden, jeg har sagt, når brugeren sender denne formular ved at trykke på Enter eller klikke på Submit knap, kalder funktionen kaldet Greet og derefter vende tilbage Falsk. Lad os betragte dem i omvendt rækkefølge. Læg mærke til, når jeg klikker på Send, den URL for siden ændres ikke. Browseren ikon ikke starte med at dreje. Jeg ikke gå nogen steder, og det er bogstaveligt talt, fordi jeg sagde tilbage Falsk. Return false kortslutninger eller stop standard opførsel af en formular. Så derefter efterlader os med dette et sidste spørgsmål. Hvad betyder Greet gøre? Nå, Hils tilsyneladende kalder en funktion kaldet Alert, passerer en lang argument, der er resultatet af at sammenkæde sammen en bundt af delstrenge, hej komma plads, så uanset dette afkast. Så dokument er som en global variabel til roden af ​​det træ, kalde en særlig funktion, ellers nu kendt som metode. En funktion, der er inde i en variabel er kaldes en metode i stedet for en funktion. Så få element af ID. Hvad element gør du ønsker at komme med sit ID? Citat citat slut navn og så specifikt værdi. Så med andre ord, at koden simpelthen finder tekstfeltet hvis ID er navn og derefter får sin værdi. Så hvis jeg skulle ændre dette og sige Davin i stedet for David, og klik på Send, vi nu have en hilsen til Davin. Okay, så alt fint og godt. Men lad os se om vi kan gøre dette lidt renere da bare skrive kode som dette er generelt vil blive ildeset. Dette kommer til at se mere skræmmende. Men hvad er det første forskel, at du noterer her i denne version udover nominalismer til DOM én? Hvad strukturelt ser anderledes om dette versus den anden? Ja? PUBLIKUM: Er formularen på toppen af ​​scriptet nu? DAVID MALAN: Ja, formen er på toppen af scriptet for nogle nysgerrige årsag. Så det er den første ting der springer ud på mig, også. Og heldigvis mindste denne del er identiske. Så den eneste, der synes at være anderledes er dette. Så her er hvad der er pæne om JavaScript 2. Og det gør det svært at forstå ved første øjekast, især for de endelige projekter, hvis du kigger på prøve kode online, men det kan koges ned til nogle grundlæggende syntaktiske funktioner. Også her er, at global variabel dokument. Her igen er den metode eller funktion der siger få elementet efter ID. Denne gang vil jeg få ID kaldet demo. Hvor er det? Det er tilsyneladende ret her, selve formularen. Og nu se, at der tilsyneladende hvis jeg komme tilbage, at node fra det træ, betegner form selv, ikke et tekstfelt, det viser sig, at form, node eller rektangel fra træet, har, hvad vi kalder en ejendom, meget, meget, meget ens i ånden til en struct i C. Det er bare en data medlem på indersiden af ​​dette rektangel. Så jeg har fået den form, her, og jeg vedhæfte, eller jeg tildele til sin On Indsend handleren eller snarere på Indsend ejendom følgende funktion. Og det er langt, den skøreste ting hidtil syntaktisk. Det viser sig i JavaScript og i PHP, og helt ærligt for den sags skyld i C, selv om vi ikke gør det, kan du tilføje navnløs, anonym, eller AKA lambda funktioner, der ikke har et navn men kan kaldes alligevel. Så hvad jeg gør her, er jeg tildele dette på Send ejendom, som er inde i denne knude i mit DOM-træet, en funktion, funktion pointer, hvis du vil. Denne funktion har ingen navn, men det betyder ikke noget, fordi vi vil se i et øjeblik, hvordan man kalde det. Når denne funktion kaldes, denne kode bliver henrettet, så false returneres ligesom før. Men bemærk, hvad jeg har gjort. På dette punkt i historie, jeg har en form. Det har fået et unikt id kaldet demo. Hernede har jeg et script-tag der udfører følgende kode. Det binder sig til denne node i træet til det er på Indsend ejendom denne funktion her. Og netop i kraft af, hvordan browsere fungerer, når jeg nu klikke på Send eller tryk på Enter, denne funktion kommer til at blive kaldt. Det behøver ikke et navn, fordi der dælen bekymrer sig, hvad det hedder. Den eneste gang det nogensinde kommer til at få kaldes, er, når jeg indsender formularen. Der er ikke behov for mig, den menneskelige udvikler, til rent faktisk at kalde det noget andet. Nu bare som en teaser, som om det ikke var sindet bøjning nok, vi kan endda gøre dette se mere kryptiske hjælp en super populær bibliotek kaldet jQuery. Faktisk jQuery og JavaScript ofte smelter sammen. Og hvad vi vil gøre på onsdag er starten ved hjælp af dette sprog og disse biblioteker at bygge mere og mere asynkron og dynamiske applikationer ligesom kort at få applikationer, applikationer at opdatere websiden i real tid, ligesom Facebook eller Gchat gøre, og ikke længere begrænse os til Rammer Indsend med en get eller bare indlæg alene. Så jeg vil se dig på onsdag. [Musikken afspilles]