1 00:00:00,000 --> 00:00:11,330 2 00:00:11,330 --> 00:00:12,360 >> DAVID MALAN: Okay. 3 00:00:12,360 --> 00:00:15,970 Dette er CS50, og det er i slutningen af ​​uge ni. 4 00:00:15,970 --> 00:00:18,560 Det har været en hvirvelvind i de sidste par dage. 5 00:00:18,560 --> 00:00:21,580 Og problemet sæt syv, hvis du er knæ dybt ind i det, indse, at der er en hel 6 00:00:21,580 --> 00:00:23,340 bit nyt, er derinde. 7 00:00:23,340 --> 00:00:26,660 Men lad os se om vi ikke kan stykke alt sammen her kort 8 00:00:26,660 --> 00:00:29,230 inden da kovending off i endnu anden retning og se 9 00:00:29,230 --> 00:00:30,510 hvor ellers vi kan gå. 10 00:00:30,510 --> 00:00:32,630 >> Så hidtil har vi talt om HTML. 11 00:00:32,630 --> 00:00:33,740 Vi har talt om CSS. 12 00:00:33,740 --> 00:00:34,705 Vi har talt om PHP. 13 00:00:34,705 --> 00:00:36,520 Du er begyndt at opleve SQL. 14 00:00:36,520 --> 00:00:38,360 I dag vil vi tale lidt om JavaScript. 15 00:00:38,360 --> 00:00:41,230 Men hvordan gør alle disse uensartede sprog passer sammen? 16 00:00:41,230 --> 00:00:44,970 >> Så vi talte i sidste uge om den begrebet have en server. 17 00:00:44,970 --> 00:00:48,470 Så lad os bare trække dette rektangel en web-server her. 18 00:00:48,470 --> 00:00:52,200 Og en web-server tjener sikkert filer. 19 00:00:52,200 --> 00:00:54,640 Og nogle af disse filer kan være HTML-filer. 20 00:00:54,640 --> 00:00:58,270 Så en af ​​de ting, som en webserver kan spytte kan være en fil, 21 00:00:58,270 --> 00:01:01,290 vi bare tegne som denne indeholder nogle HTML. 22 00:01:01,290 --> 00:01:04,786 Så i lægmandssprog, hvad betyder HTML lade dig gøre? 23 00:01:04,786 --> 00:01:06,036 >> PUBLIKUM: Side udseende nice. 24 00:01:06,036 --> 00:01:09,670 25 00:01:09,670 --> 00:01:12,310 >> DAVID MALAN: OK, lave en side ser pæn, 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 lader dig lægge ud sider strukturelt, og det giver dig mulighed for at 28 00:01:18,250 --> 00:01:22,410 slags æstetisk markere en side, markere statisk indhold, så du 29 00:01:22,410 --> 00:01:23,640 kan derefter se det med en webbrowser. 30 00:01:23,640 --> 00:01:24,690 >> Men det er nøglen. 31 00:01:24,690 --> 00:01:26,130 Det er statisk indhold. 32 00:01:26,130 --> 00:01:28,590 Du skriver det, du gemmer den, og så skal du sende det. 33 00:01:28,590 --> 00:01:31,130 Og webserveren så tjener det op til dine besøgende. 34 00:01:31,130 --> 00:01:35,700 >> Men vi stilisere tingene ved hjælp af en anden sprog helt. 35 00:01:35,700 --> 00:01:40,150 Vi begyndte at bruge en stil attribut visse tags. 36 00:01:40,150 --> 00:01:43,400 Og den stil attribut lad os sætte ting som skriftstørrelse og farve. 37 00:01:43,400 --> 00:01:46,460 Og du har sikkert begyndt at opdage, eller du snart vil til endelig 38 00:01:46,460 --> 00:01:50,160 projekter potentielt, endnu andre egenskaber, som du kan bruge i CSS. 39 00:01:50,160 --> 00:01:54,710 Og så i lægmandssprog, hvad virkelig så gør CSS gøre? 40 00:01:54,710 --> 00:01:57,810 Disse er blot eksempler deraf. 41 00:01:57,810 --> 00:02:00,730 Hvad betyder det lade dig gøre det HTML synes ikke at fra det 42 00:02:00,730 --> 00:02:02,606 vi har set hidtil? 43 00:02:02,606 --> 00:02:04,850 >> PUBLIKUM: Definer typografier ved dig selv. 44 00:02:04,850 --> 00:02:06,700 >> DAVID MALAN: Definer typografier ved dig selv. 45 00:02:06,700 --> 00:02:10,280 Så definere ting som klasser, som du kan have stødt på, eller unikt 46 00:02:10,280 --> 00:02:13,800 identificere knuder i et dokument, så at du kan stilisere dem. 47 00:02:13,800 --> 00:02:16,890 Men mere specifikt, ville jeg sige, at CSS virkelig lader dig tage ting 48 00:02:16,890 --> 00:02:20,790 sidste kilometer og giver dig mulighed for at angive meget mere præcist æstetik, 49 00:02:20,790 --> 00:02:24,340 hvorimod HTML for det meste lader du strukturere dine sider. 50 00:02:24,340 --> 00:02:27,310 >> Og selv om der er nogle defaults, ligesom vi så tag for 51 00:02:27,310 --> 00:02:30,690 en overskrift tag, der groft sagt gjort tingene stor og fed. 52 00:02:30,690 --> 00:02:34,250 Det er en temmelig generisk definition af tag - stor og fed. 53 00:02:34,250 --> 00:02:35,260 Hvad skriftstørrelse er det? 54 00:02:35,260 --> 00:02:36,080 Hvilken farve er det? 55 00:02:36,080 --> 00:02:36,890 Hvor fed er det? 56 00:02:36,890 --> 00:02:39,830 Og CSS giver dig mere fint tune ting som. 57 00:02:39,830 --> 00:02:42,150 Samt layout, som nogle af jer har set. 58 00:02:42,150 --> 00:02:45,180 >> Og helt ærligt, CSS er en smule en rodet sprog. 59 00:02:45,180 --> 00:02:48,370 Det er meget magtfulde i at du kan gøre bogstaveligt enhver hjemmeside, at du har 60 00:02:48,370 --> 00:02:51,880 ses på internettet i dag med det, men det er sådan en smerte i nakken. 61 00:02:51,880 --> 00:02:54,440 Og nogle af jer har slået hovedet mod væggene allerede bare at gøre 62 00:02:54,440 --> 00:02:58,560 noget dumt ligesom centret en menu på Problemet sæt syv, hvis du har fået til 63 00:02:58,560 --> 00:02:59,470 dette punkt allerede. 64 00:02:59,470 --> 00:03:01,530 >> Men indse, disse ting blive nemmere med tiden. 65 00:03:01,530 --> 00:03:02,820 Du begynder at lægge mærke til mønstre. 66 00:03:02,820 --> 00:03:06,020 Og igen, vil Google være din ven for de forskellige måder, hvorpå du kan 67 00:03:06,020 --> 00:03:07,220 løse den slags problemer. 68 00:03:07,220 --> 00:03:11,520 >> Og jeg tør sige med CSS og HTML mere generelt, kan du løse problemer i 69 00:03:11,520 --> 00:03:15,910 mange flere måder, som alle kunne de meget vel være korrekt, end du kunne 70 00:03:15,910 --> 00:03:18,900 i noget lignende C, selv nu PHP eller JavaScript. 71 00:03:18,900 --> 00:03:21,080 Der er lige mange forskellige måder at lægge tingene ud. 72 00:03:21,080 --> 00:03:22,570 >> Men det begyndte at få rodet, vi sagde. 73 00:03:22,570 --> 00:03:26,480 Lige slags sammenblanding din HTML og din CSS med stil attribut var 74 00:03:26,480 --> 00:03:27,590 lidt sjusket. 75 00:03:27,590 --> 00:03:31,460 Og så vi i stedet sagt, en slags abstrakt set, at du skal 76 00:03:31,460 --> 00:03:34,050 mindst begynde at faktor ud af din CSS sandsynligvis. 77 00:03:34,050 --> 00:03:37,430 Ikke er din stil attributter, men mindst bruge stil tag inde i hvad 78 00:03:37,430 --> 00:03:38,840 del af websiden? 79 00:03:38,840 --> 00:03:39,560 >> PUBLIKUM: Head. 80 00:03:39,560 --> 00:03:40,120 >> DAVID MALAN: I hovedet. 81 00:03:40,120 --> 00:03:43,270 Indtil nu havde vi kun titlen op der, men du kan også tilføje en stil 82 00:03:43,270 --> 00:03:47,230 tagge, og du kan sætte din CSS groft taler mod toppen af ​​siden. 83 00:03:47,230 --> 00:03:52,550 Men så tog vi tingene et skridt videre og vi indregnet, at mere 84 00:03:52,550 --> 00:03:54,130 i en separat fil. 85 00:03:54,130 --> 00:03:57,240 >> Og så disse to filer var en eller anden måde nu forbundet. 86 00:03:57,240 --> 00:03:59,550 Og faktisk var det tag, der gjorde det. 87 00:03:59,550 --> 00:04:02,920 Og hvad var en af ​​den overordnede motivationer for factoring vores CSS 88 00:04:02,920 --> 00:04:04,057 desto mere? 89 00:04:04,057 --> 00:04:05,280 >> PUBLIKUM: Genbrugelighed. 90 00:04:05,280 --> 00:04:05,785 >> DAVID MALAN: Genbrugelighed. 91 00:04:05,785 --> 00:04:06,150 Right? 92 00:04:06,150 --> 00:04:09,470 Du har måske set i p-sæt syv allerede at en masse af de sider, hvor 93 00:04:09,470 --> 00:04:12,260 køb side, salgs side, portefølje side, er sandsynligvis 94 00:04:12,260 --> 00:04:13,550 struktureret noget tilsvarende. 95 00:04:13,550 --> 00:04:17,579 Der er en CS50 finans logo øverst medmindre du har besluttet at ændre det. 96 00:04:17,579 --> 00:04:19,839 Der er en sidefod på bunden af ​​siderne. 97 00:04:19,839 --> 00:04:24,315 Og CSS giver dig så at faktor det ud det i en separat fil, så hvis 98 00:04:24,315 --> 00:04:27,780 du ønsker at ændre noget på globalt plan tværs hele dit websted, kan du virkelig 99 00:04:27,780 --> 00:04:29,390 bare ændre det på ét sted. 100 00:04:29,390 --> 00:04:32,750 >> Men der er en pris, du betaler potentielt ved at have indregnet ud 101 00:04:32,750 --> 00:04:38,380 CSS fra min HTML-fil i en separat fil der refereres til den 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 Hvad kan downside være af denne? 104 00:04:43,850 --> 00:04:48,830 Tænker tilbage for en uge siden til, når vi er taler om HTTP og TCP / IP, og hvordan 105 00:04:48,830 --> 00:04:52,070 internettet fungerer. 106 00:04:52,070 --> 00:04:53,530 Noget herovre? 107 00:04:53,530 --> 00:04:54,730 >> PUBLIKUM: Det tager længere tid. 108 00:04:54,730 --> 00:04:55,470 >> DAVID MALAN: Det tager længere tid. 109 00:04:55,470 --> 00:04:56,750 Hvorfor? 110 00:04:56,750 --> 00:04:59,450 >> PUBLIKUM: [uhørlig]. 111 00:04:59,450 --> 00:04:59,750 >> DAVID MALAN: Ja. 112 00:04:59,750 --> 00:05:01,240 Så det nok tager lidt mere tid. 113 00:05:01,240 --> 00:05:04,290 Fordi en, CSS er naturligvis ikke i den samme fil. 114 00:05:04,290 --> 00:05:06,920 Så nu er du nødt til at gøre ikke én, men to anmodninger. 115 00:05:06,920 --> 00:05:11,230 Og hver af disse anmodninger, som vi så i Chrome i den såkaldte Inspector, 116 00:05:11,230 --> 00:05:15,740 og vi kiggede på nettet fanen hver af disse filer kræver en HTTP 117 00:05:15,740 --> 00:05:18,360 anmodning, som vi så tager en vis mængde tid. 118 00:05:18,360 --> 00:05:19,290 Nu, måske er det ikke en masse. 119 00:05:19,290 --> 00:05:20,670 Måske er det kun 20 millisekunder. 120 00:05:20,670 --> 00:05:22,260 Måske er det 200 millisekunder. 121 00:05:22,260 --> 00:05:25,530 >> Men tænk over en side som Facebook, eller CNN eller Google, som er meget 122 00:05:25,530 --> 00:05:28,060 større end de eksempler, vi har så på hidtil. 123 00:05:28,060 --> 00:05:32,070 Disse sider kan have snesevis af filer, hver især kan kræve en 124 00:05:32,070 --> 00:05:33,550 download af en fil. 125 00:05:33,550 --> 00:05:35,800 Så ting kan potentielt begynder at sætte farten ned. 126 00:05:35,800 --> 00:05:39,280 >> Og især i disse dage, hvor vi alle har mobiltelefoner i vores lommer, og 127 00:05:39,280 --> 00:05:43,010 langsommere internetforbindelser, skulle vente et par millisekunder, et par 128 00:05:43,010 --> 00:05:46,110 flere millisekunder til yderligere filer kan faktisk være langsom. 129 00:05:46,110 --> 00:05:50,430 Latenstid er det ord, der beskriver den slags venter, at du har, at du 130 00:05:50,430 --> 00:05:53,110 oplever, når venter på nogle stykke information. 131 00:05:53,110 --> 00:05:54,430 >> Men der er en upside. 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 lidt af en vippe her. 134 00:05:58,170 --> 00:06:02,970 Downside nu, men hvad browsere kan gøre hvis de er smarte, for at undgå 135 00:06:02,970 --> 00:06:08,870 skulle anmode om det samme styles.css filen igen kan være at gøre hvad? 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 generelt betyder her blot for at redde fil, du anmodede første gang, og 140 00:06:15,810 --> 00:06:17,440 så tjek din cache for det. 141 00:06:17,440 --> 00:06:20,400 Kontroller, at du er en slags storage container, og hvis du allerede har en 142 00:06:20,400 --> 00:06:24,520 kopi af styles.css, selv om nogle andre siden i p-set, eller enhver hjemmeside, 143 00:06:24,520 --> 00:06:28,560 anmoder det igen, bare for at give bruger den samme cachelagrede kopi. 144 00:06:28,560 --> 00:06:30,140 Gider ikke anmoder om den. 145 00:06:30,140 --> 00:06:32,560 >> Downside der, dog, som nogle af jer have udløst ovre i p-sættet. 146 00:06:32,560 --> 00:06:35,870 Hvis du foretager en ændring på serveren og du går tilbage til browseren, og du 147 00:06:35,870 --> 00:06:39,250 genindlæse, sommetider browseren gør dig en tjeneste, og ikke gider 148 00:06:39,250 --> 00:06:43,660 re-downloade din styles.css fil fordi, kom nu, hvad er oddsene 149 00:06:43,660 --> 00:06:47,620 at disse stilarter, at Facebook bruger vil ændre 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 temmelig lav. 152 00:06:48,800 --> 00:06:52,260 De kan ændre sig over tid, men ikke af det minut eller time for time. 153 00:06:52,260 --> 00:06:55,810 >> Så et trick, FYI bare når du laver web udvikling, er ofte holde 154 00:06:55,810 --> 00:06:59,500 Shift-tasten nede for eksempel, og klik derefter på genindlæse i din browser, og der vil 155 00:06:59,500 --> 00:07:03,280 typisk fortælle browseren reload alt, selv hvis 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å igen upsides og ulemper, men alle af dem 158 00:07:06,630 --> 00:07:08,260 sidste ende design beslutninger. 159 00:07:08,260 --> 00:07:11,520 >> Så nu vi ikke bare afslutte historien her. 160 00:07:11,520 --> 00:07:15,790 Hvis jeg nu gå tilbage og tilbage og tilbage og tilbage, begyndte vi at introducere 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 lægmandssprog, hvad betyder PHP lad os gøre? 163 00:07:20,786 --> 00:07:22,770 >> PUBLIKUM: [uhørlig]. 164 00:07:22,770 --> 00:07:24,258 >> DAVID MALAN: Hvad er det? 165 00:07:24,258 --> 00:07:25,250 >> PUBLIKUM: Indføre logik i koden. 166 00:07:25,250 --> 00:07:26,620 >> DAVID MALAN: Yeah, introducere logik i din kode. 167 00:07:26,620 --> 00:07:29,570 Så det er en ægte programmeringssprog med løkker og variabler og 168 00:07:29,570 --> 00:07:32,620 funktioner og betingelser, og alle de ting, vi har brugt vej tilbage 169 00:07:32,620 --> 00:07:33,780 når siden bunden. 170 00:07:33,780 --> 00:07:36,780 Og PHP, vi har set, kan anvendes enten på kommandolinjen - det 171 00:07:36,780 --> 00:07:39,190 behøver ikke at have noget at gøre med web, men selv det er 172 00:07:39,190 --> 00:07:43,150 virkelig sin oprindelse, og hvad det har en tendens at være god til og befordrende for - 173 00:07:43,150 --> 00:07:47,130 men du kan bruge PHP blot ved naturen af det faktum, at det har en print () 174 00:07:47,130 --> 00:07:49,660 funktion, og et printf () funktion, eller et ekko () funktion. 175 00:07:49,660 --> 00:07:52,440 Der er bundter af måder, du kan udskrive tekst med PHP. 176 00:07:52,440 --> 00:07:56,540 >> Derfor kan du bruge denne programmering sprog til at udlæse præcist 177 00:07:56,540 --> 00:07:58,460 hvad vi talte om før. 178 00:07:58,460 --> 00:08:01,360 Du kan dynamisk generere din HTML. 179 00:08:01,360 --> 00:08:02,300 Måske ikke det hele. 180 00:08:02,300 --> 00:08:06,460 Måske du hårde kode ting, ligesom header og footer, og logoet, 181 00:08:06,460 --> 00:08:07,950 og dine style sheets, og alt dette. 182 00:08:07,950 --> 00:08:11,190 Men efter noget som p-set syv, hvor du manipulere bestandene og 183 00:08:11,190 --> 00:08:14,690 viser brugerens portefølje, som er gå til dynamisk at ændre, kan du 184 00:08:14,690 --> 00:08:18,960 sikkert bruge PHP og den logik, det giver du som programmeringssprog til 185 00:08:18,960 --> 00:08:22,320 output dynamisk delmængder på siden. 186 00:08:22,320 --> 00:08:25,900 >> Så når du taler om dynamiske hjemmesider, eller web-programmering, der er 187 00:08:25,900 --> 00:08:27,200 hvad du egentlig taler om. 188 00:08:27,200 --> 00:08:31,450 Ved hjælp af et sprog som PHP, eller ting kaldet Python eller Ruby eller Java, eller 189 00:08:31,450 --> 00:08:35,900 endnu andre sprog, at forespørge en database ofte, eller anden server, og 190 00:08:35,900 --> 00:08:38,580 så dynamisk spytte HTML. 191 00:08:38,580 --> 00:08:42,470 >> Nu slutresultatet, som en side, er at HTML de fleste hjemmesider, 192 00:08:42,470 --> 00:08:45,970 herunder din p-set syv, er formentlig kommer til at være et stort rod, hvis 193 00:08:45,970 --> 00:08:48,060 man ser på kilden kode i en browser. 194 00:08:48,060 --> 00:08:49,010 Det er ikke en big deal. 195 00:08:49,010 --> 00:08:51,550 På dette tidspunkt, vi når holder stil, vi interesserer os for 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 bekymre sig om de ting at hvad din kode udgange. 198 00:08:56,240 --> 00:08:59,520 Så du skal ikke bekymre dig om indrykning her, hvis det er PHP, der er 199 00:08:59,520 --> 00:09:01,190 faktisk udsende stuff. 200 00:09:01,190 --> 00:09:04,430 Efter alt, vil browseren er ligeglad, og et menneske vil ikke være på udkig 201 00:09:04,430 --> 00:09:05,400 ved kilden alligevel. 202 00:09:05,400 --> 00:09:09,000 Vi personalet, for eksempel, ville se på din PHP. 203 00:09:09,000 --> 00:09:13,440 >> Så lad mig give et hurtigt eksempel nu hvorfor ellers dette kan være nyttigt. 204 00:09:13,440 --> 00:09:18,620 Så helt ærligt, jeg kan ikke huske den sidste gang jeg brugte C til at 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 sandsynligvis i forskerskolen når Jeg havde brug for at bruge et sprog, der 207 00:09:22,330 --> 00:09:26,710 var forholdsvis lavt niveau, og gav mig mulighed for at gøre noget meget højt 208 00:09:26,710 --> 00:09:30,720 udfører virkelig spare så mange CPU cykler, som jeg kunne, for en stor del 209 00:09:30,720 --> 00:09:33,990 fordi jeg var ved hjælp af store datasæt, og hver CPU cyklus tælles. 210 00:09:33,990 --> 00:09:37,750 Og helt ærligt, selv i ting som telefoner disse dage og andre enheder 211 00:09:37,750 --> 00:09:39,910 hvor man ikke helt har så meget hukommelse, og du ikke helt har så 212 00:09:39,910 --> 00:09:44,160 meget CPU, der anvendes hurtigere sprog stadig tiltalende. 213 00:09:44,160 --> 00:09:47,290 >> Men i den virkelige verden, når du bare ønsker at smide nogle program sammen til 214 00:09:47,290 --> 00:09:50,340 analysere nogle data, eller du har indsamlet en hel bunke af registreringer for 215 00:09:50,340 --> 00:09:53,330 nogle studerende gruppe, og du vil meget hurtigt automatisere sende e-mails 216 00:09:53,330 --> 00:09:56,240 én efter én til hver enkelt af dem registranter, er du nødt til at nå til 217 00:09:56,240 --> 00:09:59,240 højniveausprog end C så at sige. 218 00:09:59,240 --> 00:10:04,060 Noget som PHP eller Python, eller Ruby, eller et halvt dusin andre, der findes 219 00:10:04,060 --> 00:10:04,550 disse dage. 220 00:10:04,550 --> 00:10:07,200 Men de tre er sandsynligvis den mest trendy lige nu. 221 00:10:07,200 --> 00:10:10,840 >> Og hvad det betyder er, at du kan åbne en tekst editor som gedit eller 222 00:10:10,840 --> 00:10:14,030 de fleste noget andet, og så bare begynde skrive kode uden at skulle bekymre 223 00:10:14,030 --> 00:10:17,800 om kompilering, uden at skulle virkelig bekymre sig om hukommelse ledelse, 224 00:10:17,800 --> 00:10:20,820 holde sig for øje, selvom at en lille sjusk i sidste ende vil komme tilbage 225 00:10:20,820 --> 00:10:24,790 at bide dig, hvis datasættet får større eller problemet bliver stort. 226 00:10:24,790 --> 00:10:27,230 Men hvad det betyder for os, er følgende. 227 00:10:27,230 --> 00:10:29,860 >> Lad mig gå videre og køre speller fra problem sæt seks. 228 00:10:29,860 --> 00:10:33,480 Så dette er min trie-baseret implementering som jeg brugte på den store 229 00:10:33,480 --> 00:10:35,500 bord, hvor jeg spillede ikke så godt. 230 00:10:35,500 --> 00:10:38,720 Vi kommer tilbage i en uges tid og gense dem, der ikke ender på toppen af 231 00:10:38,720 --> 00:10:40,430 stor bestyrelse på vores sidste forelæsning. 232 00:10:40,430 --> 00:10:44,520 Men for nu, lad mig gå videre og bare køre min løsning i tekst, og vi vil gøre 233 00:10:44,520 --> 00:10:48,460 King James Bible, og her går vi. 234 00:10:48,460 --> 00:10:51,080 >> Så dem er alle af den angiveligt forkert stavede ord ud af 235 00:10:51,080 --> 00:10:52,240 King James Bible. 236 00:10:52,240 --> 00:10:55,560 Og min implementering tog et halvt sekund i alt. 237 00:10:55,560 --> 00:10:58,270 Så ikke alt for dårlige på dette bestemt computer. 238 00:10:58,270 --> 00:11:01,540 Men tænk på, hvor meget kode jeg skulle skrive. 239 00:11:01,540 --> 00:11:02,880 Tænk hvor meget kode, du skulle skrive. 240 00:11:02,880 --> 00:11:06,170 Tænk på, hvor mange timer du har brugt på D-hal eller dit kollegieværelse eller hvor 241 00:11:06,170 --> 00:11:07,890 faktisk kodning op denne løsning. 242 00:11:07,890 --> 00:11:11,850 >> Tja, hvis jeg rent faktisk har et højere niveau sprog som PHP, tage til efterretning 243 00:11:11,850 --> 00:11:13,350 hvad jeg kan gøre her. 244 00:11:13,350 --> 00:11:16,410 Antag først, at det er i stedet din distribution kode. 245 00:11:16,410 --> 00:11:17,790 Dette er en fil kaldet stave. 246 00:11:17,790 --> 00:11:20,220 Det er til rådighed som en del af nutidens fordeling kode. 247 00:11:20,220 --> 00:11:22,670 Og jeg har tænkt mig at vinke min hånd på de fleste af de detaljer, men det er faktisk 248 00:11:22,670 --> 00:11:25,500 et interessant eksempel på, hvordan du måske port et sprog 249 00:11:25,500 --> 00:11:28,870 som C over til PHP. 250 00:11:28,870 --> 00:11:33,420 Jeg bogstaveligt talt åbnet to tekstvinduer, én med min C version af speller.c, 251 00:11:33,420 --> 00:11:36,960 og jeg er lige begyndt at oversætte det i min hovedet til PHP og skrive det ud ved hjælp af 252 00:11:36,960 --> 00:11:38,840 De nærmeste tilsvarende funktioner. 253 00:11:38,840 --> 00:11:40,100 >> Så nogle af disse ting er anderledes. 254 00:11:40,100 --> 00:11:43,730 Vi så sidste gang, at PHP ikke bruger omfatte helt på samme måde. 255 00:11:43,730 --> 00:11:47,050 Det bruger kræver typisk, selvom omfatter eksisterer. 256 00:11:47,050 --> 00:11:50,330 Definer er lidt anderledes fra # Define i C, men det er 257 00:11:50,330 --> 00:11:51,890 hvordan vi laver en konstant. 258 00:11:51,890 --> 00:11:55,860 $ Argc det viser sig eksisterer i PHP, så vi har set før. 259 00:11:55,860 --> 00:11:58,650 Disse er blot variable, alle der starter med dollartegn. 260 00:11:58,650 --> 00:12:00,590 Husk disse er blot en flok flydende punkter. 261 00:12:00,590 --> 00:12:03,970 >> Så lang historie kort, er du velkommen til at bladre gennem dette, hvis nysgerrig, det er 262 00:12:03,970 --> 00:12:10,010 næsten en linie-for-linie omdannelse af C-versionen af ​​speller.c i PHP. 263 00:12:10,010 --> 00:12:12,630 Og du kan gøre det igen for en halv snes andre sprog. 264 00:12:12,630 --> 00:12:14,910 >> Men hvad er interessant, er dette. 265 00:12:14,910 --> 00:12:16,910 Eller hvad er ærligt nedslående er dette. 266 00:12:16,910 --> 00:12:20,790 Lad mig gå videre og skrive om dictionary.php, og påstanden om, at jeg er 267 00:12:20,790 --> 00:12:23,670 kommer til at gå videre og re-implementere Problemet sæt seks her. 268 00:12:23,670 --> 00:12:27,530 >> Så lad os foreslå først at i dette fil, som vil blive gennemført i 269 00:12:27,530 --> 00:12:30,550 PHP, så lad mig åbne mine tags som. 270 00:12:30,550 --> 00:12:34,780 Lad mig give mig selv en global variabel, $ størrelse bliver nul. 271 00:12:34,780 --> 00:12:36,710 Og jeg har tænkt mig at give selv en hash tabel. 272 00:12:36,710 --> 00:12:38,110 Jeg vil bruge en hash tabel for denne ting. 273 00:12:38,110 --> 00:12:42,070 Hvordan kan jeg erklære en hash tabel i PHP? 274 00:12:42,070 --> 00:12:42,990 Udført. 275 00:12:42,990 --> 00:12:43,980 OK. 276 00:12:43,980 --> 00:12:48,870 >> Så åbneparentes luk beslag repræsenterer hvad i PHP, som vi har set? 277 00:12:48,870 --> 00:12:51,850 Et array, men et array, der kunne være et associativt array. 278 00:12:51,850 --> 00:12:54,320 En associativ array er en datastruktur, der 279 00:12:54,320 --> 00:12:55,860 associerer nøgler med værdier. 280 00:12:55,860 --> 00:12:59,430 >> Nu i den enkleste numerisk indekseret array, disse nøgler er hvad? 281 00:12:59,430 --> 00:13:02,250 282 00:13:02,250 --> 00:13:03,960 Zero, en, to, tre, right? 283 00:13:03,960 --> 00:13:08,780 Old school ting tilbage fra C. Men det kan også være strenge som foo og bar, 284 00:13:08,780 --> 00:13:12,210 eller Maxwell, eller af en sådan streng. 285 00:13:12,210 --> 00:13:14,240 Så jeg kan udnytte, at på bare et øjeblik. 286 00:13:14,240 --> 00:13:17,550 >> Lad mig gå videre og erklære en funktion som - 287 00:13:17,550 --> 00:13:19,020 lad os gøre load () først. 288 00:13:19,020 --> 00:13:20,690 Så funktion belastning (). 289 00:13:20,690 --> 00:13:23,440 Og PHP er lidt anderledes, idet du bogstaveligt talt skrive funktion, men du 290 00:13:23,440 --> 00:13:24,930 skal du ikke skrive en tilbagevenden type. 291 00:13:24,930 --> 00:13:28,760 Jeg har tænkt mig at gå videre og sige, at load () funktionen skal tage i 292 00:13:28,760 --> 00:13:31,000 argument $ ordbog, bare som C-version gjorde. 293 00:13:31,000 --> 00:13:32,510 Jeg gør det fra hukommelsen. 294 00:13:32,510 --> 00:13:34,910 >> Og jeg foreslår, at jeg er kommer til at gøre dette. 295 00:13:34,910 --> 00:13:37,080 Jeg simpelthen vil gøre foreach. 296 00:13:37,080 --> 00:13:40,710 Jeg har tænkt mig at kalde en funktion kaldet fil (), der passerer i navnet på denne 297 00:13:40,710 --> 00:13:44,990 fil, som er variabel $ Dictionary som $ ord. 298 00:13:44,990 --> 00:13:49,410 Og så inde i mit for-løkke her, er jeg kommer til at gå videre og gemme i min 299 00:13:49,410 --> 00:13:57,440 $ Tabel, $ word får sandt. 300 00:13:57,440 --> 00:13:57,918 Udført. 301 00:13:57,918 --> 00:14:01,264 Åh, vent. 302 00:14:01,264 --> 00:14:02,422 Udført. 303 00:14:02,422 --> 00:14:02,760 OK. 304 00:14:02,760 --> 00:14:04,970 >> Det er belastningen () funktion siger i PHP. 305 00:14:04,970 --> 00:14:05,865 Nu, hvorfor det virker? 306 00:14:05,865 --> 00:14:07,010 Og jeg slags snyd her. 307 00:14:07,010 --> 00:14:09,980 >> Så en, foreach vi så kortvarigt sidste gang. 308 00:14:09,980 --> 00:14:13,680 Det betyder bare, at du kan gentage over et array uden at bekymre med i 309 00:14:13,680 --> 00:14:16,150 og n og plus plus, og alt dette. 310 00:14:16,150 --> 00:14:21,350 Dictionary er selvfølgelig filnavnet, noget som store eller små, de to 311 00:14:21,350 --> 00:14:22,830 ordbøger, vi brugte sidste gang. 312 00:14:22,830 --> 00:14:26,715 File er en funktion, der åbner op tekst fil, læser det på linje for linje, og 313 00:14:26,715 --> 00:14:29,840 hænder, du sikkerhedskopiere et kæmpe udvalg, hver af hvis elementer er en 314 00:14:29,840 --> 00:14:31,340 linje fra denne fil. 315 00:14:31,340 --> 00:14:36,040 Så det er en kombination af fopen, og fread, og mens løkken, og fclose, 316 00:14:36,040 --> 00:14:37,080 og alt dette. 317 00:14:37,080 --> 00:14:40,150 Endelig, som ordet betyder blot det er variabel Jeg har tænkt mig at få adgang til 318 00:14:40,150 --> 00:14:41,890 på hver iteration i denne sløjfe. 319 00:14:41,890 --> 00:14:46,910 >> Så kort sagt, denne ene liner betyder her åbne den fil, hvis navn er i 320 00:14:46,910 --> 00:14:50,750 ordbog, variablen, gentage over det linje for linje, og hver gang du får 321 00:14:50,750 --> 00:14:54,290 en linje, opbevares i en variabel kaldet ord, og derefter gøre noget med ord. 322 00:14:54,290 --> 00:14:55,280 Hvad ønsker jeg at gøre? 323 00:14:55,280 --> 00:14:58,110 Jeg ønsker at sætte ord i min hash tabellen. 324 00:14:58,110 --> 00:15:00,860 >> Tja, jeg kan sætte noget i min hash tabellen ligesom i C 325 00:15:00,860 --> 00:15:02,140 hjælp firkantede parenteser. 326 00:15:02,140 --> 00:15:03,660 Dette er betegnelsen for min hash tabel. 327 00:15:03,660 --> 00:15:07,180 Jeg har tænkt mig at indekset i at hash bord på denne placering. 328 00:15:07,180 --> 00:15:08,920 Så ikke beslag nul, ikke beslaget et. 329 00:15:08,920 --> 00:15:11,990 Beslag citat citat slut noget, hvad det ord er. 330 00:15:11,990 --> 00:15:15,200 Og ligesom du kan have i din hash tabel arbejde trie, du bare butik 331 00:15:15,200 --> 00:15:17,650 effektivt en boolesk, implicit eller eksplicit. 332 00:15:17,650 --> 00:15:18,260 Udført. 333 00:15:18,260 --> 00:15:20,000 Jeg lagre sande værdi. 334 00:15:20,000 --> 00:15:23,150 >> Nu er der et par ting Jeg skære hjørner på her. 335 00:15:23,150 --> 00:15:27,720 Teknisk set er der vil være en irriterende ny linje, / n, i slutningen af 336 00:15:27,720 --> 00:15:28,820 hver af disse ord. 337 00:15:28,820 --> 00:15:31,770 Så jeg skal nok kalde en PHP funktion kaldet chop (), som vil 338 00:15:31,770 --> 00:15:33,460 helt bogstaveligt hugge at off. 339 00:15:33,460 --> 00:15:35,020 Og jeg faktisk nødt til at gøre en anden ting. 340 00:15:35,020 --> 00:15:38,380 Jeg burde nok forøge størrelsen på hver iteration, så jeg holde styr 341 00:15:38,380 --> 00:15:39,560 globalt, hvad det er. 342 00:15:39,560 --> 00:15:43,180 Og helt ærligt, og det er et af de stupider aspekter af PHP, hvis du er 343 00:15:43,180 --> 00:15:46,950 ved hjælp af en global variabel, du har brug for udtrykkeligt at sige, at du er. 344 00:15:46,950 --> 00:15:51,670 Så jeg har tænkt mig at faktisk skrive i den globale $ Størrelse, global $ bord, og nu 345 00:15:51,670 --> 00:15:52,690 min funktion er afsluttet. 346 00:15:52,690 --> 00:15:57,475 >> Så ikke helt så simpelt som før, men sandsynligvis tog mindre tid end C 347 00:15:57,475 --> 00:15:58,220 versionen, måske? 348 00:15:58,220 --> 00:15:58,730 OK. 349 00:15:58,730 --> 00:16:00,390 >> Så lad os nu gøre check () funktion. 350 00:16:00,390 --> 00:16:04,300 Lad os se, om det i det mindste tog timevis at det tog os i C. Så 351 00:16:04,300 --> 00:16:06,500 lad mig gå videre og erklære kontrollere som en funktion. 352 00:16:06,500 --> 00:16:09,070 Tager i argument ord, som er komme fra stavekontrol. 353 00:16:09,070 --> 00:16:13,410 Og jeg bare at kontrollere, om Følgende variabel isset, tabel 354 00:16:13,410 --> 00:16:18,400 beslag strtolower af ord - 355 00:16:18,400 --> 00:16:20,590 Lad os afveje alle mine parenteser - 356 00:16:20,590 --> 00:16:24,275 derefter vende tilbage sandt. 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 hårdt del af dette program. 360 00:16:30,330 --> 00:16:31,940 Else, return false. 361 00:16:31,940 --> 00:16:32,630 Udført. 362 00:16:32,630 --> 00:16:33,460 Det er check (). 363 00:16:33,460 --> 00:16:34,520 >> Nu, hvorfor det virker? 364 00:16:34,520 --> 00:16:37,040 Tja, jeg passerede i et ord, som er en streng. 365 00:16:37,040 --> 00:16:41,400 To, jeg tjekker indersiden af ​​hash tabel, der hedder $ bord. 366 00:16:41,400 --> 00:16:45,470 Jeg tvinger det til små bogstaver ved at kalde en funktion helt svarer tolower () i 367 00:16:45,470 --> 00:16:48,580 C, men det gør hele ordet, ikke et enkelt tegn. 368 00:16:48,580 --> 00:16:52,680 Og hvis der er indstillet, med andre ord er der er et værdisæt, med andre ord, 369 00:16:52,680 --> 00:16:54,880 hvis det er sandt, så ja, dette er et ord. 370 00:16:54,880 --> 00:16:56,530 Fordi jeg sætte det der med belastning (). 371 00:16:56,530 --> 00:16:59,100 Og hvis ikke, vil jeg vende tilbage falsk. 372 00:16:59,100 --> 00:17:00,090 >> Nu er de andre er let. 373 00:17:00,090 --> 00:17:03,570 Funktion størrelse (), hvordan gør jeg det? 374 00:17:03,570 --> 00:17:05,230 Jeg hovedsagelig gøre return $ størrelse. 375 00:17:05,230 --> 00:17:07,770 Men jeg teknisk set har brug for at gøre denne irriterende ting. 376 00:17:07,770 --> 00:17:10,640 Og faktisk op høre, var jeg skære ene hjørne for mange. 377 00:17:10,640 --> 00:17:12,920 Jeg har virkelig brug for at gøre global $ bord. 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 Unload () er forbløffende. 380 00:17:17,380 --> 00:17:20,500 Funktion losse (). 381 00:17:20,500 --> 00:17:23,990 Hvordan jeg ønsker at gennemføre unload ()? 382 00:17:23,990 --> 00:17:25,079 Udført. 383 00:17:25,079 --> 00:17:25,450 OK. 384 00:17:25,450 --> 00:17:28,900 >> Så losse (), hukommelse ledelse er helt taget hånd om for dig i 385 00:17:28,900 --> 00:17:31,800 noget som PHP og en masse højere niveau sprog. 386 00:17:31,800 --> 00:17:32,600 Så det er fantastisk. 387 00:17:32,600 --> 00:17:36,080 Ligesom hvorfor fanden vi tilbragte den sidste otte plus uger på C skrivning 388 00:17:36,080 --> 00:17:41,030 tilsyneladende virkelig langsom, virkelig tid forbrugende problemer med titusindvis af timer 389 00:17:41,030 --> 00:17:42,530 af arbejde under vores bælter? 390 00:17:42,530 --> 00:17:46,110 >> Tja, for én ting, dette kan arbejde fint for små programmer. 391 00:17:46,110 --> 00:17:47,840 Det er helt sikkert drønede op min udviklingstid. 392 00:17:47,840 --> 00:17:49,790 Men lad os se hvad der sker i den virkelige verden. 393 00:17:49,790 --> 00:17:52,370 >> Lad mig gå ind i denne mappe i et terminalvindue. 394 00:17:52,370 --> 00:17:53,370 Der er stavekontrol. 395 00:17:53,370 --> 00:17:56,570 Og bemærk som en sidebemærkning, og du kan have stødt på dette i problem sæt 396 00:17:56,570 --> 00:17:58,190 seks eller problem sæt syv. 397 00:17:58,190 --> 00:18:01,610 Du behøver ikke strengt at ende PHP-filer med. php. 398 00:18:01,610 --> 00:18:05,250 Hvis du sætter en linje som den første i helt i top, det er en særlig linje 399 00:18:05,250 --> 00:18:10,980 af syntaks, der væsentligt betyder finde det program, der hedder PHP og bruge det til 400 00:18:10,980 --> 00:18:12,270 fortolke denne fil. 401 00:18:12,270 --> 00:18:15,410 Så nu ingen rigtig ved, at Jeg kører en PHP-program. 402 00:18:15,410 --> 00:18:19,860 Jeg kan køre det bare som om det blev noget samlet i C. 403 00:18:19,860 --> 00:18:20,650 >> Men her er de ting. 404 00:18:20,650 --> 00:18:21,600 Faktisk, lad os gøre det igen. 405 00:18:21,600 --> 00:18:23,530 Dropbox/pset6 /. 406 00:18:23,530 --> 00:18:25,390 Der er stavekontrol. 407 00:18:25,390 --> 00:18:26,720 OK, 0.44 sekunder. 408 00:18:26,720 --> 00:18:28,080 Det fik hurtigere denne gang. 409 00:18:28,080 --> 00:18:29,745 >> Lad os nu gå ind i PHP-version. 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 tænk bare hvor meget tid Jeg gemte 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 sekund, som rent faktisk lyder ikke præcis enten. 417 00:19:01,020 --> 00:19:03,710 Men det er fordi lang historie kort, når du udskriver en enorm mængde 418 00:19:03,710 --> 00:19:06,840 ting til skærmen, at selv forsinker tingene ned. 419 00:19:06,840 --> 00:19:11,260 Hvad det virkelig tog CPU'en i Apparatet var 3,59 sekund, i 420 00:19:11,260 --> 00:19:15,260 kontrast til C, som tog 0,44 sekunder mest nylig. 421 00:19:15,260 --> 00:19:17,620 Det er virkelig en rækkefølge størrelsesorden anderledes. 422 00:19:17,620 --> 00:19:20,280 >> Så hvor er denne pris kommer fra? 423 00:19:20,280 --> 00:19:21,790 Hvorfor er det så meget langsommere? 424 00:19:21,790 --> 00:19:24,220 Hvorfor PHP udføre så dårligt? 425 00:19:24,220 --> 00:19:25,242 Danielle? 426 00:19:25,242 --> 00:19:26,550 >> PUBLIKUM: Du har ikke rigtig bruge en hash tabel. 427 00:19:26,550 --> 00:19:27,710 >> DAVID MALAN: Jeg har ikke rigtig bruge en hash tabel. 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 et associativt array. 430 00:19:29,870 --> 00:19:33,650 Mest sandsynligt, hvis folk på PHP er rigtig smart, de brugte under 431 00:19:33,650 --> 00:19:39,520 hætte en egentlig hash tabel implementeret i noget lignende C eller C + +. 432 00:19:39,520 --> 00:19:41,290 Men. 433 00:19:41,290 --> 00:19:42,760 Ja. 434 00:19:42,760 --> 00:19:44,010 >> PUBLIKUM: [uhørligt]. 435 00:19:44,010 --> 00:19:46,690 436 00:19:46,690 --> 00:19:47,080 >> DAVID MALAN: Ja. 437 00:19:47,080 --> 00:19:50,780 Så hver af de funktioner, jeg skrev nu - faktisk kan man sige, at når mere en 438 00:19:50,780 --> 00:19:51,480 lidt højere? 439 00:19:51,480 --> 00:19:54,509 >> PUBLIKUM: Hver af de funktioner, som du omfattede har en meget mere komplet 440 00:19:54,509 --> 00:19:56,610 kapacitet end - 441 00:19:56,610 --> 00:19:57,550 >> DAVID MALAN: Så det er meget sandt. 442 00:19:57,550 --> 00:20:01,490 Der er meget mere overhead, at vi er ikke rigtig at se ved kun at fokusere på 443 00:20:01,490 --> 00:20:03,730 dictionary.php, som jeg lige har skrevet. 444 00:20:03,730 --> 00:20:08,020 Derimod er der en hel tolk går i baggrunden. 445 00:20:08,020 --> 00:20:12,040 Faktisk, når jeg kørte dette program, det kørte ikke udarbejdet nuller og ettaller 446 00:20:12,040 --> 00:20:14,290 designet til min Intel CPU. 447 00:20:14,290 --> 00:20:19,270 Snarere var det kører linje for linje PHP-kode, der ser ud præcis 448 00:20:19,270 --> 00:20:20,350 ligesom vi har skrevet det. 449 00:20:20,350 --> 00:20:22,475 Og så når du bruger en fortolket sprog, du 450 00:20:22,475 --> 00:20:23,850 faktisk betaler denne pris. 451 00:20:23,850 --> 00:20:27,010 Det kommer til at tage lidt tid til at læse din fil top til bund, venstre til 452 00:20:27,010 --> 00:20:30,740 højre, og derefter udføre hver linje igen og igen. 453 00:20:30,740 --> 00:20:34,250 >> Nu i virkeligheden, især på internettet, du kan faktisk fremskynde denne proces 454 00:20:34,250 --> 00:20:38,660 ved hjælp af caching resultaterne af PHP-kode bliver fortolket. 455 00:20:38,660 --> 00:20:41,640 Og det giver mening på nettet, fordi hvis du ikke har en bruger som 456 00:20:41,640 --> 00:20:46,300 mig her, men 1.000 eller 10.000 brugere, så måske for første gang filen er 457 00:20:46,300 --> 00:20:49,050 tilgås det er langsom, men derefter Det er meget hurtigere. 458 00:20:49,050 --> 00:20:51,000 >> Men også dette, igen, er en afvejning. 459 00:20:51,000 --> 00:20:53,870 Og for noget som en forsknings-data indstillet, eller endda noget stort lignende 460 00:20:53,870 --> 00:20:58,330 dette, dine brugere vil i sidste ende begynder at føle, at afmatning. 461 00:20:58,330 --> 00:21:02,670 >> Så kort sagt, fortolket sprog meget på mode, meget populær, og 462 00:21:02,670 --> 00:21:06,710 helt ærligt er formentlig de sprog, du skal nå til ved løsning af problemer 463 00:21:06,710 --> 00:21:08,200 efter CS50. 464 00:21:08,200 --> 00:21:12,720 Men indse, hvor meget du virkelig tager for givet under hætten 465 00:21:12,720 --> 00:21:15,910 virkelig de sidste adskillige uger i hash tabeller og træer, og forsøger, 466 00:21:15,910 --> 00:21:20,770 som anvendes i sidste ende faktisk gennemføre ting som åbneparentes, 467 00:21:20,770 --> 00:21:24,200 firkantet beslag, som vi nu kan taknemmeligt tager for givet. 468 00:21:24,200 --> 00:21:26,360 >> Så lad os tage et kig nu i denne web sammenhæng. 469 00:21:26,360 --> 00:21:29,890 Og jeg nævnte sidste gang, at der er en flok superglobale i PHP, der 470 00:21:29,890 --> 00:21:32,490 er ikke rigtig relevant på kommandolinjen. 471 00:21:32,490 --> 00:21:36,210 De er mere relevant i forbindelse for at bruge PHP i en web-sammenhæng. 472 00:21:36,210 --> 00:21:41,220 Så kører PHP på en webserver, så at generere ting som HTML. 473 00:21:41,220 --> 00:21:44,540 >> Og vi kiggede på $ _GET og $ _POST, og det er her, automatisk brugernes 474 00:21:44,540 --> 00:21:49,100 input ender simpelthen, hvis du indsende en dannes til en fil der ender på. php på en web 475 00:21:49,100 --> 00:21:50,460 server som apparatet. 476 00:21:50,460 --> 00:21:53,310 Men lad os se kort på $ _COOKIE Og $ _SESSION. 477 00:21:53,310 --> 00:21:56,670 >> I lægmandssprog, hvad er en cookie som du forstår det i forbindelse med 478 00:21:56,670 --> 00:21:58,220 ved hjælp af internettet? 479 00:21:58,220 --> 00:21:59,450 >> PUBLIKUM: fil på computeren. 480 00:21:59,450 --> 00:21:59,920 >> DAVID MALAN: Ja. 481 00:21:59,920 --> 00:22:03,500 Det er en fil på brugerens computer plantet ved hvad hjemmesiden 482 00:22:03,500 --> 00:22:04,410 du tilfældigvis til at besøge. 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 næsten enhver hjemmeside i verden i disse dage, 485 00:22:10,330 --> 00:22:14,850 herunder cs50.net er en cookie plantet på din computer, som er 486 00:22:14,850 --> 00:22:19,800 enten en værdi gemt i RAM i din computer i browserens hukommelse, eller 487 00:22:19,800 --> 00:22:22,800 undertiden faktisk gemmes en fil på din harddisk. 488 00:22:22,800 --> 00:22:26,960 >> Og hvad er typisk gemt i denne fil er ikke dit brugernavn, ikke din 489 00:22:26,960 --> 00:22:31,060 adgangskode, typisk ikke noget følsom medmindre hjemmesiden ikke er så 490 00:22:31,060 --> 00:22:35,040 godt med deres sikkerhed, men snarere det er en stor unik identifikation blandt 491 00:22:35,040 --> 00:22:35,680 andre ting. 492 00:22:35,680 --> 00:22:38,920 Det er et stort tilfældigt tal plantet på din computer, men du kan tænke på som 493 00:22:38,920 --> 00:22:42,740 en slags virtuel hånd stempel gerne fra en klub eller nogle forlystelsespark, der 494 00:22:42,740 --> 00:22:47,160 giver personalet, ejerne af det tjeneste, at huske, hvem du er. 495 00:22:47,160 --> 00:22:51,030 Så hvis store tilfældige tal er som 12345678, selv om det er naturligvis 496 00:22:51,030 --> 00:22:54,180 ikke alt for tilfældig, så tænk på, at da hånd stempel, at når du besøger 497 00:22:54,180 --> 00:22:57,930 facebook.com for første gang, de stemple dette nummer på din hånd. 498 00:22:57,930 --> 00:23:01,510 Og så fordi du taler HTTP, du være en browser, og fordi Facebook 499 00:23:01,510 --> 00:23:06,440 naturligvis taler det samme som en web server, siger HTTP, at 500 00:23:06,440 --> 00:23:09,930 når som helst du efterfølgende besøg facebook.com, uanset om det er en anden 501 00:23:09,930 --> 00:23:13,560 senere, en time senere, selv den næste dag, så længe du ikke har eksplicit 502 00:23:13,560 --> 00:23:17,050 logget ud, som effektivt er som at vaske dine hænder. 503 00:23:17,050 --> 00:23:20,280 HTTP siger, at du skal præsentere din hånd stempel, hver gang du 504 00:23:20,280 --> 00:23:22,020 vende tilbage til denne hjemmeside. 505 00:23:22,020 --> 00:23:24,390 >> Hvad Facebook så gør, er at de se på den hånd stempel og 506 00:23:24,390 --> 00:23:26,850 de siger, åh, 123456789. 507 00:23:26,850 --> 00:23:30,260 Jeg ved ikke, ved første øjekast, at denne er David Malan i Cambridge, 508 00:23:30,260 --> 00:23:34,690 Massachusetts, men de kan kontrollere deres database og sige, åh, den person, 509 00:23:34,690 --> 00:23:39,930 på hvis computer vi plantede 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 Lad os vise, at brugeren så hans profil side eller hans News Feed. 512 00:23:46,000 --> 00:23:49,660 >> Men der er et problem her, hvis dette er, hvordan internettet faktisk virker. 513 00:23:49,660 --> 00:23:51,390 Lad os tage et kig på et hurtigt eksempel. 514 00:23:51,390 --> 00:23:55,190 Lad os faktisk gå til at sige facebook.com. 515 00:23:55,190 --> 00:23:58,130 Men før vi kunne gå der, så lad mig gå videre og åbne op Chromes 516 00:23:58,130 --> 00:23:59,790 Inspector hernede. 517 00:23:59,790 --> 00:24:01,140 Lad mig se på fanen Netværk. 518 00:24:01,140 --> 00:24:06,020 Og lad os nu gå videre og skrive i https://facebook.com. 519 00:24:06,020 --> 00:24:09,410 Og jeg gør det, så vi ikke ser alle disse omdirigeringer og affald 520 00:24:09,410 --> 00:24:10,660 tid på at kigge igennem dem. 521 00:24:10,660 --> 00:24:12,690 Lad mig slå enter. 522 00:24:12,690 --> 00:24:13,130 >> Ok. 523 00:24:13,130 --> 00:24:14,580 Vi ser en hel masse af anmodninger. 524 00:24:14,580 --> 00:24:15,640 Der kommer Facebook. 525 00:24:15,640 --> 00:24:16,930 Der er en hel masse filer. 526 00:24:16,930 --> 00:24:19,290 Og her, pr min omtale af latenstid sidste gang, det er 527 00:24:19,290 --> 00:24:21,240 en masse af HTTP-anmodninger. 528 00:24:21,240 --> 00:24:23,700 Men den første er sandsynligvis de mest interessante. 529 00:24:23,700 --> 00:24:26,420 >> Så lad os rulle ned her, og Jeg zoome ind på et sekund. 530 00:24:26,420 --> 00:24:29,090 Dette kommer til at være slags en rod, men lad os se. 531 00:24:29,090 --> 00:24:31,660 Facebook er at sende os en hel masse ting. 532 00:24:31,660 --> 00:24:33,490 >> Men whoa, interessant. 533 00:24:33,490 --> 00:24:37,880 De er plantning ikke én, men fire håndstempler 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 der er et par funktioner her. 536 00:24:44,030 --> 00:24:46,170 Alle af dem nævne nogle slags udløb. 537 00:24:46,170 --> 00:24:50,090 Og det ser ud Facebook håber at huske mig indtil 2015. 538 00:24:50,090 --> 00:24:53,670 Så det er formentlig den tid, som Jeg skal logge ud, eller de vil bare 539 00:24:53,670 --> 00:24:55,710 automatisk antage jeg er kommer ikke tilbage. 540 00:24:55,710 --> 00:24:57,840 Så det er faktisk en anstændig mængde tid. 541 00:24:57,840 --> 00:24:59,170 >> Og der er nogle andre tingene foregår her. 542 00:24:59,170 --> 00:25:03,036 Denne cookie synes at være tvunget slettet ved at sige den udløb i 1970 543 00:25:03,036 --> 00:25:04,460 før cookies eksisterede. 544 00:25:04,460 --> 00:25:06,510 Så browseren er bare at antage OK, det er ligesom 545 00:25:06,510 --> 00:25:07,910 vaske hænder stempel. 546 00:25:07,910 --> 00:25:11,240 >> Men nu da min browser gør en efterfølgende anmodning - 547 00:25:11,240 --> 00:25:14,340 lad mig gå videre og gøre det igen og genindlæse. 548 00:25:14,340 --> 00:25:18,170 Lad mig nu rulle tilbage til top anmodning og gå ned 549 00:25:18,170 --> 00:25:20,760 her, anmode overskrifter. 550 00:25:20,760 --> 00:25:21,390 Bemærke dette. 551 00:25:21,390 --> 00:25:25,280 Så nu er jeg under ikke respons overskrifter, men bemærker det siger anmodning overskrifter. 552 00:25:25,280 --> 00:25:29,220 Og mærke til, at min browser som en del af sin anmodning efter rammer reload har 553 00:25:29,220 --> 00:25:32,780 sendes mindst følgende oplysninger. 554 00:25:32,780 --> 00:25:34,670 Ikke set-cookie, men cookie. 555 00:25:34,670 --> 00:25:38,750 Så dette er den linje, HTTP-headeren, så til at tale, hvor min browser er sortering 556 00:25:38,750 --> 00:25:43,340 , uden at jeg ved det præsentere min hånd for Facebooks inspektion. 557 00:25:43,340 --> 00:25:46,020 >> Så disse cookies kan være bruges så til hvad? 558 00:25:46,020 --> 00:25:49,420 At huske, hvem du er, eller huske, hvordan mange gange du har været der, eller 559 00:25:49,420 --> 00:25:50,280 rigtig noget. 560 00:25:50,280 --> 00:25:52,742 >> Så her er counter.php. 561 00:25:52,742 --> 00:25:53,780 Og lad mig zoome ind på skrifttypen. 562 00:25:53,780 --> 00:25:58,380 Og hver gang jeg genindlæse denne side, bemærk det er at huske, hvor mange gange 563 00:25:58,380 --> 00:25:59,250 Jeg har været der. 564 00:25:59,250 --> 00:26:00,570 Tja, det er ikke alt, imponerende. 565 00:26:00,570 --> 00:26:03,140 Lad os bare lukke denne fane og lad os nu gå tilbage til 566 00:26:03,140 --> 00:26:07,860 http://localhost/counter.php. 567 00:26:07,860 --> 00:26:08,970 >> Åh, det er interessant. 568 00:26:08,970 --> 00:26:10,960 Det er stadig huskes, selv selvom jeg lukkede fanen. 569 00:26:10,960 --> 00:26:14,010 Og helt ærligt, hvis jeg lukker browseren, hvis det gennemføres på den rigtige måde, jeg 570 00:26:14,010 --> 00:26:18,950 kunne stadig huske, at denne bruger er som han eller hun var den første gang, og 571 00:26:18,950 --> 00:26:22,840 kun én gang jeg går ind i Chromes menuen, som herovre er her, og gå til 572 00:26:22,840 --> 00:26:25,990 Historie, og klik Slet browserdata, som nogle af jer har måske i 573 00:26:25,990 --> 00:26:33,050 fortid, først derefter vil dine cookies faktisk slettes under web 574 00:26:33,050 --> 00:26:33,970 udvikling. 575 00:26:33,970 --> 00:26:35,340 >> Så hvis vi går - 576 00:26:35,340 --> 00:26:37,080 Lad os tæt op gedit her. 577 00:26:37,080 --> 00:26:38,910 Og hvis vi går nu til denne fil. 578 00:26:38,910 --> 00:26:44,210 Lad mig gå ind i vores vhosts / localhost / offentligheden, og lad mig gøre 579 00:26:44,210 --> 00:26:46,340 counter.php. 580 00:26:46,340 --> 00:26:48,350 Bemærk at dette er en smuk simpelt program. 581 00:26:48,350 --> 00:26:50,250 Det er en temmelig simpel hjemmeside. 582 00:26:50,250 --> 00:26:51,770 >> Så toppen af ​​filen er kun bemærkninger. 583 00:26:51,770 --> 00:26:54,930 Men her er en ny linje, som du kan allerede har set i p-sæt 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 af PHP kode som hovedsagelig fortæller webserveren, gør 586 00:27:00,380 --> 00:27:03,400 Sørg for at stemple hænder og gøre Sørg for at tjekke hånd frimærker. 587 00:27:03,400 --> 00:27:06,810 Det er alt, denne linje gør, og det gør alt af denne proces for os. 588 00:27:06,810 --> 00:27:09,510 Så opdager jeg har bare misforstået to grene her. 589 00:27:09,510 --> 00:27:14,150 Hvis tælleren nøgle indersiden af ​​dette særlige globale kaldet variabel 590 00:27:14,150 --> 00:27:18,010 $ _SESSION Er indstillet - med andre ord, hvis der er en vis værdi er der - 591 00:27:18,010 --> 00:27:22,440 Lad os få det og gemme det i en lokal variabel kaldet $ tæller. 592 00:27:22,440 --> 00:27:27,000 Else, lad os tildele $ counter standardværdien på 0. 593 00:27:27,000 --> 00:27:30,320 >> Nu her er et aspekt af PHP, der er både en velsignelse og en forbandelse. 594 00:27:30,320 --> 00:27:32,080 PHP er lidt sjusket. 595 00:27:32,080 --> 00:27:35,160 Så mens det i C, hvad der ville omfanget af tælleren har været 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 have været begrænset til disse krøllede parenteser. 599 00:27:41,690 --> 00:27:42,090 Gæt hvad? 600 00:27:42,090 --> 00:27:46,920 I PHP, eksisterer det selv uden for de krøllede parenteser, her, og her, 601 00:27:46,920 --> 00:27:49,120 og her, og her, og selv dernede. 602 00:27:49,120 --> 00:27:52,400 Så jeg siger dette er en velsignelse i den forstand, at du ikke behøver at tænke så 603 00:27:52,400 --> 00:27:54,070 hårdt, som vi gjorde uger siden. 604 00:27:54,070 --> 00:27:56,880 Men det er også lidt af en forbandelse, idet uanset hvor du bruger en variabel i 605 00:27:56,880 --> 00:28:00,020 PHP, i det mindste i et program som dette, Det er globalt tilgængelig for 606 00:28:00,020 --> 00:28:01,170 bedre eller værre. 607 00:28:01,170 --> 00:28:06,130 Så du er nødt til at huske på nu, dine variabler kan ikke være udefineret. 608 00:28:06,130 --> 00:28:07,640 Du har måske defineret dem andetsteds. 609 00:28:07,640 --> 00:28:09,460 >> Men hvad skal jeg gøre i sidste ende? 610 00:28:09,460 --> 00:28:13,160 Jeg har tænkt mig at gemme inde i, at den globale variabel som en værdi af 611 00:28:13,160 --> 00:28:17,060 counter nøgle resultatet af laver tæller plus 1. 612 00:28:17,060 --> 00:28:18,910 Så det er bare det aritmetiske der gør 613 00:28:18,910 --> 00:28:20,590 optælling af denne tæller. 614 00:28:20,590 --> 00:28:24,850 Og det faktum, at jeg lagring, at værdi tilbage her er midler til at 615 00:28:24,850 --> 00:28:29,970 væsentlige opdatere databasen til Husk at brugeren 123456789 har været 616 00:28:29,970 --> 00:28:31,010 her to gange. 617 00:28:31,010 --> 00:28:33,780 Og når jeg gør det igen næste gang jeg genindlæse siden, det kommer til at kontrollere 618 00:28:33,780 --> 00:28:36,710 min hånd stempel og sige, åh, bruger 123456789 har nu 619 00:28:36,710 --> 00:28:38,410 været her tre gange. 620 00:28:38,410 --> 00:28:43,390 >> Og så hvad PHP og lignende sprog gør for os, er, at de er at regne 621 00:28:43,390 --> 00:28:47,720 ud af, hvordan og hvor og hvor længe at lagre værdier i denne særlige 622 00:28:47,720 --> 00:28:48,830 superglobal. 623 00:28:48,830 --> 00:28:52,750 Og dette superglobal næste gang jeg besøge siden er en slags magisk 624 00:28:52,750 --> 00:28:57,440 præ-befolket, fyldt med værdier, var der sidste gang, du har besøgt, 625 00:28:57,440 --> 00:29:02,310 om det var en anden siden, en uge siden, eller i 2013, og vi taler nu 626 00:29:02,310 --> 00:29:03,790 omkring 2015. 627 00:29:03,790 --> 00:29:07,600 PHP og webserveren tage sig af alt dette for dig. 628 00:29:07,600 --> 00:29:08,850 >> PUBLIKUM: [uhørligt]. 629 00:29:08,850 --> 00:29:11,900 630 00:29:11,900 --> 00:29:15,760 >> DAVID MALAN: Variabler i PHP er væsentlige altid global, medmindre du 631 00:29:15,760 --> 00:29:18,400 erklære dem inde i en funktion, og så er de lokale for 632 00:29:18,400 --> 00:29:19,420 kun funktionen. 633 00:29:19,420 --> 00:29:22,300 Men fordi jeg har ikke skrevet nogen funktioner, de er nu effektivt 634 00:29:22,300 --> 00:29:25,090 global gennem hele min fil her. 635 00:29:25,090 --> 00:29:26,040 >> PUBLIKUM: Er der en måde at gøre dem lokalt? 636 00:29:26,040 --> 00:29:28,470 >> DAVID MALAN: Er der nogen måde at gøre dem lokale? 637 00:29:28,470 --> 00:29:30,680 Kun ved at pakke dem ind i funktioner. 638 00:29:30,680 --> 00:29:32,790 Hvilket i den nyeste version af PHP kan du gøre dette med 639 00:29:32,790 --> 00:29:34,130 en anonym funktion. 640 00:29:34,130 --> 00:29:35,930 Men mere om det i rammerne af JavaScript. 641 00:29:35,930 --> 00:29:37,260 Men det korte svar er nej. 642 00:29:37,260 --> 00:29:40,888 En længere er svaret ja. 643 00:29:40,888 --> 00:29:42,380 Nice. 644 00:29:42,380 --> 00:29:43,380 God quiz-spørgsmål. 645 00:29:43,380 --> 00:29:43,930 Ok. 646 00:29:43,930 --> 00:29:47,760 >> Så endelig selve siden er faktisk ret simpelt. 647 00:29:47,760 --> 00:29:51,470 Bemærk, at når jeg afslutter PHP mode, tilbagekaldelse at alle disse ting ned 648 00:29:51,470 --> 00:29:53,700 nedenfor er bare at få spytte ud rå til browseren. 649 00:29:53,700 --> 00:29:57,050 Hvilket er fint, fordi jeg ønsker at sende brugeren nogle HTML, men jeg ønsker 650 00:29:57,050 --> 00:29:59,140 til dynamisk opdatere denne HTML. 651 00:29:59,140 --> 00:30:03,930 Og en måde jeg kan gøre dette på er at sortere meget hurtigt falde tilbage ind i PHP 652 00:30:03,930 --> 00:30:07,730 tilstand, brug åbneparentes spørgsmålstegn lighedstegnet, og derefter sende værdien 653 00:30:07,730 --> 00:30:08,650 af tælleren. 654 00:30:08,650 --> 00:30:12,360 >> Eller hvis det ser lidt kryptisk, dette lighedstegnet er faktisk bare nogle 655 00:30:12,360 --> 00:30:16,190 syntaktisk sukker for dette printf ($ counter). 656 00:30:16,190 --> 00:30:19,160 Men helt ærligt, det er bare lidt grim og lidt irriterende at skrive. 657 00:30:19,160 --> 00:30:23,660 Så PHP meget pænt tilbyder denne funktion hvor du kan bare sige det mere 658 00:30:23,660 --> 00:30:25,450 kortfattet på samme måde. 659 00:30:25,450 --> 00:30:26,940 >> Så hvad der foregår nedenunder hætten? 660 00:30:26,940 --> 00:30:31,210 Lad os hurtigt se på nettet Fanen her for counter.php. 661 00:30:31,210 --> 00:30:35,090 Og lad mig gå videre og først lad os rydde dine cookies. 662 00:30:35,090 --> 00:30:38,670 Lad os klare browserdata siden begyndelsen af ​​tid. 663 00:30:38,670 --> 00:30:39,680 Lad os nu gå tilbage herovre. 664 00:30:39,680 --> 00:30:41,340 Lad os nu genindlæse siden. 665 00:30:41,340 --> 00:30:42,170 Og jeg er tilbage på nul. 666 00:30:42,170 --> 00:30:44,810 Fordi min hånd stempel er blevet vasket, Jeg får nu en ny cookie. 667 00:30:44,810 --> 00:30:48,780 >> Faktisk, hvis jeg ser på fanebladet netværk og se på respons overskrifter, varsel 668 00:30:48,780 --> 00:30:51,960 at apparatet sender mig en cookie, hvis navn er noget 669 00:30:51,960 --> 00:30:55,820 vilkårligt, men slags rimelighed, PHPSESSID. 670 00:30:55,820 --> 00:30:58,440 Og det er at sende mig dette virkelig store tilfældige tal. 671 00:30:58,440 --> 00:30:59,440 Det er ikke helt et nummer. 672 00:30:59,440 --> 00:31:00,390 Det er ikke helt hexadecimal. 673 00:31:00,390 --> 00:31:03,600 Det er en slags alfanumerisk streng, men formodentlig er det tilfældigt. 674 00:31:03,600 --> 00:31:06,830 Og det er den hånd stempel således at tale, at jeg henviser til. 675 00:31:06,830 --> 00:31:11,960 >> I mellemtiden, hvis jeg klikker reload og derefter ser på denne anden linje for min anden 676 00:31:11,960 --> 00:31:17,600 anmodning, meddelelse nu, at min anmodning overskrifter omfatter PHPSESSID lig dette, 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 min browser præsentation af min hånd stempel. 679 00:31:22,950 --> 00:31:28,820 >> Så nu som en teaser, og vi vil tale mere om dette i en uge eller deromkring, men 680 00:31:28,820 --> 00:31:31,590 På hvilken måde gør det gøre dig sårbare, din Facebook-konto 681 00:31:31,590 --> 00:31:34,137 sårbare, og andre sådanne tegner sårbar? 682 00:31:34,137 --> 00:31:35,510 >> PUBLIKUM: Hvis nogen har din cookie. 683 00:31:35,510 --> 00:31:36,750 >> DAVID MALAN: Ja, hvis nogen har din cookie. 684 00:31:36,750 --> 00:31:39,920 Jeg mener virkelig, ligesom nogle af jer måske har prøvet på ligesom en klub eller en 685 00:31:39,920 --> 00:31:44,030 forlystelsespark, hvis du prøver noget som denne til at kopiere stempel, omend 686 00:31:44,030 --> 00:31:47,560 bagud på en anden persons hånd, og så han eller hun præsenterer det som 687 00:31:47,560 --> 00:31:53,250 deres egne, hvis den faktisk ser identiske, 123456789, så web 688 00:31:53,250 --> 00:31:57,980 server er tilsyneladende bare at tillid til, at brugeren er dig. 689 00:31:57,980 --> 00:32:01,450 >> Og det er faktisk en fundamental trussel helst du bruger cookies 690 00:32:01,450 --> 00:32:05,420 fordi hvis nogen bare spoofer så at taler din cookie, tal ud af, hvad det 691 00:32:05,420 --> 00:32:08,660 er enten ved virkelig at kopiere det ved at se på din computer 692 00:32:08,660 --> 00:32:09,890 og være ligesom, OK. 693 00:32:09,890 --> 00:32:14,520 Davids cookie er JJ3JIK og så videre, og så er smart nok til at vide 694 00:32:14,520 --> 00:32:18,080 hvordan slags manuelt at sende, at cookie fra en browser eller fra en 695 00:32:18,080 --> 00:32:22,350 program, de skriver, de kunne helt logge ind i en hjemmeside, som du. 696 00:32:22,350 --> 00:32:28,560 Det er ikke så svært at foregive at være en anden, medmindre vi revidere p-sæt 697 00:32:28,560 --> 00:32:30,790 to, der indførte hvad? 698 00:32:30,790 --> 00:32:32,065 >> PUBLIKUM: Kryptografi. 699 00:32:32,065 --> 00:32:33,860 >> DAVID MALAN: Lidt bit kryptering. 700 00:32:33,860 --> 00:32:36,550 Simpel kryptografi, i det mindste i standard udgave, men krypto 701 00:32:36,550 --> 00:32:36,870 alligevel. 702 00:32:36,870 --> 00:32:37,410 mindre. 703 00:32:37,410 --> 00:32:41,440 Så det viser sig, hvis du kryptere alle disse overskrifter ved hjælp af noget, som du 704 00:32:41,440 --> 00:32:48,770 måske nu kender mere familiært som SSL, secure socket layer, eller https:// URL'er, 705 00:32:48,770 --> 00:32:51,890 så alle disse ting vi har været kigger på er faktisk krypteret, 706 00:32:51,890 --> 00:32:54,800 hvilket betyder, at det er ligesom du kan ikke læse hånd stempel. 707 00:32:54,800 --> 00:32:59,350 Kun facebook.com kan, eller google.com, eller i dette tilfælde, kan apparatet 708 00:32:59,350 --> 00:33:00,550 læse, at hånd stempel. 709 00:33:00,550 --> 00:33:04,020 >> Tragisk selv om, og igen, det er alt for passende med NSA ting 710 00:33:04,020 --> 00:33:06,410 for sent, selv SSL er skør. 711 00:33:06,410 --> 00:33:09,850 Og det er faktisk ikke så svært at selv knække denne kryptering. 712 00:33:09,850 --> 00:33:12,040 Ikke så meget ved krakning af kryptering, men ved at narre 713 00:33:12,040 --> 00:33:15,720 browser til at dekryptere data for tidligt. 714 00:33:15,720 --> 00:33:17,880 Men igen, vil vi drille dig med det inden længe. 715 00:33:17,880 --> 00:33:21,242 For nu, bare være bange. 716 00:33:21,242 --> 00:33:23,070 Det er tragisk slags sandt. 717 00:33:23,070 --> 00:33:23,760 >> Ok. 718 00:33:23,760 --> 00:33:27,910 Så hvor kommer denne nu forlade os? 719 00:33:27,910 --> 00:33:29,010 Nå, lad os gøre det. 720 00:33:29,010 --> 00:33:31,790 Lad os gå videre og tage en hurtig teaser før vi tager en pause. 721 00:33:31,790 --> 00:33:33,790 Og jeg tror, ​​vi vil dvæle lidt længere i dag, men vi kommer til at dykke ned i 722 00:33:33,790 --> 00:33:37,850 noget helt nyt og sexet, som vil skærpe din appetit til endnu mere. 723 00:33:37,850 --> 00:33:38,950 Så det er teaser. 724 00:33:38,950 --> 00:33:41,520 >> Så SQL, begyndte vi at tale om nogensinde så kortvarigt sidste gang. 725 00:33:41,520 --> 00:33:44,670 Du vil virkelig få dine hænder beskidte med noget af det i p-sæt syv. 726 00:33:44,670 --> 00:33:46,480 Og i lægmandssprog, hvad betyder SQL - 727 00:33:46,480 --> 00:33:47,110 S-Q-L - 728 00:33:47,110 --> 00:33:49,850 gøre for dig? 729 00:33:49,850 --> 00:33:50,310 Hvad er det? 730 00:33:50,310 --> 00:33:51,546 Ja. 731 00:33:51,546 --> 00:33:53,240 >> PUBLIKUM: lader dig få adgang til data. 732 00:33:53,240 --> 00:33:53,360 >> DAVID MALAN: Ja. 733 00:33:53,360 --> 00:33:55,120 Det lader dig få adgang 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 det er hovedsagelig en programmeringssprog. 736 00:33:59,890 --> 00:34:03,400 Der er funktioner i det at Vi vil ikke engang bruge i klassen. 737 00:34:03,400 --> 00:34:04,710 Men du effektivt kan definere funktioner. 738 00:34:04,710 --> 00:34:06,870 De kaldes gemt procedurer i SQL. 739 00:34:06,870 --> 00:34:09,860 Men vi vil holde det forholdsvis enkel og bare bruge det til nogle grundlæggende operationer 740 00:34:09,860 --> 00:34:14,320 ligesom udvælgelse af data, indsætte data, opdatering af data, og sletning af data. 741 00:34:14,320 --> 00:34:17,400 >> Og du kan virkelig tænke på en database, ligesom 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 relationel database, hvor 744 00:34:21,989 --> 00:34:23,480 forhold betyder bare tabeller. 745 00:34:23,480 --> 00:34:24,739 Rækker og kolonner. 746 00:34:24,739 --> 00:34:27,929 Så alt du kan sætte i et regneark som dette eller Google Docs, 747 00:34:27,929 --> 00:34:32,460 du kan sætte ind i en SQL-database ved at erklære en tabel. 748 00:34:32,460 --> 00:34:34,800 >> Nu, hvordan kan du faktisk få adgang til disse oplysninger? 749 00:34:34,800 --> 00:34:38,239 Nå, med kommandoer eller spørgsmå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, der er fire kun ingredienser, du bliver nødt til at 752 00:34:44,489 --> 00:34:47,370 gøre noget helt kraftfuldt i problemet sæt syv. 753 00:34:47,370 --> 00:34:49,940 >> Nu tilbage i dag, ville du faktisk interagere med en database på en 754 00:34:49,940 --> 00:34:52,730 sort og hvid terminal vindue på en blinkende prompt som dette. 755 00:34:52,730 --> 00:34:56,370 Og databasen, vi kører på Apparatet kaldes MySQL, der er 756 00:34:56,370 --> 00:34:58,560 gratis og open source-database motor. 757 00:34:58,560 --> 00:35:02,240 Hvis du Google og læse Wikipedia artikel, vil du vide, at navnet er 758 00:35:02,240 --> 00:35:05,060 en smule overgang for nogle versioner af Linux. 759 00:35:05,060 --> 00:35:10,460 Maria database er faktisk en gaffel så at sige af MySQL. 760 00:35:10,460 --> 00:35:12,740 >> Lang historie kort, Oracle købte MySQL. 761 00:35:12,740 --> 00:35:13,870 Oracle er en stor virksomhed. 762 00:35:13,870 --> 00:35:17,010 Folk har været bekymret for, at det ville ikke længere være helt så open source, 763 00:35:17,010 --> 00:35:20,930 så dette er blot en kopi af MySQL der er stadig gratis, stadig open source, og 764 00:35:20,930 --> 00:35:23,550 installeret i Fedora Linux som standard. 765 00:35:23,550 --> 00:35:26,130 >> Men det er sådan en smerte i hals til at stifte bekendtskab med en 766 00:35:26,130 --> 00:35:27,310 database på denne måde. 767 00:35:27,310 --> 00:35:30,560 Så vi medtage i CS50 apparatet et gratis open source værktøj kaldet 768 00:35:30,560 --> 00:35:31,700 phpMyAdmin. 769 00:35:31,700 --> 00:35:33,940 Bare en tilfældighed, at det er skrevet i PHP. 770 00:35:33,940 --> 00:35:36,450 Der er ingen grundlæggende behov for PHP her. 771 00:35:36,450 --> 00:35:40,090 Men dette er kun en web-baseret værktøj, der vi downloades gratis, er installeret i 772 00:35:40,090 --> 00:35:43,850 apparatet, der tillader os at have en grafisk brugergrænseflade, som 773 00:35:43,850 --> 00:35:48,610 at undersøge p-sæt syv database som at oprette nye databaser, 774 00:35:48,610 --> 00:35:51,980 sige for dit eget projekt, hvis du vil lignende, og i sidste ende skabe 775 00:35:51,980 --> 00:35:55,900 dynamiske websites som CS50 Finance der giver dig mulighed for at forespørge data og 776 00:35:55,900 --> 00:35:58,140 opdatere data dynamisk. 777 00:35:58,140 --> 00:36:01,420 >> Du er ikke nødt til at bruge bare en simpel tekst-fil eller CSV. 778 00:36:01,420 --> 00:36:05,950 Du kan faktisk bruge en smart database program, så du kan udføre mere 779 00:36:05,950 --> 00:36:10,240 avancerede søgninger end bare at læse gennem alt lineært. 780 00:36:10,240 --> 00:36:14,150 >> Så for eksempel, det er det, vi giver dig ud af boksen for p-sæt syv. 781 00:36:14,150 --> 00:36:18,280 Dette er et bord med tilsyneladende mindst tre søjler, hvoraf den ene er 782 00:36:18,280 --> 00:36:21,450 brugernavn, hvoraf den ene er hash og den anden er-id. 783 00:36:21,450 --> 00:36:26,200 >> Men det interessante ting, og bare for at drille en tanke her, brugernavn 784 00:36:26,200 --> 00:36:29,270 er formentlig allerede enestående, right? 785 00:36:29,270 --> 00:36:31,190 Jeg mener, de fleste helst hjemmeside, hvis du har et brugernavn, der 786 00:36:31,190 --> 00:36:32,370 kan ikke være to Caesars. 787 00:36:32,370 --> 00:36:33,440 Der kan ikke være to Malans. 788 00:36:33,440 --> 00:36:34,950 Der kan ikke være to jharvards. 789 00:36:34,950 --> 00:36:35,600 Dens unikke. 790 00:36:35,600 --> 00:36:38,610 Ellers kan de ikke vide, hvilke jharvard det faktisk er. 791 00:36:38,610 --> 00:36:42,710 Så hvad kunne være motivationen for også at have en tredje kolonne til venstre 792 00:36:42,710 --> 00:36:46,970 der hedder id, der ligner en nummer, der er ligeledes unik? 793 00:36:46,970 --> 00:36:51,300 Det føles lidt overflødig til mig ved første øjekast. 794 00:36:51,300 --> 00:36:54,910 Hvorfor kunne det være overbevisende at have ikke kun unikke brugernavne, 795 00:36:54,910 --> 00:36:56,837 men også unikke numre? 796 00:36:56,837 --> 00:36:59,460 >> PUBLIKUM: De kunne have den samme adgangskode. 797 00:36:59,460 --> 00:37:01,720 >> DAVID MALAN: Folk kan have den samme adgangskode, sikker. 798 00:37:01,720 --> 00:37:03,900 Det kunne absolut ske. 799 00:37:03,900 --> 00:37:08,270 Men hvis de har denne unikke brugernavn, jeg vil hævde, at der ikke rigtig 800 00:37:08,270 --> 00:37:11,630 sag, fordi hvis de skriver i deres brugernavn, jeg behøver kun at kontrollere deres 801 00:37:11,630 --> 00:37:15,060 adgangskode, deres hash deraf. 802 00:37:15,060 --> 00:37:15,970 Hvorfor ellers? 803 00:37:15,970 --> 00:37:17,950 >> PUBLIKUM: Hurtigere søgning. 804 00:37:17,950 --> 00:37:18,680 >> DAVID MALAN: Hurtigere søgning. 805 00:37:18,680 --> 00:37:19,548 Hvorfor? 806 00:37:19,548 --> 00:37:21,460 >> PUBLIKUM: ID er blot én. 807 00:37:21,460 --> 00:37:24,040 >> DAVID MALAN: ID er blot ét tegn, eller for at være mere præcis, det er et tal, 808 00:37:24,040 --> 00:37:26,910 så det er nok 32 bit eller noget lignende. 809 00:37:26,910 --> 00:37:30,270 Mens brugernavn, tilsyneladende Jason Hirschhorn er deroppe er en slags 810 00:37:30,270 --> 00:37:33,900 latterligt lang, og det kommer til at tage mig en masse mere tid til snor 811 00:37:33,900 --> 00:37:40,910 sammenligne H-I-R-S-C-H-H-O-R-N, og måske a / 0 eller sådan noget, for 812 00:37:40,910 --> 00:37:45,100 at se op Jason, i modsætning til blot siger give mig bruger nummer to. 813 00:37:45,100 --> 00:37:46,510 Det er 32 bit. 814 00:37:46,510 --> 00:37:48,550 Det er en enkelt INT der du nødt til at sammenligne. 815 00:37:48,550 --> 00:37:52,150 Og ja, det er præcis derfor, databaser tendens til at tildele entydige id'er til 816 00:37:52,150 --> 00:37:53,710 rækker i dem. 817 00:37:53,710 --> 00:37:56,280 >> Nu, hvad andre datatyper er der foruden INT og tilsyneladende 818 00:37:56,280 --> 00:37:57,160 strings som denne? 819 00:37:57,160 --> 00:37:59,700 Nå, for at være mere korrekt, SQL databaser, ligesom 820 00:37:59,700 --> 00:38:02,060 MySQL, har CHAR felter. 821 00:38:02,060 --> 00:38:05,320 Og fjeldørred lidt misvisende er ikke en enkelt CHAR. 822 00:38:05,320 --> 00:38:10,290 En char felt i en MySQL-database er et eller flere tegn, men det er en 823 00:38:10,290 --> 00:38:11,780 fast antal tegn. 824 00:38:11,780 --> 00:38:15,710 >> Så for eksempel, hvis jeg går over til phpMyAdmin, som du måske allerede har, eller 825 00:38:15,710 --> 00:38:21,340 snart vil et problem sæt syv, og jeg går til min database, og bare for sjov, 826 00:38:21,340 --> 00:38:25,700 Lad os oprette en ny tabel kaldet teste med blot to kolonner. 827 00:38:25,700 --> 00:38:27,160 Jeg vil klik derefter på Go. 828 00:38:27,160 --> 00:38:30,070 Og det vil blive nogenlunde fortrolig, især da du pille 829 00:38:30,070 --> 00:38:31,130 rundt på egen hånd. 830 00:38:31,130 --> 00:38:34,140 Her kunne jeg skrive id for at oprette en ny tabel af typen INT. 831 00:38:34,140 --> 00:38:37,770 Men her jeg kan skrive brugernavn til genskabe den tidligere tabel. 832 00:38:37,770 --> 00:38:40,700 Og bemærk jeg har en hel masse af typer at vælge imellem. 833 00:38:40,700 --> 00:38:43,610 >> Og det er også grunden til phpMyAdmin er lidt rart. 834 00:38:43,610 --> 00:38:46,770 Det er slags selv-undervisning i, at du kan bare form for punkt, og klik, og 835 00:38:46,770 --> 00:38:50,730 se på dropdown menuer, og udlede der hvilke beføjelser SQL giver dig. 836 00:38:50,730 --> 00:38:54,090 >> Og ja, hvis jeg vælger CHAR, jeg så nødt til at angive længden, eller hvordan 837 00:38:54,090 --> 00:38:55,940 mange værdier, hvor mange tegn. 838 00:38:55,940 --> 00:39:00,090 Så meget fælles værdier er ting som 255, men det er en lidt lang. 839 00:39:00,090 --> 00:39:02,250 Almindeligvis er otte om et brugernavn. 840 00:39:02,250 --> 00:39:03,590 Men det er lidt lille i disse dage. 841 00:39:03,590 --> 00:39:05,430 Så dette er en design beslutning. 842 00:39:05,430 --> 00:39:08,630 Er det 8 tegn max, 32, 255, 1000? 843 00:39:08,630 --> 00:39:09,830 Det er virkelig op til dig. 844 00:39:09,830 --> 00:39:12,350 Men en CHAR felt er et fast antal. 845 00:39:12,350 --> 00:39:16,420 Så vælg alt for få og du er slags skruet hvis du ønsker en længere brugernavn. 846 00:39:16,420 --> 00:39:19,132 Vælg for mange og hvad er downside? 847 00:39:19,132 --> 00:39:20,820 >> PUBLIKUM: [uhørligt]. 848 00:39:20,820 --> 00:39:21,620 >> DAVID MALAN: det er uøkonomisk. 849 00:39:21,620 --> 00:39:24,835 Ligesom i C, hvis du har en større luns af hukommelse end du har brug for, er du 850 00:39:24,835 --> 00:39:27,190 bare spilder tid og spild af plads. 851 00:39:27,190 --> 00:39:31,430 Så som et alternativ, findes der VARCHAR, som løser dette problem ved 852 00:39:31,430 --> 00:39:36,390 behandling af længde ikke som en fast længde, men som en maksimal længde, og ved hjælp af en 853 00:39:36,390 --> 00:39:40,990 variabelt antal tegn, som derefter tendens til kun at bruge så mange tegn, som du 854 00:39:40,990 --> 00:39:42,710 faktisk har brug for. 855 00:39:42,710 --> 00:39:43,670 Det lyder perfekt. 856 00:39:43,670 --> 00:39:45,640 >> Hvorfor vi ikke slippe af med Tegndatatype så? 857 00:39:45,640 --> 00:39:48,500 Hvad kunne være bagsiden af ​​medaljen hjælp VARCHARs, som lyder 858 00:39:48,500 --> 00:39:51,644 ligesom det er en dejlig sejr? 859 00:39:51,644 --> 00:39:52,596 Ja? 860 00:39:52,596 --> 00:39:53,846 >> PUBLIKUM: [uhørligt]. 861 00:39:53,846 --> 00:39:57,360 862 00:39:57,360 --> 00:39:57,790 >> DAVID MALAN: OK, godt. 863 00:39:57,790 --> 00:40:01,101 Så hvis alle dine data er den samme længde, hvad er den bekymring? 864 00:40:01,101 --> 00:40:05,250 >> PUBLIKUM: Fordi du spilder data ved at fortælle dem alle. 865 00:40:05,250 --> 00:40:09,060 >> DAVID MALAN: Så hvis alle dine data samme længde, vil jeg dog argumentere 866 00:40:09,060 --> 00:40:12,300 at angive en maksimal længde på VARCHAR er ikke anderledes end 867 00:40:12,300 --> 00:40:16,070 at angive et fast længde på CHAR hvis du ved, at antallet i forvejen. 868 00:40:16,070 --> 00:40:19,500 Men der er faktisk, og jeg vil slags uddrag fra dette svar virkeligheden 869 00:40:19,500 --> 00:40:22,610 at der stadig er et max, der kunne være irriterende, især hvis du 870 00:40:22,610 --> 00:40:25,920 støder på en persons navn, der er usædvanlig lang, at du ikke gjorde det 871 00:40:25,920 --> 00:40:26,860 forudse. 872 00:40:26,860 --> 00:40:31,420 Og det er også en lidt mindre effektiv til rent faktisk at søge på VARCHARs som 873 00:40:31,420 --> 00:40:35,620 modsætning til at søge tegn, især for lange borde, der har masser og 874 00:40:35,620 --> 00:40:36,510 masser af data. 875 00:40:36,510 --> 00:40:40,060 Så her også, tematisk er igen ingen indlysende valg. 876 00:40:40,060 --> 00:40:42,870 >> Så bare for at give dig en følelse af andre datatyper, der kunne være af interesse 877 00:40:42,870 --> 00:40:45,400 enten til p-sat syv eller fremtiden, er der INT. 878 00:40:45,400 --> 00:40:47,270 Der er BIGINT, som er ligesom lang lang. 879 00:40:47,270 --> 00:40:48,880 Det har tendens til at være 64 bits. 880 00:40:48,880 --> 00:40:51,640 Der er DECIMAL, som du kan se i problemet sæt, som er en meget 881 00:40:51,640 --> 00:40:55,300 renere svar på de problemer, vi stødt med float og flydende 882 00:40:55,300 --> 00:40:55,980 peger upræcise. 883 00:40:55,980 --> 00:40:57,390 Og så er der DATETIME. 884 00:40:57,390 --> 00:41:01,530 Der er bogstaveligt talt en datatype, der har at ligne et år, en måned, en dag, 885 00:41:01,530 --> 00:41:03,730 og en time, minut og sekund. 886 00:41:03,730 --> 00:41:07,470 >> Men SQL databaser har også ting, vi ringer indekser. 887 00:41:07,470 --> 00:41:11,630 Og et indeks er noget, du angive, når du opretter tabellen til at 888 00:41:11,630 --> 00:41:15,720 foretage søgninger og andre operationer mere effektiv. 889 00:41:15,720 --> 00:41:18,550 Konkret er der noget, der hedder det primært indeks, 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 det for dig med den brugere bord vi giver dig. 892 00:41:22,330 --> 00:41:26,160 Men læg mærke hvis jeg manuelt genskabe brugerne tabellen her give 893 00:41:26,160 --> 00:41:27,110 det et navn brugere. 894 00:41:27,110 --> 00:41:28,125 Jeg allerede angivne id. 895 00:41:28,125 --> 00:41:29,330 Jeg specificeret INT. 896 00:41:29,330 --> 00:41:32,000 Jeg angivne brugernavn med maksimalt 32 tegn. 897 00:41:32,000 --> 00:41:36,140 Men hvis vi holder rulle i dette forholdsvis bredt vindue, bekendtgørelse er der en 898 00:41:36,140 --> 00:41:38,260 masse andre ting, jeg kan angive. 899 00:41:38,260 --> 00:41:40,950 >> One, kan jeg angive attributter ligesom, ved du hvad, det 900 00:41:40,950 --> 00:41:42,190 INT burde være usigneret. 901 00:41:42,190 --> 00:41:45,510 Jeg ønsker ikke negative tal, så lad os gøre det usigneret. 902 00:41:45,510 --> 00:41:48,660 Null er ikke relevant her, fordi Jeg ønsker alle brugere 903 00:41:48,660 --> 00:41:49,640 have et unikt nummer. 904 00:41:49,640 --> 00:41:50,830 Jeg ønsker ikke at være nul. 905 00:41:50,830 --> 00:41:52,330 >> Men det er interessant. 906 00:41:52,330 --> 00:41:57,780 Jeg kan angive, at id er enten primære nøgle i denne database, eller det er 907 00:41:57,780 --> 00:42:00,620 unikke, eller det er indekseret, eller fuld tekst. 908 00:42:00,620 --> 00:42:05,630 Så for nutidens formål, lang historie kort, PRIMARY betyder, at dette skal 909 00:42:05,630 --> 00:42:10,570 være både konceptuelt og teknisk det felt, vi bruger til entydigt 910 00:42:10,570 --> 00:42:12,140 identificere brugere. 911 00:42:12,140 --> 00:42:16,140 >> Så når vi ser op brugere, dette er en slags af et løfte om at slå dem op for det meste af 912 00:42:16,140 --> 00:42:17,370 den unikke identifikator. 913 00:42:17,370 --> 00:42:21,930 Og databasen vil sikre, at hvis du har en bruger nummer 3, kan du ikke 914 00:42:21,930 --> 00:42:25,400 fysisk indsætte en anden bruger med det samme nummer 3. 915 00:42:25,400 --> 00:42:28,380 Databasen vil bare nægte at gemme dine ændringer. 916 00:42:28,380 --> 00:42:32,310 Hvilket er en god ting, fordi du kan beskytte dig mod dig selv. selv 917 00:42:32,310 --> 00:42:34,270 >> Alternativt for brugernavn. 918 00:42:34,270 --> 00:42:37,670 Så den anden række, tilbagekaldelse, er brugernavnet felt. 919 00:42:37,670 --> 00:42:41,860 Så den anden række her er brugernavn, som vi gjorde på det yderste venstre der. 920 00:42:41,860 --> 00:42:43,940 >> Så hvad ellers kan jeg ønsker at angive? 921 00:42:43,940 --> 00:42:47,840 Jeg er ikke tilladt, i henhold til SQL, at angive to primære nøgler. 922 00:42:47,840 --> 00:42:50,750 du kan angive en fælles nøgle, hvor du se på begge felter, men de kan ikke 923 00:42:50,750 --> 00:42:52,260 enkeltvis være primære nøgler. 924 00:42:52,260 --> 00:42:54,750 Så det er udelukket. 925 00:42:54,750 --> 00:42:56,040 Så der kunne jeg vil vælge? 926 00:42:56,040 --> 00:42:59,710 >> Nå, UNIQUE ligner i ånden til en primær nøgle, hvor du angiver dette 927 00:42:59,710 --> 00:43:03,570 område skal være unikke, men det er ikke kommer til at være den ene 928 00:43:03,570 --> 00:43:04,410 Jeg bruger hele tiden. 929 00:43:04,410 --> 00:43:08,450 Og vi kommer ikke til at bruge denne ene alle den tid, hvad grunden til igen? 930 00:43:08,450 --> 00:43:10,490 Det er langsommere potentielt hvis det er en lang brugernavn. 931 00:43:10,490 --> 00:43:11,740 Det er bare spild af tid. 932 00:43:11,740 --> 00:43:16,140 >> INDEX, i mellemtiden, præciserer, at det er ikke kommer til at være unikke, men jeg vil gerne 933 00:43:16,140 --> 00:43:19,470 dig at arbejde din magi under hætte for at gøre det hurtigere for mig at 934 00:43:19,470 --> 00:43:21,420 søg på dette område. 935 00:43:21,420 --> 00:43:23,320 Så dette er sandsynligvis ikke relevant her. 936 00:43:23,320 --> 00:43:26,500 For brugernavn, ville jeg argumentere for, at UNIQUE er et godt svar. 937 00:43:26,500 --> 00:43:31,200 Men formoder, at vi gjort brugerne mere interessant end blot brugernavne, 938 00:43:31,200 --> 00:43:32,430 hashes, og ID-numre. 939 00:43:32,430 --> 00:43:33,860 Hvad hvis vi gav folk fulde navne? 940 00:43:33,860 --> 00:43:37,700 Hvad hvis vi gav dem adresser og andre data om dem? 941 00:43:37,700 --> 00:43:43,360 >> Tja, hvis du angiver, at en kolonne i et database er indekseret, der betyder, at 942 00:43:43,360 --> 00:43:47,730 MySQL eller Oracle, eller hvad database du bruger, bør arbejde sin magi 943 00:43:47,730 --> 00:43:51,300 og bruge en form for fancy data struktur som et træ eller en trie, eller en 944 00:43:51,300 --> 00:43:55,940 hash tabel, eller noget til at garantere at når du søger efter data ved hjælp af 945 00:43:55,940 --> 00:43:58,150 vælger på det pågældende område - 946 00:43:58,150 --> 00:44:01,310 ligesom vise mig alle, at bor på Oxford Street. 947 00:44:01,310 --> 00:44:02,540 En forespørgsel sådan. 948 00:44:02,540 --> 00:44:06,250 Hvis du har angivet på forhånd, at du vil have et indeks på dette område, at 949 00:44:06,250 --> 00:44:09,050 søgninger vil være meget, meget hurtigere. 950 00:44:09,050 --> 00:44:12,090 >> Hvis du ikke angiver et indeks, den bedste du kan gøre, er en lineær søgning, hvis 951 00:44:12,090 --> 00:44:13,030 det er ikke sorteret. 952 00:44:13,030 --> 00:44:16,220 Men hvis du angiver INDEX, smart mennesker, der gjorde databasen - 953 00:44:16,220 --> 00:44:19,340 folk som dig, der nu kender træer og lande og hash-tabeller - 954 00:44:19,340 --> 00:44:23,220 vil automatisk bygge sådan en data- struktur i RAM for at sikre, at 955 00:44:23,220 --> 00:44:26,050 disse søgninger er meget hurtigere. 956 00:44:26,050 --> 00:44:29,660 >> FULLTEXT mellemtiden er ens i ånden, men tillader dig at gøre wildcard 957 00:44:29,660 --> 00:44:35,480 søgninger, ligesom vise mig alle, at bor på gader, der begynder med 958 00:44:35,480 --> 00:44:36,960 bogstavet O, uanset grunden. 959 00:44:36,960 --> 00:44:38,850 Du kan gøre med jokertegn sådan. 960 00:44:38,850 --> 00:44:45,880 Eller mere overbevisende ting som show mig alle, der har ordet - 961 00:44:45,880 --> 00:44:49,400 vise mig alle, hvis navn begynder med et bestemt bogstav. 962 00:44:49,400 --> 00:44:51,880 Du kan søge efter nøgleord på denne måde. 963 00:44:51,880 --> 00:44:52,630 Ok. 964 00:44:52,630 --> 00:44:55,760 >> Så, design muligheder der potentielt. 965 00:44:55,760 --> 00:44:57,740 Der er andre, som jeg vil bølge mine hænder på. 966 00:44:57,740 --> 00:45:00,530 Det viser sig, at du kan have forskellige opbevaring motorer. 967 00:45:00,530 --> 00:45:04,390 Og det er mere mystisk end vi har brug i hvert fald for problemet sæt syv. 968 00:45:04,390 --> 00:45:06,920 Som standard er du fyre hjælp noget, der hedder InnoDB. 969 00:45:06,920 --> 00:45:10,910 Du vil se omtale af dette sted i phpMyAdmin interface mest sandsynlige. 970 00:45:10,910 --> 00:45:14,130 Men ved, at der er andre design beslutninger, som er af potentiel 971 00:45:14,130 --> 00:45:18,030 interesse kommer afgangsprojekter hvis du gør noget web-baseret. 972 00:45:18,030 --> 00:45:19,330 >> Men lad os gøre det. 973 00:45:19,330 --> 00:45:23,130 Lad os gå videre og sætte dette på skærmen som en teaser til en historie 974 00:45:23,130 --> 00:45:26,330 involverer dig, en værelseskammerat, og et glas mælk. 975 00:45:26,330 --> 00:45:28,240 Lad os tage en to minutters eller så pause her. 976 00:45:28,240 --> 00:45:31,060 Og hvis du kan holde sig rundt, så lad os komme tilbage, se lidt mere på SQL, og 977 00:45:31,060 --> 00:45:35,160 så en smule af JavaScript med p-sæt otte i tankerne. 978 00:45:35,160 --> 00:45:36,120 >> Ok. 979 00:45:36,120 --> 00:45:40,420 Så lad os få dig til at tænke sig om en hjørne sag, der kan meget nemt opstå 980 00:45:40,420 --> 00:45:44,240 i forbindelse med anvendelse af en database eller helt ærligt, selv ved brug af virkelige verden tingene 981 00:45:44,240 --> 00:45:46,280 ligesom pengeautomater for at få penge. 982 00:45:46,280 --> 00:45:47,640 Så her er et køleskab. 983 00:45:47,640 --> 00:45:50,040 Antag, at du har fået en alt for i din kollegieværelset eller dit hus. 984 00:45:50,040 --> 00:45:54,990 Og du har en værelseskammerat, og begge af du virkelig gerne mælk 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 endnu ikke tilbage. 987 00:45:58,490 --> 00:45:59,180 Du åbner køleskabet. 988 00:45:59,180 --> 00:46:00,870 Du ønsker virkelig et stort glas mælk. 989 00:46:00,870 --> 00:46:01,820 Der er ingen mælk. 990 00:46:01,820 --> 00:46:02,920 Så hvad gør du? 991 00:46:02,920 --> 00:46:03,840 Du lukker køleskabet. 992 00:46:03,840 --> 00:46:04,670 Du fat i dine nøgler. 993 00:46:04,670 --> 00:46:05,930 Du går ud til pladsen. 994 00:46:05,930 --> 00:46:09,240 Og du får i linje på CVS på dem self checkout ting, som altid 995 00:46:09,240 --> 00:46:11,180 tage længere tid end egentlig have kasserere. 996 00:46:11,180 --> 00:46:11,820 Alligevel. 997 00:46:11,820 --> 00:46:15,490 >> Så, i mellemtiden, dot dot dot, din roommate kommer hjem, og han eller hun 998 00:46:15,490 --> 00:46:17,440 ligeledes har hang for nogle mælk. 999 00:46:17,440 --> 00:46:20,380 Så han eller hun åbner køleskabet, ser ud indvendigt, og åh, pokkers. 1000 00:46:20,380 --> 00:46:21,160 Ingen mælk. 1001 00:46:21,160 --> 00:46:24,750 Så han eller hun hoveder ud, sker for at gå til den anden CVS, som kun var en 1002 00:46:24,750 --> 00:46:27,900 blok væk eller anden grund, og han eller hun får i kø for at købe nogle mælk. 1003 00:46:27,900 --> 00:46:30,480 >> I mellemtiden, du kommer hjem, han eller hun kommer hjem, og hvad gør 1004 00:46:30,480 --> 00:46:31,980 du i sidste ende har? 1005 00:46:31,980 --> 00:46:33,080 Dobbelt så meget mælk. 1006 00:46:33,080 --> 00:46:34,620 Men du kan ikke rigtig lide mælk, meget. 1007 00:46:34,620 --> 00:46:37,300 Så nu har du så meget mælk, at nu en af ​​dem er bare at gå sur 1008 00:46:37,300 --> 00:46:37,820 til sidst. 1009 00:46:37,820 --> 00:46:39,370 Så dette er en virkelig dårlig problem. 1010 00:46:39,370 --> 00:46:39,900 Right? 1011 00:46:39,900 --> 00:46:41,990 >> Så hvad er der sket? 1012 00:46:41,990 --> 00:46:44,810 Så fundamentalt, det er lidt af en latterlig eksempel. 1013 00:46:44,810 --> 00:46:48,580 Men under hætten, hvad vi har haft ske her er både du tjekket 1014 00:46:48,580 --> 00:46:52,390 tilstanden af ​​nogle stykke hukommelse, køleskabet. 1015 00:46:52,390 --> 00:46:54,420 Begge du tjekket staten nogle variabel. 1016 00:46:54,420 --> 00:46:57,360 Du begge trak en konklusion at du derefter har handlet på. 1017 00:46:57,360 --> 00:47:01,420 Men desværre, mens din værelseskammerat var i butikken, staten at 1018 00:47:01,420 --> 00:47:05,670 variabel ændret sig, han eller hun kom tilbage og nu ønsker at ændre tilstanden, men 1019 00:47:05,670 --> 00:47:07,480 det er allerede blevet ændret på ham eller hende. 1020 00:47:07,480 --> 00:47:11,120 Og selvfølgelig ville han eller hun ikke har gået til butikken, hvis de vidste, 1021 00:47:11,120 --> 00:47:13,010 at du allerede var undervejs. 1022 00:47:13,010 --> 00:47:16,430 >> Så i den virkelige verden, hvordan kunne du undgå dette problem, forudsat du har 1023 00:47:16,430 --> 00:47:18,940 et køleskab, du har en værelseskammerat, og du faktisk kan lide mælk? 1024 00:47:18,940 --> 00:47:19,760 >> PUBLIKUM: Kommunikation. 1025 00:47:19,760 --> 00:47:20,580 >> DAVID MALAN: Kommunikation. 1026 00:47:20,580 --> 00:47:21,160 OK. 1027 00:47:21,160 --> 00:47:22,500 Men hvordan kan du kommunikere? 1028 00:47:22,500 --> 00:47:23,990 >> PUBLIKUM: Efterlad en note. 1029 00:47:23,990 --> 00:47:25,480 >> DAVID MALAN: Efterlad en note, right? 1030 00:47:25,480 --> 00:47:28,025 Sørg altid for en bemærkning, fans af showet. 1031 00:47:28,025 --> 00:47:31,580 Okay, så altid forlade en note, eller sætte virkelig som en hængelås eller noget 1032 00:47:31,580 --> 00:47:35,440 på køleskabet, der holder din værelseskammerat inspicere tilstanden af 1033 00:47:35,440 --> 00:47:36,540 denne variabel. 1034 00:47:36,540 --> 00:47:40,800 >> Nu, hvorfor kan dette være relevant for Problemet sæt syv eller pengeautomater. 1035 00:47:40,800 --> 00:47:46,780 Nå, forestille sig en verden i en ATM hvor du måske være i stand til at gå op til en ATM 1036 00:47:46,780 --> 00:47:48,920 maskine her, og en anden ATM her. 1037 00:47:48,920 --> 00:47:50,680 Og det sker ret ofte. 1038 00:47:50,680 --> 00:47:54,150 Og formoder, du havde to ATM-kort, hvilket er muligt at opnå. 1039 00:47:54,150 --> 00:47:57,420 Og du logger ind begge maskiner effektivt samtidig forhåbentlig 1040 00:47:57,420 --> 00:47:58,660 mens ingen kigger. 1041 00:47:58,660 --> 00:48:01,260 Og så skriver i din PIN-kode nogenlunde samtidigt. 1042 00:48:01,260 --> 00:48:06,280 Og så skal du gøre en balance forespørgsel for at se, hvor mange penge du har. 1043 00:48:06,280 --> 00:48:08,920 Og lad os sige du har $ 100 tilbage på din konto. 1044 00:48:08,920 --> 00:48:13,310 Så det væsentlige samtidigt, du sige en, nul, nul, skal du indtaste. 1045 00:48:13,310 --> 00:48:16,000 Og du forhåbentlig komme tilbage nogle penge. 1046 00:48:16,000 --> 00:48:18,440 >> Men hvor mange penge kan du få tilbage? 1047 00:48:18,440 --> 00:48:21,710 Nu computere i slutningen af ​​dagen, især hvis de taler til 1048 00:48:21,710 --> 00:48:27,360 servere, ikke nødvendigvis gør tingene i den rækkefølge, der er forventet. 1049 00:48:27,360 --> 00:48:30,860 >> Så formoder, hvad der sker på grund af uanset netværk hastighed spørgsmål der 1050 00:48:30,860 --> 00:48:34,530 er, eller CPU problemer der er, eller noget lignende, antage, at 1051 00:48:34,530 --> 00:48:38,530 første ATM kontrollerer din balance og ser, åh, denne person har 100 dollars. 1052 00:48:38,530 --> 00:48:41,840 Men derefter bliver distraheret fordi måske en backup der sker, og så det er 1053 00:48:41,840 --> 00:48:42,500 langsommere. 1054 00:48:42,500 --> 00:48:45,080 Eller måske, mens du kontrollerer, netværket forbindelse fik lidt langsommere, fordi 1055 00:48:45,080 --> 00:48:45,910 dette sker bare. 1056 00:48:45,910 --> 00:48:47,100 De er fysiske enheder. 1057 00:48:47,100 --> 00:48:49,330 Så i mellemtiden, den anden ATM stiller det samme spørgsmål. 1058 00:48:49,330 --> 00:48:53,030 Hvor mange penge David har? $ 100 er svaret. 1059 00:48:53,030 --> 00:48:58,930 Men fordi den første ATM endnu ikke sendt beskeden trække $ 100, både 1060 00:48:58,930 --> 00:49:03,000 Pengeautomater har inspiceret bankens hvælving, se der er $ 100 der, og nu 1061 00:49:03,000 --> 00:49:07,160 begge maskiner potentielt er kommer til at spytte ud et svar. 1062 00:49:07,160 --> 00:49:12,240 >> Nu, dette er godt for dig i en vis forstand hvis hvad banken gør i sidste ende 1063 00:49:12,240 --> 00:49:17,200 er ændre beløbet til minus 100 af indstille den variable svarende til din 1064 00:49:17,200 --> 00:49:21,570 bankkonto lig med 0, i modsætning til at gøre minus 100. 1065 00:49:21,570 --> 00:49:24,410 Nu i værste fald for banken - 1066 00:49:24,410 --> 00:49:27,470 eller i den bedst for banken, i mellemtiden, de giver dig $ 200, og 1067 00:49:27,470 --> 00:49:31,690 din bankkonto viser nu negativ $ 100, som virkelig ikke 1068 00:49:31,690 --> 00:49:32,950 gavne dig på alle. 1069 00:49:32,950 --> 00:49:36,500 Men pointen er, at dette løb betingelse for to bofæller få 1070 00:49:36,500 --> 00:49:40,660 mælk eller to pengeautomater forsøger at få kontanter og ændre tilstanden af ​​en hvælving 1071 00:49:40,660 --> 00:49:44,510 samtidig eksisterer nogen gang du har en database. 1072 00:49:44,510 --> 00:49:48,290 >> Nu i problemet sæt syv, dette emne opstår i den forstand, at hvis du køber en 1073 00:49:48,290 --> 00:49:52,110 andel af Facebook bestand, og derefter for eksempel kan du købe en anden andel af 1074 00:49:52,110 --> 00:49:55,160 Facebook lager, skal du gøre en beslutning som programmør. 1075 00:49:55,160 --> 00:49:58,710 For at afgøre, hvordan du opdaterer database, odds er du kommer til at 1076 00:49:58,710 --> 00:50:02,250 har én række for den pågældende bestand, og det er en måde at gennemføre den. 1077 00:50:02,250 --> 00:50:06,640 Og du kommer til at have en andel af FB, som er deres børssymbol 1078 00:50:06,640 --> 00:50:10,120 for dette brugernavn, eller denne bruger Id, den entydige identifikator. 1079 00:50:10,120 --> 00:50:12,340 >> Men den samme historie kan ske her. 1080 00:50:12,340 --> 00:50:15,800 Hvis du gør en SELECT i SQL, som du vil se i problemet sæt syv, når du ser, 1081 00:50:15,800 --> 00:50:18,460 Åh, David har én aktieklasse på Facebook lager. 1082 00:50:18,460 --> 00:50:23,240 Lad mig nu ændre dette at være to aktier fordi han ønsker at købe en 1083 00:50:23,240 --> 00:50:24,120 anden kvote. 1084 00:50:24,120 --> 00:50:27,860 Men formoder David havde faktisk to browservinduer åbne, eller formoder, at 1085 00:50:27,860 --> 00:50:32,150 Det er en fælles konto med to ægtefæller, og begge forsøger at udføre 1086 00:50:32,150 --> 00:50:36,770 den samme operation, der også, det potentiale for en beslutning om at være 1087 00:50:36,770 --> 00:50:39,670 foretaget på grundlag af den tidligere verdens tilstand - 1088 00:50:39,670 --> 00:50:41,290 kontoen har én aktie - 1089 00:50:41,290 --> 00:50:45,630 og både mennesker, eller begge servere, nu prøv at sige forøge det til to aktier. 1090 00:50:45,630 --> 00:50:49,020 Men i dette tilfælde, du måske har opkrævet mig penge for begge aktier, men 1091 00:50:49,020 --> 00:50:50,830 inkrementeres netop én gang. 1092 00:50:50,830 --> 00:50:54,730 >> Så kort sagt, det grundlæggende problem her, som med vittighed om at forlade en 1093 00:50:54,730 --> 00:50:58,750 Bemærk, eller sætte en hængelås på det, er hvis to mennesker, eller to tråde - 1094 00:50:58,750 --> 00:50:59,930 tænke tilbage på bunden - 1095 00:50:59,930 --> 00:51:03,220 kan inspicere nogle variable og derefter forsøge at ændre denne variabel, 1096 00:51:03,220 --> 00:51:07,950 men disse to ting ikke ske på samme tid, men kan blive afbrudt 1097 00:51:07,950 --> 00:51:11,500 af andre ting, der sker, data kan komme ind i en meget underlig tilstand. 1098 00:51:11,500 --> 00:51:15,450 Og du kan drage fordel, eller du kan lide i den forstand eksempel penge. 1099 00:51:15,450 --> 00:51:18,110 >> Så i problem sæt syv, giver vi dig denne linje kode, som længe 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 meget lang instruktion, der ikke endda være på en enkelt linje på 1102 00:51:24,950 --> 00:51:30,370 skærm her sikrer, at din operation er, hvad der kaldes atom. 1103 00:51:30,370 --> 00:51:33,720 Det hele sker på én gang, eller det sker ikke på alle. 1104 00:51:33,720 --> 00:51:37,530 Denne meget lange sætning kan ikke få afbrudt delvist. 1105 00:51:37,530 --> 00:51:39,840 >> Og hvad det gør, er bogstaveligt talt hvad den siger. 1106 00:51:39,840 --> 00:51:44,200 Sæt ind i nogle tabel følgende tre felter disse specifikke værdier, 1107 00:51:44,200 --> 00:51:47,280 men om duplikeret nøgle, ikke gør en indsats. 1108 00:51:47,280 --> 00:51:48,280 Gør en opdatering. 1109 00:51:48,280 --> 00:51:52,450 Så det er ligesom at gøre en SELECT og en INSERT så at sige på samme tid. 1110 00:51:52,450 --> 00:51:55,150 Og hvad er den nøgle, der er nok der henvises til her? 1111 00:51:55,150 --> 00:51:58,300 1112 00:51:58,300 --> 00:52:01,380 >> Det viser sig, og du vil se dette i problem sæt syv spec, fordi 1113 00:52:01,380 --> 00:52:06,040 vi har erklæret, at der er en unik nøgle på denne særlige tabel, så 1114 00:52:06,040 --> 00:52:08,480 du kan ikke have flere rækker for den samme bruger med det 1115 00:52:08,480 --> 00:52:10,150 samme penny stock symbol - 1116 00:52:10,150 --> 00:52:13,780 i dette eksempel her, DVN.V er en dum penny stock, at vi 1117 00:52:13,780 --> 00:52:14,980 henvises til i spec. 1118 00:52:14,980 --> 00:52:17,860 Fordi vi har erklæret, at det unikke, hvad det betyder er, at hvis du 1119 00:52:17,860 --> 00:52:23,580 forsøger at indsætte en dublet række, du er i stedet kommer til at opdatere det uden 1120 00:52:23,580 --> 00:52:27,020 nogen andre har en chance for at ændre tilstand verden enten. 1121 00:52:27,020 --> 00:52:29,400 Så kort sagt, dette sikrer tingene er atomare. 1122 00:52:29,400 --> 00:52:32,530 >> Mere generelt selvom, databaser som MySQL - 1123 00:52:32,530 --> 00:52:35,460 og du behøver ikke denne funktion p-sæt syv, men holde det i tankerne for 1124 00:52:35,460 --> 00:52:36,200 fremtiden - 1125 00:52:36,200 --> 00:52:38,870 støtte det, der kaldes transaktioner hvor man kan sige 1126 00:52:38,870 --> 00:52:40,990 START TRANSACTION bogstaveligt. 1127 00:52:40,990 --> 00:52:43,270 Du kan derefter udføre to SQL udsagn. 1128 00:52:43,270 --> 00:52:45,710 Og en SQL-sætning, som du vil se i p-sæt syv, ser lidt 1129 00:52:45,710 --> 00:52:46,750 noget som dette. 1130 00:52:46,750 --> 00:52:48,820 Opdater en tabel kaldet konto. 1131 00:52:48,820 --> 00:52:52,550 Indstil balance kolonne svarer til, hvad kolonnen i øjeblikket balance 1132 00:52:52,550 --> 00:52:57,280 er minus 1,000 hvor nummeret, kontonummer, som bruger-id, 1133 00:52:57,280 --> 00:53:00,830 lig 2, og derefter opdatere konto dot dot dot. 1134 00:53:00,830 --> 00:53:04,350 >> Så i lægmandssprog, hvad gør disse to forespørgsler synes at gøre i 1135 00:53:04,350 --> 00:53:05,840 virkelige verden følelse af banksektoren? 1136 00:53:05,840 --> 00:53:07,440 >> PUBLIKUM: Overførsel til besparelser. 1137 00:53:07,440 --> 00:53:08,020 >> DAVID MALAN: Præcis. 1138 00:53:08,020 --> 00:53:10,470 Overførsel af midler fra en konto til den anden. 1139 00:53:10,470 --> 00:53:14,400 Og dette er et andet eksempel, hvor du virkelig ønsker, at disse to ting til at ske 1140 00:53:14,400 --> 00:53:15,570 eller ikke ske. 1141 00:53:15,570 --> 00:53:18,880 Du ønsker ikke noget at komme i midten af ​​dem og potentielt rodet op 1142 00:53:18,880 --> 00:53:22,220 matematik, eller rodet op, hvor meget penge du har, eller hvor meget 1143 00:53:22,220 --> 00:53:23,170 penge har banken. 1144 00:53:23,170 --> 00:53:26,890 Så hvad er virkelig rart om transaktioner i MySQL er, og 1145 00:53:26,890 --> 00:53:30,160 databaser mere generelt, er, at de og intelligente mennesker, der har gennemført 1146 00:53:30,160 --> 00:53:33,670 disse funktioner finde ud af at gøre sikker på, at begge disse ting sker 1147 00:53:33,670 --> 00:53:35,120 eller slet ikke. 1148 00:53:35,120 --> 00:53:38,580 >> Og hvis du virkelig ønsker at gøre en hjemmeside, der bruges af folk på 1149 00:53:38,580 --> 00:53:41,490 campus, folk i den virkelige verden, gør noget i opstart forstand, 1150 00:53:41,490 --> 00:53:43,300 det er disse former for design beslutninger, der 1151 00:53:43,300 --> 00:53:45,020 blive stadig så vigtigt. 1152 00:53:45,020 --> 00:53:48,240 Ellers, du begynder at miste data, mister brugere, eller i værste fald som 1153 00:53:48,240 --> 00:53:51,800 vi har set her, potentielt tabe penge. 1154 00:53:51,800 --> 00:53:56,180 Så igen, mere om det i problem sæt syv, samt måske for nogle af 1155 00:53:56,180 --> 00:53:57,530 du i de afsluttende projekter. 1156 00:53:57,530 --> 00:54:01,870 >> Så lad os ændre det billede, vi havde for et øjeblik siden bare i endnu en måde. 1157 00:54:01,870 --> 00:54:04,070 Så lad mig faktisk se, hvis jeg kan - 1158 00:54:04,070 --> 00:54:06,030 nope, der er gået. 1159 00:54:06,030 --> 00:54:06,690 Der er det. 1160 00:54:06,690 --> 00:54:09,020 >> Så dette er, hvor vi forlod sidste gang. 1161 00:54:09,020 --> 00:54:12,390 Og det viser sig, vi kommer til at kaste en ting mere i blandingen her - 1162 00:54:12,390 --> 00:54:14,510 et sprog kaldet JavaScript. 1163 00:54:14,510 --> 00:54:18,060 Så JavaScript faktisk passer i dette stykke - 1164 00:54:18,060 --> 00:54:22,086 og jeg ikke helt nok plads, så det er nu ikke til at skalere. 1165 00:54:22,086 --> 00:54:23,900 OK, det er virkelig ynkeligt. 1166 00:54:23,900 --> 00:54:27,075 OK, så det er JavaScript. 1167 00:54:27,075 --> 00:54:27,340 Ok. 1168 00:54:27,340 --> 00:54:28,760 Jeg er virkelig gø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 anden programmering sprog, og vores sidste, hvis det hjælper 1171 00:54:34,790 --> 00:54:37,770 berolige, at der er ikke meget mere af brandhaner her. 1172 00:54:37,770 --> 00:54:41,100 Så JavaScript er også et fortolket sprog, hvilket betyder, at du ikke gør 1173 00:54:41,100 --> 00:54:42,670 kompilere det i nuller og ettaller. 1174 00:54:42,670 --> 00:54:43,690 Du skal bare køre den. 1175 00:54:43,690 --> 00:54:47,680 Men hvad er fundamentalt anderledes med JavaScript regel er, at du 1176 00:54:47,680 --> 00:54:49,815 ikke køre det på din webserver. 1177 00:54:49,815 --> 00:54:52,570 Det bliver ikke køre i Apparatet per se. 1178 00:54:52,570 --> 00:54:57,490 Snarere, det bliver hentet af en bruger via HTTP i deres browser - 1179 00:54:57,490 --> 00:55:00,260 Chrome, Safari, Internet Explorer, Firefox, uanset hvad - 1180 00:55:00,260 --> 00:55:03,860 og det er den browser, der udfører dette bestemt programmeringssprog. 1181 00:55:03,860 --> 00:55:08,000 >> Så for at være klar, PHP hidtil har været henrettet enten på kommandolinjen i 1182 00:55:08,000 --> 00:55:11,290 vores sorte og hvide vindue, på en server ligesom apparatet en computer 1183 00:55:11,290 --> 00:55:14,490 gerne apparatet, eller det har været udføres af en web-server 1184 00:55:14,490 --> 00:55:15,860 kører på en computer. 1185 00:55:15,860 --> 00:55:20,490 Men temaet her er, at PHP hidtil er blevet udført server-side, så 1186 00:55:20,490 --> 00:55:24,820 brugeren og brugerens browser aldrig ser en linje af PHP kode. 1187 00:55:24,820 --> 00:55:28,530 >> I virkeligheden, hvis du nogensinde åbne en browser for dit andet websted eller, og du 1188 00:55:28,530 --> 00:55:32,400 faktisk se PHP kode i dit vindue, nogen har skruet op. 1189 00:55:32,400 --> 00:55:34,950 Fordi det ikke er beregnet til at være sendes til en browser direkte. 1190 00:55:34,950 --> 00:55:38,150 Det er meningen at blive henrettet, og drejes til noget som HTML. 1191 00:55:38,150 --> 00:55:40,120 >> Men JavaScript er hovedsagelig det modsatte. 1192 00:55:40,120 --> 00:55:44,350 Det er beregnet til at blive kørt typisk inde af en brugers browser-vindue. 1193 00:55:44,350 --> 00:55:46,840 Og hvilke typer af hjemmesider bruger JavaScript så disse dage? 1194 00:55:46,840 --> 00:55:49,640 1195 00:55:49,640 --> 00:55:52,180 >> Ligesom bogstaveligt hver populær hjemmeside. 1196 00:55:52,180 --> 00:55:55,430 Hvert websted, du fyre sandsynligvis bruger dagligt bruge JavaScript for 1197 00:55:55,430 --> 00:55:57,330 enkleste og endda mest sexede funktioner. 1198 00:55:57,330 --> 00:55:59,800 >> Så noget som Facebook Chat, hvis du bruger det. 1199 00:55:59,800 --> 00:56:01,040 Hvordan det rent faktisk arbejder? 1200 00:56:01,040 --> 00:56:05,090 Nå hidtil, alle de ting vi har gøres med HTML og PHP antager, at 1201 00:56:05,090 --> 00:56:08,750 du trækker op en URL, og du trykker Enter, og du se nogle HTML-indhold. 1202 00:56:08,750 --> 00:56:11,970 Og du klikker på linket, der ændrer URL, skifter siden, og genindlæser 1203 00:56:11,970 --> 00:56:12,740 nogle nye indhold. 1204 00:56:12,740 --> 00:56:16,340 Klik på en anden URL eller indsende en formular, du få ført til en anden side, og 1205 00:56:16,340 --> 00:56:17,420 du se nogle nye indhold. 1206 00:56:17,420 --> 00:56:22,710 >> Men ved hjælp af noget som Facebook Chat, eller Gchat eller Google Maps, sjældent 1207 00:56:22,710 --> 00:56:27,350 gør hele siden genopfriske sådan, at du ser en hvid skærm øjeblik og 1208 00:56:27,350 --> 00:56:28,470 så nyt indhold. 1209 00:56:28,470 --> 00:56:32,610 Snarere, websider i dag er dynamisk få opdateret igen, og 1210 00:56:32,610 --> 00:56:35,570 igen og igen alle slags af bag kulisserne. 1211 00:56:35,570 --> 00:56:38,560 Og det viser sig, at når du går til noget som Facebook eller Gchat, 1212 00:56:38,560 --> 00:56:43,050 eller Gmail, og siden opdateres automatisk uden at genindlæse 1213 00:56:43,050 --> 00:56:47,630 hele skærmen, hvad der er sket, er, at din browser har gjort slags hemmeligt 1214 00:56:47,630 --> 00:56:49,410 yderligere HTTP-anmodninger - 1215 00:56:49,410 --> 00:56:52,740 ikke for hele websider, men bare for små klumper af data, ligesom det 1216 00:56:52,740 --> 00:56:55,740 instant message, at din ven bare sendt dig, eller statusopdatering, at 1217 00:56:55,740 --> 00:56:58,210 nogen lige sendt dig, eller tweet at nogen netop sendt. 1218 00:56:58,210 --> 00:57:02,120 Det er bare at lave små anmodninger om data, og derefter bruge JavaScript, dette 1219 00:57:02,120 --> 00:57:06,370 programmeringssprog, at ændre, hvad websiden ligner uden 1220 00:57:06,370 --> 00:57:09,860 server hjælper, uden serveren genererer, at HTML. 1221 00:57:09,860 --> 00:57:13,820 >> Så kort kan JavaScript bruges så til ikke kun at hente nye data fra 1222 00:57:13,820 --> 00:57:16,750 serveren uden at genindlæse hele side eller sender en formular. 1223 00:57:16,750 --> 00:57:20,060 Det kan også bruges til at ændre det såkaldte DOM - 1224 00:57:20,060 --> 00:57:21,520 Document Object Model - 1225 00:57:21,520 --> 00:57:24,620 som er lige den fancy måde for siger træet HTML 1226 00:57:24,620 --> 00:57:26,220 at vi så sidste gang. 1227 00:57:26,220 --> 00:57:31,640 >> Så for at berolige, JavaScript er syntaktisk så ligner C så godt. 1228 00:57:31,640 --> 00:57:32,820 Der er ingen hovedfunktion. 1229 00:57:32,820 --> 00:57:35,430 Du skal bare begynde at skrive koden og det vil blive udført, eller 1230 00:57:35,430 --> 00:57:36,900 fortolket mere korrekt. 1231 00:57:36,900 --> 00:57:38,660 Betingelser vil se sådan ud. 1232 00:57:38,660 --> 00:57:41,230 Ikke forskellige fra C eller PHP for den sags skyld. 1233 00:57:41,230 --> 00:57:43,890 Boolske udtryk eller-ed sammen vil se sådan ud. 1234 00:57:43,890 --> 00:57:45,590 Anded sammen ligne dette. 1235 00:57:45,590 --> 00:57:47,750 >> Skifter vil se sådan ud. 1236 00:57:47,750 --> 00:57:49,440 For løkker vil se sådan ud. 1237 00:57:49,440 --> 00:57:51,060 Mens loops vil se sådan ud. 1238 00:57:51,060 --> 00:57:53,316 Gør mens loops vil se sådan ud. 1239 00:57:53,316 --> 00:57:54,780 >> Dette er nyt. 1240 00:57:54,780 --> 00:57:58,753 Så JavaScript ikke har en foreach konstruere per se, men dette konstruere 1241 00:57:58,753 --> 00:58:03,870 for variabel i i array, og jeg i denne tilfælde bliver en indeksværdi. 1242 00:58:03,870 --> 00:58:06,880 Så det er lidt forskelligt fra det foreach, skønt nye versioner af 1243 00:58:06,880 --> 00:58:10,280 JavaScript kommer ud hele tiden, så selv disse sprog har 1244 00:58:10,280 --> 00:58:10,880 er under udvikling. 1245 00:58:10,880 --> 00:58:16,920 >> Og som en sidebemærkning, JavaScript disse dage kan også bruges på en server, ligesom 1246 00:58:16,920 --> 00:58:19,920 PHP ved hjælp af en ramme, der kaldes Node.js. 1247 00:58:19,920 --> 00:58:24,670 Et af CS50 s TFs, Kevin, har medført en seminar om Node.js der er til rådighed 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 nysgerrig, ved, at du kan bruge dette på serveren side, som 1250 00:58:28,830 --> 00:58:33,870 godt, men det er en forholdsvis ny trend, men en kraftig en af ​​slagsen. 1251 00:58:33,870 --> 00:58:35,270 >> Dette er en lidt anderledes. 1252 00:58:35,270 --> 00:58:37,910 Dette er et array i JavaScript. 1253 00:58:37,910 --> 00:58:40,115 Og hvad slår dig som anderledes versus C eller PHP? 1254 00:58:40,115 --> 00:58:43,890 1255 00:58:43,890 --> 00:58:47,420 Der er et par hurtige historier Vi kan fortælle her. 1256 00:58:47,420 --> 00:58:49,367 Hvad 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, siger igen? 1260 00:58:53,322 --> 00:58:54,740 >> PUBLIKUM: Ikke erklære typen af ​​variabel. 1261 00:58:54,740 --> 00:58:56,390 >> DAVID MALAN: Vi er ikke erklære typen af ​​variabel. 1262 00:58:56,390 --> 00:58:59,630 Så egentlig ganske ligesom PHP, vi er ikke angivelse af de typer af denne variabel. 1263 00:58:59,630 --> 00:59:02,670 Snarere vi er mere generisk siger VaR variabel. 1264 00:59:02,670 --> 00:59:06,690 Vi har ikke PHP gener for dollartegn, hvilket samtidig besværligt at 1265 00:59:06,690 --> 00:59:09,160 typen, gør mere klart, at noget er en variabel. 1266 00:59:09,160 --> 00:59:11,830 Betragtninger her, er vi slags tilbage til C tilgang ved blot at kalde en 1267 00:59:11,830 --> 00:59:14,500 variabel ved navn, vi ønsker at give det, ligesom tal. 1268 00:59:14,500 --> 00:59:17,170 Og også som PHP, har vi firkantede parenteser for 1269 00:59:17,170 --> 00:59:19,170 værdier inde denne array. 1270 00:59:19,170 --> 00:59:22,490 >> Så variabler i JavaScript også kunne se sådan ud. 1271 00:59:22,490 --> 00:59:26,900 Bemærk her er en streng kaldet s, men ligeledes har vi ikke specificeret 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 dog en funktion, der ikke eksisterer i nøjagtig samme måde i PHP, 1274 00:59:33,160 --> 00:59:34,460 men en smule tilsvarende. 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 slags den schweiziske hær Kniv af en datastruktur i, at du 1277 00:59:42,110 --> 00:59:43,900 kan bruge dem til en række ting. 1278 00:59:43,900 --> 00:59:46,860 >> Her, for eksempel, vi erklære en variabel kaldet citat. 1279 00:59:46,860 --> 00:59:49,110 Den type af denne variabel er et objekt. 1280 00:59:49,110 --> 00:59:53,550 Du kan tænke på det som en C struct der har nøgler og værdier. 1281 00:59:53,550 --> 00:59:55,250 Symbol er en nøgle. 1282 00:59:55,250 --> 00:59:57,350 FB er en værdi, tilsyneladende en bestand symbol. 1283 00:59:57,350 --> 00:59:57,930 Komma. 1284 00:59:57,930 --> 01:00:02,180 Prisen er en anden nøgle, og dens værdi er tilsyneladende et decimaltal, eller en 1285 01:00:02,180 --> 01:00:06,510 nummer mere generelt i JavaScript, for 49,26 dollar. 1286 01:00:06,510 --> 01:00:09,030 >> Så PHP har ikke - 1287 01:00:09,030 --> 01:00:12,980 vi ikke har set i PHP objekter helt som dette, men vi kunne se en analog, 1288 01:00:12,980 --> 01:00:14,093 hvilket var, hvad? 1289 01:00:14,093 --> 01:00:14,980 >> PUBLIKUM: [uhørlig]. 1290 01:00:14,980 --> 01:00:16,110 >> DAVID MALAN: Associative arrays. 1291 01:00:16,110 --> 01:00:19,990 Så mens PHP har associative arrays hvis syntaks er stadigt en smule, så 1292 01:00:19,990 --> 01:00:20,370 anderledes - 1293 01:00:20,370 --> 01:00:21,780 vi oplevede de firkantede parenteser. 1294 01:00:21,780 --> 01:00:23,860 Vi så de underlige pile symboler. 1295 01:00:23,860 --> 01:00:27,330 JavaScript har objekter, men dette er for det meste en semantisk forskel, og en 1296 01:00:27,330 --> 01:00:29,260 anderledes synonym for nu. 1297 01:00:29,260 --> 01:00:35,060 Men som en sidebemærkning, PHP har også objekter på en måde, Java og andet 1298 01:00:35,060 --> 01:00:37,810 sprog har objekter i objektorienteret programmering. 1299 01:00:37,810 --> 01:00:40,440 Men vi vil bruge disse blot for datatyper til nu. 1300 01:00:40,440 --> 01:00:42,170 Objekter og associative arrays. 1301 01:00:42,170 --> 01:00:44,140 >> Dette kunne man gøre det lidt mere klart. 1302 01:00:44,140 --> 01:00:45,890 Her er hvorfor et objekt er nyttigt. 1303 01:00:45,890 --> 01:00:48,760 Når du ønsker at erklære en elev, Ligesom Zamyla, kan vi faktisk 1304 01:00:48,760 --> 01:00:52,630 indkapsle så at sige indersiden af ​​det objekt ved hjælp krøllede parenteser ligesom 1305 01:00:52,630 --> 01:00:55,060 før en hel masse nøgler og værdier i her. 1306 01:00:55,060 --> 01:00:59,150 Vi har et ID, et hus, og et navn til Zamyla, efterfulgt af et semikolon som 1307 01:00:59,150 --> 01:01:00,690 sædvanlig i slutningen. 1308 01:01:00,690 --> 01:01:04,840 >> Hernede også, det er lidt anderledes, men også meget kraftfuld 1309 01:01:04,840 --> 01:01:05,690 disse dage. 1310 01:01:05,690 --> 01:01:08,780 Her er et array, og jeg ved, at fordi der er en firkantet beslag op 1311 01:01:08,780 --> 01:01:11,090 top og en kantet parentes nederst. 1312 01:01:11,090 --> 01:01:16,050 Og dette er en vifte af hvilke data skriv tilsyneladende i JavaScript? 1313 01:01:16,050 --> 01:01:21,260 Dette er en matrix af det ser ligesom tre objekter. 1314 01:01:21,260 --> 01:01:24,580 Og jeg ved, det er kun et objekt på grund af de krøllede parenteser. 1315 01:01:24,580 --> 01:01:28,760 Og bemærk at der er åbent klammeparentes, nogle ting tæt klammeparentes, komma, 1316 01:01:28,760 --> 01:01:31,180 derefter nogle flere, komma, og derefter nogle flere. 1317 01:01:31,180 --> 01:01:33,800 Så det er tre argumenter adskilt af to komma. 1318 01:01:33,800 --> 01:01:36,810 >> Så dette er en vifte af tre objekter. 1319 01:01:36,810 --> 01:01:39,940 Og hver af disse objekter synes at være en studerende eller ansat af nogle 1320 01:01:39,940 --> 01:01:42,370 slags, hver med et ID, hus, og navn. 1321 01:01:42,370 --> 01:01:45,060 Men jeg har kaldt det noget kaldet 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, der faktisk er så meget populære og 1324 01:01:52,060 --> 01:01:55,100 mode i disse dage, at hvis du skriver en program, der bruger Facebook 1325 01:01:55,100 --> 01:01:59,150 API, Twitter API, virkelig næsten enhver API derude i disse dage, 1326 01:01:59,150 --> 01:02:02,820 herunder nogle af CS50 egen den data, du får tilbage er ikke i 1327 01:02:02,820 --> 01:02:04,720 gamle skole CSV-format. 1328 01:02:04,720 --> 01:02:06,780 >> Fordi huske, at CSV er super simpelt. 1329 01:02:06,780 --> 01:02:10,230 Det er kun kolonner adskilt af kommaer. 1330 01:02:10,230 --> 01:02:13,190 JSON data giver dig flere metadata. 1331 01:02:13,190 --> 01:02:17,800 Det knytter en nøgle med hver værdi, så de behøver ikke at bare antage, at 1332 01:02:17,800 --> 01:02:22,460 nulte søjle er en værdi, kolonne den ene er den anden, den anden kolonne er en anden. 1333 01:02:22,460 --> 01:02:26,790 Alt i et JSON objekt her er en slags af selv-beskrive, fordi hver 1334 01:02:26,790 --> 01:02:30,940 et af navnene i denne fil har bogstaveligt navn foran det som en 1335 01:02:30,940 --> 01:02:32,510 citeret streng. 1336 01:02:32,510 --> 01:02:34,950 >> Så lad os tage et kig på en par eksempler her. 1337 01:02:34,950 --> 01:02:36,800 Lad mig gå ind i apparatet. 1338 01:02:36,800 --> 01:02:41,000 Og lad mig gå ind i vores vhost biblioteket i offentligheden. 1339 01:02:41,000 --> 01:02:45,590 Og lad mig gå ind i JavaScript bibliotek. 1340 01:02:45,590 --> 01:02:49,610 Og lad os gå videre og åbne op DOM-0.html, hvor DOM betyder blot 1341 01:02:49,610 --> 01:02:51,010 dokument objekt model. 1342 01:02:51,010 --> 01:02:53,490 Det er træet ting, som Jeg nævnte tidligere. 1343 01:02:53,490 --> 01:02:54,950 >> Og lad mig foreslå følgende. 1344 01:02:54,950 --> 01:02:57,720 Her er en webside, hvis krop er temmelig simpel. 1345 01:02:57,720 --> 01:03:00,170 Så hernede på bunden, Bemærk, at jeg har en formular. 1346 01:03:00,170 --> 01:03:01,500 Vi har set dem før. 1347 01:03:01,500 --> 01:03:07,600 Den har to indgange, hvoraf den ene har en ID navn, hvoraf den ene har en type af 1348 01:03:07,600 --> 01:03:09,830 indsende, og den første ens type er tekst. 1349 01:03:09,830 --> 01:03:11,900 Så det faktisk lyder ret simpelt. 1350 01:03:11,900 --> 01:03:13,090 >> Lad os gå her. 1351 01:03:13,090 --> 01:03:15,390 Lad os gå tilbage til denne side her. 1352 01:03:15,390 --> 01:03:21,030 Lad os gå ind i localhost, og gå ind i vores JavaScript-bibliotek, og gå til 1353 01:03:21,030 --> 01:03:24,640 DOM-0, og her har vi denne formular. 1354 01:03:24,640 --> 01:03:26,550 Så det er tilsyneladende al denne side gør. 1355 01:03:26,550 --> 01:03:28,740 Det har et navn felt med knappen Send. 1356 01:03:28,740 --> 01:03:30,340 Men jeg har ikke tænkt mig at bruge PHP her. 1357 01:03:30,340 --> 01:03:34,310 Jeg har tænkt mig at gøre alt klientsiden så at sige i JavaScript som følger. 1358 01:03:34,310 --> 01:03:39,100 >> Bemærk, at jeg faktisk har givet navnet inden for denne indgang et unikt 1359 01:03:39,100 --> 01:03:42,350 identifikator, som rent faktisk vil spare mig noget tid på et øjeblik. 1360 01:03:42,350 --> 01:03:45,480 Og bemærk jeg har introduceret en anden tag i hovedet af min webside, den 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 programmeringssprog. 1363 01:03:50,120 --> 01:03:55,020 I dette tilfælde, ligesom CSS, har jeg lagt det lige inde i min HTML. 1364 01:03:55,020 --> 01:03:58,810 Men bemærk jeg har erklæret en funktion der ser lidt ligesom PHP 1365 01:03:58,810 --> 01:04:01,530 syntaktisk, men det er faktisk JavaScript, fordi igen, det er 1366 01:04:01,530 --> 01:04:03,920 client-side i browseren. 1367 01:04:03,920 --> 01:04:07,590 Og tage et gæt, hvad det kommer til at gøre, selv om nogle af syntaksen 1368 01:04:07,590 --> 01:04:09,338 her er ny. 1369 01:04:09,338 --> 01:04:11,760 >> PUBLIKUM: Sig goddag til hvem. 1370 01:04:11,760 --> 01:04:14,020 >> DAVID MALAN: Det kommer til at sige goddag til hvem besøger denne side. 1371 01:04:14,020 --> 01:04:15,120 Så hvordan? 1372 01:04:15,120 --> 01:04:18,070 >> Så bemærker, viser det sig i JavaScript der er en alert () funktion. 1373 01:04:18,070 --> 01:04:22,840 Dette er en meget slags trist funktion, virkelig bare en tendens til at irritere brugerne. 1374 01:04:22,840 --> 01:04:25,440 Det er ikke en du skal virkelig bruge typisk, men det er en hurtig og beskidt 1375 01:04:25,440 --> 01:04:27,710 måde slags udskrive noget til en grafisk brugergrænseflade 1376 01:04:27,710 --> 01:04:29,180 grænseflade, som en browser. 1377 01:04:29,180 --> 01:04:31,400 Bemærk her, at jeg har fået en streng i enkelte anførselstegn. 1378 01:04:31,400 --> 01:04:36,010 Det viser sig, at i modsætning til C, JavaScript kan faktisk have du bruger single 1379 01:04:36,010 --> 01:04:38,730 citater, og helt ærligt det er bare lidt af den stilistiske konvention blandt 1380 01:04:38,730 --> 01:04:41,180 JavaScript programmører at bruge enkelte anførselstegn. 1381 01:04:41,180 --> 01:04:43,750 PHP, de rent faktisk har lidt anden betydning. 1382 01:04:43,750 --> 01:04:45,810 Men for nu, bare vide, at det er den eneste grund. 1383 01:04:45,810 --> 01:04:49,270 Konventionen i JavaScript er ofte at Brug apostroffer, men vi kunne bruge 1384 01:04:49,270 --> 01:04:50,950 anførselstegn i begge steder. 1385 01:04:50,950 --> 01:04:52,610 >> Så det er interessant. 1386 01:04:52,610 --> 01:04:56,430 Husk sidste gang, at vi havde at billede på skærmen, der trak et træ 1387 01:04:56,430 --> 01:04:59,720 hvor du havde HTML node, og hovedet node, og kroppen node, 1388 01:04:59,720 --> 01:05:00,800 og så noget tekst. 1389 01:05:00,800 --> 01:05:04,700 Men der var en særlig knude på meget top, at jeg kaldte dokumentet. 1390 01:05:04,700 --> 01:05:08,260 Tja, det viser sig i JavaScript, enhver gang du skriver et program i JavaScript 1391 01:05:08,260 --> 01:05:11,040 i en browser, har du adgang til en særlig global variabel. 1392 01:05:11,040 --> 01:05:14,130 Tilsvarende i ånden til PHP s superglobale, denne ene kaldes i 1393 01:05:14,130 --> 01:05:16,050 alle små bogstaver dokument. 1394 01:05:16,050 --> 01:05:21,480 >> Det er ligesom en struct, men denne struct også har funktioner inde i 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 denne teknisk er også har funktioner, 1397 01:05:29,060 --> 01:05:31,830 også kendt som metoder inde i den. 1398 01:05:31,830 --> 01:05:35,750 Og du kan kalde en funktion inde i dette objekt helt bogstaveligt gør sit 1399 01:05:35,750 --> 01:05:39,610 navn, prik, og derefter navnet på funktionen, eller igen metode. 1400 01:05:39,610 --> 01:05:41,160 Det er bare et synonym, virkelig. 1401 01:05:41,160 --> 01:05:42,450 >> Og hvad betyder denne funktion gøre? 1402 01:05:42,450 --> 01:05:43,840 Du kan slags gætte fra navnet. 1403 01:05:43,840 --> 01:05:45,590 Få element af id. 1404 01:05:45,590 --> 01:05:50,040 Så det kommer til at søge på websiden, søge det træ, på udkig efter 1405 01:05:50,040 --> 01:05:55,210 uanset node, AKA element, har en unikt id citat unquote navn. 1406 01:05:55,210 --> 01:05:56,560 Og hvad skal jeg gøre? 1407 01:05:56,560 --> 01:06:00,350 Jeg har tænkt mig at få værdien indersiden af at node i træet, og jeg har tænkt mig 1408 01:06:00,350 --> 01:06:02,580 en eller anden måde at sige goddag til det navn. 1409 01:06:02,580 --> 01:06:05,360 >> Så tag et gæt, selvom vi ikke har set det endnu, hvad gør det plus 1410 01:06:05,360 --> 01:06:07,396 symboler betyder her og her sandsynligvis? 1411 01:06:07,396 --> 01:06:08,230 >> PUBLIKUM: sammenkæde. 1412 01:06:08,230 --> 01:06:09,220 >> DAVID MALAN: sammenkæde. 1413 01:06:09,220 --> 01:06:11,290 Right, og disse er blot slags design beslutninger 1414 01:06:11,290 --> 01:06:12,280 mennesker gjort år siden. 1415 01:06:12,280 --> 01:06:15,190 I PHP, du sammenkæde ting med prikker. 1416 01:06:15,190 --> 01:06:18,800 I C, du hoppe gennem flere hoops og kalde funktioner som strcopy () eller 1417 01:06:18,800 --> 01:06:20,600 strcat () eller andre lignende funktioner. 1418 01:06:20,600 --> 01:06:22,060 Men i JavaScript, du bruger plusser. 1419 01:06:22,060 --> 01:06:24,770 Så dette er blot concatenating tre strygere - 1420 01:06:24,770 --> 01:06:27,850 hej, et navn, og derefter et udråbstegn. 1421 01:06:27,850 --> 01:06:30,390 >> Så hvornår og hvorfor er denne funktion kaldet selv? 1422 01:06:30,390 --> 01:06:33,150 Nå, tage et gæt fra HTML nederst. 1423 01:06:33,150 --> 01:06:35,810 Hvorfor er hilse () kaldes, eller hvornår? 1424 01:06:35,810 --> 01:06:39,730 1425 01:06:39,730 --> 01:06:44,030 >> Tilsyneladende, så godt jeg kan fortælle, om indsende, når denne formular er forelagt, 1426 01:06:44,030 --> 01:06:47,200 Jeg har tænkt mig at gøre, hvad er indersiden af ​​disse citater. 1427 01:06:47,200 --> 01:06:50,900 Og specielt, jeg vil kalde hilse () og derefter vende tilbage falsk. 1428 01:06:50,900 --> 01:06:53,090 >> Nå, lad os se hvad nettet effekt her er først. 1429 01:06:53,090 --> 01:06:58,290 Så lad mig gå videre og skrive i, siger, Loren, Send. 1430 01:06:58,290 --> 01:06:59,440 Hej Loren. 1431 01:06:59,440 --> 01:07:02,990 Lad os se, om dette måske var bare en heldig gennemførelse. 1432 01:07:02,990 --> 01:07:03,200 Nope. 1433 01:07:03,200 --> 01:07:05,990 Så det er at skrive ud, hvad navn jeg faktisk lagt der. 1434 01:07:05,990 --> 01:07:07,970 >> Men bemærk, hvad der ikke ændrer sig. 1435 01:07:07,970 --> 01:07:10,360 Webadressen er stadig DOM-0.html. 1436 01:07:10,360 --> 01:07:11,820 Der er ingen register.php. 1437 01:07:11,820 --> 01:07:13,110 Der er ingen anden fil. 1438 01:07:13,110 --> 01:07:14,930 Der er ingen handling attribut. 1439 01:07:14,930 --> 01:07:19,720 Så hvad er denne tilbagevenden falsk formentlig gør? 1440 01:07:19,720 --> 01:07:23,660 Hvorfor kalder jeg hilse (), og derefter returnere falsk sandsynligvis? 1441 01:07:23,660 --> 01:07:26,420 Hvad der normalt sker, når du klikker på Indsend en formular, at selv vi har 1442 01:07:26,420 --> 01:07:27,854 set i den forløbne uge? 1443 01:07:27,854 --> 01:07:29,900 >> PUBLIKUM: [uhørligt]. 1444 01:07:29,900 --> 01:07:30,860 >> DAVID MALAN: Det går et eller andet sted, ikke? 1445 01:07:30,860 --> 01:07:32,720 Det går til nogle destination URL. 1446 01:07:32,720 --> 01:07:34,120 Men jeg ønsker ikke at det skal ske her. 1447 01:07:34,120 --> 01:07:37,620 Jeg vil have min webside for at være helt dynamisk som Gmail, hvor når du er 1448 01:07:37,620 --> 01:07:38,650 der, du bor der. 1449 01:07:38,650 --> 01:07:42,900 URL'en ændrer ikke på en måde, angiver hele siden er ved at reloade. 1450 01:07:42,900 --> 01:07:46,680 Snarere, jeg bare ønsker at ændre noget ligesom at udskrive noget 1451 01:07:46,680 --> 01:07:48,320 her på skærmen. 1452 01:07:48,320 --> 01:07:49,630 >> Jamen så lad mig rense dette op en lille smule. 1453 01:07:49,630 --> 01:07:55,370 Lad mig åbne op ikke dom-0, men lad mig åbne dom-2. 1454 01:07:55,370 --> 01:07:57,350 Bare så du har set nogle syntaks her. 1455 01:07:57,350 --> 01:08:02,080 >> Det viser sig, at det, vi bare gjorde bruger rå JavaScript. 1456 01:08:02,080 --> 01:08:04,420 Så dette er virkelig det sprog JavaScript. 1457 01:08:04,420 --> 01:08:07,340 Nogle af jer måske kender et bibliotek kaldet 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, en rigtig smart fyr skrev og populariseret sådan 1460 01:08:14,110 --> 01:08:18,100 at næsten alle i verden nu bruger jQuery, når du bruger JavaScript. 1461 01:08:18,100 --> 01:08:20,890 Og ved første øjekast, helt ærligt, det ser lidt mere kryptisk. 1462 01:08:20,890 --> 01:08:24,990 Men du vil finde, især hvis du går der for din afsluttende projekt med web 1463 01:08:24,990 --> 01:08:29,029 udvikling, vil du opdage, at dette renser tingene op og sparer dig en ganske 1464 01:08:29,029 --> 01:08:30,229 få linjer kode. 1465 01:08:30,229 --> 01:08:33,189 >> Så lad os bare kaste et blik på, hvordan denne formular fungerer. 1466 01:08:33,189 --> 01:08:35,664 Læg mærke til hvad jeg fjerner tilsyneladende fra min HTML? 1467 01:08:35,664 --> 01:08:38,240 1468 01:08:38,240 --> 01:08:40,630 Der er ingen på indsende handleren så at sige. 1469 01:08:40,630 --> 01:08:41,470 Der er ingen attribut. 1470 01:08:41,470 --> 01:08:43,359 Fordi du ved, hvad Jeg vidste ikke rigtig kan lide? 1471 01:08:43,359 --> 01:08:45,640 Jeg følte, at vi var ved at falde i gamle vaner der. 1472 01:08:45,640 --> 01:08:49,340 Ligesom det var begyndt at føle sig sjusket at blande både CSS med 1473 01:08:49,340 --> 01:08:52,149 HTML, fordi du slags smide forskellige sprog over hele 1474 01:08:52,149 --> 01:08:56,180 sted, ligeledes havde dette begynder at føle som en dårlig vej at gå, hvor 1475 01:08:56,180 --> 01:09:01,069 Jeg sætter JavaScript-kode inde i mit HTML snarere end factoring det. 1476 01:09:01,069 --> 01:09:02,279 >> Så det er den lektie her. 1477 01:09:02,279 --> 01:09:05,080 I dom-2.html, jeg factoring det ud. 1478 01:09:05,080 --> 01:09:07,399 Og jeg gør tingene lidt forskelligt. 1479 01:09:07,399 --> 01:09:09,630 For nu, vil jeg vinke mine hænder på, hvad det virkelig betyder 1480 01:09:09,630 --> 01:09:10,590 under hætten. 1481 01:09:10,590 --> 01:09:14,210 Men netop for nu antage, at der først linje kode i dette bibliotek 1482 01:09:14,210 --> 01:09:18,170 kaldet jQuery betyder blot, når dokumentet er klar, skal du gøre følgende. 1483 01:09:18,170 --> 01:09:20,080 >> Fordi websider kan tage lidt tid at indlæse. 1484 01:09:20,080 --> 01:09:23,029 Du kan være på en langsom internet tilslutning, og det kan være spinning 1485 01:09:23,029 --> 01:09:25,290 og spinning, og endelig den er indlæst. 1486 01:09:25,290 --> 01:09:29,060 Denne linje kode bare siger vent hele siden er klar, at dokumentet 1487 01:09:29,060 --> 01:09:31,189 er klar, før du udfører denne kode. 1488 01:09:31,189 --> 01:09:34,390 >> Og nu mærke til, det er nok de mest nyttige først 1489 01:09:34,390 --> 01:09:36,189 tage væk fra jQuery. 1490 01:09:36,189 --> 01:09:42,140 Denne linje her er meget ens i ånd denne meget længere linje her. 1491 01:09:42,140 --> 01:09:46,920 Betragtninger i rå JavaScript-kode, der eksisterer et dokument global objekt, 1492 01:09:46,920 --> 01:09:50,460 har en funktion kaldet getElementById () de mennesker, der skrev 1493 01:09:50,460 --> 01:09:55,720 jQuery forenklet at bare at sige dollar tegn, og derefter inde i 1494 01:09:55,720 --> 01:10:00,250 parenteser lægge to citater, og derefter sætte en hash symbol efterfulgt af 1495 01:10:00,250 --> 01:10:02,250 unikt id, du ønsker at få fat. 1496 01:10:02,250 --> 01:10:06,170 Så svarer det til document.getElementById. 1497 01:10:06,170 --> 01:10:11,090 >> Mellemtiden. Indsende betyder blot på indsendelse uanset form, du er 1498 01:10:11,090 --> 01:10:14,240 henvise til venstre, gå fremad og udføre dette. 1499 01:10:14,240 --> 01:10:16,600 Men det er nu den nysgerrighed også. 1500 01:10:16,600 --> 01:10:19,560 Hvad er underligt om, hvad Jeg har fremhævet her? 1501 01:10:19,560 --> 01:10:23,840 1502 01:10:23,840 --> 01:10:28,594 Ikke alene er den slags syntaktisk ny, er der også mangler noget. 1503 01:10:28,594 --> 01:10:29,558 >> PUBLIKUM: Det er bare kaldte funktion? 1504 01:10:29,558 --> 01:10:31,970 Det er ikke kaldet alarm? 1505 01:10:31,970 --> 01:10:32,440 >> DAVID MALAN: Ja. 1506 01:10:32,440 --> 01:10:35,450 Nå, så alert () er nede her, for at være fair. 1507 01:10:35,450 --> 01:10:39,520 Men der er ingen omtale af en navn, ligesom du kender, foo eller 1508 01:10:39,520 --> 01:10:40,980 noget op her. 1509 01:10:40,980 --> 01:10:43,830 Og ja, det er en af ​​de funktioner, af JavaScript, der er helt 1510 01:10:43,830 --> 01:10:45,370 kraftfuld, men også helt nye. 1511 01:10:45,370 --> 01:10:47,460 Og PHP faktisk har det så godt. 1512 01:10:47,460 --> 01:10:49,500 >> Lad mig gå videre og gøre noget hurtigt. 1513 01:10:49,500 --> 01:10:52,030 Lad mig gå videre og sætte dette ud her. 1514 01:10:52,030 --> 01:10:52,600 Lad mig gøre det. 1515 01:10:52,600 --> 01:10:53,690 Funktion. 1516 01:10:53,690 --> 01:10:56,455 Lad os kalde dette handleren (). 1517 01:10:56,455 --> 01:10:58,290 En fører funktion, så at sige. 1518 01:10:58,290 --> 01:11:00,110 Noget, der håndterer nogle operation. 1519 01:11:00,110 --> 01:11:02,700 Lad mig rydde op i min indrykning. 1520 01:11:02,700 --> 01:11:04,380 Og sætte dette her. 1521 01:11:04,380 --> 01:11:06,090 Og sætte det her. 1522 01:11:06,090 --> 01:11:06,470 Yep. 1523 01:11:06,470 --> 01:11:07,060 OK. 1524 01:11:07,060 --> 01:11:10,300 >> Så nu har jeg en funktion kaldet handleren (), at jeg ikke rigtig kender 1525 01:11:10,300 --> 01:11:10,890 hvad det gør endnu. 1526 01:11:10,890 --> 01:11:12,710 Det har bare stadig, at ting. 1527 01:11:12,710 --> 01:11:13,900 Whoops. 1528 01:11:13,900 --> 01:11:15,820 Tog for meget. 1529 01:11:15,820 --> 01:11:18,490 Lad os gøre det. 1530 01:11:18,490 --> 01:11:18,990 Ok. 1531 01:11:18,990 --> 01:11:20,240 Undskyld. 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 Lad mig gøre det. 1535 01:11:24,720 --> 01:11:25,020 OK. 1536 01:11:25,020 --> 01:11:27,040 Det ser pænt og lige videresende nu. 1537 01:11:27,040 --> 01:11:29,090 Lad mig gøre det. 1538 01:11:29,090 --> 01:11:29,860 Gør dette. 1539 01:11:29,860 --> 01:11:30,950 Og OK. 1540 01:11:30,950 --> 01:11:33,080 Så nu, lad os sætte dette herovre. 1541 01:11:33,080 --> 01:11:35,840 1542 01:11:35,840 --> 01:11:37,270 Ikke mere programmering på flue. 1543 01:11:37,270 --> 01:11:37,900 OK. 1544 01:11:37,900 --> 01:11:40,000 >> Så nu, lad os gå tilbage til hvor historien begyndte. 1545 01:11:40,000 --> 01:11:43,530 Tidligere sagde jeg, at denne linje her betyder, når dokumentet er klar, gå 1546 01:11:43,530 --> 01:11:44,380 videre og gøre dette. 1547 01:11:44,380 --> 01:11:45,660 Hvad ønsker jeg at gøre? 1548 01:11:45,660 --> 01:11:49,070 Nå specifikt, jeg ønsker at gå videre og gøre følgende. 1549 01:11:49,070 --> 01:11:53,700 Udfør denne linje kode, og derefter hvad jeg vil have dig til at gøre, er at kalde dette 1550 01:11:53,700 --> 01:11:56,370 at fungere, når formularen er sendt. 1551 01:11:56,370 --> 01:11:57,730 >> Nu er dette, hvad der er interessant. 1552 01:11:57,730 --> 01:11:59,170 Dette er ikke i sig selv en funktion. 1553 01:11:59,170 --> 01:12:02,540 Bemærk jeg ikke sætte parenteser her på den normale måde. 1554 01:12:02,540 --> 01:12:06,800 Jeg er bogstaveligt talt passerer en funktion kaldet handleren () til en anden funktion 1555 01:12:06,800 --> 01:12:10,800 kaldet indsende () som et argument som selv om det er ligesom en variabel. 1556 01:12:10,800 --> 01:12:14,290 Og det er en af ​​funktionerne i JavaScript, er funktioner, selv 1557 01:12:14,290 --> 01:12:15,710 er virkelig bare objekter. 1558 01:12:15,710 --> 01:12:18,350 I virkeligheden, de er virkelig bare variabler af en slags. 1559 01:12:18,350 --> 01:12:21,340 Og hvis navnet på den funktion er handleren (), er der ingen grund til at jeg ikke kan 1560 01:12:21,340 --> 01:12:23,390 lade det som et argument her. 1561 01:12:23,390 --> 01:12:27,530 Og det betyder, når formularen med id af demo er 1562 01:12:27,530 --> 01:12:29,320 forelagt, kalder denne funktion. 1563 01:12:29,320 --> 01:12:32,770 >> Men nu, hvis jeg fortryde alt dette, hvorfor så jeg måske gøre 1564 01:12:32,770 --> 01:12:34,850 dette for et øjeblik siden? 1565 01:12:34,850 --> 01:12:36,840 Nå, det er en anonym funktion. 1566 01:12:36,840 --> 01:12:41,080 Fordi ærligt, jeg forstod, hvorfor er jeg generer at spilde tid erklære en 1567 01:12:41,080 --> 01:12:45,540 funktion kaldet handleren () kun at kalde det i én og kun ét sted? 1568 01:12:45,540 --> 01:12:48,640 Hvis jeg ikke har brug for det navn, og jeg gør ikke brug for at kalde det mere end et sted, 1569 01:12:48,640 --> 01:12:51,200 lad os bare implementere funktionen lige hvor jeg har brug for det. 1570 01:12:51,200 --> 01:12:55,190 Og så JavaScript og PHP støtte det kaldes anonyme funktioner, 1571 01:12:55,190 --> 01:12:57,900 Tillad mig at gøre præcis det her. 1572 01:12:57,900 --> 01:12:59,570 >> Men vi bare ridse overfladen. 1573 01:12:59,570 --> 01:13:02,430 Lad os drille med blot et par afsluttende eksempler her. 1574 01:13:02,430 --> 01:13:04,600 >> Hvis jeg går ind i quote.php. 1575 01:13:04,600 --> 01:13:07,160 1576 01:13:07,160 --> 01:13:11,870 Bemærk, at det er faktisk en PHP funktion, en PHP-program, at jeg skrev 1577 01:13:11,870 --> 01:13:15,270 der forventer en HTTP parameter kaldet symbol, og jeg kan passere i 1578 01:13:15,270 --> 01:13:16,730 en værdi som FB. 1579 01:13:16,730 --> 01:13:20,010 Og hvis vi rent faktisk se på kilden kode, dette forespørge en gratis hjemmeside 1580 01:13:20,010 --> 01:13:23,680 kaldet Yahoo Finance, ligesom p-sæt syv, og det er at vende tilbage til mig 1581 01:13:23,680 --> 01:13:26,580 noget i tilsyneladende format kendt 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 Læg mærke til de krøllede parenteser, citater, tyktarmen, og komma. 1585 01:13:32,500 --> 01:13:34,720 >> Nu i mellemtiden, det er temmelig cool. 1586 01:13:34,720 --> 01:13:38,520 Fordi jeg nok kan bruge en programmering sprog til at generere URL'er 1587 01:13:38,520 --> 01:13:40,370 der ligner dette dynamisk, ret? 1588 01:13:40,370 --> 01:13:43,340 Jeg kan ændre dette til Google og komme tilbage Googles 1589 01:13:43,340 --> 01:13:47,930 aktiekurs på $ 1,017.55. 1590 01:13:47,930 --> 01:13:49,640 Så lad os se om vi ikke kan bruge det nu. 1591 01:13:49,640 --> 01:13:56,590 >> Lad mig gå til ajax-0 her, hvilket ligner følgende. 1592 01:13:56,590 --> 01:13:59,750 Det er bare et websted, der har en formular med en knap. 1593 01:13:59,750 --> 01:14:05,860 Lad mig her gå videre og skrive i YHOO for Yahoos bestand symbol Klik på Hent 1594 01:14:05,860 --> 01:14:10,530 Quote, og nu mærke til jeg har fået en alarm med 32,86. 1595 01:14:10,530 --> 01:14:14,050 >> Lad mig faktisk gå til en mere avanceret udgave på denne side, version to, og 1596 01:14:14,050 --> 01:14:17,530 skrive i lad os sige Microsoft, MSFT. 1597 01:14:17,530 --> 01:14:18,410 Get Quote. 1598 01:14:18,410 --> 01:14:19,850 Og nu mærke, ingen alarm. 1599 01:14:19,850 --> 01:14:22,770 Læg mærke til hvor der står pris skal bestemmes? 1600 01:14:22,770 --> 01:14:27,060 Der er den enkleste af eksempler, antyder hvad Gchat og Facebook 1601 01:14:27,060 --> 01:14:30,070 Chat, og Gmail, og andre sådanne websites gør ved faktisk 1602 01:14:30,070 --> 01:14:31,290 ændre websiden. 1603 01:14:31,290 --> 01:14:31,800 >> Bemærk dette. 1604 01:14:31,800 --> 01:14:33,120 Lad mig genindlæse siden. 1605 01:14:33,120 --> 01:14:35,080 Lad mig åbne Chromes Inspector. 1606 01:14:35,080 --> 01:14:36,890 Lad mig gå til elementerne fanen hernede. 1607 01:14:36,890 --> 01:14:42,310 Bemærk nu, hvis jeg zoome ind hernede og åbne denne op, bemærke, at dette er min 1608 01:14:42,310 --> 01:14:44,500 HTML DOM - mit dokument objekt model. 1609 01:14:44,500 --> 01:14:45,920 Dette er min HTML. 1610 01:14:45,920 --> 01:14:48,750 Men nu mærke til, selvom det går at være lidt svært at se det i både 1611 01:14:48,750 --> 01:14:52,080 steder på en gang, hvis jeg skriver i FB heroppe, se bunden 1612 01:14:52,080 --> 01:14:54,110 på skærmen alene. 1613 01:14:54,110 --> 01:14:57,720 >> Det er faktisk ændrer min HTML på flue. 1614 01:14:57,720 --> 01:15:01,670 Og det gør det ganske enkelt ved at gøre noget som dette. 1615 01:15:01,670 --> 01:15:06,800 Hvis jeg åbner ajax-2, bekendtgørelse om gennemførelse noget så sexet som 1616 01:15:06,800 --> 01:15:09,560 at selv om det er temmelig grimme, men så sofistikerede som der 1617 01:15:09,560 --> 01:15:11,910 funktionelt, har det nogle HTML nederst. 1618 01:15:11,910 --> 01:15:13,810 Men bemærk Jeg plejede at mærke. 1619 01:15:13,810 --> 01:15:16,640 Vi har ikke brugt det før, men dette er ligesom en, men det gør 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 bare gør et rektangulært område på samme linje væsentlige. 1622 01:15:20,830 --> 01:15:22,870 >> Bemærk, at jeg gav det en ID på prisen. 1623 01:15:22,870 --> 01:15:26,800 Og det viser sig ved anvendelse af den samme JavaScript bibliotek, jeg har en funktion 1624 01:15:26,800 --> 01:15:30,440 kaldet citat (), der kaldes, når formularen er sendt. 1625 01:15:30,440 --> 01:15:31,800 Og hvad jeg gør, er dette. 1626 01:15:31,800 --> 01:15:35,730 Jeg erklære en variabel i JavaScript kaldet url, gemme værdien 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 selv begynder at udarbejde en HTTP-anmodning, og derefter 1629 01:15:44,220 --> 01:15:49,250 Jeg concatenating på, at med et plus uanset elementet med ID 1630 01:15:49,250 --> 01:15:54,190 symbol er, hvor meddelelsen er, at tekstfelt lige hernede. 1631 01:15:54,190 --> 01:15:56,630 Så ligesom vi havde formularer i fortiden. 1632 01:15:56,630 --> 01:16:01,450 >> Og så viser det sig i jQuery, hvis du opkald. val (), der kalder på en val 1633 01:16:01,450 --> 01:16:05,900 funktion, en værdi funktion, der får hvad brugeren har skrevet i. 1634 01:16:05,900 --> 01:16:08,920 Og så alle de netværkstrafik der sker, er dette. 1635 01:16:08,920 --> 01:16:11,230 $. GetJSON. 1636 01:16:11,230 --> 01:16:13,720 >> Og som en sidebemærkning, dollar tegn er blot en forkortet notation. 1637 01:16:13,720 --> 01:16:16,860 Det er virkelig jQuery.getJSON. 1638 01:16:16,860 --> 01:16:21,520 Få mig til JSON fra denne webadresse, og da anmodningen kommer tilbage, kalder dette 1639 01:16:21,520 --> 01:16:26,550 funktion og passere ind som argument hvad kom tilbage fra serveren. 1640 01:16:26,550 --> 01:16:31,205 >> Så med andre ord, hvis jeg gå tilbage til browseren, og jeg går tilbage til quote.php, 1641 01:16:31,205 --> 01:16:35,590 hvad min browser gør, er at få denne luns af data. 1642 01:16:35,590 --> 01:16:38,930 Og når jeg går til denne webside her, varsel, hvis vi i stedet gå til netværket 1643 01:16:38,930 --> 01:16:43,820 fanen og klare det, og indtast derefter noget som GOOG for Google og Get 1644 01:16:43,820 --> 01:16:46,340 Citat, mærke siden ændrede sig ikke. 1645 01:16:46,340 --> 01:16:50,990 Men en HTTP-anmodning blev fremsat, og hvad kom tilbage her, hvis vi ser på 1646 01:16:50,990 --> 01:16:56,130 svar er en hel bunke af JSON at vi adgang til sidst med 1647 01:16:56,130 --> 01:16:58,070 denne enkle linje her. 1648 01:16:58,070 --> 01:17:00,150 >> Data der blev fået fra serveren. 1649 01:17:00,150 --> 01:17:02,120 Prisen er navnet på den nøgle jeg ligeglad. 1650 01:17:02,120 --> 01:17:05,230 Så data.price giver mig det. 1651 01:17:05,230 --> 01:17:07,540 >> Nu mellemtiden, og dette er det sidste eksempel. 1652 01:17:07,540 --> 01:17:09,280 Du kan gøre endnu mere med siden. 1653 01:17:09,280 --> 01:17:12,440 En faktisk godt to. 1654 01:17:12,440 --> 01:17:14,780 Vi kan bringe tilbage tagge, hvis du husker dette. 1655 01:17:14,780 --> 01:17:15,850 Det er JavaScript. 1656 01:17:15,850 --> 01:17:17,110 Vi kan gøre det. 1657 01:17:17,110 --> 01:17:17,690 Meget spændende. 1658 01:17:17,690 --> 01:17:18,800 Vi vil overlade som en cliffhanger. 1659 01:17:18,800 --> 01:17:21,590 >> Men mere spændende, kan du gøre ting som dette. 1660 01:17:21,590 --> 01:17:25,940 Hvis jeg går til geolocation-1, viser det sig at Chrome ved, at vi er på 1661 01:17:25,940 --> 01:17:30,672 breddegrad længdegrad 42.37. -71,10. 1662 01:17:30,672 --> 01:17:32,940 Så der er endnu mere der til din rådighed. 1663 01:17:32,940 --> 01:17:34,290 Men mere om det i næste uge. 1664 01:17:34,290 --> 01:17:35,540 Se dig mandag. 1665 01:17:35,540 --> 01:17:37,558