1 00:00:00,000 --> 00:00:02,964 2 00:00:02,964 --> 00:00:05,434 >> [MUSIC SPILLE] 3 00:00:05,434 --> 00:00:11,825 4 00:00:11,825 --> 00:00:12,700 HANNAH: Hei, alle sammen. 5 00:00:12,700 --> 00:00:15,866 Takk til dere så mye for å komme ut i den motbydelig vær for quiz ett 6 00:00:15,866 --> 00:00:16,910 anmeldelse av økten. 7 00:00:16,910 --> 00:00:20,020 Som dere vet, quiz ett er dette onsdag. 8 00:00:20,020 --> 00:00:22,209 Så vi kommer til å gå gjennom en haug av emner. 9 00:00:22,209 --> 00:00:24,000 DAVIN: Hei, kan jeg si noe virkelig rask? 10 00:00:24,000 --> 00:00:25,215 HANNAH: Ja, Davin er det som skjer å si noe virkelig rask. 11 00:00:25,215 --> 00:00:25,780 DAVIN: Beklager. 12 00:00:25,780 --> 00:00:29,490 Bare virkelig rask, hvis du har spørsmål om quizen, kan du gå på nettet. 13 00:00:29,490 --> 00:00:32,420 Gå til 2014 quiz ett, om quizen. 14 00:00:32,420 --> 00:00:34,680 Det fikk logistikk om hvor du skal gå, når man skal gå. 15 00:00:34,680 --> 00:00:38,100 Hvis du samtidig registrert, er vi kommer til å ha en makeup quiz på 5:30. 16 00:00:38,100 --> 00:00:40,350 Eller hvis du har sendt meg et problem, du har noen andre problemet. 17 00:00:40,350 --> 00:00:42,640 Men 05:30 er det make-up tid på onsdag. 18 00:00:42,640 --> 00:00:44,540 Men hvis du har spørsmål, generelle spørsmål, 19 00:00:44,540 --> 00:00:45,748 online har alle logistikk. 20 00:00:45,748 --> 00:00:47,690 Så sjekk der først. 21 00:00:47,690 --> 00:00:49,070 >> HANNAH: Awesome. 22 00:00:49,070 --> 00:00:53,030 Så her er den store listen over emner at vi kommer til å gå gjennom i dag. 23 00:00:53,030 --> 00:00:57,390 Jeg kommer til å dekke alt av C ting, som er den første kolonnen. 24 00:00:57,390 --> 00:01:00,710 Så C ting som vi dekket etter quiz null. 25 00:01:00,710 --> 00:01:05,459 Starter med en lenket liste, som inkluderer pekere. 26 00:01:05,459 --> 00:01:07,668 >> Greit, så vi så dette i den siste gjennomgangen økt, 27 00:01:07,668 --> 00:01:10,000 så jeg kommer til å gå gjennom dette er en litt raskere. 28 00:01:10,000 --> 00:01:13,500 Bare heve hånden din hvis du vil ha meg til bremse ned eller ta noe lenger. 29 00:01:13,500 --> 00:01:17,150 Men vi bruke relaterte lister fordi vi startet i C med arrays. 30 00:01:17,150 --> 00:01:20,920 Og arrays er stor, men den Problemet er at de har en fast størrelse. 31 00:01:20,920 --> 00:01:24,925 Lenkede lister tillate oss å skape dynamisk størrelse datastrukturer. 32 00:01:24,925 --> 00:01:28,520 33 00:01:28,520 --> 00:01:32,320 >> Og vi har våre grunnleggende operasjoner, sette inn, slette og søke. 34 00:01:32,320 --> 00:01:36,780 Og vi kan gjøre innsats i verste fall konstant tid 35 00:01:36,780 --> 00:01:39,140 hvis vi bare sette den helt i begynnelsen. 36 00:01:39,140 --> 00:01:45,220 Slette og søke, verste Ved stor oh n tid. 37 00:01:45,220 --> 00:01:47,140 Så igjen, bare for å snu gjennom disse bildene, 38 00:01:47,140 --> 00:01:50,860 Jeg vet at vi så disse siste tiden, men vi ønsker å holde styr på vår lenket liste 39 00:01:50,860 --> 00:01:53,440 ved å holde styr på leder av vår lenket liste. 40 00:01:53,440 --> 00:01:55,580 Fordi vi vet at hver og en av de noder 41 00:01:55,580 --> 00:01:58,610 bare kommer til å peke på neste node i vår lenket liste. 42 00:01:58,610 --> 00:02:00,460 >> Så det er slik vi holde styr. 43 00:02:00,460 --> 00:02:02,910 Selv om disse ikke er kontinuerlige biter av minnet, 44 00:02:02,910 --> 00:02:07,410 vi kan finne dem ved å bare følge ulike piler. 45 00:02:07,410 --> 00:02:09,800 Her er vår struktur for en lenket liste node. 46 00:02:09,800 --> 00:02:11,440 Vi så dette siste gang. 47 00:02:11,440 --> 00:02:13,080 Vi har vår struct node. 48 00:02:13,080 --> 00:02:14,340 Og det har to eiendommer. 49 00:02:14,340 --> 00:02:17,020 Nummer en, den faktiske verdien vi ønsker å lagre. 50 00:02:17,020 --> 00:02:18,290 I dette tilfellet er det et heltall. 51 00:02:18,290 --> 00:02:21,100 Det kan være en streng, det kunne være en røye, hva du vil. 52 00:02:21,100 --> 00:02:24,710 Og så må vi holde orden på neste node i vår lenket liste. 53 00:02:24,710 --> 00:02:29,797 Så det kommer til å bli en pekeren til neste node. 54 00:02:29,797 --> 00:02:31,880 Hvis du var bare å gjøre søk, som jeg sa før, 55 00:02:31,880 --> 00:02:34,900 du må følge dine piler ned. 56 00:02:34,900 --> 00:02:40,720 Innsetting, vil du holde styr av hvor resten av listen er. 57 00:02:40,720 --> 00:02:44,150 Og du ønsker å omdirigere hodet å peke på vår nye element, som 58 00:02:44,150 --> 00:02:46,640 i dette tilfellet er en, og da vil man peke 59 00:02:46,640 --> 00:02:49,480 til resten av den lenket liste. 60 00:02:49,480 --> 00:02:52,996 Så igjen, jeg vet dette er litt litt av en gjentakelse fra quiz null. 61 00:02:52,996 --> 00:02:55,370 Så vi må være veldig forsiktig om rekkefølgen vi 62 00:02:55,370 --> 00:03:00,390 gjøre disse pointings så vi gjør ikke miste oversikten over baksiden av listen. 63 00:03:00,390 --> 00:03:04,122 OK, noen spørsmål med bare enkeltvis knyttet lister? 64 00:03:04,122 --> 00:03:06,060 Awesome, OK, kult. 65 00:03:06,060 --> 00:03:09,410 >> Så nå skal vi gå inn på noe bare litt mer komplisert, 66 00:03:09,410 --> 00:03:10,920 dobbelt knyttet lister. 67 00:03:10,920 --> 00:03:13,680 Så i tillegg til å holde spor av de neste node, 68 00:03:13,680 --> 00:03:16,220 vi ønsker også å holde styr av det foregående noden. 69 00:03:16,220 --> 00:03:19,580 Og dette gjør oss til, hvis vi er på et tidspunkt i vår lenket liste, 70 00:03:19,580 --> 00:03:23,110 ikke bare gå fremover, men også iterere bakover. 71 00:03:23,110 --> 00:03:25,220 Fordi som vi så i en enkeltvis lenket liste, 72 00:03:25,220 --> 00:03:27,980 hvis vi var på noen node, og plutselig, besluttet vi, 73 00:03:27,980 --> 00:03:30,160 faktisk, jeg ønsker å gå til noden rett før meg, 74 00:03:30,160 --> 00:03:32,034 du vil måtte gå alle vei tilbake til hodet 75 00:03:32,034 --> 00:03:35,710 og iterere gjennom før du funnet noden du var ute etter. 76 00:03:35,710 --> 00:03:37,680 >> Så dette gjør ting litt lettere som vi er 77 00:03:37,680 --> 00:03:39,670 prøver å iterere gjennom vår lenket liste. 78 00:03:39,670 --> 00:03:47,870 Men det krever at vi skal holde styr på én mer peker, så enda en node stjerne. 79 00:03:47,870 --> 00:03:50,830 All right, så her kommer den morsomme delen. 80 00:03:50,830 --> 00:03:55,600 Vi kommer til å øve implementere fjern for dobbelt lenkede lister. 81 00:03:55,600 --> 00:03:58,660 Så dette er noe som er helt fritt vilt for quiz. 82 00:03:58,660 --> 00:04:00,750 Det dukket opp på tidligere tester. 83 00:04:00,750 --> 00:04:04,220 Så definitivt være forberedt å kode litt i C. 84 00:04:04,220 --> 00:04:07,900 Ikke glem at med alle denne morsomme PHP og Javascript, 85 00:04:07,900 --> 00:04:10,560 vi har fortsatt å huske å gjøre C. Så friske opp det 86 00:04:10,560 --> 00:04:12,146 hvis du føler deg rusten. 87 00:04:12,146 --> 00:04:14,580 >> Greit, la oss se om vi kan gjøre dette. 88 00:04:14,580 --> 00:04:16,312 OK, kult. 89 00:04:16,312 --> 00:04:18,600 Så vi kommer til å prøve å redigere rett i her, 90 00:04:18,600 --> 00:04:20,707 og forhåpentligvis dette går som planlagt. 91 00:04:20,707 --> 00:04:23,915 Greit, er det noen som ønsker å gi meg et forslag til hvordan jeg skal begynne? 92 00:04:23,915 --> 00:04:27,030 Den eneste forutsetningen er jeg gjør er at jeg allerede 93 00:04:27,030 --> 00:04:30,180 har en struktur definert, en jeg viste på siste side, 94 00:04:30,180 --> 00:04:31,420 på det siste lysbildet. 95 00:04:31,420 --> 00:04:39,250 Og jeg lagring hodet mitt koblet liste i noen pekeren kalt liste. 96 00:04:39,250 --> 00:04:42,190 Ønsker noen å få meg i gang? 97 00:04:42,190 --> 00:04:45,410 >> PUBLIKUM: Kan du lage en ny node å ringe gjennom listen? 98 00:04:45,410 --> 00:04:46,410 >> HANNAH: Awesome, så vi kommer til å skape 99 00:04:46,410 --> 00:04:47,951 en ny node å krype gjennom listen. 100 00:04:47,951 --> 00:04:48,570 Jeg liker det. 101 00:04:48,570 --> 00:04:50,799 Jeg vil bare kalle det pekeren hvis det er OK. 102 00:04:50,799 --> 00:04:52,340 Og hvor skal det opprinnelig starte? 103 00:04:52,340 --> 00:04:57,280 104 00:04:57,280 --> 00:04:59,840 >> PUBLIKUM: Sannsynligvis på leder av listen. 105 00:04:59,840 --> 00:05:00,590 HANNAH: Beautiful. 106 00:05:00,590 --> 00:05:03,670 Vi ønsker å starte på hodet, som Jeg sa kommer til å bli lagret i listen. 107 00:05:03,670 --> 00:05:04,170 Awesome. 108 00:05:04,170 --> 00:05:05,220 Så langt, så bra. 109 00:05:05,220 --> 00:05:08,260 Og nå, er vårt mål å iterere gjennom listen 110 00:05:08,260 --> 00:05:12,870 inntil vi finner node med verdi n at vi ønsker å slette. 111 00:05:12,870 --> 00:05:13,540 OK? 112 00:05:13,540 --> 00:05:15,910 >> Så nå er den delen der vi ønsker å iterere gjennom. 113 00:05:15,910 --> 00:05:19,488 Kan noen foreslå en måte å iterere gjennom? 114 00:05:19,488 --> 00:05:20,979 >> PUBLIKUM: En sløyfe. 115 00:05:20,979 --> 00:05:21,840 >> HANNAH: En sløyfe. 116 00:05:21,840 --> 00:05:22,620 Jeg elsker det. 117 00:05:22,620 --> 00:05:25,550 Spesielt kan vi prøve en stund loop. 118 00:05:25,550 --> 00:05:30,919 OK, og vi vet at vi har nådd slutten av vår liste når hva? 119 00:05:30,919 --> 00:05:32,210 PUBLIKUM: Når pekeren er null. 120 00:05:32,210 --> 00:05:33,418 HANNAH: Når pekeren er null. 121 00:05:33,418 --> 00:05:34,320 Vakker, jeg elsker det. 122 00:05:34,320 --> 00:05:35,110 OK, kult. 123 00:05:35,110 --> 00:05:39,300 124 00:05:39,300 --> 00:05:43,190 Så beklager hvis min byks brace er slags falle utenfor skjermen. 125 00:05:43,190 --> 00:05:44,090 Vi brakte den tilbake. 126 00:05:44,090 --> 00:05:46,610 OK, kult. 127 00:05:46,610 --> 00:05:48,690 Hva blir det neste? 128 00:05:48,690 --> 00:05:51,950 >> Så vi vet at vi ønsker å slette noden som har verdi n. 129 00:05:51,950 --> 00:05:56,340 Så la oss finne det tilfelle hvor vi faktisk finne vår node. 130 00:05:56,340 --> 00:05:57,840 Så hvordan ville jeg sjekke det? 131 00:05:57,840 --> 00:06:02,210 Jeg vil bare si hvis pekeren, og deretter hvis jeg ønsker å få verdi ut av pekeren, 132 00:06:02,210 --> 00:06:08,940 Jeg bare do arrow n, lik n, parameteren 133 00:06:08,940 --> 00:06:14,490 at vi ga til denne funksjonen, node som vi ønsker å faktisk slette. 134 00:06:14,490 --> 00:06:17,090 Eventuelle spørsmål fram til her? 135 00:06:17,090 --> 00:06:18,360 OK. 136 00:06:18,360 --> 00:06:24,140 OK, så nå la oss tegne et raskt bilde på bordet for å visualisere dette. 137 00:06:24,140 --> 00:06:30,710 >> Så la oss si det er vår herlige node. 138 00:06:30,710 --> 00:06:34,480 Og det har en verdi, vil jeg bare si fire. 139 00:06:34,480 --> 00:06:40,340 Og den peker til neste node i vår lenket liste. 140 00:06:40,340 --> 00:06:42,220 Og det er ingenting før det. 141 00:06:42,220 --> 00:06:45,800 Så vi har vår forrige peker til ingenting. 142 00:06:45,800 --> 00:06:48,110 I dette tilfelle vi peke bakover. 143 00:06:48,110 --> 00:06:50,960 OK, bare å sette opp min lenket liste over her. 144 00:06:50,960 --> 00:06:53,630 Og vi har en liste som peker til denne strukturen til å begynne med. 145 00:06:53,630 --> 00:06:57,220 146 00:06:57,220 --> 00:07:00,485 Jeg skal trekke et for fullstendighetens skyld. 147 00:07:00,485 --> 00:07:04,209 148 00:07:04,209 --> 00:07:06,117 OK. 149 00:07:06,117 --> 00:07:07,480 Jeg vil peke dette fremover. 150 00:07:07,480 --> 00:07:09,550 Og jeg vil påpeke at en tilbake. 151 00:07:09,550 --> 00:07:10,360 Oops, beklager. 152 00:07:10,360 --> 00:07:12,710 Ja, fikk denne bakover. 153 00:07:12,710 --> 00:07:15,548 154 00:07:15,548 --> 00:07:16,967 Gjøre det igjen. 155 00:07:16,967 --> 00:07:18,330 OK, det vi går. 156 00:07:18,330 --> 00:07:19,910 All right, fikk den. 157 00:07:19,910 --> 00:07:21,780 OK, her er vårt bilde. 158 00:07:21,780 --> 00:07:24,860 >> OK, så vi ønsker å vurdere to tilfeller. 159 00:07:24,860 --> 00:07:27,330 Det første tilfellet er dersom node vi ønsker å slette 160 00:07:27,330 --> 00:07:29,420 er helt i starten av vår liste. 161 00:07:29,420 --> 00:07:34,070 Og så, den andre saken som vi ønsker å vurdere er om det er noe annet. 162 00:07:34,070 --> 00:07:37,660 Jeg forstår at dette er en helt rotete tegning av hele mitt sletting, 163 00:07:37,660 --> 00:07:40,400 men forhåpentligvis vil vi prøve å gjøre dette klart med noen kode. 164 00:07:40,400 --> 00:07:45,450 >> OK, så la oss dekke saken hvor vi funnet vår node, 165 00:07:45,450 --> 00:07:48,900 og det er helt på start av vår lenket liste. 166 00:07:48,900 --> 00:07:50,810 Noen gi meg en forslag her til hva 167 00:07:50,810 --> 00:07:54,684 Jeg bør gjøre for å faktisk fjerne vår node? 168 00:07:54,684 --> 00:07:55,970 Det er litt vanskelig. 169 00:07:55,970 --> 00:07:56,470 OK? 170 00:07:56,470 --> 00:07:59,628 >> PUBLIKUM: Du må ta node som vil være før den 171 00:07:59,628 --> 00:08:01,794 og gjøre det peker på en som ville være etter den, 172 00:08:01,794 --> 00:08:03,004 og ta noden som ville være etter det og gjøre 173 00:08:03,004 --> 00:08:04,554 det peker til noden før det. 174 00:08:04,554 --> 00:08:05,220 HANNAH: Nettopp. 175 00:08:05,220 --> 00:08:10,640 OK, slik dette er tilfellet where-- vi har to tilfeller. 176 00:08:10,640 --> 00:08:14,100 Vi har det tilfellet der node som vi leter etter 177 00:08:14,100 --> 00:08:18,270 er forsiden av listen. 178 00:08:18,270 --> 00:08:23,110 OK, og deretter slik at du beskrevet er ellers, ikke sant? 179 00:08:23,110 --> 00:08:24,500 Det er et annet sted i listen. 180 00:08:24,500 --> 00:08:27,460 181 00:08:27,460 --> 00:08:32,840 Så du sa, må vi se på noden forrige, 182 00:08:32,840 --> 00:08:36,500 og gjøre den forrige node peker til den neste noden. 183 00:08:36,500 --> 00:08:40,510 Så la oss si vi er prøver å ta ut fem 184 00:08:40,510 --> 00:08:43,059 i mitt veldig rotete tegning over her. 185 00:08:43,059 --> 00:08:47,530 Vi ønsker å være sikker på at fire nå peker til seks. 186 00:08:47,530 --> 00:08:49,590 Fire sin neste punktene til seks. 187 00:08:49,590 --> 00:08:52,150 Og seks tidligere peker på fire. 188 00:08:52,150 --> 00:08:53,960 Det er vårt mål her, ikke sant? 189 00:08:53,960 --> 00:08:56,150 Dette er hva jeg tror du sa bare der borte. 190 00:08:56,150 --> 00:08:58,450 >> OK, så la oss få det første stykket. 191 00:08:58,450 --> 00:09:02,300 La oss gjøre det har forrige pekeren forrige. 192 00:09:02,300 --> 00:09:06,550 193 00:09:06,550 --> 00:09:09,690 Så fire neste skal peke til hva? 194 00:09:09,690 --> 00:09:13,210 195 00:09:13,210 --> 00:09:14,900 Nøyaktig, i dette tilfelle seks. 196 00:09:14,900 --> 00:09:18,470 Så vi bør si pekeren, neste. 197 00:09:18,470 --> 00:09:20,600 OK? 198 00:09:20,600 --> 00:09:21,150 OK. 199 00:09:21,150 --> 00:09:24,870 Så la oss bli kvitt denne stygge bilde og prøve å tegne en litt bedre en. 200 00:09:24,870 --> 00:09:29,040 201 00:09:29,040 --> 00:09:31,172 Vi har vår liste hodet her. 202 00:09:31,172 --> 00:09:36,440 203 00:09:36,440 --> 00:09:42,740 Og som peker til den første noden i vår lenket liste, som vi sa er fire. 204 00:09:42,740 --> 00:09:45,620 Her er vår andre node, fem. 205 00:09:45,620 --> 00:09:47,307 Og vår tredje node, seks. 206 00:09:47,307 --> 00:09:50,265 Bare prøver å trekke nøyaktig samme bilde, bare litt mer renslig. 207 00:09:50,265 --> 00:09:52,780 208 00:09:52,780 --> 00:09:56,280 OK, så fire neste opprinnelig peker på fem. 209 00:09:56,280 --> 00:09:58,620 Fem er neste punktene til seks. 210 00:09:58,620 --> 00:10:00,170 Seks tidligere peker på fem. 211 00:10:00,170 --> 00:10:02,470 Og fem tidligere peker på fire. 212 00:10:02,470 --> 00:10:03,360 Så mye bedre! 213 00:10:03,360 --> 00:10:04,530 OK, kult. 214 00:10:04,530 --> 00:10:07,770 >> Så nå, hva vi gjorde bare her, denne linjen med kode, 215 00:10:07,770 --> 00:10:12,680 som sier pekeren forrige neste, så hva betyr det? 216 00:10:12,680 --> 00:10:17,540 Det betyr at hvis vi ser på fem, gå til forrige node, 217 00:10:17,540 --> 00:10:21,970 og det er neste skal nå punkt til fem neste. 218 00:10:21,970 --> 00:10:27,840 Så egentlig, er hva som gjør er som er slette denne pilen 219 00:10:27,840 --> 00:10:29,640 og gjør det hoppe rett over fem. 220 00:10:29,640 --> 00:10:31,360 Er det klart? 221 00:10:31,360 --> 00:10:33,200 Jeg vet det kan være litt sketchy. 222 00:10:33,200 --> 00:10:34,480 Jeg ser noen hodet nikker. 223 00:10:34,480 --> 00:10:35,390 Det er bra. 224 00:10:35,390 --> 00:10:36,670 OK, kult. 225 00:10:36,670 --> 00:10:39,590 Nå, hva er neste steg? 226 00:10:39,590 --> 00:10:42,060 >> Jeg har nullstille neste. 227 00:10:42,060 --> 00:10:45,297 Nå, som andre pilen må jeg endre? 228 00:10:45,297 --> 00:10:46,130 Denne retten her. 229 00:10:46,130 --> 00:10:47,560 Seks tidligere. 230 00:10:47,560 --> 00:10:50,620 Vi ønsker ikke seks tidligere å peke på fem lenger. 231 00:10:50,620 --> 00:10:54,580 Vi ønsker at det å peke på fire. 232 00:10:54,580 --> 00:10:56,190 Betyr det bildet fornuftig? 233 00:10:56,190 --> 00:10:58,370 Så nå er vi faktisk kan ta fem. 234 00:10:58,370 --> 00:10:59,370 Så la oss få det stykke. 235 00:10:59,370 --> 00:11:03,390 236 00:11:03,390 --> 00:11:11,180 Hva bør jeg gjøre før jeg null seks tidligere til fire? 237 00:11:11,180 --> 00:11:14,360 Noen ideer der ute? 238 00:11:14,360 --> 00:11:17,369 >> PUBLIKUM: Frigjør noden mellom dem ved å sette den til null? 239 00:11:17,369 --> 00:11:17,910 HANNAH: Cool. 240 00:11:17,910 --> 00:11:21,100 Definitivt, er vår ende mål kommer til å være for å frigjøre den noden. 241 00:11:21,100 --> 00:11:22,490 Slik at vi kan gjøre det med her. 242 00:11:22,490 --> 00:11:23,540 Gratis pekeren. 243 00:11:23,540 --> 00:11:24,810 Absolutt. 244 00:11:24,810 --> 00:11:29,160 Men selv før det, la oss just-- vårt mål rett 245 00:11:29,160 --> 00:11:38,730 her er å sette markøren ved siden forrige lik pekeren forrige. 246 00:11:38,730 --> 00:11:40,760 Jeg vet dette er å få dekket opp. 247 00:11:40,760 --> 00:11:45,440 OK, la oss take-- kult. 248 00:11:45,440 --> 00:11:46,990 Kan alle se denne bunnlinjen? 249 00:11:46,990 --> 00:11:47,840 Eller er det super bittesmå? 250 00:11:47,840 --> 00:11:50,430 251 00:11:50,430 --> 00:11:54,300 >> Så før vi utfører denne linjen her, vi ønsker 252 00:11:54,300 --> 00:11:58,375 å sørge for at markøren ved siden av er ikke null. 253 00:11:58,375 --> 00:12:00,500 Fordi hvis pekeren neste er null, hva slags feil 254 00:12:00,500 --> 00:12:02,727 vil jeg få når jeg prøver å referere til en nullpeker? 255 00:12:02,727 --> 00:12:03,560 PUBLIKUM: Seg feil. 256 00:12:03,560 --> 00:12:05,660 HANNAH: En SEG feil, vakker. 257 00:12:05,660 --> 00:12:09,690 OK, så hvis det ikke er null, så vi kan tilbakestilles. 258 00:12:09,690 --> 00:12:14,420 Og vi har seks poeng igjen til fire. 259 00:12:14,420 --> 00:12:17,440 Spørsmål opp til dette punktet? 260 00:12:17,440 --> 00:12:17,940 Ja? 261 00:12:17,940 --> 00:12:19,814 >> PUBLIKUM: I din første hvis setningen, gjorde du 262 00:12:19,814 --> 00:12:23,817 betyr å ha pilen neste, eller [uhørbart]? 263 00:12:23,817 --> 00:12:25,150 HANNAH: Jeg mente pekeren pil n. 264 00:12:25,150 --> 00:12:30,270 Så i utgangspunktet, det jeg prøver å gjøre er si, gjeldende node som jeg er 265 00:12:30,270 --> 00:12:34,100 itera over, gjeldende node som Jeg ser på, jeg er lagring i pekeren. 266 00:12:34,100 --> 00:12:37,630 Og jeg vil vite pekerens verdi, som i dette tilfellet er n. 267 00:12:37,630 --> 00:12:39,500 Og jeg ønsker å se, er noden jeg ser 268 00:12:39,500 --> 00:12:42,790 for noden Jeg tar sikte på å slette? 269 00:12:42,790 --> 00:12:47,657 Så det er derfor vi har her pekeren n. 270 00:12:47,657 --> 00:12:49,857 >> PUBLIKUM: Så pilen går til n, sette deg verdien 271 00:12:49,857 --> 00:12:52,058 og lagre den i en node kalt n? 272 00:12:52,058 --> 00:12:55,410 273 00:12:55,410 --> 00:12:58,820 >> HANNAH: Så det er som om jeg er gå gjennom dette lenket liste 274 00:12:58,820 --> 00:13:00,310 og peker på fem. 275 00:13:00,310 --> 00:13:03,600 Hvis jeg ønsker å få denne verdien, hvis Jeg ønsker å få det nummeret, 5, 276 00:13:03,600 --> 00:13:06,400 Jeg må gjøre pekeren pil n. 277 00:13:06,400 --> 00:13:06,900 Cool? 278 00:13:06,900 --> 00:13:07,900 Yeah. 279 00:13:07,900 --> 00:13:11,200 >> PUBLIKUM: N er navnet på variabelen? 280 00:13:11,200 --> 00:13:11,700 HANNAH: Ja. 281 00:13:11,700 --> 00:13:14,870 Så hvis vi vende tilbake ett lysbilde, n er navnet 282 00:13:14,870 --> 00:13:18,660 av verdien innsiden av node i vår lenket liste. 283 00:13:18,660 --> 00:13:21,510 Og jeg vet at det kan bli litt litt forvirrende fordi vi også 284 00:13:21,510 --> 00:13:24,680 ringer tingen at vi ønsker å slette n. 285 00:13:24,680 --> 00:13:26,717 Så det er der det en linje kommer fra. 286 00:13:26,717 --> 00:13:27,671 Yeah? 287 00:13:27,671 --> 00:13:31,010 >> PUBLIKUM: Hva har du [Uhørbart] hvordan de fungerer? 288 00:13:31,010 --> 00:13:33,872 289 00:13:33,872 --> 00:13:35,780 En peker [uhørbart]? 290 00:13:35,780 --> 00:13:37,520 >> HANNAH: Sure. 291 00:13:37,520 --> 00:13:40,027 Er du snakker om-- hvilken linje? 292 00:13:40,027 --> 00:13:41,526 PUBLIKUM: Den siste linjen [uhørbart]. 293 00:13:41,526 --> 00:13:44,280 294 00:13:44,280 --> 00:13:45,250 >> HANNAH: Jada, OK. 295 00:13:45,250 --> 00:13:48,540 Så la oss se på bildet i For å forsøke å forklare dette. 296 00:13:48,540 --> 00:13:51,030 Jeg beklager, for kamera, spørsmålet var 297 00:13:51,030 --> 00:13:54,580 kan vi forklare pekeren arrow neste pekeren forrige. 298 00:13:54,580 --> 00:14:01,510 OK, så la oss si at vi er på fem og vårt mål er å slette fem. 299 00:14:01,510 --> 00:14:07,240 Så pekeren neste, hvilke av disse tre noder, gir dette oss? 300 00:14:07,240 --> 00:14:10,840 Det bringer oss til den sjette node, ikke sant? 301 00:14:10,840 --> 00:14:16,490 >> OK, så nå vi spør for de seks tidligere. 302 00:14:16,490 --> 00:14:17,060 OK? 303 00:14:17,060 --> 00:14:20,210 Og vi nullstille dette å være lik fire, 304 00:14:20,210 --> 00:14:23,214 som skjedde til å være fem tidligere. 305 00:14:23,214 --> 00:14:25,180 Jeg vet, det er super vanskelig å holde styr på. 306 00:14:25,180 --> 00:14:29,286 Jeg virkelig anbefale deg tegne bilder hvis du får et spørsmål som dette. 307 00:14:29,286 --> 00:14:30,242 Ja? 308 00:14:30,242 --> 00:14:32,617 >> PUBLIKUM: Er grunnen til at vi har ikke en [uhørbart]? 309 00:14:32,617 --> 00:14:37,430 310 00:14:37,430 --> 00:14:38,570 >> HANNAH: Nettopp. 311 00:14:38,570 --> 00:14:44,800 Så spørsmålet var, hvorfor gjøre vi ikke trenger å sjekke her? 312 00:14:44,800 --> 00:14:48,160 Hvorfor ikke vi trenger å sjekke at pekeren tidligere ikke er lik null? 313 00:14:48,160 --> 00:14:50,070 Og det er fordi vi har allerede skilt ut 314 00:14:50,070 --> 00:14:52,490 tilfelle dersom pekeren største helt i begynnelsen. 315 00:14:52,490 --> 00:14:54,060 Veldig godt spørsmål. 316 00:14:54,060 --> 00:14:56,880 Noe annet på dette? 317 00:14:56,880 --> 00:14:57,380 OK, kult. 318 00:14:57,380 --> 00:14:58,360 Så la oss avslutte det opp. 319 00:14:58,360 --> 00:14:59,890 Vi er nesten der. 320 00:14:59,890 --> 00:15:01,310 >> Så hva om det er på hodet? 321 00:15:01,310 --> 00:15:03,360 Hva om i stedet for prøver å slette fem, 322 00:15:03,360 --> 00:15:06,240 vi faktisk ønsket å slette fire? 323 00:15:06,240 --> 00:15:07,270 Hva skulle jeg gjøre? 324 00:15:07,270 --> 00:15:09,610 Vel, jeg ønsker å nullstille hodet mitt til hva? 325 00:15:09,610 --> 00:15:14,288 326 00:15:14,288 --> 00:15:15,585 Rop det ut? 327 00:15:15,585 --> 00:15:16,710 PUBLIKUM: Den ene etter den. 328 00:15:16,710 --> 00:15:17,460 HANNAH: Beautiful. 329 00:15:17,460 --> 00:15:26,430 OK, så vi ønsker liste å peke til hva vår pekeren neste node er. 330 00:15:26,430 --> 00:15:29,040 Bra. 331 00:15:29,040 --> 00:15:30,810 Og bare for fullstendighet s skyld, ville vi 332 00:15:30,810 --> 00:15:35,590 lurt å sjekke at så lenge vår liste ikke er null, så lenge vår listen er ikke 333 00:15:35,590 --> 00:15:42,730 tom, så vi ønsker å sette vår tidligere lik null. 334 00:15:42,730 --> 00:15:46,960 335 00:15:46,960 --> 00:15:50,230 Spørsmålet så langt? 336 00:15:50,230 --> 00:15:53,205 Et steg from--? 337 00:15:53,205 --> 00:15:55,530 >> PUBLIKUM: Ville det være hvis Listen er ikke lik null? 338 00:15:55,530 --> 00:15:56,950 >> HANNAH: Ja, du har helt rett. 339 00:15:56,950 --> 00:15:58,130 Jeg er så lei meg. 340 00:15:58,130 --> 00:16:00,040 Er listen er ikke lik null. 341 00:16:00,040 --> 00:16:01,915 Awesome. 342 00:16:01,915 --> 00:16:04,245 Prøver å få alt dette på skjermen. 343 00:16:04,245 --> 00:16:06,870 Det er slags falle av. 344 00:16:06,870 --> 00:16:07,730 Sorry, folkens. 345 00:16:07,730 --> 00:16:11,874 Og sist men ikke minst, alle vi trenger å gjøre er retur. 346 00:16:11,874 --> 00:16:12,840 OK. 347 00:16:12,840 --> 00:16:15,400 Det var mye crammed i veldig raskt. 348 00:16:15,400 --> 00:16:16,800 Ta et sekund å se dette over. 349 00:16:16,800 --> 00:16:18,216 Fortell meg hvis du har spørsmål. 350 00:16:18,216 --> 00:16:20,232 351 00:16:20,232 --> 00:16:20,732 Yeah? 352 00:16:20,732 --> 00:16:26,940 >> PUBLIKUM: Hvis listen er på hode, then-- vent, glem. 353 00:16:26,940 --> 00:16:27,700 >> HANNAH: OK, bra. 354 00:16:27,700 --> 00:16:30,987 Så dette er hvis listen er på hodet, fjerner vi den til hva vi satt inn. 355 00:16:30,987 --> 00:16:31,486 Yeah? 356 00:16:31,486 --> 00:16:33,777 >> PUBLIKUM: Kan du forklare det første hvis setningen igjen? 357 00:16:33,777 --> 00:16:36,149 Dersom pekeren til n er lik n? 358 00:16:36,149 --> 00:16:36,690 HANNAH: Sure. 359 00:16:36,690 --> 00:16:42,780 Så vårt mål om hele denne funksjonen er å slette noden som har verdi n. 360 00:16:42,780 --> 00:16:47,460 Så hvis vi finner, som vi er itera gjennom vår liste, 361 00:16:47,460 --> 00:16:51,770 noden med verdi n, er at den vi ønsker å slette. 362 00:16:51,770 --> 00:16:57,286 Så alt av slettingen skjer innsiden av den store hvis setningen. 363 00:16:57,286 --> 00:16:58,593 Betyr det fornuftig? 364 00:16:58,593 --> 00:16:59,480 Cool. 365 00:16:59,480 --> 00:16:59,990 Yeah? 366 00:16:59,990 --> 00:17:02,864 >> PUBLIKUM: Kanskje du bare ikke kan se det, men ikke du trenger også en linje 367 00:17:02,864 --> 00:17:06,024 for å bla gjennom listen? 368 00:17:06,024 --> 00:17:06,690 HANNAH: Awesome. 369 00:17:06,690 --> 00:17:10,896 La oss ta dette opp litt, og vi vil kaste det rett i bunnen. 370 00:17:10,896 --> 00:17:13,282 371 00:17:13,282 --> 00:17:15,490 Kanskje styret ville har vært en litt bedre idé. 372 00:17:15,490 --> 00:17:17,829 Så hvordan ville jeg flytte pekeren fremover? 373 00:17:17,829 --> 00:17:20,184 >> PUBLIKUM: Pointer tilsvarer pekeren pluss en. 374 00:17:20,184 --> 00:17:21,599 >> HANNAH: Beautiful. 375 00:17:21,599 --> 00:17:25,050 Så som tillater oss å fortsette itera gjennom. 376 00:17:25,050 --> 00:17:26,251 OK. 377 00:17:26,251 --> 00:17:27,750 PUBLIKUM: Ville ikke det være en annen? 378 00:17:27,750 --> 00:17:29,028 HANNAH: En gang til? 379 00:17:29,028 --> 00:17:32,444 PUBLIKUM: Ville ikke det være et annet sted etter det store gamle hvis 380 00:17:32,444 --> 00:17:35,519 uttalelse [uhørbart]? 381 00:17:35,519 --> 00:17:36,310 HANNAH: Hvilken del? 382 00:17:36,310 --> 00:17:38,350 Jeg beklager. 383 00:17:38,350 --> 00:17:41,800 >> PUBLIKUM: The traversering, bør ikke det være en annen? 384 00:17:41,800 --> 00:17:43,550 HANNAH: Du absolutt kunne ha et annet. 385 00:17:43,550 --> 00:17:46,930 Fordi jeg har en retur rett der, trenger du ikke et annet. 386 00:17:46,930 --> 00:17:48,760 Men ja, godt spørsmål. 387 00:17:48,760 --> 00:17:50,170 OK, ja? 388 00:17:50,170 --> 00:17:52,878 PUBLIKUM: Kan vi tenke på pekeren som går gjennom listen 389 00:17:52,878 --> 00:17:56,610 som å ta på verdien til hver node i listen? 390 00:17:56,610 --> 00:18:00,650 Eller skal vi tenke på det som form for eksternt i forhold til listen? 391 00:18:00,650 --> 00:18:02,350 >> HANNAH: Enten en er greit, tror jeg. 392 00:18:02,350 --> 00:18:05,880 Måten jeg tenke meg at det er Jeg sier, OK, jeg peker. 393 00:18:05,880 --> 00:18:06,520 Og dette er meg. 394 00:18:06,520 --> 00:18:07,150 Dette er min hånd. 395 00:18:07,150 --> 00:18:09,960 Jeg kommer til å peke på den annen ting som jeg ønsker å iterere gjennom. 396 00:18:09,960 --> 00:18:12,270 Først kommer jeg til å peke til leder av listen. 397 00:18:12,270 --> 00:18:14,144 Og det forteller meg at jeg er kommer til å peke på fire. 398 00:18:14,144 --> 00:18:18,060 Og så meg, som ligger utenfor listen, Jeg kan peke på hvert av disse elementene. 399 00:18:18,060 --> 00:18:19,520 Så jeg tror på meg selv som pekeren. 400 00:18:19,520 --> 00:18:21,645 PUBLIKUM: Så når du sletter en av disse elementene, 401 00:18:21,645 --> 00:18:23,404 du slette selv, så å si. 402 00:18:23,404 --> 00:18:24,070 HANNAH: Nettopp. 403 00:18:24,070 --> 00:18:25,920 Så du slette ting du peker til. 404 00:18:25,920 --> 00:18:28,340 Så i eksempelet som vi så hvor vi er 405 00:18:28,340 --> 00:18:31,670 prøver å slette fem, når jeg peker til fem, 406 00:18:31,670 --> 00:18:34,200 Jeg ønsker å slette ting jeg peker til. 407 00:18:34,200 --> 00:18:35,870 Helt riktig. 408 00:18:35,870 --> 00:18:36,577 Ja? 409 00:18:36,577 --> 00:18:39,410 PUBLIKUM: Har vi tatt vare på tilfellet hvor n ikke er på listen? 410 00:18:39,410 --> 00:18:40,460 HANNAH: Hvis n er ikke på listen? 411 00:18:40,460 --> 00:18:43,501 Alt som kommer til å skje er at du er kommer til å iterere gjennom og iterere 412 00:18:43,501 --> 00:18:47,616 gjennom, og deretter, du kommer å få til pekeren blir null, 413 00:18:47,616 --> 00:18:48,990 og så kommer du til å bli gjort. 414 00:18:48,990 --> 00:18:50,812 >> PUBLIKUM: Så har vi å returnere noe? 415 00:18:50,812 --> 00:18:51,520 HANNAH: Vi kunne. 416 00:18:51,520 --> 00:18:54,500 Den måten at hvis definert dette funksjon, jeg bare si at den returnerer 417 00:18:54,500 --> 00:18:55,770 ugyldig uansett. 418 00:18:55,770 --> 00:18:58,360 Men du kunne ha noe som returnerer et heltall, 419 00:18:58,360 --> 00:19:00,920 og har det tilbake negativ 1 hvis det mislykkes. 420 00:19:00,920 --> 00:19:03,070 Noe sånt. 421 00:19:03,070 --> 00:19:04,494 Spørsmål with-- ja? 422 00:19:04,494 --> 00:19:05,410 PUBLIKUM: [uhørlig]? 423 00:19:05,410 --> 00:19:05,993 HANNAH: Sorry? 424 00:19:05,993 --> 00:19:07,419 PUBLIKUM: [uhørlig]? 425 00:19:07,419 --> 00:19:07,960 HANNAH: Sure. 426 00:19:07,960 --> 00:19:11,730 Så det er actual-- når vi har gjort alt dette arbeidet med å flytte 427 00:19:11,730 --> 00:19:16,530 alle disse piler rundt, hele vår Målet var å bli kvitt noden 428 00:19:16,530 --> 00:19:18,230 at vi leter etter. 429 00:19:18,230 --> 00:19:21,610 Slik at i dette tilfellet, frigjør pekeren, hvis jeg peker til fem, 430 00:19:21,610 --> 00:19:24,670 det er som å slette denne middel node. 431 00:19:24,670 --> 00:19:27,250 Det er gratis pekeren del. 432 00:19:27,250 --> 00:19:29,090 Det fornuftig? 433 00:19:29,090 --> 00:19:31,390 >> PUBLIKUM: Så selv trodde du gjorde ikke [uhørbart]? 434 00:19:31,390 --> 00:19:36,060 >> HANNAH: Så vi antok i begynnelsen vi hadde noen liste som var already-- 435 00:19:36,060 --> 00:19:37,220 de hadde satt dette sammen. 436 00:19:37,220 --> 00:19:39,761 Så for å konstruere dette listen, må har de [uhørbart]. 437 00:19:39,761 --> 00:19:42,190 438 00:19:42,190 --> 00:19:42,750 Cool. 439 00:19:42,750 --> 00:19:44,490 Noe annet med dette? 440 00:19:44,490 --> 00:19:46,386 Ja? 441 00:19:46,386 --> 00:19:49,204 >> PUBLIKUM: Hva hvis listen ikke lik null linje? 442 00:19:49,204 --> 00:19:49,704 [Uhørbart]? 443 00:19:49,704 --> 00:19:52,289 444 00:19:52,289 --> 00:19:53,080 HANNAH: Akkurat her? 445 00:19:53,080 --> 00:19:53,840 PUBLIKUM: Yeah. 446 00:19:53,840 --> 00:19:57,370 HANNAH: OK, jeg alt jeg gjør er jeg bare å sørge for 447 00:19:57,370 --> 00:20:03,250 at før jeg prøver å dereference liste, før jeg prøver å få tilgang til tidligere, 448 00:20:03,250 --> 00:20:07,210 Jeg vil være sikker på at det ikke er null så jeg ikke får en SEG feil. 449 00:20:07,210 --> 00:20:08,400 Cool. 450 00:20:08,400 --> 00:20:10,820 >> OK, jeg vet at dette var ganske mye å komme gjennom. 451 00:20:10,820 --> 00:20:14,950 Så dette lysbildet vil være gjort tilgjengelig for deg. 452 00:20:14,950 --> 00:20:17,341 Så du kan gå gjennom den i mer detalj. 453 00:20:17,341 --> 00:20:17,841 Ja? 454 00:20:17,841 --> 00:20:19,749 >> PUBLIKUM: Hvorfor listen [uhørbart]? 455 00:20:19,749 --> 00:20:24,129 456 00:20:24,129 --> 00:20:24,670 HANNAH: Sure. 457 00:20:24,670 --> 00:20:27,390 Så liste egentlig peker til dette elementet akkurat her, 458 00:20:27,390 --> 00:20:29,200 det første element i listen. 459 00:20:29,200 --> 00:20:30,748 Så det kan ikke ha en tidligere. 460 00:20:30,748 --> 00:20:31,736 Ja? 461 00:20:31,736 --> 00:20:35,194 >> PUBLIKUM: Har pekeren punkt til samme adresse i minnet? 462 00:20:35,194 --> 00:20:38,404 Betyr peker til den samme adresse i minnet som noden 463 00:20:38,404 --> 00:20:40,640 at den peker til? 464 00:20:40,640 --> 00:20:43,865 >> HANNAH: Ja, det peker til denne noden i minnet. 465 00:20:43,865 --> 00:20:47,190 >> PUBLIKUM: Høyre, så når du [uhørbart]? 466 00:20:47,190 --> 00:20:50,580 >> HANNAH: På en måte, ja. 467 00:20:50,580 --> 00:20:51,280 OK. 468 00:20:51,280 --> 00:20:52,997 Greit, la oss gå sammen med dette. 469 00:20:52,997 --> 00:20:55,330 Og hvis du har flere spørsmål, værende på slutten, 470 00:20:55,330 --> 00:20:57,130 og vi kan gå gjennom det igjen. 471 00:20:57,130 --> 00:20:58,120 OK, kult. 472 00:20:58,120 --> 00:21:00,490 Nå, vi kommer til å gå videre til hasj, prøver tabeller, 473 00:21:00,490 --> 00:21:04,940 og trær, som du fikk super kjent med i p-set fem, stavekontroll. 474 00:21:04,940 --> 00:21:11,020 >> Så hash table er bare en array med enkeltvis lenkede lister 475 00:21:11,020 --> 00:21:14,050 eller dobbelt knyttet lister som kommer ut av det. 476 00:21:14,050 --> 00:21:16,380 Så vi har en slags av assosiativ array. 477 00:21:16,380 --> 00:21:21,280 Og hvordan vi vite hvilke av disse arrays bøtter for å komme inn, 478 00:21:21,280 --> 00:21:24,137 vi bruker en hash-funksjon. 479 00:21:24,137 --> 00:21:26,470 Så i dette tilfellet, kan hvem som helst gjette hva hash-funksjon 480 00:21:26,470 --> 00:21:28,636 ville bli bare basert på noen av input og output? 481 00:21:28,636 --> 00:21:31,392 482 00:21:31,392 --> 00:21:33,194 >> PUBLIKUM: Letter antall alfabetet. 483 00:21:33,194 --> 00:21:33,860 HANNAH: Nettopp. 484 00:21:33,860 --> 00:21:36,160 Det setter bare dem i alfabetisk rekkefølge. 485 00:21:36,160 --> 00:21:39,280 Alt som starter med en A er satt inn i den første bøtte. 486 00:21:39,280 --> 00:21:43,340 Alt med et B er satt inn i andre bøtte, så videre, og så videre. 487 00:21:43,340 --> 00:21:45,620 Awesome, OK. 488 00:21:45,620 --> 00:21:48,980 Og en hash-funksjon er noen funksjon som tar inn et ord 489 00:21:48,980 --> 00:21:51,910 og vil fortelle deg hva bøtte det hører hjemme i. 490 00:21:51,910 --> 00:21:55,150 Så hvilken oppføring i vår matrise det hører hjemme i. 491 00:21:55,150 --> 00:21:58,080 >> Så hver gang jeg gi min hash fungere et ord, 492 00:21:58,080 --> 00:22:00,660 det skal fortelle meg det samme plassere hver eneste gang. 493 00:22:00,660 --> 00:22:03,270 Så hvis vi bruker hash-funksjon fra forrige lysbilde 494 00:22:03,270 --> 00:22:05,950 hvor vi sortering av første bokstaven i alfabetet, 495 00:22:05,950 --> 00:22:08,230 hver gang jeg gi min hash-funksjon "eple" 496 00:22:08,230 --> 00:22:10,180 det skal alltid gi meg tilbake 0. 497 00:22:10,180 --> 00:22:12,890 Så hvis jeg har et eple å sette i min hash table, 498 00:22:12,890 --> 00:22:17,700 hvis jeg gir "eple" til min hash-funksjon, det skal si, gå sette den i bøtte 0. 499 00:22:17,700 --> 00:22:19,980 Hvis jeg leter etter en eple i min hash table 500 00:22:19,980 --> 00:22:24,340 og jeg sier, hvor kanskje eple levende, spør du din hash-funksjon. 501 00:22:24,340 --> 00:22:26,900 Og det står, gå til bøtte 0. 502 00:22:26,900 --> 00:22:29,150 All right? 503 00:22:29,150 --> 00:22:32,660 Spørsmål med hash funksjoner? 504 00:22:32,660 --> 00:22:34,570 Awesome. 505 00:22:34,570 --> 00:22:37,320 >> Her er en litt mer detaljert forklaring 506 00:22:37,320 --> 00:22:39,570 av hva en hash-funksjon kan se ut. 507 00:22:39,570 --> 00:22:42,230 508 00:22:42,230 --> 00:22:42,960 OK. 509 00:22:42,960 --> 00:22:45,960 Nå, problemet med hasj funksjonene er i en ideell verden, 510 00:22:45,960 --> 00:22:48,870 vi ville bare ha ett ting i hver bøtte. 511 00:22:48,870 --> 00:22:50,900 Men i virkeligheten, det er Ikke bare ett ord 512 00:22:50,900 --> 00:22:54,280 som starter med A. Det er ikke bare ett ord som begynner med B. Så 513 00:22:54,280 --> 00:22:56,960 i dette tilfellet, hvis vi plutselig får "bær" 514 00:22:56,960 --> 00:22:58,710 og vi ønsker å sette den inn i vårt hash table, 515 00:22:58,710 --> 00:23:03,640 og vi ser, oh, nei, er banan allerede der, hva skal vi gjøre? 516 00:23:03,640 --> 00:23:05,900 >> Vel, vi har to alternativer. 517 00:23:05,900 --> 00:23:07,990 Det første alternativet er lineær sondering, som 518 00:23:07,990 --> 00:23:11,100 betyr bare gå finne neste tom bøtte. 519 00:23:11,100 --> 00:23:14,100 Gå finne neste tom tabell oppføring. 520 00:23:14,100 --> 00:23:15,750 Og bare sette "berry" der. 521 00:23:15,750 --> 00:23:18,880 Så jeg vet det er ment å gå med banan i bøtte en. 522 00:23:18,880 --> 00:23:22,155 Men bare sette den i bøtte tre, fordi bøtte tre er tom. 523 00:23:22,155 --> 00:23:24,806 524 00:23:24,806 --> 00:23:26,680 Et annet alternativ er sannsynligvis hva du implementerer 525 00:23:26,680 --> 00:23:29,220 i p-set, hvor du hadde separat kjeding. 526 00:23:29,220 --> 00:23:33,990 Så hver av bøtter, hver av array elementer, 527 00:23:33,990 --> 00:23:38,410 ikke bare har en ord, men faktisk har en peker til en liste av ord. 528 00:23:38,410 --> 00:23:41,880 Slik at hvis du hadde banan i din hash table 529 00:23:41,880 --> 00:23:44,740 og du plutselig ønsket å legge til bær, ikke noe problem. 530 00:23:44,740 --> 00:23:51,110 Bare legg bær på slutten, eller til begynnelsen av din lenket liste. 531 00:23:51,110 --> 00:23:54,040 OK, awesome. 532 00:23:54,040 --> 00:23:58,490 Spørsmål med hasj tabeller før vi går videre? 533 00:23:58,490 --> 00:23:59,850 >> OK. 534 00:23:59,850 --> 00:24:01,070 Trær og prøver. 535 00:24:01,070 --> 00:24:07,980 OK, så dette var et annet alternativ for å iverksette ordbok. 536 00:24:07,980 --> 00:24:09,100 Du kunne ha gjort et forsøk. 537 00:24:09,100 --> 00:24:13,420 Så det er en spesiell type tre som oppfører seg som en multi-level hash table. 538 00:24:13,420 --> 00:24:16,862 Så vil du se bildet der du har en matrise som 539 00:24:16,862 --> 00:24:19,320 peker på en haug med arrays som peker til en haug med arrays 540 00:24:19,320 --> 00:24:20,390 som peker til en haug med arrays. 541 00:24:20,390 --> 00:24:23,140 Og vi får se hva som vil se ut på en fremtidig lysbilde. 542 00:24:23,140 --> 00:24:26,070 Og mer generelt, et tre er bare noen datastruktur 543 00:24:26,070 --> 00:24:29,710 i hvilken dataene er organisert i noen hierarki. 544 00:24:29,710 --> 00:24:32,610 Så hvor vi så vi har en slags forståelse 545 00:24:32,610 --> 00:24:36,130 av en topp nivå, et neste nivå, en neste nivå, et neste nivå. 546 00:24:36,130 --> 00:24:39,690 Så dette er trolig mest klar med noen spesifikke eksempler. 547 00:24:39,690 --> 00:24:40,880 Så her er treet vårt. 548 00:24:40,880 --> 00:24:42,970 Du kan se at det har bestemte nivå 549 00:24:42,970 --> 00:24:45,480 at vi starter med at rotnoden, ett. 550 00:24:45,480 --> 00:24:47,640 Og vi kan gå ned gjennom treet vårt. 551 00:24:47,640 --> 00:24:50,730 552 00:24:50,730 --> 00:24:53,910 >> En binærtreet er en bestemt type data. 553 00:24:53,910 --> 00:24:56,770 Og den eneste spesifikasjonen for et binærtre 554 00:24:56,770 --> 00:25:01,130 er at hver node har høyst to blader. 555 00:25:01,130 --> 00:25:03,960 Slik at du ikke kommer til å se noen av disse nodene har tre eller fire 556 00:25:03,960 --> 00:25:06,880 eller et annet antall blader. 557 00:25:06,880 --> 00:25:11,310 Og så enda mer spesifikk er et binært søketre 558 00:25:11,310 --> 00:25:18,010 hvor hver node til venstre for node kommer til å ha en verdi mindre. 559 00:25:18,010 --> 00:25:21,180 Og hver verdi til retten kommer til å bli større. 560 00:25:21,180 --> 00:25:26,900 Så hvis du ser 44 er på vår rot, til venstre, 11, 22 og 33 561 00:25:26,900 --> 00:25:28,940 er alle mindre enn vår rot. 562 00:25:28,940 --> 00:25:33,890 Og til høyre er alle nummer bigger-- 66, 55, og 77. 563 00:25:33,890 --> 00:25:37,380 Og denne egenskapen gjelder på alle nivåer i treet. 564 00:25:37,380 --> 00:25:42,690 >> Så når vi går ned til 22, 11 og 33, 11 fremdeles 565 00:25:42,690 --> 00:25:46,950 er mindre enn 22 og 33 er større enn 22. 566 00:25:46,950 --> 00:25:50,160 Og dette gjør det lettere å søke fordi hvis vi leter etter et nummer, 567 00:25:50,160 --> 00:25:53,877 Vi vet nøyaktig hvilke gren å følge ned. 568 00:25:53,877 --> 00:25:56,210 Så dette bør minne deg en litt av binære søk. 569 00:25:56,210 --> 00:25:56,967 Yeah? 570 00:25:56,967 --> 00:25:58,835 >> PUBLIKUM: Så når du er beskrive binære, 571 00:25:58,835 --> 00:26:00,587 du sa det har på de fleste to blader? 572 00:26:00,587 --> 00:26:01,170 HANNAH: Mm-hm. 573 00:26:01,170 --> 00:26:02,580 PUBLIKUM: Kan det ha mindre? 574 00:26:02,580 --> 00:26:03,121 HANNAH: Yeah. 575 00:26:03,121 --> 00:26:06,720 Så la oss si, for eksempel, du ikke har et likt antall ting 576 00:26:06,720 --> 00:26:11,791 og du kan ikke fylle opp alle dine blader, det er greit hvis man har en. 577 00:26:11,791 --> 00:26:12,290 OK? 578 00:26:12,290 --> 00:26:12,789 Awesome. 579 00:26:12,789 --> 00:26:15,930 Andre spørsmål på trær? 580 00:26:15,930 --> 00:26:16,670 OK. 581 00:26:16,670 --> 00:26:20,110 >> Tilbake til våre prøver som jeg snakket om litt tidligere, 582 00:26:20,110 --> 00:26:23,900 hvordan vi har disse multi-level arrays. 583 00:26:23,900 --> 00:26:26,280 Så i dette tilfellet, starter vi på toppen. 584 00:26:26,280 --> 00:26:29,030 Og vi kan følge enhver ord ned. 585 00:26:29,030 --> 00:26:30,780 Så la oss si at vi ønsket å lete etter Turing. 586 00:26:30,780 --> 00:26:34,380 Vi starter på T, følger det ned til en matrise som inneholder U, 587 00:26:34,380 --> 00:26:37,350 og følg den ned før vi nå denne lille deltaet som 588 00:26:37,350 --> 00:26:39,060 forteller oss, ja, du fant et ord. 589 00:26:39,060 --> 00:26:43,200 590 00:26:43,200 --> 00:26:44,120 Klar på prøver? 591 00:26:44,120 --> 00:26:48,138 Noe å gå dit? 592 00:26:48,138 --> 00:26:48,908 Ja? 593 00:26:48,908 --> 00:26:51,866 PUBLIKUM: Har symbol på deltaet nødt til å okkupere plass innenfor prøve? 594 00:26:51,866 --> 00:26:54,532 HANNAH: Ja, så det gjør ikke nødvendigvis engang trenger å være et delta. 595 00:26:54,532 --> 00:26:57,760 Men vi trenger noen måte å fortelle vår computer-- beklager, 596 00:26:57,760 --> 00:27:01,130 slik at vi vet at TUR er ikke et ord. 597 00:27:01,130 --> 00:27:04,180 Fordi la oss si at vi ikke har Dette konseptet med en delta, dette konseptet 598 00:27:04,180 --> 00:27:09,850 gratulasjoner, fant du et ord, det ville gå gjennom og iterere T-U-R, 599 00:27:09,850 --> 00:27:11,300 og deretter si, awesome, jeg fant det! 600 00:27:11,300 --> 00:27:12,670 Det må være et ord. 601 00:27:12,670 --> 00:27:13,720 Men det er egentlig ikke. 602 00:27:13,720 --> 00:27:15,310 Vi ønsker hele Turing å være et ord. 603 00:27:15,310 --> 00:27:17,760 Så vi må ha noe på enden som sier, gratulerer, 604 00:27:17,760 --> 00:27:19,051 du har funnet en legitim ord. 605 00:27:19,051 --> 00:27:21,680 PUBLIKUM: Så hvis du hadde som 26 bokstaver i alfabetet, 606 00:27:21,680 --> 00:27:24,560 ville du faktisk har 27 nøkler i forsøk? 607 00:27:24,560 --> 00:27:26,010 >> HANNAH: Awesome, ja. 608 00:27:26,010 --> 00:27:28,210 Så egentlig, jeg tror at vil være på neste lysbilde. 609 00:27:28,210 --> 00:27:29,440 Ta-da! 610 00:27:29,440 --> 00:27:32,880 Der hvis du har en node i din prøve, er du 611 00:27:32,880 --> 00:27:35,800 kommer til å ha 27 barn i stedet for 26. 612 00:27:35,800 --> 00:27:39,010 613 00:27:39,010 --> 00:27:40,050 Eventuelle spørsmål med det? 614 00:27:40,050 --> 00:27:40,550 Yeah? 615 00:27:40,550 --> 00:27:44,569 PUBLIKUM: Hvorfor prøver ta opp så mye plass [uhørbart] mens du går? 616 00:27:44,569 --> 00:27:47,629 Hvorfor er det anses å være [uhørbart]? 617 00:27:47,629 --> 00:27:48,170 HANNAH: Sure. 618 00:27:48,170 --> 00:27:48,790 La oss gå tilbake. 619 00:27:48,790 --> 00:27:52,350 Spørsmålet er, hvorfor er prøver så mye større 620 00:27:52,350 --> 00:27:54,620 enn noe sånt som en hash table. 621 00:27:54,620 --> 00:27:57,790 Så for hvert av disse nivåene, selv om de ikke er trukket her, 622 00:27:57,790 --> 00:28:01,250 du må ha alle 26 tegn. 623 00:28:01,250 --> 00:28:04,420 Og grunnen til at du ikke kan si, oh, men som for Turing, jeg 624 00:28:04,420 --> 00:28:07,570 trenger ikke å ha noen av disse samme tingene om nivået på U. Vel, 625 00:28:07,570 --> 00:28:11,390 hvis du plutselig ønsket å legge noe som var som T-H, 626 00:28:11,390 --> 00:28:14,800 du trenger for å ha det evnen til å legge det ordet. 627 00:28:14,800 --> 00:28:17,330 Så for hver enkelt bokstav, du kommer til å ha 628 00:28:17,330 --> 00:28:19,730 å ha en haug med matriser som kommer ut av det. 629 00:28:19,730 --> 00:28:24,060 Så du kan se hvordan det ville få virkelig stor, veldig fort. 630 00:28:24,060 --> 00:28:26,560 Andre spørsmål? 631 00:28:26,560 --> 00:28:28,980 OK. 632 00:28:28,980 --> 00:28:29,832 Yeah? 633 00:28:29,832 --> 00:28:33,210 >> PUBLIKUM: Når er forsøk raskere enn hash tabeller? 634 00:28:33,210 --> 00:28:36,280 >> HANNAH: Når er forsøk raskere enn hash tabeller? 635 00:28:36,280 --> 00:28:39,120 Så hvis du hadde en virkelig dårlig hash-funksjon. 636 00:28:39,120 --> 00:28:41,840 Så la oss si jeg var liksom: her er din hash-funksjon. 637 00:28:41,840 --> 00:28:43,660 Nei hva ordet saken du gir meg, jeg er alltid 638 00:28:43,660 --> 00:28:47,740 kommer til å sette den i matrisen entry 0. 639 00:28:47,740 --> 00:28:52,000 Og så ender vi opp med bare å sette alt i en stor lang lenket liste. 640 00:28:52,000 --> 00:28:58,740 Og så et oppslag tid ville ta i verste fall n hvis det er helt på slutten av vår liste. 641 00:28:58,740 --> 00:29:03,150 Med prøve, vi må bare iterere gjennom bokstavene i ordet. 642 00:29:03,150 --> 00:29:07,080 Så selv om vi har lagt en haug flere ord til vår prøve, 643 00:29:07,080 --> 00:29:09,620 det ikke ville ta oss lenger for å finne et bestemt ord. 644 00:29:09,620 --> 00:29:11,750 >> Alt vi trenger å gjøre er, for eksempel i dette tilfellet 645 00:29:11,750 --> 00:29:17,170 la oss si at vi leter etter zoom, vi ville bare nødt til å iterere over 646 00:29:17,170 --> 00:29:19,840 Z-O-O-M, fire bokstaver. 647 00:29:19,840 --> 00:29:22,250 Så det er bare lengden av ordet zoom. 648 00:29:22,250 --> 00:29:25,400 Det spiller ingen rolle hvor mange flere ord vi satt i denne prøve. 649 00:29:25,400 --> 00:29:30,225 Vi kan alltid få det i de fire trinn. 650 00:29:30,225 --> 00:29:31,215 Awesome. 651 00:29:31,215 --> 00:29:32,205 Ja? 652 00:29:32,205 --> 00:29:34,185 >> PUBLIKUM: Så [uhørbart] er en matrise, ikke sant? 653 00:29:34,185 --> 00:29:35,322 >> HANNAH: Mm-hm. 654 00:29:35,322 --> 00:29:37,155 PUBLIKUM: Hvis du er leter etter [uhørbart], 655 00:29:37,155 --> 00:29:40,929 ville du må gå gjennom array å finne [uhørbart]? 656 00:29:40,929 --> 00:29:41,470 HANNAH: Sure. 657 00:29:41,470 --> 00:29:44,000 PUBLIKUM: Betyr ikke det ta mer tid? 658 00:29:44,000 --> 00:29:46,370 HANNAH: Hvis jeg skal til si at mitt utvalg er alltid 659 00:29:46,370 --> 00:29:49,250 kommer til å være A, B, C, D, E, F, G, blah blah blah, 660 00:29:49,250 --> 00:29:51,630 så hvis jeg alltid vet at det er i den samme rekkefølgen, 661 00:29:51,630 --> 00:29:53,880 hvis jeg alltid vet at det er i alfabetisk rekkefølge, 662 00:29:53,880 --> 00:29:57,860 Jeg kan bare si O er antall så og så i alfabetet. 663 00:29:57,860 --> 00:29:59,620 Bare hoppe til dette stedet. 664 00:29:59,620 --> 00:30:01,860 Fordi husk, med arrays, kan vi få tilgang 665 00:30:01,860 --> 00:30:06,590 noe element av denne matrisen i konstant tid hvis vi vet hvor vi leter. 666 00:30:06,590 --> 00:30:09,080 667 00:30:09,080 --> 00:30:09,580 Yeah? 668 00:30:09,580 --> 00:30:12,005 >> PUBLIKUM: På forrige skyv [uhørbart] 27, 669 00:30:12,005 --> 00:30:14,430 men 26 for den første. 670 00:30:14,430 --> 00:30:15,400 >> HANNAH: Sorry? 671 00:30:15,400 --> 00:30:18,800 >> PUBLIKUM: Er ikke den første ett 0, så ville ikke det være 26? 672 00:30:18,800 --> 00:30:24,900 >> HANNAH: Jada, så når vi sier 27, det er kommer til å gi oss indekser 0 til og med 26. 673 00:30:24,900 --> 00:30:28,220 Men hvis du faktisk telle de ut, kommer det til å være 27. 674 00:30:28,220 --> 00:30:30,007 Godt spørsmål. 675 00:30:30,007 --> 00:30:30,590 Noe annet? 676 00:30:30,590 --> 00:30:31,200 Yeah? 677 00:30:31,200 --> 00:30:34,420 >> PUBLIKUM: Så er forsøk tregere enn hash tabeller? 678 00:30:34,420 --> 00:30:37,920 >> HANNAH: Prøver kommer til å være, i teori, raskere enn hash tabeller 679 00:30:37,920 --> 00:30:39,760 men tar opp mer minne. 680 00:30:39,760 --> 00:30:40,534 Yeah? 681 00:30:40,534 --> 00:30:41,450 PUBLIKUM: [uhørlig]? 682 00:30:41,450 --> 00:30:45,770 683 00:30:45,770 --> 00:30:47,484 >> HANNAH: Jeg beklager, det gjorde jeg ikke høre deg. 684 00:30:47,484 --> 00:30:48,400 PUBLIKUM: [uhørlig]. 685 00:30:48,400 --> 00:30:51,250 686 00:30:51,250 --> 00:30:54,100 0-25 gir deg 26. 687 00:30:54,100 --> 00:30:56,958 >> HANNAH: 0-25 ville gi deg 26, høyre. 688 00:30:56,958 --> 00:30:58,457 >> PUBLIKUM: Og så [uhørbart]. 689 00:30:58,457 --> 00:30:59,040 HANNAH: Høyre. 690 00:30:59,040 --> 00:31:04,760 Så antallet vi spesifisere er antall ting i vår array. 691 00:31:04,760 --> 00:31:07,260 Så hvis vi har 27, er det kommer til å gi oss 0 692 00:31:07,260 --> 00:31:10,620 gjennom 26, noe som vil gi oss rom for, i dette tilfellet 693 00:31:10,620 --> 00:31:12,770 Jeg er ikke inkludert en apostrof. 694 00:31:12,770 --> 00:31:17,040 Så vi får 0 til 25 år er de første 26 bokstavene i alfabetet, 695 00:31:17,040 --> 00:31:18,990 eller alle 26 bokstavene i alfabetet. 696 00:31:18,990 --> 00:31:21,190 Og så det siste ting, på entry 26, er 697 00:31:21,190 --> 00:31:24,598 kommer til å være sjekken mark, eller deltaet. 698 00:31:24,598 --> 00:31:26,960 Noe annet? 699 00:31:26,960 --> 00:31:29,130 Awesome. 700 00:31:29,130 --> 00:31:30,020 Mistet min plass. 701 00:31:30,020 --> 00:31:31,020 OK, kult. 702 00:31:31,020 --> 00:31:33,240 >> Så vi allerede berørt på dette. 703 00:31:33,240 --> 00:31:37,430 Men den store trade off mellom forsøk og hash tabeller 704 00:31:37,430 --> 00:31:39,720 er at prøver gir, i teori, konstant se opp 705 00:31:39,720 --> 00:31:42,890 ganger, men bruke en hel masse minne. 706 00:31:42,890 --> 00:31:46,495 Greit, nå har vi litt mindre kompliserte strukturer, 707 00:31:46,495 --> 00:31:49,640 og vi vil bli ferdig med C, og vi vil flytte rett sammen. 708 00:31:49,640 --> 00:31:51,930 >> Så stabler, vi så dette i foredrag der du 709 00:31:51,930 --> 00:31:55,020 har noe sånt som en stabel med skuffer der 710 00:31:55,020 --> 00:31:57,330 det siste du sette på stabelen kommer 711 00:31:57,330 --> 00:31:59,500 å være det første du tar av. 712 00:31:59,500 --> 00:32:02,880 Så det er det som virkelig definerer en stabel er at det siste du sette på 713 00:32:02,880 --> 00:32:06,080 kommer til å bli den første ting du tar av. 714 00:32:06,080 --> 00:32:09,279 Og terminologien vi bruker hvis vi kommer til å sette noe, 715 00:32:09,279 --> 00:32:12,070 hvis vi kommer til å legge noe til stacken, kaller vi det presser. 716 00:32:12,070 --> 00:32:14,970 Og hvis vi tar noe off, vi kaller det popping. 717 00:32:14,970 --> 00:32:17,080 Og hvis vi skal implementere en stabel, vi 718 00:32:17,080 --> 00:32:20,660 må være sikker på å holde styr på både størrelse og kapasitet. 719 00:32:20,660 --> 00:32:24,940 Slik at det totale antall elementer kan vi hold og den nåværende antall elementer 720 00:32:24,940 --> 00:32:27,880 at vi holder. 721 00:32:27,880 --> 00:32:29,885 >> Og svært likt, har vi køer. 722 00:32:29,885 --> 00:32:34,510 Og den eneste forskjellen er stedet for med stabler, 723 00:32:34,510 --> 00:32:37,630 vi sa det siste vi satt på er det første vi ta av. 724 00:32:37,630 --> 00:32:40,940 Så med køer, den første vi satt i 725 00:32:40,940 --> 00:32:43,129 kommer til å være den første tar vi ut. 726 00:32:43,129 --> 00:32:45,420 Så dette er som om du er faktisk stille opp på en butikk 727 00:32:45,420 --> 00:32:48,140 og du blir hjulpet, da den første personen i tråd 728 00:32:48,140 --> 00:32:50,880 bør være den første personen til å bli hjulpet. 729 00:32:50,880 --> 00:32:52,220 Slik at det ville være en kø. 730 00:32:52,220 --> 00:32:55,880 >> Så vi trenger å holde styr på størrelse, kapasitet, og hodet siden vi er 731 00:32:55,880 --> 00:33:01,130 kommer til å ta alle av fronten av listen i stedet for ryggen. 732 00:33:01,130 --> 00:33:03,480 Spørsmål om det? 733 00:33:03,480 --> 00:33:06,330 Eventuelle C spørsmål som plager deg? 734 00:33:06,330 --> 00:33:09,590 Datastrukturer, noe av det morsomme ting? 735 00:33:09,590 --> 00:33:10,530 All right, kult. 736 00:33:10,530 --> 00:33:14,120 Så jeg skal overlate den til Alison til hoppe inn litt mer programmering. 737 00:33:14,120 --> 00:33:15,965 >> ALISON: Åh, vi får se. 738 00:33:15,965 --> 00:33:17,370 Vi får se hvor godt jeg gjør her. 739 00:33:17,370 --> 00:33:21,410 OK, jeg skal prøve og fly gjennom slike ting, folkens. 740 00:33:21,410 --> 00:33:24,540 Hannah gikk veldig i dybden på alle hennes ting. 741 00:33:24,540 --> 00:33:26,900 Jeg kommer til å prøve å gi du en rask omgang oversikt 742 00:33:26,900 --> 00:33:31,290 slik at vi kan få til Davin med alle de morsomme Javascript og sikkerhets ting 743 00:33:31,290 --> 00:33:33,380 at kanskje du faktisk ønsker å høre mer om. 744 00:33:33,380 --> 00:33:36,600 >> OK, som Hannah sa, hvis Har du spørsmål, 745 00:33:36,600 --> 00:33:39,170 Jeg kommer for fort, vær så snill, gi meg beskjed. 746 00:33:39,170 --> 00:33:42,114 Jeg vil svare på spørsmål som er nødvendig. 747 00:33:42,114 --> 00:33:45,280 Så for å starte, kommer vi til å begynne med trolig en av de aller første tingene 748 00:33:45,280 --> 00:33:48,730 du har lært med web programmering, tillatelser. 749 00:33:48,730 --> 00:33:52,720 Så chmod, dere burde har vært mestere på dette med alle web 750 00:33:52,720 --> 00:33:54,870 programmering som du har gjort i det siste. 751 00:33:54,870 --> 00:33:57,320 Det er i utgangspunktet bare en kommando som endrer tillatelsene 752 00:33:57,320 --> 00:34:00,779 eller tilgangsrettighetene av våre filsystem stedene. 753 00:34:00,779 --> 00:34:02,570 Selvfølgelig, å faktisk se disse, hvis du er 754 00:34:02,570 --> 00:34:04,910 å ha noen problemer med disse under dine oppgavesett, 755 00:34:04,910 --> 00:34:11,460 du kan ha brukt ls -l, som er lang, å få visning typen som dette, 756 00:34:11,460 --> 00:34:14,209 hvor du faktisk se alle tillatelser for en fil. 757 00:34:14,209 --> 00:34:16,850 758 00:34:16,850 --> 00:34:20,732 >> Og egentlig, vi bare kommer til å gå gjennom ganske raskt bare pen 759 00:34:20,732 --> 00:34:21,940 mye hva hver av disse mener. 760 00:34:21,940 --> 00:34:24,481 Så vi har d akkurat her, som bare står for katalogen. 761 00:34:24,481 --> 00:34:26,790 762 00:34:26,790 --> 00:34:31,739 Tydeligvis akkurat her, ser vi rwx, som er lesbar, skrivbar, og kjørbar. 763 00:34:31,739 --> 00:34:37,090 Disse kan også være representert som biter, som vi skal komme inn på neste side. 764 00:34:37,090 --> 00:34:40,699 Så hver triade som vi så her, så det er tre triader. 765 00:34:40,699 --> 00:34:48,120 Vi har rwx, r ingenting x og r ingenting x for denne første filen. 766 00:34:48,120 --> 00:34:49,690 Det er denne generelle struktur. 767 00:34:49,690 --> 00:34:50,940 >> Så vi har noen katalog. 768 00:34:50,940 --> 00:34:53,999 Vi har noen brukergruppe med disse tillatelsene. 769 00:34:53,999 --> 00:34:57,040 Noen gruppe som har disse tillatelsene, og en verden som har en tillatelse. 770 00:34:57,040 --> 00:34:59,420 Du kan tenke på disse som en triade. 771 00:34:59,420 --> 00:35:01,130 Du kan tenke på disse som tre biter. 772 00:35:01,130 --> 00:35:04,060 Slik at de kan holde verdier alt fra 0 opp 773 00:35:04,060 --> 00:35:07,350 til 7, og det er derfor ofte vi måtte du gjøre chmod 774 00:35:07,350 --> 00:35:17,510 600 i stedet for chmod rw uansett. 775 00:35:17,510 --> 00:35:19,170 Vi får inn et eksempel der. 776 00:35:19,170 --> 00:35:24,260 Men i utgangspunktet, kan du tror av disse som enten bare rwx, 777 00:35:24,260 --> 00:35:28,520 eller du kan tenke på dem som noen nummeret der denne første her 778 00:35:28,520 --> 00:35:31,480 betegner et tall mellom 0 og 7, denne andre ett 779 00:35:31,480 --> 00:35:33,970 betegner et tall mellom 0 og 7, og den tredje 780 00:35:33,970 --> 00:35:38,245 betegner et tall mellom 0 og 7, OK? 781 00:35:38,245 --> 00:35:42,700 >> r har en verdi på 4. w har en verdi på 2, og x 782 00:35:42,700 --> 00:35:49,230 har en verdi på 1, noe som er grunnen til at denne tillatelse her ville bli chmod 700. 783 00:35:49,230 --> 00:35:53,520 Fordi i dette tilfellet her, sier det vi har den første biten er det snudd på. 784 00:35:53,520 --> 00:35:55,380 Så vi har 4 for å lese. 785 00:35:55,380 --> 00:35:58,730 Den andre biten er snudd på for w, som er to, så nå har vi seks. 786 00:35:58,730 --> 00:36:02,070 Og den tredje biten er snudd på for x, som er en, slik at vi får syv. 787 00:36:02,070 --> 00:36:04,820 Og selvfølgelig, vår gruppe og vår verden er hver 0. 788 00:36:04,820 --> 00:36:07,770 Så dette er også den tilsvarende chmod 700. 789 00:36:07,770 --> 00:36:12,081 Og jeg vil definitivt prøve å forstå mapping mellom disse. 790 00:36:12,081 --> 00:36:14,080 Jeg er ikke sikker på om det har komme opp på en quiz før, 791 00:36:14,080 --> 00:36:18,590 men det ville være en spørsmål som jeg kan spørre. 792 00:36:18,590 --> 00:36:22,110 >> Bare en liten bit å gå selv videre inn chmod her, her 793 00:36:22,110 --> 00:36:27,730 er meget generell Strukturen av en chmod anrop. 794 00:36:27,730 --> 00:36:29,500 Så selvfølgelig, har vi chmod her. 795 00:36:29,500 --> 00:36:34,410 Referanser, hva dette refererer til er som gir vi disse tillatelsene til 796 00:36:34,410 --> 00:36:36,570 eller som vi tar disse tillatelser unna. 797 00:36:36,570 --> 00:36:44,330 Så vi har en her i tillatelsene, som vi har gitt deg chmod et pluss x, 798 00:36:44,330 --> 00:36:45,440 som vi får se snart. 799 00:36:45,440 --> 00:36:48,460 et betyr bare gi disse spesifikke tillatelser til alle. 800 00:36:48,460 --> 00:36:49,600 Gi dem til alle. 801 00:36:49,600 --> 00:36:55,370 Så du kan godt ha u pluss x eller g pluss x eller o pluss x eller flere 802 00:36:55,370 --> 00:36:55,870 derav. 803 00:36:55,870 --> 00:36:59,280 Slik at første del er alltid kommer til å være referanser. 804 00:36:59,280 --> 00:37:03,220 Hvem er vi gi disse tillatelsene til, eller som vi tar dem bort fra? 805 00:37:03,220 --> 00:37:04,850 >> Den andre er operatør. 806 00:37:04,850 --> 00:37:07,350 Så dere har jobbet hovedsakelig med pluss. 807 00:37:07,350 --> 00:37:12,140 Dette gir tillatelser til hvem du gir dem, 808 00:37:12,140 --> 00:37:14,840 mens minus, logisk, fjerner dem. 809 00:37:14,840 --> 00:37:16,880 Så ingenting for forferdelig der. 810 00:37:16,880 --> 00:37:23,060 Og så moduser er hva vi snakket om med lesing, skriving, eller utføring. 811 00:37:23,060 --> 00:37:29,070 Så et pluss x betyr gi kjørbar tillatelser til alle. 812 00:37:29,070 --> 00:37:33,430 Og deretter, selvfølgelig, av hvilke bestemt fil eller katalog. 813 00:37:33,430 --> 00:37:33,980 OK? 814 00:37:33,980 --> 00:37:36,010 Alle bra med chmod? 815 00:37:36,010 --> 00:37:37,850 Ikke så ille? 816 00:37:37,850 --> 00:37:42,417 >> OK, så HTML, noen av dere er gammel nok to-- MySpace alder? 817 00:37:42,417 --> 00:37:44,750 Jeg sendte dette til min seksjon, og bokstavelig talt halvparten av folk 818 00:37:44,750 --> 00:37:45,790 så på meg som om jeg var gal. 819 00:37:45,790 --> 00:37:47,498 Og jeg var som, folkens, vi er ikke så gammel. 820 00:37:47,498 --> 00:37:48,910 Kom igjen. 821 00:37:48,910 --> 00:37:53,360 Så Hypertext Markup Language, det er ærlig talt bare en måte for deg 822 00:37:53,360 --> 00:37:57,990 å vise visse ting på nettet. 823 00:37:57,990 --> 00:37:59,210 Så det er et kodespråk. 824 00:37:59,210 --> 00:38:00,640 Det er ikke et skriptspråk. 825 00:38:00,640 --> 00:38:02,160 Det er ingen logikk i det. 826 00:38:02,160 --> 00:38:05,710 Det er ganske enkelt å endre måten noe blir vist. 827 00:38:05,710 --> 00:38:07,670 OK, så det er en viktig skille å gjøre. 828 00:38:07,670 --> 00:38:12,030 Det er ansett som et kodespråk, ikke et skriptspråk. 829 00:38:12,030 --> 00:38:15,100 >> Så her vi har våre HTML-koder. 830 00:38:15,100 --> 00:38:20,390 På dette lysbildet er trolig det meste av de som du bør være kjent med 831 00:38:20,390 --> 00:38:22,390 og være veldig komfortabel med. 832 00:38:22,390 --> 00:38:25,700 Så åpenbart, har vi vår HTML-kode, som 833 00:38:25,700 --> 00:38:29,930 angir at alt i mellom disse to vil være HTML. 834 00:38:29,930 --> 00:38:33,070 Vi har noen link, som åpenbart vil gi deg 835 00:38:33,070 --> 00:38:34,990 en link til en ekstern nettside. 836 00:38:34,990 --> 00:38:37,520 Noen tittel, innenfor vårt hode her. 837 00:38:37,520 --> 00:38:40,020 Og vi har vår kropp med h1, som er en overskrift, 838 00:38:40,020 --> 00:38:42,260 så det vil gjøre det fint og fet og større. 839 00:38:42,260 --> 00:38:46,040 Og så har vi noen p, som er et ledd. 840 00:38:46,040 --> 00:38:49,000 Du bør nok vite og bli kjent med ting 841 00:38:49,000 --> 00:38:54,030 som hvordan du setter inn et bilde, er det noen andre header klasser? 842 00:38:54,030 --> 00:38:57,240 Jeg ville definitivt være komfortabel med div. 843 00:38:57,240 --> 00:39:00,840 Så disse har de fleste av tags at du bør være kjent med. 844 00:39:00,840 --> 00:39:04,370 Men selvfølgelig, som med alt i CS 50, listen er ikke uttømmende. 845 00:39:04,370 --> 00:39:08,200 Så sørg for at du pusser opp på den. 846 00:39:08,200 --> 00:39:13,260 >> CSS, så CSS, hvis noen av dere se min seminar fra to uker siden, 847 00:39:13,260 --> 00:39:16,250 er egentlig bare en måte å style din nettside? 848 00:39:16,250 --> 00:39:18,950 OK, så vi har litt kodespråk. 849 00:39:18,950 --> 00:39:23,220 HTML, som tar seg av akkurat den teksten og hvor det kan være på siden. 850 00:39:23,220 --> 00:39:25,760 Men CSS er egentlig det som gjør den pen. 851 00:39:25,760 --> 00:39:30,690 Du kunne ha disse i HTML filer, men som vi vil snakke om senere, 852 00:39:30,690 --> 00:39:32,660 Jeg er ganske sikker på at det kan være neste lysbilde, det 853 00:39:32,660 --> 00:39:35,620 er vanlig praksis, og faktisk praksis at vi virkelig oppmuntre, 854 00:39:35,620 --> 00:39:40,670 for deg å holde dem adskilt når vi snakke om MVC og at hele paradigmet. 855 00:39:40,670 --> 00:39:42,490 Det er egentlig det dette strømmer inn. 856 00:39:42,490 --> 00:39:46,110 >> Så CSS er bare en måte å gjøre ting ser pen. 857 00:39:46,110 --> 00:39:50,500 De tingene her, som kropp og #title og .info, 858 00:39:50,500 --> 00:39:54,340 disse kalles velgere og hva de gjør er de velge bestemte ting 859 00:39:54,340 --> 00:39:59,260 i HTML-fil og gjelder uansett stil, 860 00:39:59,260 --> 00:40:04,090 hva slags ting som du ønsker, for det bestemte element av web 861 00:40:04,090 --> 00:40:04,590 siden. 862 00:40:04,590 --> 00:40:08,820 Så her har vi en bakgrunnsfarge og fargen 863 00:40:08,820 --> 00:40:12,450 og en font familie det er å være påført på det som er i kroppen. 864 00:40:12,450 --> 00:40:15,530 Så hvis vi så tilbake her, det ville ikke gjelde for tittelen. 865 00:40:15,530 --> 00:40:22,340 Det ville bare gjelde for det som er i disse kroppen velgere, OK? 866 00:40:22,340 --> 00:40:25,250 >> Med tittelen her, er dette kommer til å være det samme, 867 00:40:25,250 --> 00:40:28,410 fargen på teksten være blå er bare kommer 868 00:40:28,410 --> 00:40:33,870 å påvirke hva som er innenfor tittelen velgere. 869 00:40:33,870 --> 00:40:36,580 Samt info her, teksten vil være rosa, 870 00:40:36,580 --> 00:40:38,600 hva er info, som er rett her. 871 00:40:38,600 --> 00:40:40,860 Så det eneste som ville være rosa på denne siden 872 00:40:40,860 --> 00:40:44,100 er dato, mandag 17 november 2014. 873 00:40:44,100 --> 00:40:48,770 OK, så CSS er bare en måte å har mer kontroll over-- ja? 874 00:40:48,770 --> 00:40:51,850 >> PUBLIKUM: Hvorfor har dere å bruke hasj med tittelen? 875 00:40:51,850 --> 00:40:55,170 >> HANNAH: Neste bilde, lover! 876 00:40:55,170 --> 00:40:56,810 Vi vil komme dit. 877 00:40:56,810 --> 00:40:59,830 Så dette er grunnen til at vi må bruke hasj. 878 00:40:59,830 --> 00:41:03,429 Så velgere ta på tre hoved skjemaer som vi snakker med dere om. 879 00:41:03,429 --> 00:41:05,595 Jeg fyou ønsker å lære mer, det er mange der ute. 880 00:41:05,595 --> 00:41:07,540 Det er flott CSS dokumentasjon. 881 00:41:07,540 --> 00:41:12,680 Det er et kodenavn, som har å gjøre med bare din vanlige tagger i HTML. 882 00:41:12,680 --> 00:41:17,210 Så h1, p, div, h2, disse slags ting. 883 00:41:17,210 --> 00:41:20,320 Og vi kan bare nevne de som er. 884 00:41:20,320 --> 00:41:22,650 Så som vi ser her med kroppen, er det en normal tag. 885 00:41:22,650 --> 00:41:26,660 Så vi kan bare sette kroppen når vi snakker i vår CSS-fil. 886 00:41:26,660 --> 00:41:29,730 >> Med tittel, hele grunnen til at vi har denne hash er har vi det er 887 00:41:29,730 --> 00:41:31,010 ansett som et ID. 888 00:41:31,010 --> 00:41:35,400 Så en ID skal alltid være unikt innenfor HTML-siden 889 00:41:35,400 --> 00:41:37,930 slik at når du er henvise til det, du 890 00:41:37,930 --> 00:41:41,990 vet at du bare henviser til en bestemt ting. 891 00:41:41,990 --> 00:41:46,270 Så i dette tilfellet her, med vår h1 her, CS 50 gjennomgang sesjon, 892 00:41:46,270 --> 00:41:47,810 vi har en id av tittelen. 893 00:41:47,810 --> 00:41:54,280 Så for å bare henvise til at del av vår HTML, gjør vi en hash tittel. 894 00:41:54,280 --> 00:41:58,080 Bare ved konvensjonen, er IDer utpekt med en hash foran dem. 895 00:41:58,080 --> 00:42:01,650 På samme måte ser vi info her er en klasse. 896 00:42:01,650 --> 00:42:06,070 Og så klasse med CSS er utpekt som en prikk klasse 897 00:42:06,070 --> 00:42:08,895 eller dot hva den klassen er. 898 00:42:08,895 --> 00:42:10,850 Så i dette tilfellet her, det er info. 899 00:42:10,850 --> 00:42:13,090 >> Så jeg tar det tilbake. 900 00:42:13,090 --> 00:42:16,200 Begge disse vil bli rosa for vår CSS her 901 00:42:16,200 --> 00:42:18,430 fordi de begge har en klasse for info. 902 00:42:18,430 --> 00:42:23,070 Og i vår CSS-filen, har vi utpekt Alt som en klasse for info 903 00:42:23,070 --> 00:42:24,120 skal være rosa. 904 00:42:24,120 --> 00:42:25,968 Betyr det fornuftig? 905 00:42:25,968 --> 00:42:27,435 Ja? 906 00:42:27,435 --> 00:42:30,731 >> PUBLIKUM: Hvis du skulle gjøre alt i legemet hvitt, 907 00:42:30,731 --> 00:42:32,814 og deretter prøver å gjøre noe inni den blå, 908 00:42:32,814 --> 00:42:34,770 ville det føre til problemer? 909 00:42:34,770 --> 00:42:37,310 >> HANNAH: Så CSS er Cascading Style Sheets. 910 00:42:37,310 --> 00:42:40,730 Så uansett hva er mot bunnen vil ha forrang. 911 00:42:40,730 --> 00:42:44,080 Så hvis du gjør noe med kroppen, og du gjør alt hvitt, 912 00:42:44,080 --> 00:42:49,300 og deretter senere du endre tittelen eller du endre teksten i kroppen, 913 00:42:49,300 --> 00:42:50,560 det overskriver det. 914 00:42:50,560 --> 00:42:55,360 Så noe mot bunnen vil ha forrang. 915 00:42:55,360 --> 00:42:56,730 Ja? 916 00:42:56,730 --> 00:42:59,627 >> Målgruppe: Og IDer er unike, men klasser kan være mer? 917 00:42:59,627 --> 00:43:00,210 HANNAH: Høyre. 918 00:43:00,210 --> 00:43:06,320 Så IDer skal være unike, og klasser kan referere til så mange ting som du ønsker. 919 00:43:06,320 --> 00:43:07,580 Andre spørsmål? 920 00:43:07,580 --> 00:43:09,800 Ja. 921 00:43:09,800 --> 00:43:11,210 >> PUBLIKUM: [uhørlig]. 922 00:43:11,210 --> 00:43:13,509 Jeg lurer på om som gjør en forskjell. 923 00:43:13,509 --> 00:43:15,217 HANNAH: Jeg beklager, hva var spørsmålet? 924 00:43:15,217 --> 00:43:18,960 PUBLIKUM: Det er liten "F" og kapital "F." 925 00:43:18,960 --> 00:43:21,440 HANNAH: Så forskjellen mellom liten "f" og kapital "F" 926 00:43:21,440 --> 00:43:22,606 bør ikke gjøre en forskjell. 927 00:43:22,606 --> 00:43:26,330 Så "f" vil være 15 uansett. 928 00:43:26,330 --> 00:43:28,130 Cool, noe annet? 929 00:43:28,130 --> 00:43:29,930 Alle gode, CSS? 930 00:43:29,930 --> 00:43:30,850 Ja? 931 00:43:30,850 --> 00:43:31,790 >> PUBLIKUM: Sorry. 932 00:43:31,790 --> 00:43:35,550 Kan du ha en klasse og en ID? 933 00:43:35,550 --> 00:43:38,030 >> HANNAH: Ja, det kan du. 934 00:43:38,030 --> 00:43:40,420 Ting kan ha både en klasse og en ID. 935 00:43:40,420 --> 00:43:44,670 Og jeg anbefaler teste disse på egen hånd. 936 00:43:44,670 --> 00:43:50,480 CSS du vil lære best bare ved å gjøre noe, veldig enkel nettside, 937 00:43:50,480 --> 00:43:53,440 tegne opp noen CSS, og bare se hvordan de samhandler. 938 00:43:53,440 --> 00:43:56,970 Og du vil få en meget god, intuitiv sans for hvordan det fungerer. 939 00:43:56,970 --> 00:43:58,810 >> OK, alle bra med CSS? 940 00:43:58,810 --> 00:44:01,280 Du kommer alle til å gjøre vakre nettsteder med CSS bedriften. 941 00:44:01,280 --> 00:44:05,460 OK, beste praksis, bare ting å huske på, ting 942 00:44:05,460 --> 00:44:09,810 at-- dette er grunnen til at vi forankre du for designer og whatnot. 943 00:44:09,810 --> 00:44:11,820 Så lukke alle HTML-koder. 944 00:44:11,820 --> 00:44:14,840 Så hvis du har en åpen kropp, Det bør være et tett legeme. 945 00:44:14,840 --> 00:44:18,180 Hvis du har et åpent ledd, Det bør være en nær ledd. 946 00:44:18,180 --> 00:44:19,555 Sjekk for å se siden din validerer. 947 00:44:19,555 --> 00:44:23,330 Dere bør være veldig kjent med dette fra p-set sju 948 00:44:23,330 --> 00:44:26,350 med CS 50 finans med W3 validator. 949 00:44:26,350 --> 00:44:28,340 Og som jeg sa tidligere, en av våre store paradigmer 950 00:44:28,340 --> 00:44:33,780 er å skille din stil med CSS fra din markup, som er HTML. 951 00:44:33,780 --> 00:44:36,900 Og så, selvfølgelig, har vi denne store XKCD ned her. 952 00:44:36,900 --> 00:44:38,280 Yay, comic relief! 953 00:44:38,280 --> 00:44:41,340 >> OK, TCP / IP. 954 00:44:41,340 --> 00:44:44,650 Mellom disse og HTTP, utgangspunktet de er begge protokollene. 955 00:44:44,650 --> 00:44:46,810 Så du kan bare tenke av dem som et sett av regler 956 00:44:46,810 --> 00:44:50,110 som regulerer hvordan ting bevege seg over internett. 957 00:44:50,110 --> 00:44:53,410 Så overføring kontroll protokollen, eller Internett-protokollen, 958 00:44:53,410 --> 00:44:57,280 er bare en måte å sørge for at at data blir hvor det kommer 959 00:44:57,280 --> 00:45:00,030 og at vi vet om vi stadig mangler data. 960 00:45:00,030 --> 00:45:03,520 Så hvis dere tenker tilbake til foredrag et par uker siden med David 961 00:45:03,520 --> 00:45:06,980 hvor vi hadde fire konvolutter, de ble alle sammen som en av fire, 962 00:45:06,980 --> 00:45:11,300 to av fire, tre av fire, fire av fire, dette er bare et sett med regler. 963 00:45:11,300 --> 00:45:13,830 Vi sa: OK, når vi er sending av mer enn én pakke, 964 00:45:13,830 --> 00:45:16,610 vi kommer til å nummerere det med hvilket nummer det er 965 00:45:16,610 --> 00:45:19,040 og hvor mange som totalt brukeren skal få. 966 00:45:19,040 --> 00:45:22,540 >> Og dette er bare å fortelle hvem mottar data om de 967 00:45:22,540 --> 00:45:26,120 har fått alt eller hvis noe har gått tapt på veien. 968 00:45:26,120 --> 00:45:28,840 Og de trenger å be om det igjen. 969 00:45:28,840 --> 00:45:31,140 Dette er egentlig bare et sett med regler. 970 00:45:31,140 --> 00:45:33,650 Det er hvordan du kan tenke på det, OK? 971 00:45:33,650 --> 00:45:37,700 Og også, angir den port, som dere can-- jeg vet under forelesning, 972 00:45:37,700 --> 00:45:39,170 de hadde en hel liste over porter. 973 00:45:39,170 --> 00:45:41,630 Men vi ikke har dem her akkurat nå. 974 00:45:41,630 --> 00:45:45,290 >> Så Hypertext Transfer Protocol er, igjen, det er en annen protokoll. 975 00:45:45,290 --> 00:45:48,630 Så det er et annet sett med regler som styrer, i dette tilfellet 976 00:45:48,630 --> 00:45:51,130 hvordan hypertekst er overført. 977 00:45:51,130 --> 00:45:54,340 Så det bare tillater nettlesere å snakke med webservere. 978 00:45:54,340 --> 00:45:56,910 Og som vi sa her, er det som menneskelig håndtrykk. 979 00:45:56,910 --> 00:46:00,480 Det er bare en måte å styre hvordan webserveren er 980 00:46:00,480 --> 00:46:02,690 kommer til å samhandle med nettleseren din. 981 00:46:02,690 --> 00:46:05,660 Og vi har bare et par eksempler. 982 00:46:05,660 --> 00:46:09,100 Vi har noen forespørsler her hvor GET er metoden. 983 00:46:09,100 --> 00:46:13,760 Vi har HTTP 1.1, som er protokoll versjon for oss. 984 00:46:13,760 --> 00:46:17,230 Og deretter, som er vert, hvilke vi faktisk prøver å få tilgang. 985 00:46:17,230 --> 00:46:21,800 Og så, som du ser her, vi få litt respons med denne 200 986 00:46:21,800 --> 00:46:25,032 OK som vår HTTP respons kode. 987 00:46:25,032 --> 00:46:27,240 Vi har en stor liste jeg kommer å trekke opp i ett sekund 988 00:46:27,240 --> 00:46:29,430 at dere bør være kjent med. 989 00:46:29,430 --> 00:46:35,750 Og vi har denne innholdstypen tekst / HTML, som bare sier hva slags data 990 00:46:35,750 --> 00:46:39,990 vi mottar fra serveren, OK? 991 00:46:39,990 --> 00:46:44,230 Dette vert og denne innholdstype er en del av HTTP-hodene. 992 00:46:44,230 --> 00:46:49,610 Du kan ha så få eller så lite som nødvendig for rammen av hva 993 00:46:49,610 --> 00:46:50,580 du arbeider med. 994 00:46:50,580 --> 00:46:53,371 Noen ganger vil du ha mye informasjon som kommer fra serveren. 995 00:46:53,371 --> 00:46:56,040 Kanskje de ber om mye av informasjon fra brukeren. 996 00:46:56,040 --> 00:46:57,600 Det varierer avhengig av sammenhengen. 997 00:46:57,600 --> 00:47:01,144 Hvis du ser på CS 50 Study, det er mye mer på det. 998 00:47:01,144 --> 00:47:03,060 Men vi har mye å få gjennom, så jeg kommer 999 00:47:03,060 --> 00:47:05,760 å gå rett fram hvis det er OK med dere? 1000 00:47:05,760 --> 00:47:07,960 Cool. 1001 00:47:07,960 --> 00:47:08,460 Hold på. 1002 00:47:08,460 --> 00:47:11,182 Jeg har definitivt at hel liste of-- he! 1003 00:47:11,182 --> 00:47:13,140 Jeg vet ikke hvorfor dette er hele veien over her. 1004 00:47:13,140 --> 00:47:15,660 Jeg trodde jeg bokstavelig talt flyttet det mens jeg var sitting-- 1005 00:47:15,660 --> 00:47:16,540 >> DAVIN: du vil Må lære det? 1006 00:47:16,540 --> 00:47:17,420 Eller ønsker du meg til å lære det? 1007 00:47:17,420 --> 00:47:20,010 >> PUBLIKUM: Jeg trodde vi kunne bare vise dem til å begynne med. 1008 00:47:20,010 --> 00:47:22,210 Jeg mener, du kan gå inn dem videre, men jeg 1009 00:47:22,210 --> 00:47:26,030 trodde det gjort mer fornuftig siden jeg ble bare snakker om HTTP-statuser. 1010 00:47:26,030 --> 00:47:28,200 Så her er hele listen. 1011 00:47:28,200 --> 00:47:31,730 Jeg antar det kommer til å skje er Davin kommer til å gå inn i dem senere. 1012 00:47:31,730 --> 00:47:35,330 Men det er en hel liste, en forhåndsvisning av smak som kommer. 1013 00:47:35,330 --> 00:47:41,640 OK, vi skal til blow-- dette kommer å være en PHP lynkurs som ingen andre. 1014 00:47:41,640 --> 00:47:44,874 >> Så PHP, Hypertext Preprocessor, det er en rekursiv backronym, 1015 00:47:44,874 --> 00:47:46,540 noe som betyr at det het noe annet. 1016 00:47:46,540 --> 00:47:49,050 Og da de var som dette ikke virkelig fornuftig. 1017 00:47:49,050 --> 00:47:52,210 Slik at de bare kalt it-- og det var et akronym, 1018 00:47:52,210 --> 00:47:54,840 slik at de bare gjorde det PHP Hypertext Preprocessor, som 1019 00:47:54,840 --> 00:47:55,980 bare gir ingen mening. 1020 00:47:55,980 --> 00:47:57,714 Morsom historie. 1021 00:47:57,714 --> 00:47:58,880 Det er et programmeringsspråk. 1022 00:47:58,880 --> 00:48:02,360 Så så mye som jeg understreke at HTML er ikke et programmeringsspråk, 1023 00:48:02,360 --> 00:48:05,350 det er et kodespråk, PHP er et programmeringsspråk. 1024 00:48:05,350 --> 00:48:07,422 Hvordan du vet at dette er fordi det er logisk. 1025 00:48:07,422 --> 00:48:08,380 Det er conditionals. 1026 00:48:08,380 --> 00:48:12,750 Vi har variabler, mens vi har ingen av disse tingene i HTML. 1027 00:48:12,750 --> 00:48:16,960 >> Greit, da vi har denne lille litt her som er som en smak av PHP. 1028 00:48:16,960 --> 00:48:20,510 Så grunnleggende, variabelnavn starter med et dollartegn. 1029 00:48:20,510 --> 00:48:21,500 Masse folk liker det. 1030 00:48:21,500 --> 00:48:22,371 Minner av oss penger. 1031 00:48:22,371 --> 00:48:22,995 Det er flott. 1032 00:48:22,995 --> 00:48:25,280 Vi ønsker alle PHP. 1033 00:48:25,280 --> 00:48:28,020 Så vi ikke spesifiserer en variabelens type lenger. 1034 00:48:28,020 --> 00:48:29,995 Det er bestemt under kjøring. 1035 00:48:29,995 --> 00:48:32,710 1036 00:48:32,710 --> 00:48:35,890 Tolken skal være like, oh, vil vi bare kjøre gjennom, 1037 00:48:35,890 --> 00:48:39,565 og basert på konteksten, Vi får se hva typer typene 1038 00:48:39,565 --> 00:48:41,560 disse variablene må ha. 1039 00:48:41,560 --> 00:48:42,815 Det er ingen hovedfunksjon. 1040 00:48:42,815 --> 00:48:43,690 Ting vil bare kjøre. 1041 00:48:43,690 --> 00:48:47,851 Dere med import i din siste p-set, vil du legge merke til dette. 1042 00:48:47,851 --> 00:48:49,350 Det var egentlig ikke en hovedfunksjon. 1043 00:48:49,350 --> 00:48:52,070 Du bare skrev hva du ønsket å skje. 1044 00:48:52,070 --> 00:48:53,280 Og det bare slags skjedde. 1045 00:48:53,280 --> 00:48:56,760 Så det er PHP for deg. 1046 00:48:56,760 --> 00:48:59,180 >> Arrays er svært like. 1047 00:48:59,180 --> 00:49:01,270 Vi har fortsatt denne braketten. 1048 00:49:01,270 --> 00:49:05,940 Her har vi noen variable kalt arr, og det er lik 1049 00:49:05,940 --> 00:49:08,540 to-- vi har vår normale brakett notasjon. 1050 00:49:08,540 --> 00:49:10,630 Og vi har noen nøkkelverdien. 1051 00:49:10,630 --> 00:49:14,630 Og den store forskjellen mellom C og PHP arrays 1052 00:49:14,630 --> 00:49:19,330 er at vi kan ha dette associate-- vi kan knytte verdier til nøkler. 1053 00:49:19,330 --> 00:49:22,440 Så i stedet for bare å ha en matrise som er indeksert 1054 00:49:22,440 --> 00:49:26,630 ved antallet eller stillingen av dette element i matrisen, 1055 00:49:26,630 --> 00:49:29,060 vi kan faktisk forbinder det med en nøkkel. 1056 00:49:29,060 --> 00:49:36,700 Hvor vi kan si, OK, jeg vil uansett Verdien er forbundet med frukt. 1057 00:49:36,700 --> 00:49:39,280 Og kanskje vi har frukt gikk til banan. 1058 00:49:39,280 --> 00:49:41,760 Så det ville tilbake banan til oss. 1059 00:49:41,760 --> 00:49:44,100 >> Men i utgangspunktet, den mest mektig ting om dette 1060 00:49:44,100 --> 00:49:47,960 er at hvis dere husker demo fra forelesning der vi i utgangspunktet 1061 00:49:47,960 --> 00:49:53,050 omskrev stavekontrollen i PHP, og det var-- lookup var egentlig bare liker, 1062 00:49:53,050 --> 00:49:55,007 eksisterer denne nøkkelen? 1063 00:49:55,007 --> 00:49:56,590 Det er veldig snilt av kraften i det. 1064 00:49:56,590 --> 00:49:58,560 Du trenger ikke å iterere gjennom array. 1065 00:49:58,560 --> 00:50:00,311 Du trenger ikke å vite hva plass det er i. 1066 00:50:00,311 --> 00:50:01,976 Det kan være på slutten eller begynnelsen. 1067 00:50:01,976 --> 00:50:04,790 Så lenge du vet nøkkelen som er knyttet til verdien, 1068 00:50:04,790 --> 00:50:09,740 PHP kan bare spytte at verdien rett ut igjen på deg, OK? 1069 00:50:09,740 --> 00:50:12,960 >> Og da har vi også bare har bare fordi vi 1070 00:50:12,960 --> 00:50:16,750 kan ha viktige verdi-par betyr ikke at du må. 1071 00:50:16,750 --> 00:50:19,180 Du kan også bare lage en normal utvalg som her, 1072 00:50:19,180 --> 00:50:21,540 på bunnen, hvor den er bare en, to, tre, fire. 1073 00:50:21,540 --> 00:50:22,510 De er våre verdier. 1074 00:50:22,510 --> 00:50:25,320 Og faktisk, sine nøkler er indeksene. 1075 00:50:25,320 --> 00:50:26,830 Så nøkkelen for en ville være null. 1076 00:50:26,830 --> 00:50:28,610 Nøkkelen for to ville være ett. 1077 00:50:28,610 --> 00:50:31,910 Så videre og så videre, med mindre du eksplisitt tildele en nøkkel, 1078 00:50:31,910 --> 00:50:34,630 man kunne anta at den Verdien er bare deres indeks. 1079 00:50:34,630 --> 00:50:37,290 Betyr det fornuftig for alle? 1080 00:50:37,290 --> 00:50:38,070 Ingen spørsmål? 1081 00:50:38,070 --> 00:50:38,930 Awesome. 1082 00:50:38,930 --> 00:50:44,420 >> OK, er foreach en måte å iterere gjennom arrays. 1083 00:50:44,420 --> 00:50:47,490 Så vi har noe her, bare den generelle struktur. 1084 00:50:47,490 --> 00:50:51,020 Så foreach, navnet på vår array, som uansett 1085 00:50:51,020 --> 00:50:53,930 du ønsker å ringe hverandre element i array, 1086 00:50:53,930 --> 00:50:57,270 og vi kan gjøre noe med at elementet eller med denne verdi. 1087 00:50:57,270 --> 00:50:58,680 Så vi har et eksempel her. 1088 00:50:58,680 --> 00:51:05,770 Vi har en assosiativ array med disse to oppføringer 1089 00:51:05,770 --> 00:51:10,080 med bar å bli assosiert med foo og qux bli assosiert med baz. 1090 00:51:10,080 --> 00:51:12,180 Så tastene er foo og baz. 1091 00:51:12,180 --> 00:51:13,650 Verdier er bar og qux. 1092 00:51:13,650 --> 00:51:18,560 Så foreach, har vi vår matrise her, som nøkkelen verdi par. 1093 00:51:18,560 --> 00:51:21,560 Dette gir oss muligheten til å få tilgang både nøkkelen og verdi. 1094 00:51:21,560 --> 00:51:23,680 Kanskje du bare vil ha den verdi, i hvilket tilfelle 1095 00:51:23,680 --> 00:51:27,640 du kan bare gjøre som arr som $ verdi, og deretter du 1096 00:51:27,640 --> 00:51:30,640 er bare å gå inn på verdien som du iterere gjennom. 1097 00:51:30,640 --> 00:51:32,600 Men kanskje, for noen Derfor ønsker deg nøkkelen, 1098 00:51:32,600 --> 00:51:35,460 som er grunnen til at jeg valgte dette eksempelet i stedet. 1099 00:51:35,460 --> 00:51:40,240 Så du kan faktisk manipulere nøkkel og verdi i dette tilfellet. 1100 00:51:40,240 --> 00:51:41,070 OK? 1101 00:51:41,070 --> 00:51:41,905 Spørsmål? 1102 00:51:41,905 --> 00:51:44,279 >> PUBLIKUM: Hvis du ønsket å bare manipulere nøkkelen, vil 1103 00:51:44,279 --> 00:51:45,910 du trenger å gjøre foreach-- 1104 00:51:45,910 --> 00:51:47,360 >> ALISON: Høyre. 1105 00:51:47,360 --> 00:51:50,560 Så hvis du ønsket å manipulere bare nøkkelen, 1106 00:51:50,560 --> 00:51:53,680 ville du fortsatt trenger dette syntaks fordi hvis du bare 1107 00:51:53,680 --> 00:51:56,930 har arr som noe, som en ting, er det 1108 00:51:56,930 --> 00:52:00,070 skal anta at du vil verdien, ikke nøkkelen. 1109 00:52:00,070 --> 00:52:06,780 Så hvis du noen gang bare ha akkurat som arr som, kanskje dette er som $ element, 1110 00:52:06,780 --> 00:52:11,670 det kommer til å anta at du spør for bare den verdi ved hvert punkt. 1111 00:52:11,670 --> 00:52:13,879 Hvis du eksplisitt ønsker å gjøre noe med nøkkelen, 1112 00:52:13,879 --> 00:52:16,170 selv om du ikke kommer til gjøre noe med verdien, 1113 00:52:16,170 --> 00:52:18,430 du trenger denne strukturen som vi har her 1114 00:52:18,430 --> 00:52:22,330 hvor du eksplisitt ber for både nøkkelen og verdien. 1115 00:52:22,330 --> 00:52:24,170 Stort spørsmål. 1116 00:52:24,170 --> 00:52:25,940 Noe annet? 1117 00:52:25,940 --> 00:52:27,490 Cool. 1118 00:52:27,490 --> 00:52:29,911 >> All right, PHP og HTML. 1119 00:52:29,911 --> 00:52:31,410 Åh, vi er tilbake til p-set sju igjen. 1120 00:52:31,410 --> 00:52:35,380 Så dette bør se litt kjent. 1121 00:52:35,380 --> 00:52:41,760 Så dette er noen enkel HTML-skjema som har noen innspill navn hei. 1122 00:52:41,760 --> 00:52:43,820 Og vi ser vi har vår metode for GET. 1123 00:52:43,820 --> 00:52:47,430 Og hvis vi husker fra vår p-set, når dette skjemaet er sendt, 1124 00:52:47,430 --> 00:52:58,130 det sender et array kalt $ _GET som har alle disse innganger eller variabler fra 1125 00:52:58,130 --> 00:53:00,490 skjemaet som skal være manipulert i vår PHP. 1126 00:53:00,490 --> 00:53:03,320 Så i dette tilfellet, brukeren ville sette i deres navn. 1127 00:53:03,320 --> 00:53:04,370 De sender det. 1128 00:53:04,370 --> 00:53:07,810 Og vi ser at vi får noen utvalg her. 1129 00:53:07,810 --> 00:53:09,080 Vi har vår GET array. 1130 00:53:09,080 --> 00:53:11,510 Og vi har tilgang til navn. 1131 00:53:11,510 --> 00:53:15,070 >> Slik som sier, OK, gi meg verdi som er forbundet med navn, 1132 00:53:15,070 --> 00:53:16,550 navngi være nøkkelen her. 1133 00:53:16,550 --> 00:53:21,400 Og det er direkte tilordnet hva vi sa våre innspill navn er. 1134 00:53:21,400 --> 00:53:28,960 Så dette var å gi deg nøkkelen til hva kommer til å være i ditt utvalg her. 1135 00:53:28,960 --> 00:53:31,220 Betyr det fornuftig for alle? 1136 00:53:31,220 --> 00:53:32,070 Ja? 1137 00:53:32,070 --> 00:53:36,240 >> PUBLIKUM: Sier navnet i GET referere til den lilla linjen i [uhørbart]? 1138 00:53:36,240 --> 00:53:37,740 >> ALISON: Det refererer til dette her. 1139 00:53:37,740 --> 00:53:43,840 Så dette feltet akkurat her, det refererer til dette navnet her. 1140 00:53:43,840 --> 00:53:47,800 Så dette kunne ha blitt navngitt som telefonnummer, eller hva. 1141 00:53:47,800 --> 00:53:51,790 Dette navnet faktisk sier, hva ringer du dette feltet? 1142 00:53:51,790 --> 00:53:53,600 Hvordan har du tenkt å referere til dette feltet? 1143 00:53:53,600 --> 00:53:57,670 Og dette navnet er faktisk liker, vi er sier dette feltet kalles navn. 1144 00:53:57,670 --> 00:53:59,224 Det er hvordan vi skal få tilgang til det. 1145 00:53:59,224 --> 00:54:02,070 >> PUBLIKUM: Så er det lyst, innspill navn lik Bob, og-- 1146 00:54:02,070 --> 00:54:04,380 >> ALISON: Høyre, så du ville få Bob der nede. 1147 00:54:04,380 --> 00:54:06,090 Nøyaktig. 1148 00:54:06,090 --> 00:54:07,800 Alle kule? 1149 00:54:07,800 --> 00:54:10,990 All right, så GET versus POST, disse er de to hovedmåter 1150 00:54:10,990 --> 00:54:14,880 at vi passerer data i en HTTP-forespørsel. 1151 00:54:14,880 --> 00:54:17,370 Dere skulle ha sett begge disse forhåpentligvis. 1152 00:54:17,370 --> 00:54:20,940 Så med GET, informasjonen er gått gjennom URL. 1153 00:54:20,940 --> 00:54:23,490 Så hvis du noen gang gjør Google søk, YouTube, vil du 1154 00:54:23,490 --> 00:54:25,130 sannsynligvis merke noen spørsmålstegn. 1155 00:54:25,130 --> 00:54:28,230 Og så, alle ordene at du bare satt der. 1156 00:54:28,230 --> 00:54:31,410 Og POST sender dataene i HTTP meldingsteksten. 1157 00:54:31,410 --> 00:54:36,922 Så i motsetning til GET, du slags vurdere at dataene er skjult for brukeren. 1158 00:54:36,922 --> 00:54:38,630 Men hva er egentlig viktig å forstå 1159 00:54:38,630 --> 00:54:44,040 er at dette er fortsatt like usikkert som GET. 1160 00:54:44,040 --> 00:54:48,780 Analogien jeg liker å bruke er hvis du har din bankkontonummer 1161 00:54:48,780 --> 00:54:52,795 og du skriver det på utsiden av en konvolutt, det er ganske usikkert. 1162 00:54:52,795 --> 00:54:55,920 Hvis du skulle skrive det på et stykke papir og legg det inn i konvolutten, 1163 00:54:55,920 --> 00:54:58,850 det er fortsatt veldig usikre fordi alt du trenger å gjøre er å åpne den opp 1164 00:54:58,850 --> 00:55:03,480 og se på det faktiske innholdet Meldingen kan å se det. 1165 00:55:03,480 --> 00:55:08,310 Så dette er "skjult", og folk liker å tror det er sikkert, men det er virkelig ikke. 1166 00:55:08,310 --> 00:55:11,000 Og jeg er sikker på at Davin vil komme inn på det mer, kanskje. 1167 00:55:11,000 --> 00:55:12,850 Men det er en viktig skille å gjøre 1168 00:55:12,850 --> 00:55:15,820 og noe virkelig godt å forstå. 1169 00:55:15,820 --> 00:55:19,220 >> OK, SQL, Structured Query Language. 1170 00:55:19,220 --> 00:55:22,220 Alle ting som vi har sett så nylig! 1171 00:55:22,220 --> 00:55:25,400 Så det er i utgangspunktet bare designet, selvsagt, for datahåndtering. 1172 00:55:25,400 --> 00:55:30,560 Dere hadde mye erfaring med dette i tabellene med PHP MyAdmin. 1173 00:55:30,560 --> 00:55:34,100 Og det er fire vanlige spørsmål at vi ønsker dere å vite. 1174 00:55:34,100 --> 00:55:37,304 Så det er oppdatering, sette inn, velge og slette. 1175 00:55:37,304 --> 00:55:38,970 Så sørg for at du vet de virkelig godt. 1176 00:55:38,970 --> 00:55:40,960 Vi kommer til å gå gjennom dem veldig fort. 1177 00:55:40,960 --> 00:55:44,340 >> Så oppdatere, egentlig, som hva du kanskje tror det gjør, 1178 00:55:44,340 --> 00:55:46,740 det bare oppdaterer data i databasen. 1179 00:55:46,740 --> 00:55:48,750 Så vi har noen eksempel her. 1180 00:55:48,750 --> 00:55:53,310 Dette er det generelle Strukturen av en oppdatering spørring. 1181 00:55:53,310 --> 00:55:56,150 Så vi oppdatere tabellen at vi snakker om. 1182 00:55:56,150 --> 00:56:00,520 Og vi ønsker å sette visse verdier, bestemte kolonner 1183 00:56:00,520 --> 00:56:02,600 lik bestemte verdier. 1184 00:56:02,600 --> 00:56:07,500 Så dette oppdaterer bare tabellen, endre verdier i alle radene i dette tilfellet. 1185 00:56:07,500 --> 00:56:13,690 Så i dette ned her, en faktisk Eksempelvis har vi insert-- beklager. 1186 00:56:13,690 --> 00:56:17,630 Dette lysbildet avanserte uten meg å realisere den. 1187 00:56:17,630 --> 00:56:22,230 >> Så dette oppdateringer bord satt col1 lik å VAL1 hvor huset er lik "Currier." 1188 00:56:22,230 --> 00:56:25,300 Hva dette gjør er det bare endringer, bare det 1189 00:56:25,300 --> 00:56:28,130 oppdaterer disse verdiene i bestemte steder. 1190 00:56:28,130 --> 00:56:32,300 Så i denne første, endrer det disse verdier for alt i tabellen, 1191 00:56:32,300 --> 00:56:32,860 OK? 1192 00:56:32,860 --> 00:56:35,820 Det kommer til å endre dette kolonnen for hver enkelt oppføring, 1193 00:56:35,820 --> 00:56:37,020 for hver enkelt rad. 1194 00:56:37,020 --> 00:56:40,840 Men dette der, kunne du Tenk på det som en kvalifiseringskamp. 1195 00:56:40,840 --> 00:56:44,020 Så det er bare kommer til å endre det i svært spesielle steder. 1196 00:56:44,020 --> 00:56:47,840 Så i p-set sju, når du kanskje oppdatert mengden av kontanter 1197 00:56:47,840 --> 00:56:53,050 at brukeren hadde, har du sannsynligvis hatt noen der ID lik session ID, ikke sant? 1198 00:56:53,050 --> 00:56:55,280 >> Fordi du ikke ønsker å endre mengden av kontanter 1199 00:56:55,280 --> 00:56:57,630 for hver person som var å bruke ditt nettsted. 1200 00:56:57,630 --> 00:57:00,480 Du ønsket å endre det for ett bestemt person, at personen som blir 1201 00:57:00,480 --> 00:57:02,410 den som var å bruke det på den tiden. 1202 00:57:02,410 --> 00:57:04,320 Høyre? 1203 00:57:04,320 --> 00:57:07,510 OK, så sette inn, sette inn visse verdier i tabeller. 1204 00:57:07,510 --> 00:57:11,650 Dette er som når du er å skape en helt ny bruker. 1205 00:57:11,650 --> 00:57:14,240 Den generelle strukturen her er å sette inn i hva tabellen 1206 00:57:14,240 --> 00:57:15,680 vi snakker om. 1207 00:57:15,680 --> 00:57:18,910 Verdier, blir de verdiene som vi faktisk ønsker å sette inn. 1208 00:57:18,910 --> 00:57:23,060 OK, slik som vi ser her, vi har sett den inn i tabellen. 1209 00:57:23,060 --> 00:57:27,790 Dette er spesifikke kolonner med sine korresponderte verdier. 1210 00:57:27,790 --> 00:57:29,940 Så dette sier, sette inn en ny rad innehold 1211 00:57:29,940 --> 00:57:33,660 verdier VAL1 og val2 henhold disse spesifikke kolonner. 1212 00:57:33,660 --> 00:57:39,240 >> Så kanskje du bare ønsker å fylle ut halvparten av tingene i denne raden. 1213 00:57:39,240 --> 00:57:41,150 Det er det denne delen her lar deg gjøre. 1214 00:57:41,150 --> 00:57:43,280 Den lar deg faktisk bestemme hvilken del. 1215 00:57:43,280 --> 00:57:44,244 Ja? 1216 00:57:44,244 --> 00:57:52,150 >> PUBLIKUM: Kan du bare [uhørbart] celler i raden [uhørbart]? 1217 00:57:52,150 --> 00:57:55,000 >> ALISON: Hvis du bare fylle ut visse deler av raden din, 1218 00:57:55,000 --> 00:57:57,480 resten av disse cellene er bare tom. 1219 00:57:57,480 --> 00:58:02,730 1220 00:58:02,730 --> 00:58:05,660 Så lenge du lar dem være tom, det er ikke et problem. 1221 00:58:05,660 --> 00:58:09,570 Hvis du prøver å få tilgang til dem, er det kommer til å returnere noen tomt element. 1222 00:58:09,570 --> 00:58:13,850 Men det er viktig å vite at i enkelte tabeller, 1223 00:58:13,850 --> 00:58:16,690 de har for å få lov til å være null. 1224 00:58:16,690 --> 00:58:18,890 Du kan ha kjørt inn i en problem under p-settet 1225 00:58:18,890 --> 00:58:21,320 fordi vi ikke la noen av dine verdier være null. 1226 00:58:21,320 --> 00:58:26,110 Men du kan angi en valgfri verdi i tabellen. 1227 00:58:26,110 --> 00:58:29,640 >> OK, velger, så dette er bare en måte å få 1228 00:58:29,640 --> 00:58:33,790 spesifikke data fra en tabell på noen identifikator som du ønsker. 1229 00:58:33,790 --> 00:58:37,990 Så velger stjernen fra bordet der col tilsvarer noe bare betyr, 1230 00:58:37,990 --> 00:58:43,820 gi meg alle data knyttet hvor denne konkrete kolonnen er sant. 1231 00:58:43,820 --> 00:58:49,020 Så stjernen i dette tilfellet vil returnere hele raden til deg, OK? 1232 00:58:49,020 --> 00:58:54,880 >> Og så, i dette tilfellet velger stjerne fra Tabellen bare gir deg hele tabellen. 1233 00:58:54,880 --> 00:58:58,940 Og så, slette selvsagt, det bare sletter rad fra tabellen. 1234 00:58:58,940 --> 00:59:01,320 Så slette fra tabellen, hva tabellen vi er 1235 00:59:01,320 --> 00:59:06,830 refererer, hvor noen spesifikke identifikator eller noen betingelse er sann. 1236 00:59:06,830 --> 00:59:07,720 Ja? 1237 00:59:07,720 --> 00:59:08,700 >> PUBLIKUM: Spørsmål. 1238 00:59:08,700 --> 00:59:10,699 Hvorfor bruker du dobbelt sitater, og om du 1239 00:59:10,699 --> 00:59:13,600 gjøre doble anførselstegn eller singel sitater, gjør det en forskjell? 1240 00:59:13,600 --> 00:59:18,235 >> ALISON: Doble sitater eller apostrof gjør ikke en forskjell i SQL. 1241 00:59:18,235 --> 00:59:19,610 Jeg trodde jeg så et annet spørsmål. 1242 00:59:19,610 --> 00:59:20,814 Ja? 1243 00:59:20,814 --> 00:59:25,070 >> PUBLIKUM: Betyr ikke det påvirke hva blir rømt fra spørringen? 1244 00:59:25,070 --> 00:59:27,945 >> ALISON: Rob? 1245 00:59:27,945 --> 00:59:31,410 >> ROB: Hva mener du med rømt fra spørringen? 1246 00:59:31,410 --> 00:59:36,870 >> PUBLIKUM: Hvis noen har en enkelt spørring i form of-- 1247 00:59:36,870 --> 00:59:39,862 >> ROB: Hvis noen skulle sette en eneste sitat i, 1248 00:59:39,862 --> 00:59:43,560 deretter så lenge du desinfiserende dine innspill, så det spiller ingen rolle. 1249 00:59:43,560 --> 00:59:46,205 Men hvis du bruker en enkelt sitat og du er feil 1250 00:59:46,205 --> 00:59:47,914 rømmer dataen så ja, de trenger 1251 00:59:47,914 --> 00:59:51,079 å sette et enkelt sitat for å bryte koden din. hvis du bruker doble anførselstegn, 1252 00:59:51,079 --> 00:59:53,580 de trenger for å sette en dobbel sitere å bryte koden din. 1253 00:59:53,580 --> 00:59:56,163 Men så lenge du unnslippe ting riktig, spiller det ingen rolle. 1254 00:59:56,163 --> 00:59:59,220 Det er bare kommer til å bli oversatt til det riktige symbol allikevel. 1255 00:59:59,220 --> 01:00:02,332 >> PUBLIKUM: Hva betyr flukt? 1256 01:00:02,332 --> 01:00:04,040 ALISON: Vel, som desinfiserende og rømning. 1257 01:00:04,040 --> 01:00:06,810 1258 01:00:06,810 --> 01:00:13,820 Eksamen som vi har, den store XKCD komisk at de trekker opp der du har, 1259 01:00:13,820 --> 01:00:15,629 oh-- 1260 01:00:15,629 --> 01:00:16,670 ROB: Det er det siste lysbildet. 1261 01:00:16,670 --> 01:00:18,500 ALISON: Det er det siste lysbildet, egentlig? 1262 01:00:18,500 --> 01:00:20,200 Oh my god. 1263 01:00:20,200 --> 01:00:21,780 Det vi går, perfekt. 1264 01:00:21,780 --> 01:00:27,900 OK, så i utgangspunktet, kan du injiserer noe inn i denne SQL-spørring 1265 01:00:27,900 --> 01:00:30,560 hvor det bryter din kode, eller som David viste 1266 01:00:30,560 --> 01:00:38,460 i klassen, hvis vi har noen enkelt quote en lik 1 og hvis i vår kode, 1267 01:00:38,460 --> 01:00:41,230 vi bare kopiere det inn, og vi har en avslutning enkelt sitat, 1268 01:00:41,230 --> 01:00:44,740 hva som skjer er vi får noen uttrykk som 1269 01:00:44,740 --> 01:00:48,680 evalueres til sann som vil la noen gå inn vår database 1270 01:00:48,680 --> 01:00:51,720 og få data som vi ikke vil at de skal få. 1271 01:00:51,720 --> 01:00:54,240 Så desinfiserende inngangene bare betyr å sørge for 1272 01:00:54,240 --> 01:00:57,680 at vi rømmer disse tegn og betegner dem 1273 01:00:57,680 --> 01:01:01,720 som tegn og ikke ting som bør tillates 1274 01:01:01,720 --> 01:01:04,990 å bli tatt bokstavelig som vår SQL-setning. 1275 01:01:04,990 --> 01:01:09,980 >> Så det store ting som vi sa at dere skal bruke 1276 01:01:09,980 --> 01:01:13,650 var HTML spesialtegn, som er noe 1277 01:01:13,650 --> 01:01:15,730 som du kanskje ønsker å ta en titt på. 1278 01:01:15,730 --> 01:01:17,240 OK, slette. 1279 01:01:17,240 --> 01:01:19,450 Datatyper, vil alt dette være online. 1280 01:01:19,450 --> 01:01:23,510 Siden vi har 15 minutter igjen, jeg er bare kommer til å gå rett gjennom dette. 1281 01:01:23,510 --> 01:01:28,500 PHP og SQL, i utgangspunktet dette er bare vi hadde en spørring funksjon som 1282 01:01:28,500 --> 01:01:31,520 bidratt til å beskytte mot disse ondsinnede angrep. 1283 01:01:31,520 --> 01:01:33,970 Så når du bruker spørring, ble vi å sørge for 1284 01:01:33,970 --> 01:01:36,560 at ting ble renovert og whatnot. 1285 01:01:36,560 --> 01:01:41,070 >> MVC er bare et design paradigme, slik modell, utsikt, controller. 1286 01:01:41,070 --> 01:01:44,200 Det er bare en måte å holde ting fin og delt opp på samme måte 1287 01:01:44,200 --> 01:01:47,100 at vi har en tendens til å faktor ut koden på funksjoner. 1288 01:01:47,100 --> 01:01:53,390 Dette er bare et webdesign rammeverk som lar deg gjøre det samme. 1289 01:01:53,390 --> 01:01:54,760 Jeg kommer til å hoppe over dette. 1290 01:01:54,760 --> 01:01:58,530 >> Dette er noe som jeg ville være super skjegg med. 1291 01:01:58,530 --> 01:02:01,132 Det er et flott lite bord der. 1292 01:02:01,132 --> 01:02:03,090 Det gir deg funksjonen eksempel på modellen. 1293 01:02:03,090 --> 01:02:05,473 Jeg skal bare gjennom dette fordi jeg virkelig ønsker Davin å være i stand til å snakke. 1294 01:02:05,473 --> 01:02:07,140 Hvis du har spørsmål, kan du gjerne. 1295 01:02:07,140 --> 01:02:07,931 Jeg skal være her etter. 1296 01:02:07,931 --> 01:02:10,360 Bare komme å snakke med meg. 1297 01:02:10,360 --> 01:02:13,380 Med det har vi HTTP-statuser. 1298 01:02:13,380 --> 01:02:16,270 Og Davin kommer til å blåse gjennom dette i 15 minutter. 1299 01:02:16,270 --> 01:02:17,560 Dette kommer til å være stor. 1300 01:02:17,560 --> 01:02:18,893 >> DAVIN: OK. 1301 01:02:18,893 --> 01:02:20,312 Uh, din mic? 1302 01:02:20,312 --> 01:02:22,210 Yeah. 1303 01:02:22,210 --> 01:02:23,336 Unnskyld. 1304 01:02:23,336 --> 01:02:24,460 ALISON: måte å være forberedt. 1305 01:02:24,460 --> 01:02:25,335 DAVIN: Nei, jeg er klar. 1306 01:02:25,335 --> 01:02:25,860 Jeg er klar. 1307 01:02:25,860 --> 01:02:28,790 La oss gjøre dette. 1308 01:02:28,790 --> 01:02:29,290 Den er klar. 1309 01:02:29,290 --> 01:02:30,041 OK. 1310 01:02:30,041 --> 01:02:30,540 Unnskyld. 1311 01:02:30,540 --> 01:02:31,664 Jeg sølte kaffe på meg selv. 1312 01:02:31,664 --> 01:02:36,037 1313 01:02:36,037 --> 01:02:38,210 Jeg vet ikke om jeg er mer opprørt at jeg ser dum, 1314 01:02:38,210 --> 01:02:40,600 eller at jeg ikke har kaffe lenger. 1315 01:02:40,600 --> 01:02:44,480 Uansett, bare en rask kunngjøring om arket dere har. 1316 01:02:44,480 --> 01:02:47,994 Så dette arket dere har er ikke den offisielle hva som skjer på quiz. 1317 01:02:47,994 --> 01:02:49,660 Dette er den offisielle hva som skjer på quiz. 1318 01:02:49,660 --> 01:02:52,520 Også, på nettsiden, forteller vi deg, OK, dette vil være på quiz. 1319 01:02:52,520 --> 01:02:55,020 Så i den lille jukselappen du har, ikke offisielt. 1320 01:02:55,020 --> 01:02:56,690 Og det er feil på den. 1321 01:02:56,690 --> 01:03:01,490 Så best å ikke bare blindt bruke den. 1322 01:03:01,490 --> 01:03:04,390 Så ja, det er det. 1323 01:03:04,390 --> 01:03:05,980 Så la oss komme inn i denne virkelig rask. 1324 01:03:05,980 --> 01:03:07,420 >> Så HTTP statuser. 1325 01:03:07,420 --> 01:03:10,430 Så hva skjer når den nettside, er alt i orden. 1326 01:03:10,430 --> 01:03:11,144 Alt er OK. 1327 01:03:11,144 --> 01:03:13,310 Alt kommer tilbake til deg slik du vil ha det til. 1328 01:03:13,310 --> 01:03:15,370 Du får en 200 OK. 1329 01:03:15,370 --> 01:03:19,250 301, der har vi sett at 301 før? 1330 01:03:19,250 --> 01:03:20,890 Vent, hva skjer? 1331 01:03:20,890 --> 01:03:23,250 Unnskyld. 1332 01:03:23,250 --> 01:03:24,980 Vi så jeg tinn foredrag under sikkerhet. 1333 01:03:24,980 --> 01:03:30,690 Så i løpet av sikkerhet, så hvis David skrevet i http og så forsøkt å gå til cs50.net, 1334 01:03:30,690 --> 01:03:31,940 du kommer til å se 301 flyttet. 1335 01:03:31,940 --> 01:03:32,440 Hvorfor? 1336 01:03:32,440 --> 01:03:35,570 Fordi det kommer til å omdirigere du automatisk til vår HTTPS. 1337 01:03:35,570 --> 01:03:38,649 >> Så 301 flyttet, bare det er utgangspunktet en omdirigering. 1338 01:03:38,649 --> 01:03:40,190 Og du kan tenke på det som dette. 1339 01:03:40,190 --> 01:03:43,790 Noen av statusene som starter med 2-tallet, de er like, OK, alt er OK. 1340 01:03:43,790 --> 01:03:46,530 Noen av statusene som starter med tre, de er omdirigering. 1341 01:03:46,530 --> 01:03:49,571 Statuser som starter med 4, det betyr det er en slags klient feil. 1342 01:03:49,571 --> 01:03:52,440 Statuser som starter med 5, det er en slags server error. 1343 01:03:52,440 --> 01:03:54,680 Så du slags bryte opp statusene sånn. 1344 01:03:54,680 --> 01:03:59,120 Så 304 ikke modifiserte, så i din server.c p-sett, så la oss si at du 1345 01:03:59,120 --> 01:04:00,600 lastet cat.html. 1346 01:04:00,600 --> 01:04:03,360 Alt kommer tilbake, du får 200s, OK, stor. 1347 01:04:03,360 --> 01:04:04,540 >> La oss si du uthvilt det. 1348 01:04:04,540 --> 01:04:07,310 Vel, innsiden som cat.html, har du en JPEG. 1349 01:04:07,310 --> 01:04:09,520 Vel, er ikke at JPEG kommer til å få nytt. 1350 01:04:09,520 --> 01:04:12,140 Du kommer ikke til å legge inn en annen GET forespørsel til serveren, 1351 01:04:12,140 --> 01:04:13,980 og deretter få all denne informasjonen tilbake. 1352 01:04:13,980 --> 01:04:17,560 Det kommer til å bare be-- at bildet er kommer til å bli lagret på din maskin. 1353 01:04:17,560 --> 01:04:19,540 Og så at bildet vil være en 304. 1354 01:04:19,540 --> 01:04:20,720 Så det er ikke blitt endret. 1355 01:04:20,720 --> 01:04:24,600 Hvis du deretter lukke ut, klar cookies, og deretter oppdatere 1356 01:04:24,600 --> 01:04:27,490 og prøver å laste den siden igjen, du kommer til å se 200s. 1357 01:04:27,490 --> 01:04:28,910 Du kommer ikke til å se at 304. 1358 01:04:28,910 --> 01:04:32,340 >> 400, dårlig forespørsel, real rask, som om du 1359 01:04:32,340 --> 01:04:34,880 skulle sende en JSON objekt til serveren 1360 01:04:34,880 --> 01:04:38,090 og din JSON objekt var feil, vil du se noe sånt. 1361 01:04:38,090 --> 01:04:39,000 403, forbudt. 1362 01:04:39,000 --> 01:04:40,330 Når ville du se en forbudt? 1363 01:04:40,330 --> 01:04:41,394 Sannsynligvis Sannsynligvis? 1364 01:04:41,394 --> 01:04:42,060 PUBLIKUM: Chmod. 1365 01:04:42,060 --> 01:04:42,950 DAVIN: Chmod, ja. 1366 01:04:42,950 --> 01:04:44,730 Så du har ikke satt tillatelser korrekt. 1367 01:04:44,730 --> 01:04:45,577 404, ikke funnet. 1368 01:04:45,577 --> 01:04:46,410 Det er bare ikke der. 1369 01:04:46,410 --> 01:04:48,670 Så hvis du skriver inn feil URL. 1370 01:04:48,670 --> 01:04:53,500 500, intern serverfeil, serveren sannsynligvis var ikke riktig konfigurert. 1371 01:04:53,500 --> 01:04:56,260 Noe ikke på slutten, men noe på serversiden. 1372 01:04:56,260 --> 01:04:57,240 Og 503? 1373 01:04:57,240 --> 01:04:59,502 Mange mennesker så 503s i den siste p-set. 1374 01:04:59,502 --> 01:05:00,460 Når skulle det skje? 1375 01:05:00,460 --> 01:05:04,180 1376 01:05:04,180 --> 01:05:05,660 Jeg hørte hvisking. 1377 01:05:05,660 --> 01:05:07,767 >> PUBLIKUM: Når Google bestemmer du er en robot. 1378 01:05:07,767 --> 01:05:10,350 DAVIN: Ja, da Google bestemmer du er en robot, du får 503s. 1379 01:05:10,350 --> 01:05:11,560 Så det er en overbelastning. 1380 01:05:11,560 --> 01:05:14,620 Hvis du har bedt om fra serveren for mye, det er vanligvis forbigående. 1381 01:05:14,620 --> 01:05:15,560 Og de fleste av dere lagt merke til det. 1382 01:05:15,560 --> 01:05:16,185 Så du så 503. 1383 01:05:16,185 --> 01:05:19,282 Du har kanskje tatt litt pause, da de 503s gikk bort, 1384 01:05:19,282 --> 01:05:20,490 og alt var bra. 1385 01:05:20,490 --> 01:05:26,640 >> Gabe: Ekte rask, da gjør dere få 500 i sannsynligvis dette siste oppgavesettet? 1386 01:05:26,640 --> 01:05:27,954 Ja? 1387 01:05:27,954 --> 01:05:30,906 >> PUBLIKUM: Vanligvis hvis Serveren har en fil forlagt 1388 01:05:30,906 --> 01:05:34,650 eller [uhørbart] deres maskin [uhørbart]. 1389 01:05:34,650 --> 01:05:38,870 >> Gabe: Så det kan være en konfigurasjon problemet i din PHP på serveren din. 1390 01:05:38,870 --> 01:05:42,250 Men det kan være bare noe som et semikolon at din glemte. 1391 01:05:42,250 --> 01:05:44,130 Hvis du skriver PHP, noen feil syntaks 1392 01:05:44,130 --> 01:05:46,000 kanskje får du noe sånt. 1393 01:05:46,000 --> 01:05:46,960 OK? 1394 01:05:46,960 --> 01:05:48,610 >> DAVIN: Cool. 1395 01:05:48,610 --> 01:05:51,180 Vil du at jeg skal gjøre bare opp til AJAX? 1396 01:05:51,180 --> 01:05:52,950 >> Gabe: [uhørbart]. 1397 01:05:52,950 --> 01:05:53,450 DAVIN: OK. 1398 01:05:53,450 --> 01:05:54,230 Så hva er DOM? 1399 01:05:54,230 --> 01:05:55,290 Hva betyr DOM står for? 1400 01:05:55,290 --> 01:05:56,990 >> PUBLIKUM: Document Object Model. 1401 01:05:56,990 --> 01:05:57,490 DAVIN: Nice. 1402 01:05:57,490 --> 01:06:00,775 Og hvorfor liker vi det? 1403 01:06:00,775 --> 01:06:02,670 Awesome. 1404 01:06:02,670 --> 01:06:06,651 Høyre, så det bare tillater oss å få tilgang HTML, tilgang til vår side svært raskt. 1405 01:06:06,651 --> 01:06:07,150 Hvorfor? 1406 01:06:07,150 --> 01:06:09,980 Fordi vi behandler våre side, behandle våre HTML-koder, 1407 01:06:09,980 --> 01:06:11,730 behandling av alt som om de er stedene. 1408 01:06:11,730 --> 01:06:13,710 Hvis vi behandle dem som de er objekter, så hva kan vi gjøre? 1409 01:06:13,710 --> 01:06:15,210 Vel, vi kan kalle funksjoner på dem. 1410 01:06:15,210 --> 01:06:16,460 Og dette er viktig hvorfor? 1411 01:06:16,460 --> 01:06:19,200 Vel, fordi vi kommer til å bruke Javascript for å oppdatere vår HTML, 1412 01:06:19,200 --> 01:06:20,500 oppdatere disse stedene. 1413 01:06:20,500 --> 01:06:23,869 Så hvis vi behandler dem som objekter, vi kan da ringe funksjoner på dem. 1414 01:06:23,869 --> 01:06:26,660 Jeg kommer til å komme inn i denne litt mer når jeg går inn i Javascript, 1415 01:06:26,660 --> 01:06:30,510 men du har alle sett som document.getElementById. 1416 01:06:30,510 --> 01:06:32,870 Så dokumentet er din element, få element av ID, 1417 01:06:32,870 --> 01:06:35,087 så du kommer til å se for noen ID i en HTML-kode. 1418 01:06:35,087 --> 01:06:36,920 Og så kan du gjøre noe annet til det. 1419 01:06:36,920 --> 01:06:40,089 For eksempel slik document.body, så kan du legge barnet. 1420 01:06:40,089 --> 01:06:41,630 Så du kommer til å finne dokumentet. 1421 01:06:41,630 --> 01:06:42,340 Du har dokumentet. 1422 01:06:42,340 --> 01:06:43,629 Du kommer til å finne kroppen. 1423 01:06:43,629 --> 01:06:44,420 Du fant liket. 1424 01:06:44,420 --> 01:06:46,545 Og så, du kommer til kalle noen funksjon på den. 1425 01:06:46,545 --> 01:06:50,312 Så legge barnet, og du kan legge til noen HTML på enden inni kroppen din. 1426 01:06:50,312 --> 01:06:52,520 Så i utgangspunktet, du er bare behandle det som et objekt. 1427 01:06:52,520 --> 01:06:54,515 Du behandler HTML tagger som et objekt. 1428 01:06:54,515 --> 01:06:57,071 Og det gjør det svært enkelt og raske til å gå gjennom dem. 1429 01:06:57,071 --> 01:06:59,070 Men det kan du også å kalle funksjoner på dem 1430 01:06:59,070 --> 01:07:04,410 slik at du kan manipulere og endre elementene. 1431 01:07:04,410 --> 01:07:10,162 >> Gabe: Gitt dette, hvorfor er Java slik en fin språk til å samhandle med HTML? 1432 01:07:10,162 --> 01:07:12,870 Odds er, når folk velger språket for leseren, 1433 01:07:12,870 --> 01:07:14,990 for klientsiden, Javascript er virkelig fin, 1434 01:07:14,990 --> 01:07:16,765 det er virkelig god til å håndtere gjenstander. 1435 01:07:16,765 --> 01:07:20,620 Og objektene er typen som objektene som vises i HTML, 1436 01:07:20,620 --> 01:07:23,940 så det er veldig lett for Java å gjøre den slags håndtering. 1437 01:07:23,940 --> 01:07:24,440 DAVIN: Nice. 1438 01:07:24,440 --> 01:07:25,670 Så her er bare et eksempel. 1439 01:07:25,670 --> 01:07:29,020 Så jeg tror på fjorårets quiz, eller kanskje to år siden, vi 1440 01:07:29,020 --> 01:07:30,840 spurte du å lage et tre. 1441 01:07:30,840 --> 01:07:32,660 Så dette er akkurat hva du vil gjøre. 1442 01:07:32,660 --> 01:07:34,255 Så du starter ut med dokumentet. 1443 01:07:34,255 --> 01:07:36,130 Og så har du i utgangspunktet bare se på kodene. 1444 01:07:36,130 --> 01:07:38,100 Så hvis du ser, vi starte med en HTML-kode. 1445 01:07:38,100 --> 01:07:41,660 Og så får du hint om hvordan til gjøre dette basert på innrykk. 1446 01:07:41,660 --> 01:07:43,870 Så hodet slags grener av. 1447 01:07:43,870 --> 01:07:46,242 Inne i hodet, har vi en annen tag for tittelen. 1448 01:07:46,242 --> 01:07:47,450 Så da har vi en tittel tag. 1449 01:07:47,450 --> 01:07:49,760 Og inni det, har vi noen streng. 1450 01:07:49,760 --> 01:07:52,210 Og så vi representerer en streng i en sirkel. 1451 01:07:52,210 --> 01:07:54,010 Og alle kodene er i firkanter. 1452 01:07:54,010 --> 01:07:56,270 >> Og hvis du ser, hvis vi tenke på dette som et tre, 1453 01:07:56,270 --> 01:07:58,730 og la oss si at HTML er en forelder, så hode og kropp 1454 01:07:58,730 --> 01:07:59,772 kommer til å være søsken. 1455 01:07:59,772 --> 01:08:01,813 De er begge kommer til å være barn som forelder. 1456 01:08:01,813 --> 01:08:03,620 Så fordi de er både søsken, de er 1457 01:08:03,620 --> 01:08:06,590 kommer til å være litt ved siden av hverandre i treet vårt modell. 1458 01:08:06,590 --> 01:08:08,590 Og så, du i utgangspunktet gjøre akkurat det samme. 1459 01:08:08,590 --> 01:08:13,512 Så ikke vanskelig, men vi har bedt spørsmål som dette før på quiz. 1460 01:08:13,512 --> 01:08:15,220 Gabe: Har noen har spørsmål så langt? 1461 01:08:15,220 --> 01:08:16,357 Er det bra? 1462 01:08:16,357 --> 01:08:16,856 DAVIN: Cool. 1463 01:08:16,856 --> 01:08:19,630 1464 01:08:19,630 --> 01:08:21,600 Javascript, OK, godsakene. 1465 01:08:21,600 --> 01:08:24,069 Så Javascript, hva er Javascript? 1466 01:08:24,069 --> 01:08:28,370 Vel, er-- Java det er komplisert, men disse 1467 01:08:28,370 --> 01:08:30,727 er noen av høydepunktene som du bør huske på. 1468 01:08:30,727 --> 01:08:31,810 Først, det løst skrevet. 1469 01:08:31,810 --> 01:08:33,529 Hva betyr det? 1470 01:08:33,529 --> 01:08:35,596 Så PHP var-- ja, hva skjer? 1471 01:08:35,596 --> 01:08:39,854 >> PUBLIKUM: Du trenger ikke å eksplisitt oppgi hva slags variabel det er. 1472 01:08:39,854 --> 01:08:40,479 DAVIN: Perfect. 1473 01:08:40,479 --> 01:08:43,270 Så han sa at du ikke trenger å eksplisitt hvilken type variabel. 1474 01:08:43,270 --> 01:08:44,160 Det er helt riktig. 1475 01:08:44,160 --> 01:08:49,700 Så i C, hvis jeg hadde int i lik 50, deretter i PHP, er det akkurat som dette, $ i, 1476 01:08:49,700 --> 01:08:50,550 tilsvarer 50. 1477 01:08:50,550 --> 01:08:54,319 Så i Javascript, hva ville samtalen være? 1478 01:08:54,319 --> 01:08:55,260 Var, ikke sant? 1479 01:08:55,260 --> 01:08:56,566 Det ville være som Var jeg er lik 50. 1480 01:08:56,566 --> 01:08:58,649 Men du trenger ikke å være aktig, OK, dette er en int. 1481 01:08:58,649 --> 01:09:00,350 OK, dette er en streng. 1482 01:09:00,350 --> 01:09:01,731 Du trenger ikke å gjøre det. 1483 01:09:01,731 --> 01:09:02,939 Det er et tolket språk. 1484 01:09:02,939 --> 01:09:04,904 Så hva betyr det? 1485 01:09:04,904 --> 01:09:06,340 >> PUBLIKUM: Ikke kompilert. 1486 01:09:06,340 --> 01:09:10,470 >> DAVIN: Hva betyr ikke kompilert bety? 1487 01:09:10,470 --> 01:09:11,392 Yeah? 1488 01:09:11,392 --> 01:09:15,336 >> PUBLIKUM: Du trenger ikke å restrukturere koden 1489 01:09:15,336 --> 01:09:18,294 for å få den klar for datamaskinen til å kjøre den. 1490 01:09:18,294 --> 01:09:23,144 Det har bare tatt på tidspunktet for utførelse og datamaskinen [uhørbart]. 1491 01:09:23,144 --> 01:09:25,560 DAVIN: Ja, så det kommer til å passere gjennom en tolk. 1492 01:09:25,560 --> 01:09:26,750 Men du er helt riktig. 1493 01:09:26,750 --> 01:09:28,319 Så du aldri kommer å kompilere det, ikke sant? 1494 01:09:28,319 --> 01:09:30,399 Når du gjorde ditt PHP og Javascript-kode, 1495 01:09:30,399 --> 01:09:31,365 du aldri kalt kompilere. 1496 01:09:31,365 --> 01:09:33,779 Du aldri kalt noe sånt gjøre eller noe sånt. 1497 01:09:33,779 --> 01:09:34,800 Det er fordi det er tolket. 1498 01:09:34,800 --> 01:09:37,319 Så hver gang det går gjennom nettleseren, det går gjennom en tolk. 1499 01:09:37,319 --> 01:09:40,370 Og det kommer til å tolke det bare i sanntid med en gang for deg. 1500 01:09:40,370 --> 01:09:43,770 Så hva er noen positive og negative å ha et tolket språk 1501 01:09:43,770 --> 01:09:45,258 og ha et kompilert språk? 1502 01:09:45,258 --> 01:09:48,240 1503 01:09:48,240 --> 01:09:50,540 Så compiling-- ja, hva skjer? 1504 01:09:50,540 --> 01:09:52,444 >> PUBLIKUM: Tolket er tregere. 1505 01:09:52,444 --> 01:09:53,319 DAVIN: I hvilken forstand? 1506 01:09:53,319 --> 01:09:57,167 1507 01:09:57,167 --> 01:09:59,091 >> PUBLIKUM: Etter at du har kompilere, trenger du ikke 1508 01:09:59,091 --> 01:10:04,400 å gjøre noen ekstra skritt for å utføre det, mens dette [uhørbart]. 1509 01:10:04,400 --> 01:10:05,570 >> DAVIN: Høyre, perfekt. 1510 01:10:05,570 --> 01:10:08,386 Så det du sier er i utgangspunktet at kompilering, 1511 01:10:08,386 --> 01:10:10,760 når du kompilere, har du en Mange forhånd kostnader, ikke sant? 1512 01:10:10,760 --> 01:10:11,760 Du kommer til å kompilere den. 1513 01:10:11,760 --> 01:10:13,750 Men etter at du kompilere den, kompilatoren kommer til å optimalisere den. 1514 01:10:13,750 --> 01:10:14,840 Det kommer til å være rask. 1515 01:10:14,840 --> 01:10:16,170 Det kommer til utgangspunktet være så fort som det kan være. 1516 01:10:16,170 --> 01:10:18,830 Med å tolke, du aldri har den upfront pris. 1517 01:10:18,830 --> 01:10:22,260 Heller, det kommer til å være litt tregere hver eneste gang du tolke det. 1518 01:10:22,260 --> 01:10:24,940 Og du er nødt til å tolke det hver eneste gang. 1519 01:10:24,940 --> 01:10:27,114 Så i stedet for å ha denne én gang kostnader, nå er du 1520 01:10:27,114 --> 01:10:29,530 nødt til å tolke det hver gang siden puss. 1521 01:10:29,530 --> 01:10:31,890 >> Så tolker er bra fordi du trenger ikke å kompilere den, 1522 01:10:31,890 --> 01:10:33,980 men de er dårlig i at hver gang siden lastes, det er 1523 01:10:33,980 --> 01:10:35,771 nødt til å tolke dette Script. 1524 01:10:35,771 --> 01:10:40,520 Og det kommer til å kjøre litt saktere enn hvis du skulle kompilere den. 1525 01:10:40,520 --> 01:10:43,044 Lar deg communicate-- oh, vent. 1526 01:10:43,044 --> 01:10:44,960 Brukes til å manipulere innhold og utseende. 1527 01:10:44,960 --> 01:10:46,043 Vi bare snakket om det. 1528 01:10:46,043 --> 01:10:47,250 Den bruker DOM. 1529 01:10:47,250 --> 01:10:49,930 AJAX, vil vi komme inn AJAX i en liten bit. 1530 01:10:49,930 --> 01:10:51,520 Og så, det er klientsiden. 1531 01:10:51,520 --> 01:10:53,110 Så PHP er server side. 1532 01:10:53,110 --> 01:10:54,360 Javascript er klientsiden. 1533 01:10:54,360 --> 01:10:57,780 Hva er positive til det? 1534 01:10:57,780 --> 01:10:58,280 Det sier det. 1535 01:10:58,280 --> 01:11:01,480 1536 01:11:01,480 --> 01:11:02,780 Det er raskere, ikke sant? 1537 01:11:02,780 --> 01:11:05,282 Fordi du ikke har to-- det er raskere. 1538 01:11:05,282 --> 01:11:07,490 Du trenger ikke å kommunisere med en annen enhet. 1539 01:11:07,490 --> 01:11:08,790 Hvis du er bare på din klient, er du aldri 1540 01:11:08,790 --> 01:11:11,280 nødt til å gå og se hva som er på serveren 1541 01:11:11,280 --> 01:11:13,150 og deretter rapportere tilbake eller noe sånt. 1542 01:11:13,150 --> 01:11:15,410 Så klientsiden har en tendens til være litt raskere. 1543 01:11:15,410 --> 01:11:17,910 >> Gabe: Ja, men dette betyr ikke at PHP er 1544 01:11:17,910 --> 01:11:20,440 raskere enn Java eller noe av lignende. 1545 01:11:20,440 --> 01:11:23,270 De kjører slags i samme fart fordi de er begge 1546 01:11:23,270 --> 01:11:24,490 tolket språk. 1547 01:11:24,490 --> 01:11:26,680 Det som er treg her er forespørselen. 1548 01:11:26,680 --> 01:11:28,870 Så du faktisk kommer hele veien over til Brasil 1549 01:11:28,870 --> 01:11:31,460 for å få litt informasjon som bor der. 1550 01:11:31,460 --> 01:11:34,590 Men PHP og Javascript, de slags drives i samme hastighet. 1551 01:11:34,590 --> 01:11:37,930 Det er ikke det at man er hurtigere enn den andre. 1552 01:11:37,930 --> 01:11:40,600 Dette, også, lurespørsmål her. 1553 01:11:40,600 --> 01:11:47,338 Så Java aldri blir maskinkode, sant eller usant? 1554 01:11:47,338 --> 01:11:48,590 >> PUBLIKUM: False. 1555 01:11:48,590 --> 01:11:49,090 Gabe: False. 1556 01:11:49,090 --> 01:11:51,298 Det må bli maskin kode fordi maskinkode er 1557 01:11:51,298 --> 01:11:53,210 den eneste maskinen forstår. 1558 01:11:53,210 --> 01:11:55,800 Selv om det ikke er utarbeidet, det fortsatt blir maskinkode 1559 01:11:55,800 --> 01:11:59,120 fordi tolken er bare et program som går linje for linje 1560 01:11:59,120 --> 01:12:02,170 og forvandler den linjen inn noe datamaskinen forstår. 1561 01:12:02,170 --> 01:12:02,825 OK? 1562 01:12:02,825 --> 01:12:03,325 Cool. 1563 01:12:03,325 --> 01:12:08,530 1564 01:12:08,530 --> 01:12:12,890 >> DAVIN: Her er bare en helt grunnleggende hello world Javascript-program. 1565 01:12:12,890 --> 01:12:15,590 Så jeg vet ikke if-- du har sett dette. 1566 01:12:15,590 --> 01:12:17,630 Men du må bare HTML her. 1567 01:12:17,630 --> 01:12:21,020 Og i stedet for faktisk å sette Javascript i skriptkodene, 1568 01:12:21,020 --> 01:12:22,810 så du vil normalt sette det i hodet. 1569 01:12:22,810 --> 01:12:24,030 Du har skriptkodene. 1570 01:12:24,030 --> 01:12:24,870 Du slippe den der. 1571 01:12:24,870 --> 01:12:28,350 Alt vi har gjort her er vi har koblet in-- så vi har koblet i en Javascript-fil 1572 01:12:28,350 --> 01:12:29,137 som dette. 1573 01:12:29,137 --> 01:12:30,470 Og du har alle gjort dette, ikke sant? 1574 01:12:30,470 --> 01:12:34,740 Så når du brukte jQuery og underscore.js i den siste p-set, 1575 01:12:34,740 --> 01:12:38,700 du trenger ikke tonnevis med kode opp i skriptkodene, opp i hodet ditt. 1576 01:12:38,700 --> 01:12:41,415 Du kan gjøre det, men i stedet du bare å koble den inn. 1577 01:12:41,415 --> 01:12:43,540 Og dere henviser det i akkurat som du gjør med CSS. 1578 01:12:43,540 --> 01:12:50,186 Så det bare gjør det lettere å lese så koden er ikke som 1000 linjer lang 1579 01:12:50,186 --> 01:12:52,310 med tonnevis av funksjoner som du kan ikke bruke. 1580 01:12:52,310 --> 01:12:53,518 >> I stedet, du bare koble den inn. 1581 01:12:53,518 --> 01:12:55,050 Det compartmentalizes det. 1582 01:12:55,050 --> 01:13:00,110 Det er som å skrive noen header-fil, og da inkludert som header fil i C. 1583 01:13:00,110 --> 01:13:01,620 Tenk på det akkurat som dette. 1584 01:13:01,620 --> 01:13:02,680 Så hva betyr dette? 1585 01:13:02,680 --> 01:13:04,560 Vel, dette kommer til å kjøre. 1586 01:13:04,560 --> 01:13:05,410 Det kommer til å varsle. 1587 01:13:05,410 --> 01:13:08,020 Så du kommer til å få litt dukke opp kalt hello world. 1588 01:13:08,020 --> 01:13:11,420 Rask spørsmål, bare sunn fornuft sjekk, slik man ser her i kroppen, 1589 01:13:11,420 --> 01:13:13,160 sier kroppen, HTML her. 1590 01:13:13,160 --> 01:13:14,080 Hva kommer først? 1591 01:13:14,080 --> 01:13:16,864 Må jeg se kroppen, HTML her, eller ser jeg varsel først? 1592 01:13:16,864 --> 01:13:19,828 1593 01:13:19,828 --> 01:13:20,820 >> PUBLIKUM: Alert. 1594 01:13:20,820 --> 01:13:21,470 >> DAVIN: Høyre. 1595 01:13:21,470 --> 01:13:22,110 Han sier varsel. 1596 01:13:22,110 --> 01:13:22,610 Hvorfor? 1597 01:13:22,610 --> 01:13:24,470 >> PUBLIKUM: Fordi du går fra topp til bunn. 1598 01:13:24,470 --> 01:13:25,600 >> DAVIN: Ja. 1599 01:13:25,600 --> 01:13:26,100 Perfekt. 1600 01:13:26,100 --> 01:13:29,207 Så han sier, du går fra topp til bunn, som er helt korrekt. 1601 01:13:29,207 --> 01:13:30,790 Du kommer til å gå fra topp til bunn. 1602 01:13:30,790 --> 01:13:34,790 Og i Javascript, jQuery, har du en funksjon som er som onload, eller klar, 1603 01:13:34,790 --> 01:13:38,030 og som sier, OK, vent til alt dette HTML har lastet. 1604 01:13:38,030 --> 01:13:39,580 Og så, kaller Javascript. 1605 01:13:39,580 --> 01:13:42,190 Fordi vi ikke har det her, aller første som kommer til å skje 1606 01:13:42,190 --> 01:13:43,920 er det kommer til å gå fra topp til bunn. 1607 01:13:43,920 --> 01:13:46,310 Det kommer til å treffe som JS ringe, det kommer til å varsle. 1608 01:13:46,310 --> 01:13:49,510 Etter at du klikker på OK, at varsling går unna. 1609 01:13:49,510 --> 01:13:53,600 Så det kommer til å vise du kroppen HTML her. 1610 01:13:53,600 --> 01:13:54,590 Nice. 1611 01:13:54,590 --> 01:14:00,880 >> OK, så bare virkelig rask, skriving i Javascript er super rask. 1612 01:14:00,880 --> 01:14:02,710 For å erklære en variabel, ulike navn. 1613 01:14:02,710 --> 01:14:07,070 Så i C, har du int i, du har å erklære hva slags type det er. 1614 01:14:07,070 --> 01:14:08,040 PHP, $. 1615 01:14:08,040 --> 01:14:08,755 Javascript, var. 1616 01:14:08,755 --> 01:14:09,630 Vi snakket om dette. 1617 01:14:09,630 --> 01:14:11,020 Greit, la oss gå. 1618 01:14:11,020 --> 01:14:12,510 >> Looper, samme ting. 1619 01:14:12,510 --> 01:14:14,230 Samme. 1620 01:14:14,230 --> 01:14:18,165 Funksjons erklæringer, så akkurat som du har sett i C. 1621 01:14:18,165 --> 01:14:21,290 Eneste som er forskjellig er så når du komme til andre programmeringsspråk, 1622 01:14:21,290 --> 01:14:24,780 som når du tar 51 neste semester og du gjør med Objective Caml, 1623 01:14:24,780 --> 01:14:26,690 du kan håndtere anonyme funksjoner. 1624 01:14:26,690 --> 01:14:28,240 Så det er akkurat hva du har her. 1625 01:14:28,240 --> 01:14:31,560 Så du ønsker å sette i sum, en slags sumverdi. 1626 01:14:31,560 --> 01:14:33,870 Men du kan bare gjøre det en gang. 1627 01:14:33,870 --> 01:14:37,310 Så du ikke ønsker å kalle det funksjon sum, gi den en funksjon erklæring. 1628 01:14:37,310 --> 01:14:39,830 I stedet, du bare bruke den som en anonym funksjon. 1629 01:14:39,830 --> 01:14:42,469 Og du har sett dette mye. 1630 01:14:42,469 --> 01:14:44,510 Du vil se et eksempel på dette i et par lysbilder. 1631 01:14:44,510 --> 01:14:45,597 Ja, vi får se. 1632 01:14:45,597 --> 01:14:46,430 Gabe: Godt spørsmål. 1633 01:14:46,430 --> 01:14:50,660 Når kan det være lurt å bruke en anonym funksjon her? 1634 01:14:50,660 --> 01:14:54,111 I utgangspunktet, når du vil ha noe, som en hendelse, til å skje. 1635 01:14:54,111 --> 01:14:55,860 Så når musen er klikkes, f.eks 1636 01:14:55,860 --> 01:14:57,790 du ønsker noen funksjon for å bli kalt. 1637 01:14:57,790 --> 01:15:00,570 Så du passerer til arrangementet handler, passerer du til hendelsen, 1638 01:15:00,570 --> 01:15:02,870 slag av den funksjon som du ønsker å bli kalt. 1639 01:15:02,870 --> 01:15:04,710 Og hva du passerer er som, ved slutten 1640 01:15:04,710 --> 01:15:08,757 av dagen, bare en peker til at undervisning, til funksjonen. 1641 01:15:08,757 --> 01:15:11,090 Så det er ikke som du sender hele koden, like 1642 01:15:11,090 --> 01:15:12,173 en peker til funksjonen. 1643 01:15:12,173 --> 01:15:17,871 Og så, når noen klikker på mus, så den funksjonen blir kalt. 1644 01:15:17,871 --> 01:15:22,340 >> Davin: Arrays, slik at du har en rekke erklæring. 1645 01:15:22,340 --> 01:15:23,990 Deretter til en matrise sette ting i. 1646 01:15:23,990 --> 01:15:25,769 Virkelig rask, hva vil dette skrive ut? 1647 01:15:25,769 --> 01:15:27,060 Hva vil det tredje elementet være? 1648 01:15:27,060 --> 01:15:31,470 1649 01:15:31,470 --> 01:15:32,450 >> PUBLIKUM: "JS". 1650 01:15:32,450 --> 01:15:33,940 >> DAVIN: Høyre, ville det være "JS". 1651 01:15:33,940 --> 01:15:35,760 Vent, gå tilbake. 1652 01:15:35,760 --> 01:15:37,100 Hvor lang? 1653 01:15:37,100 --> 01:15:38,117 >> PUBLIKUM: Tre. 1654 01:15:38,117 --> 01:15:38,950 DAVIN: Tre, ikke sant? 1655 01:15:38,950 --> 01:15:40,210 Nøyaktig hva du synes. 1656 01:15:40,210 --> 01:15:42,072 OK, nå gå. 1657 01:15:42,072 --> 01:15:43,530 Arrays, kan du legge ting til dem. 1658 01:15:43,530 --> 01:15:45,395 Så du kan gå utover sine første grenser. 1659 01:15:45,395 --> 01:15:46,740 Bare noe å huske på. 1660 01:15:46,740 --> 01:15:49,760 PHP, Javascript, de er litt litt mer tilgivende i form av ting 1661 01:15:49,760 --> 01:15:50,570 sånn. 1662 01:15:50,570 --> 01:15:54,260 Objekter, veldig mye som structs i C, veldig mye 1663 01:15:54,260 --> 01:15:56,590 som assosiative arrays i PHP. 1664 01:15:56,590 --> 01:15:58,720 Dere har alle hatt erfaring med dette. 1665 01:15:58,720 --> 01:16:01,880 Så JSON, når du passerer JSON frem og tilbake i p-set åtte, 1666 01:16:01,880 --> 01:16:03,260 det er din objekt. 1667 01:16:03,260 --> 01:16:06,290 >> Så ja, eksempel, virkelig rask eksempel. 1668 01:16:06,290 --> 01:16:07,880 Her er et objekt. 1669 01:16:07,880 --> 01:16:12,700 Måten du refererer dette objekt, så bare virkelig rask, 1670 01:16:12,700 --> 01:16:18,630 la oss si at jeg ønsket å finne ut, OK, hva er kurset? 1671 01:16:18,630 --> 01:16:20,681 Og så objektnavnet her er CS50. 1672 01:16:20,681 --> 01:16:23,180 Og så hvis jeg hadde en assosiativ array, hvordan skulle jeg gjøre det? 1673 01:16:23,180 --> 01:16:24,580 Jeg skal bruke en nøkkel, ikke sant? 1674 01:16:24,580 --> 01:16:26,030 Så jeg har navnet på tabellen. 1675 01:16:26,030 --> 01:16:30,160 Jeg har brakett, sitater, nøkkel, end sitater, endebrakett, 1676 01:16:30,160 --> 01:16:33,610 og som vil referere til at element inni mitt assosiativ array. 1677 01:16:33,610 --> 01:16:37,646 Hvordan gjør jeg refererte Selvfølgelig inni mitt objekt? 1678 01:16:37,646 --> 01:16:39,170 Noen som vet? 1679 01:16:39,170 --> 01:16:40,622 >> PUBLIKUM: [uhørlig]. 1680 01:16:40,622 --> 01:16:41,784 >> DAVIN: Hva skjer? 1681 01:16:41,784 --> 01:16:42,700 PUBLIKUM: CS50.course. 1682 01:16:42,700 --> 01:16:43,510 DAVIN: Høyre, ja. 1683 01:16:43,510 --> 01:16:45,320 Så CS50.course. 1684 01:16:45,320 --> 01:16:48,770 Slik at måten du refererer ting inne i en JSON objekt er med en prikk. 1685 01:16:48,770 --> 01:16:53,114 >> PUBLIKUM: Du kan også bruke array syntaks. 1686 01:16:53,114 --> 01:16:54,050 >> DAVIN: OK, greit. 1687 01:16:54,050 --> 01:16:57,544 >> Gabe: Du kan også bruke CS50 brakett, string, som anførselstegn. 1688 01:16:57,544 --> 01:16:59,210 PUBLIKUM: Jeg tror det er identisk med PHP. 1689 01:16:59,210 --> 01:17:00,293 Gabe: Det er det samme. 1690 01:17:00,293 --> 01:17:02,487 DAVIN: Fine! 1691 01:17:02,487 --> 01:17:03,945 Men du vil se denne andre steder. 1692 01:17:03,945 --> 01:17:08,990 1693 01:17:08,990 --> 01:17:10,480 Ja, så holde det gående. 1694 01:17:10,480 --> 01:17:13,330 Dette er hva jeg nettopp sa. 1695 01:17:13,330 --> 01:17:17,840 Så inn i en Javascript jQuery eksempel. 1696 01:17:17,840 --> 01:17:19,440 Så dette er min DOM, ikke sant? 1697 01:17:19,440 --> 01:17:22,290 1698 01:17:22,290 --> 01:17:25,410 Virkelig rask, så jeg har en hode, hallo verden, kroppen. 1699 01:17:25,410 --> 01:17:26,160 Jeg har en knapp. 1700 01:17:26,160 --> 01:17:27,870 Det står "presse meg", så jeg ønsker å presse den. 1701 01:17:27,870 --> 01:17:29,745 Og jeg ønsker å gjøre noe når det klikkes. 1702 01:17:29,745 --> 01:17:31,220 Høyre, neste. 1703 01:17:31,220 --> 01:17:34,630 >> Høyre, så dette er min Script. 1704 01:17:34,630 --> 01:17:37,790 Så jQuery er bare en enklere måte å skrive Javascript. 1705 01:17:37,790 --> 01:17:40,920 Så dette, og hva jeg skal vise du neste, kommer til å være jQuery, 1706 01:17:40,920 --> 01:17:41,930 er identiske. 1707 01:17:41,930 --> 01:17:43,990 Slik at de vil gjøre de samme tingene. 1708 01:17:43,990 --> 01:17:45,974 Bare jQuery har en tendens til å bli litt lettere. 1709 01:17:45,974 --> 01:17:47,140 Folk har en tendens til å like det mer. 1710 01:17:47,140 --> 01:17:48,390 Den har mye funksjonalitet. 1711 01:17:48,390 --> 01:17:49,830 Slik at folk har en tendens til å bruke jQuery. 1712 01:17:49,830 --> 01:17:53,270 Du alle brukt jQuery i den siste p-set. 1713 01:17:53,270 --> 01:17:54,270 Så hva vil dette gjøre? 1714 01:17:54,270 --> 01:17:56,580 Hva vil dette JavaScript-- så dette er bare ren Javascript. 1715 01:17:56,580 --> 01:17:57,430 Hva vil dette gjøre? 1716 01:17:57,430 --> 01:18:00,600 1717 01:18:00,600 --> 01:18:03,450 Hva vil det gjøre? 1718 01:18:03,450 --> 01:18:04,890 >> Så først, ser du vinduet onload. 1719 01:18:04,890 --> 01:18:05,390 Høyre? 1720 01:18:05,390 --> 01:18:06,640 Så fikk vi ikke se det før. 1721 01:18:06,640 --> 01:18:09,380 Så dette kommer til å vente inntil hele vinduet belastninger. 1722 01:18:09,380 --> 01:18:12,770 Så det kommer til å vente til HTML, alle bildene belastning 1723 01:18:12,770 --> 01:18:13,770 før den gjør noe. 1724 01:18:13,770 --> 01:18:16,050 Så la oss si vår DOM har lastet. 1725 01:18:16,050 --> 01:18:17,270 Alt er der. 1726 01:18:17,270 --> 01:18:19,080 Så hva kommer til å skje? 1727 01:18:19,080 --> 01:18:19,922 Yeah? 1728 01:18:19,922 --> 01:18:22,880 >> PUBLIKUM: Button vises. 1729 01:18:22,880 --> 01:18:25,201 >> DAVIN: Knappen er allerede der. 1730 01:18:25,201 --> 01:18:26,700 Ja, så knappens allerede der. 1731 01:18:26,700 --> 01:18:31,190 Men dette kommer til å si, OK, hvis jeg klikker på knappen, 1732 01:18:31,190 --> 01:18:33,650 så på knappen finnes allerede der, sånn HTML-kode. 1733 01:18:33,650 --> 01:18:35,980 Vent, gå tilbake virkelig rask. 1734 01:18:35,980 --> 01:18:39,470 Denne taggen akkurat her er kommer til å være en knapp allerede. 1735 01:18:39,470 --> 01:18:40,810 Det er allerede en knapp. 1736 01:18:40,810 --> 01:18:44,120 Men så, på Java tag, akkurat her, 1737 01:18:44,120 --> 01:18:46,160 det sier, OK, jeg vil ha å få element av ID, 1738 01:18:46,160 --> 01:18:50,300 så søk-knappen bare sier, OK, jeg vil ha å kartlegge denne variabelen til den knappen. 1739 01:18:50,300 --> 01:18:53,120 Slik at variabelen er bare en enklere måte å få tilgang til den knappen. 1740 01:18:53,120 --> 01:18:57,300 Og jeg sier, OK, hvis jeg klikker det knappen, så hvis jeg klikker som element, 1741 01:18:57,300 --> 01:18:59,560 og dette elementet refererer til knappen, hvis jeg klikker på den, 1742 01:18:59,560 --> 01:19:00,875 så jeg vil kalle en funksjon. 1743 01:19:00,875 --> 01:19:03,500 Her er en av de anonyme funksjoner vi snakket om. 1744 01:19:03,500 --> 01:19:04,840 >> Bare ring noen funksjon. 1745 01:19:04,840 --> 01:19:08,840 Innsiden som funksjon, i utgangspunktet noe vi har sett mye, våken. 1746 01:19:08,840 --> 01:19:10,477 Du klikker på søkeknappen. 1747 01:19:10,477 --> 01:19:12,060 Det kommer til å i utgangspunktet ha en knapp. 1748 01:19:12,060 --> 01:19:13,040 Du klikker på det. 1749 01:19:13,040 --> 01:19:14,040 Du får som varsler. 1750 01:19:14,040 --> 01:19:14,850 X ut. 1751 01:19:14,850 --> 01:19:15,754 Det var det. 1752 01:19:15,754 --> 01:19:16,254 Yeah? 1753 01:19:16,254 --> 01:19:21,980 >> PUBLIKUM: Så hvis du putter skriptet [Uhørbart], script-koden i HTML? 1754 01:19:21,980 --> 01:19:24,300 >> DAVIN: Du kan sette skriptet tag rett i hodet 1755 01:19:24,300 --> 01:19:30,667 fordi du har denne onload. 1756 01:19:30,667 --> 01:19:32,000 Det er også at du har et klikk. 1757 01:19:32,000 --> 01:19:34,166 Så det kommer til å vente til du klikker for noe. 1758 01:19:34,166 --> 01:19:37,470 Men onload er bare for å være sikker, for å gjøre at alt lastes inn i HTML 1759 01:19:37,470 --> 01:19:38,170 på forhånd. 1760 01:19:38,170 --> 01:19:39,247 Yeah? 1761 01:19:39,247 --> 01:19:40,330 Du ønsker å si noe? 1762 01:19:40,330 --> 01:19:41,080 >> Gabe: [uhørbart]. 1763 01:19:41,080 --> 01:19:42,485 DAVIN: Yeah. 1764 01:19:42,485 --> 01:19:45,426 >> PUBLIKUM: Så onload unngår definere variabelen søk-knappen 1765 01:19:45,426 --> 01:19:49,930 ved å bare si document.getElementById søkeknappen dot [uhørbart]. 1766 01:19:49,930 --> 01:19:52,320 >> DAVIN: Definitivt, men deretter strengen bare blir enorme. 1767 01:19:52,320 --> 01:19:55,553 Akkurat, så dette er bare for å gjøre det enklere for deg, ja. 1768 01:19:55,553 --> 01:19:56,053 Ja? 1769 01:19:56,053 --> 01:19:57,886 >> PUBLIKUM: Hvor gjorde vi skape window.onload? 1770 01:19:57,886 --> 01:19:58,951 Eller document.ready? 1771 01:19:58,951 --> 01:20:00,590 >> DAVIN: Ja, det er. 1772 01:20:00,590 --> 01:20:02,094 Ja, det er, sjekket jeg. 1773 01:20:02,094 --> 01:20:03,710 >> Gabe: Ikke for dem å bry seg om. 1774 01:20:03,710 --> 01:20:06,970 >> DAVIN: OK, så jeg kommer å fortelle deg uansett. 1775 01:20:06,970 --> 01:20:11,005 Så i utgangspunktet, bare generelt, så window.onload venter til din DOM, alt 1776 01:20:11,005 --> 01:20:12,180 HTML, laster. 1777 01:20:12,180 --> 01:20:13,513 Den venter til din bilder belastning. 1778 01:20:13,513 --> 01:20:14,930 Den venter til alt masse. 1779 01:20:14,930 --> 01:20:18,410 document.ready, det bare venter til dine DOM laster. 1780 01:20:18,410 --> 01:20:22,190 Når HTML er alle der, en gang din DOM er der, begynner å gå. 1781 01:20:22,190 --> 01:20:23,400 Det er den eneste forskjellen. 1782 01:20:23,400 --> 01:20:24,700 >> Gabe: Hurtig tilregnelighet sjekk her. 1783 01:20:24,700 --> 01:20:29,060 Så dette kan sees slags som en linje med kode, ikke sant? 1784 01:20:29,060 --> 01:20:33,600 Fordi det er window.onload tilsvarer en haug med ting. 1785 01:20:33,600 --> 01:20:39,030 Når Java leser dette, sant eller falsk, blir funksjonen utført. 1786 01:20:39,030 --> 01:20:40,020 Falsk. 1787 01:20:40,020 --> 01:20:40,920 OK? 1788 01:20:40,920 --> 01:20:44,470 Hva skjer her, du er bare passerer denne funksjonen som en anonym funksjoner 1789 01:20:44,470 --> 01:20:45,300 å window.onload. 1790 01:20:45,300 --> 01:20:48,480 Og så når det kommer å faktisk bli henrettet? 1791 01:20:48,480 --> 01:20:49,600 Når vindus belastninger. 1792 01:20:49,600 --> 01:20:50,420 Det er en hendelse. 1793 01:20:50,420 --> 01:20:52,460 Så det er jus t ting vi er snakket om tidligere, ikke sant? 1794 01:20:52,460 --> 01:20:54,580 Så når hendelsen skjer, funksjonen skjer. 1795 01:20:54,580 --> 01:20:55,746 Samme med onclick. 1796 01:20:55,746 --> 01:20:59,510 1797 01:20:59,510 --> 01:21:03,130 >> DAVIN: OK, så noen tok bort document.ready. 1798 01:21:03,130 --> 01:21:04,698 Men dette vil være nøyaktig same-- 1799 01:21:04,698 --> 01:21:06,864 PUBLIKUM: Dollartegnet, som er en document.ready. 1800 01:21:06,864 --> 01:21:07,710 Det er en snarvei. 1801 01:21:07,710 --> 01:21:08,501 >> DAVIN: Å, er det? 1802 01:21:08,501 --> 01:21:10,880 1803 01:21:10,880 --> 01:21:15,500 OK, så dette betyr document.ready, snarvei. 1804 01:21:15,500 --> 01:21:19,660 Men dette er det samme som window.onload med unntak av den lille forskjell 1805 01:21:19,660 --> 01:21:20,680 Jeg fortalte deg om. 1806 01:21:20,680 --> 01:21:21,870 Og dette er jQuery. 1807 01:21:21,870 --> 01:21:25,190 Så dette er nøyaktig samme thing-- dette er Script. 1808 01:21:25,190 --> 01:21:29,500 Dette er just-- noen mennesker tenker på det som en mer lett vekt, slank versjon 1809 01:21:29,500 --> 01:21:32,370 som har massevis av funksjonalitet at du vil sannsynligvis være å bruke. 1810 01:21:32,370 --> 01:21:34,500 Så dette gjør akkurat det samme. 1811 01:21:34,500 --> 01:21:37,110 >> Så ting å slags påpeke. 1812 01:21:37,110 --> 01:21:40,364 Så i den andre eksempel, vi hadde document.getElementById, 1813 01:21:40,364 --> 01:21:42,280 så vi hadde dette lenge strengen som kommer til å få 1814 01:21:42,280 --> 01:21:44,290 elementet av hva ID den har. 1815 01:21:44,290 --> 01:21:46,470 Som er erstattet av denne samtalen her. 1816 01:21:46,470 --> 01:21:50,860 Så du ser dollartegn, så ser du quote, hashtag. 1817 01:21:50,860 --> 01:21:52,370 Hashtag er alltid en selektor. 1818 01:21:52,370 --> 01:21:54,730 Den sier, OK, har dette å gjøre med en ID. 1819 01:21:54,730 --> 01:21:56,120 Hva er velgeren for en klasse? 1820 01:21:56,120 --> 01:21:57,190 >> PUBLIKUM: Dot. 1821 01:21:57,190 --> 01:21:57,960 >> DAVIN: Dot, høyre. 1822 01:21:57,960 --> 01:22:01,950 Hvis du bare skal til velg en tag, hva er det? 1823 01:22:01,950 --> 01:22:03,310 Det er bare koden, akkurat. 1824 01:22:03,310 --> 01:22:05,560 Og du kan bruke det her, også. 1825 01:22:05,560 --> 01:22:08,560 >> Gabe: Og etter tag, mener vi at div, for eksempel, eller hode. 1826 01:22:08,560 --> 01:22:11,500 >> DAVIN: Eller kroppen eller p eller noe sånt, ja. 1827 01:22:11,500 --> 01:22:14,390 Så her, OK, i stedet for å si document.getElementById, 1828 01:22:14,390 --> 01:22:16,500 dette er bare akkurat det samme. 1829 01:22:16,500 --> 01:22:17,990 Bare i jQuery, er det kortere. 1830 01:22:17,990 --> 01:22:19,860 Så det er enklere. 1831 01:22:19,860 --> 01:22:23,420 Så da, ikke mer onclick, bare klikk. 1832 01:22:23,420 --> 01:22:26,320 jQuery funksjon, kaller denne funksjonen. 1833 01:22:26,320 --> 01:22:27,580 Alert er nøyaktig det samme. 1834 01:22:27,580 --> 01:22:29,452 Så det er en liten bit mindre, eller litt 1835 01:22:29,452 --> 01:22:32,410 kortere, litt bit-- folk tror det er litt lettere å skrive ut, 1836 01:22:32,410 --> 01:22:34,600 litt enklere å forstå. 1837 01:22:34,600 --> 01:22:35,640 Men dette er jQuery. 1838 01:22:35,640 --> 01:22:37,887 Mange mennesker får litt litt forvirret og bekymret 1839 01:22:37,887 --> 01:22:40,220 og de tror, ​​OK, jQuery er annerledes enn Script. 1840 01:22:40,220 --> 01:22:42,136 Jeg må huske disse to forskjellige ting. 1841 01:22:42,136 --> 01:22:42,740 Det er ikke. 1842 01:22:42,740 --> 01:22:45,315 Jeg mener, det er annerledes syntaks. 1843 01:22:45,315 --> 01:22:46,970 Men jQuery er Script. 1844 01:22:46,970 --> 01:22:50,050 Det er bare en tilsynelatende bedre versjon som 1845 01:22:50,050 --> 01:22:51,967 kan være lettere å forstå at folk bruker. 1846 01:22:51,967 --> 01:22:53,716 Gabe: Ja, for å være ærlig, at dollartegn 1847 01:22:53,716 --> 01:22:57,240 som du ser i jQuery, det er bare det navn på en funksjon som jQuery definerer. 1848 01:22:57,240 --> 01:22:58,614 Det har ikke noe spesielt. 1849 01:22:58,614 --> 01:23:03,140 Er Det er bare navnet på en funksjon, akkurat som du kan definere dollartegn. 1850 01:23:03,140 --> 01:23:05,670 >> DAVIN: Ja, så snakket om dette. 1851 01:23:05,670 --> 01:23:06,680 Noen nyttige ting. 1852 01:23:06,680 --> 01:23:10,414 Jeg var ser tilbake på de gamle spørrekonkurranser. 1853 01:23:10,414 --> 01:23:13,080 I de siste par quizer, de har måtte bruke ting som dette. 1854 01:23:13,080 --> 01:23:15,230 Så document.ready, så sørge for at alt er 1855 01:23:15,230 --> 01:23:17,410 lastet før du begynner å gjøre ting. 1856 01:23:17,410 --> 01:23:20,120 Velg en ID, eller velg en klasse, ville det bare 1857 01:23:20,120 --> 01:23:24,020 være sitat dot noen klasse, sitat slutt. 1858 01:23:24,020 --> 01:23:26,580 Send inn, så hvis du er sende inn et skjema og samtale 1859 01:23:26,580 --> 01:23:28,830 denne funksjonen etter at skjemaet sender. 1860 01:23:28,830 --> 01:23:34,210 Verdi, så la oss si at jeg hadde en form innsending, som brukernavn, e-post, 1861 01:23:34,210 --> 01:23:34,950 uansett. 1862 01:23:34,950 --> 01:23:36,010 Jeg hadde en tekstboks. 1863 01:23:36,010 --> 01:23:37,670 Så jeg skriver inn at tekstboksen. 1864 01:23:37,670 --> 01:23:42,170 Vel, hvis du ønsker å få verdien ut av at tekstboksen, bruker du dot val. 1865 01:23:42,170 --> 01:23:44,050 Og så, her nede, dot HTML er den samme 1866 01:23:44,050 --> 01:23:47,710 er som dokument dot getElementById dot innerhtml. 1867 01:23:47,710 --> 01:23:50,890 Så det kommer til å gå tilbake du HTML fra at ID. 1868 01:23:50,890 --> 01:23:55,080 Her, du bare bruke noen ID eller hva dot HTML. 1869 01:23:55,080 --> 01:23:56,930 Som vil få HTML fra det elementet. 1870 01:23:56,930 --> 01:24:00,130 Hvis du ønsket å endre deretter at HTML, kan du gi det noe. 1871 01:24:00,130 --> 01:24:05,600 Så du ville være som dot HTML, og deretter innsiden, sitater, ny HTML eller noe. 1872 01:24:05,600 --> 01:24:07,490 >> Gabe: OK, så AJAX. 1873 01:24:07,490 --> 01:24:10,347 Jeg liker å forstå AJAX veldig bra. 1874 01:24:10,347 --> 01:24:12,430 Så jeg ønsker dere til forstå AJAX veldig bra. 1875 01:24:12,430 --> 01:24:14,221 For hvis du gjør det, du er ganske mye som skjer 1876 01:24:14,221 --> 01:24:16,810 å forstå alt som har å gjøre med HTTP, PHP, 1877 01:24:16,810 --> 01:24:21,080 Java fordi det alt kommer sammen i AJAX. 1878 01:24:21,080 --> 01:24:25,130 AJAX er ikke et språk. 1879 01:24:25,130 --> 01:24:27,000 AJAX er en teknikk. 1880 01:24:27,000 --> 01:24:31,690 Og den bruker mange ulike verktøy. 1881 01:24:31,690 --> 01:24:35,090 AJAX står for asynkron Java XML. 1882 01:24:35,090 --> 01:24:36,730 Så metoden, språk, data. 1883 01:24:36,730 --> 01:24:40,610 >> Så det viktigste språket som vi bruker i AJAX for å utløse alt 1884 01:24:40,610 --> 01:24:42,830 og for å håndtere alt senere er Script. 1885 01:24:42,830 --> 01:24:45,160 Det er derfor det er relatert svært nær Javascript. 1886 01:24:45,160 --> 01:24:49,810 Og så asynkron er fordi vi ikke gjør det 1887 01:24:49,810 --> 01:24:51,980 alt på en gang når vi legger i siden. 1888 01:24:51,980 --> 01:24:57,190 Dette er ting som vi kan gjøre ting slags parallelt. 1889 01:24:57,190 --> 01:24:59,725 Hovedideen bak AJAX er at du vil 1890 01:24:59,725 --> 01:25:02,170 det å få noen spesifikk informasjon. 1891 01:25:02,170 --> 01:25:06,450 For eksempel når du skriver ny brukernavn når du registrerer deg et brukernavn, 1892 01:25:06,450 --> 01:25:08,520 mitt brukernavn er abc123. 1893 01:25:08,520 --> 01:25:11,671 Og deretter, ved slutten av form, må du klikke på Send. 1894 01:25:11,671 --> 01:25:14,420 Og det måtte gå til serveren, og deretter sjekke om i databasen, 1895 01:25:14,420 --> 01:25:15,594 abc123 er allerede der. 1896 01:25:15,594 --> 01:25:18,510 Og hvis det er der allerede, sier den: brukernavn allerede i databasen. 1897 01:25:18,510 --> 01:25:21,010 Og de, må du fylle ut hele skjemaet på nytt. 1898 01:25:21,010 --> 01:25:23,110 Og det var virkelig, virkelig ille. 1899 01:25:23,110 --> 01:25:25,440 >> Og da folk sier, OK, hvorfor kan ikke vi bare 1900 01:25:25,440 --> 01:25:29,560 gjøre en liten HTTP-forespørsel til å bare sjekke for å se om denne brukeren er i databasen 1901 01:25:29,560 --> 01:25:32,080 før brukeren måtte sende hele skjemaet? 1902 01:25:32,080 --> 01:25:36,350 Så for eksempel når brukeren er ferdig å skrive abc123, 1903 01:25:36,350 --> 01:25:39,660 la oss bare gå til serveren litt litt og bare få en ekte eller falsk 1904 01:25:39,660 --> 01:25:43,080 fra serveren for å se om det er et gyldig brukernavn eller ikke. 1905 01:25:43,080 --> 01:25:49,250 OK, så det er en av de viktigste bruker av AJAX i dag likevel. 1906 01:25:49,250 --> 01:25:52,130 >> DAVIN: Så virkelig rask, i en Ajax samtale i jQuery, 1907 01:25:52,130 --> 01:25:54,770 du kan bety at du vil den skal være synkron. 1908 01:25:54,770 --> 01:25:56,330 Du bør ikke gjøre dette. 1909 01:25:56,330 --> 01:25:57,640 Men du kan gjøre det. 1910 01:25:57,640 --> 01:25:59,277 Og hvis du gjorde det, hva ville skje? 1911 01:25:59,277 --> 01:26:01,610 Vel, for eksempel når du er å få nyheter eller hva, 1912 01:26:01,610 --> 01:26:05,464 Nettleseren din er bare kommer til å vente til at hele samtalen er ferdig 1913 01:26:05,464 --> 01:26:08,130 stedet for å la deg gjøre andre ting riktig etter at du klikker på den. 1914 01:26:08,130 --> 01:26:14,560 1915 01:26:14,560 --> 01:26:17,115 >> Gabe: Det er ikke bestått lenger. 1916 01:26:17,115 --> 01:26:19,681 Oh my god. 1917 01:26:19,681 --> 01:26:20,180 Sorry! 1918 01:26:20,180 --> 01:26:22,810 1919 01:26:22,810 --> 01:26:23,601 Yup. 1920 01:26:23,601 --> 01:26:25,350 "I det siste, klient måtte forespørsel 1921 01:26:25,350 --> 01:26:26,840 hele innholdet på en nettside. " 1922 01:26:26,840 --> 01:26:28,210 Det var det jeg sa. 1923 01:26:28,210 --> 01:26:30,070 Det tillater oss å sende ekstra GET eller POST 1924 01:26:30,070 --> 01:26:32,140 forespørsler uten å ha å lesse nettleseren vår. 1925 01:26:32,140 --> 01:26:34,806 Så på slutten av dagen, vi er faktisk gjør en HTTP-forespørsler 1926 01:26:34,806 --> 01:26:35,740 her bruker Javascript. 1927 01:26:35,740 --> 01:26:39,700 Fordi før, vi bare brukte Java å endre HTML som allerede kom. 1928 01:26:39,700 --> 01:26:43,110 Og nå kan vi bruke den til grensesnitt med webserverne også. 1929 01:26:43,110 --> 01:26:46,140 Måten dette skjer er at vi har klienten. 1930 01:26:46,140 --> 01:26:47,340 Davin er en klient. 1931 01:26:47,340 --> 01:26:50,797 Og han har all Javascript kjører fordi HTML er dumme. 1932 01:26:50,797 --> 01:26:51,630 Javascript er smart. 1933 01:26:51,630 --> 01:26:54,690 Så Davin Davin har sin smart del og hans dumme del. 1934 01:26:54,690 --> 01:26:57,590 Han kommer til å bruke sin smart del nå. 1935 01:26:57,590 --> 01:27:00,860 Han kommer til å bruke Javascript til forespørsel, for eksempel, 1936 01:27:00,860 --> 01:27:04,340 om abc123 er i databasen eller ikke. 1937 01:27:04,340 --> 01:27:08,450 >> Så Davin, vær så snill, du bare send meg en HTTP-forespørsel. 1938 01:27:08,450 --> 01:27:09,197 Takk. 1939 01:27:09,197 --> 01:27:10,530 Så han bare sendte en HTTP-forespørsel. 1940 01:27:10,530 --> 01:27:11,270 Du ser det? 1941 01:27:11,270 --> 01:27:14,700 Og det er akkurat det samme måte at enhver HTTP-forespørsel er sendt. 1942 01:27:14,700 --> 01:27:16,830 Leseren, Google Krom eller noe, er 1943 01:27:16,830 --> 01:27:19,570 kommer til å se at Davin s prøver å sende en HTTP-forespørsel, 1944 01:27:19,570 --> 01:27:20,930 kommer til å hjelpe hm litt. 1945 01:27:20,930 --> 01:27:23,950 Og det kommer til å gå hele veien til serveren. 1946 01:27:23,950 --> 01:27:27,370 Nå er serveren kommer til å ha PHP her, eller andre språk. 1947 01:27:27,370 --> 01:27:29,990 Akkurat som i en vanlig HTTP-forespørsel. 1948 01:27:29,990 --> 01:27:31,950 Det er ganske mye en normal HTTP-forespørsel. 1949 01:27:31,950 --> 01:27:33,658 >> Og så, serveren kommer til å si, OK, 1950 01:27:33,658 --> 01:27:37,270 Davin vil at jeg skal sjekke om Dette abc123 er i databasen. 1951 01:27:37,270 --> 01:27:38,310 Gå snakke med modellen. 1952 01:27:38,310 --> 01:27:41,310 Modellen sier det er det ikke. abc123 er et godt brukernavn. 1953 01:27:41,310 --> 01:27:47,940 Og da er webserveren skal bruke PHP til å gjengi noen form for fil. 1954 01:27:47,940 --> 01:27:52,280 Det kan være bokstavelig talt bare en fil som inneholder "ja" i det, eller "nei, 1955 01:27:52,280 --> 01:27:53,315 eller noe sånt. 1956 01:27:53,315 --> 01:27:54,190 Det kan være en hvilken som helst fil. 1957 01:27:54,190 --> 01:27:57,080 >> Det kan være at jeg kommer til sende Davin et bilde av en and 1958 01:27:57,080 --> 01:28:01,200 hvis det er i databasen og sende et bilde av en hamster 1959 01:28:01,200 --> 01:28:02,420 hvis det ikke er i databasen. 1960 01:28:02,420 --> 01:28:04,294 Det ville være slags dum, men det vil fungere. 1961 01:28:04,294 --> 01:28:07,030 OK, så jeg sender en and til Davin. 1962 01:28:07,030 --> 01:28:08,150 Davin fikk en and. 1963 01:28:08,150 --> 01:28:13,330 Og nå, som kommer å håndtere anda? 1964 01:28:13,330 --> 01:28:16,390 Davin smarte del igjen, så Javascript, ikke sant? 1965 01:28:16,390 --> 01:28:18,620 Java sendte forespørsel, og Java 1966 01:28:18,620 --> 01:28:22,300 skal motta anmodningen og tolke det i en eller annen form. 1967 01:28:22,300 --> 01:28:26,630 >> Og i denne forstand, kommer det til å si, OK, hvis duck da er jeg god. 1968 01:28:26,630 --> 01:28:30,770 Hvis hamster, så jeg kommer å si, nei, navn bruker allerede 1969 01:28:30,770 --> 01:28:31,970 finnes i databasen. 1970 01:28:31,970 --> 01:28:33,845 Men vanligvis, er du ikke kommer til å sende en and. 1971 01:28:33,845 --> 01:28:36,740 Du kommer til å sende noe litt smartere. 1972 01:28:36,740 --> 01:28:40,320 Og hva vi bruker er XML. 1973 01:28:40,320 --> 01:28:42,690 Og mer nylig, bruker vi JSON. 1974 01:28:42,690 --> 01:28:45,629 JSON er bare Java Object Notation, som 1975 01:28:45,629 --> 01:28:47,670 er i utgangspunktet du får en Hele Javascript objekt. 1976 01:28:47,670 --> 01:28:50,820 Og du putter den i en fil, akkurat som at CS50 objekt som dere så. 1977 01:28:50,820 --> 01:28:53,090 Du setter den i en fil, og du sender det over til Davin. 1978 01:28:53,090 --> 01:28:55,850 >> Så i dette tilfellet, ville jeg lage en Javascript-objekt 1979 01:28:55,850 --> 01:28:59,570 og bare si, bruker eksisterer, ja. 1980 01:28:59,570 --> 01:29:01,630 Eller brukeren finnes, nei. 1981 01:29:01,630 --> 01:29:02,810 Og sende den tilbake til ham. 1982 01:29:02,810 --> 01:29:03,830 Og hvorfor JSON? 1983 01:29:03,830 --> 01:29:07,330 Fordi personen hvem som mottar dette er 1984 01:29:07,330 --> 01:29:10,030 kommer til å bruke Javascript å håndtere responsen. 1985 01:29:10,030 --> 01:29:14,970 Og Javascript fungerer så bra fordi det heter Javascript Object Notation. 1986 01:29:14,970 --> 01:29:15,470 Høyre? 1987 01:29:15,470 --> 01:29:19,660 Så han kan bare ringe en funksjon og få denne fine objekt fra responsen. 1988 01:29:19,660 --> 01:29:22,890 Og så, han kommer til å få vite om at brukeren er i databasen, eller ikke. 1989 01:29:22,890 --> 01:29:25,230 >> Så du ser, alt av det som kommer sammen i web-server, 1990 01:29:25,230 --> 01:29:28,450 og så er det en HTTP til forespørsel og en HTTP respons og alt. 1991 01:29:28,450 --> 01:29:30,600 Så sørg for at dere forstå dette AJAX samtale 1992 01:29:30,600 --> 01:29:37,260 fordi det hjelper deg å forstå alt av konseptene vi snakker om. 1993 01:29:37,260 --> 01:29:40,260 >> Så her er et eksempel av AJAX med jQuery. 1994 01:29:40,260 --> 01:29:42,130 Og her, vi gjør med komme JSON. 1995 01:29:42,130 --> 01:29:45,660 Så vi ikke prøver å få en bilde av en katt her, eller en and. 1996 01:29:45,660 --> 01:29:48,110 Vi prøver å få en JSON-fil. 1997 01:29:48,110 --> 01:29:51,184 Og da vi vente til det er gjort, dot gjort. 1998 01:29:51,184 --> 01:29:52,850 Det betyr at jeg venter på svar. 1999 01:29:52,850 --> 01:29:54,180 Det kan ta en liten stund. 2000 01:29:54,180 --> 01:29:56,360 Deretter ser du litt lasting. 2001 01:29:56,360 --> 01:29:59,340 Hvis du ønsker å gjøre det i ditt nettsted. 2002 01:29:59,340 --> 01:30:01,440 Så dot gjort, og deretter hva skjer når det er ferdig? 2003 01:30:01,440 --> 01:30:04,040 Du passerer i en anonym funksjon, akkurat som vi har sett før. 2004 01:30:04,040 --> 01:30:07,800 Fordi gjort er en hendelse, bare som å klikke en mus eller hva, 2005 01:30:07,800 --> 01:30:08,710 for jQuery. 2006 01:30:08,710 --> 01:30:13,710 Så du passerer i denne funksjonen med data, tekst, status, og jqXHR. 2007 01:30:13,710 --> 01:30:15,790 Og innerst inne, at bare noen variabler 2008 01:30:15,790 --> 01:30:22,160 som du kan bruke senere for å ha status for HTTP-forespørsel, 2009 01:30:22,160 --> 01:30:24,470 dataene som det kommer å sende tilbake til deg. 2010 01:30:24,470 --> 01:30:28,740 Så da kan du senere tolke det og gjøre noe meningsfylt med det. 2011 01:30:28,740 --> 01:30:30,240 Og hvis det mislykkes, da kan det mislykkes? 2012 01:30:30,240 --> 01:30:33,780 Vel, når det HTTP-forespørsel gir du en 500 eller noe sånt. 2013 01:30:33,780 --> 01:30:37,420 Så, det kommer til å fortelle deg status, hva slags feil det var, 2014 01:30:37,420 --> 01:30:38,420 og alle slags ting. 2015 01:30:38,420 --> 01:30:40,630 Du må sørge for til å håndtere begge tilfeller 2016 01:30:40,630 --> 01:30:42,770 ellers programmet går gale. 2017 01:30:42,770 --> 01:30:45,820 >> DAVIN: Så ja, dette er akkurat hva du så på den siste p-set. 2018 01:30:45,820 --> 01:30:49,720 Selve AJAX samtale get JSON. 2019 01:30:49,720 --> 01:30:50,587 Det vil si at anropet. 2020 01:30:50,587 --> 01:30:52,920 Og så, er dot gjort som den sjekker om det er vellykket. 2021 01:30:52,920 --> 01:30:55,620 Hvis det er vellykket, vil du for å gjøre noe med dataene. 2022 01:30:55,620 --> 01:30:59,290 Du får tilbake fra det JSON forespørsel data. 2023 01:30:59,290 --> 01:31:00,600 Det er hva du får tilbake. 2024 01:31:00,600 --> 01:31:04,470 Så hvis du husker fra din p-set, mange av dere var som data braketten jeg 2025 01:31:04,470 --> 01:31:06,302 eller hva, dot link eller tittel. 2026 01:31:06,302 --> 01:31:08,260 Uansett kommer tilbake fra at JSON, uansett 2027 01:31:08,260 --> 01:31:11,020 feltene er i den JSON objekt, det er hva du får tilbake. 2028 01:31:11,020 --> 01:31:12,394 Data er hva du får tilbake. 2029 01:31:12,394 --> 01:31:15,510 Tekst status, bare noe som gjør at du vet hva som skjedde. 2030 01:31:15,510 --> 01:31:20,570 Og så, det er jqXHR, bare jQuery XML HTTP-forespørsel. 2031 01:31:20,570 --> 01:31:21,990 Det er akkurat som et objekt. 2032 01:31:21,990 --> 01:31:23,932 Og så mislykkes, akkurat som Gabe sa. 2033 01:31:23,932 --> 01:31:27,140 Gabe: I vår lille eksempel på abc123 bare for å sjekke om det er i databasen 2034 01:31:27,140 --> 01:31:32,260 eller ikke, dataene vil være noe du ville gjøre, hvis data dot brukernavn eksisterer, 2035 01:31:32,260 --> 01:31:37,720 som er det din PHP generert for du, hvis data dot brukernavn finnes, så 2036 01:31:37,720 --> 01:31:40,880 Jeg kommer til å varsle, bruker navnet finnes allerede. 2037 01:31:40,880 --> 01:31:44,300 Else, jeg bare kommer til å la bruker fortsette å fylle ut skjemaet. 2038 01:31:44,300 --> 01:31:47,860 2039 01:31:47,860 --> 01:31:50,820 OK, sikkerhet, kult. 2040 01:31:50,820 --> 01:31:52,060 >> DAVIN: Skal jeg? 2041 01:31:52,060 --> 01:31:54,500 >> Gabe: Jeg liker denne. 2042 01:31:54,500 --> 01:31:57,680 Så noe som ser kjent ut. 2043 01:31:57,680 --> 01:31:59,750 Vi er nesten ferdig. 2044 01:31:59,750 --> 01:32:02,670 Så dette er bare et eksempel dere så i klassen. 2045 01:32:02,670 --> 01:32:04,860 Du brukte argv1 her. 2046 01:32:04,860 --> 01:32:06,460 Det er som en kommandolinje argument. 2047 01:32:06,460 --> 01:32:09,270 Og vi mem kopiering som inn i en buffer av 12 størrelse. 2048 01:32:09,270 --> 01:32:12,560 Hva er problemet her? 2049 01:32:12,560 --> 01:32:13,660 Buffer overflow! 2050 01:32:13,660 --> 01:32:15,400 Fordi vi har en buffer av størrelse 12. 2051 01:32:15,400 --> 01:32:18,400 argv1 kan ha en størrelse på to milliarder. 2052 01:32:18,400 --> 01:32:19,960 Vi gjør ikke noen grense sjekking. 2053 01:32:19,960 --> 01:32:24,970 Så vi kan kopiere en mye minne. 2054 01:32:24,970 --> 01:32:28,630 Og vi vil være spesielt dårlig om dette. 2055 01:32:28,630 --> 01:32:32,600 Hva kan vi gjøre som er veldig, veldig mener i dette tilfellet? 2056 01:32:32,600 --> 01:32:33,278 Ja? 2057 01:32:33,278 --> 01:32:36,528 PUBLIKUM: En del av de to milliarder ting inneholder kjørbar kode som returnerer 2058 01:32:36,528 --> 01:32:38,127 [Uhørbart]. 2059 01:32:38,127 --> 01:32:38,710 Gabe: Nettopp. 2060 01:32:38,710 --> 01:32:41,110 Så det er den type ting som folk bruker 2061 01:32:41,110 --> 01:32:43,344 å jailbreak en iPhone, for eksempel. 2062 01:32:43,344 --> 01:32:44,260 Så den slags ting. 2063 01:32:44,260 --> 01:32:48,610 Fordi du kan bare gjøre enheten utføre noen kode som du liker. 2064 01:32:48,610 --> 01:32:50,247 Reparasjonen, så reparasjonen er enkelt. 2065 01:32:50,247 --> 01:32:51,330 Bare sjekk for grensene. 2066 01:32:51,330 --> 01:32:53,455 Du sjekke for null fordi vi sjekker alltid for null 2067 01:32:53,455 --> 01:32:54,940 når vi arbeider med strenger. 2068 01:32:54,940 --> 01:32:57,840 Og så, du tar strenglengde før. 2069 01:32:57,840 --> 01:33:00,150 Og hvis strengen Lengden er en gyldig streng 2070 01:33:00,150 --> 01:33:03,700 lengde, som er innenfor 0- og 12, så vi er gode. 2071 01:33:03,700 --> 01:33:07,144 >> DAVIN: Hvis du ikke se etter null, virkelig rask, hva vil skje? 2072 01:33:07,144 --> 01:33:07,810 Det vil SEG feil. 2073 01:33:07,810 --> 01:33:10,850 Hvorfor vil det SEG feil? 2074 01:33:10,850 --> 01:33:12,510 Fordi du ringer strlen på null. 2075 01:33:12,510 --> 01:33:13,010 Gabe: Yeah. 2076 01:33:13,010 --> 01:33:16,490 2077 01:33:16,490 --> 01:33:19,630 Sant eller usant, ved hjelp av én passord er en god idé. 2078 01:33:19,630 --> 01:33:20,430 >> PUBLIKUM: False. 2079 01:33:20,430 --> 01:33:21,150 >> Gabe: False. 2080 01:33:21,150 --> 01:33:23,870 Bruke mange passord, og store, lange seg. 2081 01:33:23,870 --> 01:33:26,050 Hengelås ikoner sikre sikkerheten. 2082 01:33:26,050 --> 01:33:27,080 >> PUBLIKUM: False. 2083 01:33:27,080 --> 01:33:27,749 >> Gabe: False. 2084 01:33:27,749 --> 01:33:28,790 Det betyr ikke noe. 2085 01:33:28,790 --> 01:33:30,480 Det er bare et ikon. 2086 01:33:30,480 --> 01:33:32,824 SSL beskytter mot en Mannen i midten angrep. 2087 01:33:32,824 --> 01:33:33,490 PUBLIKUM: False. 2088 01:33:33,490 --> 01:33:34,110 Gabe: False. 2089 01:33:34,110 --> 01:33:35,355 OK, så alle de som er falske. 2090 01:33:35,355 --> 01:33:38,324 2091 01:33:38,324 --> 01:33:39,490 Nice. 2092 01:33:39,490 --> 01:33:40,220 [Uhørbart] 2093 01:33:40,220 --> 01:33:42,500 Lyst til å snakke om dette? 2094 01:33:42,500 --> 01:33:43,259 Din tur. 2095 01:33:43,259 --> 01:33:45,050 Davin: Typer av angrep, Mannen i midten. 2096 01:33:45,050 --> 01:33:47,134 Hva er en mann i midten angrep? 2097 01:33:47,134 --> 01:33:48,050 PUBLIKUM: [uhørlig]. 2098 01:33:48,050 --> 01:33:51,437 2099 01:33:51,437 --> 01:33:54,020 DAVIN: Hvis du sender en HTTP forespørsel, kan de gjøre dette, ikke sant? 2100 01:33:54,020 --> 01:33:57,890 Men hvis du sender HTTPS, de sannsynligvis ikke vil være i stand til å gjøre dette. 2101 01:33:57,890 --> 01:33:59,952 Det er massevis av poeng sammen tilkoblingen. 2102 01:33:59,952 --> 01:34:00,660 Du har rutere. 2103 01:34:00,660 --> 01:34:01,746 Du har DNS-servere. 2104 01:34:01,746 --> 01:34:04,120 Hvis noen er i stand til fysisk se hva du sender, 2105 01:34:04,120 --> 01:34:06,140 slik at noen er i stand til å faktisk får mellom deg, 2106 01:34:06,140 --> 01:34:08,840 klienten og serveren, og er i stand til å se hva du sender, 2107 01:34:08,840 --> 01:34:10,298 dette er en mann i midten angrep. 2108 01:34:10,298 --> 01:34:14,287 Så for å se hva du prøver å komme fra serveren, eller er i stand til å see-- verre, 2109 01:34:14,287 --> 01:34:16,620 du kan være i stand til å se kapsler eller noe sånt. 2110 01:34:16,620 --> 01:34:19,290 >> Så for eksempel hvis du ikke bruker SSL, han 2111 01:34:19,290 --> 01:34:21,900 kan være i stand til å se økten ID-informasjonskapsler. 2112 01:34:21,900 --> 01:34:25,460 Og dette kalles session hijacking fordi han ser ID-cookies, 2113 01:34:25,460 --> 01:34:28,317 og så er han i stand til å gå til det nettside og later til å være deg. 2114 01:34:28,317 --> 01:34:31,150 Fordi akkurat som i PHP, husker når vi logget på, hva gjør vi? 2115 01:34:31,150 --> 01:34:33,340 Vi setter session ID lik ID. 2116 01:34:33,340 --> 01:34:34,810 Slik som identifiserer deg. 2117 01:34:34,810 --> 01:34:38,300 Det er derfor du kan se din portefølje og ikke alle andres portefølje. 2118 01:34:38,300 --> 01:34:42,320 >> Vel, hvis jeg er i stand til å få denne informasjonskapselen, så kan jeg logge inn på den siden. 2119 01:34:42,320 --> 01:34:45,380 Og så, jeg kan bare se tingene dine og begynne å kjøpe og selge ting. 2120 01:34:45,380 --> 01:34:46,800 Så det er session kapring. 2121 01:34:46,800 --> 01:34:50,810 Men du bør ikke være i stand to-- slik at du kan bruke mannen i midten angrep 2122 01:34:50,810 --> 01:34:52,290 selv om de bruker SSL. 2123 01:34:52,290 --> 01:34:53,520 Men du bør ikke være i stand til. 2124 01:34:53,520 --> 01:34:56,580 Hvis de bruker SSL, du kan ikke session kapre. 2125 01:34:56,580 --> 01:34:58,927 Hvorfor? 2126 01:34:58,927 --> 01:35:01,135 Fordi det er alt kryptert, ikke sant? hvis det er kryptert, 2127 01:35:01,135 --> 01:35:03,509 og jeg er fremdeles en mann i midten, jeg fortsatt få dataene. 2128 01:35:03,509 --> 01:35:04,279 Det er greit. 2129 01:35:04,279 --> 01:35:05,070 Men det er kryptert. 2130 01:35:05,070 --> 01:35:07,750 Så jeg kan egentlig ikke bruke den. 2131 01:35:07,750 --> 01:35:09,840 Så det er to. 2132 01:35:09,840 --> 01:35:11,544 >> Virkelig rask, cross site request forfalskning. 2133 01:35:11,544 --> 01:35:13,960 Det er bare hvis det er en kobling og at koblingen gjør noe 2134 01:35:13,960 --> 01:35:14,890 at du ikke tror det skal gjøre. 2135 01:35:14,890 --> 01:35:18,150 Så for eksempel, hvis koblingen var kommer til å kjøpe aksjer eller selge aksjer, 2136 01:35:18,150 --> 01:35:19,360 og du visste ikke det. 2137 01:35:19,360 --> 01:35:22,040 Du klikket på linken, sendte en forespørsel, kjøpt 2138 01:35:22,040 --> 01:35:24,240 eller solgt noe som du ikke mente å gjøre. 2139 01:35:24,240 --> 01:35:25,120 Det er det. 2140 01:35:25,120 --> 01:35:30,720 >> Cross site scripting, så her, du sender inn via variabel q, 2141 01:35:30,720 --> 01:35:33,510 stedet for å gå i en slags av verdi, er kanskje q som et navn. 2142 01:35:33,510 --> 01:35:36,560 Så i stedet for å passere q equals Davin eller noe sånt, 2143 01:35:36,560 --> 01:35:38,740 hvis du ikke bruker HTML spesielle tegn, hvis du 2144 01:35:38,740 --> 01:35:43,100 rømmer ikke dette for å sikre at det er OK, så jeg kunne passere i stedet, 2145 01:35:43,100 --> 01:35:46,910 la oss si i her sier jeg print eller noe sånt, 2146 01:35:46,910 --> 01:35:51,070 så jeg kunne passere her et skript samtale. 2147 01:35:51,070 --> 01:35:53,140 >> Så, i stedet for bare å få en variabel, 2148 01:35:53,140 --> 01:35:54,960 Jeg vil deretter utføre dette skriptet samtale. 2149 01:35:54,960 --> 01:35:57,065 Så inne at skript ringe, hva gjør det? 2150 01:35:57,065 --> 01:36:00,190 Dokument dot plassering, er at å gå til endre plasseringen av dokumentet. 2151 01:36:00,190 --> 01:36:02,290 Så jeg kommer til å omdirigere til et annet sted. 2152 01:36:02,290 --> 01:36:08,170 Det kalles bad guy i dette eksempelet, veldig bra. 2153 01:36:08,170 --> 01:36:10,536 Kunne ikke tenke på ordet. 2154 01:36:10,536 --> 01:36:12,410 Og så, hva er enda verre er at jeg kommer 2155 01:36:12,410 --> 01:36:16,832 å så sette cookie, som er noen variabel jeg har i dette nettstedet. 2156 01:36:16,832 --> 01:36:19,040 Jeg kommer til å sette den lik til dokumentet dot cookie. 2157 01:36:19,040 --> 01:36:20,660 Derfor kommer jeg til å stjele din cookie. 2158 01:36:20,660 --> 01:36:22,951 Og jeg kommer til å omdirigere litt informasjon til et nettsted 2159 01:36:22,951 --> 01:36:25,120 at du ikke skal få tilgang til. 2160 01:36:25,120 --> 01:36:29,250 Og alt dette skjer fordi du er ikke rømmer hva du har sett. 2161 01:36:29,250 --> 01:36:29,910 Yeah? 2162 01:36:29,910 --> 01:36:32,160 >> PUBLIKUM: Så bare for å gjøre det klart, det er 2163 01:36:32,160 --> 01:36:37,550 vulnerable.com at er utsatt for dette. 2164 01:36:37,550 --> 01:36:39,300 Slik at koblingen kan vises på en gitt side. 2165 01:36:39,300 --> 01:36:42,200 Noen klikker på den, går til vulnerable.com. 2166 01:36:42,200 --> 01:36:43,700 Du har en cookie til vulnerable.com. 2167 01:36:43,700 --> 01:36:46,670 La oss si at Facebook er sårbar, så facebook.com. 2168 01:36:46,670 --> 01:36:48,310 Du har din Facebook cookie. 2169 01:36:48,310 --> 01:36:50,925 Hva dette gjør, er du kommer til facebook.com, 2170 01:36:50,925 --> 01:36:53,990 det umiddelbart omdirigere du å badguy.com, 2171 01:36:53,990 --> 01:36:57,182 men inkludert din cookie-informasjon. 2172 01:36:57,182 --> 01:36:59,310 Så det er en rask redirect, men din Facebook cookie 2173 01:36:59,310 --> 01:37:02,572 er inkludert med at viderekobling, og det er hvordan de [uhørbart]. 2174 01:37:02,572 --> 01:37:04,280 Gabe: Ja, det er noen veldig stygge ting 2175 01:37:04,280 --> 01:37:06,070 at folk kan gjøre hvis det er dette. 2176 01:37:06,070 --> 01:37:09,190 For eksempel, hvis Facebook tillatt alle å endre brukernavnet, 2177 01:37:09,190 --> 01:37:11,680 og de gjorde ikke noe feilsjekkene, slik at du 2178 01:37:11,680 --> 01:37:16,810 kunne sette inn en Javascript ting som endrer bildet ditt til en hamster. 2179 01:37:16,810 --> 01:37:22,590 Og som setter inn den samme Java til alle som ser på siden din. 2180 01:37:22,590 --> 01:37:26,400 Så alle som ser siden din har det samme i brukernavnet. 2181 01:37:26,400 --> 01:37:30,104 Og fordi det er et virus, det sprer seg eksponentielt. 2182 01:37:30,104 --> 01:37:32,270 DAVIN: Vi skal hoppe over den siste ett, og da vi er ferdige. 2183 01:37:32,270 --> 01:37:34,120 Så dette er bare et eksempel. 2184 01:37:34,120 --> 01:37:36,120 Så dette er de ikke rømmer sin SQL tabellen. 2185 01:37:36,120 --> 01:37:37,090 Så du kan slippe den. 2186 01:37:37,090 --> 01:37:38,805 Så du ønsker å unnslippe ting. 2187 01:37:38,805 --> 01:37:44,010 Det var forrige eksempel med korset site scripting. 2188 01:37:44,010 --> 01:37:45,430 Beklager vi kjørte litt sent. 2189 01:37:45,430 --> 01:37:46,870 I morgen, beklager! 2190 01:37:46,870 --> 01:37:48,560 I morgen har vi kontortid. 2191 01:37:48,560 --> 01:37:50,870 Så kontortid i Cabbot 08:00 til 11:00. 2192 01:37:50,870 --> 01:37:55,240 Kontorets åpningstider er strengt for spørsmålene. 2193 01:37:55,240 --> 01:37:56,587