1 00:00:00,000 --> 00:00:11,330 2 00:00:11,330 --> 00:00:12,360 >> DAVID MALAN: Greit. 3 00:00:12,360 --> 00:00:15,970 Dette er CS50, og dette er utgangen av uke ni. 4 00:00:15,970 --> 00:00:18,560 Det har vært en virvelvind i løpet de siste dagene. 5 00:00:18,560 --> 00:00:21,580 Og problemet satt sju, hvis du er kneet dypt inn i det, skjønner det er litt av en 6 00:00:21,580 --> 00:00:23,340 litt nytt som er der inne. 7 00:00:23,340 --> 00:00:26,660 Men la oss se om vi ikke kan sette alt sammen her kort 8 00:00:26,660 --> 00:00:29,230 før da oppbygning av i ennå en annen retning og seeing 9 00:00:29,230 --> 00:00:30,510 hvor ellers vi kan gå. 10 00:00:30,510 --> 00:00:32,630 >> Så så langt, har vi snakket om HTML. 11 00:00:32,630 --> 00:00:33,740 Vi har snakket om CSS. 12 00:00:33,740 --> 00:00:34,705 Vi har snakket om PHP. 13 00:00:34,705 --> 00:00:36,520 Du har begynt å oppleve SQL. 14 00:00:36,520 --> 00:00:38,360 I dag skal vi snakke litt om Javascript. 15 00:00:38,360 --> 00:00:41,230 Men hvordan gjør alle disse uensartede språk passer sammen? 16 00:00:41,230 --> 00:00:44,970 >> Så vi snakket i forrige uke om oppfatningen av å ha en server. 17 00:00:44,970 --> 00:00:48,470 Så la oss bare tegne dette rektangelet som en web server her. 18 00:00:48,470 --> 00:00:52,200 Og en web server serverer sikkert filer. 19 00:00:52,200 --> 00:00:54,640 Og noen av disse filene kan være HTML-filer. 20 00:00:54,640 --> 00:00:58,270 Så en av de tingene som en web-server kan spytte ut kan være en fil som 21 00:00:58,270 --> 00:01:01,290 vi vil bare tegne som dette inneholder noen HTML. 22 00:01:01,290 --> 00:01:04,786 Så i lekmann vilkår, hva betyr HTML lar deg gjøre? 23 00:01:04,786 --> 00:01:06,036 >> PUBLIKUM: Page look fint. 24 00:01:06,036 --> 00:01:09,670 25 00:01:09,670 --> 00:01:12,310 >> DAVID MALAN: OK, lage en side ser fin, selv om jeg tror jeg har bevist 26 00:01:12,310 --> 00:01:13,370 som ellers. 27 00:01:13,370 --> 00:01:18,250 Så HTML lar deg legge ut sider strukturelt, og det gjør at du kan 28 00:01:18,250 --> 00:01:22,410 slags estetisk markere opp en side, merke opp statisk innhold, slik at du 29 00:01:22,410 --> 00:01:23,640 Deretter kan du se det med en nettleser. 30 00:01:23,640 --> 00:01:24,690 >> Men det er nøkkelen. 31 00:01:24,690 --> 00:01:26,130 Det er statisk innhold. 32 00:01:26,130 --> 00:01:28,590 Du skriver det, lagrer du det, og deretter sende den. 33 00:01:28,590 --> 00:01:31,130 Og webserveren deretter serverer det opp til de besøkende. 34 00:01:31,130 --> 00:01:35,700 >> Men vi stilisere ting ved hjelp av en annen language helt. 35 00:01:35,700 --> 00:01:40,150 Vi begynte å bruke en stil attributt på noen tagger. 36 00:01:40,150 --> 00:01:43,400 Og stilen attributtet la oss sette ting som skriftstørrelse og farge. 37 00:01:43,400 --> 00:01:46,460 Og du har sikkert begynt å oppdage, eller du snart vil for endelig 38 00:01:46,460 --> 00:01:50,160 prosjekter potensielt, men likevel andre egenskaper som du kan bruke i CSS. 39 00:01:50,160 --> 00:01:54,710 Og så i lekmann vilkår, hva egentlig så gjør CSS gjøre? 40 00:01:54,710 --> 00:01:57,810 De er bare eksempler av disse. 41 00:01:57,810 --> 00:02:00,730 Hva betyr det at du kan gjøre det HTML ser ikke ut til fra hva 42 00:02:00,730 --> 00:02:02,606 vi har sett så langt? 43 00:02:02,606 --> 00:02:04,850 >> PUBLIKUM: Definer stiler selv. 44 00:02:04,850 --> 00:02:06,700 >> DAVID MALAN: Definer stiler selv. 45 00:02:06,700 --> 00:02:10,280 Så definere ting som klasser som du kan ha oppstått, eller unikt 46 00:02:10,280 --> 00:02:13,800 identifisere noder i et dokument slik at at du kan stilisere dem. 47 00:02:13,800 --> 00:02:16,890 Men mer spesifikt, vil jeg si at CSS virkelig lar deg ta ting på 48 00:02:16,890 --> 00:02:20,790 siste mil og lar deg spesifisere mye mer presist estetikk, 49 00:02:20,790 --> 00:02:24,340 mens HTML for det meste lar du strukturere sidene dine. 50 00:02:24,340 --> 00:02:27,310 >> Og selv om det er noen standard, som vi så tag for 51 00:02:27,310 --> 00:02:30,690 en overskrift tag, som grovt sett gjort ting stor og fet. 52 00:02:30,690 --> 00:02:34,250 Det er en ganske generisk definisjon av koden - stor og fet. 53 00:02:34,250 --> 00:02:35,260 Hva skriftstørrelsen er det? 54 00:02:35,260 --> 00:02:36,080 Hvilken farge er det? 55 00:02:36,080 --> 00:02:36,890 Hvor fet er det? 56 00:02:36,890 --> 00:02:39,830 Og CSS lar deg finere tune sånne ting. 57 00:02:39,830 --> 00:02:42,150 I tillegg til layouten, som noen av dere har sett. 58 00:02:42,150 --> 00:02:45,180 >> Og ærlig talt, er CSS litt av et rotete språk. 59 00:02:45,180 --> 00:02:48,370 Det er veldig kraftig i at du kan gjøre bokstavelig talt hvilken som helst nettside som du har 60 00:02:48,370 --> 00:02:51,880 sett på nettet i dag med det, men det er litt vondt i halsen. 61 00:02:51,880 --> 00:02:54,440 Og noen av dere har slo hodet mot veggene som allerede er bare for å gjøre 62 00:02:54,440 --> 00:02:58,560 noe dumt som sentrum en meny på Problemet satt syv hvis du har fått til 63 00:02:58,560 --> 00:02:59,470 det punktet allerede. 64 00:02:59,470 --> 00:03:01,530 >> Men skjønner, disse tingene bli lettere over tid. 65 00:03:01,530 --> 00:03:02,820 Du begynner å legge merke til mønstre. 66 00:03:02,820 --> 00:03:06,020 Og igjen, vil Google være din venn for de ulike måtene du kan 67 00:03:06,020 --> 00:03:07,220 løse slike problemer. 68 00:03:07,220 --> 00:03:11,520 >> Og jeg tør si med CSS og HTML mer generelt, kan du løse problemer i 69 00:03:11,520 --> 00:03:15,910 mange flere måter, som alle kan meget godt være riktig, enn du kunne 70 00:03:15,910 --> 00:03:18,900 i noe sånt som C, selv nå PHP, eller Javascript. 71 00:03:18,900 --> 00:03:21,080 Det er bare mange forskjellige måter å legge ut ting. 72 00:03:21,080 --> 00:03:22,570 >> Men dette begynte å bli rotete, sa vi. 73 00:03:22,570 --> 00:03:26,480 Bare slags commingling HTML og CSS med stil attributt var 74 00:03:26,480 --> 00:03:27,590 litt slurvete. 75 00:03:27,590 --> 00:03:31,460 Og så vi i stedet sa, liksom abstrakt sett, at du bør 76 00:03:31,460 --> 00:03:34,050 i det minste begynner å faktor ut din CSS sannsynligvis. 77 00:03:34,050 --> 00:03:37,430 Ikke din stil attributter, men minst bruke stilen tag inni hva 78 00:03:37,430 --> 00:03:38,840 del av web-side? 79 00:03:38,840 --> 00:03:39,560 >> PUBLIKUM: Head. 80 00:03:39,560 --> 00:03:40,120 >> DAVID MALAN: I hodet. 81 00:03:40,120 --> 00:03:43,270 Frem til nå, vi bare hadde tittelen opp der, men du kan også legge til en stil 82 00:03:43,270 --> 00:03:47,230 merke, og som du kan sette din CSS grovt snakker mot toppen av siden. 83 00:03:47,230 --> 00:03:52,550 Men da vi tok ting et skritt videre og vi priset det ut mer 84 00:03:52,550 --> 00:03:54,130 inn i en egen fil. 85 00:03:54,130 --> 00:03:57,240 >> Og så disse to filene var en eller annen måte tilknyttet hverandre. 86 00:03:57,240 --> 00:03:59,550 Og det var faktisk den kode som gjorde det. 87 00:03:59,550 --> 00:04:02,920 Og hva var ett av de overordnede motivasjon for factoring ut våre CSS 88 00:04:02,920 --> 00:04:04,057 alle mer? 89 00:04:04,057 --> 00:04:05,280 >> PUBLIKUM: Gjenbruk. 90 00:04:05,280 --> 00:04:05,785 >> DAVID MALAN: Reusability. 91 00:04:05,785 --> 00:04:06,150 Høyre? 92 00:04:06,150 --> 00:04:09,470 Du har kanskje sett i p-set syv allerede at mange av sidene, den 93 00:04:09,470 --> 00:04:12,260 kjøpe side, salgssiden, portefølje side, er trolig 94 00:04:12,260 --> 00:04:13,550 strukturert noe lignende. 95 00:04:13,550 --> 00:04:17,579 Det er en CS50 finans logoen øverst med mindre du har bestemt deg for å endre det. 96 00:04:17,579 --> 00:04:19,839 Det er en bunntekst på nederst på sidene. 97 00:04:19,839 --> 00:04:24,315 Og CSS kan du deretter å faktor det ut det inn i en egen fil, slik at hvis 98 00:04:24,315 --> 00:04:27,780 du ønsker å endre noe globalt over hele området, kan du virkelig 99 00:04:27,780 --> 00:04:29,390 bare endre det på ett sted. 100 00:04:29,390 --> 00:04:32,750 >> Men det er en pris du betaler potensielt etter å ha priset ut 101 00:04:32,750 --> 00:04:38,380 CSS fra min HTML-fil i et eget filreferanser det med 102 00:04:38,380 --> 00:04:40,650 tag, som vi så på mandag. 103 00:04:40,650 --> 00:04:43,850 Hva kan nedsiden være på dette? 104 00:04:43,850 --> 00:04:48,830 Tenker tilbake en uke siden til når vi er snakker om HTTP og TCP / IP og hvordan 105 00:04:48,830 --> 00:04:52,070 Internett fungerer. 106 00:04:52,070 --> 00:04:53,530 Noe over her? 107 00:04:53,530 --> 00:04:54,730 >> PUBLIKUM: Det tar mer tid. 108 00:04:54,730 --> 00:04:55,470 >> DAVID MALAN: Det tar mer tid. 109 00:04:55,470 --> 00:04:56,750 Hvorfor? 110 00:04:56,750 --> 00:04:59,450 >> PUBLIKUM: [uhørbart]. 111 00:04:59,450 --> 00:04:59,750 >> DAVID MALAN: Yeah. 112 00:04:59,750 --> 00:05:01,240 Så det kanskje tar litt mer tid. 113 00:05:01,240 --> 00:05:04,290 Fordi en, er CSS åpenbart ikke er i den samme filen. 114 00:05:04,290 --> 00:05:06,920 Så nå må du gjøre ikke en, men to forespørsler. 115 00:05:06,920 --> 00:05:11,230 Og hver av disse forespørslene som vi så i Chrome i den såkalte Inspector, 116 00:05:11,230 --> 00:05:15,740 og vi så på fanen nettverk, hver av disse filene krever en HTTP 117 00:05:15,740 --> 00:05:18,360 forespørsel, som vi så tar noen mengde tid. 118 00:05:18,360 --> 00:05:19,290 Nå er det kanskje ikke mye. 119 00:05:19,290 --> 00:05:20,670 Kanskje det er bare 20 millisekunder. 120 00:05:20,670 --> 00:05:22,260 Kanskje det er 200 millisekunder. 121 00:05:22,260 --> 00:05:25,530 >> Men tenk om en side som Facebook, eller CNN, eller Google, som er mye 122 00:05:25,530 --> 00:05:28,060 større enn eksemplene vi ve sett på så langt. 123 00:05:28,060 --> 00:05:32,070 Disse sidene kan ha dusinvis av filer, hvor hver av disse kan kreve en 124 00:05:32,070 --> 00:05:33,550 nedlasting av en fil. 125 00:05:33,550 --> 00:05:35,800 Så ting kan potensielt begynner å avta. 126 00:05:35,800 --> 00:05:39,280 >> Og spesielt i disse dager da vi alle har mobiltelefoner i våre lommer og 127 00:05:39,280 --> 00:05:43,010 tregere internettforbindelse, måtte vente noen millisekunder, noen 128 00:05:43,010 --> 00:05:46,110 flere millisekunder for ytterligere filer kan faktisk være treg. 129 00:05:46,110 --> 00:05:50,430 Ventetid er ordet som beskriver den slags venter på at du har det du 130 00:05:50,430 --> 00:05:53,110 oppleve når du venter på noen del av informasjonen. 131 00:05:53,110 --> 00:05:54,430 >> Men det er en oppside. 132 00:05:54,430 --> 00:05:56,600 Så det er ikke alle slags - 133 00:05:56,600 --> 00:05:58,170 det faktisk er litt av en seesaw her. 134 00:05:58,170 --> 00:06:02,970 Ulemper nå, men hva nettlesere kan gjøre hvis de er smart for å unngå 135 00:06:02,970 --> 00:06:08,870 å måtte be om det samme styles.css fil igjen kan være å gjøre hva? 136 00:06:08,870 --> 00:06:09,390 >> Cache det. 137 00:06:09,390 --> 00:06:10,370 Så caching - 138 00:06:10,370 --> 00:06:11,690 C-A-C-H-E - 139 00:06:11,690 --> 00:06:15,810 betyr vanligvis her bare for å redde fil du har bedt om det første gang, og 140 00:06:15,810 --> 00:06:17,440 så sjekk bufferen for det. 141 00:06:17,440 --> 00:06:20,400 Sjekk at du er liksom beholderen, og hvis du allerede har en 142 00:06:20,400 --> 00:06:24,520 kopi av styles.css, selv om en annen side i p-set, eller hvilken som helst nettside, 143 00:06:24,520 --> 00:06:28,560 ber om det igjen, bare for å gi den bruker den samme bufret kopi. 144 00:06:28,560 --> 00:06:30,140 Ikke bry ber om det. 145 00:06:30,140 --> 00:06:32,560 >> Ulemper det, skjønt, som noen av dere har snublet over på p-settet. 146 00:06:32,560 --> 00:06:35,870 Hvis du gjør en endring på serveren og du gå tilbake til nettleseren, og du 147 00:06:35,870 --> 00:06:39,250 reload, noen ganger nettleseren gjør deg en tjeneste og ikke bry 148 00:06:39,250 --> 00:06:43,660 re-laste ned din styles.css fil fordi, kom igjen, hva er oddsen 149 00:06:43,660 --> 00:06:47,620 at disse stilene som Facebook bruker kommer til å endre time til time eller 150 00:06:47,620 --> 00:06:48,140 dag til dag? 151 00:06:48,140 --> 00:06:48,800 Det er ganske lav. 152 00:06:48,800 --> 00:06:52,260 De kan endre seg over tid, men ikke ved minutt eller per time. 153 00:06:52,260 --> 00:06:55,810 >> Så et triks, bare så dere vet det når du gjør web utvikling, er ofte holder nede 154 00:06:55,810 --> 00:06:59,500 skift-tasten for eksempel, og klikk deretter oppdater i nettleseren din, og at viljen 155 00:06:59,500 --> 00:07:03,280 vanligvis fortelle leseren reload alt, selv om du allerede har 156 00:07:03,280 --> 00:07:04,180 det i cachen. 157 00:07:04,180 --> 00:07:06,630 Så igjen, oppsider og ulemper, men alle 158 00:07:06,630 --> 00:07:08,260 slutt utforme beslutninger. 159 00:07:08,260 --> 00:07:11,520 >> Så nå, gjorde vi ikke bare avslutte historien her. 160 00:07:11,520 --> 00:07:15,790 Hvis jeg nå gå tilbake og tilbake og tilbake og tilbake, begynte vi å introdusere ikke bare 161 00:07:15,790 --> 00:07:18,060 HTML, men PHP. 162 00:07:18,060 --> 00:07:20,786 Så i lekmann vilkår, hva PHP ikke la oss gjøre? 163 00:07:20,786 --> 00:07:22,770 >> PUBLIKUM: [uhørbart]. 164 00:07:22,770 --> 00:07:24,258 >> DAVID MALAN: Hva er det? 165 00:07:24,258 --> 00:07:25,250 >> PUBLIKUM: Introduser logikk inn i koden. 166 00:07:25,250 --> 00:07:26,620 >> DAVID MALAN: Yeah, introdusere logikken i koden din. 167 00:07:26,620 --> 00:07:29,570 Så det er en sann programmeringsspråk med looper, og variabler, og 168 00:07:29,570 --> 00:07:32,620 funksjoner og betingelser, og alle de tingene vi har fått hjelp vei tilbake 169 00:07:32,620 --> 00:07:33,780 når siden scratch. 170 00:07:33,780 --> 00:07:36,780 Og PHP, vi har sett, kan brukes enten på kommandolinjen - det 171 00:07:36,780 --> 00:07:39,190 trenger ikke å ha noe å gjøre med web, selv om det er 172 00:07:39,190 --> 00:07:43,150 egentlig sin opprinnelse og hva det har en tendens å være god på og bidrar til - 173 00:07:43,150 --> 00:07:47,130 men du kan bruke PHP bare av natur av det faktum at den har et print () 174 00:07:47,130 --> 00:07:49,660 funksjon, og en printf ()-funksjonen, eller et ekko ()-funksjonen. 175 00:07:49,660 --> 00:07:52,440 Det er bunter av måter du kan skrive ut tekst med PHP. 176 00:07:52,440 --> 00:07:56,540 >> Derfor kan du bruke denne programmer språk til utgang nøyaktig 177 00:07:56,540 --> 00:07:58,460 hva vi snakket om før. 178 00:07:58,460 --> 00:08:01,360 Du kan dynamisk generere HTML. 179 00:08:01,360 --> 00:08:02,300 Kanskje ikke alle av det. 180 00:08:02,300 --> 00:08:06,460 Kanskje du hardkode ting, som header, og bunntekst, og logoen, 181 00:08:06,460 --> 00:08:07,950 og dine stilark og alt dette. 182 00:08:07,950 --> 00:08:11,190 Men for noe sånt som p-set syv, Ønsker du å manipulere bestandene og 183 00:08:11,190 --> 00:08:14,690 viser brukerens portefølje, som er kommer til å dynamisk endre, kan du 184 00:08:14,690 --> 00:08:18,960 sikkert bruke PHP og logikken det gir du som programmeringsspråk for å 185 00:08:18,960 --> 00:08:22,320 utgang dynamisk undergrupper på siden. 186 00:08:22,320 --> 00:08:25,900 >> Så når du snakker om dynamiske websider, eller web-programmering, det er 187 00:08:25,900 --> 00:08:27,200 hva du egentlig snakker om. 188 00:08:27,200 --> 00:08:31,450 Ved hjelp av et språk som PHP, eller ting heter Python eller Ruby, eller Java, eller 189 00:08:31,450 --> 00:08:35,900 ennå andre språk, å spørre en database ofte, eller en annen server, og 190 00:08:35,900 --> 00:08:38,580 så dynamisk spytte ut HTML. 191 00:08:38,580 --> 00:08:42,470 >> Nå sluttresultatet, som en side, er at HTML av de fleste nettsteder, 192 00:08:42,470 --> 00:08:45,970 inkludert p-satt syv, er trolig kommer til å bli et stort rot hvis 193 00:08:45,970 --> 00:08:48,060 du ser på kilden kode i en nettleser. 194 00:08:48,060 --> 00:08:49,010 Det er ikke en stor avtale. 195 00:08:49,010 --> 00:08:51,550 På dette punktet, når vi bryr oss om stil, vi bryr oss om 196 00:08:51,550 --> 00:08:52,740 ting som du skriver. 197 00:08:52,740 --> 00:08:56,240 Vi vil ikke bry seg om ting at hva koden din utganger. 198 00:08:56,240 --> 00:08:59,520 Så ikke bekymre deg for innrykk her hvis det er PHP som er 199 00:08:59,520 --> 00:09:01,190 faktisk gi ut ting. 200 00:09:01,190 --> 00:09:04,430 Tross alt, vil nettleseren ikke bryr seg, og en human vil ikke bli ute 201 00:09:04,430 --> 00:09:05,400 ved kilden uansett. 202 00:09:05,400 --> 00:09:09,000 Vi ansatte, for eksempel, ville være å se på din PHP. 203 00:09:09,000 --> 00:09:13,440 >> Så la meg gi et raskt eksempel nå av hvorfor ellers dette kan være nyttig. 204 00:09:13,440 --> 00:09:18,620 Så ærlig, jeg kan ikke huske sist gang jeg brukte C for å løse et problem i 205 00:09:18,620 --> 00:09:19,620 den virkelige verden. 206 00:09:19,620 --> 00:09:22,330 Det var trolig i gradsstudier når Jeg trengte å bruke et språk som 207 00:09:22,330 --> 00:09:26,710 var ganske lavt nivå og ga meg mulighet til å gjøre noe veldig høyt 208 00:09:26,710 --> 00:09:30,720 utfører å virkelig redde så mange CPU sykluser som jeg kunne, i stor grad 209 00:09:30,720 --> 00:09:33,990 fordi jeg brukte store datasett, og hver CPU syklus telles. 210 00:09:33,990 --> 00:09:37,750 Og ærlig talt, selv i ting som telefoner i disse dager og andre enheter 211 00:09:37,750 --> 00:09:39,910 der du ikke helt har så mye minne og du ikke helt har som 212 00:09:39,910 --> 00:09:44,160 mye CPU, hjelp raskere språk er fortsatt attraktivt. 213 00:09:44,160 --> 00:09:47,290 >> Men i den virkelige verden, når du bare ønsker å kaste noe program sammen for å 214 00:09:47,290 --> 00:09:50,340 analysere noen data, eller du har samlet en hel haug med registreringer for 215 00:09:50,340 --> 00:09:53,330 noen studentgruppe og du vil veldig raskt automatisere sende e-post 216 00:09:53,330 --> 00:09:56,240 en etter en til hver og en av dem registranter, du kommer til å strekke seg etter 217 00:09:56,240 --> 00:09:59,240 et høyere nivå språk enn C så å si. 218 00:09:59,240 --> 00:10:04,060 Noe som PHP eller Python, eller Ruby, eller et halvt dusin andre som eksisterer 219 00:10:04,060 --> 00:10:04,550 disse dager. 220 00:10:04,550 --> 00:10:07,200 Men de tre er trolig det mest trendy akkurat nå. 221 00:10:07,200 --> 00:10:10,840 >> Og hva dette betyr er at du kan åpne opp en tekst editor som gedit eller 222 00:10:10,840 --> 00:10:14,030 de fleste noe annet, og så bare begynne skrive kode uten å måtte bekymre seg 223 00:10:14,030 --> 00:10:17,800 om kompilering, uten å måtte virkelig bekymre minnehåndtering, 224 00:10:17,800 --> 00:10:20,820 husk skjønt at litt slurv vil etter hvert komme tilbake 225 00:10:20,820 --> 00:10:24,790 til å bite deg hvis datasettet blir større eller problemet blir stort. 226 00:10:24,790 --> 00:10:27,230 Men hva dette betyr for oss er følgende. 227 00:10:27,230 --> 00:10:29,860 >> La meg gå videre og kjøre stavekontroll fra problem satt seks. 228 00:10:29,860 --> 00:10:33,480 Så dette er min trie-basert gjennomføring som jeg brukte på den store 229 00:10:33,480 --> 00:10:35,500 bord hvor jeg spilte ikke så godt. 230 00:10:35,500 --> 00:10:38,720 Vi vil komme tilbake i en ukes tid og revidere de som ender opp på toppen av 231 00:10:38,720 --> 00:10:40,430 stort bord på vår siste forelesning. 232 00:10:40,430 --> 00:10:44,520 Men for nå, la meg gå videre og bare kjøre min løsning i teksten, og vi vil gjøre 233 00:10:44,520 --> 00:10:48,460 King James Bible, og her vi går. 234 00:10:48,460 --> 00:10:51,080 >> Så de er alle av den antatte feilstavede ord ut av 235 00:10:51,080 --> 00:10:52,240 King James Bible. 236 00:10:52,240 --> 00:10:55,560 Og min gjennomføringen tok et halvt sekund totalt. 237 00:10:55,560 --> 00:10:58,270 Så ikke så ille på dette bestemt datamaskin. 238 00:10:58,270 --> 00:11:01,540 Men tenk på hvor mye kode jeg måtte skrive. 239 00:11:01,540 --> 00:11:02,880 Tenk hvor mye kode du måtte skrive. 240 00:11:02,880 --> 00:11:06,170 Tenk hvor mange timer du har brukt i D-hall eller sovesal eller hvor 241 00:11:06,170 --> 00:11:07,890 faktisk koding opp den løsningen. 242 00:11:07,890 --> 00:11:11,850 >> Vel, hvis jeg faktisk har et høyere nivå språk som PHP, legg merke til 243 00:11:11,850 --> 00:11:13,350 hva jeg kan gjøre her. 244 00:11:13,350 --> 00:11:16,410 Først anta at dette er stedet distribusjonen din kode. 245 00:11:16,410 --> 00:11:17,790 Dette er en fil som heter stavekontroll. 246 00:11:17,790 --> 00:11:20,220 Den er tilgjengelig som en del av dagens fordeling kode. 247 00:11:20,220 --> 00:11:22,670 Og jeg kommer til å vinke min hånd på de fleste av detaljene, men dette er faktisk 248 00:11:22,670 --> 00:11:25,500 et interessant eksempel på hvordan du kan portere et språk 249 00:11:25,500 --> 00:11:28,870 som C over til PHP. 250 00:11:28,870 --> 00:11:33,420 Jeg bokstavelig talt åpnet to tekst vinduer, ett med min C-versjonen av speller.c, 251 00:11:33,420 --> 00:11:36,960 og jeg bare begynte å oversette det i min hodet til PHP og skrive den ut ved hjelp 252 00:11:36,960 --> 00:11:38,840 de nærmeste tilsvarende funksjoner. 253 00:11:38,840 --> 00:11:40,100 >> Så noen av disse tingene er forskjellige. 254 00:11:40,100 --> 00:11:43,730 Vi så sist gang at PHP ikke bruker inkludere i helt samme måte. 255 00:11:43,730 --> 00:11:47,050 Den bruker krever vanligvis, selv om inkludere eksisterer. 256 00:11:47,050 --> 00:11:50,330 Definer er litt forskjellig fra # Define i C, men det er 257 00:11:50,330 --> 00:11:51,890 hvordan vi lager en konstant. 258 00:11:51,890 --> 00:11:55,860 $ Argc det viser seg eksisterer i PHP, så vi har sett det før. 259 00:11:55,860 --> 00:11:58,650 Disse er bare variabler, som alle som starter med dollartegn. 260 00:11:58,650 --> 00:12:00,590 Recall dette er bare en gjeng av flytende poeng. 261 00:12:00,590 --> 00:12:03,970 >> Så lang historie kort, du er velkommen til bla gjennom dette hvis nysgjerrig, er dette 262 00:12:03,970 --> 00:12:10,010 nesten en linje-for-linje omdannelse av C-versjonen av speller.c i PHP. 263 00:12:10,010 --> 00:12:12,630 Og du kan gjøre dette igjen for et halvt dusin andre språk. 264 00:12:12,630 --> 00:12:14,910 >> Men det som er interessant er dette. 265 00:12:14,910 --> 00:12:16,910 Eller hva er ærlig nedslående er dette. 266 00:12:16,910 --> 00:12:20,790 La meg gå videre og skrive om dictionary.php, og hevder at jeg er 267 00:12:20,790 --> 00:12:23,670 kommer til å gå videre og re-implementere Problemet satt seks her. 268 00:12:23,670 --> 00:12:27,530 >> Så la oss foreslå første at i denne fil, som vil bli implementert i 269 00:12:27,530 --> 00:12:30,550 PHP, så la meg åpne mine koder sånn. 270 00:12:30,550 --> 00:12:34,780 La meg gi meg selv en global variable, får $ size zero. 271 00:12:34,780 --> 00:12:36,710 Og jeg kommer til å gi meg selv en hash table. 272 00:12:36,710 --> 00:12:38,110 Jeg skal bruke en hash tabell for denne tingen. 273 00:12:38,110 --> 00:12:42,070 Hvordan erklærer jeg en hash table i PHP? 274 00:12:42,070 --> 00:12:42,990 Ferdig. 275 00:12:42,990 --> 00:12:43,980 OK. 276 00:12:43,980 --> 00:12:48,870 >> Så åpen brakett tett brakett representerer hva i PHP, som vi har sett? 277 00:12:48,870 --> 00:12:51,850 En matrise, men en matrise som kunne være en assosiativ array. 278 00:12:51,850 --> 00:12:54,320 En assosiativ array er en datastruktur som 279 00:12:54,320 --> 00:12:55,860 tilknyttede taster med verdier. 280 00:12:55,860 --> 00:12:59,430 >> Nå i den enkleste numerisk indeksert array, disse nøklene er hva? 281 00:12:59,430 --> 00:13:02,250 282 00:13:02,250 --> 00:13:03,960 Null, én, to, tre, ikke sant? 283 00:13:03,960 --> 00:13:08,780 Old school ting tilbake fra C. Men det kan også være strenger som foo og bar, 284 00:13:08,780 --> 00:13:12,210 eller Maxwell, eller en hvilken som helst slik streng. 285 00:13:12,210 --> 00:13:14,240 Slik at jeg kan utnytte at på bare et øyeblikk. 286 00:13:14,240 --> 00:13:17,550 >> La meg gå videre og erklære en funksjon som - 287 00:13:17,550 --> 00:13:19,020 la oss gjøre load () først. 288 00:13:19,020 --> 00:13:20,690 Så funksjon belastning (). 289 00:13:20,690 --> 00:13:23,440 Og PHP er litt annerledes ved at du bokstavelig talt skriver funksjon, men du 290 00:13:23,440 --> 00:13:24,930 ikke skriv en retur type. 291 00:13:24,930 --> 00:13:28,760 Jeg kommer til å gå foran og si at belastning ()-funksjonen bør ta i 292 00:13:28,760 --> 00:13:31,000 argument $ ordbok, akkurat som C-versjonen gjorde. 293 00:13:31,000 --> 00:13:32,510 Jeg gjør det fra hukommelsen. 294 00:13:32,510 --> 00:13:34,910 >> Og jeg foreslår at jeg er kommer til å gjøre dette. 295 00:13:34,910 --> 00:13:37,080 Jeg er rett og slett kommer til å gjøre foreach. 296 00:13:37,080 --> 00:13:40,710 Jeg kommer til å kalle en funksjon kalt filen (), passerer i navnet at 297 00:13:40,710 --> 00:13:44,990 fil, er der variabelen $ Ordbok som $ ord. 298 00:13:44,990 --> 00:13:49,410 Og så innsiden av min for loop her, jeg kommer til å gå videre og lagre i min 299 00:13:49,410 --> 00:13:57,440 $ Tabell som $ ordet kommer sant. 300 00:13:57,440 --> 00:13:57,918 Ferdig. 301 00:13:57,918 --> 00:14:01,264 Oh, vent. 302 00:14:01,264 --> 00:14:02,422 Ferdig. 303 00:14:02,422 --> 00:14:02,760 OK. 304 00:14:02,760 --> 00:14:04,970 >> Det vil si at lasten ()-funksjonen si i PHP. 305 00:14:04,970 --> 00:14:05,865 Nå, hvorfor det fungerer? 306 00:14:05,865 --> 00:14:07,010 Og jeg er litt juks her. 307 00:14:07,010 --> 00:14:09,980 >> Så, ett, foreach vi så kort sist. 308 00:14:09,980 --> 00:14:13,680 Det betyr bare at du kan iterere over en matrise uten å bry seg med i 309 00:14:13,680 --> 00:14:16,150 og n og pluss pluss, og alt det. 310 00:14:16,150 --> 00:14:21,350 Ordbok er selvfølgelig filnavnet, noe som er store eller små, de to 311 00:14:21,350 --> 00:14:22,830 ordbøker vi brukte forrige gang. 312 00:14:22,830 --> 00:14:26,715 Filen er en funksjon som åpner opp tekst file, leser den i linje for linje, og 313 00:14:26,715 --> 00:14:29,840 hender deg tilbake et stort utvalg, hver av med elementer som er en 314 00:14:29,840 --> 00:14:31,340 linje fra den filen. 315 00:14:31,340 --> 00:14:36,040 Så det er kombinasjonen av fopen, og fread, og mens loop, og fclose, 316 00:14:36,040 --> 00:14:37,080 og alt dette. 317 00:14:37,080 --> 00:14:40,150 Til slutt, som ordet betyr bare det er variable Jeg kommer til å ha tilgang til 318 00:14:40,150 --> 00:14:41,890 på hver iterasjon i denne sløyfen. 319 00:14:41,890 --> 00:14:46,910 >> Så kort sagt, dette en liner her betyr åpne opp filen hvis navn er i 320 00:14:46,910 --> 00:14:50,750 ordbok, variabelen, iterere over det linje for linje, og hver gang du får 321 00:14:50,750 --> 00:14:54,290 en linje, lagre i en variabel kalt ord, og deretter gjøre noe med ord. 322 00:14:54,290 --> 00:14:55,280 Hva ønsker jeg å gjøre? 323 00:14:55,280 --> 00:14:58,110 Jeg ønsker å sette ord i min hash table. 324 00:14:58,110 --> 00:15:00,860 >> Vel, jeg kan sette noe i min hash table akkurat som i C 325 00:15:00,860 --> 00:15:02,140 ved hjelp av hakeparenteser. 326 00:15:02,140 --> 00:15:03,660 Dette er navnet på min hash table. 327 00:15:03,660 --> 00:15:07,180 Jeg kommer til å indeksen inn at hasj bord på dette stedet. 328 00:15:07,180 --> 00:15:08,920 Så ikke braketten null, ikke beslaget et. 329 00:15:08,920 --> 00:15:11,990 Bracket quote unquote noe, hva det ordet er. 330 00:15:11,990 --> 00:15:15,200 Og akkurat som du kan ha i din hash table arbeid trie, du bare butikken 331 00:15:15,200 --> 00:15:17,650 effektivt en boolsk, implisitt eller eksplisitt. 332 00:15:17,650 --> 00:15:18,260 Ferdig. 333 00:15:18,260 --> 00:15:20,000 Jeg lagrer verdien true. 334 00:15:20,000 --> 00:15:23,150 >> Nå er det et par ting Jeg kutter hjørner på her. 335 00:15:23,150 --> 00:15:27,720 Teknisk sett, kommer det til å være en irriterende ny linje, / n, på slutten av 336 00:15:27,720 --> 00:15:28,820 hvert av disse ord. 337 00:15:28,820 --> 00:15:31,770 Så jeg bør nok ringe en PHP-funksjon kalt chop (), som vil 338 00:15:31,770 --> 00:15:33,460 helt bokstavelig hugge det av. 339 00:15:33,460 --> 00:15:35,020 Og jeg faktisk trenger å gjør en annen ting. 340 00:15:35,020 --> 00:15:38,380 Jeg bør nok øke størrelsen på hver iterasjon, så jeg holder styr 341 00:15:38,380 --> 00:15:39,560 globalt av hva det er. 342 00:15:39,560 --> 00:15:43,180 Og ærlig talt, og dette er en av de dummere aspekter av PHP, hvis du er 343 00:15:43,180 --> 00:15:46,950 ved hjelp av en global variabel, må du å eksplisitt si at du er. 344 00:15:46,950 --> 00:15:51,670 Så jeg kommer til å faktisk skrive i global $ Størrelse, global $ tabellen, og nå 345 00:15:51,670 --> 00:15:52,690 min funksjon er fullført. 346 00:15:52,690 --> 00:15:57,475 >> Så ikke fullt så enkelt som før, men sannsynligvis tok mindre tid enn C 347 00:15:57,475 --> 00:15:58,220 versjon, kanskje? 348 00:15:58,220 --> 00:15:58,730 OK. 349 00:15:58,730 --> 00:16:00,390 >> Så nå la oss gjøre sjekken ()-funksjonen. 350 00:16:00,390 --> 00:16:04,300 La oss se om dette i det minste tok timevis at det tok oss i C. Så 351 00:16:04,300 --> 00:16:06,500 la meg gå videre og erklære sjekk som en funksjon. 352 00:16:06,500 --> 00:16:09,070 Tar i argumentet ord, som er kommer til å komme fra stavekontroll. 353 00:16:09,070 --> 00:16:13,410 Og jeg skal bare sjekke om Følgende variable isset, bord 354 00:16:13,410 --> 00:16:18,400 brakett strtolower av ordet - 355 00:16:18,400 --> 00:16:20,590 la oss balansere alle mine parentes - 356 00:16:20,590 --> 00:16:24,275 deretter returnere true. 357 00:16:24,275 --> 00:16:27,020 358 00:16:27,020 --> 00:16:28,460 Else - 359 00:16:28,460 --> 00:16:30,330 det var virkelig hardt en del av dette program. 360 00:16:30,330 --> 00:16:31,940 Else, return false. 361 00:16:31,940 --> 00:16:32,630 Ferdig. 362 00:16:32,630 --> 00:16:33,460 Det er sjekk (). 363 00:16:33,460 --> 00:16:34,520 >> Nå, hvorfor ikke dette fungerer? 364 00:16:34,520 --> 00:16:37,040 Vel, jeg gikk i et ord, som er en streng. 365 00:16:37,040 --> 00:16:41,400 To, jeg sjekker innsiden av hasj tabell, som heter $ tabellen. 366 00:16:41,400 --> 00:16:45,470 Jeg tvinger det til små bokstaver ved å ringe en funksjon ganske lik tolower () i 367 00:16:45,470 --> 00:16:48,580 C, men dette gjør hele ordet, ikke en enkelt karakter. 368 00:16:48,580 --> 00:16:52,680 Og hvis det er satt, med andre ord det er en verdisettet, med andre ord, 369 00:16:52,680 --> 00:16:54,880 hvis det er sant, så ja, dette er et ord. 370 00:16:54,880 --> 00:16:56,530 Fordi jeg setter det der med last (). 371 00:16:56,530 --> 00:16:59,100 Og hvis ikke, kommer jeg til å returnere false. 372 00:16:59,100 --> 00:17:00,090 >> Nå de andre er lette. 373 00:17:00,090 --> 00:17:03,570 Funksjon størrelse (), hvordan gjør jeg dette? 374 00:17:03,570 --> 00:17:05,230 Jeg hovedsak gjøre returnere $ størrelse. 375 00:17:05,230 --> 00:17:07,770 Men jeg teknisk sett må gjøre dette irriterende ting. 376 00:17:07,770 --> 00:17:10,640 Og faktisk opp høre, ble jeg kutte det ene hjørnet for mange. 377 00:17:10,640 --> 00:17:12,920 Jeg trenger virkelig å gjøre global $ tabellen. 378 00:17:12,920 --> 00:17:16,260 >> Men når det er sagt, losse). 379 00:17:16,260 --> 00:17:17,380 Losse () er fantastisk. 380 00:17:17,380 --> 00:17:20,500 Funksjon losse (). 381 00:17:20,500 --> 00:17:23,990 Hvordan ønsker jeg å gjennomføre losse ()? 382 00:17:23,990 --> 00:17:25,079 Ferdig. 383 00:17:25,079 --> 00:17:25,450 OK. 384 00:17:25,450 --> 00:17:28,900 >> Så losse (), er minnehåndtering helt tatt vare på for deg i 385 00:17:28,900 --> 00:17:31,800 noe som PHP og mye av høyere nivå språk. 386 00:17:31,800 --> 00:17:32,600 Så dette er fantastisk. 387 00:17:32,600 --> 00:17:36,080 Som hvorfor i helvete gjorde vi brukt den siste åtte pluss uker på C skriving 388 00:17:36,080 --> 00:17:41,030 tydeligvis veldig sakte, virkelig tid tidkrevende problemer med titalls timer 389 00:17:41,030 --> 00:17:42,530 av arbeid under våre belter? 390 00:17:42,530 --> 00:17:46,110 >> Vel, for en ting, dette kan fungere fint for små programmer. 391 00:17:46,110 --> 00:17:47,840 Det absolutt sped opp min utviklingstid. 392 00:17:47,840 --> 00:17:49,790 Men la oss se hva som skjer i den virkelige verden. 393 00:17:49,790 --> 00:17:52,370 >> La meg gå inn i denne katalogen i en terminal vindu. 394 00:17:52,370 --> 00:17:53,370 Det er stavekontroll. 395 00:17:53,370 --> 00:17:56,570 Og legg merke til som en side, og du kan har støtt på dette i oppgavesettet 396 00:17:56,570 --> 00:17:58,190 seks eller problem satt sju. 397 00:17:58,190 --> 00:18:01,610 Du trenger strengt tatt ikke trenger å ende PHP-filer med. php. 398 00:18:01,610 --> 00:18:05,250 Hvis du putter en linje som det første på Helt øverst, det er en spesiell linje 399 00:18:05,250 --> 00:18:10,980 syntaks som i hovedsak betyr finne programmet heter PHP og bruke den til å 400 00:18:10,980 --> 00:18:12,270 tolke denne filen. 401 00:18:12,270 --> 00:18:15,410 Så nå er det ingen som egentlig vet at Jeg kjører et PHP program. 402 00:18:15,410 --> 00:18:19,860 Jeg kan kjøre det akkurat som om det ble noe samlet i C. 403 00:18:19,860 --> 00:18:20,650 >> Men her er tingen. 404 00:18:20,650 --> 00:18:21,600 Egentlig, la oss gjøre dette igjen. 405 00:18:21,600 --> 00:18:23,530 Dropbox/pset6 /. 406 00:18:23,530 --> 00:18:25,390 Det er stavekontroll. 407 00:18:25,390 --> 00:18:26,720 OK, 0,44 sekunder. 408 00:18:26,720 --> 00:18:28,080 Det går raskere denne gangen. 409 00:18:28,080 --> 00:18:29,745 >> Nå la oss gå inn i PHP-versjon. 410 00:18:29,745 --> 00:18:43,070 411 00:18:43,070 --> 00:18:44,320 Nice touch. 412 00:18:44,320 --> 00:18:50,830 413 00:18:50,830 --> 00:18:53,285 Men bare tenk hvor mye tid Jeg sparte på kontortid. 414 00:18:53,285 --> 00:18:56,990 415 00:18:56,990 --> 00:18:57,790 OK. 416 00:18:57,790 --> 00:19:01,020 >> Så 3.59 sekunder, noe som faktisk høres ikke nøyaktig heller. 417 00:19:01,020 --> 00:19:03,710 Men det er fordi lang historie kort, når du skriver ut et stort beløp 418 00:19:03,710 --> 00:19:06,840 ting til skjermen, som selv bremser ting ned. 419 00:19:06,840 --> 00:19:11,260 Hva det virkelig tok CPU i apparatet var 3,59 sekunder, i 420 00:19:11,260 --> 00:19:15,260 kontrast til C, noe som tok 0.44 sekunder senest. 421 00:19:15,260 --> 00:19:17,620 Det er virkelig en bestilling av magnitude annerledes. 422 00:19:17,620 --> 00:19:20,280 >> Så hvor er at prisen kommer fra? 423 00:19:20,280 --> 00:19:21,790 Hvorfor er det så mye tregere? 424 00:19:21,790 --> 00:19:24,220 Hvorfor utfører PHP så dårlig? 425 00:19:24,220 --> 00:19:25,242 Danielle? 426 00:19:25,242 --> 00:19:26,550 >> PUBLIKUM: Du gjorde egentlig ikke bruke en hash table. 427 00:19:26,550 --> 00:19:27,710 >> DAVID MALAN: Jeg gjorde egentlig ikke bruke en hash table. 428 00:19:27,710 --> 00:19:28,760 Så jeg slags gjorde. 429 00:19:28,760 --> 00:19:29,870 Så det er en assosiativ array. 430 00:19:29,870 --> 00:19:33,650 Mest sannsynlig dersom personene i PHP er virkelig smart, de brukte under 431 00:19:33,650 --> 00:19:39,520 hette en faktisk hash table implementert i noe sånt som C eller C + +. 432 00:19:39,520 --> 00:19:41,290 Men. 433 00:19:41,290 --> 00:19:42,760 Yeah. 434 00:19:42,760 --> 00:19:44,010 >> PUBLIKUM: [uhørlig]. 435 00:19:44,010 --> 00:19:46,690 436 00:19:46,690 --> 00:19:47,080 >> DAVID MALAN: Yeah. 437 00:19:47,080 --> 00:19:50,780 Så hver av funksjonene jeg skrev nå - faktisk kan man si at når mer en 438 00:19:50,780 --> 00:19:51,480 litt høyere? 439 00:19:51,480 --> 00:19:54,509 >> PUBLIKUM: Hver av funksjonene som du inkluderte har mye mer full 440 00:19:54,509 --> 00:19:56,610 kapasitet enn - 441 00:19:56,610 --> 00:19:57,550 >> DAVID MALAN: Så det er veldig sant. 442 00:19:57,550 --> 00:20:01,490 Det er mye mer overhead at vi er egentlig ikke se ved å fokusere bare på 443 00:20:01,490 --> 00:20:03,730 dictionary.php, som jeg nettopp skrev. 444 00:20:03,730 --> 00:20:08,020 Derimot, det er en hel tolk kommer i bakgrunnen. 445 00:20:08,020 --> 00:20:12,040 Faktisk, når jeg kjørte dette programmet, det kjørte ikke utarbeidet nuller og enere 446 00:20:12,040 --> 00:20:14,290 designet for min Intel CPU. 447 00:20:14,290 --> 00:20:19,270 Snarere var det kjører linje for linje PHP-kode som ser akkurat ut 448 00:20:19,270 --> 00:20:20,350 liker vi skrev den. 449 00:20:20,350 --> 00:20:22,475 Og så når du bruker en tolket språk, du 450 00:20:22,475 --> 00:20:23,850 faktisk må betale denne prisen. 451 00:20:23,850 --> 00:20:27,010 Det kommer til å ta litt tid til å lese filen topp til bunn, fra venstre mot 452 00:20:27,010 --> 00:20:30,740 høyre, og deretter utføre hver stille igjen og igjen. 453 00:20:30,740 --> 00:20:34,250 >> Nå i virkeligheten, spesielt på nettet, du faktisk kan fremskynde denne prosessen 454 00:20:34,250 --> 00:20:38,660 ved å mellomlagre resultatene av PHP-koden blir tolket. 455 00:20:38,660 --> 00:20:41,640 Og det gir mening på nettet, fordi hvis du ikke har en bruker som 456 00:20:41,640 --> 00:20:46,300 meg her, men 1000 eller 10.000 brukere, og deretter kanskje første gang filen er 457 00:20:46,300 --> 00:20:49,050 vist det går sakte, men etterpå det er mye raskere. 458 00:20:49,050 --> 00:20:51,000 >> Men også dette, igjen, er en trade off. 459 00:20:51,000 --> 00:20:53,870 Og etter noe som en forskningsdata satt, eller noe stort som 460 00:20:53,870 --> 00:20:58,330 dette, brukerne vil til slutt begynner å føle at nedgangen. 461 00:20:58,330 --> 00:21:02,670 >> Så kort sagt, tolket språk er veldig mye på moten, veldig populært, og 462 00:21:02,670 --> 00:21:06,710 ærlig er trolig de språkene du bør strekke seg etter når løse problemer 463 00:21:06,710 --> 00:21:08,200 Etter CS50. 464 00:21:08,200 --> 00:21:12,720 Men innser hvor mye du er virkelig tar for gitt under panseret 465 00:21:12,720 --> 00:21:15,910 egentlig de siste ukene i hash tabeller, og trær, og prøver, 466 00:21:15,910 --> 00:21:20,770 som blir brukt til slutt til faktisk implementere ting som åpen brakett, 467 00:21:20,770 --> 00:21:24,200 hakeparentes, som vi kan nå takknemlig tar for gitt. 468 00:21:24,200 --> 00:21:26,360 >> Så la oss ta en titt nå i denne web sammenheng. 469 00:21:26,360 --> 00:21:29,890 Og jeg nevnte forrige gang at det er en haug med superglobals i PHP som 470 00:21:29,890 --> 00:21:32,490 er egentlig ikke relevant på kommandolinjen. 471 00:21:32,490 --> 00:21:36,210 De er mer relevant i sammenheng for å bruke PHP i en web-sammenheng. 472 00:21:36,210 --> 00:21:41,220 Så kjører PHP på en web server for å generere ting som HTML. 473 00:21:41,220 --> 00:21:44,540 >> Og vi kikket på $ _GET og $ _POST, og det er der automatisk brukernes 474 00:21:44,540 --> 00:21:49,100 innspill ender opp bare hvis du sender en danne til en fil som slutter på. php på en nettside 475 00:21:49,100 --> 00:21:50,460 server som apparatet. 476 00:21:50,460 --> 00:21:53,310 Men la oss se litt på $ _COOKIE Og $ _SESSION. 477 00:21:53,310 --> 00:21:56,670 >> I lekmann vilkår, er hva en cookie som du forstår det i sammenheng med 478 00:21:56,670 --> 00:21:58,220 ved hjelp av web? 479 00:21:58,220 --> 00:21:59,450 >> PUBLIKUM: File på datamaskinen. 480 00:21:59,450 --> 00:21:59,920 >> DAVID MALAN: Yeah. 481 00:21:59,920 --> 00:22:03,500 Det er en fil på brukerens datamaskin plantet av hva nettstedet 482 00:22:03,500 --> 00:22:04,410 du kommer til å besøke. 483 00:22:04,410 --> 00:22:07,334 Så når du går til Facebook, når du går til bankofamerica.com, når du går 484 00:22:07,334 --> 00:22:10,330 til google.com, når du går til nesten alle nettsiden i verden i disse dager, 485 00:22:10,330 --> 00:22:14,850 inkludert cs50.net, er en cookie plantet på datamaskinen, er som 486 00:22:14,850 --> 00:22:19,800 enten en verdi som er lagret i RAM i din datamaskin i nettleserens minne, eller 487 00:22:19,800 --> 00:22:22,800 noen ganger faktisk en fil lagret på harddisken. 488 00:22:22,800 --> 00:22:26,960 >> Og hva som er typisk lagret i denne filen er ikke ditt brukernavn, ikke din 489 00:22:26,960 --> 00:22:31,060 passord, vanligvis ikke noe sensitive mindre nettstedet er ikke så 490 00:22:31,060 --> 00:22:35,040 bra med deres sikkerhet, men heller det er en stor unik identifikator blant 491 00:22:35,040 --> 00:22:35,680 andre ting. 492 00:22:35,680 --> 00:22:38,920 Det er en stor tilfeldig nummer plantet på datamaskinen, men du kan tenke på som 493 00:22:38,920 --> 00:22:42,740 liksom en virtuell hånd stempel som fra en klubb eller noen fornøyelsespark som 494 00:22:42,740 --> 00:22:47,160 lar de ansatte, eierne av at service, å huske hvem du er. 495 00:22:47,160 --> 00:22:51,030 Så hvis det store tilfeldige tall er som 12345678, selv om det er åpenbart 496 00:22:51,030 --> 00:22:54,180 ikke så tilfeldig, tenk på at etter hvert som hånd stempel som når du besøker 497 00:22:54,180 --> 00:22:57,930 facebook.com for første gang, de stemple det nummeret på hånden din. 498 00:22:57,930 --> 00:23:01,510 Og da fordi du snakker HTTP, du å være en nettleser, og fordi Facebook 499 00:23:01,510 --> 00:23:06,440 åpenbart snakker samme som en web server, sier protokollen HTTP at 500 00:23:06,440 --> 00:23:09,930 når du senere gå facebook.com, enten det er en andre 501 00:23:09,930 --> 00:23:13,560 senere, en time senere, selv neste dag, så lenge du har ikke eksplisitt 502 00:23:13,560 --> 00:23:17,050 logget ut, som effektivt er som å vaske hendene. 503 00:23:17,050 --> 00:23:20,280 HTTP sier at du bør presentere din hånd-stempel hver gang du 504 00:23:20,280 --> 00:23:22,020 tilbake til det nettstedet. 505 00:23:22,020 --> 00:23:24,390 >> Hva Facebook da gjør er at de se på den hånden stempel og 506 00:23:24,390 --> 00:23:26,850 de sier, oh, 123456789. 507 00:23:26,850 --> 00:23:30,260 Jeg vet ikke ved første øyekast at dette er David Malan i Cambridge, 508 00:23:30,260 --> 00:23:34,690 Massachusetts, men de kan sjekke deres database og si, oh, den personen 509 00:23:34,690 --> 00:23:39,930 på hvis datamaskinen plantet vi 123456789 er David Malan fra Cambridge, 510 00:23:39,930 --> 00:23:40,440 Massachusetts. 511 00:23:40,440 --> 00:23:46,000 La oss vise at brukeren deretter sin profil side eller hans News Feed. 512 00:23:46,000 --> 00:23:49,660 >> Men det er et problem her hvis dette er hvordan nettet faktisk fungerer. 513 00:23:49,660 --> 00:23:51,390 La oss ta en titt på en rask eksempel. 514 00:23:51,390 --> 00:23:55,190 La oss faktisk gå å si facebook.com. 515 00:23:55,190 --> 00:23:58,130 Men før vi kunne gå dit, la meg gå videre og åpne opp Chrome 516 00:23:58,130 --> 00:23:59,790 Inspektør ned her. 517 00:23:59,790 --> 00:24:01,140 La meg se på fanen nettverk. 518 00:24:01,140 --> 00:24:06,020 Og nå la oss gå videre og skriver i https://facebook.com. 519 00:24:06,020 --> 00:24:09,410 Og jeg gjør det slik at vi ikke ser alle disse viderekoblinger og avfall 520 00:24:09,410 --> 00:24:10,660 tid på å se gjennom dem. 521 00:24:10,660 --> 00:24:12,690 La meg trykk enter. 522 00:24:12,690 --> 00:24:13,130 >> OK. 523 00:24:13,130 --> 00:24:14,580 Vi ser en hel haug med forespørsler. 524 00:24:14,580 --> 00:24:15,640 Det kommer Facebook. 525 00:24:15,640 --> 00:24:16,930 Det er en hel haug med filer. 526 00:24:16,930 --> 00:24:19,290 Og her, per min omtale av latency siste gang, det er 527 00:24:19,290 --> 00:24:21,240 mye av HTTP-forespørsler. 528 00:24:21,240 --> 00:24:23,700 Men den første er trolig den mest interessante. 529 00:24:23,700 --> 00:24:26,420 >> Så la oss bla nedover her, og Jeg vil zoome inn på et sekund. 530 00:24:26,420 --> 00:24:29,090 Dette kommer til å være slags et rot, men la oss se. 531 00:24:29,090 --> 00:24:31,660 Facebook er å sende oss en hel haug med ting. 532 00:24:31,660 --> 00:24:33,490 >> Men whoa, interessant. 533 00:24:33,490 --> 00:24:37,880 De er å plante ikke bare én, men fire hånd frimerker på min hånd her. 534 00:24:37,880 --> 00:24:40,400 Set-cookie, Set-cookie, set-cookie, set-cookie. 535 00:24:40,400 --> 00:24:44,030 Og er det noen funksjoner her. 536 00:24:44,030 --> 00:24:46,170 Alle av dem nevne noen slags utløp. 537 00:24:46,170 --> 00:24:50,090 Og det ser ut som Facebook er håp å huske meg før 2015. 538 00:24:50,090 --> 00:24:53,670 Så det er antagelig den tiden der Jeg må logge ut, eller de vil bare 539 00:24:53,670 --> 00:24:55,710 automatisk anta jeg er ikke kommer tilbake. 540 00:24:55,710 --> 00:24:57,840 Så det er faktisk en anstendig tidsperiode. 541 00:24:57,840 --> 00:24:59,170 >> Og er det noen andre ting som skjer her. 542 00:24:59,170 --> 00:25:03,036 Denne informasjonskapselen ser ut til å være tvangs slettes ved å si det utløpt i 1970 543 00:25:03,036 --> 00:25:04,460 før cookies eksisterte. 544 00:25:04,460 --> 00:25:06,510 Så nettleser er bare kommer å anta OK, er sånn 545 00:25:06,510 --> 00:25:07,910 vaske hendene stempel. 546 00:25:07,910 --> 00:25:11,240 >> Men nå når nettleseren min gjør en etterfølgende forespørsel - 547 00:25:11,240 --> 00:25:14,340 la meg gå videre og gjøre dette igjen og reload. 548 00:25:14,340 --> 00:25:18,170 Nå la meg bla tilbake til topp forespørsel og gå ned 549 00:25:18,170 --> 00:25:20,760 her, be om overskrifter. 550 00:25:20,760 --> 00:25:21,390 Legg merke til dette. 551 00:25:21,390 --> 00:25:25,280 Så nå jeg er under ikke respons overskrifter, men merker det sier forespørselshodene. 552 00:25:25,280 --> 00:25:29,220 Og legg merke til at nettleseren min som en del av sin forespørsel etter trykket reload har 553 00:25:29,220 --> 00:25:32,780 sendes i det minste følgende informasjon. 554 00:25:32,780 --> 00:25:34,670 Ikke sett-cookie, men cookie. 555 00:25:34,670 --> 00:25:38,750 Så dette er linjen, HTTP header så å snakke, der nettleseren min er liksom 556 00:25:38,750 --> 00:25:43,340 av uten at jeg vet det presentere min hånd for Facebooks inspeksjon. 557 00:25:43,340 --> 00:25:46,020 >> Så disse informasjonskapslene kan være brukes deretter for hva? 558 00:25:46,020 --> 00:25:49,420 Å huske hvem du er, eller huske hvordan mange ganger du har vært der, eller 559 00:25:49,420 --> 00:25:50,280 virkelig noe. 560 00:25:50,280 --> 00:25:52,742 >> Så her er counter.php. 561 00:25:52,742 --> 00:25:53,780 Og la meg zoome inn på skriften. 562 00:25:53,780 --> 00:25:58,380 Og hver gang jeg laster denne siden, varsel det er å huske hvor mange ganger 563 00:25:58,380 --> 00:25:59,250 Jeg har vært der. 564 00:25:59,250 --> 00:26:00,570 Vel, det er ikke alle som imponerende. 565 00:26:00,570 --> 00:26:03,140 La oss bare lukke den fanen, og nå la oss gå tilbake til 566 00:26:03,140 --> 00:26:07,860 http://localhost/counter.php. 567 00:26:07,860 --> 00:26:08,970 >> Å, det er interessant. 568 00:26:08,970 --> 00:26:10,960 Det fortsatt husket, selv om jeg lukket fanen. 569 00:26:10,960 --> 00:26:14,010 Og ærlig talt, hvis jeg lukker nettleseren, hvis implementert på riktig måte, jeg 570 00:26:14,010 --> 00:26:18,950 kan fortsatt huske at denne brukeren er hvem han eller hun var den første gangen, og 571 00:26:18,950 --> 00:26:22,840 bare en gang jeg går inn i Chrome-menyen, som over her er her, og gå til 572 00:26:22,840 --> 00:26:25,990 Historie, og klikk Fjern søkedata som noen av dere kan ha i 573 00:26:25,990 --> 00:26:33,050 siste, først da vil dine cookies faktisk bli slettet i løpet av web 574 00:26:33,050 --> 00:26:33,970 utvikling. 575 00:26:33,970 --> 00:26:35,340 >> Så, hvis vi går - 576 00:26:35,340 --> 00:26:37,080 La oss lukke opp gedit her. 577 00:26:37,080 --> 00:26:38,910 Og hvis vi går nå til denne filen. 578 00:26:38,910 --> 00:26:44,210 La meg gå inn i vår vhosts / localhost / public, og la meg gjøre 579 00:26:44,210 --> 00:26:46,340 counter.php. 580 00:26:46,340 --> 00:26:48,350 Legg merke til at dette er en ganske enkelt program. 581 00:26:48,350 --> 00:26:50,250 Det er en ganske enkel nettside. 582 00:26:50,250 --> 00:26:51,770 >> Så toppen av filen er bare kommentarer. 583 00:26:51,770 --> 00:26:54,930 Men her er en ny linje som du kan har sett allerede i p-set syv, 584 00:26:54,930 --> 00:26:56,000 session_start (). 585 00:26:56,000 --> 00:27:00,380 Dette er en linje av PHP-kode som hovedsak forteller webserveren, gjør 586 00:27:00,380 --> 00:27:03,400 Husk å stemple hender og gjøre Husk å sjekke hånd frimerker. 587 00:27:03,400 --> 00:27:06,810 Det er alt som linjen gjør, og det gjør alt for at prosessen for oss. 588 00:27:06,810 --> 00:27:09,510 Da merker jeg har nettopp fått to grener her. 589 00:27:09,510 --> 00:27:14,150 Hvis disken nøkkelen innsiden av dette spesiell global variabel kalt 590 00:27:14,150 --> 00:27:18,010 $ _SESSION Er satt - med andre ord, hvis det er noen verdi der - 591 00:27:18,010 --> 00:27:22,440 la oss få det og lagre det i en lokal variabel kalt $ teller. 592 00:27:22,440 --> 00:27:27,000 Else, la oss tildele $ teller standardverdien på 0. 593 00:27:27,000 --> 00:27:30,320 >> Nå her er ett aspekt av PHP som er både en velsignelse og en forbannelse. 594 00:27:30,320 --> 00:27:32,080 PHP er litt slurvete. 595 00:27:32,080 --> 00:27:35,160 Så mens i C, hva ville det Omfanget av disken har vært 596 00:27:35,160 --> 00:27:36,725 enten her eller her? 597 00:27:36,725 --> 00:27:39,270 598 00:27:39,270 --> 00:27:41,690 >> Det ville ha vært begrenset til disse klammeparentes. 599 00:27:41,690 --> 00:27:42,090 Gjett hva? 600 00:27:42,090 --> 00:27:46,920 I PHP, finnes det også utenfor de klammeparentes, her, og her, 601 00:27:46,920 --> 00:27:49,120 og her, og her, og selv ned nedenfor. 602 00:27:49,120 --> 00:27:52,400 Så jeg sier dette er en velsignelse i den forstand at du ikke trenger å tenke som 603 00:27:52,400 --> 00:27:54,070 hardt som vi gjorde uker siden. 604 00:27:54,070 --> 00:27:56,880 Men det er også litt av en forbannelse i den uansett hvor du bruker en variabel i 605 00:27:56,880 --> 00:28:00,020 PHP, i hvert fall i et program som dette, det er globalt tilgjengelig for 606 00:28:00,020 --> 00:28:01,170 bedre eller verre. 607 00:28:01,170 --> 00:28:06,130 Så du må huske på nå som variablene kan ikke være udefinert. 608 00:28:06,130 --> 00:28:07,640 Du har kanskje definert dem andre steder. 609 00:28:07,640 --> 00:28:09,460 >> Men hva skal jeg gjøre slutt? 610 00:28:09,460 --> 00:28:13,160 Jeg kommer til å lagre innsiden av det globale variabel som en verdi av 611 00:28:13,160 --> 00:28:17,060 Counter et resultat av gjør teller pluss en. 612 00:28:17,060 --> 00:28:18,910 Så dette er bare den aritmetiske som gjør 613 00:28:18,910 --> 00:28:20,590 incrementation av at telleren. 614 00:28:20,590 --> 00:28:24,850 Og det faktum at jeg er lagring som verdi tilbake i her er betyr å 615 00:28:24,850 --> 00:28:29,970 hovedsak oppdatere databasen til Husk at bruker 123456789 har vært 616 00:28:29,970 --> 00:28:31,010 her to ganger. 617 00:28:31,010 --> 00:28:33,780 Og når jeg gjør det igjen neste gang jeg oppdater siden, kommer det til å sjekke 618 00:28:33,780 --> 00:28:36,710 min hånd stempel og si, oh, bruker 123456789 har nå 619 00:28:36,710 --> 00:28:38,410 vært her tre ganger. 620 00:28:38,410 --> 00:28:43,390 >> Og så hva PHP og lignende språk gjør for oss er at de er å finne 621 00:28:43,390 --> 00:28:47,720 ut hvordan og hvor og hvor lenge å lagre verdier i denne spesielle 622 00:28:47,720 --> 00:28:48,830 superglobal. 623 00:28:48,830 --> 00:28:52,750 Og dette superglobal neste gang jeg besøke siden er liksom magisk 624 00:28:52,750 --> 00:28:57,440 forhåndsutfylt, fylt med verdier som var der forrige gang du besøkte, 625 00:28:57,440 --> 00:29:02,310 om det var en andre siden, en uke siden, eller i 2013, og vi snakker nå 626 00:29:02,310 --> 00:29:03,790 ca 2015. 627 00:29:03,790 --> 00:29:07,600 PHP og webserveren ta vare av alt dette for deg. 628 00:29:07,600 --> 00:29:08,850 >> PUBLIKUM: [uhørlig]. 629 00:29:08,850 --> 00:29:11,900 630 00:29:11,900 --> 00:29:15,760 >> DAVID MALAN: Variabler i PHP er egentlig alltid global mindre du 631 00:29:15,760 --> 00:29:18,400 erklære dem inne i en funksjon, og da de er lokale for 632 00:29:18,400 --> 00:29:19,420 funksjonen bare. 633 00:29:19,420 --> 00:29:22,300 Men fordi jeg ikke har skrevet noen funksjoner, er de nå effektivt 634 00:29:22,300 --> 00:29:25,090 global hele mitt hele fil her. 635 00:29:25,090 --> 00:29:26,040 >> PUBLIKUM: Er det en måte for å gjøre dem lokalt? 636 00:29:26,040 --> 00:29:28,470 >> DAVID MALAN: Er det noen måte å gjøre dem lokalt? 637 00:29:28,470 --> 00:29:30,680 Bare ved å pakke dem inn i funksjoner. 638 00:29:30,680 --> 00:29:32,790 Som i den nyeste versjonen av PHP, kan du gjøre dette med 639 00:29:32,790 --> 00:29:34,130 en anonym funksjon. 640 00:29:34,130 --> 00:29:35,930 Men mer om det i sammenheng med JavaScript. 641 00:29:35,930 --> 00:29:37,260 Men det korte svaret er nei. 642 00:29:37,260 --> 00:29:40,888 En lengre svaret er ja. 643 00:29:40,888 --> 00:29:42,380 Nice. 644 00:29:42,380 --> 00:29:43,380 Bra quiz spørsmål. 645 00:29:43,380 --> 00:29:43,930 OK. 646 00:29:43,930 --> 00:29:47,760 >> Så til slutt, er selve siden faktisk ganske enkelt. 647 00:29:47,760 --> 00:29:51,470 Legg merke til at når jeg går ut av PHP-modus, husker at alt dette ting ned 648 00:29:51,470 --> 00:29:53,700 Nedenfor er bare kommer til å få spytte ut rå til nettleseren. 649 00:29:53,700 --> 00:29:57,050 Som er greit, fordi jeg ønsker å sende brukeren litt HTML, men jeg ønsker ikke 650 00:29:57,050 --> 00:29:59,140 å dynamisk oppdatere som HTML. 651 00:29:59,140 --> 00:30:03,930 Og en måte jeg kan gjøre dette på er å sortere av svært raskt falle tilbake i PHP 652 00:30:03,930 --> 00:30:07,730 modus og bruk av åpen brakett spørsmålstegn likhetstegn, og deretter utgang verdien 653 00:30:07,730 --> 00:30:08,650 av disken. 654 00:30:08,650 --> 00:30:12,360 >> Eller hvis dette ser litt kryptisk, dette likhetstegnet er faktisk bare noen 655 00:30:12,360 --> 00:30:16,190 syntaktisk sukker for dette printf ($ teller). 656 00:30:16,190 --> 00:30:19,160 Men ærlig talt, det er bare litt stygg og litt irriterende å skrive. 657 00:30:19,160 --> 00:30:23,660 Så PHP meget pent tilbyr denne funksjonen hvor du kan bare si det mer 658 00:30:23,660 --> 00:30:25,450 konsist på samme måte. 659 00:30:25,450 --> 00:30:26,940 >> Så hva som skjer under panseret? 660 00:30:26,940 --> 00:30:31,210 La oss raskt se på nettverket tab her for counter.php. 661 00:30:31,210 --> 00:30:35,090 Og la meg gå videre og første la oss slette informasjonskapslene. 662 00:30:35,090 --> 00:30:38,670 La oss klare logg siden begynnelsen av tid. 663 00:30:38,670 --> 00:30:39,680 Nå la oss gå tilbake hit. 664 00:30:39,680 --> 00:30:41,340 Nå la oss oppdater siden. 665 00:30:41,340 --> 00:30:42,170 Og jeg er tilbake på null. 666 00:30:42,170 --> 00:30:44,810 Fordi min hånd stempel har blitt vasket, Jeg får nå en ny cookie. 667 00:30:44,810 --> 00:30:48,780 >> Faktisk hvis jeg ser på nettverket fanen og se på respons overskrifter, merker 668 00:30:48,780 --> 00:30:51,960 at apparatet sender meg en cookie som heter noe 669 00:30:51,960 --> 00:30:55,820 vilkårlig, men slags rimelig, PHPSESSID. 670 00:30:55,820 --> 00:30:58,440 Og det er å sende meg dette virkelig stort tilfeldig tall. 671 00:30:58,440 --> 00:30:59,440 Det er ikke helt et tall. 672 00:30:59,440 --> 00:31:00,390 Det er ikke helt heksadesimal. 673 00:31:00,390 --> 00:31:03,600 Det er en slags alfanumerisk streng, men antagelig er det tilfeldig. 674 00:31:03,600 --> 00:31:06,830 Og det er hånden stempel så å taler det jeg henviser til. 675 00:31:06,830 --> 00:31:11,960 >> I mellomtiden hvis jeg klikker på nytt og deretter se på denne andre linjen for min andre 676 00:31:11,960 --> 00:31:17,600 forespørsel, merker nå at min forespørsel overskrifter inkluderer PHPSESSID lik denne, 677 00:31:17,600 --> 00:31:19,390 ikke set-cookie, men bare cookie. 678 00:31:19,390 --> 00:31:22,950 Og det er nettleseren min presentasjon av min hånd stempel. 679 00:31:22,950 --> 00:31:28,820 >> Så nå som en teaser, og vi skal snakke mer om dette i en uke eller så, men 680 00:31:28,820 --> 00:31:31,590 på hvilken måte gjør dette deg sårbare, Facebook-kontoen 681 00:31:31,590 --> 00:31:34,137 sårbare, og andre slike kontoer sårbare? 682 00:31:34,137 --> 00:31:35,510 >> PUBLIKUM: Hvis noen har en cookie. 683 00:31:35,510 --> 00:31:36,750 >> DAVID MALAN: Ja, hvis noen har din cookie. 684 00:31:36,750 --> 00:31:39,920 Jeg mener virkelig, mye som noen av dere kanskje har prøvd på som en klubb eller en 685 00:31:39,920 --> 00:31:44,030 fornøyelsespark, hvis du prøver noe som dette for å kopiere stempel, om enn 686 00:31:44,030 --> 00:31:47,560 bakover på en annen persons hånd, og så han eller hun presenterer det som 687 00:31:47,560 --> 00:31:53,250 sine egne, hvis det faktisk ser identiske, 123456789, så web 688 00:31:53,250 --> 00:31:57,980 Serveren er tilsynelatende bare kommer til å stoler på at brukeren er deg. 689 00:31:57,980 --> 00:32:01,450 >> Og dette er faktisk en fundamental trussel som helst du bruker cookies 690 00:32:01,450 --> 00:32:05,420 fordi hvis noen etterligner bare så å snakke informasjonskapselen, tallene ut hva det 691 00:32:05,420 --> 00:32:08,660 er, enten ved virkelig å kopiere den ved å se på datamaskinen 692 00:32:08,660 --> 00:32:09,890 og å være som, OK. 693 00:32:09,890 --> 00:32:14,520 Davids cookie er JJ3JIK og så videre, og da de er smart nok til å vite 694 00:32:14,520 --> 00:32:18,080 hvordan å sortere manuelt sende som cookie fra en nettleser eller fra en 695 00:32:18,080 --> 00:32:22,350 program skriver de, kunne de helt logger på en nettside som deg. 696 00:32:22,350 --> 00:32:28,560 Det er ikke så vanskelig å late som å være noen andre med mindre vi besøker p-set 697 00:32:28,560 --> 00:32:30,790 to, som introduserte hva? 698 00:32:30,790 --> 00:32:32,065 >> PUBLIKUM: Cryptography. 699 00:32:32,065 --> 00:32:33,860 >> DAVID MALAN: En liten bit av kryptografi. 700 00:32:33,860 --> 00:32:36,550 Enkel kryptografi, i hvert fall i standard utgave, men krypto 701 00:32:36,550 --> 00:32:36,870 likevel. 702 00:32:36,870 --> 00:32:37,410 mindre. 703 00:32:37,410 --> 00:32:41,440 Så det viser seg hvis du krypterer alle disse overskrifter ved å bruke noe som du 704 00:32:41,440 --> 00:32:48,770 kan nå vite mer fortrolig som SSL, secure socket layer, eller https:// webadresser, 705 00:32:48,770 --> 00:32:51,890 så alle disse tingene vi har vært skotter på er faktisk kryptert, 706 00:32:51,890 --> 00:32:54,800 noe som betyr at det er som du kan ikke lese hånd stempel. 707 00:32:54,800 --> 00:32:59,350 Bare facebook.com kan, eller google.com, eller i dette tilfellet, apparatet kan 708 00:32:59,350 --> 00:33:00,550 lest at hånd-stempel. 709 00:33:00,550 --> 00:33:04,020 >> Tragisk skjønt, og igjen, dette er altfor hensiktsmessig med NSA ting 710 00:33:04,020 --> 00:33:06,410 i det siste, er enda SSL knuselig. 711 00:33:06,410 --> 00:33:09,850 Og det er faktisk ikke så vanskelig å selv knekke krypteringen. 712 00:33:09,850 --> 00:33:12,040 Ikke så mye ved å knekke krypteringen, men ved å lure 713 00:33:12,040 --> 00:33:15,720 leseren inn dekryptering dataene for tidlig. 714 00:33:15,720 --> 00:33:17,880 Men igjen, vi vil erte deg med det før lenge. 715 00:33:17,880 --> 00:33:21,242 For nå, bare være redd. 716 00:33:21,242 --> 00:33:23,070 Det er tragisk slags sant. 717 00:33:23,070 --> 00:33:23,760 >> OK. 718 00:33:23,760 --> 00:33:27,910 Så, hvor kommer dette nå forlate oss? 719 00:33:27,910 --> 00:33:29,010 Vel, la oss gjøre dette. 720 00:33:29,010 --> 00:33:31,790 La oss gå videre og ta en rask teaser før vi tar en pause. 721 00:33:31,790 --> 00:33:33,790 Og jeg tror vi vil somle litt lenger i dag, men vi kommer til å dykke inn 722 00:33:33,790 --> 00:33:37,850 noe helt nytt og sexy, noe som vil skjerpe appetitten for enda mer. 723 00:33:37,850 --> 00:33:38,950 Så det er den teaseren. 724 00:33:38,950 --> 00:33:41,520 >> Så SQL, begynte vi å snakke om aldri så kort sist. 725 00:33:41,520 --> 00:33:44,670 Du vil virkelig få hendene skitne med noe av det i p-set syv. 726 00:33:44,670 --> 00:33:46,480 Og i lekmann vilkår, gjør SQL hva - 727 00:33:46,480 --> 00:33:47,110 S-Q-L - 728 00:33:47,110 --> 00:33:49,850 gjøre for deg? 729 00:33:49,850 --> 00:33:50,310 Hva er det? 730 00:33:50,310 --> 00:33:51,546 Yeah. 731 00:33:51,546 --> 00:33:53,240 >> PUBLIKUM: lar deg få tilgang til data. 732 00:33:53,240 --> 00:33:53,360 >> DAVID MALAN: Yeah. 733 00:33:53,360 --> 00:33:55,120 Det lar deg få tilgang til data i en database. 734 00:33:55,120 --> 00:33:56,710 Structured Query Language. 735 00:33:56,710 --> 00:33:59,890 Og dette er i hovedsak en programmeringsspråk. 736 00:33:59,890 --> 00:34:03,400 Det er trekk ved det som vi vil ikke engang bruke i klassen. 737 00:34:03,400 --> 00:34:04,710 Men du kan effektivt definere funksjoner. 738 00:34:04,710 --> 00:34:06,870 De kalles lagret prosedyrer i SQL. 739 00:34:06,870 --> 00:34:09,860 Men vi vil holde det ganske enkelt og bare bruke den for noen grunnleggende operasjoner 740 00:34:09,860 --> 00:34:14,320 som å velge data, sette inn data, oppdatere data, og sletting av data. 741 00:34:14,320 --> 00:34:17,400 >> Og du kan egentlig tenke på en database, som en SQL-database, som bare 742 00:34:17,400 --> 00:34:18,800 å være Microsoft Excel. 743 00:34:18,800 --> 00:34:21,989 Fordi SQL refererer til en relasjons database, der 744 00:34:21,989 --> 00:34:23,480 forhold betyr bare tabeller. 745 00:34:23,480 --> 00:34:24,739 Rader og kolonner. 746 00:34:24,739 --> 00:34:27,929 Så alt du kan putte i et regneark som dette eller Google Docs, 747 00:34:27,929 --> 00:34:32,460 du kan sette inn i en SQL-database ved å erklære et bord. 748 00:34:32,460 --> 00:34:34,800 >> Nå, hvordan kan du faktisk få tilgang denne informasjonen? 749 00:34:34,800 --> 00:34:38,239 Vel, med kommandoer eller spørsmål som dette. 750 00:34:38,239 --> 00:34:40,199 SELECT, INSERT, UPDATE og DELETE. 751 00:34:40,199 --> 00:34:44,489 Og for det meste, de er fire eneste ingrediensene du trenger for å 752 00:34:44,489 --> 00:34:47,370 gjøre noe ganske kraftig i oppgavesettet syv. 753 00:34:47,370 --> 00:34:49,940 >> Nå tilbake i dag, ville du faktisk samhandle med en database i en 754 00:34:49,940 --> 00:34:52,730 svart og hvit terminalvindu på en blinkende meldingen som dette. 755 00:34:52,730 --> 00:34:56,370 Og databasen vi kjører på Apparatet kalles MySQL, som er 756 00:34:56,370 --> 00:34:58,560 gratis og åpen kildekode-databasemotor. 757 00:34:58,560 --> 00:35:02,240 Hvis du Google og lese Wikipedia artikkelen, vil du vite at navnet er 758 00:35:02,240 --> 00:35:05,060 litt overgang for noen versjoner av Linux. 759 00:35:05,060 --> 00:35:10,460 Maria database er faktisk en gaffel så å si av MySQL. 760 00:35:10,460 --> 00:35:12,740 >> Lang historie kort, kjøpte Oracle MySQL. 761 00:35:12,740 --> 00:35:13,870 Oracle er et stort selskap. 762 00:35:13,870 --> 00:35:17,010 Folk har blitt bekymret for at det ville ikke lenger forbli ganske så åpen kildekode, 763 00:35:17,010 --> 00:35:20,930 så dette er bare en kopi av MySQL som er fortsatt gratis, fremdeles åpen kildekode, og 764 00:35:20,930 --> 00:35:23,550 installert i Fedora Linux som standard. 765 00:35:23,550 --> 00:35:26,130 >> Men dette er en slags smerte i hals for å bli kjent med en 766 00:35:26,130 --> 00:35:27,310 database på denne måten. 767 00:35:27,310 --> 00:35:30,560 Så vi inkluderer i CS50 apparatet en gratis open source verktøy kalt 768 00:35:30,560 --> 00:35:31,700 phpMyAdmin. 769 00:35:31,700 --> 00:35:33,940 Bare en tilfeldighet at det er skrevet i PHP. 770 00:35:33,940 --> 00:35:36,450 Det er ingen fundamental trenger for PHP her. 771 00:35:36,450 --> 00:35:40,090 Men dette er bare et web-basert verktøy som vi lastet ned gratis, installert i 772 00:35:40,090 --> 00:35:43,850 apparatet, som gjør det mulig for oss å ha en grafisk brukergrensesnitt som 773 00:35:43,850 --> 00:35:48,610 å utforske p-set syv database med som å opprette nye databaser, 774 00:35:48,610 --> 00:35:51,980 si for din egen endelige prosjektet hvis du hadde lignende, og derved skape 775 00:35:51,980 --> 00:35:55,900 dynamiske websider som CS50 Finance som gjør at du kan spørre data og 776 00:35:55,900 --> 00:35:58,140 oppdatere data dynamisk. 777 00:35:58,140 --> 00:36:01,420 >> Du er ikke nødt til å bruke bare en enkel tekstfil eller CSV. 778 00:36:01,420 --> 00:36:05,950 Du kan faktisk bruke en smart database program slik at du kan utføre mer 779 00:36:05,950 --> 00:36:10,240 avanserte søk enn bare å lese gjennom alt lineært. 780 00:36:10,240 --> 00:36:14,150 >> Så for eksempel, er dette det vi gir deg ut av boksen for p-set syv. 781 00:36:14,150 --> 00:36:18,280 Dette er en tabell med tilsynelatende minst tre kolonner, hvorav den ene er 782 00:36:18,280 --> 00:36:21,450 brukernavn, hvorav den ene er hasj, og den andre av hvilke er ID. 783 00:36:21,450 --> 00:36:26,200 >> Men det interessante, og bare for å erte ut en tanke her, brukernavn 784 00:36:26,200 --> 00:36:29,270 er formodentlig allerede unikt, ikke sant? 785 00:36:29,270 --> 00:36:31,190 Jeg mener, de fleste hvilken som helst nettside, hvis du har et brukernavn, det 786 00:36:31,190 --> 00:36:32,370 kan ikke være to Cæsars. 787 00:36:32,370 --> 00:36:33,440 Det kan ikke være to Malans. 788 00:36:33,440 --> 00:36:34,950 Det kan ikke være to jharvards. 789 00:36:34,950 --> 00:36:35,600 Dens unike. 790 00:36:35,600 --> 00:36:38,610 Ellers har de ikke vet hvilke jharvard det faktisk er. 791 00:36:38,610 --> 00:36:42,710 Så hva som kan være motivasjonen for også har en tredje kolonne på venstre 792 00:36:42,710 --> 00:36:46,970 det kalles ID, som ser ut som en tall som er på samme måte unik? 793 00:36:46,970 --> 00:36:51,300 Det føles litt overflødig til meg ved første øyekast. 794 00:36:51,300 --> 00:36:54,910 Hvorfor kan det være attraktivt å ha ikke bare unike brukernavn, 795 00:36:54,910 --> 00:36:56,837 men også unike numre? 796 00:36:56,837 --> 00:36:59,460 >> PUBLIKUM: De kunne ha det samme passordet. 797 00:36:59,460 --> 00:37:01,720 >> DAVID MALAN: Folk kan ha det samme passordet, sikkert. 798 00:37:01,720 --> 00:37:03,900 Det kan absolutt skje. 799 00:37:03,900 --> 00:37:08,270 Men hvis de har denne unike brukernavn, jeg vil hevde at det ikke egentlig 800 00:37:08,270 --> 00:37:11,630 saken, fordi hvis de skriver i sitt brukernavn, jeg trenger bare å sjekke deres 801 00:37:11,630 --> 00:37:15,060 passord, deres hash av disse. 802 00:37:15,060 --> 00:37:15,970 Hvorfor ellers? 803 00:37:15,970 --> 00:37:17,950 >> PUBLIKUM: Raskere søker. 804 00:37:17,950 --> 00:37:18,680 >> DAVID MALAN: Raskere søker. 805 00:37:18,680 --> 00:37:19,548 Hvorfor? 806 00:37:19,548 --> 00:37:21,460 >> PUBLIKUM: ID er bare en. 807 00:37:21,460 --> 00:37:24,040 >> DAVID MALAN: ID er bare ett tegn, eller for å være mer presis, det er et tall, 808 00:37:24,040 --> 00:37:26,910 så det er nok 32 bits eller noe sånt. 809 00:37:26,910 --> 00:37:30,270 Mens brukernavn, tilsynelatende Jason Hirschhorn er der oppe er liksom 810 00:37:30,270 --> 00:37:33,900 latterlig lang, og det kommer til å tar meg mye mer tid til streng 811 00:37:33,900 --> 00:37:40,910 sammenlign H-I-R-S-C-H-H-O-R-N, og kanskje a / 0 eller noe sånt, for 812 00:37:40,910 --> 00:37:45,100 å slå opp Jason, i motsetning til bare sa gi meg bruker nummer to. 813 00:37:45,100 --> 00:37:46,510 Det er 32 bits. 814 00:37:46,510 --> 00:37:48,550 Det er et enkelt INT som du har å sammenligne. 815 00:37:48,550 --> 00:37:52,150 Og ja, det er akkurat hvorfor databaser en tendens til å tilordne unike IDer til 816 00:37:52,150 --> 00:37:53,710 rader i dem. 817 00:37:53,710 --> 00:37:56,280 >> Nå hva andre datatyper er det foruten INT og tilsynelatende 818 00:37:56,280 --> 00:37:57,160 strenger som dette? 819 00:37:57,160 --> 00:37:59,700 Vel, for å være mer korrekt, SQL databaser, som 820 00:37:59,700 --> 00:38:02,060 MySQL, har CHAR felt. 821 00:38:02,060 --> 00:38:05,320 Og røye litt villedende er ikke en eneste CHAR. 822 00:38:05,320 --> 00:38:10,290 En CHAR felt i en MySQL database er ett eller flere tegn, men det er en 823 00:38:10,290 --> 00:38:11,780 fast antall tegn. 824 00:38:11,780 --> 00:38:15,710 >> Så for eksempel, hvis jeg går over til phpMyAdmin som du kanskje allerede har, eller 825 00:38:15,710 --> 00:38:21,340 snart vil et problem satt syv, og jeg går til min database, og bare for moro skyld, 826 00:38:21,340 --> 00:38:25,700 la oss lage en ny tabell kalt teste med bare to kolonner. 827 00:38:25,700 --> 00:38:27,160 Jeg vil deretter Start. 828 00:38:27,160 --> 00:38:30,070 Og dette vil bli ganske kjent, særlig ettersom du tinker 829 00:38:30,070 --> 00:38:31,130 rundt på egen hånd. 830 00:38:31,130 --> 00:38:34,140 Her kan jeg skrive ID for å skape en ny tabell av type int. 831 00:38:34,140 --> 00:38:37,770 Men her jeg kan skrive brukernavn til gjenskape den tidligere tabellen. 832 00:38:37,770 --> 00:38:40,700 Og legg merke til jeg har en hel haug av typer å velge mellom. 833 00:38:40,700 --> 00:38:43,610 >> Og dette er også grunnen til at phpMyAdmin er litt fint. 834 00:38:43,610 --> 00:38:46,770 Det er en slags selv undervisning i at du kan bare slags punkt, og klikk, og 835 00:38:46,770 --> 00:38:50,730 se på rullegardinmenyer, og slutte fra at hva krefter SQL gir deg. 836 00:38:50,730 --> 00:38:54,090 >> Og ja, hvis jeg velger CHAR, jeg da må spesifisere lengden, eller hvordan 837 00:38:54,090 --> 00:38:55,940 mange verdier, hvor mange tegn. 838 00:38:55,940 --> 00:39:00,090 Så veldig felles verdier er ting som 255, men det er litt lang. 839 00:39:00,090 --> 00:39:02,250 Vanligvis er åtte for et brukernavn. 840 00:39:02,250 --> 00:39:03,590 Men det er litt lite i disse dager. 841 00:39:03,590 --> 00:39:05,430 Så dette er et design beslutning. 842 00:39:05,430 --> 00:39:08,630 Er det 8 tegn maks, 32, 255, 1000? 843 00:39:08,630 --> 00:39:09,830 Det er egentlig opp til deg. 844 00:39:09,830 --> 00:39:12,350 Men en CHAR feltet er et fast antall. 845 00:39:12,350 --> 00:39:16,420 Så velger for få og du er slags skrudd hvis du ønsker en lengre brukernavn. 846 00:39:16,420 --> 00:39:19,132 Velg for mange, og hva som er nedsiden? 847 00:39:19,132 --> 00:39:20,820 >> PUBLIKUM: [uhørbart]. 848 00:39:20,820 --> 00:39:21,620 >> DAVID MALAN: Det er sløsing. 849 00:39:21,620 --> 00:39:24,835 Akkurat som i C, hvis du har en større del av minnet enn du trenger, er du 850 00:39:24,835 --> 00:39:27,190 bare å kaste bort tid og kaste bort plass. 851 00:39:27,190 --> 00:39:31,430 Så som et alternativ, det finnes VARCHAR, som løser dette problemet ved å 852 00:39:31,430 --> 00:39:36,390 behandling av lengden ikke som en fast lengde, men som en maksimal lengde, og ved hjelp av en 853 00:39:36,390 --> 00:39:40,990 variabelt antall tegn, som deretter har en tendens til å bare bruke så mange tegn som du 854 00:39:40,990 --> 00:39:42,710 faktisk trenger. 855 00:39:42,710 --> 00:39:43,670 Det høres perfekt. 856 00:39:43,670 --> 00:39:45,640 >> Hvorfor kan ikke vi bli kvitt den Char-datatype da? 857 00:39:45,640 --> 00:39:48,500 Hva kan være nedsiden av bruker VARCHARs, som lyder 858 00:39:48,500 --> 00:39:51,644 som det er en fin seier? 859 00:39:51,644 --> 00:39:52,596 Yeah? 860 00:39:52,596 --> 00:39:53,846 >> PUBLIKUM: [uhørbart]. 861 00:39:53,846 --> 00:39:57,360 862 00:39:57,360 --> 00:39:57,790 >> DAVID MALAN: OK, bra. 863 00:39:57,790 --> 00:40:01,101 Så hvis alle dine data er det samme lengde, hva er bekymring? 864 00:40:01,101 --> 00:40:05,250 >> PUBLIKUM: Fordi du kaster bort data ved å fortelle dem alle. 865 00:40:05,250 --> 00:40:09,060 >> DAVID MALAN: Så hvis alle dine data er samme lengde, skjønt, vil jeg hevde 866 00:40:09,060 --> 00:40:12,300 som spesifiserer en maksimal lengde på VARCHAR er ikke forskjellig fra 867 00:40:12,300 --> 00:40:16,070 spesifisere en fast lengde på CHAR hvis du vet at antall på forhånd. 868 00:40:16,070 --> 00:40:19,500 Men det er faktisk, og jeg skal liksom trekke ut fra det svaret virkeligheten 869 00:40:19,500 --> 00:40:22,610 at det fortsatt er en max, som kunne være irriterende, spesielt hvis du 870 00:40:22,610 --> 00:40:25,920 støter på en persons navn som er uvanlig lang at du ikke gjorde det 871 00:40:25,920 --> 00:40:26,860 forutse. 872 00:40:26,860 --> 00:40:31,420 Og det er også en litt mindre effektiv å faktisk søke på VARCHARs som 873 00:40:31,420 --> 00:40:35,620 motsetning til søker tegn, spesielt for langbord som har mye og 874 00:40:35,620 --> 00:40:36,510 mye data. 875 00:40:36,510 --> 00:40:40,060 Så også her, er tematisk igjen ingen opplagte valget. 876 00:40:40,060 --> 00:40:42,870 >> Så bare for å gi deg en følelse av andre datatyper som kan være av interesse 877 00:40:42,870 --> 00:40:45,400 enten for p-set syv eller i fremtiden, er det INT. 878 00:40:45,400 --> 00:40:47,270 Det er BIGINT, som er som lang lang. 879 00:40:47,270 --> 00:40:48,880 Det har en tendens til å være 64 biter. 880 00:40:48,880 --> 00:40:51,640 Det er DESIMAL, som du vil se i problemet set, som er en mye 881 00:40:51,640 --> 00:40:55,300 renere svar på de problemene vi oppstått med flottør og flytende 882 00:40:55,300 --> 00:40:55,980 peke imprecision. 883 00:40:55,980 --> 00:40:57,390 Og så er det DATETIME. 884 00:40:57,390 --> 00:41:01,530 Det er bokstavelig talt en datatype som har å se ut som et år, en måned, en dag, 885 00:41:01,530 --> 00:41:03,730 og en time, minutt og sekund. 886 00:41:03,730 --> 00:41:07,470 >> Men SQL databaser har også ting vi kaller indekser. 887 00:41:07,470 --> 00:41:11,630 Og en indeks er noe som du angir når du oppretter tabellen til 888 00:41:11,630 --> 00:41:15,720 foreta søk og andre operasjoner mer effektiv. 889 00:41:15,720 --> 00:41:18,550 Nærmere bestemt, er det noe som heter primærindeksen som du kunne 890 00:41:18,550 --> 00:41:19,440 erklære som følger. 891 00:41:19,440 --> 00:41:22,330 >> Vi gjorde dette for deg med brukere tabellen gir vi deg. 892 00:41:22,330 --> 00:41:26,160 Men legg merke til hvis jeg var manuelt gjenskape bruker tabell her gi 893 00:41:26,160 --> 00:41:27,110 det et navn på brukere. 894 00:41:27,110 --> 00:41:28,125 Jeg har allerede angitt ID. 895 00:41:28,125 --> 00:41:29,330 Jeg anga INT. 896 00:41:29,330 --> 00:41:32,000 Jeg spesifiserte brukernavn med maksimum 32 tegn. 897 00:41:32,000 --> 00:41:36,140 Men hvis vi holder rulle i denne ganske stort vindu, merker det er en 898 00:41:36,140 --> 00:41:38,260 haug med andre ting jeg kan angi. 899 00:41:38,260 --> 00:41:40,950 >> One, kan jeg spesifisere attributter lignende, vet du hva, dette 900 00:41:40,950 --> 00:41:42,190 INT bør være UNSIGNED. 901 00:41:42,190 --> 00:41:45,510 Jeg ønsker ikke negative tall, så la oss gjøre det UNSIGNED. 902 00:41:45,510 --> 00:41:48,660 Null er ikke relevant her fordi Jeg ønsker alle brukere til 903 00:41:48,660 --> 00:41:49,640 har et unikt nummer. 904 00:41:49,640 --> 00:41:50,830 Jeg vil ikke at det skal være null. 905 00:41:50,830 --> 00:41:52,330 >> Men dette er interessant. 906 00:41:52,330 --> 00:41:57,780 Jeg kan spesifisere at ID er enten primærnøkkel av denne databasen, eller det er 907 00:41:57,780 --> 00:42:00,620 unik, eller det er indeksert, eller fulltekst. 908 00:42:00,620 --> 00:42:05,630 Så for dagens formål, lang historie Kort sagt betyr PRIMÆR at dette skal 909 00:42:05,630 --> 00:42:10,570 være både konseptuelt og teknisk feltet som vi bruker til å unikt 910 00:42:10,570 --> 00:42:12,140 identifisere brukerne. 911 00:42:12,140 --> 00:42:16,140 >> Så når vi ser opp brukere, er denne typen av et løfte om å slå dem opp det meste av 912 00:42:16,140 --> 00:42:17,370 som unik identifikator. 913 00:42:17,370 --> 00:42:21,930 Og databasen vil sikre at hvis du har en bruker nummer tre, kan du ikke 914 00:42:21,930 --> 00:42:25,400 fysisk sette inn en annen bruker med det samme tallet 3. 915 00:42:25,400 --> 00:42:28,380 Databasen vil bare nekte for å lagre endringene. 916 00:42:28,380 --> 00:42:32,310 Som er en god ting, fordi du kan beskytte deg mot deg selv. selv 917 00:42:32,310 --> 00:42:34,270 >> Alternativt, for brukernavn. 918 00:42:34,270 --> 00:42:37,670 Så den andre raden, husker, er brukernavnet feltet. 919 00:42:37,670 --> 00:42:41,860 Så den andre raden her er brukernavn, som vi gjorde helt til venstre der. 920 00:42:41,860 --> 00:42:43,940 >> Så hva annet kan jeg ønsker å spesifisere? 921 00:42:43,940 --> 00:42:47,840 Jeg får ikke lov, ifølge SQL, å spesifisere to primærnøkler. 922 00:42:47,840 --> 00:42:50,750 du kan spesifisere en felles nøkkel der du se på begge felt, men de kan ikke 923 00:42:50,750 --> 00:42:52,260 enkeltvis være primærnøkler. 924 00:42:52,260 --> 00:42:54,750 Så det er uaktuelt. 925 00:42:54,750 --> 00:42:56,040 Så hvilke kanskje jeg vil velge? 926 00:42:56,040 --> 00:42:59,710 >> Vel, er UNIK ligner i ånden til en primærnøkkel der du angir denne 927 00:42:59,710 --> 00:43:03,570 Feltet skal være unikt, men det er ikke kommer til å være den 928 00:43:03,570 --> 00:43:04,410 Jeg bruker hele tiden. 929 00:43:04,410 --> 00:43:08,450 Og vi kommer til å bruke denne en alle tiden for hva grunnen igjen? 930 00:43:08,450 --> 00:43:10,490 Det er tregere potensielt hvis det er en lang brukernavn. 931 00:43:10,490 --> 00:43:11,740 Det er bare bortkastet tid. 932 00:43:11,740 --> 00:43:16,140 >> INDEX, i mellomtiden, presiserer at det er ikke kommer til å være unik, men jeg vil gjerne 933 00:43:16,140 --> 00:43:19,470 du å jobbe din magi under panseret for å gjøre det raskere for meg å 934 00:43:19,470 --> 00:43:21,420 søke på dette feltet. 935 00:43:21,420 --> 00:43:23,320 Så dette er trolig ikke relevant her. 936 00:43:23,320 --> 00:43:26,500 For brukernavn, vil jeg hevde at UNIK er et godt svar. 937 00:43:26,500 --> 00:43:31,200 Men anta at vi har gjort brukerne mer interessant enn bare brukernavn, 938 00:43:31,200 --> 00:43:32,430 hashes, og ID-numre. 939 00:43:32,430 --> 00:43:33,860 Hva om vi ga folk fulle navn? 940 00:43:33,860 --> 00:43:37,700 Hva om vi ga dem adresser og andre data om dem? 941 00:43:37,700 --> 00:43:43,360 >> Vel, hvis du angir at en kolonne i et database er indeksert, det betyr at 942 00:43:43,360 --> 00:43:47,730 MySQL, eller Oracle, eller hva database du bruker, bør arbeide sin magi 943 00:43:47,730 --> 00:43:51,300 og bruke noen form for fancy data struktur som et tre, eller en trie, eller en 944 00:43:51,300 --> 00:43:55,940 hash table, eller noe å garantere at når du søke etter data ved hjelp 945 00:43:55,940 --> 00:43:58,150 velge på det aktuelle feltet - 946 00:43:58,150 --> 00:44:01,310 som viser meg alle at bor på Oxford Street. 947 00:44:01,310 --> 00:44:02,540 En spørring sånn. 948 00:44:02,540 --> 00:44:06,250 Hvis du har spesifisert på forhånd at du vil ha en indeks på dette feltet, det 949 00:44:06,250 --> 00:44:09,050 søkene vil være mye, mye raskere. 950 00:44:09,050 --> 00:44:12,090 >> Hvis du ikke angir en indeks, den beste du kan gjøre er en lineær søk hvis 951 00:44:12,090 --> 00:44:13,030 det er ikke sortert. 952 00:44:13,030 --> 00:44:16,220 Men hvis du angir INDEX, smart folk som har gjort databasen - 953 00:44:16,220 --> 00:44:19,340 folk som deg som nå kjenner trær og prøver og hash tabeller - 954 00:44:19,340 --> 00:44:23,220 vil automatisk bygge en slik data struktur i RAM for å sørge for at 955 00:44:23,220 --> 00:44:26,050 disse søkene er mye raskere. 956 00:44:26,050 --> 00:44:29,660 >> FULLTEXT er i mellomtiden lik i ånden, men lar deg gjøre wildcard 957 00:44:29,660 --> 00:44:35,480 søk, som viser meg alle at bor på gatene som begynner med 958 00:44:35,480 --> 00:44:36,960 bokstaven O uansett grunn. 959 00:44:36,960 --> 00:44:38,850 Du kan gjøre jokertegnsøk sånn. 960 00:44:38,850 --> 00:44:45,880 Eller, mer overbevisende ting som showet meg alle som har ordet - 961 00:44:45,880 --> 00:44:49,400 Vis meg alle med navn som starter med en bestemt bokstav. 962 00:44:49,400 --> 00:44:51,880 Du kan søke etter nøkkelord på denne måten. 963 00:44:51,880 --> 00:44:52,630 OK. 964 00:44:52,630 --> 00:44:55,760 >> Så, design muligheter det potensielt. 965 00:44:55,760 --> 00:44:57,740 Det er andre som jeg vil vinke hendene mine på. 966 00:44:57,740 --> 00:45:00,530 Det viser seg at du kan ha ulike lagrings motorer. 967 00:45:00,530 --> 00:45:04,390 Og dette er mer uforståelige enn vi trenger sikkert for oppgavesettet sju. 968 00:45:04,390 --> 00:45:06,920 Som standard er det dere bruker noe som kalles InnoDB. 969 00:45:06,920 --> 00:45:10,910 Du vil se omtale av dette et sted i phpMyAdmin grensesnitt mest sannsynlig. 970 00:45:10,910 --> 00:45:14,130 Men vet at det er andre design beslutninger som er av potensiell 971 00:45:14,130 --> 00:45:18,030 interessen kommer endelig prosjekter hvis du gjør noe web-basert. 972 00:45:18,030 --> 00:45:19,330 >> Men la oss gjøre dette. 973 00:45:19,330 --> 00:45:23,130 La oss gå videre og sette dette på skjermen som en teaser for en historie 974 00:45:23,130 --> 00:45:26,330 involverer deg, en samboer, og et glass melk. 975 00:45:26,330 --> 00:45:28,240 La oss ta en to minutters eller så bryte her. 976 00:45:28,240 --> 00:45:31,060 Og hvis du kan holde rundt, la oss komme tilbake, se litt mer på SQL, og 977 00:45:31,060 --> 00:45:35,160 deretter en bit av Javascript med p-satt åtte i tankene. 978 00:45:35,160 --> 00:45:36,120 >> OK. 979 00:45:36,120 --> 00:45:40,420 Så, la oss få deg å tenke på en hjørne saken som svært lett kan oppstå 980 00:45:40,420 --> 00:45:44,240 i sammenheng med bruk av en database, eller ærlig, selv ved hjelp av reelle ting 981 00:45:44,240 --> 00:45:46,280 som minibanker for å få penger. 982 00:45:46,280 --> 00:45:47,640 Så her er et kjøleskap. 983 00:45:47,640 --> 00:45:50,040 Anta at du har en også i dorm eller huset ditt. 984 00:45:50,040 --> 00:45:54,990 Og du har en romkamerat, og begge du virkelig liker melk for eksempel. 985 00:45:54,990 --> 00:45:57,210 >> Så du kommer hjem fra klassen en dag. 986 00:45:57,210 --> 00:45:58,490 Han eller hun er ennå ikke tilbake. 987 00:45:58,490 --> 00:45:59,180 Du åpner kjøleskapet. 988 00:45:59,180 --> 00:46:00,870 Vil du virkelig ha et stort glass melk. 989 00:46:00,870 --> 00:46:01,820 Det er ikke noe melk. 990 00:46:01,820 --> 00:46:02,920 Så hva gjør du da? 991 00:46:02,920 --> 00:46:03,840 Du lukker kjøleskapet. 992 00:46:03,840 --> 00:46:04,670 Du hente nøklene. 993 00:46:04,670 --> 00:46:05,930 Du går ut til torget. 994 00:46:05,930 --> 00:46:09,240 Og du får i kø på CVS på de selv kassa ting, som alltid 995 00:46:09,240 --> 00:46:11,180 ta lengre tid enn faktisk ha kasser. 996 00:46:11,180 --> 00:46:11,820 Anyhow. 997 00:46:11,820 --> 00:46:15,490 >> Så da, i mellomtiden, dot dot dot, din romkamerat kommer hjem, og han eller hun 998 00:46:15,490 --> 00:46:17,440 Tilsvarende har en hankering for litt melk. 999 00:46:17,440 --> 00:46:20,380 Så han eller hun åpner kjøleskapet, ser inne, og oh, jævla. 1000 00:46:20,380 --> 00:46:21,160 Ingen melk. 1001 00:46:21,160 --> 00:46:24,750 Så han eller hun hodet ut, skjer for å gå til den andre CVS, som var bare en 1002 00:46:24,750 --> 00:46:27,900 sperre bort av en eller annen grunn, og han eller hun får i kø for å kjøpe melk. 1003 00:46:27,900 --> 00:46:30,480 >> I mellomtiden, kommer du hjem, han eller hun kommer hjem, og hva gjør 1004 00:46:30,480 --> 00:46:31,980 du til slutt ha? 1005 00:46:31,980 --> 00:46:33,080 Dobbelt så mye melk. 1006 00:46:33,080 --> 00:46:34,620 Men du egentlig ikke liker melk så mye. 1007 00:46:34,620 --> 00:46:37,300 Så nå har du så mye melk som nå en av dem er bare kommer til å gå sure 1008 00:46:37,300 --> 00:46:37,820 slutt. 1009 00:46:37,820 --> 00:46:39,370 Så dette er en veldig dårlig problem. 1010 00:46:39,370 --> 00:46:39,900 Høyre? 1011 00:46:39,900 --> 00:46:41,990 >> Så hva har skjedd? 1012 00:46:41,990 --> 00:46:44,810 Så fundamentalt, er denne typen av en latterlig eksempel. 1013 00:46:44,810 --> 00:46:48,580 Men under panseret, hva vi har hatt skje her er dere begge sjekket 1014 00:46:48,580 --> 00:46:52,390 tilstanden for et visst stykke hukommelse, kjøleskapet. 1015 00:46:52,390 --> 00:46:54,420 Begge du sjekket staten av noen variable. 1016 00:46:54,420 --> 00:46:57,360 Dere begge trakk en konklusjon at du da handlet på. 1017 00:46:57,360 --> 00:47:01,420 Men dessverre, mens romkameraten var i butikken, staten som 1018 00:47:01,420 --> 00:47:05,670 variabel forandret, han eller hun kom tilbake og nå ønsker å endre tilstanden, men 1019 00:47:05,670 --> 00:47:07,480 det er allerede blitt endret på ham eller henne. 1020 00:47:07,480 --> 00:47:11,120 Og selvfølgelig, vil han eller hun ikke har gått til butikken om de visste 1021 00:47:11,120 --> 00:47:13,010 at du allerede var underveis. 1022 00:47:13,010 --> 00:47:16,430 >> Så i den virkelige verden, hvordan kunne du unngå dette problemet, forutsatt at du har 1023 00:47:16,430 --> 00:47:18,940 et kjøleskap, har du en samboer, og du faktisk liker melk? 1024 00:47:18,940 --> 00:47:19,760 >> PUBLIKUM: Å kommunisere. 1025 00:47:19,760 --> 00:47:20,580 >> DAVID MALAN: Å kommunisere. 1026 00:47:20,580 --> 00:47:21,160 OK. 1027 00:47:21,160 --> 00:47:22,500 Men hvordan kan du kommunisere? 1028 00:47:22,500 --> 00:47:23,990 >> PUBLIKUM: Legg igjen en lapp. 1029 00:47:23,990 --> 00:47:25,480 >> DAVID MALAN: Legg igjen en kommentar, ikke sant? 1030 00:47:25,480 --> 00:47:28,025 Alltid forlate et notat, for fans av showet. 1031 00:47:28,025 --> 00:47:31,580 Ok, så du alltid la et notat, eller satt virkelig som en hengelås eller noe 1032 00:47:31,580 --> 00:47:35,440 på kjøleskapet som holder romkamerat fra inspisere tilstanden til 1033 00:47:35,440 --> 00:47:36,540 den variabelen. 1034 00:47:36,540 --> 00:47:40,800 >> Nå, hvorfor kan dette være viktig til Problemet satt syv, eller minibanker. 1035 00:47:40,800 --> 00:47:46,780 Vel, tenk en verden i en minibank der du kan være i stand til å gå opp til en minibank 1036 00:47:46,780 --> 00:47:48,920 maskin her, og en annen minibank her. 1037 00:47:48,920 --> 00:47:50,680 Og dette skjer ganske ofte. 1038 00:47:50,680 --> 00:47:54,150 Og anta at du hadde to ATM-kort, som er mulig å oppnå. 1039 00:47:54,150 --> 00:47:57,420 Og du logger inn begge maskinene effektivt samtidig, forhåpentligvis 1040 00:47:57,420 --> 00:47:58,660 mens ingen ser. 1041 00:47:58,660 --> 00:48:01,260 Og så du skriver inn PIN-koden omtrent samtidig. 1042 00:48:01,260 --> 00:48:06,280 Og så gjør du en balanse spørring for å se hvor mye penger du har. 1043 00:48:06,280 --> 00:48:08,920 Og la oss si at du har $ 100 igjen på kontoen din. 1044 00:48:08,920 --> 00:48:13,310 Så egentlig samtidig, du sier en, null, null, skriv. 1045 00:48:13,310 --> 00:48:16,000 Og du forhåpentligvis få tilbake noen penger. 1046 00:48:16,000 --> 00:48:18,440 >> Men hvor mye penger kan du komme tilbake? 1047 00:48:18,440 --> 00:48:21,710 Nå datamaskiner på slutten av dagen, spesielt hvis de snakker med 1048 00:48:21,710 --> 00:48:27,360 servere, ikke nødvendigvis gjør ting i den rekkefølgen som er forventet. 1049 00:48:27,360 --> 00:48:30,860 >> Så vel hva som skjer på grunn av uansett nettverk hastighet problemer der 1050 00:48:30,860 --> 00:48:34,530 er, eller CPU problemer er det, eller noe sånt, antar at 1051 00:48:34,530 --> 00:48:38,530 første ATM sjekker saldoen og ser, oh, har denne personen 100 kr. 1052 00:48:38,530 --> 00:48:41,840 Men så blir distrahert fordi kanskje en backup som skjer, og slik at det er 1053 00:48:41,840 --> 00:48:42,500 bremse ned. 1054 00:48:42,500 --> 00:48:45,080 Eller kanskje mens du sjekker, nettverket forbindelse fikk en litt tregere fordi 1055 00:48:45,080 --> 00:48:45,910 dette bare skjer. 1056 00:48:45,910 --> 00:48:47,100 De er fysiske enheter. 1057 00:48:47,100 --> 00:48:49,330 Så i mellomtiden, er den andre ATM spør det samme spørsmålet. 1058 00:48:49,330 --> 00:48:53,030 Hvor mye penger har David? $ 100 er svaret. 1059 00:48:53,030 --> 00:48:58,930 Men fordi den første ATM har ennå ikke sendte meldingen trekke fra $ 100, begge 1060 00:48:58,930 --> 00:49:03,000 Minibanker har inspisert hvelvet bankens, se det er $ 100 der, og nå 1061 00:49:03,000 --> 00:49:07,160 begge maskinene potensielt er kommer til å spytte ut et svar. 1062 00:49:07,160 --> 00:49:12,240 >> Nå, dette er flott for deg i en viss forstand hvis hva banken gjør slutt 1063 00:49:12,240 --> 00:49:17,200 er å endre beløpet til minus 100 ved sette variabelen lik din 1064 00:49:17,200 --> 00:49:21,570 bankkonto lik 0, i motsetning å gjøre minus 100. 1065 00:49:21,570 --> 00:49:24,410 Nå i verste fall for banken - 1066 00:49:24,410 --> 00:49:27,470 eller i det beste for banken, i mellomtiden, de gir deg $ 200, og 1067 00:49:27,470 --> 00:49:31,690 bankkontoen viser nå negativ $ 100, noe som egentlig ikke 1068 00:49:31,690 --> 00:49:32,950 til nytte for deg i det hele tatt. 1069 00:49:32,950 --> 00:49:36,500 Men poenget er at dette løpet betingelse for to romkamerater får 1070 00:49:36,500 --> 00:49:40,660 melk, eller for to minibanker prøver å få penger og endre status for et hvelv 1071 00:49:40,660 --> 00:49:44,510 Samtidig eksisterer noen gang du har en database. 1072 00:49:44,510 --> 00:49:48,290 >> Nå i oppgavesettet syv, dette problemet oppstår i den forstand at hvis du kjøper en 1073 00:49:48,290 --> 00:49:52,110 andel av Facebook lager, og deretter for eksempel du kjøper en andre del av 1074 00:49:52,110 --> 00:49:55,160 Facebook lager, må du gjøre en beslutning som programmerer. 1075 00:49:55,160 --> 00:49:58,710 For å bestemme hvordan du oppdaterer database, oddsen er at du kommer til å 1076 00:49:58,710 --> 00:50:02,250 har en rad for det lager, og denne er en måte å gjennomføre det. 1077 00:50:02,250 --> 00:50:06,640 Og du kommer til å ha en andel av FB, som er deres børssymbol 1078 00:50:06,640 --> 00:50:10,120 for dette brukernavnet, eller denne brukeren ID, den unike identifikator. 1079 00:50:10,120 --> 00:50:12,340 >> Men den samme historien kan skje her. 1080 00:50:12,340 --> 00:50:15,800 Hvis du gjør en SELECT i SQL, som du vil se i oppgavesettet syv når du ser, 1081 00:50:15,800 --> 00:50:18,460 oh, har David en aksje av Facebook lager. 1082 00:50:18,460 --> 00:50:23,240 La meg nå endre dette til å være to aksjer, fordi han ønsker å kjøpe en 1083 00:50:23,240 --> 00:50:24,120 andre aksje. 1084 00:50:24,120 --> 00:50:27,860 Men antar at David hadde faktisk to nettleservinduer åpne, eller anta at 1085 00:50:27,860 --> 00:50:32,150 det er en felles konto med to ektefeller, og begge forsøker å utføre 1086 00:50:32,150 --> 00:50:36,770 samme operasjon, er det også, i potensial for en beslutning om å være 1087 00:50:36,770 --> 00:50:39,670 gjort basert på den forrige tilstanden i verden - 1088 00:50:39,670 --> 00:50:41,290 kontoen har én aksje - 1089 00:50:41,290 --> 00:50:45,630 og både mennesker, eller begge serverne, nå prøv å si øke det til to aksjer. 1090 00:50:45,630 --> 00:50:49,020 Men i dette tilfellet, kan du ha belastet meg penger for både aksjer, men 1091 00:50:49,020 --> 00:50:50,830 økes bare at en gang. 1092 00:50:50,830 --> 00:50:54,730 >> Så kort sagt, den grunnleggende problem her, som med spøk om å forlate en 1093 00:50:54,730 --> 00:50:58,750 oppmerksom på, eller å sette en hengelås på det, er Hvis to personer, eller to tråder - 1094 00:50:58,750 --> 00:50:59,930 tenker tilbake til scratch - 1095 00:50:59,930 --> 00:51:03,220 kan sjekke status på noen variable og deretter prøve å endre den variabelen, 1096 00:51:03,220 --> 00:51:07,950 men de to tingene ikke skjer på samme tid, men kan bli avbrutt 1097 00:51:07,950 --> 00:51:11,500 av andre ting som skjer, data kan komme inn i en veldig merkelig tilstand. 1098 00:51:11,500 --> 00:51:15,450 Og du kan ha nytte eller du kan lide som omhandlet i eksempel penger. 1099 00:51:15,450 --> 00:51:18,110 >> Så i oppgavesettet syv, gir vi deg dette en kodelinje, som lenge 1100 00:51:18,110 --> 00:51:21,000 historie kort, løser dette problem i MySQL. 1101 00:51:21,000 --> 00:51:24,950 Denne svært lang opplæring som ikke selv plass på én linje på 1102 00:51:24,950 --> 00:51:30,370 skjermen her sikrer at driften er det som kalles atom. 1103 00:51:30,370 --> 00:51:33,720 Det skjer alt på en gang, eller det skjer ikke i det hele tatt. 1104 00:51:33,720 --> 00:51:37,530 Denne svært lang setning kan ikke bli avbrutt delvis. 1105 00:51:37,530 --> 00:51:39,840 >> Og hva den gjør er bokstavelig talt hva den sier. 1106 00:51:39,840 --> 00:51:44,200 Sett inn noen tabell følgende tre felt de bestemte verdier, 1107 00:51:44,200 --> 00:51:47,280 men på like nøkler, ikke gjør en innsats. 1108 00:51:47,280 --> 00:51:48,280 Gjør en oppdatering. 1109 00:51:48,280 --> 00:51:52,450 Så dette er som å gjøre en SELECT og en SETT så å si på samme tid. 1110 00:51:52,450 --> 00:51:55,150 Og hva er nøkkelen det er sannsynligvis blir referert til her? 1111 00:51:55,150 --> 00:51:58,300 1112 00:51:58,300 --> 00:52:01,380 >> Det viser seg, og du vil se dette i Problemet satt syv sin spec, fordi 1113 00:52:01,380 --> 00:52:06,040 vi har erklært at det skal være en unik nøkkel på denne tabellen slik at 1114 00:52:06,040 --> 00:52:08,480 du kan ikke ha flere rader for samme bruker med 1115 00:52:08,480 --> 00:52:10,150 samme penny stock symbol - 1116 00:52:10,150 --> 00:52:13,780 i dette eksempelet her, er DVN.V en dum penny stock at vi 1117 00:52:13,780 --> 00:52:14,980 se i spec. 1118 00:52:14,980 --> 00:52:17,860 Fordi vi har erklært det å være unik, hva dette betyr er at hvis du 1119 00:52:17,860 --> 00:52:23,580 prøver å sette inn en kopi rad, er du i stedet kommer til å oppdatere den uten 1120 00:52:23,580 --> 00:52:27,020 noen andre som har en sjanse til å snu tilstanden av verden heller. 1121 00:52:27,020 --> 00:52:29,400 Så kort sagt, sikrer dette ting er atom. 1122 00:52:29,400 --> 00:52:32,530 >> Mer generelt skjønt, databaser som MySQL - 1123 00:52:32,530 --> 00:52:35,460 og du ikke trenger denne funksjonen for p-satt sju, men holde det i tankene for 1124 00:52:35,460 --> 00:52:36,200 fremtiden - 1125 00:52:36,200 --> 00:52:38,870 støtter det som kalles transaksjoner, der du kan si 1126 00:52:38,870 --> 00:52:40,990 START TRANS bokstavelig. 1127 00:52:40,990 --> 00:52:43,270 Du kan deretter utføre to SQL-setninger. 1128 00:52:43,270 --> 00:52:45,710 Og en SQL-setning, som du vil se ip-satt sju, ser litt 1129 00:52:45,710 --> 00:52:46,750 noe sånt som dette. 1130 00:52:46,750 --> 00:52:48,820 Oppdatere en tabell kalt konto. 1131 00:52:48,820 --> 00:52:52,550 Innstill balansen kolonnen lik uansett balansen kolonnen for tiden 1132 00:52:52,550 --> 00:52:57,280 er minus 1000 hvor tallet, den kontonummer, som bruker-ID, 1133 00:52:57,280 --> 00:53:00,830 lik 2, og deretter oppdatere konto dot dot dot. 1134 00:53:00,830 --> 00:53:04,350 >> Så i lekmann vilkår, hva gjør disse to spørsmål synes å være å gjøre i 1135 00:53:04,350 --> 00:53:05,840 virkelige verden følelse av bank? 1136 00:53:05,840 --> 00:53:07,440 >> PUBLIKUM: Overføring til besparelser. 1137 00:53:07,440 --> 00:53:08,020 >> DAVID MALAN: Nettopp. 1138 00:53:08,020 --> 00:53:10,470 Overføre penger fra en kontoen til den andre. 1139 00:53:10,470 --> 00:53:14,400 Og dette er et annet eksempel hvor du virkelig ønsker disse to ting til å skje 1140 00:53:14,400 --> 00:53:15,570 eller ikke skje. 1141 00:53:15,570 --> 00:53:18,880 Du ønsker ikke noe å komme i midten av disse, og potensielt rote 1142 00:53:18,880 --> 00:53:22,220 regnestykket, eller rote opp hvor mye penger du har, eller hvor mye 1143 00:53:22,220 --> 00:53:23,170 pengene i banken har. 1144 00:53:23,170 --> 00:53:26,890 Så hva er egentlig fint om transaksjoner i MySQL er det, og 1145 00:53:26,890 --> 00:53:30,160 databaser mer generelt, er at de og smarte folk som har implementert 1146 00:53:30,160 --> 00:53:33,670 disse funksjonene finne ut hvordan de skal gjøre sikker på at begge disse tingene skje 1147 00:53:33,670 --> 00:53:35,120 eller ikke i det hele tatt. 1148 00:53:35,120 --> 00:53:38,580 >> Og hvis du er virkelig håper å gjøre et nettsted som brukes av folk på 1149 00:53:38,580 --> 00:53:41,490 campus, folk i den virkelige verden, gjør noe i oppstarts forstand, 1150 00:53:41,490 --> 00:53:43,300 disse er de typer design beslutninger som 1151 00:53:43,300 --> 00:53:45,020 blitt aldri så viktig. 1152 00:53:45,020 --> 00:53:48,240 Ellers begynner du å miste data, mister brukere, eller i verste fall i 1153 00:53:48,240 --> 00:53:51,800 vi har sett her, potensielt tape penger. 1154 00:53:51,800 --> 00:53:56,180 Så igjen, mer om det i oppgavesettet syv, samt kanskje for noen av 1155 00:53:56,180 --> 00:53:57,530 du i slutt prosjekter. 1156 00:53:57,530 --> 00:54:01,870 >> Så la oss endre det bildet vi hadde et øyeblikk siden bare på enda en måte. 1157 00:54:01,870 --> 00:54:04,070 Så la meg faktisk se om jeg kan - 1158 00:54:04,070 --> 00:54:06,030 nope, det er borte. 1159 00:54:06,030 --> 00:54:06,690 Det er det. 1160 00:54:06,690 --> 00:54:09,020 >> Så det er her vi igjen sist. 1161 00:54:09,020 --> 00:54:12,390 Og det viser seg at vi kommer til å kaste en ting inn i miksen her - 1162 00:54:12,390 --> 00:54:14,510 et språk som heter Javascript. 1163 00:54:14,510 --> 00:54:18,060 Så Java faktisk passer inn i dette stykket - 1164 00:54:18,060 --> 00:54:22,086 og jeg visste ikke helt forlate nok plass, så dette er ikke nå å skalere. 1165 00:54:22,086 --> 00:54:23,900 OK, dette er virkelig patetisk. 1166 00:54:23,900 --> 00:54:27,075 OK, så det er Script. 1167 00:54:27,075 --> 00:54:27,340 OK. 1168 00:54:27,340 --> 00:54:28,760 Jeg er virkelig gjør det en bjørnetjeneste. 1169 00:54:28,760 --> 00:54:29,390 OK. 1170 00:54:29,390 --> 00:54:34,790 >> Så Javascript er et annet programmerings språk, og vår siste, hvis det hjelper 1171 00:54:34,790 --> 00:54:37,770 berolige at det er ikke mye mer av brannhydranter her. 1172 00:54:37,770 --> 00:54:41,100 Så Javascript er også en tolket språk, noe som betyr at du ikke 1173 00:54:41,100 --> 00:54:42,670 kompilere den inn nuller og enere. 1174 00:54:42,670 --> 00:54:43,690 Du bare kjøre den. 1175 00:54:43,690 --> 00:54:47,680 Men hva er fundamentalt annerledes med Java regel er at du 1176 00:54:47,680 --> 00:54:49,815 ikke kjøre den på webserveren din. 1177 00:54:49,815 --> 00:54:52,570 Det blir ikke kjørt i Apparatet per se. 1178 00:54:52,570 --> 00:54:57,490 Snarere blir det lastet ned av en bruker via HTTP i nettleseren - 1179 00:54:57,490 --> 00:55:00,260 Chrome, Safari, Internet Explorer, Firefox, uansett - 1180 00:55:00,260 --> 00:55:03,860 og det er nettleseren som utfører dette bestemt programmeringsspråk. 1181 00:55:03,860 --> 00:55:08,000 >> Så for å være klar, PHP hittil har vært utføres enten på kommandolinjen i 1182 00:55:08,000 --> 00:55:11,290 vår svarte og hvite vinduet, på en server ut av apparatet, en datamaskin 1183 00:55:11,290 --> 00:55:14,490 liker apparatet, eller det har vært henrettet av en web-server 1184 00:55:14,490 --> 00:55:15,860 kjører på en datamaskin. 1185 00:55:15,860 --> 00:55:20,490 Men temaet her er at PHP hittil har blitt utført på serversiden, så 1186 00:55:20,490 --> 00:55:24,820 brukeren og brukerens nettleser aldri ser en linje av PHP-kode. 1187 00:55:24,820 --> 00:55:28,530 >> Faktisk, hvis du noen gang åpne en nettleser for din nettside eller en annen, og du 1188 00:55:28,530 --> 00:55:32,400 faktisk se PHP-kode i vinduet, noen har skrudd opp. 1189 00:55:32,400 --> 00:55:34,950 Fordi det ikke er ment å være sendes til en browser direkte. 1190 00:55:34,950 --> 00:55:38,150 Det er ment å bli henrettet og slått til noe som HTML. 1191 00:55:38,150 --> 00:55:40,120 >> Men Javascript er egentlig motsatt. 1192 00:55:40,120 --> 00:55:44,350 Det er ment for å kjøres vanligvis inne av en brukers nettleser vindu. 1193 00:55:44,350 --> 00:55:46,840 Og hva slags nettsteder bruker Java deretter i disse dager? 1194 00:55:46,840 --> 00:55:49,640 1195 00:55:49,640 --> 00:55:52,180 >> Som bokstavelig talt hver populære nettsiden. 1196 00:55:52,180 --> 00:55:55,430 Hver nettside som dere sannsynligvis bruker daglig bruker Javascript for at den 1197 00:55:55,430 --> 00:55:57,330 enkleste og selv sexiest funksjoner. 1198 00:55:57,330 --> 00:55:59,800 >> Så noe sånt som Facebook Chat hvis du bruker det. 1199 00:55:59,800 --> 00:56:01,040 Hvordan det faktisk fungerer? 1200 00:56:01,040 --> 00:56:05,090 Vel så langt, alle de ting vi har gjøres med HTML og PHP forutsetter at 1201 00:56:05,090 --> 00:56:08,750 du trekker opp en URL, og du trykker på Enter, og du se noen HTML-innhold. 1202 00:56:08,750 --> 00:56:11,970 Og du klikker på linken, som endrer URL, endrer siden, og laster 1203 00:56:11,970 --> 00:56:12,740 noe nytt innhold. 1204 00:56:12,740 --> 00:56:16,340 Klikk på en annen URL eller sende inn et skjema, du bli tatt til en annen side og 1205 00:56:16,340 --> 00:56:17,420 du se noe nytt innhold. 1206 00:56:17,420 --> 00:56:22,710 >> Men å bruke noe sånt som Facebook Chat, eller Gchat eller Google Maps, sjelden 1207 00:56:22,710 --> 00:56:27,350 ikke hele siden oppdatere slik at du ser en hvit skjerm øyeblikk og 1208 00:56:27,350 --> 00:56:28,470 deretter nytt innhold. 1209 00:56:28,470 --> 00:56:32,610 Snarere nettsider i dag er dynamisk å bli oppdatert igjen og 1210 00:56:32,610 --> 00:56:35,570 igjen og igjen alle slags av bak kulissene. 1211 00:56:35,570 --> 00:56:38,560 Og det viser seg at når du går til noe sånt som Facebook, eller Gchat, 1212 00:56:38,560 --> 00:56:43,050 eller Gmail, og oppdateres siden automatisk uten å laste 1213 00:56:43,050 --> 00:56:47,630 hele skjermen, hva som har skjedd, er at nettleseren har gjort slags hemmelighet 1214 00:56:47,630 --> 00:56:49,410 flere HTTP-forespørsler - 1215 00:56:49,410 --> 00:56:52,740 ikke for hele nettsider, men bare for små biter av data, som 1216 00:56:52,740 --> 00:56:55,740 direktemelding at vennen din bare sendte deg, eller statusoppdateringen som 1217 00:56:55,740 --> 00:56:58,210 noen har akkurat sendt deg, eller tweet at noen bare sendt. 1218 00:56:58,210 --> 00:57:02,120 Det er bare å lage små forespørsler om data, og deretter bruke JavaScript, dette 1219 00:57:02,120 --> 00:57:06,370 programmeringsspråk, for å endre det web-siden ser ut uten 1220 00:57:06,370 --> 00:57:09,860 Serveren hjelpende, uten at serveren genererer som HTML. 1221 00:57:09,860 --> 00:57:13,820 >> Så kort sagt, kan JavaScript brukes deretter å ikke bare hente nye data fra 1222 00:57:13,820 --> 00:57:16,750 serveren uten omlasting helhet side eller sende inn et skjema. 1223 00:57:16,750 --> 00:57:20,060 Den kan også brukes til å endre den såkalte DOM - 1224 00:57:20,060 --> 00:57:21,520 Document Object Model - 1225 00:57:21,520 --> 00:57:24,620 som er akkurat den fancy måte for sier tre av HTML 1226 00:57:24,620 --> 00:57:26,220 som vi så forrige gang. 1227 00:57:26,220 --> 00:57:31,640 >> Så for å berolige, er JavaScript syntaktisk så lik C også. 1228 00:57:31,640 --> 00:57:32,820 Det er ingen hovedfunksjon. 1229 00:57:32,820 --> 00:57:35,430 Du bare begynne å skrive koden og det vil bli utført, eller 1230 00:57:35,430 --> 00:57:36,900 tolkes mer riktig. 1231 00:57:36,900 --> 00:57:38,660 Forholdene vil se slik ut. 1232 00:57:38,660 --> 00:57:41,230 Ikke forskjellig fra C eller PHP for den saks skyld. 1233 00:57:41,230 --> 00:57:43,890 Boolske uttrykk eller-ed sammen vil se slik ut. 1234 00:57:43,890 --> 00:57:45,590 Anded sammen se slik ut. 1235 00:57:45,590 --> 00:57:47,750 >> Brytere vil se slik ut. 1236 00:57:47,750 --> 00:57:49,440 For løkker vil se slik ut. 1237 00:57:49,440 --> 00:57:51,060 Mens løkker vil se slik ut. 1238 00:57:51,060 --> 00:57:53,316 Gjøre mens loops vil se slik ut. 1239 00:57:53,316 --> 00:57:54,780 >> Dette er nytt. 1240 00:57:54,780 --> 00:57:58,753 Så JavaScript har ikke en foreach konstruere per se, men denne konstruere 1241 00:57:58,753 --> 00:58:03,870 for variabel i i array, og jeg i dette saken blir en indeksverdi. 1242 00:58:03,870 --> 00:58:06,880 Så det er litt forskjellig fra det foreach, men nye versjoner av 1243 00:58:06,880 --> 00:58:10,280 JavaScript kommer ut hele tiden, så selv disse språk har 1244 00:58:10,280 --> 00:58:10,880 er i utvikling. 1245 00:58:10,880 --> 00:58:16,920 >> Og som en digresjon, JavaScript disse dager kan også brukes på en server i likhet 1246 00:58:16,920 --> 00:58:19,920 PHP bruker et rammeverk kalt node.js. 1247 00:58:19,920 --> 00:58:24,670 En av CS50 er TFS, Kevin, har ledet en seminar om Node.js som er tilgjengelig på 1248 00:58:24,670 --> 00:58:26,440 cs50.net/seminars. 1249 00:58:26,440 --> 00:58:28,830 Så hvis du er nysgjerrig, vet at du kan bruke denne på serversiden som 1250 00:58:28,830 --> 00:58:33,870 vel, men det er en ganske nylig trend, men en kraftig en på det. 1251 00:58:33,870 --> 00:58:35,270 >> Dette er litt annerledes. 1252 00:58:35,270 --> 00:58:37,910 Dette er en array i JavaScript. 1253 00:58:37,910 --> 00:58:40,115 Og det som slår deg som annerledes versus C eller PHP? 1254 00:58:40,115 --> 00:58:43,890 1255 00:58:43,890 --> 00:58:47,420 Det er noen raske historier vi kan si her. 1256 00:58:47,420 --> 00:58:49,367 Hva mangler versus PHP? 1257 00:58:49,367 --> 00:58:51,652 >> PUBLIKUM: [uhørlig]. 1258 00:58:51,652 --> 00:58:52,110 >> DAVID MALAN: Ja? 1259 00:58:52,110 --> 00:58:53,322 Beklager, si igjen? 1260 00:58:53,322 --> 00:58:54,740 >> PUBLIKUM: Ikke erklære variabeltypen. 1261 00:58:54,740 --> 00:58:56,390 >> DAVID MALAN: Vi er ikke erklære variabeltypen. 1262 00:58:56,390 --> 00:58:59,630 Så egentlig helt som PHP, vi er ikke spesifisere hvilke typer denne variabelen. 1263 00:58:59,630 --> 00:59:02,670 Snarere er vi mer generelt sier Div. for variabel. 1264 00:59:02,670 --> 00:59:06,690 Vi har ikke PHP ordensforstyrrelser av dollartegn, som samtidig kjedelig å 1265 00:59:06,690 --> 00:59:09,160 type, gjør mer klart at noe er en variabel. 1266 00:59:09,160 --> 00:59:11,830 Mens her er vi liksom tilbake til C tilnærming ved bare å ringe en 1267 00:59:11,830 --> 00:59:14,500 variabel ved navn vi ønsker for å gi den, som tall. 1268 00:59:14,500 --> 00:59:17,170 Og også som PHP, har vi klammer for 1269 00:59:17,170 --> 00:59:19,170 verdier inne denne matrisen. 1270 00:59:19,170 --> 00:59:22,490 >> Så variabler i JavaScript også kan se slik ut. 1271 00:59:22,490 --> 00:59:26,900 Legg merke til her dette er en streng som heter s, men på samme måte har vi ikke spesifisert 1272 00:59:26,900 --> 00:59:28,750 at det er en streng. 1273 00:59:28,750 --> 00:59:33,160 Her er skjønt en funksjon som ikke eksistere på nøyaktig samme måte i PHP, 1274 00:59:33,160 --> 00:59:34,460 men litt på samme måte. 1275 00:59:34,460 --> 00:59:36,530 Dette er et objekt i JavaScript. 1276 00:59:36,530 --> 00:59:42,110 Og objekter er liksom den sveitsiske hæren Kniv av en datastruktur i at du 1277 00:59:42,110 --> 00:59:43,900 kan bruke dem for en rekke ting. 1278 00:59:43,900 --> 00:59:46,860 >> Her, for eksempel, vi erklære en variabel kalt sitat. 1279 00:59:46,860 --> 00:59:49,110 Typen av den variabel er et objekt. 1280 00:59:49,110 --> 00:59:53,550 Du kan tenke på dette som en C struct som har nøkler og verdier. 1281 00:59:53,550 --> 00:59:55,250 Symbol er en nøkkel. 1282 00:59:55,250 --> 00:59:57,350 FB er en verdi, tilsynelatende en aksje symbol. 1283 00:59:57,350 --> 00:59:57,930 Komma. 1284 00:59:57,930 --> 01:00:02,180 Prisen er en annen tast, og verdien er tilsynelatende et flyttall, eller en 1285 01:00:02,180 --> 01:00:06,510 nummer mer generelt i JavaScript, for $ 49,26. 1286 01:00:06,510 --> 01:00:09,030 >> Så PHP ikke har - 1287 01:00:09,030 --> 01:00:12,980 vi ikke har sett i PHP gjenstander ganske som dette, men vi fikk se en analog, 1288 01:00:12,980 --> 01:00:14,093 som var det? 1289 01:00:14,093 --> 01:00:14,980 >> PUBLIKUM: [uhørlig]. 1290 01:00:14,980 --> 01:00:16,110 >> DAVID MALAN: assosiative arrays. 1291 01:00:16,110 --> 01:00:19,990 Så mens PHP har assosiative matriser hvis syntaks er alltid litt slik 1292 01:00:19,990 --> 01:00:20,370 annerledes - 1293 01:00:20,370 --> 01:00:21,780 vi så hakeparenteser. 1294 01:00:21,780 --> 01:00:23,860 Vi så de rare piler symboler. 1295 01:00:23,860 --> 01:00:27,330 JavaScript har gjenstander, men dette er det meste en semantisk forskjell og en 1296 01:00:27,330 --> 01:00:29,260 annet synonym for nå. 1297 01:00:29,260 --> 01:00:35,060 Men som en digresjon, har PHP også gjenstander på en måte som Java og annen 1298 01:00:35,060 --> 01:00:37,810 språk har objekter i objektorientert programmering. 1299 01:00:37,810 --> 01:00:40,440 Men vi vil bruke disse bare for datatyper for nå. 1300 01:00:40,440 --> 01:00:42,170 Objekter og assosiative matriser. 1301 01:00:42,170 --> 01:00:44,140 >> Dette kan gjøre det litt mer tydelig. 1302 01:00:44,140 --> 01:00:45,890 Her er hvorfor et objekt er nyttig. 1303 01:00:45,890 --> 01:00:48,760 Når du ønsker å erklære en student, som Zamyla, kan vi faktisk 1304 01:00:48,760 --> 01:00:52,630 kapsle så å si inne i det objekt med klammeparentesene akkurat som 1305 01:00:52,630 --> 01:00:55,060 før en hel haug med nøkler og verdier i her. 1306 01:00:55,060 --> 01:00:59,150 Vi har en ID, et hus, og et navn Zamyla, etterfulgt av et semikolon som 1307 01:00:59,150 --> 01:01:00,690 vanlig ved slutten. 1308 01:01:00,690 --> 01:01:04,840 >> Ned her også, er dette litt forskjellig, men også meget kraftig 1309 01:01:04,840 --> 01:01:05,690 disse dager. 1310 01:01:05,690 --> 01:01:08,780 Her er en matrise, og jeg vet at fordi det er en hakeparentes opp 1311 01:01:08,780 --> 01:01:11,090 topp og en firkantet brakett nederst. 1312 01:01:11,090 --> 01:01:16,050 Og dette er et utvalg av hva data skriver tilsynelatende i Javascript? 1313 01:01:16,050 --> 01:01:21,260 Dette er et utvalg av det ser ut som tre stedene. 1314 01:01:21,260 --> 01:01:24,580 Og jeg vet det er et objekt bare på grunn av de klammeparentes. 1315 01:01:24,580 --> 01:01:28,760 Og legg merke til det er åpent klammeparentes, noen ting, tett krøllete brace, komma, 1316 01:01:28,760 --> 01:01:31,180 deretter litt mer, komma, og deretter litt mer. 1317 01:01:31,180 --> 01:01:33,800 Så det er tre argumenter atskilt med to komma. 1318 01:01:33,800 --> 01:01:36,810 >> Så dette er en rekke tre stedene. 1319 01:01:36,810 --> 01:01:39,940 Og hver av disse objektene ser ut til å være en student eller ansatt av noen 1320 01:01:39,940 --> 01:01:42,370 sortere, hver med en ID, huset, og navn. 1321 01:01:42,370 --> 01:01:45,060 Men jeg har kalt dette noe kalt JSON - 1322 01:01:45,060 --> 01:01:47,450 Javascript Object Notation. 1323 01:01:47,450 --> 01:01:52,060 Og dette er et dataformat som faktisk er så veldig populær og i 1324 01:01:52,060 --> 01:01:55,100 moten i disse dager at hvis du skriver en program som bruker Facebook 1325 01:01:55,100 --> 01:01:59,150 API, Twitter API, egentlig nesten noen API ute i disse dager, 1326 01:01:59,150 --> 01:02:02,820 inkludert noen av CS50 sin egen, den data du får tilbake er ikke i 1327 01:02:02,820 --> 01:02:04,720 gamle skolen CSV-format. 1328 01:02:04,720 --> 01:02:06,780 >> Fordi tilbakekalling som CSV er super enkelt. 1329 01:02:06,780 --> 01:02:10,230 Det er bare kolonner adskilt med komma. 1330 01:02:10,230 --> 01:02:13,190 JSON data gir deg flere metadata. 1331 01:02:13,190 --> 01:02:17,800 Det knytter en nøkkel med hver verdi så de trenger ikke å bare anta at 1332 01:02:17,800 --> 01:02:22,460 zeroth kolonnen er en verdi, kolonne en er et annet, to kolonne er en annen. 1333 01:02:22,460 --> 01:02:26,790 Alt i en JSON objekt her er liksom av selvbeskrivende, fordi hver 1334 01:02:26,790 --> 01:02:30,940 ett av navnene i denne filen har bokstavelig talt navn foran det som en 1335 01:02:30,940 --> 01:02:32,510 sitert streng. 1336 01:02:32,510 --> 01:02:34,950 >> Så la oss ta en titt på en par eksempler her. 1337 01:02:34,950 --> 01:02:36,800 La meg gå inn i apparatet. 1338 01:02:36,800 --> 01:02:41,000 Og la meg gå inn i vår vhost katalog i offentligheten. 1339 01:02:41,000 --> 01:02:45,590 Og la meg gå inn i Java katalogen. 1340 01:02:45,590 --> 01:02:49,610 Og la oss gå videre og åpne opp dom-0.html, hvor DOM betyr bare 1341 01:02:49,610 --> 01:02:51,010 Document Object Model. 1342 01:02:51,010 --> 01:02:53,490 Det er tre ting som Jeg refererte til tidligere. 1343 01:02:53,490 --> 01:02:54,950 >> Og la meg foreslå følgende. 1344 01:02:54,950 --> 01:02:57,720 Her er en nettside som har Kroppen er ganske enkel. 1345 01:02:57,720 --> 01:03:00,170 Så her nede på bunnen, merker jeg har et skjema. 1346 01:03:00,170 --> 01:03:01,500 Vi har sett dem før. 1347 01:03:01,500 --> 01:03:07,600 Den har to innganger, hvorav den ene har en ID av navnet, hvorav den ene har en type 1348 01:03:07,600 --> 01:03:09,830 sende, og den første ens typen er tekst. 1349 01:03:09,830 --> 01:03:11,900 Så dette faktisk høres ganske enkel. 1350 01:03:11,900 --> 01:03:13,090 >> La oss gå her. 1351 01:03:13,090 --> 01:03:15,390 La oss gå tilbake til denne siden her. 1352 01:03:15,390 --> 01:03:21,030 La oss gå inn localhost, og gå inn i vår Java katalogen, og gå til 1353 01:03:21,030 --> 01:03:24,640 dom-0, og her har vi dette skjemaet. 1354 01:03:24,640 --> 01:03:26,550 Så det er tydeligvis all denne siden gjør. 1355 01:03:26,550 --> 01:03:28,740 Den har en navnefeltet med en Send-knappen. 1356 01:03:28,740 --> 01:03:30,340 Men jeg har ikke tenkt å bruke PHP her. 1357 01:03:30,340 --> 01:03:34,310 Jeg kommer til å gjøre alt klientsiden så å si i Javascript som følger. 1358 01:03:34,310 --> 01:03:39,100 >> Legg merke til at jeg har faktisk gitt navnet felt av denne inngangen en unik 1359 01:03:39,100 --> 01:03:42,350 identifikator, som faktisk vil spare meg litt tid i et øyeblikk. 1360 01:03:42,350 --> 01:03:45,480 Og legg merke til jeg har introdusert en annen tag i hodet av min webside, 1361 01:03:45,480 --> 01:03:46,565  tag. 1362 01:03:46,565 --> 01:03:50,120 >> Så det er i denne forstand at Javascript er en klient-side programmeringsspråk. 1363 01:03:50,120 --> 01:03:55,020 I dette tilfellet, akkurat som CSS, har jeg satt det rett på innsiden av min HTML. 1364 01:03:55,020 --> 01:03:58,810 Men merker jeg har erklært en funksjon som ser litt ut som PHP 1365 01:03:58,810 --> 01:04:01,530 syntaktisk, men dette er egentlig Javascript, fordi igjen, er det 1366 01:04:01,530 --> 01:04:03,920 klientsiden i nettleseren. 1367 01:04:03,920 --> 01:04:07,590 Og ta en gjetning på hva dette kommer til å do, selv om noen av syntaksen 1368 01:04:07,590 --> 01:04:09,338 her er nye. 1369 01:04:09,338 --> 01:04:11,760 >> PUBLIKUM: Si hei til den som. 1370 01:04:11,760 --> 01:04:14,020 >> DAVID MALAN: Det kommer til å si hei til den som besøker denne siden. 1371 01:04:14,020 --> 01:04:15,120 Så hvordan? 1372 01:04:15,120 --> 01:04:18,070 >> Så legger merke til, det viser seg i Javascript det er et varsel ()-funksjonen. 1373 01:04:18,070 --> 01:04:22,840 Dette er en meget slags trist funksjon som egentlig bare har en tendens til å irritere brukerne. 1374 01:04:22,840 --> 01:04:25,440 Det er ikke en du bør virkelig bruke typisk, men det er en rask og skitten 1375 01:04:25,440 --> 01:04:27,710 måte å liksom skrive noe til et grafisk brukergrensesnitt 1376 01:04:27,710 --> 01:04:29,180 grensesnitt, som en nettleser. 1377 01:04:29,180 --> 01:04:31,400 Legg merke til her at jeg har fått en streng i enkle anførselstegn. 1378 01:04:31,400 --> 01:04:36,010 Det viser seg at i motsetning til C, Java kan faktisk ha du bruke singel 1379 01:04:36,010 --> 01:04:38,730 sitater, og ærlig talt det er bare snill av den stilistiske konvensjonen blant 1380 01:04:38,730 --> 01:04:41,180 Javascript programmerere å bruke apostrof. 1381 01:04:41,180 --> 01:04:43,750 PHP, de faktisk har litt annen betydning. 1382 01:04:43,750 --> 01:04:45,810 Men for nå, bare vet at det er den eneste grunnen. 1383 01:04:45,810 --> 01:04:49,270 Konvensjonen i Javascript er ofte å bruke apostrof, men vi kunne bruke 1384 01:04:49,270 --> 01:04:50,950 doble anførselstegn i begge steder også. 1385 01:04:50,950 --> 01:04:52,610 >> Så dette er interessant. 1386 01:04:52,610 --> 01:04:56,430 Husker sist gang at vi hadde som bilde på skjermen som trakk et tre 1387 01:04:56,430 --> 01:04:59,720 hvor du hadde HTML-noden, og hodet node, og legemet node, 1388 01:04:59,720 --> 01:05:00,800 og litt tekst. 1389 01:05:00,800 --> 01:05:04,700 Men det var en spesiell node på Helt øverst på at jeg kalte dokumentet. 1390 01:05:04,700 --> 01:05:08,260 Vel, det viser seg i Javascript, noe gang du skriver et program i Javascript 1391 01:05:08,260 --> 01:05:11,040 i en nettleser, har du tilgang til en spesiell global variabel. 1392 01:05:11,040 --> 01:05:14,130 Lignende i ånden til PHPs superglobals, dette kalles i 1393 01:05:14,130 --> 01:05:16,050 små bokstaver dokument. 1394 01:05:16,050 --> 01:05:21,480 >> Det er som en struct, men dette struct har også funksjoner inne for det. 1395 01:05:21,480 --> 01:05:23,790 Så en C struct bare har data typisk. 1396 01:05:23,790 --> 01:05:29,060 Men en Javascript-objekt som dette teknisk er også har funksjoner, 1397 01:05:29,060 --> 01:05:31,830 ellers kjent som fremgangsmåter, på innsiden av den. 1398 01:05:31,830 --> 01:05:35,750 Og du kan kalle en funksjon innsiden av dette objektet bokstavelig talt gjør sitt 1399 01:05:35,750 --> 01:05:39,610 navn, prikk, og deretter navnet på funksjon, eller igjen metode. 1400 01:05:39,610 --> 01:05:41,160 Det er bare et synonym, egentlig. 1401 01:05:41,160 --> 01:05:42,450 >> Og hva gjør denne funksjonen gjør? 1402 01:05:42,450 --> 01:05:43,840 Du kan slags gjette fra navnet. 1403 01:05:43,840 --> 01:05:45,590 Få element av ID. 1404 01:05:45,590 --> 01:05:50,040 Så dette kommer til å søke på nettsiden, søke det treet, på jakt etter 1405 01:05:50,040 --> 01:05:55,210 uansett node, AKA element, har en unik ID sitat unquote navn. 1406 01:05:55,210 --> 01:05:56,560 Og hva skal jeg gjøre? 1407 01:05:56,560 --> 01:06:00,350 Jeg kommer til å få verdien på innsiden av at node i treet, og jeg kommer 1408 01:06:00,350 --> 01:06:02,580 å liksom si hei til det navnet. 1409 01:06:02,580 --> 01:06:05,360 >> Så ta en gjetning, selv om vi har ikke sett denne ennå, hva gjør pluss 1410 01:06:05,360 --> 01:06:07,396 symbolene betyr her og her trolig? 1411 01:06:07,396 --> 01:06:08,230 >> PUBLIKUM: Slå sammen. 1412 01:06:08,230 --> 01:06:09,220 >> DAVID MALAN: Slå sammen. 1413 01:06:09,220 --> 01:06:11,290 Høyre, og disse er bare slags utforme beslutninger 1414 01:06:11,290 --> 01:06:12,280 folk gjorde år siden. 1415 01:06:12,280 --> 01:06:15,190 I PHP, sette sammen du ting med prikker. 1416 01:06:15,190 --> 01:06:18,800 I C, hoppe deg gjennom flere hoops og kaller funksjoner som strCopy () eller 1417 01:06:18,800 --> 01:06:20,600 strcat () eller andre slike funksjoner. 1418 01:06:20,600 --> 01:06:22,060 Men i Javascript, bruker du plusser. 1419 01:06:22,060 --> 01:06:24,770 Så dette er bare lenke sammen tre strenger - 1420 01:06:24,770 --> 01:06:27,850 hei, et navn, og deretter et utropstegn. 1421 01:06:27,850 --> 01:06:30,390 >> Så når og hvorfor er denne funksjonen heter skjønt? 1422 01:06:30,390 --> 01:06:33,150 Vel, ta en gjetning fra HTML nederst. 1423 01:06:33,150 --> 01:06:35,810 Hvorfor er hilse () kalt, eller når? 1424 01:06:35,810 --> 01:06:39,730 1425 01:06:39,730 --> 01:06:44,030 >> Angivelig, som best kan jeg fortelle, på sende, når dette skjemaet er sendt, 1426 01:06:44,030 --> 01:06:47,200 Jeg kommer til å gjøre det som er innsiden av disse sitatene. 1427 01:06:47,200 --> 01:06:50,900 Og spesielt, jeg kommer til å ringe hilse () og deretter returnere false. 1428 01:06:50,900 --> 01:06:53,090 >> Vel, la oss se hva netto Effekten her er først. 1429 01:06:53,090 --> 01:06:58,290 Så la meg gå videre og skriver i, sier Loren, Submit. 1430 01:06:58,290 --> 01:06:59,440 Hei Loren. 1431 01:06:59,440 --> 01:07:02,990 La oss se om kanskje dette var bare en heldig gjennomføring. 1432 01:07:02,990 --> 01:07:03,200 Nope. 1433 01:07:03,200 --> 01:07:05,990 Så det å skrive ut uansett nevne jeg faktisk satt der. 1434 01:07:05,990 --> 01:07:07,970 >> Men legg merke til hva som ikke forandrer seg. 1435 01:07:07,970 --> 01:07:10,360 Webadressen er fortsatt dom-0.html. 1436 01:07:10,360 --> 01:07:11,820 Det er ingen register.php. 1437 01:07:11,820 --> 01:07:13,110 Det er ingen andre filen. 1438 01:07:13,110 --> 01:07:14,930 Det er ingen handling attributt. 1439 01:07:14,930 --> 01:07:19,720 Så hva er denne avkastningen falsk antagelig gjør? 1440 01:07:19,720 --> 01:07:23,660 Hvorfor kaller Jeg hilser () og deretter returnere falsk trolig? 1441 01:07:23,660 --> 01:07:26,420 Hva vanligvis skjer når du klikker Send inn på et skjema at selv vi har 1442 01:07:26,420 --> 01:07:27,854 sett i den siste uken? 1443 01:07:27,854 --> 01:07:29,900 >> PUBLIKUM: [uhørbart]. 1444 01:07:29,900 --> 01:07:30,860 >> DAVID MALAN: Det går et sted, ikke sant? 1445 01:07:30,860 --> 01:07:32,720 Det går til noen URL destinasjon. 1446 01:07:32,720 --> 01:07:34,120 Men jeg ønsker ikke at det skal skje her. 1447 01:07:34,120 --> 01:07:37,620 Jeg vil ha min webside for å være helt dynamisk som Gmail, der når du er 1448 01:07:37,620 --> 01:07:38,650 der, holde deg der. 1449 01:07:38,650 --> 01:07:42,900 Nettadressen endrer ikke på en måte som indikerer hele siden er omlasting. 1450 01:07:42,900 --> 01:07:46,680 Snarere, jeg bare ønsker å endre noe liker å skrive ut noe 1451 01:07:46,680 --> 01:07:48,320 her på skjermen. 1452 01:07:48,320 --> 01:07:49,630 >> Vel la meg rense dette opp en liten bit. 1453 01:07:49,630 --> 01:07:55,370 La meg åpne opp ikke dom-0, men la meg åpne opp dom-2. 1454 01:07:55,370 --> 01:07:57,350 Bare så du har sett noen syntaks her. 1455 01:07:57,350 --> 01:08:02,080 >> Det viser seg at det vi bare gjorde bruker rå Javascript. 1456 01:08:02,080 --> 01:08:04,420 Så dette er virkelig språket Javascript. 1457 01:08:04,420 --> 01:08:07,340 Noen av dere kanskje vet om et bibliotek kalt jQuery. 1458 01:08:07,340 --> 01:08:09,980 >> Så jQuery er ikke det samme ting som Javascript. 1459 01:08:09,980 --> 01:08:14,110 Det er bare et bibliotek som en virkelig smart fyren skrev og popularisert slik 1460 01:08:14,110 --> 01:08:18,100 at nesten alle i verden nå bruker jQuery ved bruk av Javascript. 1461 01:08:18,100 --> 01:08:20,890 Og ved første øyekast ærlig, det ser litt mer kryptisk. 1462 01:08:20,890 --> 01:08:24,990 Men du vil finne, særlig hvis du går der for det endelige prosjektet med web 1463 01:08:24,990 --> 01:08:29,029 utvikling, vil du finne at dette renser ting opp og sparer deg ganske 1464 01:08:29,029 --> 01:08:30,229 få linjer med kode. 1465 01:08:30,229 --> 01:08:33,189 >> Så la oss bare se på hvordan denne formen fungerer. 1466 01:08:33,189 --> 01:08:35,664 Legg merke til hva jeg fjerne tilsynelatende fra min HTML? 1467 01:08:35,664 --> 01:08:38,240 1468 01:08:38,240 --> 01:08:40,630 Det er ingen på sende til behandleren så å si. 1469 01:08:40,630 --> 01:08:41,470 Det er ingen attributt. 1470 01:08:41,470 --> 01:08:43,359 Fordi du vet, hva Jeg gjorde egentlig ikke liker? 1471 01:08:43,359 --> 01:08:45,640 Jeg følte at vi holdt på å falle i gamle vaner der. 1472 01:08:45,640 --> 01:08:49,340 Akkurat som det var begynt å føle slurvete å blander både CSS med 1473 01:08:49,340 --> 01:08:52,149 HTML, fordi du er slags kaste forskjellige språk over hele 1474 01:08:52,149 --> 01:08:56,180 sted, på samme måte gjorde dette begynner å føle som en dårlig vei å gå ned der 1475 01:08:56,180 --> 01:09:01,069 Jeg setter Javascript-kode på innsiden av min HTML snarere enn facto det ut. 1476 01:09:01,069 --> 01:09:02,279 >> Så det er lærdommen her. 1477 01:09:02,279 --> 01:09:05,080 I dom-2.html, jeg facto det ut. 1478 01:09:05,080 --> 01:09:07,399 Og jeg gjør ting litt en annen måte. 1479 01:09:07,399 --> 01:09:09,630 For nå, kommer jeg til å vifte med hendene på hva dette egentlig gjør 1480 01:09:09,630 --> 01:09:10,590 under panseret. 1481 01:09:10,590 --> 01:09:14,210 Men bare for nå antar at den første linje med kode i dette biblioteket 1482 01:09:14,210 --> 01:09:18,170 kalt jQuery betyr bare når Dokumentet er klar, gjør følgende. 1483 01:09:18,170 --> 01:09:20,080 >> Fordi websider kan ta litt tid å laste. 1484 01:09:20,080 --> 01:09:23,029 Du kan være på et tregt internett tilkobling, og det kan bli spinning 1485 01:09:23,029 --> 01:09:25,290 og spinne, og til slutt er det lastet. 1486 01:09:25,290 --> 01:09:29,060 At linje med kode bare sier vente til hele siden er klar, dokumentet 1487 01:09:29,060 --> 01:09:31,189 er klar, før du utfører denne koden. 1488 01:09:31,189 --> 01:09:34,390 >> Og nå legger merke til, er dette trolig den mest nyttige først 1489 01:09:34,390 --> 01:09:36,189 ta bort fra jQuery. 1490 01:09:36,189 --> 01:09:42,140 Denne linjen her er veldig lik i ånden til dette mye lengre linje her. 1491 01:09:42,140 --> 01:09:46,920 Mens det i rå Javascript-kode, det Det finnes en global objekt dokument som 1492 01:09:46,920 --> 01:09:50,460 har en funksjon som heter getElementById (), folk som skrev 1493 01:09:50,460 --> 01:09:55,720 jQuery forenklet som å bare si dollartegn, og deretter innsiden av 1494 01:09:55,720 --> 01:10:00,250 parentes sette to sitater, og deretter sette en firkantsymbol etterfulgt av 1495 01:10:00,250 --> 01:10:02,250 unik ID du ønsker å ta. 1496 01:10:02,250 --> 01:10:06,170 Så dette tilsvarer document.getElementById. 1497 01:10:06,170 --> 01:10:11,090 >> I mellomtiden. Sende betyr bare på innsending av hvilken form du er 1498 01:10:11,090 --> 01:10:14,240 henviser til venstre, gå videre og gjennomføre dette. 1499 01:10:14,240 --> 01:10:16,600 Men dette er nå nysgjerrighet også. 1500 01:10:16,600 --> 01:10:19,560 Hva er rart om hva Jeg har fremhevet her? 1501 01:10:19,560 --> 01:10:23,840 1502 01:10:23,840 --> 01:10:28,594 Ikke bare er det slags syntaktisk nytt, det er også noe som mangler. 1503 01:10:28,594 --> 01:10:29,558 >> PUBLIKUM: Det er bare kalt funksjon? 1504 01:10:29,558 --> 01:10:31,970 Det er ikke kalt varsling? 1505 01:10:31,970 --> 01:10:32,440 >> DAVID MALAN: Yeah. 1506 01:10:32,440 --> 01:10:35,450 Vel, så alert () er nede her, for å være rettferdig. 1507 01:10:35,450 --> 01:10:39,520 Men det er ingen omtale av en navn, som du vet, foo eller 1508 01:10:39,520 --> 01:10:40,980 noe opp her. 1509 01:10:40,980 --> 01:10:43,830 Og ja, dette er en av de funksjonene av Javascript som er ganske 1510 01:10:43,830 --> 01:10:45,370 kraftig, men også ganske ny. 1511 01:10:45,370 --> 01:10:47,460 Og PHP faktisk har dette også. 1512 01:10:47,460 --> 01:10:49,500 >> La meg gå videre og gjøre noe virkelig rask. 1513 01:10:49,500 --> 01:10:52,030 La meg gå videre og sette dette ut her. 1514 01:10:52,030 --> 01:10:52,600 La meg gjøre dette. 1515 01:10:52,600 --> 01:10:53,690 Funksjon. 1516 01:10:53,690 --> 01:10:56,455 La oss kalle denne behandleren (). 1517 01:10:56,455 --> 01:10:58,290 En hundefører funksjon så å si. 1518 01:10:58,290 --> 01:11:00,110 Noe som håndterer noen operasjon. 1519 01:11:00,110 --> 01:11:02,700 La meg rydde opp min innrykk. 1520 01:11:02,700 --> 01:11:04,380 Og sette dette her. 1521 01:11:04,380 --> 01:11:06,090 Og sette det her. 1522 01:11:06,090 --> 01:11:06,470 Jepp. 1523 01:11:06,470 --> 01:11:07,060 OK. 1524 01:11:07,060 --> 01:11:10,300 >> Så nå har jeg en funksjon som heter behandleren () at jeg egentlig ikke vet 1525 01:11:10,300 --> 01:11:10,890 hva det gjør ennå. 1526 01:11:10,890 --> 01:11:12,710 Den har bare fortsatt at ting. 1527 01:11:12,710 --> 01:11:13,900 Whoops. 1528 01:11:13,900 --> 01:11:15,820 Tok for mye. 1529 01:11:15,820 --> 01:11:18,490 La oss gjøre dette. 1530 01:11:18,490 --> 01:11:18,990 OK. 1531 01:11:18,990 --> 01:11:20,240 Unnskyld. 1532 01:11:20,240 --> 01:11:23,140 1533 01:11:23,140 --> 01:11:23,690 OK. 1534 01:11:23,690 --> 01:11:24,720 La meg gjøre dette. 1535 01:11:24,720 --> 01:11:25,020 OK. 1536 01:11:25,020 --> 01:11:27,040 Som ser fin og rett fremover nå. 1537 01:11:27,040 --> 01:11:29,090 La meg gjøre dette. 1538 01:11:29,090 --> 01:11:29,860 Gjør dette. 1539 01:11:29,860 --> 01:11:30,950 Og OK. 1540 01:11:30,950 --> 01:11:33,080 Så nå, la oss sette dette over her. 1541 01:11:33,080 --> 01:11:35,840 1542 01:11:35,840 --> 01:11:37,270 Ingen flere programmering på fly. 1543 01:11:37,270 --> 01:11:37,900 OK. 1544 01:11:37,900 --> 01:11:40,000 >> Så nå, la oss gå tilbake til der historien begynte. 1545 01:11:40,000 --> 01:11:43,530 Tidligere sa jeg at denne linjen her betyr når dokumentet er ferdig, gå 1546 01:11:43,530 --> 01:11:44,380 videre og gjøre dette. 1547 01:11:44,380 --> 01:11:45,660 Hva ønsker jeg å gjøre? 1548 01:11:45,660 --> 01:11:49,070 Vel spesifikt, ønsker jeg å gå videre og gjøre følgende. 1549 01:11:49,070 --> 01:11:53,700 Utfør denne linjen med kode, og deretter hva jeg vil du skal gjøre er å ringe dette 1550 01:11:53,700 --> 01:11:56,370 fungere når skjemaet er sendt. 1551 01:11:56,370 --> 01:11:57,730 >> Nå er dette hva som er interessant. 1552 01:11:57,730 --> 01:11:59,170 Dette er i seg selv ikke er en funksjon. 1553 01:11:59,170 --> 01:12:02,540 Legg merke til at jeg ikke setter parentes her på vanlig måte. 1554 01:12:02,540 --> 01:12:06,800 Jeg er bokstavelig talt passerer en funksjon som heter håndterer () til en annen funksjon 1555 01:12:06,800 --> 01:12:10,800 kalt sende () som et argument som selv om det er som en variabel. 1556 01:12:10,800 --> 01:12:14,290 Og dette er en av funksjonene i Javascript er funksjoner selv 1557 01:12:14,290 --> 01:12:15,710 er egentlig bare objekter. 1558 01:12:15,710 --> 01:12:18,350 Faktisk, de er egentlig bare variabler av noe slag. 1559 01:12:18,350 --> 01:12:21,340 Og hvis navnet på funksjonen er behandleren (), er det ingen grunn til at jeg ikke kan 1560 01:12:21,340 --> 01:12:23,390 passere den inn som et argument her. 1561 01:12:23,390 --> 01:12:27,530 Og dette betyr da form med ID-demo er 1562 01:12:27,530 --> 01:12:29,320 innlevert, kaller denne funksjonen. 1563 01:12:29,320 --> 01:12:32,770 >> Men nå hvis jeg angre alt dette, hvorfor da gjorde jeg kanskje gjøre 1564 01:12:32,770 --> 01:12:34,850 dette en stund siden? 1565 01:12:34,850 --> 01:12:36,840 Vel, dette er en anonym funksjon. 1566 01:12:36,840 --> 01:12:41,080 Fordi ærlig, skjønte jeg hvorfor jeg gidde å kaste bort tid på å erklære en 1567 01:12:41,080 --> 01:12:45,540 Funksjonen kalles handler () bare å ringe det i ett og bare ett sted? 1568 01:12:45,540 --> 01:12:48,640 Hvis jeg ikke trenger navnet, og jeg gjør ikke trenger å kalle det mer enn ett sted, 1569 01:12:48,640 --> 01:12:51,200 la oss bare implementere funksjonen akkurat der jeg trenger det. 1570 01:12:51,200 --> 01:12:55,190 Og så Javascript og PHP støtte det kalles anonyme funksjoner som 1571 01:12:55,190 --> 01:12:57,900 tillate meg å gjøre akkurat det her. 1572 01:12:57,900 --> 01:12:59,570 >> Men vi er bare toppen av isfjellet. 1573 01:12:59,570 --> 01:13:02,430 La oss erte med bare et par endelige eksempler her. 1574 01:13:02,430 --> 01:13:04,600 >> Hvis jeg går inn quote.php. 1575 01:13:04,600 --> 01:13:07,160 1576 01:13:07,160 --> 01:13:11,870 Legg merke til at dette er faktisk en PHP funksjon, et PHP-program, som jeg skrev 1577 01:13:11,870 --> 01:13:15,270 som forventer en HTTP-parameter som heter symbol, og jeg kan passere i 1578 01:13:15,270 --> 01:13:16,730 en verdi som FB. 1579 01:13:16,730 --> 01:13:20,010 Og hvis vi faktisk se på kilden kode, er dette spørring en gratis nettside 1580 01:13:20,010 --> 01:13:23,680 heter Yahoo Finance, akkurat som p-sett sju, og det er tilbake til meg 1581 01:13:23,680 --> 01:13:26,580 noe i tilsynelatende format kjent er JSON - 1582 01:13:26,580 --> 01:13:28,010 Javascript Object Notation. 1583 01:13:28,010 --> 01:13:28,810 Det er bare et objekt. 1584 01:13:28,810 --> 01:13:32,500 Legg merke til de klammeparentes, sitater, tykktarmen, og komma. 1585 01:13:32,500 --> 01:13:34,720 >> Nå i mellomtiden, er dette ganske kult. 1586 01:13:34,720 --> 01:13:38,520 Fordi jeg kan sikkert bruke et programmerings språk å generere webadresser 1587 01:13:38,520 --> 01:13:40,370 som ser ut som dette dynamisk, ikke sant? 1588 01:13:40,370 --> 01:13:43,340 Jeg kan endre dette til Google og komme tilbake Googles 1589 01:13:43,340 --> 01:13:47,930 aksjekursen på $ 1,017.55. 1590 01:13:47,930 --> 01:13:49,640 Så la oss se om vi ikke kan bruke denne nå. 1591 01:13:49,640 --> 01:13:56,590 >> La meg gå til ajax-0 her, som ser slik ut. 1592 01:13:56,590 --> 01:13:59,750 Det er bare en nettside som har et skjema med en knapp. 1593 01:13:59,750 --> 01:14:05,860 La meg her gå videre og skriver i YHOO for Yahoo-aksjen symbol, klikker du på Hent 1594 01:14:05,860 --> 01:14:10,530 Quote, og nå merker jeg har fått et varsel med 32.86. 1595 01:14:10,530 --> 01:14:14,050 >> La meg faktisk gå til en mer avansert versjon på denne siden, versjon to, og 1596 01:14:14,050 --> 01:14:17,530 skriver i la oss si Microsoft, MSFT. 1597 01:14:17,530 --> 01:14:18,410 Get Quote. 1598 01:14:18,410 --> 01:14:19,850 Og nå legger merke til, ikke noe varsel. 1599 01:14:19,850 --> 01:14:22,770 Legg merke til hvor det står pris skal fastsettes? 1600 01:14:22,770 --> 01:14:27,060 Det er den enkleste av eksempler som hint på hva Gchat, og Facebook 1601 01:14:27,060 --> 01:14:30,070 Chat og Gmail, og andre slike nettsteder gjør ved faktisk 1602 01:14:30,070 --> 01:14:31,290 endre nettsiden. 1603 01:14:31,290 --> 01:14:31,800 >> Legg merke til dette. 1604 01:14:31,800 --> 01:14:33,120 La meg oppdater siden. 1605 01:14:33,120 --> 01:14:35,080 La meg åpne opp Chrome Inspector. 1606 01:14:35,080 --> 01:14:36,890 La meg gå til elementene tappen ned her. 1607 01:14:36,890 --> 01:14:42,310 Nå merke hvis jeg zoomer inn her nede, og åpner dette opp, legge merke til at dette er min 1608 01:14:42,310 --> 01:14:44,500 HTML DOM - min dokumentobjekt modell. 1609 01:14:44,500 --> 01:14:45,920 Dette er min HTML. 1610 01:14:45,920 --> 01:14:48,750 Men nå legger merke til, selv om det kommer å være litt vanskelig å se det i både 1611 01:14:48,750 --> 01:14:52,080 steder på en gang, hvis jeg skriver i FB opp her, se nederst 1612 01:14:52,080 --> 01:14:54,110 av skjermen bare. 1613 01:14:54,110 --> 01:14:57,720 >> Det er faktisk skiftende min HTML på fly. 1614 01:14:57,720 --> 01:15:01,670 Og det gjør dette ganske enkelt ved å gjøre noe som dette. 1615 01:15:01,670 --> 01:15:06,800 Hvis jeg åpner opp ajax-2, varsel implementere noe så sexy som 1616 01:15:06,800 --> 01:15:09,560 at selv om det er ganske stygg, men så avansert som det 1617 01:15:09,560 --> 01:15:11,910 funksjonelt, har det noen HTML nederst. 1618 01:15:11,910 --> 01:15:13,810 Men merker jeg pleide å tagge. 1619 01:15:13,810 --> 01:15:16,640 Vi har ikke brukt dette før, men dette er som en, men det betyr ikke tvinge 1620 01:15:16,640 --> 01:15:17,840 alt på en ny linje. 1621 01:15:17,840 --> 01:15:20,830 Det gjør bare en rektangulær region på samme linje hovedsak. 1622 01:15:20,830 --> 01:15:22,870 >> Legg merke til at jeg ga det en ID på pris. 1623 01:15:22,870 --> 01:15:26,800 Og det viser seg ved å bruke samme Javascript-bibliotek, jeg har en funksjon 1624 01:15:26,800 --> 01:15:30,440 kalt quote () som kalles når skjemaet er sendt. 1625 01:15:30,440 --> 01:15:31,800 Og det jeg gjør er dette. 1626 01:15:31,800 --> 01:15:35,730 Jeg erklære en variabel i Javascript kalt url, sparer verdi 1627 01:15:35,730 --> 01:15:38,650 quote.php? symbol =. 1628 01:15:38,650 --> 01:15:44,220 Med andre ord, jeg meg selv begynner å utarbeide en HTTP-forespørsel, og deretter 1629 01:15:44,220 --> 01:15:49,250 Jeg concatenating på at med en pluss uansett elementet med ID 1630 01:15:49,250 --> 01:15:54,190 av symbol er, som varsel er at tekstfeltet rett ned her. 1631 01:15:54,190 --> 01:15:56,630 Så akkurat som vi hadde formene i det siste. 1632 01:15:56,630 --> 01:16:01,450 >> Og så viser det seg i jQuery, hvis du ringe. val (), som kaller for en val 1633 01:16:01,450 --> 01:16:05,900 funksjon, en verdi funksjon, blir den hva brukeren har skrevet i. 1634 01:16:05,900 --> 01:16:08,920 Og så all nettverkstrafikk som skjer er dette. 1635 01:16:08,920 --> 01:16:11,230 $. GetJSON. 1636 01:16:11,230 --> 01:16:13,720 >> Og som en side, er dollartegn bare en kortform. 1637 01:16:13,720 --> 01:16:16,860 Det er virkelig jQuery.getJSON. 1638 01:16:16,860 --> 01:16:21,520 Få meg til JSON fra denne nettadressen, og når forespørselen kommer tilbake, kaller dette 1639 01:16:21,520 --> 01:16:26,550 funksjon og pass på så det argumentet hva kom tilbake fra serveren. 1640 01:16:26,550 --> 01:16:31,205 >> Så med andre ord, hvis jeg går tilbake til den leseren, og jeg går tilbake til quote.php, 1641 01:16:31,205 --> 01:16:35,590 hva nettleseren min gjør er å få denne mengde data. 1642 01:16:35,590 --> 01:16:38,930 Og når jeg går til denne nettsiden her, merke hvis vi i stedet gå til nettverket 1643 01:16:38,930 --> 01:16:43,820 tab og klare det, og skriv deretter inn noe som GOOG for Google og Get 1644 01:16:43,820 --> 01:16:46,340 Quote, merke siden ble ikke endret. 1645 01:16:46,340 --> 01:16:50,990 Men en HTTP-forespørsel ble gjort, og hva kom tilbake hit hvis vi ser på 1646 01:16:50,990 --> 01:16:56,130 respons er en hel haug med JSON at vi får tilgang til slutt med 1647 01:16:56,130 --> 01:16:58,070 denne enkle linje her. 1648 01:16:58,070 --> 01:17:00,150 >> Data er det som ble fått fra serveren. 1649 01:17:00,150 --> 01:17:02,120 Prisen er navnet på Nøkkelen jeg bryr meg om. 1650 01:17:02,120 --> 01:17:05,230 Så data.price gir meg det. 1651 01:17:05,230 --> 01:17:07,540 >> Nå i mellomtiden, og denne er det siste eksempel. 1652 01:17:07,540 --> 01:17:09,280 Du kan gjøre enda mer med den siden. 1653 01:17:09,280 --> 01:17:12,440 En faktisk, vel to. 1654 01:17:12,440 --> 01:17:14,780 Vi kan bringe tilbake tagge, hvis du husker dette. 1655 01:17:14,780 --> 01:17:15,850 Det er Script. 1656 01:17:15,850 --> 01:17:17,110 Vi kan gjøre det. 1657 01:17:17,110 --> 01:17:17,690 Veldig spennende. 1658 01:17:17,690 --> 01:17:18,800 Vi vil forlate det som en cliffhanger. 1659 01:17:18,800 --> 01:17:21,590 >> Men mer spennende, kan du gjøre ting som dette. 1660 01:17:21,590 --> 01:17:25,940 Hvis jeg går til geolocation-en, viser det seg at Chrome vet at vi er på 1661 01:17:25,940 --> 01:17:30,672 lengde-/breiddegrad 42.37. -71,10. 1662 01:17:30,672 --> 01:17:32,940 Så det er enda mer der til din disposisjon. 1663 01:17:32,940 --> 01:17:34,290 Men mer om det i neste uke. 1664 01:17:34,290 --> 01:17:35,540 Se deg mandag. 1665 01:17:35,540 --> 01:17:37,558