1 00:00:00,000 --> 00:00:11,330 2 00:00:11,330 --> 00:00:12,360 >> David Malan: Alle reg. 3 00:00:12,360 --> 00:00:15,970 Dit is CS50, en dit is die einde van die week nege. 4 00:00:15,970 --> 00:00:18,560 Dit was 'n warrelwind oor die afgelope paar dae. 5 00:00:18,560 --> 00:00:21,580 En die sewe probleem, as jy knie diep in dit, besef daar is nogal 'n 6 00:00:21,580 --> 00:00:23,340 bietjie nuwe dis daar. 7 00:00:23,340 --> 00:00:26,660 Maar laat ons kyk of ons nie kan stuk alles saam hier kortliks 8 00:00:26,660 --> 00:00:29,230 voor dan ruimend af in nog 'n ander rigting en sien 9 00:00:29,230 --> 00:00:30,510 Waar anders kan ons gaan. 10 00:00:30,510 --> 00:00:32,630 >> So tot dusver, het ons gepraat het oor HTML. 11 00:00:32,630 --> 00:00:33,740 Ons het gepraat oor CSS. 12 00:00:33,740 --> 00:00:34,705 Ons het gepraat oor PHP. 13 00:00:34,705 --> 00:00:36,520 Jy het begin SQL te ervaar. 14 00:00:36,520 --> 00:00:38,360 Vandag, sal ons 'n bietjie gesels oor JavaScript. 15 00:00:38,360 --> 00:00:41,230 Maar hoe doen al hierdie uiteenlopende tale inmekaar? 16 00:00:41,230 --> 00:00:44,970 >> So het ons gepraat het verlede week oor die idee van 'n bediener. 17 00:00:44,970 --> 00:00:48,470 So laat ons trek net hierdie reghoek as 'n web bediener hier. 18 00:00:48,470 --> 00:00:52,200 En 'n web bediener dien sekerlik lêers. 19 00:00:52,200 --> 00:00:54,640 En sommige van die lêers kan HTML-lêers. 20 00:00:54,640 --> 00:00:58,270 So een van die dinge wat 'n web bediener kan spoeg kan 'n lêer wees dat 21 00:00:58,270 --> 00:01:01,290 ons sal net trek soos hierdie met 'n paar HTML. 22 00:01:01,290 --> 00:01:04,786 So in leketaal, wat beteken HTML laat doen? 23 00:01:04,786 --> 00:01:06,036 >> Publiek: Page kyk mooi. 24 00:01:06,036 --> 00:01:09,670 25 00:01:09,670 --> 00:01:12,310 >> David Malan: OK, maak 'n bladsy kyk mooi, Alhoewel ek dink ek het bewys 26 00:01:12,310 --> 00:01:13,370 wat andersins. 27 00:01:13,370 --> 00:01:18,250 So HTML nie laat lê bladsye struktureel, en dit laat jou te 28 00:01:18,250 --> 00:01:22,410 soort estetiese merk op 'n bladsy, merk op statiese inhoud, sodat jy 29 00:01:22,410 --> 00:01:23,640 kan dan sien dit met 'n webblaaier. 30 00:01:23,640 --> 00:01:24,690 >> Maar dit is die sleutel. 31 00:01:24,690 --> 00:01:26,130 Dit is statiese inhoud. 32 00:01:26,130 --> 00:01:28,590 Jy skryf nie, moet jy dit stoor, en dan kan jy die skip dit. 33 00:01:28,590 --> 00:01:31,130 En die web bediener dien dan dit is vir jou besoekers. 34 00:01:31,130 --> 00:01:35,700 >> Maar ons stileer dinge met behulp van 'n ander taal geheel en al. 35 00:01:35,700 --> 00:01:40,150 Ons het begin om 'n styl kenmerk te gebruik op sekere merkers. 36 00:01:40,150 --> 00:01:43,400 En die styl kenmerk laat ons dinge soos font grootte en kleur. 37 00:01:43,400 --> 00:01:46,460 En jy het waarskynlik begin om te ontdek, of jy sal gou vir finale 38 00:01:46,460 --> 00:01:50,160 projekte potensieel, maar ander eienskappe wat jy kan gebruik in CSS. 39 00:01:50,160 --> 00:01:54,710 En so in leketaal, wat werklik dan nie CSS doen? 40 00:01:54,710 --> 00:01:57,810 Dit is net voorbeelde daarvan. 41 00:01:57,810 --> 00:02:00,730 Wat beteken dit laat doen HTML Dit lyk nie of van wat 42 00:02:00,730 --> 00:02:02,606 Ons het tot dusver gesien het? 43 00:02:02,606 --> 00:02:04,850 >> Publiek: Definieer style deur jouself. 44 00:02:04,850 --> 00:02:06,700 >> David Malan: Definieer style deur jouself. 45 00:02:06,700 --> 00:02:10,280 So definieer dinge soos klasse as jy teëgekom het, of 'n unieke 46 00:02:10,280 --> 00:02:13,800 nodes identifiseer in 'n dokument, sodat wat jy kan stileer hulle. 47 00:02:13,800 --> 00:02:16,890 Maar meer spesifiek, sou ek sê dat CSS werklik kan jy dinge doen om die 48 00:02:16,890 --> 00:02:20,790 laaste myl en kan jy baie om te spesifiseer meer presies die estetika, 49 00:02:20,790 --> 00:02:24,340 terwyl HTML vir die grootste deel kan jy jou bladsye struktuur. 50 00:02:24,340 --> 00:02:27,310 >> En selfs al is daar 'n paar gebreke, soos ons gesien het die etiket vir 51 00:02:27,310 --> 00:02:30,690 'n opskrif tag, wat rofweg gesproke het dinge groot en vet. 52 00:02:30,690 --> 00:02:34,250 Dit is 'n mooi generiese definisie van die etiket - groot en vet. 53 00:02:34,250 --> 00:02:35,260 Wat lettergrootte is dit? 54 00:02:35,260 --> 00:02:36,080 Watter kleur is dit? 55 00:02:36,080 --> 00:02:36,890 Hoe vet is dit? 56 00:02:36,890 --> 00:02:39,830 En CSS kan jy fyner deuntjie dinge soos dat. 57 00:02:39,830 --> 00:02:42,150 Sowel as uitleg, soos sommige van julle het gesien. 58 00:02:42,150 --> 00:02:45,180 >> En eerlik, CSS is 'n bietjie van 'n slordig taal. 59 00:02:45,180 --> 00:02:48,370 Dit is baie sterk in wat jy kan maak letterlik 'n webwerf wat jy het 60 00:02:48,370 --> 00:02:51,880 gesien op die web vandag met dit nie, maar dit is soort van 'n pyn in die nek. 61 00:02:51,880 --> 00:02:54,440 En 'n paar van julle het jou kop klap teen die mure reeds net te doen 62 00:02:54,440 --> 00:02:58,560 iets dom soos sentrum 'n spyskaart op probleem die sewe as jy gekry het om te 63 00:02:58,560 --> 00:02:59,470 daardie stadium reeds. 64 00:02:59,470 --> 00:03:01,530 >> Maar besef, daardie dinge kry makliker oor tyd. 65 00:03:01,530 --> 00:03:02,820 Jy begin patrone te sien. 66 00:03:02,820 --> 00:03:06,020 En weer, sal Google jou vriend wees vir die verskillende maniere waarop jy kan 67 00:03:06,020 --> 00:03:07,220 los hierdie soort probleme. 68 00:03:07,220 --> 00:03:11,520 >> En durf ek sê met CSS, HTML en meer Die algemeen, kan jy probleme op te los in 69 00:03:11,520 --> 00:03:15,910 baie meer maniere, wat almal dalk baie goed wees korrek is, as wat jy kan 70 00:03:15,910 --> 00:03:18,900 in iets soos C, selfs nou PHP, of JavaScript. 71 00:03:18,900 --> 00:03:21,080 Daar is net baie verskillende maniere om dinge uit te lê. 72 00:03:21,080 --> 00:03:22,570 >> Maar dit begin om te kry morsig, het ons gesê. 73 00:03:22,570 --> 00:03:26,480 Net soort van meng jou HTML en jou CSS met die styl kenmerk was 74 00:03:26,480 --> 00:03:27,590 'n bietjie slordig. 75 00:03:27,590 --> 00:03:31,460 En so het ons plaas het, soort van abstrakte praat, wat jy behoort 76 00:03:31,460 --> 00:03:34,050 ten minste begin om faktor jou CSS waarskynlik. 77 00:03:34,050 --> 00:03:37,430 Nie jou styl eienskappe, maar ten minste gebruik die styl tag binnekant wat 78 00:03:37,430 --> 00:03:38,840 deel van die webblad? 79 00:03:38,840 --> 00:03:39,560 >> Publiek: Hoof. 80 00:03:39,560 --> 00:03:40,120 >> David Malan: In die kop. 81 00:03:40,120 --> 00:03:43,270 Tot nou toe, ons het net die titel tot daar, maar jy kan ook 'n styl voeg 82 00:03:43,270 --> 00:03:47,230 merk, en jy kan jou CSS sit ongeveer praat na die top van die bladsy. 83 00:03:47,230 --> 00:03:52,550 Maar dan moet ons het dinge 'n stap verder en ons faktor wat meer 84 00:03:52,550 --> 00:03:54,130 in 'n aparte lêer. 85 00:03:54,130 --> 00:03:57,240 >> En so hierdie twee lêers was een of ander manier nou gekoppel. 86 00:03:57,240 --> 00:03:59,550 En inderdaad was dit die tag wat dit gedoen het. 87 00:03:59,550 --> 00:04:02,920 En wat was een van die oorkoepelende motivering vir factoring uit ons CSS 88 00:04:02,920 --> 00:04:04,057 al hoe meer? 89 00:04:04,057 --> 00:04:05,280 >> Publiek: Herbruikbaar. 90 00:04:05,280 --> 00:04:05,785 >> David Malan: Herbruikbaar. 91 00:04:05,785 --> 00:04:06,150 Reg? 92 00:04:06,150 --> 00:04:09,470 Jy kan gesien het in p-die sewe reeds dat 'n groot deel van die bladsye, die 93 00:04:09,470 --> 00:04:12,260 koop bladsy, die verkoop van bladsy, die portefeulje bladsy, is waarskynlik 94 00:04:12,260 --> 00:04:13,550 gestruktureerde ietwat dieselfde. 95 00:04:13,550 --> 00:04:17,579 Daar is 'n CS50 finansies logo aan die bokant tensy jy besluit om dit te verander. 96 00:04:17,579 --> 00:04:19,839 Daar is 'n footer by die onderkant van bladsye. 97 00:04:19,839 --> 00:04:24,315 En CSS kan jy dit dan faktor uit dit in 'n aparte lêer sodat as 98 00:04:24,315 --> 00:04:27,780 jy iets wil wêreldwyd verander oor jou hele werf, kan jy regtig 99 00:04:27,780 --> 00:04:29,390 net dit verander in een plek. 100 00:04:29,390 --> 00:04:32,750 >> Maar daar is 'n prys wat jy potensieel betaal deurdat hulle faktor uit die 101 00:04:32,750 --> 00:04:38,380 CSS van my HTML lêer in 'n aparte dien dit vermeld word met die 102 00:04:38,380 --> 00:04:40,650 tag, wat ons sien op Maandag. 103 00:04:40,650 --> 00:04:43,850 Wat sou die nadeel wees van hierdie? 104 00:04:43,850 --> 00:04:48,830 Dink terug 'n week gelede toe ons praat oor HTTP en TCP / IP en hoe 105 00:04:48,830 --> 00:04:52,070 die internet werk. 106 00:04:52,070 --> 00:04:53,530 Iets hier? 107 00:04:53,530 --> 00:04:54,730 >> GEHOOR: Dit neem meer tyd. 108 00:04:54,730 --> 00:04:55,470 >> David Malan: Dit neem meer tyd. 109 00:04:55,470 --> 00:04:56,750 Hoekom? 110 00:04:56,750 --> 00:04:59,450 >> GEHOOR: [onhoorbaar]. 111 00:04:59,450 --> 00:04:59,750 >> David Malan: Ja. 112 00:04:59,750 --> 00:05:01,240 So neem dit waarskynlik 'n bietjie meer tyd. 113 00:05:01,240 --> 00:05:04,290 Want 'n mens, die CSS is natuurlik nie in dieselfde lêer. 114 00:05:04,290 --> 00:05:06,920 So nou moet jy maak nie een nie, maar twee versoeke. 115 00:05:06,920 --> 00:05:11,230 En elkeen van daardie versoeke, soos ons sien in Chrome in die sogenaamde Inspekteur 116 00:05:11,230 --> 00:05:15,740 en het ons gekyk na die netwerk blad, elke van die lêers vereis een HTTP 117 00:05:15,740 --> 00:05:18,360 versoek, wat ons gesien het neem 'n bedrag van tyd. 118 00:05:18,360 --> 00:05:19,290 Nou, miskien is dit nie 'n baie. 119 00:05:19,290 --> 00:05:20,670 Miskien is dit net 20 millisekondes. 120 00:05:20,670 --> 00:05:22,260 Miskien is dit 200 millisekondes. 121 00:05:22,260 --> 00:05:25,530 >> Maar dink oor 'n bladsy soos Facebook, of CNN, of Google, wat baie 122 00:05:25,530 --> 00:05:28,060 groter as die voorbeelde wat ons het gekyk na dusver. 123 00:05:28,060 --> 00:05:32,070 Diegene bladsye kan hê dekades van lêers, elk van wat kan vereis dat 'n 124 00:05:32,070 --> 00:05:33,550 aflaai van 'n lêer. 125 00:05:33,550 --> 00:05:35,800 So dinge kan potensieel begin om te vertraag. 126 00:05:35,800 --> 00:05:39,280 >> En veral die dae toe ons almal het selfone in ons sakke en 127 00:05:39,280 --> 00:05:43,010 stadiger internet verbindings, om te wag 'n paar millisekondes, 'n paar 128 00:05:43,010 --> 00:05:46,110 meer millisekondes vir addisionele lêers kan eintlik stadig. 129 00:05:46,110 --> 00:05:50,430 Latency is die woord wat beskryf die soort van wag dat jy dat jy 130 00:05:50,430 --> 00:05:53,110 ervaar wanneer wag vir 'n stuk van inligting. 131 00:05:53,110 --> 00:05:54,430 >> Maar daar is 'n onderstebo. 132 00:05:54,430 --> 00:05:56,600 So dit is nie al soort van 'n - 133 00:05:56,600 --> 00:05:58,170 dit is eintlik 'n bietjie van 'n wipplank hier. 134 00:05:58,170 --> 00:06:02,970 Nadeel nou, maar wat implementeer kan doen As hulle slim om te vermy 135 00:06:02,970 --> 00:06:08,870 met dieselfde styles.css te versoek lêer weer kan wees wat om te doen? 136 00:06:08,870 --> 00:06:09,390 >> Cache dit. 137 00:06:09,390 --> 00:06:10,370 So kas - 138 00:06:10,370 --> 00:06:11,690 C-A-C-H-E - 139 00:06:11,690 --> 00:06:15,810 algemeen beteken hier net die te red lêer wat u versoek om die eerste keer, en 140 00:06:15,810 --> 00:06:17,440 dan na jou kas vir dit. 141 00:06:17,440 --> 00:06:20,400 Gaan jy soort stoor houer, en as jy reeds 'n 142 00:06:20,400 --> 00:06:24,520 afskrif van styles.css, selfs al is 'n paar ander bladsy in die p-stel, of enige webwerf, 143 00:06:24,520 --> 00:06:28,560 versoeke dit weer, net die te gee gebruiker wat dieselfde kas kopie. 144 00:06:28,560 --> 00:06:30,140 Moet nie die moeite wat dit versoek. 145 00:06:30,140 --> 00:06:32,560 >> Nadeel is daar, al is, soos sommige van julle het geskakel oor in die p-stel. 146 00:06:32,560 --> 00:06:35,870 As jy 'n verandering op die bediener en jy gaan terug na die leser en jy 147 00:06:35,870 --> 00:06:39,250 laai, soms die leser doen jy 'n guns en nie die moeite 148 00:06:39,250 --> 00:06:43,660 weer die aflaai van jou styles.css lêer want, kom op, wat is die kans 149 00:06:43,660 --> 00:06:47,620 dat hierdie style wat Facebook gebruik gaan uur te verander uur of 150 00:06:47,620 --> 00:06:48,140 dag tot dag? 151 00:06:48,140 --> 00:06:48,800 Dit is baie laag. 152 00:06:48,800 --> 00:06:52,260 Hulle kan verander met verloop van tyd, maar nie deur die minuut of deur die uur. 153 00:06:52,260 --> 00:06:55,810 >> So 'n truuk, net FYI wanneer web ontwikkeling, word dikwels hou die 154 00:06:55,810 --> 00:06:59,500 skuif sleutel byvoorbeeld en kliek dan op herlaai in die leser, en dit sal 155 00:06:59,500 --> 00:07:03,280 tipies vertel die leser herlaai alles, selfs al is jy reeds 156 00:07:03,280 --> 00:07:04,180 dit in die kas. 157 00:07:04,180 --> 00:07:06,630 So weer, upsides en nadele, maar almal van hulle 158 00:07:06,630 --> 00:07:08,260 uiteindelik ontwerp besluite te neem. 159 00:07:08,260 --> 00:07:11,520 >> So nou, ons het nie net die einde van die storie hier. 160 00:07:11,520 --> 00:07:15,790 As ek nou terug te gaan en weer en weer en terug, het ons begin om nie net bekend 161 00:07:15,790 --> 00:07:18,060 HTML, maar PHP. 162 00:07:18,060 --> 00:07:20,786 So in leketaal, wat beteken PHP laat ons doen? 163 00:07:20,786 --> 00:07:22,770 >> GEHOOR: [onhoorbaar]. 164 00:07:22,770 --> 00:07:24,258 >> David Malan: Wat is dit? 165 00:07:24,258 --> 00:07:25,250 >> GEHOOR: Stel logika in die kode. 166 00:07:25,250 --> 00:07:26,620 >> David Malan: Ja, stel logika in jou kode. 167 00:07:26,620 --> 00:07:29,570 So dit is 'n ware programmeertaal met loops, en veranderlikes, en 168 00:07:29,570 --> 00:07:32,620 funksies en voorwaardes, en al die dinge wat ons het al met behulp pad terug 169 00:07:32,620 --> 00:07:33,780 wanneer sedert nuuts af. 170 00:07:33,780 --> 00:07:36,780 En PHP, het ons gesien, kan gebruik word om óf op die command line - dit 171 00:07:36,780 --> 00:07:39,190 hoef nie iets te doen te hê met die web, selfs al is dit 172 00:07:39,190 --> 00:07:43,150 regtig sy oorsprong en wat dit is geneig om goed te wees en bevorderlik is vir - 173 00:07:43,150 --> 00:07:47,130 maar jy kan gebruik PHP bloot deur die natuur van die feit dat dit 'n druk () 174 00:07:47,130 --> 00:07:49,660 funksie, en 'n printf () funksie, of 'n eggo () funksie. 175 00:07:49,660 --> 00:07:52,440 Daar is trosse van maniere waarop jy kan druk teks met PHP. 176 00:07:52,440 --> 00:07:56,540 >> Daarom, kan jy hierdie programme taal te presies uitvoer 177 00:07:56,540 --> 00:07:58,460 wat ons praat voor. 178 00:07:58,460 --> 00:08:01,360 Jy kan dinamiese genereer jou HTML. 179 00:08:01,360 --> 00:08:02,300 Miskien nie alles nie. 180 00:08:02,300 --> 00:08:06,460 Miskien het jy hard-kode dinge, soos die kop, en die voet, en die logo, 181 00:08:06,460 --> 00:08:07,950 en jou styl velle, en al van dat. 182 00:08:07,950 --> 00:08:11,190 Maar vir iets soos p-set sewe, waar jy manipuleer aandele en 183 00:08:11,190 --> 00:08:14,690 wat die gebruiker se portefeulje, wat gaan dinamies verander, kan jy 184 00:08:14,690 --> 00:08:18,960 sekerlik gebruik PHP en die logika dit gee jy as 'n programmeertaal te 185 00:08:18,960 --> 00:08:22,320 uitset deelversamelings dinamiese van die bladsy. 186 00:08:22,320 --> 00:08:25,900 >> So wanneer jy praat oor dinamiese webblaaie, of web ontwikkeling, dis 187 00:08:25,900 --> 00:08:27,200 wat jy eintlik praat. 188 00:08:27,200 --> 00:08:31,450 Die gebruik van 'n taal soos PHP, of dinge sogenaamde Python, of Ruby, of Java, of 189 00:08:31,450 --> 00:08:35,900 nog ander tale, 'n databasis te bevraagteken dikwels, of 'n ander bediener, en 190 00:08:35,900 --> 00:08:38,580 dan dinamiese HTML spoeg uit. 191 00:08:38,580 --> 00:08:42,470 >> Nou is die eindresultaat, as 'n eenkant, is dat die HTML van die meeste webtuistes, 192 00:08:42,470 --> 00:08:45,970 insluitend jou p-set sewe, is waarskynlik gaan 'n groot gemors as wees 193 00:08:45,970 --> 00:08:48,060 jy kyk na die bron kode in 'n leser. 194 00:08:48,060 --> 00:08:49,010 Dit is nie 'n groot deal. 195 00:08:49,010 --> 00:08:51,550 Op hierdie punt, wanneer ons omgee styl, ons omgee vir die 196 00:08:51,550 --> 00:08:52,740 dinge wat jy skryf. 197 00:08:52,740 --> 00:08:56,240 Ons sal nie omgee oor die dinge dat dit wat jou kode uitgange. 198 00:08:56,240 --> 00:08:59,520 So moenie bekommerd wees oor inkeping hier as dit is PHP dis 199 00:08:59,520 --> 00:09:01,190 eintlik uitdruk dinge. 200 00:09:01,190 --> 00:09:04,430 Na alles, sal die leser nie omgee nie, en 'n mens sal nie soek 201 00:09:04,430 --> 00:09:05,400 by die bron in elk geval. 202 00:09:05,400 --> 00:09:09,000 Ons het die personeel, byvoorbeeld, sou word op soek na jou PHP. 203 00:09:09,000 --> 00:09:13,440 >> So laat my gee 'n vinnige voorbeeld nou waarom anders dit nuttig kan wees. 204 00:09:13,440 --> 00:09:18,620 So gesê, kan ek nie die laaste onthou keer as ek C gebruik om 'n probleem op te los in 205 00:09:18,620 --> 00:09:19,620 die werklike wêreld. 206 00:09:19,620 --> 00:09:22,330 Dit was waarskynlik in die nagraadse skool toe Ek moes 'n taal te gebruik wat 207 00:09:22,330 --> 00:09:26,710 was redelik lae vlak en het my die geleentheid om iets baie hoog te doen 208 00:09:26,710 --> 00:09:30,720 presteer om werklik red soveel CPU siklusse as wat ek kon, in 'n groot deel 209 00:09:30,720 --> 00:09:33,990 want ek het met behulp van groot stelle data, en elke CPU siklus getel. 210 00:09:33,990 --> 00:09:37,750 En eerlik, selfs in dinge soos selfone hierdie dae en ander toestelle 211 00:09:37,750 --> 00:09:39,910 waar jy nie heeltemal nie soveel geheue en jy nie heeltemal nie as 212 00:09:39,910 --> 00:09:44,160 veel CPU, met behulp van vinniger tale steeds 'n beroep. 213 00:09:44,160 --> 00:09:47,290 >> Maar in die werklike wêreld, wanneer jy net wil 'n paar program saam te gooi om 214 00:09:47,290 --> 00:09:50,340 sommige data te analiseer, of jy versamel 'n hele klomp van die inskrywings vir 215 00:09:50,340 --> 00:09:53,330 sommige studente groep en jy wil baie vinnig outomatiseer stuur e-pos 216 00:09:53,330 --> 00:09:56,240 een vir een aan elke een van daardie geregistreerdes, jy gaan te bereik vir 217 00:09:56,240 --> 00:09:59,240 'n hoër vlak van taal as C om so te praat. 218 00:09:59,240 --> 00:10:04,060 Iets soos PHP of Python, of Ruby, of 'n half 'n dosyn ander wat bestaan 219 00:10:04,060 --> 00:10:04,550 hierdie dae. 220 00:10:04,550 --> 00:10:07,200 Maar daardie drie is waarskynlik die mees modieuse nou. 221 00:10:07,200 --> 00:10:10,840 >> En wat dit beteken is dat jy kan oopmaak 'n teks editor soos gedit of 222 00:10:10,840 --> 00:10:14,030 mees enigiets anders, en dan net begin kode skryf sonder om te bekommer 223 00:10:14,030 --> 00:10:17,800 oor die samestelling, sonder om te regtig bekommerd oor die geheue bestuur, 224 00:10:17,800 --> 00:10:20,820 hou in gedagte dat 'n bietjie sloppiness sal uiteindelik terug te kom 225 00:10:20,820 --> 00:10:24,790 om jou te byt as die data stel kry groter of die probleem kry 'n groot. 226 00:10:24,790 --> 00:10:27,230 Maar wat beteken dit vir ons is die volgende. 227 00:10:27,230 --> 00:10:29,860 >> Laat my gaan voort en hardloop speller van die probleem stel ses. 228 00:10:29,860 --> 00:10:33,480 So dit is my Trie-gebaseerde implementering wat ek gebruik op die groot 229 00:10:33,480 --> 00:10:35,500 raad waar ek so goed gevaar nie. 230 00:10:35,500 --> 00:10:38,720 Ons sal terug te kom in 'n week se tyd en weer diegene wat uiteindelik bo-op die 231 00:10:38,720 --> 00:10:40,430 groot bord by ons laaste lesing. 232 00:10:40,430 --> 00:10:44,520 Maar vir nou, laat my voor en net gaan hardloop my oplossing in die teks, en ons sal doen 233 00:10:44,520 --> 00:10:48,460 die King James Bybel, en hier gaan ons. 234 00:10:48,460 --> 00:10:51,080 >> So dit is al van die sogenaamde verkeerd gespelde woorde uit 235 00:10:51,080 --> 00:10:52,240 die King James Bybel. 236 00:10:52,240 --> 00:10:55,560 En my implementering het helfte van 'n tweede in totaal. 237 00:10:55,560 --> 00:10:58,270 So nie te sleg op hierdie spesifieke rekenaar. 238 00:10:58,270 --> 00:11:01,540 Maar dink aan hoeveel kode wat ek moes skryf. 239 00:11:01,540 --> 00:11:02,880 Dink hoeveel kode wat jy het om te skryf. 240 00:11:02,880 --> 00:11:06,170 Dink net hoe baie ure wat jy spandeer in die D-saal of jou koshuiskamer of waar ook al 241 00:11:06,170 --> 00:11:07,890 eintlik kodering tot die oplossing. 242 00:11:07,890 --> 00:11:11,850 >> Wel, as ek het eintlik 'n hoër vlak taal soos PHP, neem kennis van 243 00:11:11,850 --> 00:11:13,350 wat ek hier kan doen. 244 00:11:13,350 --> 00:11:16,410 Eerstens, veronderstel dat dit is in plaas jou verspreiding kode. 245 00:11:16,410 --> 00:11:17,790 Dit is 'n lêer genaamd speller. 246 00:11:17,790 --> 00:11:20,220 Dit is beskikbaar as deel van vandag se verspreiding kode. 247 00:11:20,220 --> 00:11:22,670 En ek gaan my hand te waai by die meeste van die besonderhede nie, maar dit is eintlik 248 00:11:22,670 --> 00:11:25,500 'n interessante voorbeeld van hoe jy dalk hawe 'n taal 249 00:11:25,500 --> 00:11:28,870 soos C oor te PHP. 250 00:11:28,870 --> 00:11:33,420 Ek het letterlik twee teks vensters oopgemaak, een met my C-weergawe van speller.c, 251 00:11:33,420 --> 00:11:36,960 en ek het net begin vertaal dit in my kop tot PHP en tik dit uit die gebruik van 252 00:11:36,960 --> 00:11:38,840 die naaste ekwivalent funksies. 253 00:11:38,840 --> 00:11:40,100 >> So 'n paar van hierdie dinge is anders. 254 00:11:40,100 --> 00:11:43,730 Ons het die laaste keer dat PHP gebruik nie sluit in 'n baie dieselfde manier. 255 00:11:43,730 --> 00:11:47,050 Dit maak gebruik van tipies vereis, maar sluit nie bestaan ​​nie. 256 00:11:47,050 --> 00:11:50,330 Definieer is 'n bietjie anders # Definieer in C, maar dit is 257 00:11:50,330 --> 00:11:51,890 hoe kan ons dan 'n konstante. 258 00:11:51,890 --> 00:11:55,860 $ Argc dit blyk bestaan ​​in PHP, so het ons gesien dat voor. 259 00:11:55,860 --> 00:11:58,650 Dit is net veranderlikes, al wat begin met die dollar tekens. 260 00:11:58,650 --> 00:12:00,590 Onthou dit is net 'n klomp van drywende punte. 261 00:12:00,590 --> 00:12:03,970 >> So lang storie kort, jy is welkom om flip deur hierdie As nuuskierig, dit is 262 00:12:03,970 --> 00:12:10,010 byna 'n lyn-vir-lyn-omskakeling van die C-weergawe van speller.c in PHP. 263 00:12:10,010 --> 00:12:12,630 En jy kan dit weer doen vir helfte van 'n dosyn ander tale. 264 00:12:12,630 --> 00:12:14,910 >> Maar wat interessant is, is hierdie. 265 00:12:14,910 --> 00:12:16,910 Of wat is eerlik teleurstellend is dit. 266 00:12:16,910 --> 00:12:20,790 Laat my gaan voort en tik oor dictionary.php, en eis dat ek 267 00:12:20,790 --> 00:12:23,670 gaan om voort te gaan en weer te implementeer probleem stel ses hier. 268 00:12:23,670 --> 00:12:27,530 >> So laat ons stel eerste wat in hierdie lêer, wat in werking gestel sal word 269 00:12:27,530 --> 00:12:30,550 PHP, so laat my tags soos dit oop te maak. 270 00:12:30,550 --> 00:12:34,780 Kom ek gee myself 'n globale veranderlike, $ grootte kry nul. 271 00:12:34,780 --> 00:12:36,710 En ek gaan om te gee myself 'n gemors tafel. 272 00:12:36,710 --> 00:12:38,110 Ek sal 'n gemors tafel gebruik vir hierdie ding. 273 00:12:38,110 --> 00:12:42,070 Hoe kan ek verklaar 'n hash tafel in PHP? 274 00:12:42,070 --> 00:12:42,990 Gedoen. 275 00:12:42,990 --> 00:12:43,980 OK. 276 00:12:43,980 --> 00:12:48,870 >> So oop bracket naby bracket verteenwoordig wat in PHP, soos ons gesien het? 277 00:12:48,870 --> 00:12:51,850 'N skikking, maar 'n skikking wat kon wees om 'n assosiatiewe skikking. 278 00:12:51,850 --> 00:12:54,320 'N assosiatiewe skikking is 'n data struktuur wat 279 00:12:54,320 --> 00:12:55,860 assosieer sleutels met waardes. 280 00:12:55,860 --> 00:12:59,430 >> Nou in die eenvoudigste numeriese kruip skikking, die sleutels is wat? 281 00:12:59,430 --> 00:13:02,250 282 00:13:02,250 --> 00:13:03,960 Nul, een, twee, drie, reg? 283 00:13:03,960 --> 00:13:08,780 Ou skool stop terug van C. Maar dit kan ook snare soos cat, en bar, 284 00:13:08,780 --> 00:13:12,210 of Maxwell, of enige sodanige string. 285 00:13:12,210 --> 00:13:14,240 So ek kan hefboom wat in net 'n oomblik. 286 00:13:14,240 --> 00:13:17,550 >> Laat my gaan voort en verklaar 'n funksie soos - 287 00:13:17,550 --> 00:13:19,020 Kom ons doen las () eerste. 288 00:13:19,020 --> 00:13:20,690 So funksie laai nie (). 289 00:13:20,690 --> 00:13:23,440 En PHP is 'n bietjie anders in die sin dat jy letterlik tik funksie, maar jy 290 00:13:23,440 --> 00:13:24,930 nie tik 'n terugkeer tipe. 291 00:13:24,930 --> 00:13:28,760 Ek gaan om voort te gaan en sê dat die vrag () funksie moet neem 292 00:13:28,760 --> 00:13:31,000 argument $ woordeboek, net soos C-weergawe het. 293 00:13:31,000 --> 00:13:32,510 Ek doen wat uit die geheue. 294 00:13:32,510 --> 00:13:34,910 >> En Ek stel voor dat ek gaan om dit te doen. 295 00:13:34,910 --> 00:13:37,080 Ek is net gaan foreach te doen. 296 00:13:37,080 --> 00:13:40,710 Ek gaan 'n funksie genoem te roep lêer (), verby in die naam van daardie 297 00:13:40,710 --> 00:13:44,990 lêer, wat is die veranderlike $ Woordeboek as $ woord. 298 00:13:44,990 --> 00:13:49,410 En dan binnekant van my lus vir hier, ek is gaan om voort te gaan en te stoor in my 299 00:13:49,410 --> 00:13:57,440 $ Tafel wat $ woord kry waar. 300 00:13:57,440 --> 00:13:57,918 Gedoen. 301 00:13:57,918 --> 00:14:01,264 O, wag. 302 00:14:01,264 --> 00:14:02,422 Gedoen. 303 00:14:02,422 --> 00:14:02,760 OK. 304 00:14:02,760 --> 00:14:04,970 >> Dit is die las () funksie sê in PHP. 305 00:14:04,970 --> 00:14:05,865 Nou, hoekom werk dit? 306 00:14:05,865 --> 00:14:07,010 En ek is soort van bedrog hier. 307 00:14:07,010 --> 00:14:09,980 >> So, een, foreach ons gesien kortliks laaste tyd. 308 00:14:09,980 --> 00:14:13,680 Dit beteken net dat jy kan Itereer oor 'n skikking sonder om met i 309 00:14:13,680 --> 00:14:16,150 en N en plus plus, en al wat. 310 00:14:16,150 --> 00:14:21,350 Woordeboek is natuurlik die lêer naam, iets soos 'n groot of klein, die twee 311 00:14:21,350 --> 00:14:22,830 woordeboeke wat ons gebruik laaste tyd. 312 00:14:22,830 --> 00:14:26,715 File is 'n funksie wat oopmaak teks lêer, lees dit in lyn deur die lyn, en 313 00:14:26,715 --> 00:14:29,840 hande wat jy terug 'n groot verskeidenheid, elk van waarvan die elemente is 'n 314 00:14:29,840 --> 00:14:31,340 lyn van die lêer. 315 00:14:31,340 --> 00:14:36,040 So wat is die kombinasie van fopen, en fread, en terwyl loop, en fclose, 316 00:14:36,040 --> 00:14:37,080 en al van dat. 317 00:14:37,080 --> 00:14:40,150 Ten slotte, as woord beteken net dit is die veranderlike ek gaan om toegang te hê 318 00:14:40,150 --> 00:14:41,890 op elke iterasie in hierdie lus. 319 00:14:41,890 --> 00:14:46,910 >> Dus, in kort, hierdie een sak beteken hier oop te maak die lêer wie se naam is in 320 00:14:46,910 --> 00:14:50,750 woordeboek, die veranderlike, Itereer oor dit reël vir reël, en elke keer as jy 321 00:14:50,750 --> 00:14:54,290 'n lyn, winkel in 'n veranderlike genoem woord, en dan iets te doen met woord. 322 00:14:54,290 --> 00:14:55,280 Wat wil ek doen? 323 00:14:55,280 --> 00:14:58,110 Ek wil woord te sit in my hash tafel. 324 00:14:58,110 --> 00:15:00,860 >> Wel, ek kan sit iets in my hash tafel net soos in C 325 00:15:00,860 --> 00:15:02,140 met behulp van vierkantige hakies. 326 00:15:02,140 --> 00:15:03,660 Dit is die naam vir my hash tafel. 327 00:15:03,660 --> 00:15:07,180 Ek gaan na die indeks in daardie hash tafel by hierdie plek. 328 00:15:07,180 --> 00:15:08,920 So nie bracket nul, nie bracket een. 329 00:15:08,920 --> 00:15:11,990 Bracket quote unquote iets, alles wat die woord is. 330 00:15:11,990 --> 00:15:15,200 En net soos wat jy mag hê in jou Hutstabel werk Trie, jy moet net stoor 331 00:15:15,200 --> 00:15:17,650 effektief 'n Boole, implisiet of uitdruklik. 332 00:15:17,650 --> 00:15:18,260 Gedoen. 333 00:15:18,260 --> 00:15:20,000 Ek is die stoor van die waarde waar. 334 00:15:20,000 --> 00:15:23,150 >> Nou is daar 'n paar dinge Ek sny hoeke hier. 335 00:15:23,150 --> 00:15:27,720 Tegnies, daar gaan wees om 'n irriterende nuwe lyn, / n, aan die einde van 336 00:15:27,720 --> 00:15:28,820 elk van hierdie woorde. 337 00:15:28,820 --> 00:15:31,770 So ek moet waarskynlik noem 'n PHP funksie genoem kap (), wat 338 00:15:31,770 --> 00:15:33,460 letterlik kap dat af. 339 00:15:33,460 --> 00:15:35,020 En ek werklik nodig het om te doen 'n ander ding. 340 00:15:35,020 --> 00:15:38,380 Ek moet waarskynlik inkrementeer grootte aan elke iterasie, so ek dop 341 00:15:38,380 --> 00:15:39,560 wêreldwyd van wat dit is. 342 00:15:39,560 --> 00:15:43,180 En eerlik, en dit is een van die stupider aspekte van PHP, as jy 343 00:15:43,180 --> 00:15:46,950 gebruik van 'n globale veranderlike, moet jy uitdruklik sê dat jy is. 344 00:15:46,950 --> 00:15:51,670 So ek gaan eintlik tik in globale $ Grootte, globale $ tafel, en nou 345 00:15:51,670 --> 00:15:52,690 my funksie is voltooi. 346 00:15:52,690 --> 00:15:57,475 >> So nie heeltemal so eenvoudig soos voor, maar het waarskynlik minder tyd as die C 347 00:15:57,475 --> 00:15:58,220 weergawe, miskien? 348 00:15:58,220 --> 00:15:58,730 OK. 349 00:15:58,730 --> 00:16:00,390 >> So laat ons nou doen om die tjek () funksie. 350 00:16:00,390 --> 00:16:04,300 Kom ons kyk of dit ten minste het die ure op die einde wat dit geneem het om ons in C. So 351 00:16:04,300 --> 00:16:06,500 Laat my gaan voort en verklaar kyk as 'n funksie. 352 00:16:06,500 --> 00:16:09,070 Neem in argument woord, wat gaan kom uit speller. 353 00:16:09,070 --> 00:16:13,410 En ek is net gaan om te kyk of die volgende veranderlike isset, tafel 354 00:16:13,410 --> 00:16:18,400 bracket strtolower van 'n woord - 355 00:16:18,400 --> 00:16:20,590 laat balanseer al my hakies - 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 dit was regtig die harde deel van hierdie program. 360 00:16:30,330 --> 00:16:31,940 Anders, terugkeer vals. 361 00:16:31,940 --> 00:16:32,630 Gedoen. 362 00:16:32,630 --> 00:16:33,460 Dis tjek (). 363 00:16:33,460 --> 00:16:34,520 >> Nou, hoekom werk dit? 364 00:16:34,520 --> 00:16:37,040 Wel, een wat ek geslaag het in 'n woord, Dit is 'n string. 365 00:16:37,040 --> 00:16:41,400 Twee, maak ek seker binnekant van die hash tafel, wat genoem $ tafel. 366 00:16:41,400 --> 00:16:45,470 Ek dwing om dit te onderkas deur te bel 'n funksie baie soortgelyk tolower () in 367 00:16:45,470 --> 00:16:48,580 C, maar dit maak die hele woord, nie 'n enkele karakter. 368 00:16:48,580 --> 00:16:52,680 En as dit is ingestel, met ander woorde daar is 'n waarde stel, met ander woorde, 369 00:16:52,680 --> 00:16:54,880 As dit waar is, dan ja, dit is 'n woord. 370 00:16:54,880 --> 00:16:56,530 Want ek het dit daar met die las (). 371 00:16:56,530 --> 00:16:59,100 En indien nie, ek gaan om terug te keer vals. 372 00:16:59,100 --> 00:17:00,090 >> Nou is die ander mense is maklik. 373 00:17:00,090 --> 00:17:03,570 Funksie grootte (), hoe doen ek dit? 374 00:17:03,570 --> 00:17:05,230 Ek wese nie terugkeer $ grootte. 375 00:17:05,230 --> 00:17:07,770 Maar ek tegnies nodig het om te doen dit irriterende ding. 376 00:17:07,770 --> 00:17:10,640 En eintlik up hoor, was ek sny een hoek te veel. 377 00:17:10,640 --> 00:17:12,920 Ek het regtig nodig het om globale $ tafel te doen. 378 00:17:12,920 --> 00:17:16,260 >> Maar wat gesê word, los). 379 00:17:16,260 --> 00:17:17,380 Los () is ongelooflik. 380 00:17:17,380 --> 00:17:20,500 Funksioneer los (). 381 00:17:20,500 --> 00:17:23,990 Hoe wil ek los () te implementeer? 382 00:17:23,990 --> 00:17:25,079 Gedoen. 383 00:17:25,079 --> 00:17:25,450 OK. 384 00:17:25,450 --> 00:17:28,900 >> So los (), geheue bestuur is heeltemal versorg vir jou in 385 00:17:28,900 --> 00:17:31,800 iets soos PHP en 'n baie van hoër-vlak tale. 386 00:17:31,800 --> 00:17:32,600 So dit is ongelooflik. 387 00:17:32,600 --> 00:17:36,080 Graag waarom die hel het ons het die afgelope agt plus weke op C skryfwerk 388 00:17:36,080 --> 00:17:41,030 glo regtig stadig, regtig tyd beslag probleme met tien ure 389 00:17:41,030 --> 00:17:42,530 van die werk onder ons gordels? 390 00:17:42,530 --> 00:17:46,110 >> Wel, vir een ding, kan dit werk fyn vir klein programme. 391 00:17:46,110 --> 00:17:47,840 Dit is beslis versnel my ontwikkeling tyd. 392 00:17:47,840 --> 00:17:49,790 Maar laat ons kyk wat gebeur in die werklike wêreld. 393 00:17:49,790 --> 00:17:52,370 >> Laat my gaan in hierdie gids in 'n terminaal venster. 394 00:17:52,370 --> 00:17:53,370 Daar is speller. 395 00:17:53,370 --> 00:17:56,570 En sien as 'n eenkant, en jy kan teëgekom het hierdie probleem in stel 396 00:17:56,570 --> 00:17:58,190 ses of sewe probleem stel. 397 00:17:58,190 --> 00:18:01,610 Jy hoef nie streng moet eindig PHP lêers met. PHP. 398 00:18:01,610 --> 00:18:05,250 As jy 'n lyn soos daardie eerste een op die heel boonste, dit is 'n spesiale lyn 399 00:18:05,250 --> 00:18:10,980 van sintaksis wat in wese beteken vind die program genoem PHP en gebruik dit om te 400 00:18:10,980 --> 00:18:12,270 interpreteer hierdie lêer. 401 00:18:12,270 --> 00:18:15,410 So nou niemand weet regtig wat Ek hardloop 'n PHP-program. 402 00:18:15,410 --> 00:18:19,860 Ek kan hardloop dit net asof dit is iets wat saamgestel is in C. 403 00:18:19,860 --> 00:18:20,650 >> Maar hier is die ding. 404 00:18:20,650 --> 00:18:21,600 Eintlik is, laat ons doen dit weer. 405 00:18:21,600 --> 00:18:23,530 Dropbox/pset6 /. 406 00:18:23,530 --> 00:18:25,390 Daar is speller. 407 00:18:25,390 --> 00:18:26,720 OK, 0,44 sekondes. 408 00:18:26,720 --> 00:18:28,080 Dit het vinniger hierdie tyd. 409 00:18:28,080 --> 00:18:29,745 >> Nou kom ons gaan in die PHP weergawe. 410 00:18:29,745 --> 00:18:43,070 411 00:18:43,070 --> 00:18:44,320 Mooi raak. 412 00:18:44,320 --> 00:18:50,830 413 00:18:50,830 --> 00:18:53,285 Maar dink net hoeveel tyd Ek sal gestoor word op kantoorure. 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 >> So 3,59 sekondes, wat eintlik klink nie akkuraat nie. 417 00:19:01,020 --> 00:19:03,710 Maar dit is omdat 'n lang storie kort, wanneer jy druk uit 'n groot hoeveelheid 418 00:19:03,710 --> 00:19:06,840 van die dinge op die skerm, wat self stadiger dinge af. 419 00:19:06,840 --> 00:19:11,260 Wat dit regtig het die SVE in die toestel was 3,59 sekondes, in 420 00:19:11,260 --> 00:19:15,260 In teenstelling met C, wat het 0,44 sekondes mees onlangs. 421 00:19:15,260 --> 00:19:17,620 Dit is werklik 'n bevel van grootte verskil. 422 00:19:17,620 --> 00:19:20,280 >> So waar is dat die prys vandaan? 423 00:19:20,280 --> 00:19:21,790 Hoekom is dit so veel stadiger? 424 00:19:21,790 --> 00:19:24,220 Waarom het PHP voer so swak? 425 00:19:24,220 --> 00:19:25,242 Danielle? 426 00:19:25,242 --> 00:19:26,550 >> Publiek: Jy het nie regtig gebruik om 'n hash tafel. 427 00:19:26,550 --> 00:19:27,710 >> David Malan: Ek het nie regtig gebruik om 'n hash tafel. 428 00:19:27,710 --> 00:19:28,760 So ek soort van gedoen het. 429 00:19:28,760 --> 00:19:29,870 So dit is 'n assosiatiewe skikking. 430 00:19:29,870 --> 00:19:33,650 Heel waarskynlik as die mense by PHP is regtig slim, hulle gebruik onder die 431 00:19:33,650 --> 00:19:39,520 kap 'n werklike hutstabel geïmplementeer in iets soos C of C + +. 432 00:19:39,520 --> 00:19:41,290 Maar. 433 00:19:41,290 --> 00:19:42,760 Ja. 434 00:19:42,760 --> 00:19:44,010 >> Publiek: [onhoorbaar]. 435 00:19:44,010 --> 00:19:46,690 436 00:19:46,690 --> 00:19:47,080 >> David Malan: Ja. 437 00:19:47,080 --> 00:19:50,780 So elkeen van die funksies wat ek nou geskryf het - Eintlik is, kan jy sê dat weer 'n 438 00:19:50,780 --> 00:19:51,480 bietjie harder? 439 00:19:51,480 --> 00:19:54,509 >> Publiek: Elkeen van die funksies wat jy ingesluit het 'n baie meer volledige 440 00:19:54,509 --> 00:19:56,610 kapasiteit as - 441 00:19:56,610 --> 00:19:57,550 >> David Malan: So dit is baie waar. 442 00:19:57,550 --> 00:20:01,490 Daar is 'n baie meer oorhoofse dat ons nie regtig sien deur te fokus slegs op 443 00:20:01,490 --> 00:20:03,730 dictionary.php, wat ek net geskryf. 444 00:20:03,730 --> 00:20:08,020 In teenstelling hiermee, is daar 'n hele tolk gaan in die agtergrond. 445 00:20:08,020 --> 00:20:12,040 Trouens, toe ek gehardloop hierdie program, is dit was nie loop saamgestel nulle en ene 446 00:20:12,040 --> 00:20:14,290 ontwerp vir my Intel CPU. 447 00:20:14,290 --> 00:20:19,270 Inteendeel, dit was hardloop lyn deur die lyn PHP kode wat presies lyk 448 00:20:19,270 --> 00:20:20,350 soos ons dit getik. 449 00:20:20,350 --> 00:20:22,475 En so wanneer jy gebruik om 'n geïnterpreteer taal, jy 450 00:20:22,475 --> 00:20:23,850 eintlik nie betaal hierdie prys. 451 00:20:23,850 --> 00:20:27,010 Dit gaan 'n geruime tyd te neem om te lees jou lêer bo na onder, links na 452 00:20:27,010 --> 00:20:30,740 reg, en dan voer elke lyn weer en weer. 453 00:20:30,740 --> 00:20:34,250 >> Nou in werklikheid, veral op die web, jy kan eintlik bespoedig hierdie proses 454 00:20:34,250 --> 00:20:38,660 deur die kas van die resultate van die PHP-kode as dit vertaal. 455 00:20:38,660 --> 00:20:41,640 En dit maak sin op die web, want As jy nie 'n gebruiker soos 456 00:20:41,640 --> 00:20:46,300 my hier nie, maar 1000 of 10000 gebruikers, dan Dalk is dit die eerste keer dat die lêer is 457 00:20:46,300 --> 00:20:49,050 toeganklik is dit stadig, maar daarna dit is baie vinniger. 458 00:20:49,050 --> 00:20:51,000 >> Maar dit is ook weer, is 'n kompromis. 459 00:20:51,000 --> 00:20:53,870 En vir iets soos 'n navorsing data stel, of selfs iets soos 'n groot 460 00:20:53,870 --> 00:20:58,330 hierdie, jou gebruikers sal uiteindelik begin wat verlangsaming te voel. 461 00:20:58,330 --> 00:21:02,670 >> Dus, in kort, geïnterpreteer tale baie in die mode, baie gewild, en 462 00:21:02,670 --> 00:21:06,710 eerlik is waarskynlik die tale wat jy moet bereik vir wanneer probleme oplos 463 00:21:06,710 --> 00:21:08,200 Ná CS50. 464 00:21:08,200 --> 00:21:12,720 Maar besef hoeveel jy regtig neem as vanselfsprekend onder die enjinkap 465 00:21:12,720 --> 00:21:15,910 regtig die afgelope paar weke in hash tafels, en bome, en drieë, 466 00:21:15,910 --> 00:21:20,770 wat uiteindelik om werklik gebruik word dinge soos oop bracket implementeer, 467 00:21:20,770 --> 00:21:24,200 vierkante hakies, wat kan ons nou dank as vanselfsprekend aanvaar. 468 00:21:24,200 --> 00:21:26,360 >> So kom ons neem 'n blik nou in hierdie web konteks. 469 00:21:26,360 --> 00:21:29,890 En ek genoem laaste keer dat daar 'n klomp van superglobals in PHP wat 470 00:21:29,890 --> 00:21:32,490 is nie regtig relevant op die opdrag lyn. 471 00:21:32,490 --> 00:21:36,210 Hulle is meer betrokke in die konteks van die gebruik van PHP in 'n web konteks. 472 00:21:36,210 --> 00:21:41,220 So loop PHP op 'n web bediener in orde dinge soos HTML te genereer. 473 00:21:41,220 --> 00:21:44,540 >> En ons kyk na $ _GET en $ _POST en dit is waar outomaties gebruikers se 474 00:21:44,540 --> 00:21:49,100 insette eindig net indien u 'n vorm van 'n lêer wat eindig in. php op 'n webblad 475 00:21:49,100 --> 00:21:50,460 bediener soos die toestel. 476 00:21:50,460 --> 00:21:53,310 Maar laat ons kyk kortliks na $ _COOKIE En $ _SESSION. 477 00:21:53,310 --> 00:21:56,670 >> In leketaal, wat is 'n koekie as jy dit verstaan ​​in die konteks van 478 00:21:56,670 --> 00:21:58,220 gebruik van die web? 479 00:21:58,220 --> 00:21:59,450 >> Publiek: lêer op die rekenaar. 480 00:21:59,450 --> 00:21:59,920 >> David Malan: Ja. 481 00:21:59,920 --> 00:22:03,500 Dit is 'n lêer op die gebruiker se rekenaar geplant deur alles webwerf 482 00:22:03,500 --> 00:22:04,410 jy gebeur om te besoek. 483 00:22:04,410 --> 00:22:07,334 So wanneer jy na Facebook, wanneer jy gaan te bankofamerica.com, wanneer jy gaan 484 00:22:07,334 --> 00:22:10,330 na google.com, wanneer jy na byna enige webwerf in die wêreld hierdie dae, 485 00:22:10,330 --> 00:22:14,850 insluitend cs50.net, is 'n koekie geplant op jou rekenaar, wat 486 00:22:14,850 --> 00:22:19,800 óf 'n waarde gestoor in die geheue in jou rekenaar in jou leser se geheue, of 487 00:22:19,800 --> 00:22:22,800 soms wel 'n lêer gestoor op jou hardeskyf. 488 00:22:22,800 --> 00:22:26,960 >> En wat is tipies gestoor in die lêer is nie jou gebruiker naam, nie jou 489 00:22:26,960 --> 00:22:31,060 wagwoord, tipies nie iets sensitiewe tensy die webwerf is nie so 490 00:22:31,060 --> 00:22:35,040 goed met hul sekuriteit nie, maar eerder dit is 'n groot unieke identifiseerder onder 491 00:22:35,040 --> 00:22:35,680 ander dinge. 492 00:22:35,680 --> 00:22:38,920 Dit is 'n groot ewekansige getal geplant op jou rekenaar, maar jy kan dink as 493 00:22:38,920 --> 00:22:42,740 soort van 'n virtuele hand stempel soos uit 'n klub of 'n pretpark, wat 494 00:22:42,740 --> 00:22:47,160 laat die personeel, die eienaars van daardie diens, om te onthou wie jy is. 495 00:22:47,160 --> 00:22:51,030 So as die groot ewekansige getal is soos 12345678, alhoewel dit natuurlik 496 00:22:51,030 --> 00:22:54,180 nie te ewekansige, dink aan wat as die hand stamp dat wanneer jy besoek 497 00:22:54,180 --> 00:22:57,930 facebook.com vir die eerste keer, het hulle stamp dat die getal op jou hand. 498 00:22:57,930 --> 00:23:01,510 En dan, want jy praat HTTP, jy 'n leser, en omdat Facebook 499 00:23:01,510 --> 00:23:06,440 praat natuurlik dieselfde as 'n web bediener, die protokol HTTP sê dat 500 00:23:06,440 --> 00:23:09,930 elke keer as jy daarna besoek facebook.com, of dit nou 'n tweede 501 00:23:09,930 --> 00:23:13,560 later, 'n uur later, selfs die volgende dag, so lank as wat jy het nie uitdruklik 502 00:23:13,560 --> 00:23:17,050 aangeteken, wat effektief is soos om jou hande. 503 00:23:17,050 --> 00:23:20,280 HTTP sê jy moet jul hand stamp elke keer as jy 504 00:23:20,280 --> 00:23:22,020 terug te keer na die webwerf. 505 00:23:22,020 --> 00:23:24,390 >> Wat dan gebeur is Facebook hulle kyk na die hand en seël 506 00:23:24,390 --> 00:23:26,850 sê hulle, o, 123456789. 507 00:23:26,850 --> 00:23:30,260 Ek weet nie met die eerste oogopslag dat hierdie Dawid Malan in Cambridge, 508 00:23:30,260 --> 00:23:34,690 Massachusetts, maar hulle kan gaan hul databasis en sê, o, die persoon 509 00:23:34,690 --> 00:23:39,930 op wie se rekenaar wat ons geplant 123456789 Dawid Malan van Cambridge, 510 00:23:39,930 --> 00:23:40,440 Massachusetts. 511 00:23:40,440 --> 00:23:46,000 Kom ons wys dat die gebruiker dan sy profiel bladsy of sy Nuusvoer. 512 00:23:46,000 --> 00:23:49,660 >> Maar daar is 'n probleem hier as dit is hoe die web wel werk. 513 00:23:49,660 --> 00:23:51,390 Kom ons neem 'n blik op 'n vinnige voorbeeld. 514 00:23:51,390 --> 00:23:55,190 Kom ons eintlik gaan facebook.com om te sê. 515 00:23:55,190 --> 00:23:58,130 Maar voor ons daar kan gaan, laat my voort te gaan en maak Chrome se 516 00:23:58,130 --> 00:23:59,790 Inspekteur hier. 517 00:23:59,790 --> 00:24:01,140 Laat my kyk na die netwerk blad. 518 00:24:01,140 --> 00:24:06,020 En nou, laat ons gaan voort en tik in https://facebook.com. 519 00:24:06,020 --> 00:24:09,410 En ek doen dit sodat ons nie sien nie al daardie aansture en afval 520 00:24:09,410 --> 00:24:10,660 tyd soek deur dié. 521 00:24:10,660 --> 00:24:12,690 Laat my getref betree. 522 00:24:12,690 --> 00:24:13,130 >> Alle regte. 523 00:24:13,130 --> 00:24:14,580 Ons sien 'n hele klomp van die versoeke. 524 00:24:14,580 --> 00:24:15,640 Daar kom Facebook. 525 00:24:15,640 --> 00:24:16,930 Daar is 'n hele klomp van lêers. 526 00:24:16,930 --> 00:24:19,290 En hier, per my melding gemaak van latency laaste tyd, dit is 527 00:24:19,290 --> 00:24:21,240 'n baie HTTP versoeke. 528 00:24:21,240 --> 00:24:23,700 Maar die eerste een is waarskynlik die mees interessant. 529 00:24:23,700 --> 00:24:26,420 >> So laat se rol af hier, en Ek sal vergroot in 'n sekonde. 530 00:24:26,420 --> 00:24:29,090 Dit gaan 'n soort wees 'n gemors, maar laat ons sien. 531 00:24:29,090 --> 00:24:31,660 Facebook is die stuur van 'n hele klomp van die dinge. 532 00:24:31,660 --> 00:24:33,490 >> Maar hokaai, interessant. 533 00:24:33,490 --> 00:24:37,880 Hulle plant nie een nie, maar vier hand seëls op my hand hier. 534 00:24:37,880 --> 00:24:40,400 Set-koekie, Stel-koekie, set-koekie, set-koekie. 535 00:24:40,400 --> 00:24:44,030 En daar is 'n paar eienskappe hier. 536 00:24:44,030 --> 00:24:46,170 Almal van hulle noem 'n paar soort van verstryking. 537 00:24:46,170 --> 00:24:50,090 En dit lyk soos Facebook hoop my om te onthou tot 2015. 538 00:24:50,090 --> 00:24:53,670 So dit is vermoedelik die tyd wat Ek moet meld of hulle sal net 539 00:24:53,670 --> 00:24:55,710 outomaties dink ek is kom nie terug nie. 540 00:24:55,710 --> 00:24:57,840 So dit is eintlik 'n ordentlike bedrag van die tyd. 541 00:24:57,840 --> 00:24:59,170 >> En daar is 'n paar ander dinge hier aangaan nie. 542 00:24:59,170 --> 00:25:03,036 Hierdie koekie blyk te wees met geweld verwyder deur te sê dit verval in 1970 543 00:25:03,036 --> 00:25:04,460 voordat koekies bestaan. 544 00:25:04,460 --> 00:25:06,510 So die leser is net gaan om aan te neem OK, dis soos 545 00:25:06,510 --> 00:25:07,910 die hande was stempel. 546 00:25:07,910 --> 00:25:11,240 >> Maar nou dat my leser maak 'n daaropvolgende versoek - 547 00:25:11,240 --> 00:25:14,340 Laat my gaan voort en doen dit weer en laai. 548 00:25:14,340 --> 00:25:18,170 Nou laat my terug blaai om die top versoek en gaan af 549 00:25:18,170 --> 00:25:20,760 hier, versoek kop. 550 00:25:20,760 --> 00:25:21,390 Let op hierdie. 551 00:25:21,390 --> 00:25:25,280 So nou is ek onder geen reaksie kop, maar sien dit sê versoek kop. 552 00:25:25,280 --> 00:25:29,220 En sien dat my leser as deel van sy versoek na die slaan herlaai het 553 00:25:29,220 --> 00:25:32,780 gestuur om ten minste die volgende inligting. 554 00:25:32,780 --> 00:25:34,670 Nie set-koekie, maar koekie. 555 00:25:34,670 --> 00:25:38,750 So dit is die lyn, die HTTP kop so om te praat, waar my leser is 'n soort 556 00:25:38,750 --> 00:25:43,340 van sonder my wete dat dit aanbied my hand vir Facebook se inspeksie. 557 00:25:43,340 --> 00:25:46,020 >> So hierdie koekies kan wees gebruik dan vir wat? 558 00:25:46,020 --> 00:25:49,420 Om te onthou wie jy is, of onthou hoe baie keer het jy al daar was, of 559 00:25:49,420 --> 00:25:50,280 regtig iets nie. 560 00:25:50,280 --> 00:25:52,742 >> So hier is counter.php. 561 00:25:52,742 --> 00:25:53,780 En laat my zoom in op die skrif. 562 00:25:53,780 --> 00:25:58,380 En elke keer as ek herlaai die bladsy, sien dit is om te onthou hoeveel keer 563 00:25:58,380 --> 00:25:59,250 Ek het daar gewees het. 564 00:25:59,250 --> 00:26:00,570 Wel, dit is nie al wat indrukwekkend. 565 00:26:00,570 --> 00:26:03,140 Laat ons net naby dat blad en nou, laat ons terug te gaan 566 00:26:03,140 --> 00:26:07,860 http://localhost/counter.php. 567 00:26:07,860 --> 00:26:08,970 >> O ja, dit is interessant. 568 00:26:08,970 --> 00:26:10,960 Dit is nog steeds onthou, selfs al het ek die blad. 569 00:26:10,960 --> 00:26:14,010 En eerlik, as ek naby die leser, indien geïmplementeer in die regte manier, het ek 570 00:26:14,010 --> 00:26:18,950 kon nog onthou dat die gebruiker is wat hy of sy vir die eerste keer, en 571 00:26:18,950 --> 00:26:22,840 slegs een keer gaan ek in Chrome se spyskaart, wat hier is hier, en gaan na 572 00:26:22,840 --> 00:26:25,990 Geskiedenis, en klik Duidelike navigeer Data, as sommige van u mag hê in die 573 00:26:25,990 --> 00:26:33,050 verlede, Slegs dan sal julle koekies eintlik verwyder word tydens web 574 00:26:33,050 --> 00:26:33,970 ontwikkeling. 575 00:26:33,970 --> 00:26:35,340 >> So, as ons gaan - 576 00:26:35,340 --> 00:26:37,080 laat toemaak gedit hier. 577 00:26:37,080 --> 00:26:38,910 En as ons nou na hierdie lêer. 578 00:26:38,910 --> 00:26:44,210 Laat my gaan in ons vhosts / localhost / publiek, en laat my doen 579 00:26:44,210 --> 00:26:46,340 counter.php. 580 00:26:46,340 --> 00:26:48,350 Let daarop dat hierdie is 'n mooi eenvoudige program. 581 00:26:48,350 --> 00:26:50,250 Dit is 'n mooi eenvoudige webblad. 582 00:26:50,250 --> 00:26:51,770 >> So die top van die lêer is net kommentaar. 583 00:26:51,770 --> 00:26:54,930 Maar hier is 'n nuwe lyn wat jy kan gesien het reeds in p-set sewe, 584 00:26:54,930 --> 00:26:56,000 session_start (). 585 00:26:56,000 --> 00:27:00,380 Dit is 'n lyn van PHP kode wat wese vertel die web bediener, maak 586 00:27:00,380 --> 00:27:03,400 seker hande te stamp en maak seker hand seëls te keur. 587 00:27:03,400 --> 00:27:06,810 Dit is al wat in die lyn nie, en dit doen al van die proses vir ons. 588 00:27:06,810 --> 00:27:09,510 Toe sien ek net het twee takke hier. 589 00:27:09,510 --> 00:27:14,150 As die toonbank sleutel binnekant van hierdie spesiale globale veranderlike genoem 590 00:27:14,150 --> 00:27:18,010 $ _SESSION Gestel is - met ander woorde, indien daar is 'n paar waarde daar - 591 00:27:18,010 --> 00:27:22,440 Kom ons kry dit en stoor dit in 'n plaaslike veranderlike genaamd $ toonbank. 592 00:27:22,440 --> 00:27:27,000 Anders, laat se toewys $ toonbank die verstek waarde van 0. 593 00:27:27,000 --> 00:27:30,320 >> Nou hier is een aspek van PHP wat beide 'n seën en 'n vloek. 594 00:27:30,320 --> 00:27:32,080 PHP is 'n bietjie slordig. 595 00:27:32,080 --> 00:27:35,160 So terwyl dit in C, wat sou die omvang van die toonbank was 596 00:27:35,160 --> 00:27:36,725 hetsy hier of hier? 597 00:27:36,725 --> 00:27:39,270 598 00:27:39,270 --> 00:27:41,690 >> Dit sou gewees het beperk aan diegene krullerige draadjies. 599 00:27:41,690 --> 00:27:42,090 Raai wat? 600 00:27:42,090 --> 00:27:46,920 In PHP, dit bestaan ​​selfs buite van daardie krulhakies, hier, en hier, 601 00:27:46,920 --> 00:27:49,120 en hier, en hier, en selfs onder. 602 00:27:49,120 --> 00:27:52,400 So ek sê dit is 'n seën in die sin dat jy nie hoef te dink as 603 00:27:52,400 --> 00:27:54,070 hard soos ons gedoen het weke gelede. 604 00:27:54,070 --> 00:27:56,880 Maar dit is ook 'n bietjie van 'n vloek in daardie maak nie saak waar jy gebruik om 'n veranderlike in 605 00:27:56,880 --> 00:28:00,020 PHP, ten minste in 'n program soos hierdie, dit is wêreldwyd toeganklik vir 606 00:28:00,020 --> 00:28:01,170 'n beter of vir slegter. 607 00:28:01,170 --> 00:28:06,130 So jy moet in gedagte hou nou dat jou veranderlikes mag nie gedefinieer. 608 00:28:06,130 --> 00:28:07,640 Jy kan gedefinieer het hulle elders. 609 00:28:07,640 --> 00:28:09,460 >> Maar wat gaan ek uiteindelik doen? 610 00:28:09,460 --> 00:28:13,160 Ek gaan binne-in stoor van die globale veranderlike as 'n waarde van die 611 00:28:13,160 --> 00:28:17,060 toonbank sleutel om die gevolg van doen toonbank plus 1. 612 00:28:17,060 --> 00:28:18,910 So dit is net die rekenkundige wat nie die 613 00:28:18,910 --> 00:28:20,590 incrementation van die toonbank. 614 00:28:20,590 --> 00:28:24,850 En die feit dat ek die stoor wat waarde terug in hier is middel tot 615 00:28:24,850 --> 00:28:29,970 wese werk die databasis te onthou dat gebruiker 123456789 was 616 00:28:29,970 --> 00:28:31,010 hier twee keer. 617 00:28:31,010 --> 00:28:33,780 En toe ek dit weer doen die volgende keer wat ek herlaai die bladsy, dit gaan om seker te maak 618 00:28:33,780 --> 00:28:36,710 my hand stamp en sê, o, gebruiker 123456789 het nou 619 00:28:36,710 --> 00:28:38,410 hier is drie keer. 620 00:28:38,410 --> 00:28:43,390 >> En ja, wat PHP en soortgelyke tale doen vir ons is hulle gereken 621 00:28:43,390 --> 00:28:47,720 hoe en waar en vir hoe lank waardes in hierdie spesiale te stoor 622 00:28:47,720 --> 00:28:48,830 superglobal. 623 00:28:48,830 --> 00:28:52,750 En dit superglobal die volgende keer wat ek besoek die bladsy is 'n soort van mettertyd 624 00:28:52,750 --> 00:28:57,440 pre-bevolk, gevul met waardes wat Daar was die laaste keer wat jy besoek het, 625 00:28:57,440 --> 00:29:02,310 of dit was 'n tweede gelede, 'n week gelede, of in 2013, en ons praat nou 626 00:29:02,310 --> 00:29:03,790 oor 2015. 627 00:29:03,790 --> 00:29:07,600 PHP en die web bediener neem sorg van al wat vir jou. 628 00:29:07,600 --> 00:29:08,850 >> Publiek: [onhoorbaar]. 629 00:29:08,850 --> 00:29:11,900 630 00:29:11,900 --> 00:29:15,760 >> David Malan: Veranderlikes in PHP is wese altyd globale tensy jy 631 00:29:15,760 --> 00:29:18,400 verklaar hulle binnekant van 'n funksie, en dan is hulle plaaslike te 632 00:29:18,400 --> 00:29:19,420 slegs die funksie. 633 00:29:19,420 --> 00:29:22,300 Maar omdat ek nie geskryf enige funksies, hulle is nou effektief 634 00:29:22,300 --> 00:29:25,090 globale regdeur my hele lêer hier. 635 00:29:25,090 --> 00:29:26,040 >> Publiek: Is daar 'n manier hulle plaaslike te maak? 636 00:29:26,040 --> 00:29:28,470 >> David Malan: Is daar enige manier om hulle plaaslike te maak? 637 00:29:28,470 --> 00:29:30,680 Slegs deur die wikkel hulle in funksies. 638 00:29:30,680 --> 00:29:32,790 Wat in die jongste weergawe van PHP, kan jy dit doen met 639 00:29:32,790 --> 00:29:34,130 'n anonieme funksie. 640 00:29:34,130 --> 00:29:35,930 Maar meer op wat in die konteks van JavaScript. 641 00:29:35,930 --> 00:29:37,260 Maar die kort antwoord is nee. 642 00:29:37,260 --> 00:29:40,888 'N lang antwoord is ja. 643 00:29:40,888 --> 00:29:42,380 Nice. 644 00:29:42,380 --> 00:29:43,380 Goeie quiz vraag. 645 00:29:43,380 --> 00:29:43,930 Alle regte. 646 00:29:43,930 --> 00:29:47,760 >> So laastens, die bladsy self is eintlik redelik eenvoudig. 647 00:29:47,760 --> 00:29:51,470 Let daarop dat wanneer ek verlaat PHP af, onthou dat al hierdie dinge af 648 00:29:51,470 --> 00:29:53,700 hieronder is net gaan om te spoeg raak uit rou aan die leser. 649 00:29:53,700 --> 00:29:57,050 Wat is goed, want ek wil stuur die gebruiker 'n paar HTML, maar ek wil 650 00:29:57,050 --> 00:29:59,140 om dinamiese werk wat HTML. 651 00:29:59,140 --> 00:30:03,930 En een manier wat ek kan doen is om te sorteer baie vinnig daal terug in PHP 652 00:30:03,930 --> 00:30:07,730 modus, gebruik oop bracket vraagteken gelyke teken en dan uitvoer die waarde 653 00:30:07,730 --> 00:30:08,650 van die toonbank. 654 00:30:08,650 --> 00:30:12,360 >> Of as dit lyk 'n bietjie kripties, hierdie gelyk teken is eintlik net 'n paar 655 00:30:12,360 --> 00:30:16,190 sintaktiese suiker vir hierdie printf ($ toonbank). 656 00:30:16,190 --> 00:30:19,160 Maar eerlik, dit is net 'n bietjie lelik en 'n klein irriterende te tik. 657 00:30:19,160 --> 00:30:23,660 So PHP bied 'n baie mooi hierdie funksie waar jy kan net sê dat dit meer 658 00:30:23,660 --> 00:30:25,450 saaklik op dieselfde manier. 659 00:30:25,450 --> 00:30:26,940 >> So wat gaan aan onder die enjinkap? 660 00:30:26,940 --> 00:30:31,210 Kom ons vinnig kyk na die netwerk blad hier vir counter.php. 661 00:30:31,210 --> 00:30:35,090 En laat my voor en eers toe laat se duidelike jou koekies. 662 00:30:35,090 --> 00:30:38,670 Kom ons duidelik op data sedert die begin van die tyd. 663 00:30:38,670 --> 00:30:39,680 Kom ons gaan terug oor hier en nou. 664 00:30:39,680 --> 00:30:41,340 Nou laat herlaai die bladsy. 665 00:30:41,340 --> 00:30:42,170 En ek is terug op nul. 666 00:30:42,170 --> 00:30:44,810 Omdat my hand stempel gewas is, Ek kry nou 'n nuwe koekie. 667 00:30:44,810 --> 00:30:48,780 >> Inderdaad as ek kyk na die blad netwerk en kyk na reaksie kop, kennisgewing 668 00:30:48,780 --> 00:30:51,960 dat die toestel stuur my 'n koekie wie se naam is ietwat 669 00:30:51,960 --> 00:30:55,820 arbitrêr nie, maar soort redelik, PHPSESSID. 670 00:30:55,820 --> 00:30:58,440 En dit is vir my gestuur het dit regtig groot ewekansige getal. 671 00:30:58,440 --> 00:30:59,440 Dit is nie heeltemal 'n nommer. 672 00:30:59,440 --> 00:31:00,390 Dit is nie heeltemal heksadesimale. 673 00:31:00,390 --> 00:31:03,600 Dit is 'n soort van alfanumeriese string, maar vermoedelik is dit lukraak. 674 00:31:03,600 --> 00:31:06,830 En dit is die hand stamp so aan spreek dat ek verwys. 675 00:31:06,830 --> 00:31:11,960 >> Intussen as ek kliek herlaai en dan kyk na hierdie tweede lyn vir my tweede 676 00:31:11,960 --> 00:31:17,600 versoek, kennisgewing nou dat my versoek kop sluit PHPSESSID gelyk het, 677 00:31:17,600 --> 00:31:19,390 nie ingestel-koekie nie, maar net koekie. 678 00:31:19,390 --> 00:31:22,950 En dit is die aanbieding my browser se van my hand stamp. 679 00:31:22,950 --> 00:31:28,820 >> So nou as 'n teaser, en ons sal praat meer hieroor in 'n week of so, maar 680 00:31:28,820 --> 00:31:31,590 hoe laat dit jou kwesbaar, Facebook rekening 681 00:31:31,590 --> 00:31:34,137 kwesbaar, en ander sulke rekeninge kwesbaar? 682 00:31:34,137 --> 00:31:35,510 >> Publiek: As iemand 'jou koekie. 683 00:31:35,510 --> 00:31:36,750 >> David Malan: Ja, as iemand het jou koekie. 684 00:31:36,750 --> 00:31:39,920 Ek bedoel waarlik, net soos sommige van julle dalk probeer het om soos 'n klub of 'n 685 00:31:39,920 --> 00:31:44,030 pretpark, as jy probeer om iets soos hierdie die stempel te kopieer, al is dit 686 00:31:44,030 --> 00:31:47,560 terug op 'n ander persoon se hand, en dan kan hy of sy dit aanbied as 687 00:31:47,560 --> 00:31:53,250 hul eie, as dit eintlik lyk identies, 123456789, dan is die web 688 00:31:53,250 --> 00:31:57,980 bediener is glo net gaan vertrou dat die gebruiker is nie. 689 00:31:57,980 --> 00:32:01,450 >> En dit is inderdaad 'n fundamentele bedreiging enige tyd wat jy gebruik koekies 690 00:32:01,450 --> 00:32:05,420 want as iemand wat net bestookt so te praat jou koekie, figure uit wat dit 691 00:32:05,420 --> 00:32:08,660 is, hetsy deur waarlik, dit kopiëring deur te kyk na jou rekenaar 692 00:32:08,660 --> 00:32:09,890 en om soos, OK. 693 00:32:09,890 --> 00:32:14,520 Dawid se koekie is JJ3JIK en so meer, en dan het hulle is slim genoeg om te weet 694 00:32:14,520 --> 00:32:18,080 hoe om te soort van die hand stuur wat koekie van 'n leser of van 'n 695 00:32:18,080 --> 00:32:22,350 program wat hulle skryf, kon hulle heeltemal meld in 'n webwerf as jy. 696 00:32:22,350 --> 00:32:28,560 Dit is nie so moeilik om te maak asof wees iemand anders as ons weer p-reeks 697 00:32:28,560 --> 00:32:30,790 twee, wat bekend gestel wat? 698 00:32:30,790 --> 00:32:32,065 >> Publiek: Kriptografie. 699 00:32:32,065 --> 00:32:33,860 >> David Malan: 'n bietjie bietjie van kriptografie. 700 00:32:33,860 --> 00:32:36,550 Eenvoudige kriptografie, ten minste in die standaard uitgawe, maar crypto 701 00:32:36,550 --> 00:32:36,870 nietemin. 702 00:32:36,870 --> 00:32:37,410 minder. 703 00:32:37,410 --> 00:32:41,440 So dit blyk of jy enkripteer al hierdie hoofde gebruik van iets wat jy 704 00:32:41,440 --> 00:32:48,770 dalk nou weet meer vertroulik as SSL, Secure Socket Layer, of https:// URLs, 705 00:32:48,770 --> 00:32:51,890 dan sal al hierdie dinge ons het al skrams by eintlik geïnkripteer, 706 00:32:51,890 --> 00:32:54,800 wat beteken dat dit is soos jy kan nie die hand stempel lees. 707 00:32:54,800 --> 00:32:59,350 Slegs facebook.com kan, of google.com, of in hierdie geval, die toestel kan 708 00:32:59,350 --> 00:33:00,550 lees dat die hand stamp. 709 00:33:00,550 --> 00:33:04,020 >> Tragies al is, en weer, dit is al te toepaslike met die NSA dinge 710 00:33:04,020 --> 00:33:06,410 van die laat, selfs SSL is breekbaar. 711 00:33:06,410 --> 00:33:09,850 En dit is eintlik nie so moeilik selfs kraak wat enkripsie. 712 00:33:09,850 --> 00:33:12,040 Nie soseer deur krake die kodering, maar deur tricking die 713 00:33:12,040 --> 00:33:15,720 leser in decrypten die data voortydig. 714 00:33:15,720 --> 00:33:17,880 Maar weereens, sal ons terg jy met wat voor lank. 715 00:33:17,880 --> 00:33:21,242 Vir nou, net bang wees nie. 716 00:33:21,242 --> 00:33:23,070 Dit is tragies soort waar. 717 00:33:23,070 --> 00:33:23,760 >> Alle regte. 718 00:33:23,760 --> 00:33:27,910 So, waar kom dit nou laat ons? 719 00:33:27,910 --> 00:33:29,010 Wel, laat ons dit doen. 720 00:33:29,010 --> 00:33:31,790 Kom ons gaan voort en neem 'n vinnige teaser voordat ons neem 'n breek. 721 00:33:31,790 --> 00:33:33,790 En ek dink ons ​​sal 'n bietjie langer vertoef vandag, maar ons gaan duik in 722 00:33:33,790 --> 00:33:37,850 iets splinternuut en sexy, wat sal skerp jou eetlus vir nog meer. 723 00:33:37,850 --> 00:33:38,950 So wat is die breker. 724 00:33:38,950 --> 00:33:41,520 >> So SQL, ons begin praat oor ooit so kortliks laaste tyd. 725 00:33:41,520 --> 00:33:44,670 Jy sal regtig jou hande vuil kry met 'n paar van dit in p-reeks sewe. 726 00:33:44,670 --> 00:33:46,480 En in leketaal, wat beteken SQL - 727 00:33:46,480 --> 00:33:47,110 S-Q-L - 728 00:33:47,110 --> 00:33:49,850 vir jou doen? 729 00:33:49,850 --> 00:33:50,310 Wat is dit? 730 00:33:50,310 --> 00:33:51,546 Ja. 731 00:33:51,546 --> 00:33:53,240 >> GEHOOR: Kom ons jou toegang data. 732 00:33:53,240 --> 00:33:53,360 >> David Malan: Ja. 733 00:33:53,360 --> 00:33:55,120 Dit laat jou toegang data in 'n databasis. 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 wese 'n programmeertaal. 736 00:33:59,890 --> 00:34:03,400 Daar is kenmerke van dit wat Ons sal nie eens in die klas gebruik. 737 00:34:03,400 --> 00:34:04,710 Maar jy kan effektief definieer funksies. 738 00:34:04,710 --> 00:34:06,870 Hulle is geroep gestoor prosedures in SQL. 739 00:34:06,870 --> 00:34:09,860 Maar ons sal dit hou redelik eenvoudig en net gebruik dit vir 'n paar basiese operasies 740 00:34:09,860 --> 00:34:14,320 soos die kies van data, data in te opdatering van data, en die verwydering van data. 741 00:34:14,320 --> 00:34:17,400 >> En jy kan nie regtig dink aan 'n databasis, soos 'n SQL databasis, as net 742 00:34:17,400 --> 00:34:18,800 om Microsoft Excel. 743 00:34:18,800 --> 00:34:21,989 Omdat SQL verwys na 'n relasionele databasis, waar 744 00:34:21,989 --> 00:34:23,480 verhouding beteken net tafels. 745 00:34:23,480 --> 00:34:24,739 Rye en kolomme. 746 00:34:24,739 --> 00:34:27,929 So iets is wat jy kan sit in 'n sigblad soos hierdie of Google Docs, 747 00:34:27,929 --> 00:34:32,460 jy kan dit in 'n SQL databasis deur waarby 'n tafel. 748 00:34:32,460 --> 00:34:34,800 >> Nou, hoe kan jy eintlik toegang daardie inligting? 749 00:34:34,800 --> 00:34:38,239 Wel, met opdragte of navrae soos hierdie. 750 00:34:38,239 --> 00:34:40,199 KIES, voeg, te verander en verwyder. 751 00:34:40,199 --> 00:34:44,489 En vir die grootste deel, dit is die slegs vier bestanddele wat jy nodig het om te 752 00:34:44,489 --> 00:34:47,370 doen iets heeltemal kragtig in probleem die sewe. 753 00:34:47,370 --> 00:34:49,940 >> Nou terug in die dag, sou jy eintlik interaksie met 'n databasis in 'n 754 00:34:49,940 --> 00:34:52,730 swart en wit terminale venster op 'n flikkerende vinnige soos hierdie. 755 00:34:52,730 --> 00:34:56,370 En die databasis wat ons loop op die toestel genoem MySQL, wat 756 00:34:56,370 --> 00:34:58,560 gratis en open source databasis enjin. 757 00:34:58,560 --> 00:35:02,240 As jy Google en lees die Wikipedia artikel, sal jy weet dat die naam 758 00:35:02,240 --> 00:35:05,060 'n bietjie van oorgang vir 'n paar weergawes van Linux. 759 00:35:05,060 --> 00:35:10,460 Maria databasis is eintlik 'n opdok om so te praat van MySQL. 760 00:35:10,460 --> 00:35:12,740 >> Lang storie kort, Oracle gekoop MySQL. 761 00:35:12,740 --> 00:35:13,870 Oracle is 'n groot maatskappy. 762 00:35:13,870 --> 00:35:17,010 Mense is bekommerd dat dit sou nie meer bly redelik as open source, 763 00:35:17,010 --> 00:35:20,930 so dit is net 'n afskrif van MySQL wat nog steeds gratis, nog steeds open source, en 764 00:35:20,930 --> 00:35:23,550 geïnstalleer in Fedora Linux by verstek. 765 00:35:23,550 --> 00:35:26,130 >> Maar dit is 'n soort van 'n pyn in die nek om kennis te maak met 'n 766 00:35:26,130 --> 00:35:27,310 databasis op hierdie manier. 767 00:35:27,310 --> 00:35:30,560 Sodat ons sluit in die CS50 toestel 'n gratis open source instrument genoem 768 00:35:30,560 --> 00:35:31,700 phpMyAdmin. 769 00:35:31,700 --> 00:35:33,940 Net 'n toeval dat dit is geskryf in PHP. 770 00:35:33,940 --> 00:35:36,450 Daar is geen fundamentele nodig het vir PHP hier. 771 00:35:36,450 --> 00:35:40,090 Maar dit is net 'n web-gebaseerde instrument wat ons gratis afgelaai, geïnstalleer in 772 00:35:40,090 --> 00:35:43,850 die toestel, wat ons toelaat om 'n te hê grafiese gebruikerskoppelvlak waarmee 773 00:35:43,850 --> 00:35:48,610 die p-set sewe databasis te verken met wat nuwe databasis te skep, 774 00:35:48,610 --> 00:35:51,980 sê vir jou eie finale projek as jy wil hou, en uiteindelik skep 775 00:35:51,980 --> 00:35:55,900 dinamiese webwerwe soos CS50 Finansies wat u toelaat om data te bevraagteken en 776 00:35:55,900 --> 00:35:58,140 werk data dinamies. 777 00:35:58,140 --> 00:36:01,420 >> Jy is nie van plan om te gebruik net 'n eenvoudige teks lêer of CSV. 778 00:36:01,420 --> 00:36:05,950 Jy kan selfs gebruik om 'n slim databasis program sodat jy meer kan voer 779 00:36:05,950 --> 00:36:10,240 gesofistikeerde navrae as net die lees deur alles lineêr. 780 00:36:10,240 --> 00:36:14,150 >> So byvoorbeeld, dit is wat ons gee julle uit die boks vir p-reeks sewe. 781 00:36:14,150 --> 00:36:18,280 Dit is 'n tafel met blykbaar ten minste drie kolomme, waarvan een is 782 00:36:18,280 --> 00:36:21,450 gebruikersnaam, waarvan een is hash, en die ander wat ID. 783 00:36:21,450 --> 00:36:26,200 >> Maar die interessante ding, en net om te terg een gedagte hier, gebruikersnaam 784 00:36:26,200 --> 00:36:29,270 is vermoedelik reeds unieke, reg? 785 00:36:29,270 --> 00:36:31,190 Ek bedoel, die meeste 'n webwerf, indien jy het 'n rekening het nie, is daar 786 00:36:31,190 --> 00:36:32,370 kan nie twee keisers. 787 00:36:32,370 --> 00:36:33,440 Daar kan nie twee Malans. 788 00:36:33,440 --> 00:36:34,950 Daar kan nie twee jharvards. 789 00:36:34,950 --> 00:36:35,600 Sy unieke. 790 00:36:35,600 --> 00:36:38,610 Andersins, het hulle nie weet wat jharvard dit eintlik. 791 00:36:38,610 --> 00:36:42,710 So wat kan die motivering vir ook met 'n derde kolom aan die linkerkant 792 00:36:42,710 --> 00:36:46,970 daar genoem ID, wat lyk soos 'n getal wat is insgelyks uniek? 793 00:36:46,970 --> 00:36:51,300 Dit voel 'n bietjie oorbodig om my met die eerste oogopslag. 794 00:36:51,300 --> 00:36:54,910 Hoekom is dit dalk dwingende te hê nie net uniek gebruikers, 795 00:36:54,910 --> 00:36:56,837 maar ook unieke nommers? 796 00:36:56,837 --> 00:36:59,460 >> Publiek: Hulle kon dieselfde wagwoord. 797 00:36:59,460 --> 00:37:01,720 >> David Malan: Mense kan hê dieselfde wagwoord, seker nie. 798 00:37:01,720 --> 00:37:03,900 Dit kan absoluut gebeur. 799 00:37:03,900 --> 00:37:08,270 Maar as hulle hierdie unieke gebruikersnaam, ek sou argumenteer dat dit nie regtig 800 00:37:08,270 --> 00:37:11,630 saak, want as hulle tik in hul gebruikersnaam, ek moet net hul te kyk 801 00:37:11,630 --> 00:37:15,060 wagwoord, hul hash daarvan. 802 00:37:15,060 --> 00:37:15,970 Hoekom anders? 803 00:37:15,970 --> 00:37:17,950 >> GEHOOR: Faster soek. 804 00:37:17,950 --> 00:37:18,680 >> David Malan: Faster soek. 805 00:37:18,680 --> 00:37:19,548 Hoekom? 806 00:37:19,548 --> 00:37:21,460 >> GEHOOR: ID is net een. 807 00:37:21,460 --> 00:37:24,040 >> David Malan: ID is net een karakter, of om presies te wees, dit is 'n nommer, 808 00:37:24,040 --> 00:37:26,910 so dit is waarskynlik 32 stukkies of iets soos dit. 809 00:37:26,910 --> 00:37:30,270 Terwyl die gebruikersnaam, blykbaar Jason Hirschhorn is daar is 'n soort van 810 00:37:30,270 --> 00:37:33,900 belaglik lang, en dit gaan neem my 'n baie meer tyd om te string 811 00:37:33,900 --> 00:37:40,910 vergelyk H-I-R-S-C-H-H-O-R-N, en miskien 'n / 0 of iets soos dit, ten einde 812 00:37:40,910 --> 00:37:45,100 op te kyk Jason, eerder as om net sê gee my gebruiker nommer twee. 813 00:37:45,100 --> 00:37:46,510 Dit is 32 stukkies. 814 00:37:46,510 --> 00:37:48,550 Dit is 'n enkele INT wat jy het om te vergelyk. 815 00:37:48,550 --> 00:37:52,150 En inderdaad, dit is presies die rede waarom databasisse geneig unieke ID's te wys aan 816 00:37:52,150 --> 00:37:53,710 rye in hulle. 817 00:37:53,710 --> 00:37:56,280 >> Nou wat ander data tipes is daar Behalwe INT en blykbaar 818 00:37:56,280 --> 00:37:57,160 snare soos hierdie? 819 00:37:57,160 --> 00:37:59,700 Wel, om meer behoorlike, SQL databasis, soos 820 00:37:59,700 --> 00:38:02,060 MySQL, het CHAR velde. 821 00:38:02,060 --> 00:38:05,320 En CHAR 'n bietjie misleidend is nie 'n enkele teken. 822 00:38:05,320 --> 00:38:10,290 'N CHAR veld in 'n MySQL databasis een of meer karakters nie, maar dit is 'n 823 00:38:10,290 --> 00:38:11,780 vaste aantal van karakters. 824 00:38:11,780 --> 00:38:15,710 >> So byvoorbeeld, as ek gaan oor na phpMyAdmin as jy dalk reeds het, of 825 00:38:15,710 --> 00:38:21,340 sal binnekort 'n probleem het naamlik die sewe en gaan om my databasis, en net vir die pret, 826 00:38:21,340 --> 00:38:25,700 laat ons 'n nuwe tabel genoem toets met net twee kolomme. 827 00:38:25,700 --> 00:38:27,160 Ek sal dan op gaan. 828 00:38:27,160 --> 00:38:30,070 En dit sal redelik vertroud, veral as jy geknoei 829 00:38:30,070 --> 00:38:31,130 om op jou eie. 830 00:38:31,130 --> 00:38:34,140 Hier het ek kan tik ID te skep 'n nuwe tabel van die tipe INT. 831 00:38:34,140 --> 00:38:37,770 Maar hier kan ek tik gebruikersnaam herskep wat vroeër tafel. 832 00:38:37,770 --> 00:38:40,700 En sien ek het 'n hele klomp tipes om van te kies. 833 00:38:40,700 --> 00:38:43,610 >> En dit is ook waarom phpMyAdmin is 'n soort van lekker. 834 00:38:43,610 --> 00:38:46,770 Dit is soort van self-onderrig in dat jy kan net 'n soort van punt en klik, en 835 00:38:46,770 --> 00:38:50,730 kyk na aftrekkieslyste, en hieruit aflei dat wat magte SQL gee. 836 00:38:50,730 --> 00:38:54,090 >> En inderdaad, as ek kies CHAR, het ek dan het die lengte, of hoe om te spesifiseer 837 00:38:54,090 --> 00:38:55,940 baie waardes, hoeveel karakters. 838 00:38:55,940 --> 00:39:00,090 So baie gemeenskaplike waardes is dinge soos 255, maar dit is 'n bietjie lank. 839 00:39:00,090 --> 00:39:02,250 Algemeen is agt vir 'n gebruikersnaam. 840 00:39:02,250 --> 00:39:03,590 Maar dit is 'n bietjie klein om hierdie dae. 841 00:39:03,590 --> 00:39:05,430 So dit is 'n ontwerp besluit. 842 00:39:05,430 --> 00:39:08,630 Is dit 8 karakters Max, 32, 255, 1000? 843 00:39:08,630 --> 00:39:09,830 Dit is regtig aan jou. 844 00:39:09,830 --> 00:39:12,350 Maar 'n CHAR veld is 'n vaste aantal. 845 00:39:12,350 --> 00:39:16,420 So kies te min en jy is soort geskroef as jy wil 'n langer gebruikersnaam. 846 00:39:16,420 --> 00:39:19,132 Kies te veel en wat is Die nadeel? 847 00:39:19,132 --> 00:39:20,820 >> GEHOOR: [onhoorbaar]. 848 00:39:20,820 --> 00:39:21,620 >> David Malan: Dit is verkwistende. 849 00:39:21,620 --> 00:39:24,835 Net soos in C, as jy 'n groter stuk van die geheue as jy nodig het, is jy 850 00:39:24,835 --> 00:39:27,190 net mors tyd en mors spasie. 851 00:39:27,190 --> 00:39:31,430 So as 'n alternatiewe, is daar Varchar, wat hierdie probleem oplos deur 852 00:39:31,430 --> 00:39:36,390 behandeling lengte nie as 'n vaste lengte, maar as 'n maksimum lengte, en die gebruik van 'n 853 00:39:36,390 --> 00:39:40,990 veranderlike aantal van karakters, wat dan geneig is om te gebruik net so baie karakters as wat jy 854 00:39:40,990 --> 00:39:42,710 werklik nodig het. 855 00:39:42,710 --> 00:39:43,670 Dit klink perfek. 856 00:39:43,670 --> 00:39:45,640 >> Hoekom kan ons nie ontslae raak van die CHAR data tik? 857 00:39:45,640 --> 00:39:48,500 Wat sou die nadeel van wees gebruik VARCHARs, wat klink 858 00:39:48,500 --> 00:39:51,644 soos dit is 'n mooi oorwinning? 859 00:39:51,644 --> 00:39:52,596 Ja? 860 00:39:52,596 --> 00:39:53,846 >> GEHOOR: [onhoorbaar]. 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 So as al jou data is dieselfde lengte, wat is die kommer? 864 00:40:01,101 --> 00:40:05,250 >> GEHOOR: Omdat jy mors data deur die vertel van hulle almal. 865 00:40:05,250 --> 00:40:09,060 >> David Malan: So as al jou data is dieselfde lengte, al is, wil ek argumenteer 866 00:40:09,060 --> 00:40:12,300 wat spesifiseer van 'n maksimum lengte op varchar is geen verskil tussen 867 00:40:12,300 --> 00:40:16,070 spesifiseer van 'n vaste lengte op CHAR indien jy weet dat die getal in advance. 868 00:40:16,070 --> 00:40:19,500 Maar daar is inderdaad, en ek sal sorteer uittreksel uit die antwoord van die werklikheid 869 00:40:19,500 --> 00:40:22,610 dat daar steeds 'n maksimum, wat kan wees irriterende, veral as jy 870 00:40:22,610 --> 00:40:25,920 ontmoeting 'n persoon se naam wat buitengewoon lank dat jy nie 871 00:40:25,920 --> 00:40:26,860 verwag. 872 00:40:26,860 --> 00:40:31,420 En dit is ook 'n bietjie minder doeltreffend om werklik te soek op VARCHARs as 873 00:40:31,420 --> 00:40:35,620 gekant teen soek karakters, veral vir 'n lang tafels wat baie en 874 00:40:35,620 --> 00:40:36,510 baie van die data. 875 00:40:36,510 --> 00:40:40,060 So ook hier, tematiese is weer geen ooglopende keuse. 876 00:40:40,060 --> 00:40:42,870 >> So net om te gee jou 'n gevoel van ander data tipes wat dalk van belang 877 00:40:42,870 --> 00:40:45,400 hetsy vir p-set sewe of in die toekoms, daar is INT. 878 00:40:45,400 --> 00:40:47,270 Daar is BIGINT, wat is soos 'n lang lang. 879 00:40:47,270 --> 00:40:48,880 Dit is geneig om 64 stukkies. 880 00:40:48,880 --> 00:40:51,640 Daar is DESIMALE, wat jy sien in die probleem stel, wat 'n baie 881 00:40:51,640 --> 00:40:55,300 skoner antwoord op die probleme wat ons ondervind met float en swaai 882 00:40:55,300 --> 00:40:55,980 punt onakkuraatheid. 883 00:40:55,980 --> 00:40:57,390 En dan is daar DATETIME. 884 00:40:57,390 --> 00:41:01,530 Daar is letterlik 'n data tipe wat om te lyk soos 'n jaar, 'n maand, 'n dag, 885 00:41:01,530 --> 00:41:03,730 en 'n uur, minuut en sekonde. 886 00:41:03,730 --> 00:41:07,470 >> Maar SQL databasis het ook ' dinge wat ons sal noem indekse. 887 00:41:07,470 --> 00:41:11,630 En 'n indeks is iets wat jy spesifiseer wanneer die skep van die tafel te 888 00:41:11,630 --> 00:41:15,720 maak soektogte en ander bedrywighede meer doeltreffend te maak. 889 00:41:15,720 --> 00:41:18,550 Spesifiek, daar is iets genoem die PRIMÊRE indeks wat jy kan 890 00:41:18,550 --> 00:41:19,440 verklaar soos volg. 891 00:41:19,440 --> 00:41:22,330 >> Ons het dit vir jou met die gebruikers tafel gee ons jou. 892 00:41:22,330 --> 00:41:26,160 Maar let as ek met die hand te herskep die gebruikers tafel hier gee 893 00:41:26,160 --> 00:41:27,110 dit 'n naam van die gebruikers. 894 00:41:27,110 --> 00:41:28,125 Ek het reeds aangedui ID. 895 00:41:28,125 --> 00:41:29,330 Ek vermeld INT. 896 00:41:29,330 --> 00:41:32,000 Ek gespesifiseerde gebruikernaam met maksimum 32 karakters. 897 00:41:32,000 --> 00:41:36,140 Maar as ons aanhou blaai in hierdie redelik groot venster, sien daar is 'n 898 00:41:36,140 --> 00:41:38,260 n klomp van die ander dinge wat ek kan gee. 899 00:41:38,260 --> 00:41:40,950 >> Een, kan ek spesifiseer eienskappe hou nie, jy weet wat, hierdie 900 00:41:40,950 --> 00:41:42,190 INT moet onderteken is nie. 901 00:41:42,190 --> 00:41:45,510 Ek wil nie negatiewe getalle, so laat ons maak dit nie onderteken is. 902 00:41:45,510 --> 00:41:48,660 Nietig is nie relevant hier, want Ek wil elke gebruiker te 903 00:41:48,660 --> 00:41:49,640 het 'n unieke nommer. 904 00:41:49,640 --> 00:41:50,830 Ek wil nie hê dit moet wees nul. 905 00:41:50,830 --> 00:41:52,330 >> Maar dit is interessant. 906 00:41:52,330 --> 00:41:57,780 Ek kan spesifiseer dat ID is óf die primêre sleutel van die databasis, of is dit 907 00:41:57,780 --> 00:42:00,620 unieke, of dit kruip, of volledige teks. 908 00:42:00,620 --> 00:42:05,630 So vir vandag se doeleindes, lang storie Kortom, 'n primêre middel wat dit sal 909 00:42:05,630 --> 00:42:10,570 beide konseptueel en tegnies die gebied wat ons gebruik om uniek 910 00:42:10,570 --> 00:42:12,140 identifiseer gebruikers. 911 00:42:12,140 --> 00:42:16,140 >> So as ons opkyk gebruikers, hierdie is 'n soort van 'n belofte om te kyk meestal deur 912 00:42:16,140 --> 00:42:17,370 dat n unieke identifikasie. 913 00:42:17,370 --> 00:42:21,930 En die databasis sal sorg dat as jy het 'n gebruiker nommer 3, kan jy nie 914 00:42:21,930 --> 00:42:25,400 fisies voeg 'n ander gebruiker met dieselfde nommer 3. 915 00:42:25,400 --> 00:42:28,380 Die databasis sal net weier jou veranderinge te stoor. 916 00:42:28,380 --> 00:42:32,310 Dit is 'n goeie ding, want jy kan jouself te beskerm van jouself. self 917 00:42:32,310 --> 00:42:34,270 >> Alternatiewelik, vir gebruiker. 918 00:42:34,270 --> 00:42:37,670 So het die tweede ry, onthou, is die rekening veld. 919 00:42:37,670 --> 00:42:41,860 So het die tweede ry is hier gebruikersnaam, soos ons gedoen het op die ver links daar. 920 00:42:41,860 --> 00:42:43,940 >> So wat anders kan ek wil spesifiseer? 921 00:42:43,940 --> 00:42:47,840 Ek is nie toegelaat nie, volgens SQL, twee primêre sleutels te spesifiseer. 922 00:42:47,840 --> 00:42:50,750 Jy kan 'n gesamentlike sleutel waar jy kyk na beide rigtings, maar hulle kan nie 923 00:42:50,750 --> 00:42:52,260 individueel primêre sleutels. 924 00:42:52,260 --> 00:42:54,750 So dit is buite die kwessie. 925 00:42:54,750 --> 00:42:56,040 So wat kan ek wil hê om van te kies? 926 00:42:56,040 --> 00:42:59,710 >> Wel, uniek maak, is soortgelyk in die gees tot 'n primêre sleutel waar jy spesifiseer hierdie 927 00:42:59,710 --> 00:43:03,570 veld sal uniek wees, maar dit is gaan nie die een wees wat 928 00:43:03,570 --> 00:43:04,410 Ek gebruik al die tyd. 929 00:43:04,410 --> 00:43:08,450 En ons gaan nie hierdie een te gebruik die tyd om watter rede weer? 930 00:43:08,450 --> 00:43:10,490 Dit is stadiger as moontlik dit is 'n lang rekening. 931 00:43:10,490 --> 00:43:11,740 Dit is net 'n vermorsing van tyd. 932 00:43:11,740 --> 00:43:16,140 >> Indeks, intussen, bepaal dat dit nie gaan om uniek te wees, maar ek wil graag 933 00:43:16,140 --> 00:43:19,470 jy jou magie te werk onder die kap om dit vinniger vir my om te 934 00:43:19,470 --> 00:43:21,420 soek op hierdie gebied. 935 00:43:21,420 --> 00:43:23,320 So is dit waarskynlik nie hier relevant. 936 00:43:23,320 --> 00:43:26,500 Vir gebruikersnaam, wil ek argumenteer dat Uniek maak, is 'n goeie antwoord. 937 00:43:26,500 --> 00:43:31,200 Maar veronderstel dat ons gemaak gebruikers meer interessant as net gebruikers, 938 00:43:31,200 --> 00:43:32,430 hashes en ID nommers. 939 00:43:32,430 --> 00:43:33,860 Wat gebeur as ons het mense volle name? 940 00:43:33,860 --> 00:43:37,700 Wat gebeur as ons het vir hulle spreek en ander data oor hulle? 941 00:43:37,700 --> 00:43:43,360 >> Wel, as jy spesifiseer dat 'n kolom in 'n databasis is opgeneem, wat beteken dat 942 00:43:43,360 --> 00:43:47,730 MySQL of Oracle, of wat ook al databasis jy gebruik, moet werk sy magie 943 00:43:47,730 --> 00:43:51,300 en die gebruik van 'n soort van fancy data struktuur soos 'n boom, of 'n tydstip waarop, of 'n 944 00:43:51,300 --> 00:43:55,940 hash tafel, of iets te waarborg dat wanneer jy soek vir data gebruik 945 00:43:55,940 --> 00:43:58,150 kies op daardie spesifieke gebied - 946 00:43:58,150 --> 00:44:01,310 wil wys my almal wat lewens op Oxford Street. 947 00:44:01,310 --> 00:44:02,540 'N navraag soos dit. 948 00:44:02,540 --> 00:44:06,250 As jy vooraf vasgestel dat jy wil 'n indeks op die veld, die 949 00:44:06,250 --> 00:44:09,050 soektogte sal baie wees, baie vinniger. 950 00:44:09,050 --> 00:44:12,090 >> As jy spesifiseer nie 'n indeks, die beste wat jy kan doen, is om 'n lineêre soek as 951 00:44:12,090 --> 00:44:13,030 dit is nie gesorteer. 952 00:44:13,030 --> 00:44:16,220 Maar as jy spesifiseer indeks, is die smart mense wat die databasis gemaak - 953 00:44:16,220 --> 00:44:19,340 mense soos jy wat nou bome weet en drieë en hash tabelle - 954 00:44:19,340 --> 00:44:23,220 sal outomaties bou so 'n data struktuur in die geheue om seker te maak dat 955 00:44:23,220 --> 00:44:26,050 hierdie soektogte is baie vinniger. 956 00:44:26,050 --> 00:44:29,660 >> TEKST is intussen soortgelyke in gees, maar kan jy wildcard te doen 957 00:44:29,660 --> 00:44:35,480 soek, wil wys my almal wat lewe op strate wat begin met die 958 00:44:35,480 --> 00:44:36,960 letter O vir watter rede ookal. 959 00:44:36,960 --> 00:44:38,850 Jy kan dit doen wildcard soektogte soos dit. 960 00:44:38,850 --> 00:44:45,880 Of, meer dwingende dinge soos show my almal wat die woord het - 961 00:44:45,880 --> 00:44:49,400 wys my almal wie se naam begin met 'n spesifieke brief. 962 00:44:49,400 --> 00:44:51,880 Jy kan soek vir dokumente op hierdie manier. 963 00:44:51,880 --> 00:44:52,630 Alle regte. 964 00:44:52,630 --> 00:44:55,760 >> So, ontwerp geleenthede daar potensieel. 965 00:44:55,760 --> 00:44:57,740 Daar is ander wat ek sal waai my hande. 966 00:44:57,740 --> 00:45:00,530 Dit blyk dat jy kan verskillende stoor enjins. 967 00:45:00,530 --> 00:45:04,390 En dit is meer as wat ons nodig arcane beslis vir die probleem wat sewe. 968 00:45:04,390 --> 00:45:06,920 By verstek, is julle ouens gebruik iets genoem InnoDB. 969 00:45:06,920 --> 00:45:10,910 Jy sal melding van hierdie iewers in sien phpMyAdmin se koppelvlak waarskynlik. 970 00:45:10,910 --> 00:45:14,130 Maar weet dat daar ander ontwerp besluite te neem wat van potensiële 971 00:45:14,130 --> 00:45:18,030 rente kom finale projekte indien jy iets doen web-gebaseerde. 972 00:45:18,030 --> 00:45:19,330 >> Maar laat hierdie ons doen. 973 00:45:19,330 --> 00:45:23,130 Kom ons gaan voort en sit dit op die skerm as 'n teaser vir 'n storie 974 00:45:23,130 --> 00:45:26,330 waarby jy 'n kamermaat, en 'n glas melk. 975 00:45:26,330 --> 00:45:28,240 Kom ons neem 'n twee minute of so hier breek. 976 00:45:28,240 --> 00:45:31,060 En as jy rondom kan vashou, laat kom terug, kyk 'n bietjie meer op SQL, en 977 00:45:31,060 --> 00:45:35,160 dan 'n bietjie van JavaScript met p-stel agt in gedagte. 978 00:45:35,160 --> 00:45:36,120 >> Alle regte. 979 00:45:36,120 --> 00:45:40,420 So, laat ons jy dink oor 'n hoek saak wat baie maklik kan ontstaan 980 00:45:40,420 --> 00:45:44,240 in die konteks van die gebruik van 'n databasis, of eerlik, selfs met behulp van werklike wêreld dinge 981 00:45:44,240 --> 00:45:46,280 hou OTM geld te kry. 982 00:45:46,280 --> 00:45:47,640 So hier is 'n yskas. 983 00:45:47,640 --> 00:45:50,040 Veronderstel jy een het ook in jou koshuiskamer of jou huis. 984 00:45:50,040 --> 00:45:54,990 En jy het 'n kamermaat, en albei jy regtig wil melk byvoorbeeld. 985 00:45:54,990 --> 00:45:57,210 >> Sodat jy by die huis kom van die klas een dag. 986 00:45:57,210 --> 00:45:58,490 Hy of sy is nog nie terug. 987 00:45:58,490 --> 00:45:59,180 Jy maak die yskas. 988 00:45:59,180 --> 00:46:00,870 Jy wil regtig 'n groot glas melk. 989 00:46:00,870 --> 00:46:01,820 Daar is geen melk. 990 00:46:01,820 --> 00:46:02,920 So, wat doen jy? 991 00:46:02,920 --> 00:46:03,840 Jy naby die yskas. 992 00:46:03,840 --> 00:46:04,670 Jy gryp jou sleutels. 993 00:46:04,670 --> 00:46:05,930 Jy gaan uit na die vierkant. 994 00:46:05,930 --> 00:46:09,240 En jy in die lyn by CVS by daardie self afhandeling dinge, wat altyd 995 00:46:09,240 --> 00:46:11,180 langer neem as wat werklik met kassiere. 996 00:46:11,180 --> 00:46:11,820 In elk geval. 997 00:46:11,820 --> 00:46:15,490 >> So dan, intussen, dot dot dot, jou kamermaat by die huis kom en hy of sy 998 00:46:15,490 --> 00:46:17,440 Net so het 'n hunkering vir 'n paar melk. 999 00:46:17,440 --> 00:46:20,380 Sodat hy of sy maak die yskas, lyk binnekant, en oh, damn. 1000 00:46:20,380 --> 00:46:21,160 Geen melk. 1001 00:46:21,160 --> 00:46:24,750 Sodat hy of sy kop uit, gebeur om te gaan aan die ander CVS, wat slegs 'n 1002 00:46:24,750 --> 00:46:27,900 blok weg vir een of ander rede, en hy of sy kry in lyn 'n bietjie melk te koop. 1003 00:46:27,900 --> 00:46:30,480 >> Intussen het jy by die huis kom, moet hy of het sy by die huis kom, en wat doen 1004 00:46:30,480 --> 00:46:31,980 jy uiteindelik het? 1005 00:46:31,980 --> 00:46:33,080 Twee keer soveel melk. 1006 00:46:33,080 --> 00:46:34,620 Maar jy het nie regtig soos melk wat veel. 1007 00:46:34,620 --> 00:46:37,300 So nou het jy so baie melk wat nou een van hulle is net gaan om te gaan suur 1008 00:46:37,300 --> 00:46:37,820 uiteindelik. 1009 00:46:37,820 --> 00:46:39,370 So, dit is 'n baie slegte probleem. 1010 00:46:39,370 --> 00:46:39,900 Reg? 1011 00:46:39,900 --> 00:46:41,990 >> So wat gebeur? 1012 00:46:41,990 --> 00:46:44,810 So fundamenteel, dit is 'n soort van 'n belaglike voorbeeld. 1013 00:46:44,810 --> 00:46:48,580 Maar onder die enjinkap, wat ons gehad het gebeur hier is albei van julle nagegaan 1014 00:46:48,580 --> 00:46:52,390 die toestand van 'n stuk van geheue, die yskas. 1015 00:46:52,390 --> 00:46:54,420 Beide van julle nagegaan die staat van sommige veranderlike. 1016 00:46:54,420 --> 00:46:57,360 Julle albei het 'n gevolgtrekking dat jy dan opgetree het. 1017 00:46:57,360 --> 00:47:01,420 Maar helaas, terwyl jou kamermaat was by die winkel, die staat van daardie 1018 00:47:01,420 --> 00:47:05,670 veranderlike verander, moet hy of sy kom terug en wil nou die toestand te verander, maar 1019 00:47:05,670 --> 00:47:07,480 dit is reeds verander aan hom of haar. 1020 00:47:07,480 --> 00:47:11,120 En natuurlik, sou hy of sy nie ' gegaan na die winkel as hulle geweet het 1021 00:47:11,120 --> 00:47:13,010 dat jy reeds op pad. 1022 00:47:13,010 --> 00:47:16,430 >> So in die werklike wêreld, hoe kan jy vermy die probleem, as jy het 1023 00:47:16,430 --> 00:47:18,940 'n yskas, jy het 'n kamermaat, en jy eintlik graag melk? 1024 00:47:18,940 --> 00:47:19,760 >> GEHOOR: Kommunikasie. 1025 00:47:19,760 --> 00:47:20,580 >> David Malan: Kommunikasie. 1026 00:47:20,580 --> 00:47:21,160 OK. 1027 00:47:21,160 --> 00:47:22,500 Maar hoe kan jy kommunikeer? 1028 00:47:22,500 --> 00:47:23,990 >> GEHOOR: Laat 'n nota. 1029 00:47:23,990 --> 00:47:25,480 >> David Malan: Skryf 'n nota, reg? 1030 00:47:25,480 --> 00:47:28,025 Altyd laat 'n nota, vir ondersteuners van die show. 1031 00:47:28,025 --> 00:47:31,580 Alle reg, so los altyd 'n aantekening, of sit werklik soos 'n slot of iets 1032 00:47:31,580 --> 00:47:35,440 op die yskas wat hou jou kamermaat van die inspeksie van die toestand van 1033 00:47:35,440 --> 00:47:36,540 daardie veranderlike. 1034 00:47:36,540 --> 00:47:40,800 >> Nou, kan waarom dit wees related aan probleem stel sewe, of OTM. 1035 00:47:40,800 --> 00:47:46,780 Wel, 'n wêreld in 'n OTM waar jy dalk in staat wees om te gaan na 'n OTM 1036 00:47:46,780 --> 00:47:48,920 masjien hier, en 'n ander OTM hier. 1037 00:47:48,920 --> 00:47:50,680 En dit gebeur dikwels. 1038 00:47:50,680 --> 00:47:54,150 En dink jy het twee OTM-kaarte, wat moontlik is te kry. 1039 00:47:54,150 --> 00:47:57,420 En jy meld in beide masjiene effektief gelyktydig, hopelik 1040 00:47:57,420 --> 00:47:58,660 Terwyl niemand is op soek. 1041 00:47:58,660 --> 00:48:01,260 En dan moet jy tik in jou PIN ongeveer gelyktydig. 1042 00:48:01,260 --> 00:48:06,280 En dan moet jy doen om 'n balans navraag om te sien hoeveel geld jy het. 1043 00:48:06,280 --> 00:48:08,920 En kom ons sê jy het $ 100 in jou rekening. 1044 00:48:08,920 --> 00:48:13,310 So in wese gelyktydig, jy sê die een, zero, zero, betree. 1045 00:48:13,310 --> 00:48:16,000 En jy hopelik terug te kry 'n bietjie geld. 1046 00:48:16,000 --> 00:48:18,440 >> Maar hoeveel geld kan jy terug te kry? 1047 00:48:18,440 --> 00:48:21,710 Nou rekenaars aan die einde van die dag, veral as hulle praat met 1048 00:48:21,710 --> 00:48:27,360 bedieners, nie noodwendig dinge doen in die einde wat verwag word. 1049 00:48:27,360 --> 00:48:30,860 >> So dink wat gebeur, as gevolg van watter netwerk spoed kwessies daar 1050 00:48:30,860 --> 00:48:34,530 is, of CPU kwessies daar is nie, of iets soos dit, veronderstel dat die 1051 00:48:34,530 --> 00:48:38,530 eerste OTM kontrole jou balans en sien, o, hierdie persoon het $ 100. 1052 00:48:38,530 --> 00:48:41,840 Maar dan kry afgelei want miskien 'n rugsteun gebeur en dit is dus 1053 00:48:41,840 --> 00:48:42,500 stadiger. 1054 00:48:42,500 --> 00:48:45,080 Of miskien, terwyl die ondersoek, die netwerk verband het 'n bietjie stadiger omdat 1055 00:48:45,080 --> 00:48:45,910 dit gebeur net. 1056 00:48:45,910 --> 00:48:47,100 Hulle is fisiese toestelle. 1057 00:48:47,100 --> 00:48:49,330 So intussen, die tweede OTM is vra dieselfde vraag. 1058 00:48:49,330 --> 00:48:53,030 Hoeveel geld het Dawid het? $ 100 is die antwoord. 1059 00:48:53,030 --> 00:48:58,930 Maar omdat die eerste ATM het nog nie gestuur is om die boodskap af te trek $ 100, beide 1060 00:48:58,930 --> 00:49:03,000 OTM geïnspekteer het die bank se kluis sien daar is $ 100 is daar, en nou 1061 00:49:03,000 --> 00:49:07,160 beide masjiene moontlik is gaan spoeg uit 'n antwoord. 1062 00:49:07,160 --> 00:49:12,240 >> Nou, dit is 'n groot vir jou in 'n sekere sin As wat die bank doen uiteindelik 1063 00:49:12,240 --> 00:49:17,200 word die bedrag verander minus 100 deur die opstel van die veranderlike gelyk aan jou 1064 00:49:17,200 --> 00:49:21,570 bankrekening gelyk aan 0, in teenstelling te doen minus 100. 1065 00:49:21,570 --> 00:49:24,410 Nou in die ergste geval vir die bank - 1066 00:49:24,410 --> 00:49:27,470 of in die beste vir die bank, intussen, hulle gee jou $ 200, en 1067 00:49:27,470 --> 00:49:31,690 jou bankrekening toon nou negatiewe $ 100, wat regtig nie 1068 00:49:31,690 --> 00:49:32,950 voordeel wat u op alle. 1069 00:49:32,950 --> 00:49:36,500 Maar die punt is dat hierdie ras voorwaarde vir twee kamermaats om 1070 00:49:36,500 --> 00:49:40,660 melk, of vir twee kitsbanke probeer om kontant te kry en verander die toestand van 'n kluis 1071 00:49:40,660 --> 00:49:44,510 op dieselfde tyd bestaan ​​enige tyd wat jy het 'n databasis. 1072 00:49:44,510 --> 00:49:48,290 >> Nou in probleem die sewe, hierdie kwessie ontstaan ​​in die sin dat as jy koop 'n 1073 00:49:48,290 --> 00:49:52,110 deel van Facebook voorraad, en dan vir byvoorbeeld jy koop 'n tweede deel van die 1074 00:49:52,110 --> 00:49:55,160 Facebook voorraad, wat jy nodig het om te maak 'n besluit as die programmeerder. 1075 00:49:55,160 --> 00:49:58,710 Ten einde te besluit hoe om die werk databasis, is kans jy gaan 1076 00:49:58,710 --> 00:50:02,250 het een ry vir die voorraad, en hierdie is een manier om dit te implementeer. 1077 00:50:02,250 --> 00:50:06,640 En jy gaan 'n aandeel te hê FB, wat hul voorraad ENKELE simbool 1078 00:50:06,640 --> 00:50:10,120 maak vir die gebruik, of hierdie gebruiker ID, die unieke identifikasie. 1079 00:50:10,120 --> 00:50:12,340 >> Maar dieselfde storie kan hier gebeur nie. 1080 00:50:12,340 --> 00:50:15,800 As jy 'n nie in SQL, as jy sien in probleem die sewe wanneer jy sien, 1081 00:50:15,800 --> 00:50:18,460 Ag, Dawid het 'n aandeel van Facebook voorraad. 1082 00:50:18,460 --> 00:50:23,240 Laat my nou verander om dit te wees twee aandele, want hy wil 'n te koop 1083 00:50:23,240 --> 00:50:24,120 tweede deel. 1084 00:50:24,120 --> 00:50:27,860 Maar veronderstel Dawid het eintlik twee vensters oop, of dink dat 1085 00:50:27,860 --> 00:50:32,150 dit is 'n gesamentlike rekening met twee gades, en beide van hulle probeer om uit te voer 1086 00:50:32,150 --> 00:50:36,770 dieselfde operasie, is daar ook die potensiaal bestaan ​​vir 'n besluit te wees 1087 00:50:36,770 --> 00:50:39,670 gemaak op grond van die vorige toestand van die wêreld - 1088 00:50:39,670 --> 00:50:41,290 die rekening het 'n aandeel - 1089 00:50:41,290 --> 00:50:45,630 en beide mense, of beide bedieners, nou probeer om te sê dit inkrementeer tot twee aandele. 1090 00:50:45,630 --> 00:50:49,020 Maar in hierdie geval, kan jy dalk aangekla het my geld vir beide aandele nie, maar 1091 00:50:49,020 --> 00:50:50,830 geinkrementeer net dat een keer. 1092 00:50:50,830 --> 00:50:54,730 >> Dus, in kort, die fundamentele probleem hier, soos met die grap oor die plasing van 'n 1093 00:50:54,730 --> 00:50:58,750 daarop, of om 'n slot op dit, is As twee mense, of twee drade - 1094 00:50:58,750 --> 00:50:59,930 dink terug te krap - 1095 00:50:59,930 --> 00:51:03,220 kan sien wat die toestand van 'n veranderlike en dan probeer om daardie veranderlike te verander, 1096 00:51:03,220 --> 00:51:07,950 maar dié twee dinge gebeur nie by die dieselfde tyd, maar kan onderbreek kry 1097 00:51:07,950 --> 00:51:11,500 deur ander dinge sien gebeur, data kan kry in 'n baie vreemde staat. 1098 00:51:11,500 --> 00:51:15,450 En jy kan voordeel trek of jy kan ly in die sin van die geld voorbeeld. 1099 00:51:15,450 --> 00:51:18,110 >> So in probleem stel sewe, gee ons u hierdie een lyn van kode, wat lank 1100 00:51:18,110 --> 00:51:21,000 storie kort, los hierdie probleem in MySQL. 1101 00:51:21,000 --> 00:51:24,950 Hierdie baie lang opdrag wat nie selfs pas op 'n lyn op die 1102 00:51:24,950 --> 00:51:30,370 skerm hier verseker dat jou operasie is wat genoem atoom. 1103 00:51:30,370 --> 00:51:33,720 Dit gebeur alles op een slag, of dit glad nie gebeur nie. 1104 00:51:33,720 --> 00:51:37,530 Hierdie baie lang gedeelte kan nie kry onderbreek gedeeltelik. 1105 00:51:37,530 --> 00:51:39,840 >> En wat dit doen, is letterlik wat dit sê. 1106 00:51:39,840 --> 00:51:44,200 Voeg in 'n paar tabel om die volgende drie velde daardie spesifieke waardes, 1107 00:51:44,200 --> 00:51:47,280 maar op duplikaatsleutel, doen nie 'n insetsel. 1108 00:51:47,280 --> 00:51:48,280 Doen 'n werk. 1109 00:51:48,280 --> 00:51:52,450 So dit is soos om 'n kies en 'n INSERT so te sê op dieselfde tyd. 1110 00:51:52,450 --> 00:51:55,150 En wat is die sleutel wat waarskynlik word hier verwys? 1111 00:51:55,150 --> 00:51:58,300 1112 00:51:58,300 --> 00:52:01,380 >> Dit blyk uit, en jy sal sien dit in probleem die sewe se spec, want 1113 00:52:01,380 --> 00:52:06,040 ons het daar verklaar 'n unieke sleutel tot op hierdie spesifieke tafel sodanig dat 1114 00:52:06,040 --> 00:52:08,480 jy kan nie meer rye vir dieselfde gebruiker met die 1115 00:52:08,480 --> 00:52:10,150 dieselfde pennie voorraad simbool - 1116 00:52:10,150 --> 00:52:13,780 In hierdie voorbeeld hier, DVN.V is 'n dom pennie voorraad dat ons 1117 00:52:13,780 --> 00:52:14,980 verwys na in die spec. 1118 00:52:14,980 --> 00:52:17,860 Want ons het verklaar dat dit om uniek te wees, wat dit beteken is dat as jy 1119 00:52:17,860 --> 00:52:23,580 probeer om 'n dubbele ry in te voeg, is jy plaas gaan om dit te werk sonder 1120 00:52:23,580 --> 00:52:27,020 enigiemand anders 'n kans om te verander die toestand van die wêreld nie. 1121 00:52:27,020 --> 00:52:29,400 Dus, in kort, dit verseker dinge atoom. 1122 00:52:29,400 --> 00:52:32,530 >> Meer in die algemeen al is, databasisse soos MySQL - 1123 00:52:32,530 --> 00:52:35,460 en jy nie hierdie funksie nie nodig vir p-die sewe, maar hou dit in gedagte het vir 1124 00:52:35,460 --> 00:52:36,200 die toekoms - 1125 00:52:36,200 --> 00:52:38,870 ondersteun wat transaksies genoem, waar jy kan sê 1126 00:52:38,870 --> 00:52:40,990 BEGIN TRANSAKSIE letterlik. 1127 00:52:40,990 --> 00:52:43,270 Jy kan dan voer twee SQL-stellings. 1128 00:52:43,270 --> 00:52:45,710 En 'n SQL-stelling, as jy sien in p-die sewe, lyk 'n bietjie 1129 00:52:45,710 --> 00:52:46,750 iets soos hierdie. 1130 00:52:46,750 --> 00:52:48,820 Werk 'n tabel genaamd rekening. 1131 00:52:48,820 --> 00:52:52,550 Stel die balans kolom gelyk aan watter die balans kolom tans 1132 00:52:52,550 --> 00:52:57,280 is minus 1000 waar die aantal, die rekeningnommer, soos die gebruiker ID, 1133 00:52:57,280 --> 00:53:00,830 gelyk aan 2, en dan werk rekening dot dot dot. 1134 00:53:00,830 --> 00:53:04,350 >> So in leketaal, nie wat hierdie twee navrae blyk te wees doen in die 1135 00:53:04,350 --> 00:53:05,840 werklike wêreld sin van die bank? 1136 00:53:05,840 --> 00:53:07,440 >> Publiek: Die oordrag te spaar. 1137 00:53:07,440 --> 00:53:08,020 >> David Malan: Presies. 1138 00:53:08,020 --> 00:53:10,470 Die oordrag van fondse van een rekening na die ander. 1139 00:53:10,470 --> 00:53:14,400 En dit is nog 'n voorbeeld waar jy regtig wil hierdie twee dinge gebeur 1140 00:53:14,400 --> 00:53:15,570 of nie gebeur nie. 1141 00:53:15,570 --> 00:53:18,880 Jy wil nie om iets te kry in die middel van hulle en potensieel gemors 1142 00:53:18,880 --> 00:53:22,220 die wiskunde, of gemors hoeveel die geld wat jy het, of hoeveel 1143 00:53:22,220 --> 00:53:23,170 geld die bank het. 1144 00:53:23,170 --> 00:53:26,890 So, wat is regtig nice oor transaksies in MySQL is dat, en 1145 00:53:26,890 --> 00:53:30,160 databasisse meer algemeen, is dat hulle en slim mense wat nog geïmplementeer 1146 00:53:30,160 --> 00:53:33,670 hierdie funksies uit te vind hoe om te maak seker dat beide van die dinge gebeur 1147 00:53:33,670 --> 00:53:35,120 of glad nie. 1148 00:53:35,120 --> 00:53:38,580 >> En as jy werklik aspirant te maak 'n webwerf wat gebruik word deur mense wat op 1149 00:53:38,580 --> 00:53:41,490 kampus, mense in die werklike wêreld, doen iets in die begin sin, 1150 00:53:41,490 --> 00:53:43,300 Dit is die soort van ontwerp besluite te neem wat 1151 00:53:43,300 --> 00:53:45,020 geword ooit so belangrik is. 1152 00:53:45,020 --> 00:53:48,240 Anders, kan jy begin om data te verloor, verloor gebruikers, of in die ergste geval as 1153 00:53:48,240 --> 00:53:51,800 Ons het hier te sien, potensieel geld verloor. 1154 00:53:51,800 --> 00:53:56,180 So weer, meer op wat in probleem stel sewe, sowel as miskien vir sommige van 1155 00:53:56,180 --> 00:53:57,530 jy in die finale projekte. 1156 00:53:57,530 --> 00:54:01,870 >> So laat verander dat die prentjie wat ons gehad het 'n oomblik gelede net in een manier. 1157 00:54:01,870 --> 00:54:04,070 So laat my eintlik sien as ek kan - 1158 00:54:04,070 --> 00:54:06,030 Nee, dis verby. 1159 00:54:06,030 --> 00:54:06,690 Daar is dit. 1160 00:54:06,690 --> 00:54:09,020 >> So dit is waar ons die laaste tyd oor. 1161 00:54:09,020 --> 00:54:12,390 En dit blyk ons ​​gaan gooi een ding in die mengsel hier - 1162 00:54:12,390 --> 00:54:14,510 'n taal, die sogenaamde JavaScript. 1163 00:54:14,510 --> 00:54:18,060 So JavaScript eintlik pas in hierdie stuk - 1164 00:54:18,060 --> 00:54:22,086 en ek het nie heeltemal laat genoeg ruimte, so dit is nie nou op die skaal. 1165 00:54:22,086 --> 00:54:23,900 OK, dit is regtig pateties. 1166 00:54:23,900 --> 00:54:27,075 OK, so dit is JavaScript. 1167 00:54:27,075 --> 00:54:27,340 Alle regte. 1168 00:54:27,340 --> 00:54:28,760 Ek is regtig om dit te doen 'n slegte. 1169 00:54:28,760 --> 00:54:29,390 Alle regte. 1170 00:54:29,390 --> 00:54:34,790 >> So JavaScript is nog 'n ontwikkeling taal, en ons laaste, as dit help 1171 00:54:34,790 --> 00:54:37,770 verseker dat daar nie veel meer van die brandkrane hier. 1172 00:54:37,770 --> 00:54:41,100 So JavaScript is ook 'n geïnterpreteer taal, wat beteken dat jy dit nie doen nie 1173 00:54:41,100 --> 00:54:42,670 stel dit in nulle en ene. 1174 00:54:42,670 --> 00:54:43,690 Jy moet net hardloop nie. 1175 00:54:43,690 --> 00:54:47,680 Maar wat is fundamenteel verskil met JavaScript is gewoonlik dat jy 1176 00:54:47,680 --> 00:54:49,815 nie loop dit op jou web bediener. 1177 00:54:49,815 --> 00:54:52,570 Dit maak nie hardloop raak in die toestel per se. 1178 00:54:52,570 --> 00:54:57,490 Eerder, word dit afgelaai deur 'n gebruiker via HTTP in die leser - 1179 00:54:57,490 --> 00:55:00,260 Chrome, Safari, Internet Explorer, Firefox, wat ook al - 1180 00:55:00,260 --> 00:55:03,860 en dit is die leser wat voer hierdie bepaalde programmeertaal. 1181 00:55:03,860 --> 00:55:08,000 >> So duidelik te wees, PHP dusver was uitgevoer óf by die opdrag lyn in 1182 00:55:08,000 --> 00:55:11,290 ons swart en wit venster op 'n bediener soos die toestel, 'n rekenaar 1183 00:55:11,290 --> 00:55:14,490 hou die toestel, of is dit ' uitgevoer deur 'n web bediener 1184 00:55:14,490 --> 00:55:15,860 loop op 'n rekenaar. 1185 00:55:15,860 --> 00:55:20,490 Maar die tema hier is dat PHP tot dusver uitgevoer is bediener-kant, so 1186 00:55:20,490 --> 00:55:24,820 die gebruiker en die gebruiker se webblaaier nooit sien 'n lyn van PHP-kode. 1187 00:55:24,820 --> 00:55:28,530 >> In werklikheid, as jy al ooit 'n leser oop te maak vir jou webwerf of 'n ander en jy 1188 00:55:28,530 --> 00:55:32,400 eintlik sien PHP-kode in jou venster, iemand het geskroef. 1189 00:55:32,400 --> 00:55:34,950 Want dit is nie bedoel om te wees gestuur word aan 'n leser direk. 1190 00:55:34,950 --> 00:55:38,150 Dit is veronderstel om te uitgevoer word en draai in iets soos HTML. 1191 00:55:38,150 --> 00:55:40,120 >> Maar JavaScript is in wese die teenoorgestelde. 1192 00:55:40,120 --> 00:55:44,350 Dit is bedoel om te loop gewoonlik binne van 'n gebruiker se venster. 1193 00:55:44,350 --> 00:55:46,840 En watter soort webwerwe gebruik JavaScript dan hierdie dae? 1194 00:55:46,840 --> 00:55:49,640 1195 00:55:49,640 --> 00:55:52,180 >> Soos letterlik elke gewilde webwerf. 1196 00:55:52,180 --> 00:55:55,430 Elke webwerf wat jy ouens waarskynlik gebruik daaglikse gebruik JavaScript vir die 1197 00:55:55,430 --> 00:55:57,330 eenvoudigste en selfs die sexyste funksies. 1198 00:55:57,330 --> 00:55:59,800 >> So iets soos Facebook Chat as jy dit gebruik. 1199 00:55:59,800 --> 00:56:01,040 Hoe is dit eintlik werk? 1200 00:56:01,040 --> 00:56:05,090 Wel, so ver, al die dinge wat ons het klaar is met HTML en PHP aanvaar dat 1201 00:56:05,090 --> 00:56:08,750 jy trek 'n URL en jy getref Tik, en jy sien 'n paar HTML inhoud. 1202 00:56:08,750 --> 00:56:11,970 En jy kliek op die skakel, wat verander die URL, verander die bladsy, en herlaadt 1203 00:56:11,970 --> 00:56:12,740 'n paar nuwe inhoud. 1204 00:56:12,740 --> 00:56:16,340 Klik 'n ander URL of stuur 'n vorm, wat jy raak geklits na 'n ander bladsy en 1205 00:56:16,340 --> 00:56:17,420 sien jy 'n paar nuwe inhoud. 1206 00:56:17,420 --> 00:56:22,710 >> Maar met behulp van iets soos Facebook Chat, of Gchat, of Google Maps, selde 1207 00:56:22,710 --> 00:56:27,350 het die hele bladsy te verfris sodanig dat sien jy 'n wit skerm vir 'n oomblik en 1208 00:56:27,350 --> 00:56:28,470 dan nuwe inhoud. 1209 00:56:28,470 --> 00:56:32,610 Inteendeel, webblaaie vandag is dinamies om weer op datum en 1210 00:56:32,610 --> 00:56:35,570 weer en weer al die soort van agter die skerms. 1211 00:56:35,570 --> 00:56:38,560 En dit blyk dat wanneer jy nie gaan iets soos Facebook, of Gchat, 1212 00:56:38,560 --> 00:56:43,050 of Gmail en die bladsy updates outomaties sonder herlaai die 1213 00:56:43,050 --> 00:56:47,630 hele skerm, wat gebeur het, is dat die leser het soort van die geheim gemaak 1214 00:56:47,630 --> 00:56:49,410 addisionele HTTP versoeke - 1215 00:56:49,410 --> 00:56:52,740 nie vir die hele web bladsye, maar net vir ' bietjie stukke van data, soos die 1216 00:56:52,740 --> 00:56:55,740 direkte boodskap dat jou vriend net jy, of die status update gestuur wat 1217 00:56:55,740 --> 00:56:58,210 iemand wat net jy, of die tweet gestuur dat iemand net gestuur. 1218 00:56:58,210 --> 00:57:02,120 Dit is net die maak van klein versoeke vir data, en dan met behulp van JavaScript, hierdie 1219 00:57:02,120 --> 00:57:06,370 programmeertaal te verander, wat die webblad lyk sonder die 1220 00:57:06,370 --> 00:57:09,860 bediener te help, sonder die bediener genereer HTML. 1221 00:57:09,860 --> 00:57:13,820 >> Dus, in kort, kan JavaScript dan gebruik word om nie net te haal nuwe data uit 1222 00:57:13,820 --> 00:57:16,750 die bediener sonder herlaai 'n hele bladsy of die indiening van 'n vorm. 1223 00:57:16,750 --> 00:57:20,060 Dit kan ook gebruik word om verandering die sogenaamde DOM - 1224 00:57:20,060 --> 00:57:21,520 dokument voorwerp model - 1225 00:57:21,520 --> 00:57:24,620 wat net die fancy manier vir sê die boom van HTML 1226 00:57:24,620 --> 00:57:26,220 wat ons gesien het die laaste keer. 1227 00:57:26,220 --> 00:57:31,640 >> So gerus te stel, JavaScript is sintakties so soortgelyk aan C as well. 1228 00:57:31,640 --> 00:57:32,820 Daar is geen belangrikste funksie. 1229 00:57:32,820 --> 00:57:35,430 Jy begin net die skryf van die kode en dit sal uitgevoer word, of 1230 00:57:35,430 --> 00:57:36,900 meer behoorlik geïnterpreteer. 1231 00:57:36,900 --> 00:57:38,660 Voorwaardes sal lyk soos hierdie. 1232 00:57:38,660 --> 00:57:41,230 Geen verskil van C of PHP vir die saak. 1233 00:57:41,230 --> 00:57:43,890 Boole uitdrukkings of ge-saam sal lyk soos hierdie. 1234 00:57:43,890 --> 00:57:45,590 Saam Anded lyk soos hierdie. 1235 00:57:45,590 --> 00:57:47,750 >> Skakelaars sal lyk soos hierdie. 1236 00:57:47,750 --> 00:57:49,440 Vir loops sal lyk soos hierdie. 1237 00:57:49,440 --> 00:57:51,060 Terwyl sirkelroetes sal lyk soos hierdie. 1238 00:57:51,060 --> 00:57:53,316 Doen terwyl sirkelroetes sal lyk soos hierdie. 1239 00:57:53,316 --> 00:57:54,780 >> Dit is 'n nuwe. 1240 00:57:54,780 --> 00:57:58,753 So het JavaScript nie 'n foreach bou per se nie, maar dit bou 1241 00:57:58,753 --> 00:58:03,870 vir veranderlike i opgestel, en ek in hierdie geval word 'n waarde van die indeks. 1242 00:58:03,870 --> 00:58:06,880 So dit is 'n bietjie anders as wat foreach, al nuwe weergawes van 1243 00:58:06,880 --> 00:58:10,280 JavaScript is om uit te kom al die tyd, sodat selfs die taal funksies 1244 00:58:10,280 --> 00:58:10,880 is ontwikkel. 1245 00:58:10,880 --> 00:58:16,920 >> En as 'n eenkant, JavaScript hierdie dae kan ook gebruik word op 'n bediener, net soos 1246 00:58:16,920 --> 00:58:19,920 PHP met behulp van 'n raamwerk genoem Node.js. 1247 00:58:19,920 --> 00:58:24,670 Een van CS50 se TFS, Kevin, het daartoe gelei dat 'n seminaar oor Node.js wat beskikbaar is by 1248 00:58:24,670 --> 00:58:26,440 cs50.net/seminars. 1249 00:58:26,440 --> 00:58:28,830 So as jy nuuskierig is, weet dat jy kan dit gebruik om op die bediener kant as 1250 00:58:28,830 --> 00:58:33,870 goed, maar dit is 'n redelik onlangse tendens, maar 'n kragtige een op daardie. 1251 00:58:33,870 --> 00:58:35,270 >> Dit is 'n bietjie anders. 1252 00:58:35,270 --> 00:58:37,910 Dit is 'n skikking in JavaScript. 1253 00:58:37,910 --> 00:58:40,115 En wat tref jou as verskillende versus C of PHP? 1254 00:58:40,115 --> 00:58:43,890 1255 00:58:43,890 --> 00:58:47,420 Daar is 'n paar vinnige stories ons kan hier vertel. 1256 00:58:47,420 --> 00:58:49,367 Wat ontbreek versus PHP? 1257 00:58:49,367 --> 00:58:51,652 >> Publiek: [onhoorbaar]. 1258 00:58:51,652 --> 00:58:52,110 >> David Malan: Ja? 1259 00:58:52,110 --> 00:58:53,322 Jammer, weer sê? 1260 00:58:53,322 --> 00:58:54,740 >> Publiek: Nie verklaar die tipe veranderlike. 1261 00:58:54,740 --> 00:58:56,390 >> David Malan: Ons is nie te verklaar die tipe veranderlike. 1262 00:58:56,390 --> 00:58:59,630 So eintlik hou van PHP, ons is nie vermelding van die tipe van die veranderlike. 1263 00:58:59,630 --> 00:59:02,670 Inteendeel, ons is meer generies sê var vir veranderlike. 1264 00:59:02,670 --> 00:59:06,690 Ons het nie PHP se ergernis van die hoef dollar-teken, wat terwyl vervelige te 1265 00:59:06,690 --> 00:59:09,160 tipe, beteken om meer duidelik dat iets is 'n veranderlike. 1266 00:59:09,160 --> 00:59:11,830 Terwyl hier, ons is soort van terug te C se benadering deur bel net 'n 1267 00:59:11,830 --> 00:59:14,500 veranderlike deur die naam wat ons wil om dit te gee, soos getalle. 1268 00:59:14,500 --> 00:59:17,170 En ook soos PHP, ons het vierkantige hakies vir die 1269 00:59:17,170 --> 00:59:19,170 waardes binne daardie skikking. 1270 00:59:19,170 --> 00:59:22,490 >> So veranderlikes in JavaScript ook kan lyk soos hierdie. 1271 00:59:22,490 --> 00:59:26,900 Let hier is 'n string genoem is, maar insgelyks het ons nie vermeld 1272 00:59:26,900 --> 00:59:28,750 dat dit 'n string. 1273 00:59:28,750 --> 00:59:33,160 Hier is al 'n funksie wat nie bestaan ​​in presies dieselfde manier in PHP, 1274 00:59:33,160 --> 00:59:34,460 maar 'n bietjie dieselfde. 1275 00:59:34,460 --> 00:59:36,530 Dit is 'n voorwerp in JavaScript. 1276 00:59:36,530 --> 00:59:42,110 En die voorwerpe is soort van die Swiss Army Mes van 'n data struktuur in wat jy 1277 00:59:42,110 --> 00:59:43,900 kan gebruik om hulle vir 'n aantal van die dinge. 1278 00:59:43,900 --> 00:59:46,860 >> Hier, byvoorbeeld, ons verklaar 'n veranderlike genoem kwotasie. 1279 00:59:46,860 --> 00:59:49,110 Die tipe wat veranderlike is 'n voorwerp. 1280 00:59:49,110 --> 00:59:53,550 Jy kan dink van hierdie as 'n C struct wat sleutels en waardes. 1281 00:59:53,550 --> 00:59:55,250 Simbool is 'n sleutel. 1282 00:59:55,250 --> 00:59:57,350 FB is 'n waarde, blykbaar 'n voorraad-simbool. 1283 00:59:57,350 --> 00:59:57,930 Komma. 1284 00:59:57,930 --> 01:00:02,180 Die prys is 'n ander sleutel, en die waarde daarvan is blykbaar 'n drywende punt, of 'n 1285 01:00:02,180 --> 01:00:06,510 getal meer algemeen in JavaScript, van $ 49,26. 1286 01:00:06,510 --> 01:00:09,030 >> So PHP het nie - 1287 01:00:09,030 --> 01:00:12,980 ons het nie heeltemal gesien in PHP voorwerpe soos hierdie, maar ons het sien 'n analoog, 1288 01:00:12,980 --> 01:00:14,093 wat was wat? 1289 01:00:14,093 --> 01:00:14,980 >> Publiek: [onhoorbaar]. 1290 01:00:14,980 --> 01:00:16,110 >> David Malan: Assosiatiewe skikkings. 1291 01:00:16,110 --> 01:00:19,990 So terwyl PHP het assosiatiewe skikkings wie se sintaks is ooit effens sodat 1292 01:00:19,990 --> 01:00:20,370 verskillende - 1293 01:00:20,370 --> 01:00:21,780 ons het die vierkante hakies. 1294 01:00:21,780 --> 01:00:23,860 Ons het die vreemde pyle simbole. 1295 01:00:23,860 --> 01:00:27,330 JavaScript is voorwerpe, maar dit is meestal 'n semantiese verskil en 'n 1296 01:00:27,330 --> 01:00:29,260 verskillende sinoniem vir nou. 1297 01:00:29,260 --> 01:00:35,060 Maar, as 'n eenkant, PHP het ook voorwerpe in 'n manier dat Java en ander 1298 01:00:35,060 --> 01:00:37,810 tale voorwerpe in objek-georiënteerde programmering. 1299 01:00:37,810 --> 01:00:40,440 Maar ons sal hierdie net gebruik vir data tipes vir nou. 1300 01:00:40,440 --> 01:00:42,170 Voorwerpe en assosiatiewe skikkings. 1301 01:00:42,170 --> 01:00:44,140 >> Hierdie een kan dit maak 'n bietjie meer duidelik. 1302 01:00:44,140 --> 01:00:45,890 Hier is die rede waarom 'n voorwerp is nuttig. 1303 01:00:45,890 --> 01:00:48,760 As jy 'n student te verklaar, soos Zamyla, kan ons eintlik 1304 01:00:48,760 --> 01:00:52,630 omsluit so te sê binne daardie voorwerp deur gebruik te accolades net soos 1305 01:00:52,630 --> 01:00:55,060 voordat 'n hele klomp van die sleutels en waardes in hier. 1306 01:00:55,060 --> 01:00:59,150 Ons het 'n ID, 'n huis, en 'n naam vir Zamyla, gevolg deur 'n kommapunt as 1307 01:00:59,150 --> 01:01:00,690 gewoonlik aan die einde. 1308 01:01:00,690 --> 01:01:04,840 >> Hier ook, is dit effens anders, maar ook baie sterk 1309 01:01:04,840 --> 01:01:05,690 hierdie dae. 1310 01:01:05,690 --> 01:01:08,780 Hier is 'n skikking, en ek weet dat, omdat daar is 'n vierkantige hakies up 1311 01:01:08,780 --> 01:01:11,090 bo-op en 'n vierkantige hakies aan die onderkant. 1312 01:01:11,090 --> 01:01:16,050 En dit is 'n verskeidenheid van wat data tik blykbaar in JavaScript? 1313 01:01:16,050 --> 01:01:21,260 Dit is 'n verskeidenheid van dit lyk soos drie voorwerpe. 1314 01:01:21,260 --> 01:01:24,580 En ek weet dit is net 'n voorwerp as gevolg van die krullerige draadjies. 1315 01:01:24,580 --> 01:01:28,760 En sien daar is oop krullerige stut, 'n paar dinge, naby krullerige stut, komma, 1316 01:01:28,760 --> 01:01:31,180 dan 'n paar meer, komma, en dan 'n paar meer. 1317 01:01:31,180 --> 01:01:33,800 So dit is drie argumente geskei deur twee kommas. 1318 01:01:33,800 --> 01:01:36,810 >> So, dit is 'n verskeidenheid van drie voorwerpe. 1319 01:01:36,810 --> 01:01:39,940 En elkeen van daardie voorwerpe blyk te wees, 'n student of personeellid van 'n paar 1320 01:01:39,940 --> 01:01:42,370 soort, elk met 'n ID, huis, en die naam. 1321 01:01:42,370 --> 01:01:45,060 Maar ek het dit iets genoem genoem into - 1322 01:01:45,060 --> 01:01:47,450 JavaScript Object notasie. 1323 01:01:47,450 --> 01:01:52,060 En dit is 'n data-formaat wat eintlik is so baie gewild en in 1324 01:01:52,060 --> 01:01:55,100 mode deesdae dat as jy skryf 'n aansoek wat gebruik maak van die Facebook 1325 01:01:55,100 --> 01:01:59,150 API, die Twitter API, regtig byna enige API daar buite hierdie dae, 1326 01:01:59,150 --> 01:02:02,820 insluitend 'n paar van die CS50 se eie, die data jy terug is nie in 1327 01:02:02,820 --> 01:02:04,720 ou skool CSV formaat. 1328 01:02:04,720 --> 01:02:06,780 >> Omdat onthou dat CSV is super eenvoudig. 1329 01:02:06,780 --> 01:02:10,230 Dit is net kolomme geskei deur kommas. 1330 01:02:10,230 --> 01:02:13,190 Into data gee jou meer metadata. 1331 01:02:13,190 --> 01:02:17,800 Dit assosieer 'n sleutel met elke waarde so hulle het nie net aanvaar dat 1332 01:02:17,800 --> 01:02:22,460 die nulde kolom is een waarde, kolom een is 'n ander, kolom twee is 'n ander. 1333 01:02:22,460 --> 01:02:26,790 Alles in 'n into voorwerp hier is 'n soort van self-beskryf, omdat elke 1334 01:02:26,790 --> 01:02:30,940 een van name in hierdie lêer het letterlik noem in die voorkant van dit as 'n 1335 01:02:30,940 --> 01:02:32,510 aangehaal string. 1336 01:02:32,510 --> 01:02:34,950 >> So laat ons 'n blik op 'n paar voorbeelde hier. 1337 01:02:34,950 --> 01:02:36,800 Laat my gaan in die toestel. 1338 01:02:36,800 --> 01:02:41,000 En laat my gaan in ons vhost Gids in die openbaar. 1339 01:02:41,000 --> 01:02:45,590 En laat my gaan in die JavaScript gids. 1340 01:02:45,590 --> 01:02:49,610 En laat ons gaan voort en oop Dom-0.html, waar DOM beteken net 1341 01:02:49,610 --> 01:02:51,010 dokument voorwerp model. 1342 01:02:51,010 --> 01:02:53,490 Dit is die boom goed waaraan Ek verwys na vroeër. 1343 01:02:53,490 --> 01:02:54,950 >> En laat my die volgende stel. 1344 01:02:54,950 --> 01:02:57,720 Hier is 'n webblad se liggaam is eenvoudig. 1345 01:02:57,720 --> 01:03:00,170 So hier aan die onderkant, sien ek het 'n vorm. 1346 01:03:00,170 --> 01:03:01,500 Ons het gesien wat voor. 1347 01:03:01,500 --> 01:03:07,600 Dit het twee insette, waarvan een 'n ID van naam, waarvan een 'n tipe 1348 01:03:07,600 --> 01:03:09,830 dien, en die eerste 'n mens se tipe is teks. 1349 01:03:09,830 --> 01:03:11,900 So dit is eintlik klink eenvoudig. 1350 01:03:11,900 --> 01:03:13,090 >> Kom ons gaan hier. 1351 01:03:13,090 --> 01:03:15,390 Kom ons gaan terug na hierdie bladsy hier. 1352 01:03:15,390 --> 01:03:21,030 Kom ons gaan in local host, en gaan na ons JavaScript gids, en gaan na 1353 01:03:21,030 --> 01:03:24,640 Dom-0, en hier het ons hierdie vorm. 1354 01:03:24,640 --> 01:03:26,550 So dit is blykbaar al hierdie bladsy nie. 1355 01:03:26,550 --> 01:03:28,740 Dit het 'n naam in met 'n knoppie Stuur. 1356 01:03:28,740 --> 01:03:30,340 Maar ek gaan nie hier PHP te gebruik. 1357 01:03:30,340 --> 01:03:34,310 Ek gaan alles kliënt kant te doen om so te praat in JavaScript soos volg. 1358 01:03:34,310 --> 01:03:39,100 >> Let daarop dat ek het inderdaad die naam gegee veld van hierdie insette 'n unieke 1359 01:03:39,100 --> 01:03:42,350 identifikasie, wat sal eintlik red my 'n paar keer in 'n oomblik. 1360 01:03:42,350 --> 01:03:45,480 En sien Ek het voorgestel 'n ander tag in die kop van my webblad, die 1361 01:03:45,480 --> 01:03:46,565  tag. 1362 01:03:46,565 --> 01:03:50,120 >> So is dit in hierdie sin dat JavaScript is 'n kliënt-kant programmering taal. 1363 01:03:50,120 --> 01:03:55,020 In hierdie geval, net soos CSS, het ek dit reguit binnekant van my HTML. 1364 01:03:55,020 --> 01:03:58,810 Maar let ek verklaar 'n funksie wat lyk 'n bietjie soos PHP 1365 01:03:58,810 --> 01:04:01,530 sintakties, maar dit is eintlik JavaScript, want weer, dit is 1366 01:04:01,530 --> 01:04:03,920 kliënt-kant in die leser. 1367 01:04:03,920 --> 01:04:07,590 En neem 'n raai wat dit gaan doen, selfs al is 'n paar van die sintaksis 1368 01:04:07,590 --> 01:04:09,338 hier is 'n nuwe. 1369 01:04:09,338 --> 01:04:11,760 >> Publiek: Sê hallo vir elkeen. 1370 01:04:11,760 --> 01:04:14,020 >> David Malan: Dit gaan om te groet aan wie besoek hierdie bladsy. 1371 01:04:14,020 --> 01:04:15,120 So hoe? 1372 01:04:15,120 --> 01:04:18,070 >> So sien, dit blyk in JavaScript daar is 'n waarskuwing () funksie. 1373 01:04:18,070 --> 01:04:22,840 Dit is 'n baie soort van hartseer funksie wat eintlik net geneig om gebruikers te irriteer. 1374 01:04:22,840 --> 01:04:25,440 Dit is nie een wat jy moet regtig gebruik Tipies, maar dit is 'n vinnige en vuil 1375 01:04:25,440 --> 01:04:27,710 manier soort van druk om iets 'n grafiese gebruiker 1376 01:04:27,710 --> 01:04:29,180 koppel, soos 'n leser. 1377 01:04:29,180 --> 01:04:31,400 Let hier dat ek het 'n string in aanhalingstekens. 1378 01:04:31,400 --> 01:04:36,010 Dit blyk dat in teenstelling met C, JavaScript kan eintlik gebruik jy enkele 1379 01:04:36,010 --> 01:04:38,730 haal, en gesê dit is net 'n soort van die stilistiese konvensie onder 1380 01:04:38,730 --> 01:04:41,180 JavaScript programmeerders aanhalingstekens te gebruik. 1381 01:04:41,180 --> 01:04:43,750 PHP, hulle eintlik 'n bietjie ander betekenis. 1382 01:04:43,750 --> 01:04:45,810 Maar vir nou, weet net dat dit is die enigste rede. 1383 01:04:45,810 --> 01:04:49,270 Die konvensie in JavaScript is dikwels te Gebruik aanhalingstekens, maar ons kan gebruik om 1384 01:04:49,270 --> 01:04:50,950 dubbel aanhalings in beide plekke so goed. 1385 01:04:50,950 --> 01:04:52,610 >> So dit is interessant. 1386 01:04:52,610 --> 01:04:56,430 Onthou die laaste keer dat ons gehad het dat foto op die skerm wat 'n boom het 1387 01:04:56,430 --> 01:04:59,720 waar jy die HTML-knoop, en die kop knoop, en die liggaam knoop, 1388 01:04:59,720 --> 01:05:00,800 en dan 'n paar teks. 1389 01:05:00,800 --> 01:05:04,700 Maar daar was een spesiale knoop by die top dat ek het die dokument. 1390 01:05:04,700 --> 01:05:08,260 Wel, dit blyk in JavaScript, enige tyd wat jy 'n program in JavaScript skryf 1391 01:05:08,260 --> 01:05:11,040 in 'n leser, het jy toegang tot 'n spesiale globale veranderlike. 1392 01:05:11,040 --> 01:05:14,130 Soortgelyke in gees PHP se superglobals, hierdie een is ingeroep 1393 01:05:14,130 --> 01:05:16,050 al klein dokument. 1394 01:05:16,050 --> 01:05:21,480 >> Dit is soos 'n struct, maar dit struct het ook funksies binnekant van dit. 1395 01:05:21,480 --> 01:05:23,790 So 'n C struct het net data tipies. 1396 01:05:23,790 --> 01:05:29,060 Maar 'n JavaScript voorwerp as dit tegnies is ook funksies, 1397 01:05:29,060 --> 01:05:31,830 andersins bekend as metodes, binnekant van dit. 1398 01:05:31,830 --> 01:05:35,750 En jy kan 'n funksie roep binnekant van hierdie voorwerp letterlik doen sy 1399 01:05:35,750 --> 01:05:39,610 naam, dot, en dan die naam van die funksie, of weer metode. 1400 01:05:39,610 --> 01:05:41,160 Dit is net 'n sinoniem, regtig. 1401 01:05:41,160 --> 01:05:42,450 >> En wat beteken die funksie doen? 1402 01:05:42,450 --> 01:05:43,840 Jy kan soort van dink uit die naam. 1403 01:05:43,840 --> 01:05:45,590 Kry element deur ID. 1404 01:05:45,590 --> 01:05:50,040 So dit gaan die webblad te soek, soek die boom, op soek na 1405 01:05:50,040 --> 01:05:55,210 watter knoop, AKA element, het 'n unieke ID van kwotasie unquote naam. 1406 01:05:55,210 --> 01:05:56,560 En dan wat gaan ek doen? 1407 01:05:56,560 --> 01:06:00,350 Ek gaan die waarde binnekant van te kry dat nodus in die boom gegee, en ek gaan 1408 01:06:00,350 --> 01:06:02,580 om een ​​of ander manier sê hallo vir die naam. 1409 01:06:02,580 --> 01:06:05,360 >> So neem 'n raaiskoot, selfs al het ons nie gesien het nie, doen wat die plus 1410 01:06:05,360 --> 01:06:07,396 simbole hier en hier waarskynlik beteken? 1411 01:06:07,396 --> 01:06:08,230 >> Publiek: koppel. 1412 01:06:08,230 --> 01:06:09,220 >> David Malan: koppel. 1413 01:06:09,220 --> 01:06:11,290 Reg, en dit is net ' soort van ontwerp besluite te neem 1414 01:06:11,290 --> 01:06:12,280 mense gemaak jaar gelede. 1415 01:06:12,280 --> 01:06:15,190 In PHP, jy koppel dinge met kolle. 1416 01:06:15,190 --> 01:06:18,800 In C, jy spring deur verskeie hoepels en noem funksies soos strcopy () of 1417 01:06:18,800 --> 01:06:20,600 strcat () of sodanige ander funksies. 1418 01:06:20,600 --> 01:06:22,060 Maar in JavaScript, jy gebruik plus punte. 1419 01:06:22,060 --> 01:06:24,770 So dit is net concatenating drie snare - 1420 01:06:24,770 --> 01:06:27,850 hallo, 'n naam, en dan 'n uitroepteken. 1421 01:06:27,850 --> 01:06:30,390 >> Dus, wanneer en waarom is die funksie genoem al? 1422 01:06:30,390 --> 01:06:33,150 Wel, neem 'n raaiskoot van die HTML aan die onderkant. 1423 01:06:33,150 --> 01:06:35,810 Hoekom is groet () genoem word, of wanneer? 1424 01:06:35,810 --> 01:06:39,730 1425 01:06:39,730 --> 01:06:44,030 >> Blykbaar, as die beste wat ek kan sê, op dien, wanneer hierdie vorm ingedien word, 1426 01:06:44,030 --> 01:06:47,200 Ek gaan om te doen wat is binnekant van hierdie aanhalings. 1427 01:06:47,200 --> 01:06:50,900 En spesifiek, ek gaan om te bel groet () en dan terug onwaar. 1428 01:06:50,900 --> 01:06:53,090 >> Wel, laat ons sien wat die netto uitwerking hier is die eerste. 1429 01:06:53,090 --> 01:06:58,290 So laat my gaan voort en tik in, sê, Loren, Stuur. 1430 01:06:58,290 --> 01:06:59,440 Hallo Loren. 1431 01:06:59,440 --> 01:07:02,990 Kom ons kyk of miskien was dit net 'n gelukkige implementering. 1432 01:07:02,990 --> 01:07:03,200 Nee. 1433 01:07:03,200 --> 01:07:05,990 So is dit tik aan watter noem ek eintlik daar te vestig. 1434 01:07:05,990 --> 01:07:07,970 >> Maar let op wat nie verander. 1435 01:07:07,970 --> 01:07:10,360 Die URL is nog dom-0.html. 1436 01:07:10,360 --> 01:07:11,820 Daar is geen register.php. 1437 01:07:11,820 --> 01:07:13,110 Daar is geen tweede lêer. 1438 01:07:13,110 --> 01:07:14,930 Daar is geen optrede kenmerk. 1439 01:07:14,930 --> 01:07:19,720 So wat is hierdie terugkeer valse vermoedelik doen? 1440 01:07:19,720 --> 01:07:23,660 Hoekom is ek 'n beroep groet () en dan terugkeer valse waarskynlik? 1441 01:07:23,660 --> 01:07:26,420 Wat gewoonlik gebeur wanneer jy kliek Stuur op 'n vorm wat selfs ons het 1442 01:07:26,420 --> 01:07:27,854 gesien in die afgelope week? 1443 01:07:27,854 --> 01:07:29,900 >> Publiek: [onhoorbaar]. 1444 01:07:29,900 --> 01:07:30,860 >> David Malan: Dit gaan iewers, reg? 1445 01:07:30,860 --> 01:07:32,720 Dit gaan om 'n paar bestemming URL. 1446 01:07:32,720 --> 01:07:34,120 Maar ek wil nie dat hier gebeur. 1447 01:07:34,120 --> 01:07:37,620 Ek wil my webblad te heeltemal dinamiese soos Gmail, waar sodra jy 1448 01:07:37,620 --> 01:07:38,650 daar, jy bly daar. 1449 01:07:38,650 --> 01:07:42,900 Die URL nie verander in 'n manier wat dui op die hele bladsy is herlaai. 1450 01:07:42,900 --> 01:07:46,680 Inteendeel, ek wil net iets te verander soos die druk van iets 1451 01:07:46,680 --> 01:07:48,320 hier op die skerm. 1452 01:07:48,320 --> 01:07:49,630 >> Wel, laat my skoon hierdie 'n bietjie. 1453 01:07:49,630 --> 01:07:55,370 Laat my oopmaak nie dom-0, maar laat my oopmaak Dom-2. 1454 01:07:55,370 --> 01:07:57,350 Net sodat jy het gesien sommige sintaksis hier. 1455 01:07:57,350 --> 01:08:02,080 >> Dit blyk dat wat ons nou net gedoen het, is die gebruik van rou JavaScript. 1456 01:08:02,080 --> 01:08:04,420 So dit is werklik die taal JavaScript. 1457 01:08:04,420 --> 01:08:07,340 Sommige van julle sal weet 'n biblioteek genaamd jQuery. 1458 01:08:07,340 --> 01:08:09,980 >> So jQuery is nie dieselfde ding as JavaScript. 1459 01:08:09,980 --> 01:08:14,110 Dit is net 'n biblioteek wat 'n baie slim man geskryf en gewild soos 1460 01:08:14,110 --> 01:08:18,100 dat byna almal in die wêreld nou gebruik jQuery toe met behulp van JavaScript. 1461 01:08:18,100 --> 01:08:20,890 En met die eerste oogopslag, eerlik, dit lyk 'n bietjie meer kriptiese. 1462 01:08:20,890 --> 01:08:24,990 Maar jy sal vind, veral as jy gaan daar is vir jou finale projek met web 1463 01:08:24,990 --> 01:08:29,029 ontwikkeling, sal jy vind dat hierdie skoon dinge en spaar jou 'n hele 1464 01:08:29,029 --> 01:08:30,229 paar reëls van die kode. 1465 01:08:30,229 --> 01:08:33,189 >> So laat ons net blik op hoe hierdie vorm werk. 1466 01:08:33,189 --> 01:08:35,664 Let op wat ek het verwyder blykbaar uit my HTML? 1467 01:08:35,664 --> 01:08:38,240 1468 01:08:38,240 --> 01:08:40,630 Daar is geen op dien hanteerder om so te praat. 1469 01:08:40,630 --> 01:08:41,470 Daar is geen eienskap. 1470 01:08:41,470 --> 01:08:43,359 Omdat jy weet, wat Ek het nie regtig soos? 1471 01:08:43,359 --> 01:08:45,640 Ek het gevoel asof ons val in ou gewoontes daar. 1472 01:08:45,640 --> 01:08:49,340 Net soos dit was die begin van slordige te voel beide CSS te meng met 1473 01:08:49,340 --> 01:08:52,149 HTML, omdat jy soort van gooi verskillende tale oor die hele 1474 01:08:52,149 --> 01:08:56,180 plek, insgelyks het dit begin om te voel soos 'n slegte pad af te gaan waar 1475 01:08:56,180 --> 01:09:01,069 Ek sit JavaScript-kode binnekant van my HTML eerder as factoring dit uit. 1476 01:09:01,069 --> 01:09:02,279 >> So wat is die les hier. 1477 01:09:02,279 --> 01:09:05,080 In dom-2.html, ek factoring dit uit. 1478 01:09:05,080 --> 01:09:07,399 En ek doen dinge effens anders. 1479 01:09:07,399 --> 01:09:09,630 Vir nou, ek gaan my hande te waai na wat dit regtig doen 1480 01:09:09,630 --> 01:09:10,590 onder die kap. 1481 01:09:10,590 --> 01:09:14,210 Maar net vir nou aanvaar dat die eerste reël van die kode in die biblioteek 1482 01:09:14,210 --> 01:09:18,170 genoem jQuery beteken net wanneer die dokument gereed is, doen die volgende. 1483 01:09:18,170 --> 01:09:20,080 >> Omdat webblaaie kan neem 'n tyd om te laai. 1484 01:09:20,080 --> 01:09:23,029 Jy kan op 'n stadige internet verband, en dit kan spin 1485 01:09:23,029 --> 01:09:25,290 en spin, en uiteindelik is dit gelaai. 1486 01:09:25,290 --> 01:09:29,060 Dat die lyn van die kode sê net wag totdat die hele bladsy is gereed, die dokument 1487 01:09:29,060 --> 01:09:31,189 gereed is, voor die uitvoering van hierdie kode. 1488 01:09:31,189 --> 01:09:34,390 >> En nou sien, is dit waarskynlik die mees bruikbare eerste 1489 01:09:34,390 --> 01:09:36,189 neem weg van jQuery. 1490 01:09:36,189 --> 01:09:42,140 Hierdie reël hier is baie soortgelyk in die gees hierdie baie langer lyn hier. 1491 01:09:42,140 --> 01:09:46,920 Terwyl dit in rou JavaScript-kode, is daar bestaan ​​'n dokument globale voorwerp wat 1492 01:09:46,920 --> 01:09:50,460 het 'n funksie genoem getElementById (), die mense wat geskryf het 1493 01:09:50,460 --> 01:09:55,720 jQuery vereenvoudig wat net sê dollar-teken, en dan binnekant van 1494 01:09:55,720 --> 01:10:00,250 hakies sit twee aanhalings, en dan sit 'n hash simbool, gevolg deur die 1495 01:10:00,250 --> 01:10:02,250 unieke ID wat jy wil aan te gryp. 1496 01:10:02,250 --> 01:10:06,170 So dit is gelykstaande aan document.getElementById. 1497 01:10:06,170 --> 01:10:11,090 >> Intussen het. Stuur net beteken op indiening van watter vorm jy 1498 01:10:11,090 --> 01:10:14,240 verwys na aan die linkerkant, gaan voor en voer dit. 1499 01:10:14,240 --> 01:10:16,600 Maar dit is nou die nuuskierigheid ook. 1500 01:10:16,600 --> 01:10:19,560 Wat is vreemd oor wat Ek het hier uitgelig? 1501 01:10:19,560 --> 01:10:23,840 1502 01:10:23,840 --> 01:10:28,594 Nie net is dit soort van sintakties nuwe, daar is ook iets wat ontbreek. 1503 01:10:28,594 --> 01:10:29,558 >> Publiek: Dit is net genoem funksie? 1504 01:10:29,558 --> 01:10:31,970 Dit is nie wakker genoem? 1505 01:10:31,970 --> 01:10:32,440 >> David Malan: Ja. 1506 01:10:32,440 --> 01:10:35,450 Wel, so alert () is af hier, om eerlik te wees. 1507 01:10:35,450 --> 01:10:39,520 Maar daar is geen sprake van 'n noem, soos jy weet, cat of 1508 01:10:39,520 --> 01:10:40,980 iets hier. 1509 01:10:40,980 --> 01:10:43,830 En inderdaad, dit is een van die kenmerke JavaScript dit is nogal 1510 01:10:43,830 --> 01:10:45,370 kragtige, maar ook baie nuwe. 1511 01:10:45,370 --> 01:10:47,460 En PHP het eintlik dit so goed. 1512 01:10:47,460 --> 01:10:49,500 >> Laat my gaan voort en doen iets ware vinnig. 1513 01:10:49,500 --> 01:10:52,030 Laat my gaan voort en sit dit hier. 1514 01:10:52,030 --> 01:10:52,600 Laat my dit doen. 1515 01:10:52,600 --> 01:10:53,690 Funksie. 1516 01:10:53,690 --> 01:10:56,455 Kom ons noem dit hanteerder (). 1517 01:10:56,455 --> 01:10:58,290 'N hanteerder funksie om so te praat. 1518 01:10:58,290 --> 01:11:00,110 Iets wat 'n operasie hanteer. 1519 01:11:00,110 --> 01:11:02,700 Laat my skoon my inkeping. 1520 01:11:02,700 --> 01:11:04,380 En sit dit hier. 1521 01:11:04,380 --> 01:11:06,090 En sit dit 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 >> So nou het ek 'n funksie genoem hanteerder () dat ek weet regtig nie 1525 01:11:10,300 --> 01:11:10,890 wat dit doen nie. 1526 01:11:10,890 --> 01:11:12,710 Dit het net nog van daardie dinge. 1527 01:11:12,710 --> 01:11:13,900 Oeps. 1528 01:11:13,900 --> 01:11:15,820 Het te veel. 1529 01:11:15,820 --> 01:11:18,490 Kom ons doen dit. 1530 01:11:18,490 --> 01:11:18,990 Alle regte. 1531 01:11:18,990 --> 01:11:20,240 Jammer. 1532 01:11:20,240 --> 01:11:23,140 1533 01:11:23,140 --> 01:11:23,690 Alle regte. 1534 01:11:23,690 --> 01:11:24,720 Laat my dit doen. 1535 01:11:24,720 --> 01:11:25,020 OK. 1536 01:11:25,020 --> 01:11:27,040 Dit lyk mooi en reguit stuur nou. 1537 01:11:27,040 --> 01:11:29,090 Laat my dit doen. 1538 01:11:29,090 --> 01:11:29,860 Doen dit. 1539 01:11:29,860 --> 01:11:30,950 En OK. 1540 01:11:30,950 --> 01:11:33,080 So nou, laat ons dit oor hier. 1541 01:11:33,080 --> 01:11:35,840 1542 01:11:35,840 --> 01:11:37,270 Geen meer ontwikkeling op die vlieg. 1543 01:11:37,270 --> 01:11:37,900 OK. 1544 01:11:37,900 --> 01:11:40,000 >> So nou, laat ons gaan terug na waar die storie begin. 1545 01:11:40,000 --> 01:11:43,530 Voorheen, het ek gesê dat hierdie lyn hier beteken dat wanneer die dokument gereed is, gaan 1546 01:11:43,530 --> 01:11:44,380 voort en doen dit. 1547 01:11:44,380 --> 01:11:45,660 Wat wil ek doen? 1548 01:11:45,660 --> 01:11:49,070 Wel spesifiek, ek wil gaan voor en doen die volgende. 1549 01:11:49,070 --> 01:11:53,700 Voer hierdie lyn van kode, en dan wat ek wil hê jy moet doen, is om noem dit 1550 01:11:53,700 --> 01:11:56,370 funksioneer as die vorm ingedien word. 1551 01:11:56,370 --> 01:11:57,730 >> Nou dit is wat is interessant. 1552 01:11:57,730 --> 01:11:59,170 Dit is nie self 'n funksie. 1553 01:11:59,170 --> 01:12:02,540 Let Ek is nie gekant hakies hier op die normale manier. 1554 01:12:02,540 --> 01:12:06,800 Ek is letterlik verby 'n funksie genoem hanteerder () na 'n ander funksie 1555 01:12:06,800 --> 01:12:10,800 genoem dien () as 'n argument as al is dit soos 'n veranderlike. 1556 01:12:10,800 --> 01:12:14,290 En dit is een van die kenmerke van JavaScript, is funksies hulself 1557 01:12:14,290 --> 01:12:15,710 is eintlik net voorwerpe. 1558 01:12:15,710 --> 01:12:18,350 In werklikheid, hulle is regtig net veranderlikes van 'n soort. 1559 01:12:18,350 --> 01:12:21,340 En as die naam van die funksie is hanteerder (), daar is geen rede Ek kan nie 1560 01:12:21,340 --> 01:12:23,390 slaag dit in as 'n argument hier. 1561 01:12:23,390 --> 01:12:27,530 En dit beteken dat wanneer die vorm met die ID van demo is 1562 01:12:27,530 --> 01:12:29,320 ingedien is, noem hierdie funksie. 1563 01:12:29,320 --> 01:12:32,770 >> Maar nou as ek ongedaan al hierdie dinge, Waarom het ek dalk doen 1564 01:12:32,770 --> 01:12:34,850 hierdie 'n oomblik gelede? 1565 01:12:34,850 --> 01:12:36,840 Wel, dit is 'n anonieme funksie. 1566 01:12:36,840 --> 01:12:41,080 Want eerlik, het ek besef hoekom is ek pla tyd te mors waarby 'n 1567 01:12:41,080 --> 01:12:45,540 funksie genoem hanteerder () net om te noem dit in een en slegs een plek? 1568 01:12:45,540 --> 01:12:48,640 As ek nie nodig het om die naam, en ek doen nie nodig om dit te noem meer as een plek, 1569 01:12:48,640 --> 01:12:51,200 laat ons net die uitvoering van die funksie reg waar ek dit nodig het. 1570 01:12:51,200 --> 01:12:55,190 En so JavaScript en PHP ondersteun wat anoniem funksies genoem dat 1571 01:12:55,190 --> 01:12:57,900 laat my toe om presies dit te doen hier. 1572 01:12:57,900 --> 01:12:59,570 >> Maar ons is maar net krap die oppervlak. 1573 01:12:59,570 --> 01:13:02,430 Kom ons terg met net 'n paar finale voorbeelde hier. 1574 01:13:02,430 --> 01:13:04,600 >> As ek gaan in quote.php. 1575 01:13:04,600 --> 01:13:07,160 1576 01:13:07,160 --> 01:13:11,870 Let daarop dat hierdie is eintlik 'n PHP funksie, 'n PHP-program, wat ek geskryf het 1577 01:13:11,870 --> 01:13:15,270 wat verwag 'n HTTP parameter genoem simbool, en ek kan slaag in 1578 01:13:15,270 --> 01:13:16,730 'n waarde soos FB. 1579 01:13:16,730 --> 01:13:20,010 En as ons eintlik kyk na die bron het, word hierdie gebruik daarvan 'n gratis webwerf 1580 01:13:20,010 --> 01:13:23,680 genoem Yahoo Finansies, net soos p-reeks sewe, en dit is terug na my 1581 01:13:23,680 --> 01:13:26,580 iets in glo die formaat bekend is into - 1582 01:13:26,580 --> 01:13:28,010 JavaScript Object notasie. 1583 01:13:28,010 --> 01:13:28,810 Dit is net 'n voorwerp. 1584 01:13:28,810 --> 01:13:32,500 Let op die krulhakies, die aanhalings, die kolon, en die kommas. 1585 01:13:32,500 --> 01:13:34,720 >> Nou intussen, dit is pretty cool. 1586 01:13:34,720 --> 01:13:38,520 Omdat ek waarskynlik gebruik om 'n ontwikkeling taal URLs te genereer 1587 01:13:38,520 --> 01:13:40,370 wat lyk soos hierdie dinamiese, reg? 1588 01:13:40,370 --> 01:13:43,340 Ek kan dit verander na Google en terug te kry Google se 1589 01:13:43,340 --> 01:13:47,930 voorraad prys van $ 1,017.55. 1590 01:13:47,930 --> 01:13:49,640 So kom ons kyk of ons kan nie nou gebruik. 1591 01:13:49,640 --> 01:13:56,590 >> Laat my gaan Ajax-0 hier, wat lyk soos die volgende. 1592 01:13:56,590 --> 01:13:59,750 Dit is net 'n webwerf wat ' 'n vorm met 'n knoppie. 1593 01:13:59,750 --> 01:14:05,860 Laat my hier voort te gaan en tik in YHOO vir Yahoo se beurs simbool, kliek Kry 1594 01:14:05,860 --> 01:14:10,530 Quote, en nou sien ek gekry 'n waarskuwing met 32,86. 1595 01:14:10,530 --> 01:14:14,050 >> Laat my eintlik gaan na 'n liefhebber weergawe van hierdie bladsy, weergawe twee, en 1596 01:14:14,050 --> 01:14:17,530 tik in kom ons sê Microsoft, MSFT. 1597 01:14:17,530 --> 01:14:18,410 Kry kwotasie. 1598 01:14:18,410 --> 01:14:19,850 En nou sien, geen waarskuwing. 1599 01:14:19,850 --> 01:14:22,770 Let op waar dit sê die prys bepaal moet word? 1600 01:14:22,770 --> 01:14:27,060 Daar is die eenvoudigste van voorbeelde wat sinspeel op wat Gchat en Facebook 1601 01:14:27,060 --> 01:14:30,070 Chat, en Gmail, en ander sulke webtuistes doen deur eintlik 1602 01:14:30,070 --> 01:14:31,290 die verandering van die webblad. 1603 01:14:31,290 --> 01:14:31,800 >> Let op hierdie. 1604 01:14:31,800 --> 01:14:33,120 Laat my herlaai die bladsy. 1605 01:14:33,120 --> 01:14:35,080 Laat my oopmaak Chrome se inspekteur. 1606 01:14:35,080 --> 01:14:36,890 Laat my gaan aan die elemente blad hier. 1607 01:14:36,890 --> 01:14:42,310 Nou sien as ek zoom in hier en open dit op, sien dat dit is my 1608 01:14:42,310 --> 01:14:44,500 HTML DOM - my dokument voorwerp model. 1609 01:14:44,500 --> 01:14:45,920 Dit is my HTML. 1610 01:14:45,920 --> 01:14:48,750 Maar nou sien, selfs al is dit gaan om 'n bietjie moeilik wees om dit in beide om te sien 1611 01:14:48,750 --> 01:14:52,080 plekke op een slag, as ek tik in FB hier, kyk na die onderkant 1612 01:14:52,080 --> 01:14:54,110 van die skerm net. 1613 01:14:54,110 --> 01:14:57,720 >> Dit is eintlik die verandering my HTML op die fly. 1614 01:14:57,720 --> 01:15:01,670 En dit is om dit te doen eenvoudig deur iets soos hierdie. 1615 01:15:01,670 --> 01:15:06,800 As ek oop Ajax-2, kennisgewing uitvoering iets so sexy as 1616 01:15:06,800 --> 01:15:09,560 dat, alhoewel dit is redelik lelik, maar so gesofistikeerd as wat 1617 01:15:09,560 --> 01:15:11,910 funksioneel, dit het 'n HTML aan die onderkant. 1618 01:15:11,910 --> 01:15:13,810 Maar let ek gebruik om te merk. 1619 01:15:13,810 --> 01:15:16,640 Ons het nooit hierdie gebruik, maar dit is soos 'n, maar dit beteken nie dwing 1620 01:15:16,640 --> 01:15:17,840 alles op 'n nuwe reël. 1621 01:15:17,840 --> 01:15:20,830 Dit maak net 'n vierkantige area op dieselfde lyn wese. 1622 01:15:20,830 --> 01:15:22,870 >> Let daarop dat ek het dit 'n ID van die prys. 1623 01:15:22,870 --> 01:15:26,800 En dit blyk deur dieselfde JavaScript-biblioteek, ek het 'n funksie 1624 01:15:26,800 --> 01:15:30,440 genoem kwotasie () wat genoem word wanneer die vorm ingedien word. 1625 01:15:30,440 --> 01:15:31,800 En wat ek doen is dit. 1626 01:15:31,800 --> 01:15:35,730 Ek is waarby 'n veranderlike in JavaScript genoem url, die redding van die waarde 1627 01:15:35,730 --> 01:15:38,650 quote.php? simbool =. 1628 01:15:38,650 --> 01:15:44,220 Met ander woorde, ek self begin n HTTP-versoek om voor te berei, en dan 1629 01:15:44,220 --> 01:15:49,250 Ek concatenating op wat met 'n plus Wat ook al die element met die ID 1630 01:15:49,250 --> 01:15:54,190 simbool is, welke kennisgewing is dat teks veld reg hier. 1631 01:15:54,190 --> 01:15:56,630 So, net soos ons het vorms in die verlede. 1632 01:15:56,630 --> 01:16:01,450 >> En dan is dit blyk in jQuery, as jy noem. Val (), wat 'n beroep van 'n val 1633 01:16:01,450 --> 01:16:05,900 funksie, 'n waarde funksie, wat kry wat die gebruiker getik in 1634 01:16:05,900 --> 01:16:08,920 En dan is almal van die netwerk verkeer wat gebeur is nie. 1635 01:16:08,920 --> 01:16:11,230 $. GetJSON. 1636 01:16:11,230 --> 01:16:13,720 >> En as 'n eenkant, dollar teken net 'n snelskriknotasie. 1637 01:16:13,720 --> 01:16:16,860 Dit is regtig jQuery.getJSON. 1638 01:16:16,860 --> 01:16:21,520 Kry my into van hierdie URL, en wanneer die versoek kom terug, noem dit 1639 01:16:21,520 --> 01:16:26,550 funksie en slaag in die argument alles wat kom terug van die bediener. 1640 01:16:26,550 --> 01:16:31,205 >> So met ander woorde, as ek gaan terug na die leser, en ek gaan terug na quote.php, 1641 01:16:31,205 --> 01:16:35,590 wat my leser doen, is om hierdie stuk van data. 1642 01:16:35,590 --> 01:16:38,930 En wanneer ek gaan na hierdie webblad hier, sien as ons plaas gaan na die netwerk 1643 01:16:38,930 --> 01:16:43,820 blad en duidelik nie, en dan tik iets soos GOOG vir Google en kry 1644 01:16:43,820 --> 01:16:46,340 Quote, sien die bladsy nie verander het nie. 1645 01:16:46,340 --> 01:16:50,990 Maar 'n HTTP versoek is, en wat kom terug hier as ons kyk na die 1646 01:16:50,990 --> 01:16:56,130 reaksie is 'n hele klomp van into dat ons uiteindelik verkry met 1647 01:16:56,130 --> 01:16:58,070 hierdie eenvoudige lyn hier. 1648 01:16:58,070 --> 01:17:00,150 >> Data is wat geraak van die bediener. 1649 01:17:00,150 --> 01:17:02,120 Prys is die naam van die sleutel wat ek omgee. 1650 01:17:02,120 --> 01:17:05,230 So data.price gee my dat. 1651 01:17:05,230 --> 01:17:07,540 >> Nou intussen, en hierdie is die laaste voorbeeld. 1652 01:17:07,540 --> 01:17:09,280 Jy kan nog meer te doen met die bladsy. 1653 01:17:09,280 --> 01:17:12,440 Een werklik goed twee. 1654 01:17:12,440 --> 01:17:14,780 Ons kan terug te bring die merk, as jy onthou dit. 1655 01:17:14,780 --> 01:17:15,850 Dis JavaScript. 1656 01:17:15,850 --> 01:17:17,110 Ons kan dit doen. 1657 01:17:17,110 --> 01:17:17,690 Baie opwindend. 1658 01:17:17,690 --> 01:17:18,800 Ons sal laat dit as 'n fotonische lewe. 1659 01:17:18,800 --> 01:17:21,590 >> Maar meer spannende, kan jy doen dinge soos hierdie. 1660 01:17:21,590 --> 01:17:25,940 As ek gaan na geolocation-1, dit blyk dat Chrome weet dat ons by 1661 01:17:25,940 --> 01:17:30,672 breedtegraad 42,37. -71,10. 1662 01:17:30,672 --> 01:17:32,940 So daar is selfs meer daar tot jou beskikking. 1663 01:17:32,940 --> 01:17:34,290 Maar meer op wat volgende week. 1664 01:17:34,290 --> 01:17:35,540 Sien julle Maandag. 1665 01:17:35,540 --> 01:17:37,558