1 00:00:00,000 --> 00:00:11,330 2 00:00:11,330 --> 00:00:12,360 >> DAVID Malan: Oke. 3 00:00:12,360 --> 00:00:15,970 Dit is CS50, en dit is het einde van de week negen. 4 00:00:15,970 --> 00:00:18,560 Het is al meer dan een wervelwind de afgelopen dagen. 5 00:00:18,560 --> 00:00:21,580 En probleem stelde zeven, als je knie diep in het, beseffen dat er nogal 6 00:00:21,580 --> 00:00:23,340 beetje nieuw dat er in zit. 7 00:00:23,340 --> 00:00:26,660 Maar laten we eens kijken of we niet kunnen stuk alles samen hier kort 8 00:00:26,660 --> 00:00:29,230 daarvóór ruimend af in nog een andere richting en zien 9 00:00:29,230 --> 00:00:30,510 waar anders kunnen we gaan. 10 00:00:30,510 --> 00:00:32,630 >> Tot nu toe hebben we gesproken over HTML. 11 00:00:32,630 --> 00:00:33,740 We hebben gesproken over CSS. 12 00:00:33,740 --> 00:00:34,705 We hebben gesproken over PHP. 13 00:00:34,705 --> 00:00:36,520 Je bent begonnen met SQL ervaren. 14 00:00:36,520 --> 00:00:38,360 Vandaag gaan we een beetje praten over JavaScript. 15 00:00:38,360 --> 00:00:41,230 Maar hoe al deze ongelijksoortige doen talen in elkaar passen? 16 00:00:41,230 --> 00:00:44,970 >> Dus spraken we vorige week over de begrip hebben van een server. 17 00:00:44,970 --> 00:00:48,470 Dus laten we gewoon trekken deze rechthoek als een webserver hier. 18 00:00:48,470 --> 00:00:52,200 En een web server dient zeker bestanden. 19 00:00:52,200 --> 00:00:54,640 En sommige van deze bestanden kan HTML-bestanden. 20 00:00:54,640 --> 00:00:58,270 Dus een van de dingen die een webserver kan spugen kan een bestand dat 21 00:00:58,270 --> 00:01:01,290 zullen we gewoon tekenen als deze met een aantal HTML. 22 00:01:01,290 --> 00:01:04,786 Dus in lekentaal, wat werkt HTML laten doen? 23 00:01:04,786 --> 00:01:06,036 >> PUBLIEK: Pagina blik mooi. 24 00:01:06,036 --> 00:01:09,670 25 00:01:09,670 --> 00:01:12,310 >> DAVID MALAN: OK, maak een pagina zien er leuk uit, hoewel ik denk dat ik heb bewezen 26 00:01:12,310 --> 00:01:13,370 die anders. 27 00:01:13,370 --> 00:01:18,250 Dus HTML doet laat je lay-out pagina's structureel, en het laat je 28 00:01:18,250 --> 00:01:22,410 soort van esthetisch markeren van een pagina, markeren statische inhoud, zodat u 29 00:01:22,410 --> 00:01:23,640 Vervolgens kunt het bekijken met een web browser. 30 00:01:23,640 --> 00:01:24,690 >> Maar dat is de sleutel. 31 00:01:24,690 --> 00:01:26,130 Het is statische inhoud. 32 00:01:26,130 --> 00:01:28,590 Je schrijft het, je het op te slaan, en dan heb je het schip. 33 00:01:28,590 --> 00:01:31,130 En de web server dan dient het aan uw bezoekers. 34 00:01:31,130 --> 00:01:35,700 >> Maar we stileren dingen met behulp van een andere taal helemaal. 35 00:01:35,700 --> 00:01:40,150 We begonnen met een stijl attribuut gebruiken bepaalde tags. 36 00:01:40,150 --> 00:01:43,400 En de stijl attribuut laat ons stellen dingen zoals grootte en kleur lettertype. 37 00:01:43,400 --> 00:01:46,460 En je hebt waarschijnlijk begonnen te ontdekken, of je binnenkort voor de definitieve 38 00:01:46,460 --> 00:01:50,160 projecten mogelijk, nog andere eigenschappen die u kunt gebruiken in CSS. 39 00:01:50,160 --> 00:01:54,710 En dus in lekentaal, wat echt dan doet CSS doen? 40 00:01:54,710 --> 00:01:57,810 Dat zijn slechts voorbeelden daarvan. 41 00:01:57,810 --> 00:02:00,730 Wat doet het u laten doen dat HTML lijkt niet uit wat 42 00:02:00,730 --> 00:02:02,606 we hebben tot nu toe gezien? 43 00:02:02,606 --> 00:02:04,850 >> PUBLIEK: Definieer stijlen door jezelf. 44 00:02:04,850 --> 00:02:06,700 >> DAVID Malan: Definieer stijlen door jezelf. 45 00:02:06,700 --> 00:02:10,280 Dus dingen zoals klassen definiëren als u hebben ondervonden, of uniek 46 00:02:10,280 --> 00:02:13,800 nodes te identificeren in een document zodat dat je ze kunt stileren. 47 00:02:13,800 --> 00:02:16,890 Maar meer in het bijzonder, zou ik zeggen dat CSS echt laat je dingen de 48 00:02:16,890 --> 00:02:20,790 laatste mijl en kunt u aangeven veel nauwkeuriger de esthetiek, 49 00:02:20,790 --> 00:02:24,340 terwijl HTML voor het grootste deel laat u uw pagina's te structureren. 50 00:02:24,340 --> 00:02:27,310 >> En ook al zijn er een aantal defaults, als we de tag voor zagen 51 00:02:27,310 --> 00:02:30,690 een post-tag, die grofweg maakte dingen groot en vet. 52 00:02:30,690 --> 00:02:34,250 Dat is een vrij algemene definitie van het label - groot en vet. 53 00:02:34,250 --> 00:02:35,260 Wat lettergrootte is dat? 54 00:02:35,260 --> 00:02:36,080 Welke kleur is dat? 55 00:02:36,080 --> 00:02:36,890 Hoe vet is dat? 56 00:02:36,890 --> 00:02:39,830 En CSS kunt u fijner tune dat soort dingen. 57 00:02:39,830 --> 00:02:42,150 Naast indeling, zoals sommige van jullie hebben gezien. 58 00:02:42,150 --> 00:02:45,180 >> En eerlijk gezegd, CSS is een beetje van een rommelige taal. 59 00:02:45,180 --> 00:02:48,370 Het is zeer krachtig in die je kunt maken letterlijk elke website die je hebt 60 00:02:48,370 --> 00:02:51,880 gezien op het web vandaag mee, maar het is een soort van een pijn in de nek. 61 00:02:51,880 --> 00:02:54,440 En sommigen van jullie hebben je hoofd gestoten tegen de muren al gewoon te doen 62 00:02:54,440 --> 00:02:58,560 iets stoms als centrum een ​​menu op probleem stelde zeven als je hebt gekregen om 63 00:02:58,560 --> 00:02:59,470 dat punt reeds. 64 00:02:59,470 --> 00:03:01,530 >> Maar beseffen, die dingen makkelijker in de tijd. 65 00:03:01,530 --> 00:03:02,820 Je begint om patronen te merken. 66 00:03:02,820 --> 00:03:06,020 En nogmaals, zal Google je vriend voor de verschillende manieren waarop u kunt 67 00:03:06,020 --> 00:03:07,220 oplossen van dergelijke problemen. 68 00:03:07,220 --> 00:03:11,520 >> En ik durf te zeggen met CSS en HTML meer algemeen, kun je problemen op te lossen in 69 00:03:11,520 --> 00:03:15,910 vele andere manieren, die zou zeer terecht zijn, dan kon 70 00:03:15,910 --> 00:03:18,900 in iets als C, zelfs nu PHP of JavaScript. 71 00:03:18,900 --> 00:03:21,080 Er zijn gewoon veel verschillende manieren om dingen uit te leggen. 72 00:03:21,080 --> 00:03:22,570 >> Maar dit begon te krijgen rommelig, zeiden we. 73 00:03:22,570 --> 00:03:26,480 Gewoon een soort van vermenging uw HTML en je CSS met het attribuut stijl was 74 00:03:26,480 --> 00:03:27,590 een beetje slordig. 75 00:03:27,590 --> 00:03:31,460 En zo zijn we in plaats daarvan zei, soort abstract gesproken, dat je moet 76 00:03:31,460 --> 00:03:34,050 tenminste gaan factor uit uw CSS waarschijnlijk. 77 00:03:34,050 --> 00:03:37,430 Niet uw stijl kenmerken, maar in ieder geval gebruik maken van de style-tag in wat 78 00:03:37,430 --> 00:03:38,840 een deel van de webpagina? 79 00:03:38,840 --> 00:03:39,560 >> PUBLIEK: Head. 80 00:03:39,560 --> 00:03:40,120 >> DAVID Malan: In het hoofd. 81 00:03:40,120 --> 00:03:43,270 Tot nu toe hadden we alleen de titel omhoog , maar je kunt ook een stijl 82 00:03:43,270 --> 00:03:47,230 taggen, en u kunt uw CSS ruwweg zetten spreken naar de bovenkant van de pagina. 83 00:03:47,230 --> 00:03:52,550 Maar dan hebben we nog een stap verder en we ingecalculeerd dat meer 84 00:03:52,550 --> 00:03:54,130 in een apart bestand. 85 00:03:54,130 --> 00:03:57,240 >> En dus deze twee bestanden waren een of andere manier nu gekoppeld. 86 00:03:57,240 --> 00:03:59,550 En inderdaad was de tag die dat deed. 87 00:03:59,550 --> 00:04:02,920 En wat was een van de overkoepelende motivaties voor factoring onze CSS 88 00:04:02,920 --> 00:04:04,057 des te meer? 89 00:04:04,057 --> 00:04:05,280 >> PUBLIEK: Herbruikbaarheid. 90 00:04:05,280 --> 00:04:05,785 >> DAVID Malan: Herbruikbaarheid. 91 00:04:05,785 --> 00:04:06,150 Rechts? 92 00:04:06,150 --> 00:04:09,470 Je hebt misschien gezien in-p set zeven reeds dat veel van de pagina, de 93 00:04:09,470 --> 00:04:12,260 kopen pagina, de verkoop pagina, portfolio pagina, zijn waarschijnlijk 94 00:04:12,260 --> 00:04:13,550 gestructureerd enigszins vergelijkbare wijze. 95 00:04:13,550 --> 00:04:17,579 Er is een CS50 financiën logo boven tenzij je besloten hebt om het te veranderen. 96 00:04:17,579 --> 00:04:19,839 Er is een voettekst onderaan elke pagina. 97 00:04:19,839 --> 00:04:24,315 En CSS kunt u dan om het uit factor het in een apart bestand, zodat als 98 00:04:24,315 --> 00:04:27,780 u wilt globaal iets te veranderen over je hele site, kan je echt 99 00:04:27,780 --> 00:04:29,390 verander het enkel op een plaats. 100 00:04:29,390 --> 00:04:32,750 >> Maar er is een prijs die u betaalt potentieel Door het hebben meegenomen uit de 101 00:04:32,750 --> 00:04:38,380 CSS van mijn HTML-bestand in een aparte bestand vermeld wordt met de 102 00:04:38,380 --> 00:04:40,650 tag, die we zagen op maandag. 103 00:04:40,650 --> 00:04:43,850 Wat zou het nadeel zijn van dit? 104 00:04:43,850 --> 00:04:48,830 Terugdenkend een week geleden aan als we praten over HTTP en TCP / IP en hoe 105 00:04:48,830 --> 00:04:52,070 internet werkt. 106 00:04:52,070 --> 00:04:53,530 Iets meer dan hier? 107 00:04:53,530 --> 00:04:54,730 >> Publiek: Het kost meer tijd. 108 00:04:54,730 --> 00:04:55,470 >> DAVID Malan: Het kost meer tijd. 109 00:04:55,470 --> 00:04:56,750 Waarom? 110 00:04:56,750 --> 00:04:59,450 >> PUBLIEK: [onverstaanbaar]. 111 00:04:59,450 --> 00:04:59,750 >> DAVID Malan: Yeah. 112 00:04:59,750 --> 00:05:01,240 Dus het duurt misschien wel een beetje meer tijd. 113 00:05:01,240 --> 00:05:04,290 Omdat men de CSS uiteraard niet in hetzelfde bestand. 114 00:05:04,290 --> 00:05:06,920 Dus nu moet je niet maken een, maar twee verzoeken. 115 00:05:06,920 --> 00:05:11,230 En elk van deze verzoeken als we zagen in Chroom in de zogenaamde Inspector, 116 00:05:11,230 --> 00:05:15,740 en we keken naar het tabblad netwerk, elk van die bestanden vereist een HTTP 117 00:05:15,740 --> 00:05:18,360 verzoek, dat we zagen neemt enige tijd. 118 00:05:18,360 --> 00:05:19,290 Nu, misschien is het niet veel. 119 00:05:19,290 --> 00:05:20,670 Misschien is het slechts 20 milliseconden. 120 00:05:20,670 --> 00:05:22,260 Misschien is het 200 milliseconden. 121 00:05:22,260 --> 00:05:25,530 >> Maar na te denken over een pagina als Facebook, of CNN, of Google, die veel zijn 122 00:05:25,530 --> 00:05:28,060 groter dan de voorbeelden die we hebben keek tot nu toe. 123 00:05:28,060 --> 00:05:32,070 Die pagina's waarschijnlijk tientallen bestanden, die elk kunnen vereisen 124 00:05:32,070 --> 00:05:33,550 downloaden van een bestand. 125 00:05:33,550 --> 00:05:35,800 Dus dingen kunnen potentieel beginnen te vertragen. 126 00:05:35,800 --> 00:05:39,280 >> En vooral deze dagen als we allemaal hebben mobiele telefoons in onze zakken en 127 00:05:39,280 --> 00:05:43,010 tragere internetverbindingen, hoeven wachten een paar milliseconden, een paar 128 00:05:43,010 --> 00:05:46,110 meer milliseconden voor extra bestanden kan eigenlijk traag. 129 00:05:46,110 --> 00:05:50,430 Latency is het woord dat beschrijft de soort te wachten die je hebt dat je 130 00:05:50,430 --> 00:05:53,110 ervaren tijdens het wachten op een stukje informatie. 131 00:05:53,110 --> 00:05:54,430 >> Maar er is een upside. 132 00:05:54,430 --> 00:05:56,600 Dus het is niet allemaal een soort - 133 00:05:56,600 --> 00:05:58,170 het is eigenlijk een beetje een wip hier. 134 00:05:58,170 --> 00:06:02,970 Nadeel nu, maar wat browsers kan doen als ze slim om te voorkomen 135 00:06:02,970 --> 00:06:08,870 met dezelfde styles.css verzoeken bestand weer kan zijn om wat te doen? 136 00:06:08,870 --> 00:06:09,390 >> Cache het. 137 00:06:09,390 --> 00:06:10,370 Dus caching - 138 00:06:10,370 --> 00:06:11,690 C-A-C-H-E - 139 00:06:11,690 --> 00:06:15,810 betekent over het algemeen hier alleen maar om te slaan de bestand dat u de eerste keer gevraagd, en 140 00:06:15,810 --> 00:06:17,440 controleer dan uw cache voor. 141 00:06:17,440 --> 00:06:20,400 Controleer of u bent een soort van opslag container, en als u al een 142 00:06:20,400 --> 00:06:24,520 kopie van styles.css, zelfs als sommige andere pagina in het p-set, of een website, 143 00:06:24,520 --> 00:06:28,560 vraagt ​​het weer, alleen maar om de te geven gebruiker die hetzelfde cachegeheugen opgeslagen kopie. 144 00:06:28,560 --> 00:06:30,140 Doe geen moeite met het verzoek. 145 00:06:30,140 --> 00:06:32,560 >> Nadeel daar, hoewel, zoals sommigen van jullie hebben overgenomen struikelde in de p-set. 146 00:06:32,560 --> 00:06:35,870 Als u een wijziging aanbrengt op de server en u terug naar de browser te gaan en je 147 00:06:35,870 --> 00:06:39,250 herladen, soms de browser doet u een gunst en geen last van 148 00:06:39,250 --> 00:06:43,660 opnieuw downloaden van uw styles.css bestand want, kom op, wat zijn de kansen 149 00:06:43,660 --> 00:06:47,620 dat deze stijlen die Facebook gebruikt gaan veranderen uur tot uur of 150 00:06:47,620 --> 00:06:48,140 dag tot dag? 151 00:06:48,140 --> 00:06:48,800 Het is vrij laag. 152 00:06:48,800 --> 00:06:52,260 Ze kunnen veranderen in de tijd, maar niet per minuut of per uur. 153 00:06:52,260 --> 00:06:55,810 >> Dus een truc, net FYI bij het doen van web ontwikkeling, wordt vaak houdt u de 154 00:06:55,810 --> 00:06:59,500 Shift-toets bijvoorbeeld en klik vervolgens op herladen in je browser, en dat zal 155 00:06:59,500 --> 00:07:03,280 meestal vertellen de browser reload alles, zelfs als u al 156 00:07:03,280 --> 00:07:04,180 in de cache. 157 00:07:04,180 --> 00:07:06,630 Dus nogmaals, Pluspunten en minpunten, maar allemaal 158 00:07:06,630 --> 00:07:08,260 uiteindelijk ontwerpbeslissingen. 159 00:07:08,260 --> 00:07:11,520 >> Dus nu hebben we niet alleen eindigen hier het verhaal. 160 00:07:11,520 --> 00:07:15,790 Als ik nu terug en heen en terug te gaan en terug, we begonnen om niet alleen in te voeren 161 00:07:15,790 --> 00:07:18,060 HTML, maar PHP. 162 00:07:18,060 --> 00:07:20,786 Dus in lekentaal, wat heeft PHP laat ons doen? 163 00:07:20,786 --> 00:07:22,770 >> PUBLIEK: [onverstaanbaar]. 164 00:07:22,770 --> 00:07:24,258 >> DAVID Malan: Wat is dat? 165 00:07:24,258 --> 00:07:25,250 >> PUBLIEK: Introduceer logica in de code. 166 00:07:25,250 --> 00:07:26,620 >> DAVID MALAN: Ja, introduceren logica in uw code. 167 00:07:26,620 --> 00:07:29,570 Dus het is een echte programmeertaal met lussen en variabelen, en 168 00:07:29,570 --> 00:07:32,620 functies, en de voorwaarden, en alle de dingen die we hebben gebruik gemaakt van de weg terug 169 00:07:32,620 --> 00:07:33,780 wanneer sinds scratch. 170 00:07:33,780 --> 00:07:36,780 En PHP, we hebben gezien, kan worden gebruikt hetzij op de command line - het 171 00:07:36,780 --> 00:07:39,190 hoeft niet iets te maken hebben met het web, ook al is dat 172 00:07:39,190 --> 00:07:43,150 echt zijn oorsprong en wat heeft het de neiging goed in zijn en bevorderlijk te zijn - 173 00:07:43,150 --> 00:07:47,130 maar je kunt PHP gebruiken door alleen de natuur Aangezien het een print () 174 00:07:47,130 --> 00:07:49,660 functie, en een printf () functie, of een echo ()-functie. 175 00:07:49,660 --> 00:07:52,440 Er zijn bossen van manieren waarop je kan tekst af te drukken met PHP. 176 00:07:52,440 --> 00:07:56,540 >> Daarom kunt u deze programmering gebruiken taal om de productie precies 177 00:07:56,540 --> 00:07:58,460 waar we het eerder over. 178 00:07:58,460 --> 00:08:01,360 Je kunt dynamisch genereren uw HTML. 179 00:08:01,360 --> 00:08:02,300 Misschien niet alles. 180 00:08:02,300 --> 00:08:06,460 Misschien heb je harde code dingen, zoals de header en de footer, en het logo, 181 00:08:06,460 --> 00:08:07,950 en uw style sheets, en dat alles. 182 00:08:07,950 --> 00:08:11,190 Maar voor iets als-p set zeven, waar je manipuleren van aandelen en 183 00:08:11,190 --> 00:08:14,690 waaruit de portefeuille van de gebruiker, dat is gaat om dynamisch te veranderen, kun je 184 00:08:14,690 --> 00:08:18,960 zeker gebruik maken van PHP en de logica het geeft u als een programmeertaal te 185 00:08:18,960 --> 00:08:22,320 uitgang dynamisch subsets van de pagina. 186 00:08:22,320 --> 00:08:25,900 >> Dus als je praat over dynamische websites, of web programmeren, dat is 187 00:08:25,900 --> 00:08:27,200 wat je echt over praat. 188 00:08:27,200 --> 00:08:31,450 Met behulp van een taal zoals PHP, of dingen genaamd Python of Ruby, of Java, of 189 00:08:31,450 --> 00:08:35,900 nog andere talen, op te vragen van een database Vaak of andere server en 190 00:08:35,900 --> 00:08:38,580 vervolgens dynamisch spugen HTML. 191 00:08:38,580 --> 00:08:42,470 >> Nu het eindresultaat, als een terzijde, is dat de HTML-code van de meeste websites, 192 00:08:42,470 --> 00:08:45,970 inclusief uw-p set zeven, is waarschijnlijk gaat een enorme puinhoop als zijn 193 00:08:45,970 --> 00:08:48,060 je kijkt naar de bron code in een browser. 194 00:08:48,060 --> 00:08:49,010 Dat is geen big deal. 195 00:08:49,010 --> 00:08:51,550 Op dit punt, als we de zorg over stijl, we geven om de 196 00:08:51,550 --> 00:08:52,740 dingen die je schrijft. 197 00:08:52,740 --> 00:08:56,240 We zullen niet de zorg over de spullen dat wat uw code uitgangen. 198 00:08:56,240 --> 00:08:59,520 Dus maak je geen zorgen over het inspringen hier als het PHP dat is 199 00:08:59,520 --> 00:09:01,190 daadwerkelijk uitvoeren van spullen. 200 00:09:01,190 --> 00:09:04,430 Immers, zal de browser niet schelen, en een menselijke niet kijken 201 00:09:04,430 --> 00:09:05,400 bij de bron toch. 202 00:09:05,400 --> 00:09:09,000 We het personeel, bijvoorbeeld, zou te kijken naar je PHP. 203 00:09:09,000 --> 00:09:13,440 >> Dus laat me een snel voorbeeld nu waarom anders dit nuttig zou kunnen zijn. 204 00:09:13,440 --> 00:09:18,620 Dus eerlijk gezegd, ik kan me niet herinneren de laatste keer gebruikte ik C om een ​​probleem op te lossen in 205 00:09:18,620 --> 00:09:19,620 de echte wereld. 206 00:09:19,620 --> 00:09:22,330 Het was waarschijnlijk in graduate school toen Ik moest een taal te gebruiken die 207 00:09:22,330 --> 00:09:26,710 was vrij laag niveau en gaf me de gelegenheid om iets heel hoog doen 208 00:09:26,710 --> 00:09:30,720 uitvoeren om echt op te slaan als veel CPU cycli als ik kon, voor een groot deel 209 00:09:30,720 --> 00:09:33,990 want ik was met behulp van enorme datasets en elke CPU cyclus geteld. 210 00:09:33,990 --> 00:09:37,750 En eerlijk gezegd, zelfs in dingen als telefoons deze dagen en andere apparaten 211 00:09:37,750 --> 00:09:39,910 waar je niet helemaal zo veel geheugen en je hoeft niet helemaal hebben als 212 00:09:39,910 --> 00:09:44,160 veel CPU, met behulp sneller talen is nog steeds aantrekkelijk. 213 00:09:44,160 --> 00:09:47,290 >> Maar in de echte wereld, als je net willen sommige programma samen te gooien naar 214 00:09:47,290 --> 00:09:50,340 analyseren van bepaalde gegevens, of je hebt verzameld een hele hoop inschrijvingen voor 215 00:09:50,340 --> 00:09:53,330 sommige studentengroep en u wilt heel snel automatiseren verzenden van e-mails 216 00:09:53,330 --> 00:09:56,240 een voor een aan elk van die registranten, je gaat te bereiken voor 217 00:09:56,240 --> 00:09:59,240 een hogere programmeertaal dan C zo te zeggen. 218 00:09:59,240 --> 00:10:04,060 Iets als PHP of Python of Ruby, of een half dozijn anderen die er bestaan 219 00:10:04,060 --> 00:10:04,550 deze dagen. 220 00:10:04,550 --> 00:10:07,200 Maar deze drie zijn waarschijnlijk de meest rechtse nu trendy. 221 00:10:07,200 --> 00:10:10,840 >> En wat dit betekent is dat u kunt openen een tekst editor zoals gedit of 222 00:10:10,840 --> 00:10:14,030 de meeste iets anders en dan gewoon beginnen code te schrijven zonder te hoeven maken 223 00:10:14,030 --> 00:10:17,800 over het compileren, zonder echt zorgen te maken over het geheugen management, 224 00:10:17,800 --> 00:10:20,820 houden er wel rekening mee dat een beetje slordigheid zal uiteindelijk terug te komen 225 00:10:20,820 --> 00:10:24,790 om u te bijten als de dataset wordt groter of het probleem wordt groot. 226 00:10:24,790 --> 00:10:27,230 Maar wat dit betekent voor ons is het volgende. 227 00:10:27,230 --> 00:10:29,860 >> Laat me ga je gang en lopen speller van probleem ingesteld zes. 228 00:10:29,860 --> 00:10:33,480 Dus dit is mijn-trie gebaseerde implementatie die ik heb gebruikt op de grote 229 00:10:33,480 --> 00:10:35,500 raad waar ik deed het niet zo goed. 230 00:10:35,500 --> 00:10:38,720 We komen terug in een week tijd en opnieuw degenen die uiteindelijk boven op de 231 00:10:38,720 --> 00:10:40,430 groot bord bij onze laatste college. 232 00:10:40,430 --> 00:10:44,520 Maar voor nu, laat me gaan en gewoon run mijn oplossing in tekst, en we doen 233 00:10:44,520 --> 00:10:48,460 de King James Bijbel, en daar gaan we. 234 00:10:48,460 --> 00:10:51,080 >> Dus dat zijn allemaal van de zogenaamd verkeerd gespelde woorden uit 235 00:10:51,080 --> 00:10:52,240 de King James Bible. 236 00:10:52,240 --> 00:10:55,560 En mijn implementatie heeft een halve seconde in totaal. 237 00:10:55,560 --> 00:10:58,270 Dus niet al te slecht op dit specifieke computer. 238 00:10:58,270 --> 00:11:01,540 Maar denk aan hoeveel code dat ik moest schrijven. 239 00:11:01,540 --> 00:11:02,880 Denken hoeveel code je moest schrijven. 240 00:11:02,880 --> 00:11:06,170 Bedenk hoeveel uur je besteed in de D-hal of uw dorm of waar 241 00:11:06,170 --> 00:11:07,890 eigenlijk codering up die oplossing. 242 00:11:07,890 --> 00:11:11,850 >> Nou, als ik eigenlijk een hoger niveau taal zoals PHP, kennis te nemen van 243 00:11:11,850 --> 00:11:13,350 wat ik hier kan doen. 244 00:11:13,350 --> 00:11:16,410 Ten eerste, stel dat deze plaats uw distributie code. 245 00:11:16,410 --> 00:11:17,790 Dit is een bestand genaamd speller. 246 00:11:17,790 --> 00:11:20,220 Het is beschikbaar als onderdeel van de hedendaagse verdeelsleutel. 247 00:11:20,220 --> 00:11:22,670 En ik ga mijn hand zwaaien naar de meeste van de gegevens, maar dit is eigenlijk 248 00:11:22,670 --> 00:11:25,500 een interessant voorbeeld van hoe je misschien poort een taal 249 00:11:25,500 --> 00:11:28,870 zoals C naar PHP. 250 00:11:28,870 --> 00:11:33,420 Ik letterlijk opende twee tekst ramen, een met mijn C versie van speller.c, 251 00:11:33,420 --> 00:11:36,960 en ik net begonnen met het vertalen van het in mijn hoofd naar PHP en te typen met behulp van 252 00:11:36,960 --> 00:11:38,840 de dichtstbijzijnde equivalente functies. 253 00:11:38,840 --> 00:11:40,100 >> Zodat een aantal van deze dingen zijn anders. 254 00:11:40,100 --> 00:11:43,730 We zagen de vorige keer dat PHP niet gebruiken onder meer op precies dezelfde manier. 255 00:11:43,730 --> 00:11:47,050 Het maakt gebruik vergen doorgaans, hoewel onder andere bestaat. 256 00:11:47,050 --> 00:11:50,330 Te definiëren is een beetje anders # Define in C, maar dat is 257 00:11:50,330 --> 00:11:51,890 hoe maken we een constante. 258 00:11:51,890 --> 00:11:55,860 $ Argc blijkt bestaat in PHP, dus we hebben eerder gezien dat. 259 00:11:55,860 --> 00:11:58,650 Dit zijn slechts variabelen allemaal die beginnen met dollartekens. 260 00:11:58,650 --> 00:12:00,590 Recall dit zijn gewoon een stelletje van drijvende punten. 261 00:12:00,590 --> 00:12:03,970 >> Zo lang verhaal kort te maken, je bent van harte welkom om blader door deze als nieuwsgierig, dit is 262 00:12:03,970 --> 00:12:10,010 bijna een lijn-voor-lijn conversie van de C versie van speller.c in PHP. 263 00:12:10,010 --> 00:12:12,630 En je kon dit opnieuw doen voor een half dozijn andere talen. 264 00:12:12,630 --> 00:12:14,910 >> Maar wat interessant is dit. 265 00:12:14,910 --> 00:12:16,910 Of wat is ronduit ontmoedigend is dit. 266 00:12:16,910 --> 00:12:20,790 Laat me ga je gang en typ over dictionary.php, en beweren dat ik ben 267 00:12:20,790 --> 00:12:23,670 gaan om verder te gaan en opnieuw te implementeren probleem ingesteld zes hier. 268 00:12:23,670 --> 00:12:27,530 >> Dus laten we stellen eerst dat in deze bestand, dat in zal worden uitgevoerd 269 00:12:27,530 --> 00:12:30,550 PHP, dus laat ik mijn tags zoals die open kunnen. 270 00:12:30,550 --> 00:12:34,780 Ik geef mezelf een globale variabele, $ size krijgt nul. 271 00:12:34,780 --> 00:12:36,710 En ik ga geven mezelf een hash table. 272 00:12:36,710 --> 00:12:38,110 Ik zal een hash tabel gebruiken voor dit ding. 273 00:12:38,110 --> 00:12:42,070 Hoe verklaar ik een hash tabel in PHP? 274 00:12:42,070 --> 00:12:42,990 Gedaan. 275 00:12:42,990 --> 00:12:43,980 OK. 276 00:12:43,980 --> 00:12:48,870 >> Zo open beugel haakje sluiten vertegenwoordigt wat in PHP, zoals we hebben gezien? 277 00:12:48,870 --> 00:12:51,850 Een array, maar een array die kon zijn een associatieve array. 278 00:12:51,850 --> 00:12:54,320 Een associatieve array is een gegevensstructuur die 279 00:12:54,320 --> 00:12:55,860 associeert toetsen met waarden. 280 00:12:55,860 --> 00:12:59,430 >> Nu in de eenvoudigste numeriek geïndexeerd array, die sleutels zijn wat? 281 00:12:59,430 --> 00:13:02,250 282 00:13:02,250 --> 00:13:03,960 Nul, een, twee, drie, toch? 283 00:13:03,960 --> 00:13:08,780 Old school spullen terug van C. Maar het kan ook strings zoals foo en bar, 284 00:13:08,780 --> 00:13:12,210 of maxwell, of een dergelijke string. 285 00:13:12,210 --> 00:13:14,240 Dus ik kan benutten dat in slechts een moment. 286 00:13:14,240 --> 00:13:17,550 >> Laat me gaan en verklaren een functie als - 287 00:13:17,550 --> 00:13:19,020 laten we eerst load () doen. 288 00:13:19,020 --> 00:13:20,690 Dus functie load (). 289 00:13:20,690 --> 00:13:23,440 En PHP is een beetje anders in dat je letterlijk typt functie, maar u 290 00:13:23,440 --> 00:13:24,930 typ niet een return type. 291 00:13:24,930 --> 00:13:28,760 Ik ga om te gaan en te zeggen dat de load () functie moet nemen in 292 00:13:28,760 --> 00:13:31,000 argument $ dictionary, net zoals C versie deed. 293 00:13:31,000 --> 00:13:32,510 Ik doe dat uit het geheugen. 294 00:13:32,510 --> 00:13:34,910 >> En ik stel voor dat ik ben dit gaat doen. 295 00:13:34,910 --> 00:13:37,080 Ik ga gewoon naar foreach doen. 296 00:13:37,080 --> 00:13:40,710 Ik ga naar een functie genaamd noemen file (), passeren in de naam van die 297 00:13:40,710 --> 00:13:44,990 bestand, dat de variabele $ Woordenboek als $ woord. 298 00:13:44,990 --> 00:13:49,410 En dan de binnenkant van mijn lus hier, ik ben gaan om verder te gaan en op te slaan in mijn 299 00:13:49,410 --> 00:13:57,440 $ Tabel die $ woord krijgt waar. 300 00:13:57,440 --> 00:13:57,918 Gedaan. 301 00:13:57,918 --> 00:14:01,264 Oh, wacht. 302 00:14:01,264 --> 00:14:02,422 Gedaan. 303 00:14:02,422 --> 00:14:02,760 OK. 304 00:14:02,760 --> 00:14:04,970 >> Dat is de functie load () zeggen in PHP. 305 00:14:04,970 --> 00:14:05,865 Nu, waarom werkt dat? 306 00:14:05,865 --> 00:14:07,010 En ik ben soort van vals spelen hier. 307 00:14:07,010 --> 00:14:09,980 >> Dus, een, foreach we zagen kort laatste keer. 308 00:14:09,980 --> 00:14:13,680 Het betekent gewoon dat je dan kunt herhalen een array zonder gedoe met i 309 00:14:13,680 --> 00:14:16,150 en n en plus plus, en dat alles. 310 00:14:16,150 --> 00:14:21,350 Woordenboek is natuurlijk de naam van het bestand, iets als groot of klein, de twee 311 00:14:21,350 --> 00:14:22,830 woordenboeken gebruikten we de vorige keer. 312 00:14:22,830 --> 00:14:26,715 Bestand is een functie die op tekst opent bestand, leest het in lijn per lijn, en 313 00:14:26,715 --> 00:14:29,840 handen u een groot scala back, elk waarvan de elementen een 314 00:14:29,840 --> 00:14:31,340 regel uit dat bestand. 315 00:14:31,340 --> 00:14:36,040 Dus dat is de combinatie van fopen, en fread, en terwijl lus, en fclose, 316 00:14:36,040 --> 00:14:37,080 en dat alles. 317 00:14:37,080 --> 00:14:40,150 Ten slotte, zoals woord betekent alleen dat is de variabele Ik ga om toegang te krijgen 318 00:14:40,150 --> 00:14:41,890 elke iteratie van deze lus. 319 00:14:41,890 --> 00:14:46,910 >> Dus in het kort, deze one-liner betekent hier open het bestand dat wier naam in 320 00:14:46,910 --> 00:14:50,750 woordenboek, de variabele, itereren over het regel voor regel, en elke keer krijg je 321 00:14:50,750 --> 00:14:54,290 een lijn, op te slaan in een woord variabele genaamd, en dan iets met woord. 322 00:14:54,290 --> 00:14:55,280 Wat wil ik doen? 323 00:14:55,280 --> 00:14:58,110 Ik wil woord in mijn hash tafel. 324 00:14:58,110 --> 00:15:00,860 >> Nou, ik kan iets in zet mijn hash table net als in C 325 00:15:00,860 --> 00:15:02,140 vierkante haken te gebruiken. 326 00:15:02,140 --> 00:15:03,660 Dit is de naam voor mijn hash table. 327 00:15:03,660 --> 00:15:07,180 Ik ga index in dat hash tabel op deze locatie. 328 00:15:07,180 --> 00:15:08,920 Dus niet beugel nul, niet een beugel. 329 00:15:08,920 --> 00:15:11,990 Bracket citaat unquote iets, wat dat woord is. 330 00:15:11,990 --> 00:15:15,200 En net zoals je zou kunnen hebben in uw hash table werk trie, je winkel 331 00:15:15,200 --> 00:15:17,650 effectief een Boolean, impliciet of expliciet. 332 00:15:17,650 --> 00:15:18,260 Gedaan. 333 00:15:18,260 --> 00:15:20,000 Ik ben het opslaan van de waarde true. 334 00:15:20,000 --> 00:15:23,150 >> Nu is er een paar dingen Ik ben snijden hoeken op hier. 335 00:15:23,150 --> 00:15:27,720 Technisch, er gaat een zijn vervelend nieuwe lijn, / n, eind 336 00:15:27,720 --> 00:15:28,820 elk van deze woorden. 337 00:15:28,820 --> 00:15:31,770 Dus moet ik waarschijnlijk een PHP functie noemen genoemd chop (), die zal 338 00:15:31,770 --> 00:15:33,460 letterlijk hak die af. 339 00:15:33,460 --> 00:15:35,020 En ik eigenlijk moet doen een ander ding. 340 00:15:35,020 --> 00:15:38,380 Ik moet waarschijnlijk verhogen grootte op elke iteratie, dus ik ben het bijhouden 341 00:15:38,380 --> 00:15:39,560 wereldwijd van wat het is. 342 00:15:39,560 --> 00:15:43,180 En eerlijk gezegd, en dit is een van de dommer aspecten van PHP, als je 343 00:15:43,180 --> 00:15:46,950 met behulp van een globale variabele, moet u expliciet te zeggen dat je bent. 344 00:15:46,950 --> 00:15:51,670 Dus ik ga om daadwerkelijk te typen in de wereldwijde $ Size, global $ tafel, en nu 345 00:15:51,670 --> 00:15:52,690 Mijn functie is voltooid. 346 00:15:52,690 --> 00:15:57,475 >> Dus niet zo eenvoudig als voorheen, maar Waarschijnlijk nam minder tijd dan de C 347 00:15:57,475 --> 00:15:58,220 versie, misschien? 348 00:15:58,220 --> 00:15:58,730 OK. 349 00:15:58,730 --> 00:16:00,390 >> Dus nu laten we de cheque ()-functie. 350 00:16:00,390 --> 00:16:04,300 Eens kijken of dit in ieder geval nam de urenlang dat het kostte ons in C. Dus 351 00:16:04,300 --> 00:16:06,500 laat me gaan en verklaren kijk als een functie. 352 00:16:06,500 --> 00:16:09,070 Neemt in argument woord, dat is vandaan moet komen speller. 353 00:16:09,070 --> 00:16:13,410 En ik ga gewoon om te controleren of de volgende variabele isset, tafel 354 00:16:13,410 --> 00:16:18,400 beugel strtolower van het woord - 355 00:16:18,400 --> 00:16:20,590 laten we allemaal van mijn haakjes in evenwicht - 356 00:16:20,590 --> 00:16:24,275 dan terug waar. 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 dat was echt de harde onderdeel van dit programma. 360 00:16:30,330 --> 00:16:31,940 Else, return false. 361 00:16:31,940 --> 00:16:32,630 Gedaan. 362 00:16:32,630 --> 00:16:33,460 Dat is cheque (). 363 00:16:33,460 --> 00:16:34,520 >> Nu, waarom werkt dit? 364 00:16:34,520 --> 00:16:37,040 Nou, degene die ik aangenomen in een woord, die een tekenreeks. 365 00:16:37,040 --> 00:16:41,400 Twee, Ik controleer de binnenkant van de hash tafel, die heet $ tafel. 366 00:16:41,400 --> 00:16:45,470 Ik forceren naar kleine letters door te bellen naar een functie vrij gelijkaardig tolower () in 367 00:16:45,470 --> 00:16:48,580 C, maar dit doet het hele woord, niet een enkel karakter. 368 00:16:48,580 --> 00:16:52,680 En als dat is ingesteld, dat wil zeggen er wordt een waarde ingesteld, met andere woorden, 369 00:16:52,680 --> 00:16:54,880 als het waar is, dan ja, Dit is een woord. 370 00:16:54,880 --> 00:16:56,530 Omdat ik het daar met load (). 371 00:16:56,530 --> 00:16:59,100 En zo niet, ga ik return false. 372 00:16:59,100 --> 00:17:00,090 >> Nu de anderen gemakkelijk. 373 00:17:00,090 --> 00:17:03,570 Functie grootte (), hoe kan ik dit doen? 374 00:17:03,570 --> 00:17:05,230 Ik wezen doen terugkeren $ size. 375 00:17:05,230 --> 00:17:07,770 Maar ik moet technisch te doe dit vervelende ding. 376 00:17:07,770 --> 00:17:10,640 En eigenlijk up hoor, ik was te snijden een hoek te veel. 377 00:17:10,640 --> 00:17:12,920 Ik moet echt global $ tafel doen. 378 00:17:12,920 --> 00:17:16,260 >> Maar dat gezegd zijnde, lossen). 379 00:17:16,260 --> 00:17:17,380 Lossen () is geweldig. 380 00:17:17,380 --> 00:17:20,500 Functie unload (). 381 00:17:20,500 --> 00:17:23,990 Hoe wil ik implementeren unload ()? 382 00:17:23,990 --> 00:17:25,079 Gedaan. 383 00:17:25,079 --> 00:17:25,450 OK. 384 00:17:25,450 --> 00:17:28,900 >> Dus lossen (), memory management is volledig verzorgd voor u in 385 00:17:28,900 --> 00:17:31,800 iets als PHP en veel van hoger niveau talen. 386 00:17:31,800 --> 00:17:32,600 Dus dit is geweldig. 387 00:17:32,600 --> 00:17:36,080 Net als waarom de hel hebben we hebben de afgelopen acht plus weken op C schrijven 388 00:17:36,080 --> 00:17:41,030 blijkbaar erg traag, echt tijd tijdrovende problemen tientallen uren 389 00:17:41,030 --> 00:17:42,530 van werken onder onze riemen? 390 00:17:42,530 --> 00:17:46,110 >> Nou, voor een ding, dit kan werken prima voor kleine programma's. 391 00:17:46,110 --> 00:17:47,840 Het versneld zeker mijn ontwikkelingstijd. 392 00:17:47,840 --> 00:17:49,790 Maar laten we eens kijken wat er gebeurt in de echte wereld. 393 00:17:49,790 --> 00:17:52,370 >> Laat me gaan in deze map in een terminal venster. 394 00:17:52,370 --> 00:17:53,370 Er is speller. 395 00:17:53,370 --> 00:17:56,570 En let even terzijde, en je zou heb dit ondervonden in opdracht gesteld 396 00:17:56,570 --> 00:17:58,190 zes of probleem stelde zeven. 397 00:17:58,190 --> 00:18:01,610 Je hoeft niet strikt hoeft te end PHP-bestanden met. php. 398 00:18:01,610 --> 00:18:05,250 Als je een regel zoals die eerste aan de top, dat is een speciale lijn 399 00:18:05,250 --> 00:18:10,980 van de syntaxis die in wezen betekent vinden het programma genaamd PHP en gebruik deze om 400 00:18:10,980 --> 00:18:12,270 interpreteren dit bestand. 401 00:18:12,270 --> 00:18:15,410 Dus nu niemand echt weet dat Ik gebruik een PHP-programma. 402 00:18:15,410 --> 00:18:19,860 Ik kan het gewoon draaien alsof het werden iets gecompileerd in C. 403 00:18:19,860 --> 00:18:20,650 >> Maar hier is het ding. 404 00:18:20,650 --> 00:18:21,600 Eigenlijk, laten we dit nog een keer doen. 405 00:18:21,600 --> 00:18:23,530 Dropbox/pset6 /. 406 00:18:23,530 --> 00:18:25,390 Er is speller. 407 00:18:25,390 --> 00:18:26,720 OK, 0,44 seconden. 408 00:18:26,720 --> 00:18:28,080 Het kreeg sneller dit keer. 409 00:18:28,080 --> 00:18:29,745 >> Nu laten we gaan naar de PHP-versie. 410 00:18:29,745 --> 00:18:43,070 411 00:18:43,070 --> 00:18:44,320 Leuke touch. 412 00:18:44,320 --> 00:18:50,830 413 00:18:50,830 --> 00:18:53,285 Maar denk maar hoeveel tijd Ik bespaarde op kantooruren. 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 >> Dus 3.59 seconden, die eigenlijk niet nauwkeurig beide klinken. 417 00:19:01,020 --> 00:19:03,710 Maar dat komt omdat lang verhaal kort, wanneer u afdrukt uit een enorme hoeveelheid 418 00:19:03,710 --> 00:19:06,840 dingen op het scherm, dat zelf vertraagt ​​dingen naar beneden. 419 00:19:06,840 --> 00:19:11,260 Wat nodig was echt de CPU in de apparaat was 3.59 seconden, in 420 00:19:11,260 --> 00:19:15,260 In tegenstelling tot C, die 0,44 kostte seconden het meest recent. 421 00:19:15,260 --> 00:19:17,620 Dat is echt een orde van verschillende magnitude. 422 00:19:17,620 --> 00:19:20,280 >> Dus waar is die prijs vandaan? 423 00:19:20,280 --> 00:19:21,790 Waarom is het zo veel langzamer? 424 00:19:21,790 --> 00:19:24,220 Waarom heeft PHP presteren zo slecht? 425 00:19:24,220 --> 00:19:25,242 Danielle? 426 00:19:25,242 --> 00:19:26,550 >> PUBLIEK: Dat heb je niet echt gebruik maken van een hash table. 427 00:19:26,550 --> 00:19:27,710 >> DAVID Malan: Ik heb niet echt gebruik maken van een hash table. 428 00:19:27,710 --> 00:19:28,760 Dus ik soort van deed. 429 00:19:28,760 --> 00:19:29,870 Dus het is een associatieve array. 430 00:19:29,870 --> 00:19:33,650 Het meest waarschijnlijk als de mensen in PHP zijn echt slim, onder de gebruikte ze 431 00:19:33,650 --> 00:19:39,520 kap een echte hash table geïmplementeerd in iets als C of C + +. 432 00:19:39,520 --> 00:19:41,290 Maar. 433 00:19:41,290 --> 00:19:42,760 Yeah. 434 00:19:42,760 --> 00:19:44,010 >> PUBLIEK: [onverstaanbaar]. 435 00:19:44,010 --> 00:19:46,690 436 00:19:46,690 --> 00:19:47,080 >> DAVID Malan: Yeah. 437 00:19:47,080 --> 00:19:50,780 Dus elk van de functies die ik schreef - Eigenlijk kun je zeggen dat eens te meer een 438 00:19:50,780 --> 00:19:51,480 wat harder? 439 00:19:51,480 --> 00:19:54,509 >> Publiek: Elk van de functies die u opgenomen heeft veel meer volledige 440 00:19:54,509 --> 00:19:56,610 capaciteit dan - 441 00:19:56,610 --> 00:19:57,550 >> DAVID Malan: Dus dat is heel waar. 442 00:19:57,550 --> 00:20:01,490 Er is nog veel meer overhead die we niet echt zien door alleen op de 443 00:20:01,490 --> 00:20:03,730 dictionary.php, die ik net schreef. 444 00:20:03,730 --> 00:20:08,020 Daarentegen is er een hele tolk gaan in de achtergrond. 445 00:20:08,020 --> 00:20:12,040 Inderdaad, toen ik liep dit programma, het liep niet gecompileerd nullen en enen 446 00:20:12,040 --> 00:20:14,290 ontworpen voor mijn Intel CPU. 447 00:20:14,290 --> 00:20:19,270 In plaats daarvan werd het draaiende lijn per lijn PHP code die precies eruit ziet 448 00:20:19,270 --> 00:20:20,350 zoals wij getypt het. 449 00:20:20,350 --> 00:20:22,475 En dus wanneer u een gebruiken geïnterpreteerde taal, je 450 00:20:22,475 --> 00:20:23,850 eigenlijk betalen deze prijs. 451 00:20:23,850 --> 00:20:27,010 Het zal enige tijd duren om te lezen uw dossier boven naar beneden, van links naar 452 00:20:27,010 --> 00:20:30,740 rechts, en dan telkens laten uitvoeren opnieuw en opnieuw lijn. 453 00:20:30,740 --> 00:20:34,250 >> Nu in de werkelijkheid, vooral op het web, je kunt eigenlijk versnellen dit proces 454 00:20:34,250 --> 00:20:38,660 door caching de resultaten van de PHP-code wordt geïnterpreteerd. 455 00:20:38,660 --> 00:20:41,640 En dat is logisch op het web, omdat als je een gebruiker zoals hebben niet 456 00:20:41,640 --> 00:20:46,300 me hier, maar 1000 of 10.000 gebruikers, dan misschien de eerste keer dat het bestand is 457 00:20:46,300 --> 00:20:49,050 toegankelijk het is traag, maar daarna het is veel sneller. 458 00:20:49,050 --> 00:20:51,000 >> Maar ook dat, nogmaals, is een afweging. 459 00:20:51,000 --> 00:20:53,870 En voor iets als een onderzoeksgegevens instellen, of zelfs iets groot als 460 00:20:53,870 --> 00:20:58,330 dit, zal uw gebruikers uiteindelijk gaan dat vertraging voelen. 461 00:20:58,330 --> 00:21:02,670 >> Dus in het kort, geïnterpreteerde talen zijn erg in de mode, zeer populair, en 462 00:21:02,670 --> 00:21:06,710 eerlijk gezegd zijn waarschijnlijk de talen die u moet bereiken voor bij het oplossen van problemen 463 00:21:06,710 --> 00:21:08,200 na CS50. 464 00:21:08,200 --> 00:21:12,720 Maar beseffen hoeveel je echt nemen voor onder de motorkap verleend 465 00:21:12,720 --> 00:21:15,910 echt die afgelopen weken in hash tabellen en bomen, en probeert, 466 00:21:15,910 --> 00:21:20,770 die uiteindelijk daadwerkelijk worden gebruikt dingen als haakje openen implementeren, 467 00:21:20,770 --> 00:21:24,200 vierkante haken, die we kunnen nu dankbaar voor lief nemen. 468 00:21:24,200 --> 00:21:26,360 >> Dus laten we nu eens een kijkje nemen in dit web context. 469 00:21:26,360 --> 00:21:29,890 En ik vorige keer dat er een stelletje superglobals in PHP dat 470 00:21:29,890 --> 00:21:32,490 zijn niet echt relevant op de opdrachtregel. 471 00:21:32,490 --> 00:21:36,210 Ze zijn meer relevant in de context van het gebruik van PHP in een web context. 472 00:21:36,210 --> 00:21:41,220 Dus PHP draait op een webserver om om dingen zoals HTML te genereren. 473 00:21:41,220 --> 00:21:44,540 >> En we keek naar $ _GET en $ _POST, en dat is waar gebruikers automatisch ' 474 00:21:44,540 --> 00:21:49,100 ingang eindigt gewoon als je indienen van een vormen naar een bestand dat eindigt op. php op een webpagina 475 00:21:49,100 --> 00:21:50,460 server zoals het apparaat. 476 00:21:50,460 --> 00:21:53,310 Maar laten we kort $ _COOKIE En $ _SESSION. 477 00:21:53,310 --> 00:21:56,670 >> In termen van de leek, wat is een cookie als u begrijpt het in het kader van 478 00:21:56,670 --> 00:21:58,220 via het web? 479 00:21:58,220 --> 00:21:59,450 >> PUBLIEK: bestand op de computer. 480 00:21:59,450 --> 00:21:59,920 >> DAVID Malan: Yeah. 481 00:21:59,920 --> 00:22:03,500 Het is een bestand op de computer van de gebruiker geplant door welke website 482 00:22:03,500 --> 00:22:04,410 je toevallig om te bezoeken. 483 00:22:04,410 --> 00:22:07,334 Dus als je naar Facebook, als je gaat naar bankofamerica.com, als je gaat 484 00:22:07,334 --> 00:22:10,330 naar google.com, wanneer je naar bijna elke website in de wereld deze dagen, 485 00:22:10,330 --> 00:22:14,850 waaronder cs50.net, wordt er een cookie geplant op uw computer, dat is 486 00:22:14,850 --> 00:22:19,800 ofwel een waarde opgeslagen in het RAM in computer in uw browser geheugen, of 487 00:22:19,800 --> 00:22:22,800 soms inderdaad een bestand dat is opgeslagen op uw harde schijf. 488 00:22:22,800 --> 00:22:26,960 >> En wat is meestal opgeslagen in dat bestand is niet uw gebruikersnaam, uw 489 00:22:26,960 --> 00:22:31,060 password, meestal niet iets gevoelige tenzij de website is niet zo 490 00:22:31,060 --> 00:22:35,040 goed met hun veiligheid, maar het is een grote unieke identificatie bij 491 00:22:35,040 --> 00:22:35,680 andere. 492 00:22:35,680 --> 00:22:38,920 Het is een groot willekeurig getal geplant op uw computer, maar je kunt denken als 493 00:22:38,920 --> 00:22:42,740 een soort van virtuele handstempel zoals uit een club of een pretpark dat 494 00:22:42,740 --> 00:22:47,160 laat het personeel, de eigenaren van die dienst, om te herinneren wie je bent. 495 00:22:47,160 --> 00:22:51,030 Als het grote willekeurige getal is als 12345678, hoewel dat natuurlijk 496 00:22:51,030 --> 00:22:54,180 niet te willekeurig, denk aan dat als de handstempel dat wanneer je bezoek 497 00:22:54,180 --> 00:22:57,930 facebook.com voor de eerste keer, zij stempel dat nummer op je hand. 498 00:22:57,930 --> 00:23:01,510 En dan, omdat je spreekt HTTP, u als een browser, en omdat Facebook 499 00:23:01,510 --> 00:23:06,440 uiteraard spreekt hetzelfde als een web server, het protocol HTTP zegt dat 500 00:23:06,440 --> 00:23:09,930 wanneer je vervolgens een bezoek facebook.com, of het nu een tweede 501 00:23:09,930 --> 00:23:13,560 later, een uur later, zelfs de volgende dag, zolang u expliciet hebt niet 502 00:23:13,560 --> 00:23:17,050 uitgelogd, die effectief is als het wassen van je handen. 503 00:23:17,050 --> 00:23:20,280 HTTP zegt dat je moet presenteren uw handstempel elke keer dat je 504 00:23:20,280 --> 00:23:22,020 terug te keren naar die website. 505 00:23:22,020 --> 00:23:24,390 >> Wat Facebook dan is heeft ze kijk naar die hand stempel en 506 00:23:24,390 --> 00:23:26,850 ze zeggen, oh, 123456789. 507 00:23:26,850 --> 00:23:30,260 Ik weet niet op het eerste gezicht dat deze is David Malan in Cambridge, 508 00:23:30,260 --> 00:23:34,690 Massachusetts, maar ze kunnen controleren hun databank en zeggen, oh, de persoon 509 00:23:34,690 --> 00:23:39,930 op wiens computer we geplant 123456789 is David Malan uit Cambridge, 510 00:23:39,930 --> 00:23:40,440 Massachusetts. 511 00:23:40,440 --> 00:23:46,000 Laten zien dat de gebruiker vervolgens zijn profiel pagina of zijn News Feed. 512 00:23:46,000 --> 00:23:49,660 >> Maar er is een probleem als dit is hoe het web werkt inderdaad. 513 00:23:49,660 --> 00:23:51,390 Laten we eens een kijkje nemen op een snel voorbeeld. 514 00:23:51,390 --> 00:23:55,190 Laten we eigenlijk gaan om te zeggen facebook.com. 515 00:23:55,190 --> 00:23:58,130 Maar voordat we daar konden gaan, laat mij ga je gang en open Chrome 516 00:23:58,130 --> 00:23:59,790 Inspecteur hier beneden. 517 00:23:59,790 --> 00:24:01,140 Laat me naar het tabblad netwerk. 518 00:24:01,140 --> 00:24:06,020 En laten we nu verder gaan en typ in https://facebook.com. 519 00:24:06,020 --> 00:24:09,410 En ik doe dat, zodat we niet zien al die omleidingen en afval 520 00:24:09,410 --> 00:24:10,660 tijd aan het zoeken door middel van deze. 521 00:24:10,660 --> 00:24:12,690 Laat ik druk op enter. 522 00:24:12,690 --> 00:24:13,130 >> Oke. 523 00:24:13,130 --> 00:24:14,580 We zien een hele hoop van verzoeken. 524 00:24:14,580 --> 00:24:15,640 Er komt Facebook. 525 00:24:15,640 --> 00:24:16,930 Er is een hele hoop bestanden. 526 00:24:16,930 --> 00:24:19,290 En hier, per mijn vermelding van latency laatste keer, dat is 527 00:24:19,290 --> 00:24:21,240 veel HTTP-verzoeken. 528 00:24:21,240 --> 00:24:23,700 Maar de eerste waarschijnlijk de meest interessante. 529 00:24:23,700 --> 00:24:26,420 >> Dus laten we scroll hier naar beneden, en Ik ben in te zoomen in een tweede. 530 00:24:26,420 --> 00:24:29,090 Dit zal soort zijn een puinhoop, maar laten we eens kijken. 531 00:24:29,090 --> 00:24:31,660 Facebook is ons een verzendende hele hoop spullen. 532 00:24:31,660 --> 00:24:33,490 >> Maar whoa, interessant. 533 00:24:33,490 --> 00:24:37,880 Ze zijn het planten van niet een, maar vier handstempel op mijn hand hier. 534 00:24:37,880 --> 00:24:40,400 Set-koekje, Set-koekje, set-koekje, set-cookie. 535 00:24:40,400 --> 00:24:44,030 En er zijn hier een paar functies. 536 00:24:44,030 --> 00:24:46,170 Allemaal op te noemen wat soort van expiratie. 537 00:24:46,170 --> 00:24:50,090 En het lijkt erop dat Facebook hoopt mij onthouden tot 2015. 538 00:24:50,090 --> 00:24:53,670 Dus dat is waarschijnlijk het moment waarop Ik moet uitloggen of zullen ze gewoon 539 00:24:53,670 --> 00:24:55,710 automatisch aannemen ik ben niet terug. 540 00:24:55,710 --> 00:24:57,840 Dus dat is eigenlijk een fatsoenlijke tijd. 541 00:24:57,840 --> 00:24:59,170 >> En er zijn enkele andere dingen aan de hand hier. 542 00:24:59,170 --> 00:25:03,036 Deze cookie lijkt gedwongen zijn verwijderd door te zeggen dat in 1970 verlopen 543 00:25:03,036 --> 00:25:04,460 alvorens cookies bestond. 544 00:25:04,460 --> 00:25:06,510 Dus de browser is gewoon te veronderstellen OK, dat is net als 545 00:25:06,510 --> 00:25:07,910 het wassen van de handen stempel. 546 00:25:07,910 --> 00:25:11,240 >> Maar nu wanneer mijn browser maakt een volgende aanvraag - 547 00:25:11,240 --> 00:25:14,340 laat me ga je gang en doe dit opnieuw en reload. 548 00:25:14,340 --> 00:25:18,170 Laat me nu blader terug naar de top verzoek en ga naar beneden 549 00:25:18,170 --> 00:25:20,760 hier, verzoek headers. 550 00:25:20,760 --> 00:25:21,390 Merken dit. 551 00:25:21,390 --> 00:25:25,280 Dus nu ben ik onder geen response headers, maar merken het zegt requestheaders. 552 00:25:25,280 --> 00:25:29,220 En merk dat mijn browser als onderdeel van zijn verzoek na het raken reload heeft 553 00:25:29,220 --> 00:25:32,780 verzonden ten minste de volgende gegevens. 554 00:25:32,780 --> 00:25:34,670 Niet ingesteld-koekje, maar cookie. 555 00:25:34,670 --> 00:25:38,750 Dus dit is de lijn, de HTTP-header zo te spreken, waar mijn browser is een soort 556 00:25:38,750 --> 00:25:43,340 van zonder mijn weten presenteren mijn hand voor Facebook inspectie. 557 00:25:43,340 --> 00:25:46,020 >> Dus deze cookies kunnen worden vervolgens gebruikt voor wat? 558 00:25:46,020 --> 00:25:49,420 Om te onthouden wie je bent, of herinneren hoe vaak je er bent geweest, of 559 00:25:49,420 --> 00:25:50,280 echt iets. 560 00:25:50,280 --> 00:25:52,742 >> Dus hier is counter.php. 561 00:25:52,742 --> 00:25:53,780 En laat me in te zoomen op het lettertype. 562 00:25:53,780 --> 00:25:58,380 En elke keer als ik de pagina verversen, bericht het is herinneren hoeveel keer 563 00:25:58,380 --> 00:25:59,250 Ik ben er geweest. 564 00:25:59,250 --> 00:26:00,570 Nou, dat is niet zo indrukwekkend. 565 00:26:00,570 --> 00:26:03,140 Laten we gewoon sluiten dat tabblad, en nu laten we terug gaan naar 566 00:26:03,140 --> 00:26:07,860 http://localhost/counter.php. 567 00:26:07,860 --> 00:26:08,970 >> Oh, dat is interessant. 568 00:26:08,970 --> 00:26:10,960 Hij herinnerde zich nog, zelfs hoewel ik sloot het tabblad. 569 00:26:10,960 --> 00:26:14,010 En eerlijk gezegd, als ik de browser sluit, indien uitgevoerd op de juiste manier, I 570 00:26:14,010 --> 00:26:18,950 kon nog herinneren dat deze gebruiker wie hij of zij was de eerste keer, en 571 00:26:18,950 --> 00:26:22,840 slechts een keer ga ik in het menu van Chrome, die hier is hier, en ga naar 572 00:26:22,840 --> 00:26:25,990 Geschiedenis, en klik Browsergegevens wissen zoals sommigen van u kan hebben in de 573 00:26:25,990 --> 00:26:33,050 verleden, alleen dan zal je cookies eigenlijk tijdens web worden verwijderd 574 00:26:33,050 --> 00:26:33,970 ontwikkeling. 575 00:26:33,970 --> 00:26:35,340 >> Dus, als we gaan - 576 00:26:35,340 --> 00:26:37,080 laten we close up gedit hier. 577 00:26:37,080 --> 00:26:38,910 En als we nu naar dit bestand. 578 00:26:38,910 --> 00:26:44,210 Laat me gaan in onze vhosts / localhost / publiek, en laat mij 579 00:26:44,210 --> 00:26:46,340 counter.php. 580 00:26:46,340 --> 00:26:48,350 Merk op dat dit een vrij eenvoudig programma. 581 00:26:48,350 --> 00:26:50,250 Het is een vrij eenvoudige website. 582 00:26:50,250 --> 00:26:51,770 >> Dus het begin van het bestand is gewoon commentaar. 583 00:26:51,770 --> 00:26:54,930 Maar hier is een nieuwe lijn die je kan reeds in blz zeven gezien, 584 00:26:54,930 --> 00:26:56,000 session_start (). 585 00:26:56,000 --> 00:27:00,380 Dit is een lijn van PHP-code die vertelt in wezen de webserver, maken 586 00:27:00,380 --> 00:27:03,400 ervoor om de handen te stempelen en maken Zorg ervoor dat u de hand stempels controleren. 587 00:27:03,400 --> 00:27:06,810 Dat is alles wat die lijn doet, en het doet al van dat proces voor ons. 588 00:27:06,810 --> 00:27:09,510 Dan merk ik heb net twee takken hier. 589 00:27:09,510 --> 00:27:14,150 Als de teller sleutel binnenkant van deze speciale globale variabele genaamd 590 00:27:14,150 --> 00:27:18,010 $ _SESSION Ligt - dat wil zeggen, als er enige waarde daar - 591 00:27:18,010 --> 00:27:22,440 laten we het en bewaar het op een lokale variabele genaamd $ teller. 592 00:27:22,440 --> 00:27:27,000 Else, laten toewijzen $ teller de standaard waarde van 0. 593 00:27:27,000 --> 00:27:30,320 >> Nu hier is een aspect van PHP dat is zowel een zegen als een vloek. 594 00:27:30,320 --> 00:27:32,080 PHP is een beetje slordig. 595 00:27:32,080 --> 00:27:35,160 Dus terwijl in C, wat zou het reikwijdte van de teller zijn geweest 596 00:27:35,160 --> 00:27:36,725 hetzij hier of hier? 597 00:27:36,725 --> 00:27:39,270 598 00:27:39,270 --> 00:27:41,690 >> Het zou zijn opgesloten aan die accolades. 599 00:27:41,690 --> 00:27:42,090 Wat denk je? 600 00:27:42,090 --> 00:27:46,920 In PHP, het bestaat zelfs buiten deze accolades, hier, en hier, 601 00:27:46,920 --> 00:27:49,120 en hier, en hier, en zelfs beneden. 602 00:27:49,120 --> 00:27:52,400 Dus ik zeg dit is een zegen in de zin dat je niet hoeft na te denken als 603 00:27:52,400 --> 00:27:54,070 hard als wij deden weken geleden. 604 00:27:54,070 --> 00:27:56,880 Maar het is ook een beetje een vloek in dat ongeacht waar u een variabele te gebruiken in 605 00:27:56,880 --> 00:28:00,020 PHP, althans in een programma als dit, het is wereldwijd toegankelijk voor 606 00:28:00,020 --> 00:28:01,170 goede of ten kwade. 607 00:28:01,170 --> 00:28:06,130 Dus je moet in gedachten te houden nu dat uw variabelen kunnen niet ongedefinieerd. 608 00:28:06,130 --> 00:28:07,640 Je zou ze elders hebben gedefinieerd. 609 00:28:07,640 --> 00:28:09,460 >> Maar wat moet ik uiteindelijk doen? 610 00:28:09,460 --> 00:28:13,160 Ik ga om te slaan in deze globale variabele als een waarde van de 611 00:28:13,160 --> 00:28:17,060 Tellers het resultaat van doen teller plus 1. 612 00:28:17,060 --> 00:28:18,910 Dus dit is gewoon het rekenkundig dat doet de 613 00:28:18,910 --> 00:28:20,590 ophoging van die teller. 614 00:28:20,590 --> 00:28:24,850 En het feit dat ik het opslaan van dat waarde terug in hier is betekent 615 00:28:24,850 --> 00:28:29,970 wezen database te updaten naar vergeet niet dat de gebruiker 123456789 is geweest 616 00:28:29,970 --> 00:28:31,010 Hier twee keer. 617 00:28:31,010 --> 00:28:33,780 En als ik het opnieuw doen de volgende keer dat ik de pagina geladen is, het gaat om te controleren 618 00:28:33,780 --> 00:28:36,710 mijn hand stempel en zeggen: oh, gebruiker 123456789 heeft nu 619 00:28:36,710 --> 00:28:38,410 hier al drie keer. 620 00:28:38,410 --> 00:28:43,390 >> En dus wat PHP en soortgelijke talen doen voor ons is dat ze uitzoeken 621 00:28:43,390 --> 00:28:47,720 hoe en waar en voor hoe lang waarden opslaan in deze speciale 622 00:28:47,720 --> 00:28:48,830 superglobal. 623 00:28:48,830 --> 00:28:52,750 En dit superglobal de volgende keer dat ik bezoek de pagina is een soort van magisch 624 00:28:52,750 --> 00:28:57,440 vooraf ingevulde, gevuld met waarden die waren er de laatste keer dat u bezocht, 625 00:28:57,440 --> 00:29:02,310 of dat een tweede geleden, een week geleden, of in 2013 en we praten nu 626 00:29:02,310 --> 00:29:03,790 over 2015. 627 00:29:03,790 --> 00:29:07,600 PHP en de webserver take care van dat alles voor u. 628 00:29:07,600 --> 00:29:08,850 >> PUBLIEK: [onverstaanbaar]. 629 00:29:08,850 --> 00:29:11,900 630 00:29:11,900 --> 00:29:15,760 >> DAVID Malan: Variabelen in PHP zijn in wezen altijd global tenzij u 631 00:29:15,760 --> 00:29:18,400 verklaren ze binnenkant van een functie, en dan zijn ze lokaal te 632 00:29:18,400 --> 00:29:19,420 alleen de functie. 633 00:29:19,420 --> 00:29:22,300 Maar omdat ik geen schriftelijke functies, ze zijn eigenlijk 634 00:29:22,300 --> 00:29:25,090 wereldwijde gedurende mijn hele bestand hier. 635 00:29:25,090 --> 00:29:26,040 >> PUBLIEK: Is er een manier om ze lokaal te maken? 636 00:29:26,040 --> 00:29:28,470 >> DAVID Malan: Is er een manier om ze lokaal te maken? 637 00:29:28,470 --> 00:29:30,680 Alleen door ze te omwikkelen in functies. 638 00:29:30,680 --> 00:29:32,790 Die in de laatste versie van PHP, kunt u dit doen met 639 00:29:32,790 --> 00:29:34,130 een anonieme functie. 640 00:29:34,130 --> 00:29:35,930 Maar meer op dat in de context van JavaScript. 641 00:29:35,930 --> 00:29:37,260 Maar het korte antwoord is nee. 642 00:29:37,260 --> 00:29:40,888 Een langere antwoord is ja. 643 00:29:40,888 --> 00:29:42,380 Leuk. 644 00:29:42,380 --> 00:29:43,380 Goede quizvraag. 645 00:29:43,380 --> 00:29:43,930 Oke. 646 00:29:43,930 --> 00:29:47,760 >> Dus tot slot, de pagina zelf is eigenlijk vrij eenvoudig. 647 00:29:47,760 --> 00:29:51,470 Merk op dat zodra ik PHP-modus, recall verlaten dat al deze spullen naar beneden 648 00:29:51,470 --> 00:29:53,700 hieronder is gewoon gaat krijgen spugen ruw uit naar de browser. 649 00:29:53,700 --> 00:29:57,050 Dat is prima, want ik wil wel sturen de gebruiker een aantal HTML, maar ik wil 650 00:29:57,050 --> 00:29:59,140 om dynamisch te updaten die HTML. 651 00:29:59,140 --> 00:30:03,930 En een manier kan ik dit te doen is om te sorteren zeer snel te laten vallen terug in PHP 652 00:30:03,930 --> 00:30:07,730 mode, gebruik haakje openen vraagteken gelijk-teken, en vervolgens de output van de waarde 653 00:30:07,730 --> 00:30:08,650 van de teller. 654 00:30:08,650 --> 00:30:12,360 >> Of als dit ziet er een beetje cryptisch, deze gelijk-teken is eigenlijk slechts enkele 655 00:30:12,360 --> 00:30:16,190 syntactische suiker voor deze printf ($ teller). 656 00:30:16,190 --> 00:30:19,160 Maar eerlijk gezegd, dat is gewoon een beetje lelijk en een beetje vervelend om te typen. 657 00:30:19,160 --> 00:30:23,660 Dus PHP biedt zeer mooi deze functie waar je gewoon meer kan zeggen dat het 658 00:30:23,660 --> 00:30:25,450 beknopt op dezelfde manier. 659 00:30:25,450 --> 00:30:26,940 >> Dus wat is er aan de onderkant de motorkap? 660 00:30:26,940 --> 00:30:31,210 Laten we snel kijken naar het netwerk tabblad hier voor counter.php. 661 00:30:31,210 --> 00:30:35,090 En laat me ga je gang en de eerste laten we duidelijk uw cookies. 662 00:30:35,090 --> 00:30:38,670 Laten we duidelijk browsing data sinds het begin der tijden. 663 00:30:38,670 --> 00:30:39,680 Laten we nu terug gaan hier. 664 00:30:39,680 --> 00:30:41,340 Laten we nu de pagina geladen is. 665 00:30:41,340 --> 00:30:42,170 En ik ben terug op nul. 666 00:30:42,170 --> 00:30:44,810 Omdat mijn hand stempel is gewassen, Ik krijg nu een nieuwe cookie. 667 00:30:44,810 --> 00:30:48,780 >> Inderdaad als ik kijk naar het tabblad netwerk en kijk naar antwoordheaders, mededeling 668 00:30:48,780 --> 00:30:51,960 dat het apparaat stuurt mij een koekje waarvan de naam is enigszins 669 00:30:51,960 --> 00:30:55,820 willekeurig, maar soort redelijk, PHPSESSID. 670 00:30:55,820 --> 00:30:58,440 En het is deze stuurt me echt groot willekeurig getal. 671 00:30:58,440 --> 00:30:59,440 Het is niet helemaal een nummer. 672 00:30:59,440 --> 00:31:00,390 Het is niet helemaal hexadecimaal. 673 00:31:00,390 --> 00:31:03,600 Het is een soort van alfanumerieke reeks, maar vermoedelijk is het willekeurig. 674 00:31:03,600 --> 00:31:06,830 En dat is de hand stempel zo te spreken dat ik bedoel. 675 00:31:06,830 --> 00:31:11,960 >> Ondertussen als ik klik reload en vervolgens kijk naar deze tweede lijn voor mijn tweede 676 00:31:11,960 --> 00:31:17,600 verzoek, bericht nu dat mijn verzoek headers bevatten PHPSESSID gelijk deze, 677 00:31:17,600 --> 00:31:19,390 geen set-koekje, maar gewoon cookie. 678 00:31:19,390 --> 00:31:22,950 En dat is de presentatie van mijn browser van mijn hand stempel. 679 00:31:22,950 --> 00:31:28,820 >> Dus nu als een teaser, en we praten meer hierover in een week of zo, maar 680 00:31:28,820 --> 00:31:31,590 op welke manier heeft dit je maakt kwetsbaar, uw Facebook-account 681 00:31:31,590 --> 00:31:34,137 kwetsbaar en andere dergelijke accounts kwetsbaar? 682 00:31:34,137 --> 00:31:35,510 >> PUBLIEK: Als iemand uw cookie. 683 00:31:35,510 --> 00:31:36,750 >> DAVID MALAN: Ja, als iemand heeft uw cookie. 684 00:31:36,750 --> 00:31:39,920 Ik bedoel echt, net zoals sommigen van jullie zou kunnen hebben geprobeerd om als een club of een 685 00:31:39,920 --> 00:31:44,030 pretpark, als je iets proberen als dit om de zegel te kopiëren, zij het 686 00:31:44,030 --> 00:31:47,560 achterover op de hand van een andere persoon, en dan is hij of zij presenteert het als 687 00:31:47,560 --> 00:31:53,250 hun eigen, als het eigenlijk niet uitziet identiek, 123456789, dan is het web 688 00:31:53,250 --> 00:31:57,980 server is blijkbaar gewoon gaan vertrouwen dat die gebruiker ben jij. 689 00:31:57,980 --> 00:32:01,450 >> En dit is inderdaad een fundamenteel bedreiging wanneer u cookies 690 00:32:01,450 --> 00:32:05,420 want als iemand spoofs net zo te spreken uw cookie, zoekt uit wat het 691 00:32:05,420 --> 00:32:08,660 is, hetzij door echt het kopiëren door te kijken naar uw computer 692 00:32:08,660 --> 00:32:09,890 en wezen als, OK. 693 00:32:09,890 --> 00:32:14,520 David's cookie is JJ3JIK enzovoort, en dan zijn ze slim genoeg om te weten 694 00:32:14,520 --> 00:32:18,080 hoe soort handmatig verzenden die cookie van een browser of een 695 00:32:18,080 --> 00:32:22,350 programma schrijven ze, konden ze helemaal inloggen op een website als u. 696 00:32:22,350 --> 00:32:28,560 Het is niet zo moeilijk om te doen alsof ze iemand anders, tenzij we opnieuw p-set 697 00:32:28,560 --> 00:32:30,790 twee, die wat ingevoerd? 698 00:32:30,790 --> 00:32:32,065 >> PUBLIEK: Cryptografie. 699 00:32:32,065 --> 00:32:33,860 >> DAVID Malan: Een beetje beetje van cryptografie. 700 00:32:33,860 --> 00:32:36,550 Eenvoudige cryptografie, althans in de standaard editie, maar crypto 701 00:32:36,550 --> 00:32:36,870 toch. 702 00:32:36,870 --> 00:32:37,410 minder. 703 00:32:37,410 --> 00:32:41,440 Dus het blijkt als je versleutelen alle deze headers met behulp van iets dat je 704 00:32:41,440 --> 00:32:48,770 nu misschien meer weten vertrouwelijk als SSL, secure socket layer, of https:// URL's, 705 00:32:48,770 --> 00:32:51,890 dan al die dingen waar we zijn geweest een blik op zijn eigenlijk gecodeerd, 706 00:32:51,890 --> 00:32:54,800 wat betekent dat het is alsof je kan de handstempel niet lezen. 707 00:32:54,800 --> 00:32:59,350 Alleen facebook.com kan, of google.com, of in dit geval, het toestel kan 708 00:32:59,350 --> 00:33:00,550 gelezen dat de hand stempel. 709 00:33:00,550 --> 00:33:04,020 >> Tragisch maar, en nogmaals, dit is al te eventueel samen met de NSA spullen 710 00:33:04,020 --> 00:33:06,410 te laat, zelfs SSL is breekbaar. 711 00:33:06,410 --> 00:33:09,850 En het is eigenlijk niet zo moeilijk zelfs kraken dat encryptie. 712 00:33:09,850 --> 00:33:12,040 Niet zozeer door het kraken van de versleuteling, maar door tricking de 713 00:33:12,040 --> 00:33:15,720 browser in ontsleutelen de gegevens voortijdig. 714 00:33:15,720 --> 00:33:17,880 Maar nogmaals, laten we u plagen met dat duurde niet lang. 715 00:33:17,880 --> 00:33:21,242 Voor nu, gewoon bang. 716 00:33:21,242 --> 00:33:23,070 Het is tragisch soort waar. 717 00:33:23,070 --> 00:33:23,760 >> Oke. 718 00:33:23,760 --> 00:33:27,910 Dus, waar komt dit nu ons verlaten? 719 00:33:27,910 --> 00:33:29,010 Nou, laten we dit doen. 720 00:33:29,010 --> 00:33:31,790 Laten we verder gaan en neem snel een teaser voordat we een pauze nemen. 721 00:33:31,790 --> 00:33:33,790 En ik denk dat we een beetje langer blijven hangen vandaag, maar we gaan duiken in 722 00:33:33,790 --> 00:33:37,850 iets nieuw en sexy, dat zal uw eetlust opwekken voor nog meer. 723 00:33:37,850 --> 00:33:38,950 Dus dat is de teaser. 724 00:33:38,950 --> 00:33:41,520 >> Dus SQL, we begonnen te praten over ooit zo kort vorige keer. 725 00:33:41,520 --> 00:33:44,670 Je zult echt je handen vuil met een aantal van deze in p-set zeven. 726 00:33:44,670 --> 00:33:46,480 En in lekentaal, wat doet SQL - 727 00:33:46,480 --> 00:33:47,110 S-Q-L - 728 00:33:47,110 --> 00:33:49,850 voor u doen? 729 00:33:49,850 --> 00:33:50,310 Wat is het? 730 00:33:50,310 --> 00:33:51,546 Yeah. 731 00:33:51,546 --> 00:33:53,240 >> PUBLIEK: Laten we u toegang tot de gegevens. 732 00:33:53,240 --> 00:33:53,360 >> DAVID Malan: Yeah. 733 00:33:53,360 --> 00:33:55,120 Het u toegang tot gegevens in een database. 734 00:33:55,120 --> 00:33:56,710 Structured Query Language. 735 00:33:56,710 --> 00:33:59,890 En dit is in wezen een programmeertaal. 736 00:33:59,890 --> 00:34:03,400 Er zijn kenmerken van het dat we zullen niet eens gebruik in de klas. 737 00:34:03,400 --> 00:34:04,710 Maar je kan effectief definiëren functies. 738 00:34:04,710 --> 00:34:06,870 Ze heten opgeslagen procedures in SQL. 739 00:34:06,870 --> 00:34:09,860 Maar we zullen het vrij eenvoudig en gewoon blijven gebruik het voor een aantal basishandelingen 740 00:34:09,860 --> 00:34:14,320 zoals het selecteren van gegevens, het invoegen van gegevens, bijwerken van de gegevens, en het verwijderen van gegevens. 741 00:34:14,320 --> 00:34:17,400 >> En je kunt echt denken aan een databank, als een SQL-database, als gewoon 742 00:34:17,400 --> 00:34:18,800 zijnde Microsoft Excel. 743 00:34:18,800 --> 00:34:21,989 Omdat SQL verwijst naar een relationele databank, waar 744 00:34:21,989 --> 00:34:23,480 relatie betekent gewoon tafels. 745 00:34:23,480 --> 00:34:24,739 Rijen en kolommen. 746 00:34:24,739 --> 00:34:27,929 Dus alles wat je in een spreadsheet kan zetten zoals dit of Google Docs, 747 00:34:27,929 --> 00:34:32,460 je kon in een SQL-database gezet door te verklaren dat een tafel. 748 00:34:32,460 --> 00:34:34,800 >> Nu, hoe doe je eigenlijk toegang die informatie? 749 00:34:34,800 --> 00:34:38,239 Nou, met commando's of vragen als deze. 750 00:34:38,239 --> 00:34:40,199 SELECT, INSERT, UPDATE en DELETE. 751 00:34:40,199 --> 00:34:44,489 En voor het grootste gedeelte, dat zijn de vier enige ingrediënten die je nodig hebt om 752 00:34:44,489 --> 00:34:47,370 iets heel krachtig in probleem stelde zeven. 753 00:34:47,370 --> 00:34:49,940 >> Nu terug in de dag, zou je eigenlijk interactie met een database op een 754 00:34:49,940 --> 00:34:52,730 zwart en wit terminal venster op een knipperende prompt als deze. 755 00:34:52,730 --> 00:34:56,370 En de database zijn we actief is op het apparaat heet MySQL, die 756 00:34:56,370 --> 00:34:58,560 gratis en open source database-engine. 757 00:34:58,560 --> 00:35:02,240 Als u Google en lees de Wikipedia artikel, zult u weten dat de naam is 758 00:35:02,240 --> 00:35:05,060 een beetje van de overgang voor sommige versies van Linux. 759 00:35:05,060 --> 00:35:10,460 Maria database eigenlijk vork zo te zeggen van MySQL. 760 00:35:10,460 --> 00:35:12,740 >> Lang verhaal kort, Oracle kocht MySQL. 761 00:35:12,740 --> 00:35:13,870 Oracle is een groot bedrijf. 762 00:35:13,870 --> 00:35:17,010 Mensen zijn bang dat het zou niet langer blijven vrij als open source, 763 00:35:17,010 --> 00:35:20,930 dus dit is gewoon een kopie van MySQL dat is nog vrij, nog open source, en 764 00:35:20,930 --> 00:35:23,550 in Fedora Linux standaard geïnstalleerd. 765 00:35:23,550 --> 00:35:26,130 >> Maar dit is een soort van pijn in de nek om kennis te maken met een 766 00:35:26,130 --> 00:35:27,310 databank op deze manier. 767 00:35:27,310 --> 00:35:30,560 Dus we zijn in de CS50 apparaat een gratis open source tool genaamd 768 00:35:30,560 --> 00:35:31,700 phpMyAdmin. 769 00:35:31,700 --> 00:35:33,940 Gewoon toeval dat het is geschreven in PHP. 770 00:35:33,940 --> 00:35:36,450 Er is geen fundamentele nodig voor PHP hier. 771 00:35:36,450 --> 00:35:40,090 Maar dit is slechts een web-based tool die we gratis gedownload, geïnstalleerd in 772 00:35:40,090 --> 00:35:43,850 Het apparaat, dat ons in staat stelt om een ​​hebben grafische gebruikersinterface waarmee 773 00:35:43,850 --> 00:35:48,610 de p-set zeven databank verkennen die om nieuwe databases aan te maken, 774 00:35:48,610 --> 00:35:51,980 zeggen voor je eigen afstudeerproject als je zou willen, en uiteindelijk creëren 775 00:35:51,980 --> 00:35:55,900 dynamische websites als CS50 Financiën waarmee u gegevens opvragen en 776 00:35:55,900 --> 00:35:58,140 data dynamisch te updaten. 777 00:35:58,140 --> 00:36:01,420 >> Je bent niet van plan om te gebruiken net een eenvoudig tekstbestand of CSV. 778 00:36:01,420 --> 00:36:05,950 U kunt daadwerkelijk gebruik maken van een slimme databank programma, zodat u meer kunt uitvoeren 779 00:36:05,950 --> 00:36:10,240 geavanceerde zoekopdrachten uitvoeren dan alleen het lezen door alles lineair. 780 00:36:10,240 --> 00:36:14,150 >> Dus bijvoorbeeld, dit is wat we geven je uit de doos voor p-set zeven. 781 00:36:14,150 --> 00:36:18,280 Dit is een tabel met schijnbaar minstens drie kolommen, waarvan er 782 00:36:18,280 --> 00:36:21,450 gebruikersnaam, waarvan een hash, en waarvan de andere is ID. 783 00:36:21,450 --> 00:36:26,200 >> Maar het interessante, en alleen maar om plagen uit een gedachte hier, gebruikersnaam 784 00:36:26,200 --> 00:36:29,270 is vermoedelijk al uniek, toch? 785 00:36:29,270 --> 00:36:31,190 Ik bedoel, de meeste een website, indien heb je een gebruikersnaam, er 786 00:36:31,190 --> 00:36:32,370 kunnen niet twee Caesars. 787 00:36:32,370 --> 00:36:33,440 Er kunnen niet twee Malans. 788 00:36:33,440 --> 00:36:34,950 Er kunnen niet twee jharvards. 789 00:36:34,950 --> 00:36:35,600 Zijn uniek. 790 00:36:35,600 --> 00:36:38,610 Anders weten ze niet welke jharvard het eigenlijk is. 791 00:36:38,610 --> 00:36:42,710 Dus wat de motivatie voor het ook zou kunnen zijn met een derde kolom aan de linkerkant 792 00:36:42,710 --> 00:36:46,970 er geroepen ID, die eruit ziet als een nummer dat is eveneens uniek? 793 00:36:46,970 --> 00:36:51,300 Het voelt een beetje overbodig voor mij op het eerste gezicht. 794 00:36:51,300 --> 00:36:54,910 Daarom is het misschien dwingend te hebben niet alleen unieke gebruikersnamen, 795 00:36:54,910 --> 00:36:56,837 maar ook unieke nummers? 796 00:36:56,837 --> 00:36:59,460 >> PUBLIEK: Ze konden hebben hetzelfde wachtwoord. 797 00:36:59,460 --> 00:37:01,720 >> DAVID Malan: Mensen kunnen hebben hetzelfde wachtwoord, zeker. 798 00:37:01,720 --> 00:37:03,900 Dat kan absoluut gebeuren. 799 00:37:03,900 --> 00:37:08,270 Maar als ze deze unieke gebruikersnaam, I beweren dat dat niet echt 800 00:37:08,270 --> 00:37:11,630 kwestie, want als ze typen in hun gebruikersnaam, ik moet alleen maar om hun te controleren 801 00:37:11,630 --> 00:37:15,060 wachtwoord, hun hash daarvan. 802 00:37:15,060 --> 00:37:15,970 Waarom anders? 803 00:37:15,970 --> 00:37:17,950 >> PUBLIEK: Snellere zoekfunctie. 804 00:37:17,950 --> 00:37:18,680 >> DAVID Malan: Snellere zoekfunctie. 805 00:37:18,680 --> 00:37:19,548 Waarom? 806 00:37:19,548 --> 00:37:21,460 >> PUBLIEK: ID is slechts een. 807 00:37:21,460 --> 00:37:24,040 >> DAVID Malan: ID is slechts een personage, of om preciezer te zijn, het is een getal, 808 00:37:24,040 --> 00:37:26,910 dus het is waarschijnlijk 32 bits of iets dergelijks. 809 00:37:26,910 --> 00:37:30,270 Overwegende dat de gebruikersnaam, blijkbaar Jason Hirschhorn is daarboven is een soort van 810 00:37:30,270 --> 00:37:33,900 belachelijk lang, en het gaat om neem me veel meer tijd aan koord 811 00:37:33,900 --> 00:37:40,910 vergelijking H-I-R-S-C-H-H-O-R-N, en misschien a / 0 of iets dergelijks, met het oog 812 00:37:40,910 --> 00:37:45,100 op te zoeken Jason, in tegenstelling tot alleen zeggen geef me gebruiker nummer twee. 813 00:37:45,100 --> 00:37:46,510 Dat is 32 bits. 814 00:37:46,510 --> 00:37:48,550 Het is een enkele INT dat je moet vergelijken. 815 00:37:48,550 --> 00:37:52,150 En inderdaad, dat is precies de reden waarom databases hebben de neiging om unieke id's toewijzen aan 816 00:37:52,150 --> 00:37:53,710 tr daarin. 817 00:37:53,710 --> 00:37:56,280 >> Nu, wat andere data types zijn er Naast INT en blijkbaar 818 00:37:56,280 --> 00:37:57,160 strings als deze? 819 00:37:57,160 --> 00:37:59,700 Nou, om meer goede, SQL databases, zoals 820 00:37:59,700 --> 00:38:02,060 MySQL, hebben CHAR velden. 821 00:38:02,060 --> 00:38:05,320 En teken een beetje misleidend is niet een enkele CHAR. 822 00:38:05,320 --> 00:38:10,290 Een CHAR veld in een MySQL database is een of meer tekens, maar het is een 823 00:38:10,290 --> 00:38:11,780 vaste aantal tekens. 824 00:38:11,780 --> 00:38:15,710 >> Dus bijvoorbeeld, als ik ga naar phpMyAdmin zoals je misschien al hebt, of 825 00:38:15,710 --> 00:38:21,340 binnenkort zal een probleem stelde zeven, en ik ga naar mijn database en gewoon voor de lol, 826 00:38:21,340 --> 00:38:25,700 laten we een nieuwe tabel met de naam testen met slechts twee kolommen. 827 00:38:25,700 --> 00:38:27,160 Ik klik op Start. 828 00:38:27,160 --> 00:38:30,070 En dit zal vrij bekend geworden, vooral als je sleutelen 829 00:38:30,070 --> 00:38:31,130 rond op uw eigen. 830 00:38:31,130 --> 00:38:34,140 Hier zou ik ID typen te creëren een nieuwe tabel van het type INT. 831 00:38:34,140 --> 00:38:37,770 Maar hier zou ik gebruikersnaam typen om herscheppen dat eerder tafel. 832 00:38:37,770 --> 00:38:40,700 En let op, ik heb een hele hoop van soorten om uit te kiezen. 833 00:38:40,700 --> 00:38:43,610 >> En dit is ook de reden waarom phpMyAdmin is wel leuk. 834 00:38:43,610 --> 00:38:46,770 Het is een soort van zelf-onderwijs in die u kan gewoon een soort van punt en klik, en 835 00:38:46,770 --> 00:38:50,730 kijk naar dropdown menu's, en afleiden uit dat wat bevoegdheden SQL geeft. 836 00:38:50,730 --> 00:38:54,090 >> En inderdaad, als ik ervoor kies CHAR, ik dan moet de lengte, of hoe specificeren 837 00:38:54,090 --> 00:38:55,940 veel waarden, hoeveel Chars. 838 00:38:55,940 --> 00:39:00,090 Dus zeer gemeenschappelijke waarden zijn zaken als 255, maar dat is een beetje lang. 839 00:39:00,090 --> 00:39:02,250 Vaak is acht voor een gebruikersnaam. 840 00:39:02,250 --> 00:39:03,590 Maar dat is een beetje klein deze dagen. 841 00:39:03,590 --> 00:39:05,430 Dus dit is een ontwerp beslissing. 842 00:39:05,430 --> 00:39:08,630 Is het max. 8 tekens, 32, 255, 1000? 843 00:39:08,630 --> 00:39:09,830 Het is echt aan jou. 844 00:39:09,830 --> 00:39:12,350 Maar een char veld is een vast nummer. 845 00:39:12,350 --> 00:39:16,420 Dus kies te weinig en je bent soort van geschroefd als je een langere gebruikersnaam. 846 00:39:16,420 --> 00:39:19,132 Kies te veel en wat is de keerzijde? 847 00:39:19,132 --> 00:39:20,820 >> PUBLIEK: [onverstaanbaar]. 848 00:39:20,820 --> 00:39:21,620 >> DAVID Malan: Het is verspilling. 849 00:39:21,620 --> 00:39:24,835 Net als in C, als je een grotere hebt stuk van het geheugen dan je nodig hebt, je bent 850 00:39:24,835 --> 00:39:27,190 gewoon tijd verspilling en verspilling van ruimte. 851 00:39:27,190 --> 00:39:31,430 Dus als alternatief bestaat VARCHAR, die dit probleem oplost door 852 00:39:31,430 --> 00:39:36,390 behandelen length geen vaste lengte, maar als een maximumlengte en met een 853 00:39:36,390 --> 00:39:40,990 variabel aantal tekens, die vervolgens heeft de neiging om slechts zoveel chars gebruiken als u 854 00:39:40,990 --> 00:39:42,710 daadwerkelijk nodig heeft. 855 00:39:42,710 --> 00:39:43,670 Dat klinkt perfect. 856 00:39:43,670 --> 00:39:45,640 >> Waarom gaan we niet te ontdoen van de Char data typ? 857 00:39:45,640 --> 00:39:48,500 Wat zou het nadeel zijn van gebruik VARCHARs, dat klinkt 858 00:39:48,500 --> 00:39:51,644 alsof het een mooie overwinning? 859 00:39:51,644 --> 00:39:52,596 Yeah? 860 00:39:52,596 --> 00:39:53,846 >> PUBLIEK: [onverstaanbaar]. 861 00:39:53,846 --> 00:39:57,360 862 00:39:57,360 --> 00:39:57,790 >> DAVID MALAN: OK, goed. 863 00:39:57,790 --> 00:40:01,101 Dus als al uw gegevens is hetzelfde lengte, wat is de zorg? 864 00:40:01,101 --> 00:40:05,250 >> PUBLIEK: Omdat je verspilt gegevens door ze allemaal te vertellen. 865 00:40:05,250 --> 00:40:09,060 >> DAVID Malan: Dus als al uw gegevens dezelfde lengte, hoewel, zou ik pleiten 866 00:40:09,060 --> 00:40:12,300 dat het opgeven van een maximumlengte op VARCHAR is niet anders dan 867 00:40:12,300 --> 00:40:16,070 specificeren van een vaste lengte op CHAR als weet je dat nummer op voorhand. 868 00:40:16,070 --> 00:40:19,500 Maar er is inderdaad, en ik zal een soort van uittreksel uit dat het antwoord van de werkelijkheid 869 00:40:19,500 --> 00:40:22,610 dat er nog steeds een max, die zou kunnen vervelend zijn, zeker als je 870 00:40:22,610 --> 00:40:25,920 tegenkomen naam van een persoon die ongewoon lang dat je dat niet deed 871 00:40:25,920 --> 00:40:26,860 anticiperen. 872 00:40:26,860 --> 00:40:31,420 En het is ook een beetje minder efficiënt om daadwerkelijk zoeken op VARCHARs als 873 00:40:31,420 --> 00:40:35,620 tegenstelling tot het zoeken Chars, vooral lange tafels die partijen hebben en 874 00:40:35,620 --> 00:40:36,510 veel data. 875 00:40:36,510 --> 00:40:40,060 Dus ook hier, thematisch weer geen duidelijke keuze. 876 00:40:40,060 --> 00:40:42,870 >> Dus gewoon om u een gevoel van andere geven soorten gegevens die van belang kunnen zijn 877 00:40:42,870 --> 00:40:45,400 hetzij voor blz zeven of de toekomst, er is INT. 878 00:40:45,400 --> 00:40:47,270 Er is BIGINT, die is als lange lange. 879 00:40:47,270 --> 00:40:48,880 Het heeft de neiging om zijn 64 bits. 880 00:40:48,880 --> 00:40:51,640 Er is DECIMAAL, waar je ziet in het probleem set, die een veel 881 00:40:51,640 --> 00:40:55,300 schoner antwoord op de problemen die we ondervonden met vlotter en zwevende 882 00:40:55,300 --> 00:40:55,980 wijzen onnauwkeurigheid. 883 00:40:55,980 --> 00:40:57,390 En dan is er DATETIME. 884 00:40:57,390 --> 00:41:01,530 Er is letterlijk een soort gegevens dat moet te kijken als een jaar, een maand, een dag, 885 00:41:01,530 --> 00:41:03,730 en een uur, minuten en seconden. 886 00:41:03,730 --> 00:41:07,470 >> Maar SQL-databases hebben ook dingen die we zullen indexen noemen. 887 00:41:07,470 --> 00:41:11,630 En een index is iets dat je opgeven bij het maken van de tabel te 888 00:41:11,630 --> 00:41:15,720 maken zoekopdrachten en andere operaties efficiënter. 889 00:41:15,720 --> 00:41:18,550 In het bijzonder, is er iets geroepen de voornaamste parameter die je zou kunnen 890 00:41:18,550 --> 00:41:19,440 verklaren als volgt. 891 00:41:19,440 --> 00:41:22,330 >> We deden dit voor u met de gebruikers tabel geven wij u. 892 00:41:22,330 --> 00:41:26,160 Maar merk als ik handmatig recreëren de tabel gebruikers hier geven 893 00:41:26,160 --> 00:41:27,110 het een naam van de gebruikers. 894 00:41:27,110 --> 00:41:28,125 Ik heb al opgegeven ID. 895 00:41:28,125 --> 00:41:29,330 Ik heb opgegeven INT. 896 00:41:29,330 --> 00:41:32,000 Ik heb opgegeven gebruikersnaam met maximaal 32 tekens. 897 00:41:32,000 --> 00:41:36,140 Maar als we blijven scrollen in dit vrij breed venster, bericht is er een 898 00:41:36,140 --> 00:41:38,260 heleboel andere dingen die ik kan geven. 899 00:41:38,260 --> 00:41:40,950 >> One, kan ik attributen opgeven zoals, weet je wat, dit 900 00:41:40,950 --> 00:41:42,190 INT moet UNSIGNED zijn. 901 00:41:42,190 --> 00:41:45,510 Ik heb geen negatieve getallen wilt, dus laten we het niet ondertekend. 902 00:41:45,510 --> 00:41:48,660 Null is hier niet relevant, omdat Ik wil elke gebruiker 903 00:41:48,660 --> 00:41:49,640 hebben een uniek nummer. 904 00:41:49,640 --> 00:41:50,830 Ik wil het niet op null zijn. 905 00:41:50,830 --> 00:41:52,330 >> Maar dit is interessant. 906 00:41:52,330 --> 00:41:57,780 Ik kan aangeven dat ID is ofwel de primaire sleutel van deze databank, of het is 907 00:41:57,780 --> 00:42:00,620 uniek, of het is geïndexeerd, of de volledige tekst. 908 00:42:00,620 --> 00:42:05,630 Dus voor doeleinden van vandaag, lang verhaal Kortom, PRIMARY betekent dat deze zal 909 00:42:05,630 --> 00:42:10,570 zowel conceptueel en technisch het veld dat we gebruiken om een ​​unieke 910 00:42:10,570 --> 00:42:12,140 identificeren van gebruikers. 911 00:42:12,140 --> 00:42:16,140 >> Dus als we kijken gebruikers, dit is een soort van een belofte om ze kijken vooral door 912 00:42:16,140 --> 00:42:17,370 die unieke identifier. 913 00:42:17,370 --> 00:42:21,930 En de database zal ervoor zorgen dat als je heb een gebruiker nummer 3, dat kan niet 914 00:42:21,930 --> 00:42:25,400 fysiek plaats een andere gebruiker met hetzelfde nummer 3. 915 00:42:25,400 --> 00:42:28,380 De databank zal alleen weigeren om uw wijzigingen op te slaan. 916 00:42:28,380 --> 00:42:32,310 Dat is een goede zaak, want je kunt jezelf te beschermen tegen jezelf. zelf 917 00:42:32,310 --> 00:42:34,270 >> Als alternatief voor de gebruikersnaam. 918 00:42:34,270 --> 00:42:37,670 Dus de tweede rij, rappel, is het veld gebruikersnaam. 919 00:42:37,670 --> 00:42:41,860 Dus de tweede rij is hier gebruikersnaam, als we op de daar uiterst links. 920 00:42:41,860 --> 00:42:43,940 >> Dus wat zou ik willen opgeven? 921 00:42:43,940 --> 00:42:47,840 Ik ben niet toegestaan, volgens SQL, twee primaire sleutels specificeren. 922 00:42:47,840 --> 00:42:50,750 kunt u een gezamenlijke sleutel op te geven waar u kijk beide velden in, maar ze kunnen niet 923 00:42:50,750 --> 00:42:52,260 afzonderlijk worden primaire sleutels. 924 00:42:52,260 --> 00:42:54,750 Dus dat is uit den boze. 925 00:42:54,750 --> 00:42:56,040 Dus waar zou ik willen kiezen? 926 00:42:56,040 --> 00:42:59,710 >> Nou, UNIEK is in dezelfde geest een primaire sleutel waar u dit aangeven 927 00:42:59,710 --> 00:43:03,570 veld moet uniek, maar het is niet van plan om de ene 928 00:43:03,570 --> 00:43:04,410 Ik gebruik de hele tijd. 929 00:43:04,410 --> 00:43:08,450 En we zijn niet van plan om dit alles tot een te gebruiken de tijd om welke reden ook alweer? 930 00:43:08,450 --> 00:43:10,490 Het is trager potentieel als het is een lange gebruikersnaam. 931 00:43:10,490 --> 00:43:11,740 Het is gewoon een verspilling van tijd. 932 00:43:11,740 --> 00:43:16,140 >> INDEX, ondertussen, geeft aan dat het niet van plan om uniek te zijn, maar ik zou graag 933 00:43:16,140 --> 00:43:19,470 je om je magie te werken onder de kap om het sneller voor mij om 934 00:43:19,470 --> 00:43:21,420 zoeken op dit gebied. 935 00:43:21,420 --> 00:43:23,320 Dus dit waarschijnlijk is hier niet relevant. 936 00:43:23,320 --> 00:43:26,500 Voor gebruikersnaam, zou ik zeggen dat UNIQUE is een goed antwoord. 937 00:43:26,500 --> 00:43:31,200 Maar stel dat we gebruikers meer interessanter dan alleen gebruikersnamen, 938 00:43:31,200 --> 00:43:32,430 hashes, en ID-nummers. 939 00:43:32,430 --> 00:43:33,860 Wat als we de volle namen gaf de mensen? 940 00:43:33,860 --> 00:43:37,700 Wat als we gaven hen behandelt en andere gegevens over hen? 941 00:43:37,700 --> 00:43:43,360 >> Nou, als je aangeven dat een kolom in een databank wordt geïndexeerd, dat wil zeggen dat 942 00:43:43,360 --> 00:43:47,730 MySQL of Oracle, of wat dan ook databank u gebruikt, moet zijn magische werk 943 00:43:47,730 --> 00:43:51,300 en het gebruik van een soort van mooie data structuur als een boom, of een Trie, of een 944 00:43:51,300 --> 00:43:55,940 hash table, of iets om te garanderen dat wanneer u zoeken naar gegevens met behulp van 945 00:43:55,940 --> 00:43:58,150 Selecteer op dat gebied - 946 00:43:58,150 --> 00:44:01,310 graag zien mij iedereen die woont op Oxford Street. 947 00:44:01,310 --> 00:44:02,540 Een query als dat. 948 00:44:02,540 --> 00:44:06,250 Als u hebt opgegeven bij voorbaat dat u een index op dat gebied willen, de 949 00:44:06,250 --> 00:44:09,050 zoekacties zullen veel zijn, veel sneller. 950 00:44:09,050 --> 00:44:12,090 >> Als je niet een index, de beste specificeren je kunt doen is een lineair zoekopdracht als 951 00:44:12,090 --> 00:44:13,030 het is niet gesorteerd. 952 00:44:13,030 --> 00:44:16,220 Maar als je INDEX opgeeft, de slimme mensen die de database gemaakt - 953 00:44:16,220 --> 00:44:19,340 mensen zoals u die nu kent bomen en probeert en hash tabellen - 954 00:44:19,340 --> 00:44:23,220 zal een dergelijke gegevens automatisch op te bouwen structuur in het RAM om ervoor te zorgen dat 955 00:44:23,220 --> 00:44:26,050 deze zoekopdrachten zijn veel sneller. 956 00:44:26,050 --> 00:44:29,660 >> FULLTEXT ondertussen is gelijkaardig in geest, maar stelt u in staat om te doen wildcard 957 00:44:29,660 --> 00:44:35,480 zoekopdrachten, zoals toon mij iedereen die leven op straten die beginnen met de 958 00:44:35,480 --> 00:44:36,960 letter O om welke reden. 959 00:44:36,960 --> 00:44:38,850 U kunt wildcard opzoekingen doen als dat. 960 00:44:38,850 --> 00:44:45,880 Of, meer dwingende dingen zoals tonen ik iedereen die het woord - 961 00:44:45,880 --> 00:44:49,400 toon mij iedereen wiens achternaam begint met een bepaalde letter. 962 00:44:49,400 --> 00:44:51,880 U kunt zoeken op trefwoorden op deze manier. 963 00:44:51,880 --> 00:44:52,630 Oke. 964 00:44:52,630 --> 00:44:55,760 >> Dus, ontwerpmogelijkheden er potentieel. 965 00:44:55,760 --> 00:44:57,740 Er zijn anderen die ik zal zwaaien mijn handen op. 966 00:44:57,740 --> 00:45:00,530 Het blijkt dat je kunt hebben verschillende storage engines. 967 00:45:00,530 --> 00:45:04,390 En dit is meer mysterieuze dan we nodig hebben zeker voor het probleem stelde zeven. 968 00:45:04,390 --> 00:45:06,920 Standaard worden jullie gebruik iets genaamd InnoDB. 969 00:45:06,920 --> 00:45:10,910 Je zult zien vermelding van deze ergens in interface van phpMyAdmin's het meest waarschijnlijk. 970 00:45:10,910 --> 00:45:14,130 Maar weet dat er andere ontwerp beslissingen die van potentiële 971 00:45:14,130 --> 00:45:18,030 belangstelling komen als laatste projecten je iets webgebaseerde doen. 972 00:45:18,030 --> 00:45:19,330 >> Maar laten we dit doen. 973 00:45:19,330 --> 00:45:23,130 Laten we verder gaan en zet deze op de scherm als een teaser voor een verhaal 974 00:45:23,130 --> 00:45:26,330 met u, een huisgenoot, en een glas melk. 975 00:45:26,330 --> 00:45:28,240 Laten we eens een twee minuten of zo breken hier. 976 00:45:28,240 --> 00:45:31,060 En als je rond kunt vasthouden, laten we terugkeren terug, kijken een beetje meer op SQL, en 977 00:45:31,060 --> 00:45:35,160 dan een beetje van JavaScript met p-set acht in het achterhoofd. 978 00:45:35,160 --> 00:45:36,120 >> Oke. 979 00:45:36,120 --> 00:45:40,420 Dus, laten we u het denken over een hoek zaak die heel gemakkelijk kan ontstaan 980 00:45:40,420 --> 00:45:44,240 in de context van een database of eerlijk gezegd, zelfs met behulp van echte wereld dingen 981 00:45:44,240 --> 00:45:46,280 graag geldautomaten om geld te krijgen. 982 00:45:46,280 --> 00:45:47,640 Dus hier is een koelkast. 983 00:45:47,640 --> 00:45:50,040 Stel, je hebt er ook een in uw dorm of uw huis. 984 00:45:50,040 --> 00:45:54,990 En je hebt een kamergenoot, en beiden kregen je echt graag melk bijvoorbeeld. 985 00:45:54,990 --> 00:45:57,210 >> Dus kom je thuis van de klas een dag. 986 00:45:57,210 --> 00:45:58,490 Hij of zij is nog niet terug. 987 00:45:58,490 --> 00:45:59,180 U opent de koelkast. 988 00:45:59,180 --> 00:46:00,870 Wil je echt een groot glas melk. 989 00:46:00,870 --> 00:46:01,820 Er is geen melk. 990 00:46:01,820 --> 00:46:02,920 Dus wat doe je dan? 991 00:46:02,920 --> 00:46:03,840 U sluit de koelkast. 992 00:46:03,840 --> 00:46:04,670 Je pak je sleutels. 993 00:46:04,670 --> 00:46:05,930 Je gaat uit naar het plein. 994 00:46:05,930 --> 00:46:09,240 En krijg je in de rij bij CVS op die self-checkout dingen, die altijd 995 00:46:09,240 --> 00:46:11,180 langer dan daadwerkelijk hebben kassiers. 996 00:46:11,180 --> 00:46:11,820 Hoe dan ook. 997 00:46:11,820 --> 00:46:15,490 >> Zo dan, ondertussen, dot dot dot, uw kamergenoot komt thuis en hij of zij 998 00:46:15,490 --> 00:46:17,440 heeft eveneens een hunkering voor wat melk. 999 00:46:17,440 --> 00:46:20,380 Zodat hij of zij opent de koelkast, ziet er binnen, en oh, verdomd. 1000 00:46:20,380 --> 00:46:21,160 Geen melk. 1001 00:46:21,160 --> 00:46:24,750 Zodat hij of zij hoofden uit, gebeurt om te gaan de andere CVS, die slechts een 1002 00:46:24,750 --> 00:46:27,900 blok weg om wat voor reden, en hij of krijgt ze in de rij om wat melk te kopen. 1003 00:46:27,900 --> 00:46:30,480 >> Ondertussen kom je thuis, hij of ze thuiskomt, en wat doen 1004 00:46:30,480 --> 00:46:31,980 je uiteindelijk? 1005 00:46:31,980 --> 00:46:33,080 Twee keer zo veel melk. 1006 00:46:33,080 --> 00:46:34,620 Maar je hoeft niet echt leuk melk dat veel. 1007 00:46:34,620 --> 00:46:37,300 Dus nu heb je zoveel melk dat nu een van hen is gewoon om te gaan zuur 1008 00:46:37,300 --> 00:46:37,820 uiteindelijk. 1009 00:46:37,820 --> 00:46:39,370 Dus dit is echt een slechte probleem. 1010 00:46:39,370 --> 00:46:39,900 Rechts? 1011 00:46:39,900 --> 00:46:41,990 >> Dus wat is er gebeurd? 1012 00:46:41,990 --> 00:46:44,810 Zo fundamenteel, is dit soort van een belachelijke voorbeeld. 1013 00:46:44,810 --> 00:46:48,580 Maar onder de motorkap, wat wij hebben gehad gebeuren hier is jullie beiden gecontroleerd 1014 00:46:48,580 --> 00:46:52,390 de toestand van een stukje geheugen, de koelkast. 1015 00:46:52,390 --> 00:46:54,420 Jullie beiden controleerde de toestand enkele variabele. 1016 00:46:54,420 --> 00:46:57,360 U beiden trok een conclusie die u vervolgens gehandeld. 1017 00:46:57,360 --> 00:47:01,420 Maar helaas, terwijl je kamergenoot was in de winkel, de staat die 1018 00:47:01,420 --> 00:47:05,670 variabele veranderd, hij of zij terug kwam en wil nu de staat te veranderen, maar 1019 00:47:05,670 --> 00:47:07,480 het is al veranderd op hem of haar. 1020 00:47:07,480 --> 00:47:11,120 En natuurlijk, zou hij of zij niet gegaan naar de winkel als ze wisten 1021 00:47:11,120 --> 00:47:13,010 dat je al onderweg. 1022 00:47:13,010 --> 00:47:16,430 >> Dus in de echte wereld, hoe kon je dit probleem te voorkomen, ervan uitgaande dat je 1023 00:47:16,430 --> 00:47:18,940 een koelkast, heb je een kamergenoot, en je wil eigenlijk melk? 1024 00:47:18,940 --> 00:47:19,760 >> PUBLIEK: Communiceren. 1025 00:47:19,760 --> 00:47:20,580 >> DAVID Malan: Communiceren. 1026 00:47:20,580 --> 00:47:21,160 OK. 1027 00:47:21,160 --> 00:47:22,500 Maar hoe kun je communiceren? 1028 00:47:22,500 --> 00:47:23,990 >> PUBLIEK: Laat een briefje. 1029 00:47:23,990 --> 00:47:25,480 >> DAVID Malan: Laat een briefje achter, toch? 1030 00:47:25,480 --> 00:47:28,025 Laat altijd een notitie, voor het fans van de show. 1031 00:47:28,025 --> 00:47:31,580 Oke, dus altijd een briefje of zet echt als een hangslot of iets 1032 00:47:31,580 --> 00:47:35,440 op de koelkast die je houdt kamergenoot van het inspecteren van de toestand van 1033 00:47:35,440 --> 00:47:36,540 die variabele. 1034 00:47:36,540 --> 00:47:40,800 >> Nu, waarom is dit wellicht relevant voor probleem stelde zeven, of geldautomaten. 1035 00:47:40,800 --> 00:47:46,780 Nou, stel je een wereld in een ATM waar je misschien wel op te gaan naar een geldautomaat staat 1036 00:47:46,780 --> 00:47:48,920 machine hier, en een andere ATM hier. 1037 00:47:48,920 --> 00:47:50,680 En dit gebeurt regelmatig. 1038 00:47:50,680 --> 00:47:54,150 En stel dat je twee ATM-kaarten gehad, die kunnen worden verkregen. 1039 00:47:54,150 --> 00:47:57,420 En je inlogt op beide machines effectief tegelijk, hopelijk 1040 00:47:57,420 --> 00:47:58,660 terwijl niemand kijkt. 1041 00:47:58,660 --> 00:48:01,260 En typt u uw pincode ongeveer tegelijkertijd. 1042 00:48:01,260 --> 00:48:06,280 En dan een opvragen saldo heb je om te zien hoeveel geld je hebt. 1043 00:48:06,280 --> 00:48:08,920 En laten we zeggen dat je $ 100 links in uw account. 1044 00:48:08,920 --> 00:48:13,310 Dus in wezen gelijktijdig, u zeggen een, nul, nul, in te voeren. 1045 00:48:13,310 --> 00:48:16,000 En hopelijk nog wat geld terug. 1046 00:48:16,000 --> 00:48:18,440 >> Maar hoeveel geld zou je terug? 1047 00:48:18,440 --> 00:48:21,710 Nu computers aan het eind van de dag, vooral als ze praat met 1048 00:48:21,710 --> 00:48:27,360 servers, hoeft niet per se dingen doen in de volgorde dat is te verwachten. 1049 00:48:27,360 --> 00:48:30,860 >> Dus stel wat gebeurt er, als gevolg van wat netwerksnelheid problemen daar 1050 00:48:30,860 --> 00:48:34,530 zijn, of CPU problemen er zijn, of iets dergelijks, veronderstellen dat de 1051 00:48:34,530 --> 00:48:38,530 eerste ATM controleert uw saldo en ziet, oh, deze persoon heeft $ 100. 1052 00:48:38,530 --> 00:48:41,840 Maar dan wordt afgeleid, want misschien een back-up gebeurt en dus is het 1053 00:48:41,840 --> 00:48:42,500 vertragen. 1054 00:48:42,500 --> 00:48:45,080 Of misschien tijdens het controleren, het netwerk aansluiting kreeg een beetje langzamer, omdat 1055 00:48:45,080 --> 00:48:45,910 dit gebeurt gewoon. 1056 00:48:45,910 --> 00:48:47,100 Ze zijn fysieke apparaten. 1057 00:48:47,100 --> 00:48:49,330 Dus ondertussen de tweede ATM is dezelfde vraag. 1058 00:48:49,330 --> 00:48:53,030 Hoeveel geld heeft David hebben? $ 100 is het antwoord. 1059 00:48:53,030 --> 00:48:58,930 Maar omdat de eerste ATM heeft nog niet stuurde het bericht aftrekken $ 100, beide 1060 00:48:58,930 --> 00:49:03,000 Geldautomaten zijn kluis van de bank geïnspecteerd, zien er $ 100 daar, en nu 1061 00:49:03,000 --> 00:49:07,160 beide machines mogelijk zijn gaat spugen een antwoord. 1062 00:49:07,160 --> 00:49:12,240 >> Nu, dit is geweldig voor je in zekere zin als wat de bank doet uiteindelijk 1063 00:49:12,240 --> 00:49:17,200 is verandering het bedrag minus 100 door het instellen van de variabele gelijk aan uw 1064 00:49:17,200 --> 00:49:21,570 bankrekening gelijk is aan 0, in tegenstelling tot het doen van minus 100. 1065 00:49:21,570 --> 00:49:24,410 Nu in het slechtste geval voor de bank - 1066 00:49:24,410 --> 00:49:27,470 of het beste voor de bank, ondertussen, ze geven je $ 200, en 1067 00:49:27,470 --> 00:49:31,690 uw bankrekening staat nu negatief $ 100, die echt niet 1068 00:49:31,690 --> 00:49:32,950 profiteert u op alle. 1069 00:49:32,950 --> 00:49:36,500 Maar het punt is dat deze race voorwaarde voor twee kamergenoten krijgen 1070 00:49:36,500 --> 00:49:40,660 melk, of voor twee geldautomaten proberen om geld te krijgen en wijzig de instelling van een gewelf 1071 00:49:40,660 --> 00:49:44,510 tegelijkertijd bestaat elke keer dat u een database. 1072 00:49:44,510 --> 00:49:48,290 >> Nu in probleem stelde zeven, deze kwestie ontstaat in de zin dat als je koopt een 1073 00:49:48,290 --> 00:49:52,110 aandeel van Facebook voorraad, en vervolgens voor je bijvoorbeeld een tweede deel van kopen 1074 00:49:52,110 --> 00:49:55,160 Facebook voorraad, moet u ervoor een besluit als de programmeur. 1075 00:49:55,160 --> 00:49:58,710 Om te beslissen hoe te actualiseren van de databank, is de kans groot dat je gaat 1076 00:49:58,710 --> 00:50:02,250 hebben een rij voor dat bestand, en dit is een manier om het uit te voeren. 1077 00:50:02,250 --> 00:50:06,640 En je gaat op een aandeel van hebben FB, dat is hun ticker symbool 1078 00:50:06,640 --> 00:50:10,120 voor deze gebruikersnaam, of deze gebruiker ID, de unieke identificatie. 1079 00:50:10,120 --> 00:50:12,340 >> Maar hetzelfde verhaal kan hier gebeuren. 1080 00:50:12,340 --> 00:50:15,800 Als je een SELECT in SQL, zoals u zult zien in probleem stelde zeven als je ziet, 1081 00:50:15,800 --> 00:50:18,460 oh, David heeft een aandeel van Facebook voorraad. 1082 00:50:18,460 --> 00:50:23,240 Laat ik nu veranderen deze twee aandelen, omdat hij wil kopen een 1083 00:50:23,240 --> 00:50:24,120 tweede quotum. 1084 00:50:24,120 --> 00:50:27,860 Maar stel dat David had eigenlijk twee browservensters openen, of veronderstellen dat 1085 00:50:27,860 --> 00:50:32,150 Het is een gezamenlijke rekening met twee echtgenoten, en beiden probeert uit te voeren 1086 00:50:32,150 --> 00:50:36,770 dezelfde handeling, ook daar de mogelijkheid bestaat voor een beslissing te zijn 1087 00:50:36,770 --> 00:50:39,670 gebaseerd op het vorige toestand van de wereld - 1088 00:50:39,670 --> 00:50:41,290 de rekening heeft een aandeel - 1089 00:50:41,290 --> 00:50:45,630 en beide mensen, of beide servers, nu proberen te zeggen deze te verhogen tot twee aandelen. 1090 00:50:45,630 --> 00:50:49,020 Maar in dit geval, zou u hebben gebracht me geld voor beide aandelen, maar 1091 00:50:49,020 --> 00:50:50,830 opgehoogd net die ene keer. 1092 00:50:50,830 --> 00:50:54,730 >> Dus in het kort, het fundamentele probleem Hier, net als bij de grap over verlaten van een 1093 00:50:54,730 --> 00:50:58,750 nota, of het zetten van een hangslot op het, is als twee mensen of twee threads - 1094 00:50:58,750 --> 00:50:59,930 denk terug aan scratch - 1095 00:50:59,930 --> 00:51:03,220 kan de toestand van sommige variabele inspecteren en dan proberen om die variabele veranderen, 1096 00:51:03,220 --> 00:51:07,950 maar die twee dingen niet gebeuren op het hetzelfde moment, maar kan gestoord 1097 00:51:07,950 --> 00:51:11,500 door andere dingen gebeuren, gegevens kunnen krijgen in een heel raar staat. 1098 00:51:11,500 --> 00:51:15,450 En u kunt profiteren of u kunt lijden in de zin van het geld voorbeeld. 1099 00:51:15,450 --> 00:51:18,110 >> Dus probleem stelde zeven, geven wij u dit een regel code, die lange tijd 1100 00:51:18,110 --> 00:51:21,000 verhaal kort te maken, lost dit probleem in MySQL. 1101 00:51:21,000 --> 00:51:24,950 Deze zeer lange instructie die niet doet zelfs passen op een lijn op de 1102 00:51:24,950 --> 00:51:30,370 scherm hier zorgt ervoor dat uw operatie is wat atomaire genoemd. 1103 00:51:30,370 --> 00:51:33,720 Het gebeurt allemaal in een keer, of het gebeurt niet op alle. 1104 00:51:33,720 --> 00:51:37,530 Deze zeer lange zin kan niet krijgen gedeeltelijk onderbroken. 1105 00:51:37,530 --> 00:51:39,840 >> En wat het doet is letterlijk wat het zegt. 1106 00:51:39,840 --> 00:51:44,200 Invoegen in sommige tabel worden de volgende drie gebieden die specifieke waarden 1107 00:51:44,200 --> 00:51:47,280 maar op dubbele sleutel, doe een insert niet doen. 1108 00:51:47,280 --> 00:51:48,280 Doe een update. 1109 00:51:48,280 --> 00:51:52,450 Dus dit is als het doen van een SELECT en een INSERT dus op hetzelfde moment om te spreken. 1110 00:51:52,450 --> 00:51:55,150 En wat is de sleutel dat is waarschijnlijk wordt hier bedoeld? 1111 00:51:55,150 --> 00:51:58,300 1112 00:51:58,300 --> 00:52:01,380 >> Het blijkt, en je zult dit zien in probleem stelde zeven spec, want 1113 00:52:01,380 --> 00:52:06,040 we daar hebben verklaard om een ​​unieke sleutel op deze bijzondere tafel, zodanig dat 1114 00:52:06,040 --> 00:52:08,480 je kunt niet meerdere rijen voor dezelfde gebruiker met de 1115 00:52:08,480 --> 00:52:10,150 dezelfde penny stock symbool - 1116 00:52:10,150 --> 00:52:13,780 in dit voorbeeld hier, DVN.V is een domme penny stock dat we 1117 00:52:13,780 --> 00:52:14,980 zie in de spec. 1118 00:52:14,980 --> 00:52:17,860 Omdat we hebben verklaard dat deze uniek zijn, wat dit betekent is dat als je 1119 00:52:17,860 --> 00:52:23,580 proberen om een ​​dubbele rij in te voegen, je bent in plaats daarvan gaan het updaten zonder 1120 00:52:23,580 --> 00:52:27,020 iemand anders een kans om te veranderen de toestand van de wereld niet. 1121 00:52:27,020 --> 00:52:29,400 Dus in het kort, dit zorgt ervoor dingen zijn atoom. 1122 00:52:29,400 --> 00:52:32,530 >> Meer in het algemeen echter, databases zoals MySQL - 1123 00:52:32,530 --> 00:52:35,460 en je hoeft deze functie niet nodig voor p-set zeven, maar houd het in gedachten voor 1124 00:52:35,460 --> 00:52:36,200 de toekomst - 1125 00:52:36,200 --> 00:52:38,870 ondersteunen wat transacties genoemd, waar je kunt zeggen 1126 00:52:38,870 --> 00:52:40,990 START TRANSACTIE letterlijk. 1127 00:52:40,990 --> 00:52:43,270 U kunt dan uitvoeren twee SQL-statements. 1128 00:52:43,270 --> 00:52:45,710 En een SQL-instructie, zoals u zult zien in-p set zeven, ziet er een beetje 1129 00:52:45,710 --> 00:52:46,750 zoiets als dit. 1130 00:52:46,750 --> 00:52:48,820 Bijwerken van een tabel met de naam. 1131 00:52:48,820 --> 00:52:52,550 Stel de kolom saldo gelijk aan wat de kolom saldo momenteel 1132 00:52:52,550 --> 00:52:57,280 is minus 1000 waar het aantal, de rekeningnummer, zoals de gebruikers-ID, 1133 00:52:57,280 --> 00:53:00,830 gelijk aan 2, en dan update rekening dot dot dot. 1134 00:53:00,830 --> 00:53:04,350 >> Dus in lekentaal, wat betekenen deze twee queries lijken te doen in de 1135 00:53:04,350 --> 00:53:05,840 echte wereld gevoel van bankieren? 1136 00:53:05,840 --> 00:53:07,440 >> PUBLIEK: Overstappen naar besparingen. 1137 00:53:07,440 --> 00:53:08,020 >> DAVID Malan: Precies. 1138 00:53:08,020 --> 00:53:10,470 De overdracht van middelen van de ene rekening naar de andere. 1139 00:53:10,470 --> 00:53:14,400 En dit is een ander voorbeeld waar u echt willen deze twee dingen gebeuren 1140 00:53:14,400 --> 00:53:15,570 of niet gebeuren. 1141 00:53:15,570 --> 00:53:18,880 Je wilt niet iets in de te krijgen midden van hen en mogelijk verknoeien 1142 00:53:18,880 --> 00:53:22,220 de wiskunde, of verknoeien hoeveel geld je hebt, of hoeveel 1143 00:53:22,220 --> 00:53:23,170 het geld van de bank heeft. 1144 00:53:23,170 --> 00:53:26,890 Dus wat is echt leuk over transacties in MySQL is dat, en 1145 00:53:26,890 --> 00:53:30,160 databases algemeen, is dat zij en slimme mensen die hebben geïmplementeerd 1146 00:53:30,160 --> 00:53:33,670 deze functies erachter te komen hoe om te maken ervoor dat beide van die dingen gebeuren 1147 00:53:33,670 --> 00:53:35,120 of helemaal niet. 1148 00:53:35,120 --> 00:53:38,580 >> En als je echt ambitie hebben om te maken een website die wordt gebruikt door mensen op 1149 00:53:38,580 --> 00:53:41,490 campus, mensen in de echte wereld, het doen iets in de startup zin, 1150 00:53:41,490 --> 00:53:43,300 Dit zijn de soorten ontwerpbeslissingen die 1151 00:53:43,300 --> 00:53:45,020 worden steeds zo belangrijk. 1152 00:53:45,020 --> 00:53:48,240 Anders begin je data verliest, verlies gebruikers, of in het ergste geval als 1153 00:53:48,240 --> 00:53:51,800 we hebben hier te zien, potentieel geld verliezen. 1154 00:53:51,800 --> 00:53:56,180 Dus nogmaals, meer op dat in opdracht gesteld zeven, en misschien voor sommige 1155 00:53:56,180 --> 00:53:57,530 u in afstudeerprojecten. 1156 00:53:57,530 --> 00:54:01,870 >> Dus laten we veranderen dat beeld dat we hadden een moment geleden net op een manier. 1157 00:54:01,870 --> 00:54:04,070 Dus laat me eigenlijk zien als ik kan - 1158 00:54:04,070 --> 00:54:06,030 nope, dat is weg. 1159 00:54:06,030 --> 00:54:06,690 Daar is het. 1160 00:54:06,690 --> 00:54:09,020 >> Dus dit is waar we vertrokken vorige keer. 1161 00:54:09,020 --> 00:54:12,390 En het blijkt dat we gaan gooien nog een ding in de mix hier - 1162 00:54:12,390 --> 00:54:14,510 een taal genaamd webbrowser. 1163 00:54:14,510 --> 00:54:18,060 Dus JavaScript eigenlijk past in dit stuk - 1164 00:54:18,060 --> 00:54:22,086 en ik niet helemaal voldoende ruimte laat, dus dit is nu niet op schaal. 1165 00:54:22,086 --> 00:54:23,900 OK, dit is echt zielig. 1166 00:54:23,900 --> 00:54:27,075 OK, dus dat is JavaScript. 1167 00:54:27,075 --> 00:54:27,340 Oke. 1168 00:54:27,340 --> 00:54:28,760 Ik ben het echt een slechte dienst. 1169 00:54:28,760 --> 00:54:29,390 Oke. 1170 00:54:29,390 --> 00:54:34,790 >> JavaScript is zo een andere programmeertaal taal, en onze laatste, als dat helpt 1171 00:54:34,790 --> 00:54:37,770 gerust te stellen dat er niet veel meer van de brandkranen hier. 1172 00:54:37,770 --> 00:54:41,100 JavaScript is dus ook een geïnterpreteerde taal, wat betekent dat je niet 1173 00:54:41,100 --> 00:54:42,670 compileren in nullen en enen. 1174 00:54:42,670 --> 00:54:43,690 Je loopt het gewoon. 1175 00:54:43,690 --> 00:54:47,680 Maar wat is fundamenteel verschillend met JavaScript meestal is dat je 1176 00:54:47,680 --> 00:54:49,815 niet draaien op uw webserver. 1177 00:54:49,815 --> 00:54:52,570 Wordt het niet uitgevoerd in de apparaat zodanig. 1178 00:54:52,570 --> 00:54:57,490 Integendeel, het wordt gedownload door een gebruiker via HTTP in hun browser - 1179 00:54:57,490 --> 00:55:00,260 Chrome, Safari, Internet Explorer, Firefox, wat dan ook - 1180 00:55:00,260 --> 00:55:03,860 en het is de browser die deze uitvoert bepaalde programmeertaal. 1181 00:55:03,860 --> 00:55:08,000 >> Dus om duidelijk te zijn, PHP tot nu toe is uitgevoerd hetzij op de opdrachtregel in 1182 00:55:08,000 --> 00:55:11,290 onze zwart en wit venster, op een server als het apparaat een computer 1183 00:55:11,290 --> 00:55:14,490 zoals het apparaat, of het is al uitgevoerd door een webserver 1184 00:55:14,490 --> 00:55:15,860 uitgevoerd op een computer. 1185 00:55:15,860 --> 00:55:20,490 Maar het thema hier is dat PHP tot nu toe is uitgevoerd op de server, zodat 1186 00:55:20,490 --> 00:55:24,820 de gebruiker en de browser van de gebruiker nooit ziet een lijn van PHP-code. 1187 00:55:24,820 --> 00:55:28,530 >> In feite, als je ooit een browser te openen voor uw website of een ander en je 1188 00:55:28,530 --> 00:55:32,400 eigenlijk zien PHP code in uw venster, iemand heeft verpest. 1189 00:55:32,400 --> 00:55:34,950 Want het is niet bedoeld om te worden verzonden naar een browser direct. 1190 00:55:34,950 --> 00:55:38,150 Het moet worden uitgevoerd en draaide in iets als HTML. 1191 00:55:38,150 --> 00:55:40,120 >> Maar JavaScript is in wezen het tegenovergestelde. 1192 00:55:40,120 --> 00:55:44,350 Het is bedoeld om meestal binnen worden uitgevoerd van het browservenster van een gebruiker. 1193 00:55:44,350 --> 00:55:46,840 En welke soorten websites maken gebruik van JavaScript dan tegenwoordig? 1194 00:55:46,840 --> 00:55:49,640 1195 00:55:49,640 --> 00:55:52,180 >> Zoals letterlijk elke populaire website. 1196 00:55:52,180 --> 00:55:55,430 Elke website die jullie waarschijnlijk dagelijks gebruik gebruiken JavaScript om de 1197 00:55:55,430 --> 00:55:57,330 eenvoudigste en zelfs de sexiest functies. 1198 00:55:57,330 --> 00:55:59,800 >> Dus iets als Facebook Chat als je die gebruikt. 1199 00:55:59,800 --> 00:56:01,040 Hoe werkt dat eigenlijk? 1200 00:56:01,040 --> 00:56:05,090 Wel nu toe zijn alle spullen die we hebben gedaan met HTML en PHP veronderstelt dat 1201 00:56:05,090 --> 00:56:08,750 trek je een URL, en je druk op Enter, en je ziet een aantal HTML-inhoud. 1202 00:56:08,750 --> 00:56:11,970 En u de koppeling, dat verandert de klik URL, verandert de pagina en herladen 1203 00:56:11,970 --> 00:56:12,740 wat nieuwe content. 1204 00:56:12,740 --> 00:56:16,340 Klik op een andere URL of een formulier indienen, u krijgen meegetroond naar een andere pagina en 1205 00:56:16,340 --> 00:56:17,420 u een aantal nieuwe inhoud te zien. 1206 00:56:17,420 --> 00:56:22,710 >> Maar het gebruik van iets als Facebook Chat, of Gchat, of Google Maps, zelden 1207 00:56:22,710 --> 00:56:27,350 doet de hele pagina te vernieuwen, zodat u een wit scherm te zien tijdelijk en 1208 00:56:27,350 --> 00:56:28,470 dan nieuwe content. 1209 00:56:28,470 --> 00:56:32,610 Integendeel, webpagina's zijn vandaag dynamisch krijgen opnieuw bijgewerkt en 1210 00:56:32,610 --> 00:56:35,570 steeds weer allerlei van achter de schermen. 1211 00:56:35,570 --> 00:56:38,560 En het blijkt dat als je naar iets als Facebook, of Gchat, 1212 00:56:38,560 --> 00:56:43,050 of Gmail, en de pagina updates automatisch, zonder herladen van de 1213 00:56:43,050 --> 00:56:47,630 hele scherm, wat er gebeurd is dat Uw browser heeft een soort van geheim gemaakt 1214 00:56:47,630 --> 00:56:49,410 extra HTTP-verzoeken - 1215 00:56:49,410 --> 00:56:52,740 niet voor de hele webpagina's, maar alleen voor kleine stukjes van de gegevens, zoals de 1216 00:56:52,740 --> 00:56:55,740 chatbericht dat je vriend gewoon u, of de status update gestuurd die 1217 00:56:55,740 --> 00:56:58,210 iemand die je, of de tweet net stuurde dat iemand net stuurde. 1218 00:56:58,210 --> 00:57:02,120 Het is alleen het maken van weinig aanvragen voor gegevens, en vervolgens met behulp van JavaScript, dit 1219 00:57:02,120 --> 00:57:06,370 programmeertaal, welke verandering de webpagina eruit ziet zonder de 1220 00:57:06,370 --> 00:57:09,860 server te helpen, zonder dat de server genereren die HTML. 1221 00:57:09,860 --> 00:57:13,820 >> Dus in het kort, JavaScript kan worden dan gebruikt om niet alleen nieuwe gegevens op te halen uit 1222 00:57:13,820 --> 00:57:16,750 de server zonder herladen een hele pagina of het indienen van een formulier. 1223 00:57:16,750 --> 00:57:20,060 Het kan ook worden gebruikt om veranderingen de zogenaamde DOM - 1224 00:57:20,060 --> 00:57:21,520 document object model - 1225 00:57:21,520 --> 00:57:24,620 dat is gewoon de mooie manier voor de boom van HTML zeggen 1226 00:57:24,620 --> 00:57:26,220 dat zagen we vorige keer. 1227 00:57:26,220 --> 00:57:31,640 >> Dus om gerust te stellen, JavaScript is syntactisch zo vergelijkbaar met C ook. 1228 00:57:31,640 --> 00:57:32,820 Er is geen hoofdfunctie. 1229 00:57:32,820 --> 00:57:35,430 Je begint gewoon schrijven van de code en het zal worden uitgevoerd, of 1230 00:57:35,430 --> 00:57:36,900 geïnterpreteerd meer goed. 1231 00:57:36,900 --> 00:57:38,660 Omstandigheden zal er zo uitzien. 1232 00:57:38,660 --> 00:57:41,230 Niet anders dan C of PHP voor die kwestie. 1233 00:57:41,230 --> 00:57:43,890 Booleaanse uitdrukkingen of-ed samen zal er zo uitzien. 1234 00:57:43,890 --> 00:57:45,590 Samen ge-AND uitzien. 1235 00:57:45,590 --> 00:57:47,750 >> Schakelaars zal er zo uitzien. 1236 00:57:47,750 --> 00:57:49,440 Voor lussen zal er zo uitzien. 1237 00:57:49,440 --> 00:57:51,060 While loops zal er zo uitzien. 1238 00:57:51,060 --> 00:57:53,316 Do while loops zal er zo uitzien. 1239 00:57:53,316 --> 00:57:54,780 >> Dit is nieuw. 1240 00:57:54,780 --> 00:57:58,753 Heeft dus JavaScript niet een foreach construct per se, maar dit construct 1241 00:57:58,753 --> 00:58:03,870 voor variabele i in array, en ik in dit geval wordt een indexwaarde. 1242 00:58:03,870 --> 00:58:06,880 Dus het is een beetje anders dan dat foreach, maar nieuwe versies van 1243 00:58:06,880 --> 00:58:10,280 JavaScript komen uit de hele tijd, dus zelfs deze taalfuncties 1244 00:58:10,280 --> 00:58:10,880 evolueren. 1245 00:58:10,880 --> 00:58:16,920 >> En als een terzijde, JavaScript deze dagen kan ook worden gebruikt op een server net als 1246 00:58:16,920 --> 00:58:19,920 PHP met behulp van een kader genaamd Node.js. 1247 00:58:19,920 --> 00:58:24,670 Een van CS50's TFs, Kevin, heeft geleid een seminar over Node.js dat is verkrijgbaar bij 1248 00:58:24,670 --> 00:58:26,440 cs50.net/seminars. 1249 00:58:26,440 --> 00:58:28,830 Dus als je nieuwsgierig bent, weet dat je kunnen dit gebruiken op de server kant als 1250 00:58:28,830 --> 00:58:33,870 goed, maar dat is een vrij recente trend, maar een krachtige een op dat. 1251 00:58:33,870 --> 00:58:35,270 >> Dit is een beetje anders. 1252 00:58:35,270 --> 00:58:37,910 Dit is een array webbrowser. 1253 00:58:37,910 --> 00:58:40,115 En wat valt je als verschillende versus C of PHP? 1254 00:58:40,115 --> 00:58:43,890 1255 00:58:43,890 --> 00:58:47,420 Er zijn een paar snelle verhalen kunnen we hier vertellen. 1256 00:58:47,420 --> 00:58:49,367 Wat ontbreekt versus PHP? 1257 00:58:49,367 --> 00:58:51,652 >> PUBLIEK: [onverstaanbaar]. 1258 00:58:51,652 --> 00:58:52,110 >> DAVID Malan: Ja? 1259 00:58:52,110 --> 00:58:53,322 Sorry, zeg nogmaals? 1260 00:58:53,322 --> 00:58:54,740 >> PUBLIEK: niet declareren het type variabele. 1261 00:58:54,740 --> 00:58:56,390 >> DAVID Malan: We zijn niet te verklaren het type variabele. 1262 00:58:56,390 --> 00:58:59,630 Dus eigenlijk heel zoals PHP, we zijn niet uitwerking van de soorten van deze variabele. 1263 00:58:59,630 --> 00:59:02,670 Integendeel, we zijn meer algemeen zeggen var voor variabele. 1264 00:59:02,670 --> 00:59:06,690 We hebben geen PHP overlast van het hebben dollarteken, die weliswaar vervelend om 1265 00:59:06,690 --> 00:59:09,160 type, maakt meer duidelijk dat iets is een variabele. 1266 00:59:09,160 --> 00:59:11,830 Terwijl hier, we zijn een soort terug naar C's aanpak door gewoon te bellen naar een 1267 00:59:11,830 --> 00:59:14,500 variabele door de naam die we willen te geven dezelfde nummers. 1268 00:59:14,500 --> 00:59:17,170 En ook zoals PHP, hebben wij vierkante haken voor de 1269 00:59:17,170 --> 00:59:19,170 waarden binnen die array. 1270 00:59:19,170 --> 00:59:22,490 >> Dus variabelen in JavaScript ook kan er zo uitzien. 1271 00:59:22,490 --> 00:59:26,900 Let hier op dit is een string genaamd s, maar evenzo hebben we niet gespecificeerd 1272 00:59:26,900 --> 00:59:28,750 dat het een string. 1273 00:59:28,750 --> 00:59:33,160 Hier is echter een kenmerk dat niet doet bestaan ​​op dezelfde wijze PHP, 1274 00:59:33,160 --> 00:59:34,460 maar wat eveneens. 1275 00:59:34,460 --> 00:59:36,530 Dit is een object in JavaScript. 1276 00:59:36,530 --> 00:59:42,110 En objecten zijn een soort van het Zwitserse leger Mes van een gegevensstructuur in u 1277 00:59:42,110 --> 00:59:43,900 kunt ze gebruiken voor een aantal dingen. 1278 00:59:43,900 --> 00:59:46,860 >> Hier, bijvoorbeeld, we verklaren een variabele genaamd offerte. 1279 00:59:46,860 --> 00:59:49,110 Het type dat variabele Een doel. 1280 00:59:49,110 --> 00:59:53,550 U kunt denken aan dit als een C struct dat heeft sleutels en waarden. 1281 00:59:53,550 --> 00:59:55,250 Symbol is een sleutel. 1282 00:59:55,250 --> 00:59:57,350 FB is een waarde, blijkbaar een voorraad symbool. 1283 00:59:57,350 --> 00:59:57,930 Komma. 1284 00:59:57,930 --> 01:00:02,180 Prijs is een ander belangrijk, en de waarde ervan is blijkbaar een floating point, of een 1285 01:00:02,180 --> 01:00:06,510 aantal meer in het algemeen in JavaScript, van $ 49,26. 1286 01:00:06,510 --> 01:00:09,030 >> Dus PHP heeft geen - 1287 01:00:09,030 --> 01:00:12,980 we hebben niet helemaal gezien in PHP objecten als dit, maar we zagen een analoge, 1288 01:00:12,980 --> 01:00:14,093 die wat? 1289 01:00:14,093 --> 01:00:14,980 >> PUBLIEK: [onverstaanbaar]. 1290 01:00:14,980 --> 01:00:16,110 >> DAVID Malan: associatieve arrays. 1291 01:00:16,110 --> 01:00:19,990 Dus terwijl PHP heeft associatieve arrays waarvan de syntax is ooit iets zo 1292 01:00:19,990 --> 01:00:20,370 andere - 1293 01:00:20,370 --> 01:00:21,780 we zagen de vierkante haken. 1294 01:00:21,780 --> 01:00:23,860 We zagen de vreemde pijlen symbolen. 1295 01:00:23,860 --> 01:00:27,330 JavaScript heeft voorwerpen, maar dit is vooral een semantisch verschil en een 1296 01:00:27,330 --> 01:00:29,260 verschillende synoniem voor nu. 1297 01:00:29,260 --> 01:00:35,060 Echter, als een terzijde, PHP heeft ook objecten op een manier die Java en andere 1298 01:00:35,060 --> 01:00:37,810 talen voorwerpen object-georiënteerd programmeren. 1299 01:00:37,810 --> 01:00:40,440 Maar we zullen gewoon gebruik maken van deze voor data types voor nu. 1300 01:00:40,440 --> 01:00:42,170 Objecten en associatieve arrays. 1301 01:00:42,170 --> 01:00:44,140 >> Dit zou men kunnen maken een beetje meer duidelijk. 1302 01:00:44,140 --> 01:00:45,890 Hier is waarom een ​​object nuttig is. 1303 01:00:45,890 --> 01:00:48,760 Wanneer u een student verklaren, zoals Zamyla, kunnen we eigenlijk 1304 01:00:48,760 --> 01:00:52,630 kapselen zodat de binnenkant van dat spreken bezwaar door accolades net als 1305 01:00:52,630 --> 01:00:55,060 voordat een hele sleutelbos en waarden hier. 1306 01:00:55,060 --> 01:00:59,150 We hebben een ID, een huis, en een naam voor Zamyla, gevolgd door een puntkomma als 1307 01:00:59,150 --> 01:01:00,690 gebruikelijke eind. 1308 01:01:00,690 --> 01:01:04,840 >> Hierna ook dit licht verschillend, maar ook zeer krachtig 1309 01:01:04,840 --> 01:01:05,690 deze dagen. 1310 01:01:05,690 --> 01:01:08,780 Hier is een array, en ik weet dat, omdat er is een vierkant haakje omhoog 1311 01:01:08,780 --> 01:01:11,090 top en een vierkant haakje onderaan. 1312 01:01:11,090 --> 01:01:16,050 En dit is een array van welke gegevens Typ blijkbaar in JavaScript? 1313 01:01:16,050 --> 01:01:21,260 Dit is een reeks lijkt als drie objecten. 1314 01:01:21,260 --> 01:01:24,580 En ik weet dat het een object alleen vanwege de accolades. 1315 01:01:24,580 --> 01:01:28,760 En merkt dat er geopend accolade, wat spullen, sluit accolade, komma, 1316 01:01:28,760 --> 01:01:31,180 dan nog wat meer, komma, en dan nog wat meer. 1317 01:01:31,180 --> 01:01:33,800 Dus dat is drie argumenten gescheiden door twee komma. 1318 01:01:33,800 --> 01:01:36,810 >> Dus dit is een serie van drie objecten. 1319 01:01:36,810 --> 01:01:39,940 En elk van deze objecten lijkt een student of medewerker van een aantal 1320 01:01:39,940 --> 01:01:42,370 sorteren, elk met een ID, huis, en de naam. 1321 01:01:42,370 --> 01:01:45,060 Maar ik heb dit iets genaamd riep JSON - 1322 01:01:45,060 --> 01:01:47,450 JavaScript Object Notation. 1323 01:01:47,450 --> 01:01:52,060 Dit is een dataformaat dat daadwerkelijk is dus erg populair en in 1324 01:01:52,060 --> 01:01:55,100 mode deze dagen dat als je een schrijven toepassing die gebruik maakt van de Facebook- 1325 01:01:55,100 --> 01:01:59,150 API, de Twitter API, echt bijna elke API die er deze dagen, 1326 01:01:59,150 --> 01:02:02,820 waaronder een aantal van CS50's eigen, het gegevens je terug is niet in 1327 01:02:02,820 --> 01:02:04,720 oude school CSV-formaat. 1328 01:02:04,720 --> 01:02:06,780 >> Omdat herinneren dat CSV is super eenvoudig. 1329 01:02:06,780 --> 01:02:10,230 Het is gewoon kolommen gescheiden door komma's. 1330 01:02:10,230 --> 01:02:13,190 JSON data geeft je meer metadata. 1331 01:02:13,190 --> 01:02:17,800 Het associeert een sleutel bij elke waarde zo zij niet gewoon aannemen dat 1332 01:02:17,800 --> 01:02:22,460 de kolom nulde een waarde kolom is een andere, tweede kolom is een andere. 1333 01:02:22,460 --> 01:02:26,790 Alles in een JSON object hier is een soort van zichzelf beschrijven, omdat elke 1334 01:02:26,790 --> 01:02:30,940 een van de namen in dit dossier heeft letterlijk naam in de voorkant van het als een 1335 01:02:30,940 --> 01:02:32,510 tekenreeks tussen aanhalingstekens. 1336 01:02:32,510 --> 01:02:34,950 >> Dus laten we eens een kijkje nemen op een paar voorbeelden hier. 1337 01:02:34,950 --> 01:02:36,800 Laat me gaan in het apparaat. 1338 01:02:36,800 --> 01:02:41,000 En laat me gaan in onze vhost directory in het openbaar. 1339 01:02:41,000 --> 01:02:45,590 En laat me gaan in het JavaScript directory. 1340 01:02:45,590 --> 01:02:49,610 En laten we verder gaan en open te stellen dom-0.html, waar DOM betekent alleen 1341 01:02:49,610 --> 01:02:51,010 document object model. 1342 01:02:51,010 --> 01:02:53,490 Het is de boom spul waarnaar Ik verwees naar eerder. 1343 01:02:53,490 --> 01:02:54,950 >> En laat ik het volgende voor te stellen. 1344 01:02:54,950 --> 01:02:57,720 Hier is een webpagina waarvan lichaam is vrij eenvoudig. 1345 01:02:57,720 --> 01:03:00,170 Dus hier beneden op de bodem, merkt Ik heb een formulier. 1346 01:03:00,170 --> 01:03:01,500 We hebben deze eerder gezien. 1347 01:03:01,500 --> 01:03:07,600 Het heeft twee ingangen, waarvan er een ID van naam, waarvan er een soort 1348 01:03:07,600 --> 01:03:09,830 indienen, en de eerste iemands type is tekst. 1349 01:03:09,830 --> 01:03:11,900 Dus dit klinkt eigenlijk vrij simpel. 1350 01:03:11,900 --> 01:03:13,090 >> Laten we gaan hier. 1351 01:03:13,090 --> 01:03:15,390 Laten we terug gaan naar deze pagina hier. 1352 01:03:15,390 --> 01:03:21,030 Laten we naar localhost, en ga in onze JavaScript directory, en ga naar 1353 01:03:21,030 --> 01:03:24,640 dom-0, en hier hebben we dit formulier. 1354 01:03:24,640 --> 01:03:26,550 Dus dat is blijkbaar al deze pagina doet. 1355 01:03:26,550 --> 01:03:28,740 Het heeft een naam veld met een knop Verzenden. 1356 01:03:28,740 --> 01:03:30,340 Maar ik ben niet van plan om PHP te gebruiken hier. 1357 01:03:30,340 --> 01:03:34,310 Ik ga alles client side doen dus in JavaScript te spreken als volgt. 1358 01:03:34,310 --> 01:03:39,100 >> Merk op dat ik inderdaad heb de naam gebied van deze ingang een unieke 1359 01:03:39,100 --> 01:03:42,350 identifier, die ook daadwerkelijk bespaart me wat tijd in een moment. 1360 01:03:42,350 --> 01:03:45,480 En zie ik heb een andere label geïntroduceerd in het hoofd van mijn webpagina, de 1361 01:03:45,480 --> 01:03:46,565  tag. 1362 01:03:46,565 --> 01:03:50,120 >> Dus het is in deze zin dat JavaScript is een client-side programmeertaal. 1363 01:03:50,120 --> 01:03:55,020 In dit geval, net als CSS, heb ik het rechtstreeks binnenkant van mijn HTML. 1364 01:03:55,020 --> 01:03:58,810 Maar merk ik heb een functie gedeclareerd dat zoals PHP ziet er een beetje 1365 01:03:58,810 --> 01:04:01,530 syntactisch, maar dit is eigenlijk JavaScript, want nogmaals, het is 1366 01:04:01,530 --> 01:04:03,920 client-side in de browser. 1367 01:04:03,920 --> 01:04:07,590 En neem een ​​raden wat dit gaat doen, hoewel sommige van de syntax 1368 01:04:07,590 --> 01:04:09,338 hier is nieuw. 1369 01:04:09,338 --> 01:04:11,760 >> PUBLIEK: Zeg hallo tegen wie. 1370 01:04:11,760 --> 01:04:14,020 >> DAVID Malan: Het gaat om gedag te zeggen naar wie bezoekt deze pagina. 1371 01:04:14,020 --> 01:04:15,120 Ja, hoe? 1372 01:04:15,120 --> 01:04:18,070 >> Dus aankondiging, het blijkt in JavaScript er is een waarschuwing ()-functie. 1373 01:04:18,070 --> 01:04:22,840 Dit is een zeer soort van verdrietig functie die echt gewoon de neiging om gebruikers te ergeren. 1374 01:04:22,840 --> 01:04:25,440 Het is niet een moet je echt gebruiken typisch, maar het is een snelle en vuile 1375 01:04:25,440 --> 01:04:27,710 manier van het soort afdrukken iets een grafische gebruikersinterface 1376 01:04:27,710 --> 01:04:29,180 interface als een browser. 1377 01:04:29,180 --> 01:04:31,400 Let hier op dat ik heb een tekenreeks in enkele aanhalingstekens. 1378 01:04:31,400 --> 01:04:36,010 Het blijkt dat in tegenstelling tot C, JavaScript kan eigenlijk heb je enkel gebruiken 1379 01:04:36,010 --> 01:04:38,730 citaten, en eerlijk gezegd is het gewoon een soort van de stilistische conventie onder 1380 01:04:38,730 --> 01:04:41,180 JavaScript programmeurs om enkele aanhalingstekens te gebruiken. 1381 01:04:41,180 --> 01:04:43,750 PHP, ze eigenlijk hebben iets andere betekenis. 1382 01:04:43,750 --> 01:04:45,810 Maar voor nu, weet alleen dat dat is de enige reden. 1383 01:04:45,810 --> 01:04:49,270 De conventie in JavaScript is vaak te Gebruik enkele aanhalingstekens, maar we konden gebruiken 1384 01:04:49,270 --> 01:04:50,950 dubbele aanhalingstekens in beide plaatsen ook. 1385 01:04:50,950 --> 01:04:52,610 >> Dit is zo interessant. 1386 01:04:52,610 --> 01:04:56,430 Recall laatste keer dat we dat hadden beeld op het scherm, dat een boom trok 1387 01:04:56,430 --> 01:04:59,720 waar u de HTML-knooppunt, en het had hoofdnode, en het lichaam knooppunt, 1388 01:04:59,720 --> 01:05:00,800 en dan wat tekst. 1389 01:05:00,800 --> 01:05:04,700 Maar er was een speciale knooppunt op de top dat ik het document genoemd. 1390 01:05:04,700 --> 01:05:08,260 Nou, het blijkt in JavaScript, elke wanneer u een programma in JavaScript schrijven 1391 01:05:08,260 --> 01:05:11,040 in een browser, hebt u toegang tot een speciale globale variabele. 1392 01:05:11,040 --> 01:05:14,130 In dezelfde geest te superglobals PHP, dit wordt genoemd in 1393 01:05:14,130 --> 01:05:16,050 alle kleine letters document. 1394 01:05:16,050 --> 01:05:21,480 >> Het is als een structuur, maar dit struct ondersteunt ook erin. 1395 01:05:21,480 --> 01:05:23,790 Dus een C struct heeft gewoon data typisch. 1396 01:05:23,790 --> 01:05:29,060 Maar een JavaScript-object als dit technisch gezien is heeft ook functies, 1397 01:05:29,060 --> 01:05:31,830 ook wel bekend als werkwijzen, erin. 1398 01:05:31,830 --> 01:05:35,750 En je kunt een functie bellen binnenkant van Dit object letterlijk doet haar 1399 01:05:35,750 --> 01:05:39,610 naam, dot, en vervolgens de naam van de functie of opnieuw methode. 1400 01:05:39,610 --> 01:05:41,160 Het is gewoon een synoniem, echt. 1401 01:05:41,160 --> 01:05:42,450 >> En wat betekent deze functie te doen? 1402 01:05:42,450 --> 01:05:43,840 Je kan soort van gok van zijn naam. 1403 01:05:43,840 --> 01:05:45,590 Get element door ID. 1404 01:05:45,590 --> 01:05:50,040 Dus dit gaat om de webpagina te zoeken, zoeken die boom, op zoek naar 1405 01:05:50,040 --> 01:05:55,210 wat knooppunt, AKA element, heeft een unieke ID van citaat unquote naam. 1406 01:05:55,210 --> 01:05:56,560 En wat ga ik doen? 1407 01:05:56,560 --> 01:06:00,350 Ik ga naar de waarde te krijgen binnenkant van die knoop in de boom, en ik ga 1408 01:06:00,350 --> 01:06:02,580 om een ​​of andere manier hallo te zeggen tegen die naam. 1409 01:06:02,580 --> 01:06:05,360 >> Dus neem een ​​gok, hoewel we hebben niet toch is dit gezien, wat doet de plus 1410 01:06:05,360 --> 01:06:07,396 symbolen betekenen hier en hier waarschijnlijk? 1411 01:06:07,396 --> 01:06:08,230 >> PUBLIEK: Aaneenschakelen. 1412 01:06:08,230 --> 01:06:09,220 >> DAVID Malan: Concatenate. 1413 01:06:09,220 --> 01:06:11,290 Recht, en dit zijn slechts soort van ontwerp beslissingen 1414 01:06:11,290 --> 01:06:12,280 mensen maakten jaren geleden. 1415 01:06:12,280 --> 01:06:15,190 In PHP, je aaneenschakelen dingen met stippen. 1416 01:06:15,190 --> 01:06:18,800 In C, je springen door een aantal hoepels en noemen functies zoals strcopy () of 1417 01:06:18,800 --> 01:06:20,600 strcat () of andere dergelijke activiteiten. 1418 01:06:20,600 --> 01:06:22,060 Maar in JavaScript, plussen gebruikt u. 1419 01:06:22,060 --> 01:06:24,770 Dus dit is gewoon het aaneenschakelen drie snaren - 1420 01:06:24,770 --> 01:06:27,850 hello, een naam, en vervolgens een uitroepteken. 1421 01:06:27,850 --> 01:06:30,390 >> Dus wanneer en waarom is deze functie al genoemd? 1422 01:06:30,390 --> 01:06:33,150 Nou, neem een ​​gok van de HTML onderaan. 1423 01:06:33,150 --> 01:06:35,810 Waarom is greet () aangeroepen, of wanneer? 1424 01:06:35,810 --> 01:06:39,730 1425 01:06:39,730 --> 01:06:44,030 >> Blijkbaar, zo goed als ik kan vertellen, op indienen, wanneer dit formulier wordt ingediend, 1426 01:06:44,030 --> 01:06:47,200 Ik ga doen wat binnenkant van deze citaten. 1427 01:06:47,200 --> 01:06:50,900 En in het bijzonder, ik ga bellen greet () en vervolgens return false. 1428 01:06:50,900 --> 01:06:53,090 >> Nou, laten we zien wat de netto effect is hier eerste. 1429 01:06:53,090 --> 01:06:58,290 Dus laat me gaan en typ in, zeg, Loren, Indienen. 1430 01:06:58,290 --> 01:06:59,440 Hallo Loren. 1431 01:06:59,440 --> 01:07:02,990 Eens kijken of misschien was dit gewoon een gelukkige implementatie. 1432 01:07:02,990 --> 01:07:03,200 Nope. 1433 01:07:03,200 --> 01:07:05,990 Dus het is het typen van wat noem ik eigenlijk daar te zetten. 1434 01:07:05,990 --> 01:07:07,970 >> Maar let op wat er niet verandert. 1435 01:07:07,970 --> 01:07:10,360 De URL is nog steeds dom-0.html. 1436 01:07:10,360 --> 01:07:11,820 Er is geen register.php. 1437 01:07:11,820 --> 01:07:13,110 Er is geen tweede bestand. 1438 01:07:13,110 --> 01:07:14,930 Er is geen attribuut actie. 1439 01:07:14,930 --> 01:07:19,720 Dus wat is deze terugkeer vals vermoedelijk aan het doen? 1440 01:07:19,720 --> 01:07:23,660 Daarom roep ik begroeten () en vervolgens terugkerende valse waarschijnlijk? 1441 01:07:23,660 --> 01:07:26,420 Wat gebeurt normaal wanneer u op Dienen over een vorm die zelfs wij hebben 1442 01:07:26,420 --> 01:07:27,854 gezien in de afgelopen week? 1443 01:07:27,854 --> 01:07:29,900 >> PUBLIEK: [onverstaanbaar]. 1444 01:07:29,900 --> 01:07:30,860 >> DAVID Malan: Het gaat ergens, toch? 1445 01:07:30,860 --> 01:07:32,720 Het gaat om een ​​aantal bestemmings-URL. 1446 01:07:32,720 --> 01:07:34,120 Maar ik denk niet dat dat hier gebeurt. 1447 01:07:34,120 --> 01:07:37,620 Ik wil mijn website volledig te zijn dynamische zoals Gmail, waar als je eenmaal bent 1448 01:07:37,620 --> 01:07:38,650 daar, blijf daar. 1449 01:07:38,650 --> 01:07:42,900 De URL niet zodanig veranderen dat geeft aan dat de hele pagina wordt herladen. 1450 01:07:42,900 --> 01:07:46,680 Integendeel, ik wil gewoon om iets te veranderen zoals het afdrukken van iets 1451 01:07:46,680 --> 01:07:48,320 hier op het scherm. 1452 01:07:48,320 --> 01:07:49,630 >> Nou laat me deze schoon een klein beetje. 1453 01:07:49,630 --> 01:07:55,370 Laat me open te stellen niet dom-0, maar laat me openstellen dom-2. 1454 01:07:55,370 --> 01:07:57,350 Net dus je hebt wat syntaxis gezien hier. 1455 01:07:57,350 --> 01:08:02,080 >> Het blijkt dat wat we net heeft gebruikt rauw webbrowser. 1456 01:08:02,080 --> 01:08:04,420 Dus dit is echt de taal JavaScript. 1457 01:08:04,420 --> 01:08:07,340 Sommigen van u wellicht weet van een bibliotheek genaamd jQuery. 1458 01:08:07,340 --> 01:08:09,980 >> Dus jQuery is niet hetzelfde zoiets als webbrowser. 1459 01:08:09,980 --> 01:08:14,110 Het is gewoon een bibliotheek die een echt slim guy schreef en gepopulariseerd dergelijke 1460 01:08:14,110 --> 01:08:18,100 dat bijna iedereen in de wereld nu maakt gebruik van jQuery bij het gebruik van JavaScript. 1461 01:08:18,100 --> 01:08:20,890 En op het eerste gezicht, eerlijk gezegd, het ziet er een beetje meer cryptisch. 1462 01:08:20,890 --> 01:08:24,990 Maar je zult vinden, vooral als je gaat er voor uw afstudeerproject met web 1463 01:08:24,990 --> 01:08:29,029 ontwikkeling, vindt u dat deze reinigt dingen op en bespaart u heel 1464 01:08:29,029 --> 01:08:30,229 paar regels code. 1465 01:08:30,229 --> 01:08:33,189 >> Dus laten we gewoon een blik werpen op hoe deze vorm werkt. 1466 01:08:33,189 --> 01:08:35,664 Let op wat heb ik blijkbaar te verwijderen uit mijn HTML? 1467 01:08:35,664 --> 01:08:38,240 1468 01:08:38,240 --> 01:08:40,630 Er is geen op submit handler zo te zeggen. 1469 01:08:40,630 --> 01:08:41,470 Er is geen attribuut. 1470 01:08:41,470 --> 01:08:43,359 Omdat je weet, wat Ik heb niet echt vinden? 1471 01:08:43,359 --> 01:08:45,640 Ik voelde alsof we vielen in oude gewoonten daar. 1472 01:08:45,640 --> 01:08:49,340 Net zoals het begon te slordig voelen zowel CSS vermengen met 1473 01:08:49,340 --> 01:08:52,149 HTML, omdat je soort gooien verschillende talen over de hele 1474 01:08:52,149 --> 01:08:56,180 plaats, zo ook is dit begonnen te voelen als een slechte weg naar beneden te gaan waar 1475 01:08:56,180 --> 01:09:01,069 Ik zet JavaScript-code binnenkant van mijn HTML in plaats van factoring het uit. 1476 01:09:01,069 --> 01:09:02,279 >> Dus dat is de les hier. 1477 01:09:02,279 --> 01:09:05,080 In dom-2.html, ik factoring het uit. 1478 01:09:05,080 --> 01:09:07,399 En ik dingen iets doen anders. 1479 01:09:07,399 --> 01:09:09,630 Voor nu, ga ik mijn handen zwaaien op wat dit werkelijk doet 1480 01:09:09,630 --> 01:09:10,590 onder de motorkap. 1481 01:09:10,590 --> 01:09:14,210 Maar alleen voor nu aannemen dat die eerste regel code in deze bibliotheek 1482 01:09:14,210 --> 01:09:18,170 genaamd jQuery betekent alleen wanneer de document klaar is, doe het volgende. 1483 01:09:18,170 --> 01:09:20,080 >> Omdat webpagina's kan nemen wat tijd om te laden. 1484 01:09:20,080 --> 01:09:23,029 Je zou op een trage internet verbinding, en het zou spinnen 1485 01:09:23,029 --> 01:09:25,290 en spinnen, en tenslotte het is geladen. 1486 01:09:25,290 --> 01:09:29,060 Dat regel code zegt enkel wachten tot de hele pagina klaar is, wordt het document 1487 01:09:29,060 --> 01:09:31,189 is klaar, voor het uitvoeren van deze code. 1488 01:09:31,189 --> 01:09:34,390 >> En let nu op, dit is waarschijnlijk de meest nuttige eerste 1489 01:09:34,390 --> 01:09:36,189 weg te nemen van jQuery. 1490 01:09:36,189 --> 01:09:42,140 Deze lijn is hier zeer vergelijkbaar in de geest om deze veel langere lijn hier. 1491 01:09:42,140 --> 01:09:46,920 Terwijl in ruwe JavaScript-code, er Er bestaat een document globale object dat 1492 01:09:46,920 --> 01:09:50,460 heeft een functie genaamd getElementById () de mensen die schreef 1493 01:09:50,460 --> 01:09:55,720 jQuery vereenvoudigd dat om gewoon te zeggen dollarteken, en dan de binnenkant van 1494 01:09:55,720 --> 01:10:00,250 haakjes zet twee citaten, en vervolgens zet een hekje gevolgd door de 1495 01:10:00,250 --> 01:10:02,250 unieke ID dat u wilt grijpen. 1496 01:10:02,250 --> 01:10:06,170 Dus dit is gelijk aan document.getElementById. 1497 01:10:06,170 --> 01:10:11,090 >> Ondertussen. Indienen betekent gewoon op indiening van welke vorm je bent 1498 01:10:11,090 --> 01:10:14,240 verwijzend naar links, ga vooruit en voer dit. 1499 01:10:14,240 --> 01:10:16,600 Maar dit is nu de nieuwsgierigheid ook. 1500 01:10:16,600 --> 01:10:19,560 Wat is er raar over wat Ik heb hier uitgelicht? 1501 01:10:19,560 --> 01:10:23,840 1502 01:10:23,840 --> 01:10:28,594 Niet alleen is het soort syntactisch nieuw, er is ook iets ontbreekt. 1503 01:10:28,594 --> 01:10:29,558 >> Publiek: Het is gewoon aangeroepen functie? 1504 01:10:29,558 --> 01:10:31,970 Het is niet alert genoemd? 1505 01:10:31,970 --> 01:10:32,440 >> DAVID Malan: Yeah. 1506 01:10:32,440 --> 01:10:35,450 Nou, dus alert () is down hier, om eerlijk te zijn. 1507 01:10:35,450 --> 01:10:39,520 Maar er is geen sprake van een naam, zoals u weet, foo of 1508 01:10:39,520 --> 01:10:40,980 iets hier. 1509 01:10:40,980 --> 01:10:43,830 Inderdaad is dit een van de functies van JavaScript dat is heel 1510 01:10:43,830 --> 01:10:45,370 krachtig, maar ook vrij nieuw. 1511 01:10:45,370 --> 01:10:47,460 En PHP heeft eigenlijk dit ook. 1512 01:10:47,460 --> 01:10:49,500 >> Laat me ga je gang en doen iets echt snel. 1513 01:10:49,500 --> 01:10:52,030 Laat me ga je gang en zet deze hier. 1514 01:10:52,030 --> 01:10:52,600 Laat mij dit doen. 1515 01:10:52,600 --> 01:10:53,690 Functie. 1516 01:10:53,690 --> 01:10:56,455 We noemen deze handler (). 1517 01:10:56,455 --> 01:10:58,290 Een handler functie zo te zeggen. 1518 01:10:58,290 --> 01:11:00,110 Iets dat sommige bediening omgaat. 1519 01:11:00,110 --> 01:11:02,700 Laat me opruimen mijn inspringen. 1520 01:11:02,700 --> 01:11:04,380 En zet deze hier. 1521 01:11:04,380 --> 01:11:06,090 En we deze hier. 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 >> Dus nu heb ik een functie genaamd handler () dat ik niet echt weet 1525 01:11:10,300 --> 01:11:10,890 maar wat het doet. 1526 01:11:10,890 --> 01:11:12,710 Het moet alleen nog dat spul. 1527 01:11:12,710 --> 01:11:13,900 Whoops. 1528 01:11:13,900 --> 01:11:15,820 Nam te veel. 1529 01:11:15,820 --> 01:11:18,490 Laten we dit doen. 1530 01:11:18,490 --> 01:11:18,990 Oke. 1531 01:11:18,990 --> 01:11:20,240 Sorry. 1532 01:11:20,240 --> 01:11:23,140 1533 01:11:23,140 --> 01:11:23,690 Oke. 1534 01:11:23,690 --> 01:11:24,720 Laat mij dit doen. 1535 01:11:24,720 --> 01:11:25,020 OK. 1536 01:11:25,020 --> 01:11:27,040 Dat ziet er mooi recht vooruit nu. 1537 01:11:27,040 --> 01:11:29,090 Laat mij dit doen. 1538 01:11:29,090 --> 01:11:29,860 Doe dit. 1539 01:11:29,860 --> 01:11:30,950 En OK. 1540 01:11:30,950 --> 01:11:33,080 Dus nu, laten we dit dan hier. 1541 01:11:33,080 --> 01:11:35,840 1542 01:11:35,840 --> 01:11:37,270 Nooit meer de programmering op de vlieg. 1543 01:11:37,270 --> 01:11:37,900 OK. 1544 01:11:37,900 --> 01:11:40,000 >> Dus nu, laten we terug gaan naar waar het verhaal begon. 1545 01:11:40,000 --> 01:11:43,530 Eerder heb ik gezegd dat deze lijn hier betekent dat wanneer het document klaar is, gaat 1546 01:11:43,530 --> 01:11:44,380 gang en dit te doen. 1547 01:11:44,380 --> 01:11:45,660 Wat wil ik doen? 1548 01:11:45,660 --> 01:11:49,070 Wel bijzonder, ik wil gaan gang en doe het volgende. 1549 01:11:49,070 --> 01:11:53,700 Voer deze regel code, en vervolgens wat ik wil dat je doet is roepen dit 1550 01:11:53,700 --> 01:11:56,370 werken wanneer het formulier wordt ingediend. 1551 01:11:56,370 --> 01:11:57,730 >> Nu is dit wat interessant. 1552 01:11:57,730 --> 01:11:59,170 Dit is op zichzelf geen functie. 1553 01:11:59,170 --> 01:12:02,540 Let op, ik ben niet tussen haakjes zetten Hier op de normale manier. 1554 01:12:02,540 --> 01:12:06,800 Ik ben letterlijk het passeren van een functie genaamd handler () naar een andere functie 1555 01:12:06,800 --> 01:12:10,800 genaamd submit () als argument als al is het als een variabele. 1556 01:12:10,800 --> 01:12:14,290 En dit is een van de kenmerken van JavaScript is functies zelf 1557 01:12:14,290 --> 01:12:15,710 zijn eigenlijk alleen maar objecten. 1558 01:12:15,710 --> 01:12:18,350 In feite, ze zijn echt gewoon variabelen van een soort. 1559 01:12:18,350 --> 01:12:21,340 En als de naam van de functie is handler (), is er geen reden kan ik niet 1560 01:12:21,340 --> 01:12:23,390 doorgeven in als argument hier. 1561 01:12:23,390 --> 01:12:27,530 En dit betekent dat wanneer de vorm met de ID van de demo is 1562 01:12:27,530 --> 01:12:29,320 ingediend, noemen deze functie. 1563 01:12:29,320 --> 01:12:32,770 >> Maar als ik nu ongedaan dit alles, waarom dan heb ik misschien doen 1564 01:12:32,770 --> 01:12:34,850 dit een ogenblik geleden? 1565 01:12:34,850 --> 01:12:36,840 Nou, dit is een anonieme functie. 1566 01:12:36,840 --> 01:12:41,080 Want eerlijk gezegd, besefte ik waarom ben ik lastig om tijd te verspillen waarbij een 1567 01:12:41,080 --> 01:12:45,540 functie genaamd handler () alleen om te bellen het in een en slechts een plek? 1568 01:12:45,540 --> 01:12:48,640 Als ik niet de naam nodig, en ik doe niet nodig om het meer dan een plaats, bel 1569 01:12:48,640 --> 01:12:51,200 laten we gewoon de uitvoering van de functie precies waar ik het nodig heb. 1570 01:12:51,200 --> 01:12:55,190 En zo is JavaScript en PHP-ondersteuning wat worden anoniem functies genoemd die 1571 01:12:55,190 --> 01:12:57,900 staat u mij toe dat hier precies doen. 1572 01:12:57,900 --> 01:12:59,570 >> Maar we zijn gewoon krassen op het oppervlak. 1573 01:12:59,570 --> 01:13:02,430 Laten we plagen met slechts een paar laatste voorbeelden hier. 1574 01:13:02,430 --> 01:13:04,600 >> Als ik in quote.php. 1575 01:13:04,600 --> 01:13:07,160 1576 01:13:07,160 --> 01:13:11,870 Merk op dat dit eigenlijk een PHP functie, een PHP-programma, dat ik schreef 1577 01:13:11,870 --> 01:13:15,270 dat een HTTP parameter genaamd verwacht symbool, en ik kan passeren 1578 01:13:15,270 --> 01:13:16,730 een waarde als FB. 1579 01:13:16,730 --> 01:13:20,010 En als we daadwerkelijk kijken naar de bron code, dit is het bevragen van een gratis website 1580 01:13:20,010 --> 01:13:23,680 genaamd Yahoo Finance, net als p-set zeven, en het is terug te keren naar mij 1581 01:13:23,680 --> 01:13:26,580 iets in blijkbaar de formaat dat bekend is JSON - 1582 01:13:26,580 --> 01:13:28,010 JavaScript Object Notation. 1583 01:13:28,010 --> 01:13:28,810 Het is gewoon een object. 1584 01:13:28,810 --> 01:13:32,500 Let op de accolades, de citaten, de dikke darm, en de komma's. 1585 01:13:32,500 --> 01:13:34,720 >> Nu ondertussen, dit is wel cool. 1586 01:13:34,720 --> 01:13:38,520 Want ik kan waarschijnlijk gebruik maken van een programmering taal om URL's te genereren 1587 01:13:38,520 --> 01:13:40,370 die er uitzien als deze dynamisch, toch? 1588 01:13:40,370 --> 01:13:43,340 Ik kan dit veranderen in Google en weer terug van Google 1589 01:13:43,340 --> 01:13:47,930 beurskoers van $ 1,017.55. 1590 01:13:47,930 --> 01:13:49,640 Dus laten we kijken of we nu niet kunnen gebruiken deze. 1591 01:13:49,640 --> 01:13:56,590 >> Laat me gaan naar ajax-0 hier, die ziet er als volgt uit. 1592 01:13:56,590 --> 01:13:59,750 Het is gewoon een website die heeft een formulier met een knop. 1593 01:13:59,750 --> 01:14:05,860 Laat me hier verder te gaan en typ in YHOO voor Yahoo's aandelen symbool, klik op Get 1594 01:14:05,860 --> 01:14:10,530 Citaat, en nu merk ik heb gekregen een waarschuwing met 32.86. 1595 01:14:10,530 --> 01:14:14,050 >> Laat me eigenlijk naar een liefhebber versie van deze pagina, versie twee, en 1596 01:14:14,050 --> 01:14:17,530 typ in pakweg Microsoft, MSFT. 1597 01:14:17,530 --> 01:14:18,410 Offerte aanvragen. 1598 01:14:18,410 --> 01:14:19,850 En let nu op, geen waarschuwing. 1599 01:14:19,850 --> 01:14:22,770 Let op waar het zegt prijs worden bepaald? 1600 01:14:22,770 --> 01:14:27,060 Er is de eenvoudigste voorbeelden die hints naar wat Gchat en Facebook 1601 01:14:27,060 --> 01:14:30,070 Chatten, en Gmail, en andere dergelijke websites aan het doen zijn door daadwerkelijk 1602 01:14:30,070 --> 01:14:31,290 het veranderen van de webpagina. 1603 01:14:31,290 --> 01:14:31,800 >> Merken dit. 1604 01:14:31,800 --> 01:14:33,120 Laat ik de pagina geladen is. 1605 01:14:33,120 --> 01:14:35,080 Laat me openstellen Chrome's Inspector. 1606 01:14:35,080 --> 01:14:36,890 Laat me gaan naar de elementen tabblad hier beneden. 1607 01:14:36,890 --> 01:14:42,310 Nu merken als ik inzoomen hier beneden en open deze up, merken dat dit mijn 1608 01:14:42,310 --> 01:14:44,500 HTML DOM - mijn document object model. 1609 01:14:44,500 --> 01:14:45,920 Dit is mijn HTML. 1610 01:14:45,920 --> 01:14:48,750 Maar let nu op, ook al gaat om een ​​beetje moeilijk om het te zien in beide 1611 01:14:48,750 --> 01:14:52,080 plaatsen tegelijk, als ik typ in FB hier, kijk naar de bodem 1612 01:14:52,080 --> 01:14:54,110 van het scherm alleen. 1613 01:14:54,110 --> 01:14:57,720 >> Het is eigenlijk het veranderen mijn HTML on the fly. 1614 01:14:57,720 --> 01:15:01,670 En het doet dit heel eenvoudig door zoiets als dit te doen. 1615 01:15:01,670 --> 01:15:06,800 Als ik open ajax-2, merkt uitvoering iets zo sexy als 1616 01:15:06,800 --> 01:15:09,560 dat, ook al is het vrij lelijk, maar zo geavanceerd als die 1617 01:15:09,560 --> 01:15:11,910 functioneel, het heeft een aantal HTML onderaan. 1618 01:15:11,910 --> 01:15:13,810 Maar merk ik gebruikt om te taggen. 1619 01:15:13,810 --> 01:15:16,640 We hebben dit niet eerder gebruikt, maar dit is als een, maar dwingt 1620 01:15:16,640 --> 01:15:17,840 alles op een nieuwe regel. 1621 01:15:17,840 --> 01:15:20,830 Het is gewoon een rechthoekig gebied op dezelfde lijn wezen. 1622 01:15:20,830 --> 01:15:22,870 >> Merk op dat ik gaf het een ID van de prijs. 1623 01:15:22,870 --> 01:15:26,800 Het blijkt met dezelfde JavaScript-bibliotheek, ik heb een functie 1624 01:15:26,800 --> 01:15:30,440 riep citaat () dat heet wanneer het formulier is verzonden. 1625 01:15:30,440 --> 01:15:31,800 En wat ik doe is het volgende. 1626 01:15:31,800 --> 01:15:35,730 Ik ben declareren van een variabele in JavaScript riep url, het opslaan van de waarde 1627 01:15:35,730 --> 01:15:38,650 quote.php? symbool =. 1628 01:15:38,650 --> 01:15:44,220 Met andere woorden, ik ben mezelf beginnen om een ​​HTTP-verzoek voor te bereiden, en vervolgens 1629 01:15:44,220 --> 01:15:49,250 Ik ben het aaneenschakelen op dat met een plus ongeacht het element met ID 1630 01:15:49,250 --> 01:15:54,190 van het symbool is, wat opvalt is dat tekstveld recht naar beneden hier. 1631 01:15:54,190 --> 01:15:56,630 Dus net zoals we hadden vormen in het verleden. 1632 01:15:56,630 --> 01:16:01,450 >> En dan blijkt in jQuery, als je bellen. val (), die oproept van een val 1633 01:16:01,450 --> 01:16:05,900 functie een waarde functie, die wordt wat de gebruiker heeft getypt inch 1634 01:16:05,900 --> 01:16:08,920 En vervolgens alle netwerkverkeer dat gebeurt is het volgende. 1635 01:16:08,920 --> 01:16:11,230 $. GetJSON. 1636 01:16:11,230 --> 01:16:13,720 >> En als een terzijde, dollarteken is slechts een verkorte schrijfwijze. 1637 01:16:13,720 --> 01:16:16,860 Het is echt jQuery.getJSON. 1638 01:16:16,860 --> 01:16:21,520 Breng me naar JSON van deze URL, en wanneer het verzoek komt terug, noemen dit 1639 01:16:21,520 --> 01:16:26,550 functie en pas in als argument wat terug van de server kwam. 1640 01:16:26,550 --> 01:16:31,205 >> Dus met andere woorden, als ik terug naar de browser, en ik ga terug naar quote.php, 1641 01:16:31,205 --> 01:16:35,590 wat mijn browser doet is steeds dit stuk van gegevens. 1642 01:16:35,590 --> 01:16:38,930 En als ik naar deze webpagina hier, merken als we in plaats daarvan naar het netwerk 1643 01:16:38,930 --> 01:16:43,820 tab en verwijder het, en typ vervolgens in iets als GOOG voor Google en Get 1644 01:16:43,820 --> 01:16:46,340 Citaat, let op de pagina niet veranderen. 1645 01:16:46,340 --> 01:16:50,990 Maar een HTTP-verzoek is gedaan, en wat kwam hier terug als we kijken naar de 1646 01:16:50,990 --> 01:16:56,130 antwoord is een hele hoop van JSON we toegang tenslotte met 1647 01:16:56,130 --> 01:16:58,070 deze eenvoudige lijn hier. 1648 01:16:58,070 --> 01:17:00,150 >> Data is wat gekregen van de server. 1649 01:17:00,150 --> 01:17:02,120 De prijs is de naam van de sleutel waar ik om geef. 1650 01:17:02,120 --> 01:17:05,230 Dus data.price geeft me dat. 1651 01:17:05,230 --> 01:17:07,540 >> Nu ondertussen en deze is het laatste voorbeeld. 1652 01:17:07,540 --> 01:17:09,280 Nog meer je kunt doen met de pagina. 1653 01:17:09,280 --> 01:17:12,440 Men eigenlijk, goed twee. 1654 01:17:12,440 --> 01:17:14,780 We kunnen terug te brengen van de taggen, als je dit onthouden. 1655 01:17:14,780 --> 01:17:15,850 Dat is webbrowser. 1656 01:17:15,850 --> 01:17:17,110 We kunnen dat doen. 1657 01:17:17,110 --> 01:17:17,690 Erg spannend. 1658 01:17:17,690 --> 01:17:18,800 We vertrekken die als een cliffhanger. 1659 01:17:18,800 --> 01:17:21,590 >> Maar meer spannende, kunt u dit soort dingen doen. 1660 01:17:21,590 --> 01:17:25,940 Als ik naar geolocatie-1, het blijkt dat Chrome weet dat we op 1661 01:17:25,940 --> 01:17:30,672 breedte lengte 42.37. -71,10. 1662 01:17:30,672 --> 01:17:32,940 Dus er is nog meer daar tot uw beschikking. 1663 01:17:32,940 --> 01:17:34,290 Maar meer daarover volgende week. 1664 01:17:34,290 --> 01:17:35,540 Ik zie je maandag. 1665 01:17:35,540 --> 01:17:37,558