1 00:00:00,000 --> 00:00:05,616 2 00:00:05,616 --> 00:00:07,030 >> HANNAH Blumberg: Hi everyone. 3 00:00:07,030 --> 00:00:09,530 Vi kommer til å komme i gang bare et par minutter for tidlig 4 00:00:09,530 --> 00:00:11,738 siden vi har en hel masse materiale for å komme gjennom. 5 00:00:11,738 --> 00:00:12,790 Jeg er Hannah. 6 00:00:12,790 --> 00:00:13,865 Jeg er en TF. 7 00:00:13,865 --> 00:00:16,239 Maria kommer til å bli med oss i bare et par minutter. 8 00:00:16,239 --> 00:00:17,560 Hun underviser delen rett før. 9 00:00:17,560 --> 00:00:19,351 Jeg underviser delen rett etter, så vi kommer 10 00:00:19,351 --> 00:00:21,200 å holde det til og en halv time. 11 00:00:21,200 --> 00:00:25,490 >> Så som du ser her oppe, har vi ganske noen emner vi trenger for å komme gjennom, 12 00:00:25,490 --> 00:00:27,200 så vi kommer litt fort. 13 00:00:27,200 --> 00:00:31,140 Men hvis vi på noe tidspunkt si noe for fort, eller du ikke forstår, 14 00:00:31,140 --> 00:00:33,170 gjerne avbryte med spørsmål. 15 00:00:33,170 --> 00:00:36,610 Vi ønsker å være i stand til å gjøre dette til en anmeldelse av økten som nyttig for alle dere 16 00:00:36,610 --> 00:00:37,973 som mulig. 17 00:00:37,973 --> 00:00:38,920 Awesome. 18 00:00:38,920 --> 00:00:41,650 >> Så la oss hoppe rett inn med noen temaer som vi faktisk 19 00:00:41,650 --> 00:00:46,980 veldig, veldig kort dekket for quiz 0 i quizen 0 anmeldelse økt. 20 00:00:46,980 --> 00:00:48,840 Så starter med koblede lister. 21 00:00:48,840 --> 00:00:52,090 Så bare sørg for at du har noen grunnleggende kunnskap om lenkede lister 22 00:00:52,090 --> 00:00:55,110 og er komfortabel med å gjøre noen av de grunnleggende operasjoner. 23 00:00:55,110 --> 00:00:58,560 >> Så bare en anmeldelse, koblet lister er bedre enn arrays 24 00:00:58,560 --> 00:01:01,020 fordi de kan vokse dynamisk. 25 00:01:01,020 --> 00:01:03,300 Så vi har den store fordelen. 26 00:01:03,300 --> 00:01:06,031 Vi har sett dem brukt i hash tabeller når vi 27 00:01:06,031 --> 00:01:08,280 vet ikke nøyaktig hvor mange tingene vi kommer til å ønske 28 00:01:08,280 --> 00:01:10,900 for å sette inn i vårt datastruktur. 29 00:01:10,900 --> 00:01:15,700 Dessverre har vi biter av den lenket liste over minne, 30 00:01:15,700 --> 00:01:20,820 så vi vil ikke nødvendigvis være i stand til å gjøre konstant tid adgang 31 00:01:20,820 --> 00:01:22,502 et hvilket som helst element i lenket liste. 32 00:01:22,502 --> 00:01:24,210 For å finne en bestemt element, vi 33 00:01:24,210 --> 00:01:26,510 har å veksle alle helt fra begynnelsen. 34 00:01:26,510 --> 00:01:30,610 Så husk at mesteparten av grunnleggende operasjoner er omega for en. 35 00:01:30,610 --> 00:01:32,130 Så innsatsen er bare kommer til å ta en. 36 00:01:32,130 --> 00:01:37,520 Slett kommer til å ta n siden vi må gå finne det fra listen. 37 00:01:37,520 --> 00:01:39,260 Og søk kan ta, i verste fall, n. 38 00:01:39,260 --> 00:01:42,330 Vi kan ikke gjøre noe sånt binære søk på en lenket liste 39 00:01:42,330 --> 00:01:45,101 siden vi kan ikke bare tilfeldig hoppe til midten. 40 00:01:45,101 --> 00:01:45,600 Kjølig. 41 00:01:45,600 --> 00:01:48,160 42 00:01:48,160 --> 00:01:48,960 Awesome. 43 00:01:48,960 --> 00:01:50,270 >> En liten bit av stabler. 44 00:01:50,270 --> 00:01:53,980 Dette, igjen, kom opp på quiz 0, slik at du bør være super komfortabel med det. 45 00:01:53,980 --> 00:01:57,210 Men for stabler, ber vi deg å huske en stabel med skuffer. 46 00:01:57,210 --> 00:01:59,940 Og det kommer til å være først i, sist ut. 47 00:01:59,940 --> 00:02:02,272 Så vi stable ting opp i bunken, og deretter 48 00:02:02,272 --> 00:02:04,980 hvis vi prøver å ta noe off-- som vi kaller dukker av 49 00:02:04,980 --> 00:02:06,581 den stack-- vi kommer på toppen. 50 00:02:06,581 --> 00:02:09,289 Og hvis vi ønsker å sette noe i bunken, vi kaller det presser. 51 00:02:09,289 --> 00:02:13,170 Så det er alltid kommer til å være økende opp fra bunnen som en stabel med skuffer. 52 00:02:13,170 --> 00:02:14,540 Awesome. 53 00:02:14,540 --> 00:02:17,607 >> Vi har sett stabler implementert med både koblede lister og matriser. 54 00:02:17,607 --> 00:02:19,440 Hvis du implementere med matriser, vil du 55 00:02:19,440 --> 00:02:22,350 å sørge for å holde styr på både størrelse og kapasitet. 56 00:02:22,350 --> 00:02:27,540 Slik størrelse kommer til å være den aktuelle rekke ting i stabelen din, 57 00:02:27,540 --> 00:02:32,900 mens kapasiteten er det totale antall ting du kan lagre i bunken. 58 00:02:32,900 --> 00:02:34,220 Kjølig. 59 00:02:34,220 --> 00:02:35,767 >> Svært likt, har vi køer. 60 00:02:35,767 --> 00:02:38,850 I dette tilfellet, i stedet for å tenke på en stabel med skuffer, tenk på en linje. 61 00:02:38,850 --> 00:02:40,697 Dette kommer til å være først inn, først ut. 62 00:02:40,697 --> 00:02:42,780 Så hvis du er i kø for noe på butikken, 63 00:02:42,780 --> 00:02:46,920 Vi håper at den personen først i linjen kommer til å bli hjulpet først. 64 00:02:46,920 --> 00:02:49,350 >> I stedet for å si push og pop som vi gjør for stack, 65 00:02:49,350 --> 00:02:52,000 vi bare si enqueue og dequeue. 66 00:02:52,000 --> 00:02:54,970 Og igjen, hvis du er implementere dette med en matrise, 67 00:02:54,970 --> 00:02:56,720 vi trenger å holde styr av ikke bare størrelsen 68 00:02:56,720 --> 00:03:02,390 og kapasitet, men også hodet, hvilken kommer til å være den foran våre køen. 69 00:03:02,390 --> 00:03:03,010 Kjølig. 70 00:03:03,010 --> 00:03:05,770 Eventuelle spørsmål om noe av det? 71 00:03:05,770 --> 00:03:06,320 Awesome. 72 00:03:06,320 --> 00:03:07,640 Flytte rett sammen. 73 00:03:07,640 --> 00:03:08,564 >> OK, hash tabeller. 74 00:03:08,564 --> 00:03:10,605 Her er der det begynner å bli virkelig interessant. 75 00:03:10,605 --> 00:03:14,150 Så en hash table er en implementering av en assosiativ array. 76 00:03:14,150 --> 00:03:16,700 Så i utgangspunktet hva som skjedde er vi har all denne inngangen, 77 00:03:16,700 --> 00:03:18,750 og vi gir den til en hash funksjon som sier: 78 00:03:18,750 --> 00:03:21,840 OK, dette er hvor i hash table det hører hjemme. 79 00:03:21,840 --> 00:03:24,860 >> Så den enkleste hash-funksjon som vi har sett er bare å si: 80 00:03:24,860 --> 00:03:28,170 OK, antar vi ønsker å sette strenger i vår hash table. 81 00:03:28,170 --> 00:03:30,870 Og en veldig enkel idé kan være å si, OK, 82 00:03:30,870 --> 00:03:34,350 la oss bare sortere etter første bokstaven i ordet. 83 00:03:34,350 --> 00:03:37,570 Så du kan se her, tar vi banan, vi sette det gjennom en hash-funksjon, 84 00:03:37,570 --> 00:03:40,190 og det sier hei, som bør gå på indeks 1. 85 00:03:40,190 --> 00:03:45,120 >> Så vi kan egentlig tenke på en hash tabell som en haug med forskjellige skuffer. 86 00:03:45,120 --> 00:03:49,880 Og hver av disse bøtter går å holde hodet på en lenket liste. 87 00:03:49,880 --> 00:03:55,030 Og i det lenket liste er der vi kan faktisk sette forskjellige biter av data. 88 00:03:55,030 --> 00:03:57,820 >> Så dykking litt mer inn i en hash-funksjon, her 89 00:03:57,820 --> 00:03:59,870 eksempelet jeg bare beskrevet der vi bare si: 90 00:03:59,870 --> 00:04:02,460 OK, ta første bokstav av ordet, og vi er 91 00:04:02,460 --> 00:04:03,990 kommer til å sortere det inn i bøtter. 92 00:04:03,990 --> 00:04:08,490 Så antagelig vil det være 26 bøtter, en for hver bokstav i alfabetet. 93 00:04:08,490 --> 00:04:10,090 Hvorfor er ikke dette en god hash-funksjon? 94 00:04:10,090 --> 00:04:13,461 Hva gjør denne ikke-ideal? 95 00:04:13,461 --> 00:04:13,960 Yeah. 96 00:04:13,960 --> 00:04:15,790 >> PUBLIKUM: Du kommer å ha kollisjoner. 97 00:04:15,790 --> 00:04:16,390 >> HANNAH Blumberg: Ja, akkurat. 98 00:04:16,390 --> 00:04:18,000 Du er nødt til kollisjoner. 99 00:04:18,000 --> 00:04:18,954 Så det er en ting. 100 00:04:18,954 --> 00:04:21,620 Og vi skal snakke om hvordan vi kan fikse kollisjoner i løpet av et sekund. 101 00:04:21,620 --> 00:04:23,980 Et annet problem med dette Særlig hash-funksjon 102 00:04:23,980 --> 00:04:25,980 er at vår annerledes bøtter kommer til å være 103 00:04:25,980 --> 00:04:28,960 av ganske drastisk forskjellige størrelser. 104 00:04:28,960 --> 00:04:33,840 >> Vi vet at det er en hel masse flere ord som begynner med A enn X, 105 00:04:33,840 --> 00:04:38,980 så vi kommer til å ha svært ubalanserte bøtter i vår hash table. 106 00:04:38,980 --> 00:04:40,050 Kjølig. 107 00:04:40,050 --> 00:04:41,340 Så ja, la oss komme tilbake til poenget med kollisjoner. 108 00:04:41,340 --> 00:04:42,900 Hva gjør vi hvis det er en kollisjon? 109 00:04:42,900 --> 00:04:44,490 >> Vi har et par forskjellige alternativer. 110 00:04:44,490 --> 00:04:47,600 Så en, så antar vi prøver å sette bær i vår hash table. 111 00:04:47,600 --> 00:04:50,370 Og vi ser, oh, vi ønsker å sette den i indeks 1, 112 00:04:50,370 --> 00:04:52,070 men banan bor der allerede. 113 00:04:52,070 --> 00:04:53,110 Hva skal vi gjøre? 114 00:04:53,110 --> 00:04:54,560 Vi har to hovedalternativer. 115 00:04:54,560 --> 00:04:58,050 >> Nummer én er vi kan si, OK, det er ikke plass i indeks 1, 116 00:04:58,050 --> 00:05:03,210 men la oss bare holde utkikk gjennom før vi kan finne en annen åpen plass. 117 00:05:03,210 --> 00:05:08,490 Så vi vil si, OK, la oss sette det på plass 3. 118 00:05:08,490 --> 00:05:09,240 Det er ett alternativ. 119 00:05:09,240 --> 00:05:11,470 Det kalles lineær sondering. 120 00:05:11,470 --> 00:05:15,500 >> Og en andre alternativet er å si, OK, vel, la oss bare gjøre hver av disse bøtter 121 00:05:15,500 --> 00:05:17,470 være hoder av lenkede lister. 122 00:05:17,470 --> 00:05:21,910 Og det er OK hvis det er mer enn én ting i en bøtte. 123 00:05:21,910 --> 00:05:23,820 Vi skal bare legge det på forsiden. 124 00:05:23,820 --> 00:05:26,032 Så her kan du se, OK, når vi satt inn bær, vi 125 00:05:26,032 --> 00:05:28,240 bare tok banan, type dyttet den over en liten bit 126 00:05:28,240 --> 00:05:29,842 og kastet et bær der inne. 127 00:05:29,842 --> 00:05:31,050 Og det er også helt greit. 128 00:05:31,050 --> 00:05:32,830 Dette kalles separat kjeding. 129 00:05:32,830 --> 00:05:38,100 Du kan tenke på dette som typen som en rekke hoder til lenkede lister. 130 00:05:38,100 --> 00:05:41,950 Eventuelle spørsmål om hasj tabeller, hash funksjoner? 131 00:05:41,950 --> 00:05:44,290 Awesome. 132 00:05:44,290 --> 00:05:45,470 >> Trær og prøver. 133 00:05:45,470 --> 00:05:47,287 Så et tre er noen form av datastrukturen 134 00:05:47,287 --> 00:05:49,453 hvor det er en slags hierarki eller en slags 135 00:05:49,453 --> 00:05:51,247 av rangeringen til de ulike stedene. 136 00:05:51,247 --> 00:05:53,580 Og dette vil bli super tydelig når vi ser et eksempel. 137 00:05:53,580 --> 00:05:56,960 Og vi så prøver, sammen med hash tabeller, i pset5-- 138 00:05:56,960 --> 00:06:00,700 som igjen helt fritt vilt for denne quiz-- som en annen data 139 00:06:00,700 --> 00:06:03,110 strukturer som vi kan lagre forskjellige ting. 140 00:06:03,110 --> 00:06:06,782 I tilfelle av ordbok, vi lagret en haug med ord. 141 00:06:06,782 --> 00:06:08,240 Så la oss ta en titt på noen trær. 142 00:06:08,240 --> 00:06:10,190 Slik at dette er et eksempel på et tre. 143 00:06:10,190 --> 00:06:13,105 Den har en slags struktur, at hierarkisk struktur, 144 00:06:13,105 --> 00:06:15,920 hvor du kan se at dette en node på toppen 145 00:06:15,920 --> 00:06:20,750 har en slags rang ovenfor 2 og 3, som er høyere enn 4, 5, og 6 og 7, 146 00:06:20,750 --> 00:06:22,860 som er høyere enn 8 og 9. 147 00:06:22,860 --> 00:06:25,210 Så det er alt mener vi med et treet, så du kan bare snill 148 00:06:25,210 --> 00:06:26,660 av bilde dette i hodet ditt. 149 00:06:26,660 --> 00:06:29,050 >> Nå har vi et par mer spesialiserte trær. 150 00:06:29,050 --> 00:06:31,070 Slik at man eksempelvis er et binært tre. 151 00:06:31,070 --> 00:06:33,290 Og et binærtre er, igjen, bare kommer til å være 152 00:06:33,290 --> 00:06:37,040 en datastruktur med en slags hierarki, men hver av nodene 153 00:06:37,040 --> 00:06:38,650 kan ha høyst to barn. 154 00:06:38,650 --> 00:06:41,530 Det er der ordet binære kommer fra. 155 00:06:41,530 --> 00:06:43,410 Slik at dette er et eksempel på et binært tre. 156 00:06:43,410 --> 00:06:45,720 Så det er en mindre kategori av trær. 157 00:06:45,720 --> 00:06:48,960 >> La oss nå få enda mer spesifikk og snakke om binære trees-- binære søk 158 00:06:48,960 --> 00:06:51,310 trær, heller. 159 00:06:51,310 --> 00:06:56,430 Så her ideen er ikke bare gjør hver node har høyst to barn, 160 00:06:56,430 --> 00:07:00,300 men alle barna til venstre kommer til å være mindre 161 00:07:00,300 --> 00:07:03,450 og alle barna til retten kommer til å bli større. 162 00:07:03,450 --> 00:07:05,890 Så varsel bare vår binærtre, det er 163 00:07:05,890 --> 00:07:08,650 ingen sammenheng mellom tallene. 164 00:07:08,650 --> 00:07:12,990 Men i vårt binære søk treet, vi ser, OK, her er 44. 165 00:07:12,990 --> 00:07:17,080 Og hvert nummer til venstre for 44 er mindre og alt til høyre 166 00:07:17,080 --> 00:07:17,920 er større. 167 00:07:17,920 --> 00:07:20,130 >> Og som holder på hver nivå i treet. 168 00:07:20,130 --> 00:07:24,810 Så her, er denne mindre enn 22, og denne er større enn 22. 169 00:07:24,810 --> 00:07:26,390 Og det er binært søketre. 170 00:07:26,390 --> 00:07:28,900 Hvorfor tror vi det heter et binært søketre? 171 00:07:28,900 --> 00:07:30,651 Hva algoritme gjør minner det deg om? 172 00:07:30,651 --> 00:07:31,650 PUBLIKUM: Binary søk. 173 00:07:31,650 --> 00:07:32,480 HANNAH Blumberg: Binary søk. 174 00:07:32,480 --> 00:07:35,150 Fordi hvis du leter etter en bestemt nummer i dette treet, 175 00:07:35,150 --> 00:07:38,800 på hvert punkt, kan du bare banke av halvparten av treet, som er flott. 176 00:07:38,800 --> 00:07:43,800 Og så det kommer til å gi oss noe som ser mye som binære søk. 177 00:07:43,800 --> 00:07:45,870 Noen spørsmål? 178 00:07:45,870 --> 00:07:47,570 Greit, kult. 179 00:07:47,570 --> 00:07:48,560 >> Prøver alt rett. 180 00:07:48,560 --> 00:07:49,657 Alles favoritt. 181 00:07:49,657 --> 00:07:51,990 Så dette er et eksempel på at vi har sett en gjeng i klassen. 182 00:07:51,990 --> 00:07:54,710 Og igjen, dette er bare en annen måte at vi kan lagre data. 183 00:07:54,710 --> 00:07:57,530 I tilfellet med ordbok, igjen, dette er bare kommer til å være strenger. 184 00:07:57,530 --> 00:08:00,870 Så la oss se hva dette faktisk ser ut på et litt lavere nivå. 185 00:08:00,870 --> 00:08:03,690 >> Så la oss ta en titt ved en node i et trie. 186 00:08:03,690 --> 00:08:07,532 Og vi ser, OK, det kommer å være en Boolsk og en node, 187 00:08:07,532 --> 00:08:09,170 en peker til en node. 188 00:08:09,170 --> 00:08:11,400 Og vi ser at Boolsk kalles is_word. 189 00:08:11,400 --> 00:08:13,490 Så egentlig, det er kommer til å tilsvare 190 00:08:13,490 --> 00:08:16,750 til disse små trekanter som sier, hvis du har fått her, 191 00:08:16,750 --> 00:08:19,100 du har funnet en komplett ord. 192 00:08:19,100 --> 00:08:23,670 >> Vi vet at "turing" over her er en komplett ord, 193 00:08:23,670 --> 00:08:28,030 mens bare T-U-R ikke er et ord fordi vi ikke ser den lille delta. 194 00:08:28,030 --> 00:08:31,440 Og det lille delta igjen, tilsvarer dette is_word, 195 00:08:31,440 --> 00:08:34,480 dette boolsk is_word. 196 00:08:34,480 --> 00:08:36,320 Og så har vi en rekke barn. 197 00:08:36,320 --> 00:08:39,860 Så på hvert nivå, du har en bestemt node, 198 00:08:39,860 --> 00:08:42,470 og at knutepunkter til en matrise av hele alfabetet. 199 00:08:42,470 --> 00:08:44,346 >> Så du kan se, igjen, i denne picture-- jeg er 200 00:08:44,346 --> 00:08:48,170 kommer til å holde hoppe tilbake og forth-- at denne matrisen på toppen 201 00:08:48,170 --> 00:08:51,640 har en haug med forskjellige noder som kommer ut av det. 202 00:08:51,640 --> 00:08:57,140 Den har 26, eller 27 hvis du vil til å omfatte en ekstra karakter. 203 00:08:57,140 --> 00:09:01,320 Og dette gir oss en måte å lagre data 204 00:09:01,320 --> 00:09:04,450 på en måte som kan bli sett på at du kan slå opp super rask. 205 00:09:04,450 --> 00:09:06,650 Hva er oppslags tid for en trie? 206 00:09:06,650 --> 00:09:07,970 >> PUBLIKUM: [uhørlig]. 207 00:09:07,970 --> 00:09:08,300 >> HANNAH Blumberg: Yeah. 208 00:09:08,300 --> 00:09:09,550 I teorien er det konstant tid. 209 00:09:09,550 --> 00:09:13,230 Det er bare kommer til å være på størrelse med ordet du vil slå opp. 210 00:09:13,230 --> 00:09:15,950 Selv om vi legger en zillion flere ord til vår trie, 211 00:09:15,950 --> 00:09:18,160 det er ikke til å ta oss lenger for å avgjøre 212 00:09:18,160 --> 00:09:19,690 hvis et gitt ord er i trie. 213 00:09:19,690 --> 00:09:21,412 Så det er veldig fint. 214 00:09:21,412 --> 00:09:23,697 >> PUBLIKUM: Visste du bare initial at array? 215 00:09:23,697 --> 00:09:24,780 Du gikk glipp av et poeng eller to. 216 00:09:24,780 --> 00:09:26,130 Kan du bare snakke om at for en andre? 217 00:09:26,130 --> 00:09:26,680 >> HANNAH Blumberg: Jada, absolutt. 218 00:09:26,680 --> 00:09:27,590 Godt spørsmål. 219 00:09:27,590 --> 00:09:31,140 Spørsmålet var, vi har en matrise som er 220 00:09:31,140 --> 00:09:34,180 nødt til node stjerne som motsetning til bare node, ikke sant? 221 00:09:34,180 --> 00:09:35,180 Kjølig. 222 00:09:35,180 --> 00:09:37,990 Så her er hva vi sier er vår matrise er bare 223 00:09:37,990 --> 00:09:40,035 kommer til å være pekere til andre arrays. 224 00:09:40,035 --> 00:09:42,910 Så det er essentially-- den slags føles som en lenket liste på denne måten 225 00:09:42,910 --> 00:09:46,620 hvor hver av disse barna bare peke til neste node. 226 00:09:46,620 --> 00:09:49,030 >> Og måten vi faktisk bestemme, hey, OK, 227 00:09:49,030 --> 00:09:52,320 vi har iterated gjennom en hel ord, er dette ordet i ordboka, 228 00:09:52,320 --> 00:09:54,476 vi bare sjekke dette is_word. 229 00:09:54,476 --> 00:09:55,100 Stort spørsmål. 230 00:09:55,100 --> 00:09:55,675 Yeah. 231 00:09:55,675 --> 00:09:56,216 PUBLIKUM: OK. 232 00:09:56,216 --> 00:09:57,470 Så hva var runtime for trie? 233 00:09:57,470 --> 00:09:58,386 >> HANNAH Blumberg: Sure. 234 00:09:58,386 --> 00:10:01,852 Så runtime for en trie for lookup kommer til å være konstant tid. 235 00:10:01,852 --> 00:10:04,310 Så det er bare kommer til å være den antall bokstaver i ordet. 236 00:10:04,310 --> 00:10:06,310 Det er ikke avhengig Størrelsen av ordlisten 237 00:10:06,310 --> 00:10:09,510 eller størrelsen på datastrukturen. 238 00:10:09,510 --> 00:10:12,170 Så her er en litt enklere eksempel. 239 00:10:12,170 --> 00:10:15,430 >> I dette tilfellet, kan du se at ordet balltre er i ordlisten 240 00:10:15,430 --> 00:10:18,900 og du har zoom, men du har ikke noe sånt zoo. 241 00:10:18,900 --> 00:10:20,050 Hvordan ville vi lage dyrehage? 242 00:10:20,050 --> 00:10:24,276 Hvordan legger vi zoo til vår ordbok, til vår trie? 243 00:10:24,276 --> 00:10:24,776 Yeah. 244 00:10:24,776 --> 00:10:27,014 >> PUBLIKUM: Gjør is_word sant for [uhørbart]. 245 00:10:27,014 --> 00:10:27,930 HANNAH Blumberg: Good. 246 00:10:27,930 --> 00:10:31,731 Så vi vil si Z-O-O, og da ville vi ønsker å sjekke ut den boksen også. 247 00:10:31,731 --> 00:10:32,230 Flott. 248 00:10:32,230 --> 00:10:35,160 249 00:10:35,160 --> 00:10:37,930 La oss sammenligne svært kort forsøker versus hash tabeller. 250 00:10:37,930 --> 00:10:39,770 Prøver er virkelig flott fordi, som vi sa, 251 00:10:39,770 --> 00:10:41,610 de gir konstant-tid oppslag. 252 00:10:41,610 --> 00:10:44,285 Men den store ulempen er at de er enorme. 253 00:10:44,285 --> 00:10:46,160 Du kan få den forstand, selv ved å se på det, 254 00:10:46,160 --> 00:10:48,454 at det kommer til å ta en enorm mengde minne. 255 00:10:48,454 --> 00:10:50,620 Så de kommer til å være mye større enn hash tabeller, 256 00:10:50,620 --> 00:10:52,270 men de kommer til å gi oss mye raskere oppslags ganger. 257 00:10:52,270 --> 00:10:54,478 Så det er på en måte din kompromisset, hva du bryr deg om, 258 00:10:54,478 --> 00:10:57,350 enten det er fart eller minne. 259 00:10:57,350 --> 00:11:02,251 Eventuelle spørsmål om noe av det, alle de C-datastrukturer. 260 00:11:02,251 --> 00:11:02,750 Vakker. 261 00:11:02,750 --> 00:11:03,250 OK. 262 00:11:03,250 --> 00:11:07,322 Vi kommer til å flytte til en liten litt av webutvikling med Maria. 263 00:11:07,322 --> 00:11:08,280 MARIA ZLATKOVA: Lovely. 264 00:11:08,280 --> 00:11:09,036 OK. 265 00:11:09,036 --> 00:11:10,380 >> HANNAH Blumberg: Du kan bruke min laptop. 266 00:11:10,380 --> 00:11:11,255 >> MARIA ZLATKOVA: Nice. 267 00:11:11,255 --> 00:11:13,320 268 00:11:13,320 --> 00:11:14,912 Ok kult. 269 00:11:14,912 --> 00:11:17,120 Ettersom vi flytter nå til web utvikling, vi snakket litt 270 00:11:17,120 --> 00:11:20,680 om endrede tillatelser av filer og kataloger 271 00:11:20,680 --> 00:11:24,190 slik at de kan være tilgjengelige til andre brukere, til verden, 272 00:11:24,190 --> 00:11:28,640 og slik at vi kan se hvordan utgangspunktet vi kan formidle dem 273 00:11:28,640 --> 00:11:32,600 når vi utvikler ting som nettsteder at vi har stort sett gjort. 274 00:11:32,600 --> 00:11:36,400 >> Så vi så chmod kommandoen, som er endringsmodus, i utgangspunktet. 275 00:11:36,400 --> 00:11:39,300 Det er en Linux-kommando og det endrer tilgangstillatelser 276 00:11:39,300 --> 00:11:40,410 av filsystem stedene. 277 00:11:40,410 --> 00:11:43,370 Og et filsystem objekt er bare en katalog, en fil, 278 00:11:43,370 --> 00:11:46,810 noe som du kan endre rettighetene på. 279 00:11:46,810 --> 00:11:53,750 >> Så for å se filrettigheter, vi skriver kommandoen ls, en liste -l. 280 00:11:53,750 --> 00:11:56,500 Og når vi skriver at vi vanligvis ser noen tillatelser 281 00:11:56,500 --> 00:11:59,660 som ser liksom som dette foran et katalognavn. 282 00:11:59,660 --> 00:12:01,260 Så d refererer til katalogen. 283 00:12:01,260 --> 00:12:05,930 Og så har vi tre triader som i utgangspunktet 284 00:12:05,930 --> 00:12:11,675 refererer til de tillatelsene til enten en bruker, en gruppe, eller hele verden. 285 00:12:11,675 --> 00:12:16,490 >> De typer tillatelser som vi kan har for disse tre grupper av mennesker 286 00:12:16,490 --> 00:12:20,830 er enten r for lese, w for skrive, og x for å gjennomføre. 287 00:12:20,830 --> 00:12:23,650 Og vi kan ha dem for gruppen og verden også. 288 00:12:23,650 --> 00:12:26,940 Den vanskelige ting er at noen ganger når vi skriver chmod kommandoen, 289 00:12:26,940 --> 00:12:32,960 vi ville skrive noen nummer som besto av tre bits. 290 00:12:32,960 --> 00:12:36,990 Slik at vi kunne gjøre som 777 og som i utgangspunktet 291 00:12:36,990 --> 00:12:40,450 henvist til merverdi av hver av disse treklanger 292 00:12:40,450 --> 00:12:45,060 fordi r vil vise til fire, ville w henvise til 2, og x vil henvise til en, 293 00:12:45,060 --> 00:12:50,020 slik at når det legges opp, hvert av numrene ville komme ned til en kumulativ nummer 294 00:12:50,020 --> 00:12:52,750 til en kumulativ verdi mellom 0 og 7. 295 00:12:52,750 --> 00:12:55,150 Så kunne vi også ha 0 for ingen tillatelser i det hele tatt. 296 00:12:55,150 --> 00:12:58,200 Og det ville i utgangspunktet gi oss tillatelsene for enten brukeren, 297 00:12:58,200 --> 00:13:00,450 gruppen, eller verden. 298 00:13:00,450 --> 00:13:02,620 Eventuelle spørsmål om dette så langt? 299 00:13:02,620 --> 00:13:05,331 >> PUBLIKUM: Du sa leste var fire? 300 00:13:05,331 --> 00:13:06,164 MARIA ZLATKOVA: Ja. 301 00:13:06,164 --> 00:13:07,568 PUBLIKUM: [uhørlig]. 302 00:13:07,568 --> 00:13:08,504 HANNAH Blumberg: Yup. 303 00:13:08,504 --> 00:13:11,790 PUBLIKUM: Og så ved å legge alle dem andre ville indikere nummeret ditt. 304 00:13:11,790 --> 00:13:12,665 MARIA ZLATKOVA: Yeah. 305 00:13:12,665 --> 00:13:14,970 Yeah. 306 00:13:14,970 --> 00:13:17,810 Dette er store spørsmål. 307 00:13:17,810 --> 00:13:20,490 Deilig. 308 00:13:20,490 --> 00:13:25,340 Deretter hoppet vi inn i HTML og et litt mer om webutvikling. 309 00:13:25,340 --> 00:13:27,990 Så HTML betyr bare Hypertext Markup Language. 310 00:13:27,990 --> 00:13:30,460 Og det er markup språk som er en standard 311 00:13:30,460 --> 00:13:32,720 at det er brukt til å lage websider. 312 00:13:32,720 --> 00:13:35,750 >> Det kalles et kodespråk fordi det er faktisk ikke utarbeidet. 313 00:13:35,750 --> 00:13:40,310 Det sier ikke hvordan noen kode skal bli henrettet eller noe sånt. 314 00:13:40,310 --> 00:13:44,800 Det avtegner bare og beskriver hvordan en web 315 00:13:44,800 --> 00:13:46,840 side bør settes opp med hver av dens elementer 316 00:13:46,840 --> 00:13:48,460 og hvordan de skal se ut for brukeren. 317 00:13:48,460 --> 00:13:53,090 318 00:13:53,090 --> 00:13:57,110 >> Noen av HTML-koder som vi gikk over er følgende. 319 00:13:57,110 --> 00:14:00,500 Alle våre HTML-dokumenter startet med DOCTYPE html. 320 00:14:00,500 --> 00:14:02,550 Så vi har alltid html tag. 321 00:14:02,550 --> 00:14:03,930 Vi har et hode og en kropp. 322 00:14:03,930 --> 00:14:07,890 Og det er viktig at HTML har denne typen nestet struktur 323 00:14:07,890 --> 00:14:09,280 fordi det er helt klart. 324 00:14:09,280 --> 00:14:13,200 Og så blir det veldig tydelig når vi trenger å åpne og faktisk nære koder. 325 00:14:13,200 --> 00:14:18,400 Og vi trenger alltid å lukke koder som vi har åpnet. 326 00:14:18,400 --> 00:14:23,170 >> Og her har vi noen av de typer ting fremover som vi ønsker å ha. 327 00:14:23,170 --> 00:14:26,580 Så vi har, for eksempel, tittelen CS50. 328 00:14:26,580 --> 00:14:31,980 Og da er vi faktisk kan knytte et stilark 329 00:14:31,980 --> 00:14:34,030 som definerer hvordan vi style våre nettsider. 330 00:14:34,030 --> 00:14:35,650 Det er CSS. 331 00:14:35,650 --> 00:14:39,320 Vi kommer til å gå over det i neste par lysbilder også. 332 00:14:39,320 --> 00:14:42,580 >> I kroppen, setter vi noen klasser og IDer. 333 00:14:42,580 --> 00:14:45,860 Og som en påminnelse, igjen, IDer er unike og klasser 334 00:14:45,860 --> 00:14:47,390 kan tildeles flere elementer. 335 00:14:47,390 --> 00:14:52,110 Og det betyr bare at vi kan bruke klasser og IDer 336 00:14:52,110 --> 00:14:55,860 innenfor andre structures-- så, for eksempel innen CSS-filer eller stil 337 00:14:55,860 --> 00:15:00,940 sheets-- å referere til bestemte elementer og i utgangspunktet si at vi ønsker å style 338 00:15:00,940 --> 00:15:03,280 eller lage noen element på noen bestemt måte. 339 00:15:03,280 --> 00:15:06,440 Og vi referere til dem ved å sine IDer og klasser. 340 00:15:06,440 --> 00:15:09,870 Og vi kan også henvise til forskjellige ting etter koder også, 341 00:15:09,870 --> 00:15:13,830 men IDer og klasser bare gi oss noen allsidighet og hva som konkret vi 342 00:15:13,830 --> 00:15:15,850 ønsker å referere til. 343 00:15:15,850 --> 00:15:19,620 >> Så bare et eksempel. 344 00:15:19,620 --> 00:15:22,730 Vi kan, igjen, innen en CSS-fil hvor vi 345 00:15:22,730 --> 00:15:25,770 ønsker å definere noen style-- så farger, fonter, 346 00:15:25,770 --> 00:15:30,340 og sånn at-- vi kan definere stilen for en kropp. 347 00:15:30,340 --> 00:15:32,640 Så det ville definere det for hele kroppen tag. 348 00:15:32,640 --> 00:15:36,160 Men da kan vi også definere en stil for en #title. 349 00:15:36,160 --> 00:15:40,390 Og igjen, refererer hashtag til vår ID og dot refererer til klassen vår. 350 00:15:40,390 --> 00:15:44,760 >> Og deretter for de .info, vi kan også stille noen attributter. 351 00:15:44,760 --> 00:15:49,750 Og igjen, når vi går tilbake, hadde vi vår klasse kalt info og vår ID tittel. 352 00:15:49,750 --> 00:15:53,422 Og vi kan se at vi referere til dem ved #title og .info. 353 00:15:53,422 --> 00:15:55,380 PUBLIKUM: Vil du si hashtag [? adoptere meg? ?] 354 00:15:55,380 --> 00:15:55,725 MARIA ZLATKOVA: Sorry? 355 00:15:55,725 --> 00:15:58,120 PUBLIKUM: Vil du si hashtag [? adoptere meg? ?] 356 00:15:58,120 --> 00:16:01,400 MARIA ZLATKOVA: Hashtag betyr ID, så #title 357 00:16:01,400 --> 00:16:07,890 refererer til uansett elementer har denne ID kalles tittelen. 358 00:16:07,890 --> 00:16:10,735 Og deretter dot refererer til en klasse. 359 00:16:10,735 --> 00:16:14,590 Så .info refererer til dette elementet fordi den har klassen info. 360 00:16:14,590 --> 00:16:15,090 Jepp. 361 00:16:15,090 --> 00:16:17,905 >> PUBLIKUM: Hvorfor gjør du skille dem i HTML? 362 00:16:17,905 --> 00:16:20,985 Hvorfor sier du visse ting er IDer og visse ting er klasse? 363 00:16:20,985 --> 00:16:22,610 MARIA ZLATKOVA: Det er bare opp til you-- 364 00:16:22,610 --> 00:16:24,151 HANNAH Blumberg: Gjenta spørsmålet. 365 00:16:24,151 --> 00:16:25,370 MARIA ZLATKOVA: Oh, sorry. 366 00:16:25,370 --> 00:16:29,480 Hvorfor skiller vi gjør visse elementer som IDer og andre elementer som klasser? 367 00:16:29,480 --> 00:16:34,760 Det er bare fordi det er virkelig ofte et designvalg. 368 00:16:34,760 --> 00:16:38,520 Det gir deg mye allsidighet i å være 369 00:16:38,520 --> 00:16:43,250 i stand til å si at jeg vil ha dette bestemt element å ha dette ID fordi de ønsker 370 00:16:43,250 --> 00:16:45,300 til å gjøre en rekke ting med det, og jeg bare 371 00:16:45,300 --> 00:16:50,010 ønsker å definere en stil, viss stil eller farge uansett for det elementet. 372 00:16:50,010 --> 00:16:52,630 Og den måten å gjøre det er bare å gi det en ID. 373 00:16:52,630 --> 00:16:55,060 >> Og så hvis jeg vil ha et par forskjellige elementer 374 00:16:55,060 --> 00:16:58,940 har det, i stedet for gå og sette their-- 375 00:16:58,940 --> 00:17:03,840 stedet for å gjøre det ved å tag fordi tag ville 376 00:17:03,840 --> 00:17:07,369 setter cellen for hele tag for hver gang den koden er brukt, 377 00:17:07,369 --> 00:17:09,740 du kan sette en klasse til flere elementer. 378 00:17:09,740 --> 00:17:15,109 Og så bare få tilgang til den klassen og si Jeg ønsker å style denne klassen på den måten. 379 00:17:15,109 --> 00:17:17,579 >> Og igjen, klassen kan være flere ulike elementer 380 00:17:17,579 --> 00:17:21,150 og ID må være unik. 381 00:17:21,150 --> 00:17:21,849 Store spørsmål. 382 00:17:21,849 --> 00:17:25,339 Eventuelle andre spørsmål? 383 00:17:25,339 --> 00:17:26,220 OK, awesome. 384 00:17:26,220 --> 00:17:30,680 385 00:17:30,680 --> 00:17:35,330 Igjen, dette er hvordan disse velgere refereres til i CSS, med hashtag, 386 00:17:35,330 --> 00:17:40,031 med prikk, eller uten noe for tildele stilen av noen tag, 387 00:17:40,031 --> 00:17:40,530 som kroppen. 388 00:17:40,530 --> 00:17:43,500 389 00:17:43,500 --> 00:17:47,860 Og her har vi den generelle Syntaksen for hvordan dette gjøres. 390 00:17:47,860 --> 00:17:52,830 391 00:17:52,830 --> 00:17:55,680 >> For å gjenta noen beste praksis for HTML og CSS, 392 00:17:55,680 --> 00:17:59,170 vi må, igjen, lukk alle HTML-kodene som vi kan åpnes. 393 00:17:59,170 --> 00:18:03,950 Og hva vi anbefalte deg gjøre for din endelige prosjekter, 394 00:18:03,950 --> 00:18:10,560 så vel som for CS50 økonomi, er å gjøre sørge for at alle HTML validerer. 395 00:18:10,560 --> 00:18:12,920 Og det er gjort med W3 Validator. 396 00:18:12,920 --> 00:18:16,940 >> Og så hva vi gjorde og hva vi anbefale å gjøre 397 00:18:16,940 --> 00:18:19,790 er å skille stil, så CSS fra markup HTML. 398 00:18:19,790 --> 00:18:24,210 Så alt som er relatert til hvordan siden din kommer til å visuelt se 399 00:18:24,210 --> 00:18:27,330 og hvordan det kommer til å bli endret bør gå inn i et CSS-dokument. 400 00:18:27,330 --> 00:18:33,880 Og deretter din markup si hvordan ting er i forhold til hverandre er HTML, 401 00:18:33,880 --> 00:18:37,550 og som bør gå inn av HTML-dokumenter. 402 00:18:37,550 --> 00:18:38,590 Noen spørsmål? 403 00:18:38,590 --> 00:18:39,226 Mhm. 404 00:18:39,226 --> 00:18:42,628 >> PUBLIKUM: Hva kommer på med siden validering 405 00:18:42,628 --> 00:18:47,945 når vi validere HTML at [uhørbart] skapt? 406 00:18:47,945 --> 00:18:49,850 >> MARIA ZLATKOVA: Så what-- tenke deg. 407 00:18:49,850 --> 00:18:53,020 Så hva som skjer på med siden validering 408 00:18:53,020 --> 00:18:55,570 og hvorfor trenger vi å gjøre det? 409 00:18:55,570 --> 00:18:59,180 I utgangspunktet må vi gjøre det fordi en rekke ganger, nettleseren din, 410 00:18:59,180 --> 00:19:01,390 hvis du ikke lukke en tag eller noe sånt, 411 00:19:01,390 --> 00:19:05,680 Nettleseren din er fortsatt kommer til å gjengi en side og kan fortsatt fungere, 412 00:19:05,680 --> 00:19:10,840 men det er best praksis å sørge for at du har, igjen, lukket alle kodene, 413 00:19:10,840 --> 00:19:13,190 at alle elementene er den måten at de bør være, 414 00:19:13,190 --> 00:19:18,470 og i utgangspunktet at det er av konvensjoner som er forhåndsinnstilt. 415 00:19:18,470 --> 00:19:21,970 >> Det er, igjen, bare en ting som du bør 416 00:19:21,970 --> 00:19:24,040 skal lære å gjøre, i motsetning til å måtte 417 00:19:24,040 --> 00:19:25,696 sloppier kode og sånt. 418 00:19:25,696 --> 00:19:26,688 Yeah. 419 00:19:26,688 --> 00:19:27,680 Åh unnskyld. 420 00:19:27,680 --> 00:19:29,221 Jeg trodde du var å heve hånden. 421 00:19:29,221 --> 00:19:31,240 PUBLIKUM: Nei, jeg var bare [uhørbart]. 422 00:19:31,240 --> 00:19:33,800 >> MARIA ZLATKOVA: OK. 423 00:19:33,800 --> 00:19:34,640 >> PUBLIKUM: Takk. 424 00:19:34,640 --> 00:19:36,181 >> MARIA ZLATKOVA: Selvfølgelig, takk. 425 00:19:36,181 --> 00:19:41,680 Så igjen, skjer i hvordan informasjon overføres 426 00:19:41,680 --> 00:19:44,630 og kommunikasjonsmodeller å overføre informasjon. 427 00:19:44,630 --> 00:19:45,730 TCP / IP. 428 00:19:45,730 --> 00:19:48,600 TCP betyr bare Transmission Control Protocol og IP 429 00:19:48,600 --> 00:19:51,260 refererer til Internet Protocol. 430 00:19:51,260 --> 00:19:54,275 Og som bare refererer til måten data er levert. 431 00:19:54,275 --> 00:19:59,470 432 00:19:59,470 --> 00:20:02,710 >> Hvis vi har noen data som må leveres til you-- så 433 00:20:02,710 --> 00:20:06,770 du gjør en anmodning om en bestemt server. 434 00:20:06,770 --> 00:20:09,800 For eksempel når vi prøver å få tilgang cs50.net, 435 00:20:09,800 --> 00:20:12,420 vi gjør en forespørsel til den CS50 server og vi 436 00:20:12,420 --> 00:20:14,720 se at vi ønsker å få denne typen informasjon. 437 00:20:14,720 --> 00:20:19,294 Og så er basert på denne protokollen for hvordan denne informasjonen blir levert, 438 00:20:19,294 --> 00:20:21,460 serveren gir informasjon tilbake til oss, klienten. 439 00:20:21,460 --> 00:20:25,590 Og da er vi i stand til å se informasjonen for siden 440 00:20:25,590 --> 00:20:26,390 og deretter bruke den. 441 00:20:26,390 --> 00:20:29,300 442 00:20:29,300 --> 00:20:33,050 >> Så da Hypertext Transfer Protocol er bare en annen protokoll eller angi 443 00:20:33,050 --> 00:20:37,470 av konvensjoner som definerer hvordan nettleseren og webserveren 444 00:20:37,470 --> 00:20:38,890 bør kommunisere. 445 00:20:38,890 --> 00:20:43,730 Og sette dette alt sammen, HTTP, igjen, 446 00:20:43,730 --> 00:20:50,960 bare definerer hvordan dette hyper definert av HTML som vi har jobbet det, 447 00:20:50,960 --> 00:20:59,500 hvordan det skal bli levert til deg og hvordan dataene som leveres til deg 448 00:20:59,500 --> 00:21:00,540 kommer til deg. 449 00:21:00,540 --> 00:21:05,990 >> Og det er derfor, hvis dere husker fra en klasse, hadde vi mange forespørsler 450 00:21:05,990 --> 00:21:08,970 og vi hadde mye syntaks for disse forespørslene som vi er 451 00:21:08,970 --> 00:21:10,250 kommer til å gå over akkurat nå. 452 00:21:10,250 --> 00:21:13,270 Så igjen, når vi sender en anmodning til en server, 453 00:21:13,270 --> 00:21:15,920 vi må definere et par ting. 454 00:21:15,920 --> 00:21:18,520 Så vi trenger å finne den typen forespørsel som vi innstillingen. 455 00:21:18,520 --> 00:21:22,180 Og igjen, har vi, for eksempel, GET er en type metode 456 00:21:22,180 --> 00:21:25,290 som vi har i vår forespørsel. 457 00:21:25,290 --> 00:21:31,710 >> Og deretter HTTP / 1.1 er bare protokoll som vi bruker i dag. 458 00:21:31,710 --> 00:21:34,224 459 00:21:34,224 --> 00:21:36,890 Mesteparten av tiden, er at å gå til protokollen som vi bruker. 460 00:21:36,890 --> 00:21:40,290 Så hvis du har et spørsmål sånn på quiz. 461 00:21:40,290 --> 00:21:43,120 Det er konvensjonene at vi har så langt. 462 00:21:43,120 --> 00:21:46,580 >> Backslash refererer til hva slags av tingene vi ber om. 463 00:21:46,580 --> 00:21:52,810 Deretter, er vår vert, for eksempel i denne tilfellet, prøver vi å gå til google.com. 464 00:21:52,810 --> 00:21:57,070 Så dette er verdien for en vert. 465 00:21:57,070 --> 00:21:59,330 Dette er en form for forespørsel som kan bli sendt. 466 00:21:59,330 --> 00:22:02,890 >> Og så en type respons som kunne sendes, igjen, basert på denne protokollen, 467 00:22:02,890 --> 00:22:05,190 er igjen, HTTP / 1.1. 468 00:22:05,190 --> 00:22:07,150 Så det er HTTP-versjonen igjen. 469 00:22:07,150 --> 00:22:09,730 200 OK er bare statuskoden. 470 00:22:09,730 --> 00:22:12,860 Og det OK er bare en frase basert på at statuskode. 471 00:22:12,860 --> 00:22:15,520 >> Og så Content-Type henviser til den typen 472 00:22:15,520 --> 00:22:20,295 som er returnert til deg som er for at web-side som du mottar 473 00:22:20,295 --> 00:22:22,570 og at nettleseren kan gjengi etterpå. 474 00:22:22,570 --> 00:22:24,401 Og det er text / html. 475 00:22:24,401 --> 00:22:26,660 >> PUBLIKUM: Hva betyr 1,1 bety? 476 00:22:26,660 --> 00:22:29,910 >> MARIA ZLATKOVA: Det er bare versjon of-- oh, hva betyr 1,1 bety? 477 00:22:29,910 --> 00:22:37,075 Det er bare den versjonen, HTTP versjon av en protokoll som vi bruker. 478 00:22:37,075 --> 00:22:37,700 Stort spørsmål. 479 00:22:37,700 --> 00:22:38,366 Andre spørsmål? 480 00:22:38,366 --> 00:22:41,222 481 00:22:41,222 --> 00:22:45,080 >> PUBLIKUM: Kan du oppsummere Content-Type virkelig rask? 482 00:22:45,080 --> 00:22:48,150 >> MARIA ZLATKOVA: Slik at er hva serveren. 483 00:22:48,150 --> 00:22:51,020 den type information-- hva som er innholdstype var spørsmålene. 484 00:22:51,020 --> 00:22:53,400 Så det var typen informasjon som du får tilbake 485 00:22:53,400 --> 00:22:58,200 fra serveren, typen data at nettleseren kan deretter 486 00:22:58,200 --> 00:23:00,604 gjengi at du bruker. 487 00:23:00,604 --> 00:23:03,020 PUBLIKUM: Er det det dette protokollen er å fortelle deg å gjøre? 488 00:23:03,020 --> 00:23:03,390 MARIA ZLATKOVA: Sorry? 489 00:23:03,390 --> 00:23:05,380 PUBLIKUM: Er det det protokollen si? 490 00:23:05,380 --> 00:23:05,915 MARIA ZLATKOVA: The protocol-- 491 00:23:05,915 --> 00:23:07,940 PUBLIKUM: --hva den Content-Type er eller what-- 492 00:23:07,940 --> 00:23:12,040 MARIA ZLATKOVA: Protokollen er basert on-- hva er protokollen forteller deg? 493 00:23:12,040 --> 00:23:16,070 Det er bare slik at denne informasjonen 494 00:23:16,070 --> 00:23:18,610 ble levert til deg basert på hva slags protokoll 495 00:23:18,610 --> 00:23:21,830 ble denne informasjonen fikk levert tilbake til deg. 496 00:23:21,830 --> 00:23:23,500 Betyr det fornuftig liksom? 497 00:23:23,500 --> 00:23:28,320 498 00:23:28,320 --> 00:23:30,070 HANNAH Blumberg: Du kan tenke på protokollen 499 00:23:30,070 --> 00:23:33,300 som a-- jeg tror Professor Malan beskrev det 500 00:23:33,300 --> 00:23:36,910 i klassen som typen som a-- det er som tilsvarende menneskelig handshaking. 501 00:23:36,910 --> 00:23:44,930 Si, som, hei, jeg er en forespørsel, og jeg vet hvordan de skal håndtere HTTP av versjon 1.1. 502 00:23:44,930 --> 00:23:48,770 Og deretter serveren sier, oh, OK, I-- og begge finnes. 503 00:23:48,770 --> 00:23:51,337 Jeg vet også hvordan man skal håndtere HTTP / 1.1. 504 00:23:51,337 --> 00:23:53,170 Og jeg kommer til å gi du sikkerhets noe av innholdet. 505 00:23:53,170 --> 00:23:56,230 I dette tilfellet vil det å være av typen text / html. 506 00:23:56,230 --> 00:23:58,480 Så det er på en måte bare en måte av dem for communicating-- 507 00:23:58,480 --> 00:24:00,480 >> MARIA ZLATKOVA: Det er bare som bekrefter at du er 508 00:24:00,480 --> 00:24:03,290 både å følge den samme protokoll og at både 509 00:24:03,290 --> 00:24:06,620 klienten og server-- så nettleseren din og server-- 510 00:24:06,620 --> 00:24:09,280 vet liksom hva du er snakker om og har 511 00:24:09,280 --> 00:24:12,557 konvensjonen for bestått i data. 512 00:24:12,557 --> 00:24:17,022 >> PUBLIKUM: Så Content-Type part-- Content-Type tekst / er html-- at 513 00:24:17,022 --> 00:24:18,521 en egen del av den samme meldingen? 514 00:24:18,521 --> 00:24:20,509 Eller er det en del av la oss si, 200? 515 00:24:20,509 --> 00:24:22,010 Betyr 200 fortelle dem det, eller er-- 516 00:24:22,010 --> 00:24:23,770 >> MARIA ZLATKOVA: 200 sier alt gikk OK. 517 00:24:23,770 --> 00:24:27,900 Og så innholdstype er liksom en egen del av den samme meldingen, 518 00:24:27,900 --> 00:24:34,274 og sier ting som jeg Returnerte har denne typen text / html. 519 00:24:34,274 --> 00:24:35,690 Det er bare å gi mer informasjon. 520 00:24:35,690 --> 00:24:38,700 521 00:24:38,700 --> 00:24:39,995 Har noe å legge til? 522 00:24:39,995 --> 00:24:40,495 OK. 523 00:24:40,495 --> 00:24:43,590 524 00:24:43,590 --> 00:24:46,530 >> Eventuelle andre spørsmål om dette? 525 00:24:46,530 --> 00:24:48,370 Awesome. 526 00:24:48,370 --> 00:24:54,070 Så noen andre HTTP statuser som vi kunne få i tillegg til 200 OK, 527 00:24:54,070 --> 00:24:59,500 de som vi har sett kanskje muligens mye er 403 og 404. 528 00:24:59,500 --> 00:25:05,190 Så 404, hvis du prøvde å tilgang noe som ikke eksisterer. 529 00:25:05,190 --> 00:25:10,460 Så for eksempel i ditt CS50 Finans psets, 530 00:25:10,460 --> 00:25:15,640 hvis du hadde vært rende quote.html og du ikke har denne filen, 531 00:25:15,640 --> 00:25:19,740 men i stedet du hadde quote.php, som ville resultere i en 404 Not Found 532 00:25:19,740 --> 00:25:21,600 fordi filen kanskje ikke eksisterer. 533 00:25:21,600 --> 00:25:25,690 >> For en 403 forbudt, at refererer til de tillatelser. 534 00:25:25,690 --> 00:25:31,150 Så hvis noen filen ikke kan leses av verden, kan du få en 403 returnert. 535 00:25:31,150 --> 00:25:34,510 536 00:25:34,510 --> 00:25:37,810 Noen andre som du kanskje get-- 301, flyttet permanent; 537 00:25:37,810 --> 00:25:41,300 302, Funnet; 304, Modifisert; 400, Bad Request; 538 00:25:41,300 --> 00:25:47,330 og deretter Internal Server Error for 500 og 503, Tjenesten er utilgjengelig. 539 00:25:47,330 --> 00:25:48,140 Ja. 540 00:25:48,140 --> 00:25:51,490 >> PUBLIKUM: Vil vi forventet å memorere alle disse statuser? 541 00:25:51,490 --> 00:25:53,739 MARIA ZLATKOVA: Jeg ville ha dem på jukselapp. 542 00:25:53,739 --> 00:25:55,146 [LATTER] 543 00:25:55,146 --> 00:25:59,954 PUBLIKUM: Er vi forventet å vet hva som utløser hver av dem? 544 00:25:59,954 --> 00:26:00,995 MARIA ZLATKOVA: Er de? 545 00:26:00,995 --> 00:26:03,870 HANNAH Blumberg: For de som vi har kjøre into-- så spørsmålet var-- 546 00:26:03,870 --> 00:26:08,010 MARIA ZLATKOVA: Er de forventes å vet hva hver enkelt av disse status 547 00:26:08,010 --> 00:26:09,330 koder kan utløses av? 548 00:26:09,330 --> 00:26:13,240 Så for de som vi har brukt og kjørte inn i, vil jeg si, ja. 549 00:26:13,240 --> 00:26:16,610 Så vi har definitivt sett 200 OK og foreleste den i psets. 550 00:26:16,610 --> 00:26:19,071 Vi har sett 403, 404. 551 00:26:19,071 --> 00:26:20,550 For andre? 552 00:26:20,550 --> 00:26:22,690 >> HANNAH Blumberg: Jeg ville si 500 virker rettferdig spill. 553 00:26:22,690 --> 00:26:23,330 >> MARIA ZLATKOVA: 500, ja. 554 00:26:23,330 --> 00:26:24,246 >> HANNAH Blumberg: Yeah. 555 00:26:24,246 --> 00:26:27,006 Bare ta en generell følelse av hva som forårsaker dem. 556 00:26:27,006 --> 00:26:28,880 Og også bare ved disse navn, kan du på en måte 557 00:26:28,880 --> 00:26:32,890 som gjør en kvalifisert gjetning til hva som faktisk forårsaket dem. 558 00:26:32,890 --> 00:26:36,919 For eksempel flytte permanent, sannsynligvis filen ble flyttet permanent. 559 00:26:36,919 --> 00:26:39,328 >> PUBLIKUM: Men på en tidligere undersøkelse, var det en så 560 00:26:39,328 --> 00:26:41,050 hvordan kan du forvente oss å svare på det? 561 00:26:41,050 --> 00:26:42,883 >> HANNAH Blumberg: That var verdt null poeng. 562 00:26:42,883 --> 00:26:45,870 Spørsmålet om 418 på tekanne er teknisk sett en HTTP status, 563 00:26:45,870 --> 00:26:47,090 men det var verdt null poeng. 564 00:26:47,090 --> 00:26:48,320 Selvfølgelig, er du ikke forventes å kjenne dem. 565 00:26:48,320 --> 00:26:49,670 >> PUBLIKUM: Er det en ekte en? 566 00:26:49,670 --> 00:26:51,970 >> HANNAH Blumberg: Det er en reell en, men det betyr ikke noe. 567 00:26:51,970 --> 00:26:52,700 Det er bare en spøk. 568 00:26:52,700 --> 00:26:55,480 569 00:26:55,480 --> 00:26:57,010 Internett folk er morsomme. 570 00:26:57,010 --> 00:26:59,680 >> MARIA ZLATKOVA: Flotte spørsmål, folkens. 571 00:26:59,680 --> 00:27:01,452 Eventuelle andre spørsmål? 572 00:27:01,452 --> 00:27:04,891 >> PUBLIKUM: Hva er intern serverfeil? 573 00:27:04,891 --> 00:27:06,640 MARIA ZLATKOVA: Intern serverfeil bare 574 00:27:06,640 --> 00:27:10,050 betyr at du har vært ute av stand til å kommunisere 575 00:27:10,050 --> 00:27:13,400 med serveren for noen grunn. 576 00:27:13,400 --> 00:27:15,400 Så det er ikke nødvendigvis noe som har å gjøre 577 00:27:15,400 --> 00:27:19,170 med klienten eller noe sånt. 578 00:27:19,170 --> 00:27:22,170 Jeg vet ikke om noen konkret eksempel at vi har gått over til å forklare, 579 00:27:22,170 --> 00:27:23,000 men ja. 580 00:27:23,000 --> 00:27:23,250 >> HANNAH Blumberg: Sure. 581 00:27:23,250 --> 00:27:25,625 Så for eksempel, som la oss si at du jobber på mashup 582 00:27:25,625 --> 00:27:30,440 og en Google server gikk ned for noen Derfor et strømbrudd, la oss si. 583 00:27:30,440 --> 00:27:33,400 Det ville være en intern server feil eller en slags of-- liker deg 584 00:27:33,400 --> 00:27:34,630 ville ikke få et svar tilbake. 585 00:27:34,630 --> 00:27:35,260 >> MARIA ZLATKOVA: Yeah. 586 00:27:35,260 --> 00:27:37,050 Det er bare når du er ute av stand til å kommunisere 587 00:27:37,050 --> 00:27:40,299 med serveren eller annen grunn fordi av den går ned eller en annen grunn. 588 00:27:40,299 --> 00:27:44,430 589 00:27:44,430 --> 00:27:47,690 Så hoppe inn i PHP. 590 00:27:47,690 --> 00:27:49,930 PHP, i motsetning til HTML, er en programmeringsspråk. 591 00:27:49,930 --> 00:27:54,820 Og vi begynte å bruke det fordi det er svært nyttig for webutvikling. 592 00:27:54,820 --> 00:27:56,940 >> Vi først brukt det i CS50 Finance. 593 00:27:56,940 --> 00:28:02,240 Og det i utgangspunktet hjelper oss med å bringe sammen denne markeringen, design, 594 00:28:02,240 --> 00:28:07,460 og hvordan vi faktisk bruker informasjon å vise ting på en nettside. 595 00:28:07,460 --> 00:28:11,870 Så PHP seg selv betyr PHP Hypertext Preprocessor, 596 00:28:11,870 --> 00:28:15,360 så det er en rekursiv backnorym av seg selv. 597 00:28:15,360 --> 00:28:22,330 Og åpne koder for PHP vi venstre og høyre piltast med spørsmålstegnene 598 00:28:22,330 --> 00:28:23,060 og php. 599 00:28:23,060 --> 00:28:25,890 >> Så vi har allerede sett en haug av det. 600 00:28:25,890 --> 00:28:29,150 Nå er vi bare nødt til å gå over noen av de grunnleggende ting om det. 601 00:28:29,150 --> 00:28:32,280 Så med PHP, variabelen navn som begynner med dollartegn. 602 00:28:32,280 --> 00:28:35,660 Vi vil ikke spesifisere, igjen, en variabel skriver lenger. 603 00:28:35,660 --> 00:28:38,450 Akkurat som vi gjorde med C, vi trenger ikke å gjøre det. 604 00:28:38,450 --> 00:28:41,670 605 00:28:41,670 --> 00:28:44,490 >> Vi kan gjøre en haug med forskjellige ting med variabler. 606 00:28:44,490 --> 00:28:47,750 Vi kan sette dem sammen ved å lenke sammen dem 607 00:28:47,750 --> 00:28:52,900 med dot notasjon, som Vi kunne ikke gjøre i C igjen. 608 00:28:52,900 --> 00:28:57,490 Igjen har vi en litt mer allsidighet med PHP i form av variabler. 609 00:28:57,490 --> 00:29:00,080 Igjen, har vi ikke en hovedfunksjon. 610 00:29:00,080 --> 00:29:03,370 >> Og PHP er tolket i motsetning til kompilert, 611 00:29:03,370 --> 00:29:09,970 Så bare hvordan vi gjorde for C-filer, vi trenger ikke å gjøre det for PHP. 612 00:29:09,970 --> 00:29:15,440 Men heller, slik at språket drives av seg selv, blir det tolket. 613 00:29:15,440 --> 00:29:18,550 Og så løst skrevet betyr bare at vi 614 00:29:18,550 --> 00:29:22,490 trenger ikke å angi en variabel type og de variable typer 615 00:29:22,490 --> 00:29:25,415 forstås under kjøring. 616 00:29:25,415 --> 00:29:29,185 >> PUBLIKUM: Men hva gjorde du mener med dot sammensetning? 617 00:29:29,185 --> 00:29:30,060 MARIA ZLATKOVA: Sure. 618 00:29:30,060 --> 00:29:37,660 Når vi ønsker å sette ting together-- så hvis vi hadde noen variabel som 619 00:29:37,660 --> 00:29:41,500 hadde verdien av tre, og vi hadde en annen variabel som hadde verdien av strengen, 620 00:29:41,500 --> 00:29:45,920 vi kunne sette variablene sammen ved å sette et punktum i mellom dem 621 00:29:45,920 --> 00:29:46,970 og sette sammen dem. 622 00:29:46,970 --> 00:29:52,670 Eller vi kunne skape en variabel kalt navn 623 00:29:52,670 --> 00:29:56,900 og sette det sammen med lenke sammen to strenger. 624 00:29:56,900 --> 00:30:00,680 >> Så hvis vi hadde en streng i dobbel sitater og vi setter en prikk etter det, 625 00:30:00,680 --> 00:30:03,660 og da vi hadde en annen streng, at ville skape en streng helt. 626 00:30:03,660 --> 00:30:05,242 >> PUBLIKUM: OK. 627 00:30:05,242 --> 00:30:06,450 MARIA LATVIA: Var det fjerne? 628 00:30:06,450 --> 00:30:07,099 PUBLIKUM: Yeah. 629 00:30:07,099 --> 00:30:07,890 MARIA ZLATKOVA: OK. 630 00:30:07,890 --> 00:30:08,766 Ja. 631 00:30:08,766 --> 00:30:11,146 >> PUBLIKUM: Når du sier tolket heller enn kompilert, 632 00:30:11,146 --> 00:30:14,160 snakker du om du ikke gjør det trenger å være så konkret når 633 00:30:14,160 --> 00:30:15,906 det kommer til PHP versus C? 634 00:30:15,906 --> 00:30:18,085 635 00:30:18,085 --> 00:30:20,710 MARIA ZLATKOVA: Når vi sier tolket i motsetning til kompilert, 636 00:30:20,710 --> 00:30:21,850 hva mener vi? 637 00:30:21,850 --> 00:30:26,220 Så det betyr at vi ikke trenger kjørbare filer for å kjøre PHP. 638 00:30:26,220 --> 00:30:29,870 Det betyr at det går som det går. 639 00:30:29,870 --> 00:30:31,650 Gir det mening? 640 00:30:31,650 --> 00:30:32,495 Litt mer. 641 00:30:32,495 --> 00:30:34,620 HANNAH Blumberg: Så du kan tenke på tolk 642 00:30:34,620 --> 00:30:38,980 som et annet program som er ansvarlig for å gå linje for linje gjennom PHP 643 00:30:38,980 --> 00:30:42,745 og faktisk gjennomføre det, i motsetning å sammenstille det hele ned til binær. 644 00:30:42,745 --> 00:30:46,050 Det spiller egentlig ikke betyr noe om hvordan bestemte vi trenger å være. 645 00:30:46,050 --> 00:30:49,470 Vi trenger fortsatt å være presis, og gjør ikke glemmer semikolon, og sørg 646 00:30:49,470 --> 00:30:51,470 du har din dollartegn, og sånt. 647 00:30:51,470 --> 00:30:52,240 Godt spørsmål. 648 00:30:52,240 --> 00:30:53,115 >> MARIA ZLATKOVA: Yeah. 649 00:30:53,115 --> 00:30:55,590 Så linje for linje, som i motsetning til med C-filer, 650 00:30:55,590 --> 00:30:59,100 vi må gjøre hele finalen før vi faktisk kan kjøre den. 651 00:30:59,100 --> 00:31:00,360 Det er den største forskjellen. 652 00:31:00,360 --> 00:31:02,655 Men igjen, kan vi ikke virkelig være mindre spesifikk. 653 00:31:02,655 --> 00:31:08,760 654 00:31:08,760 --> 00:31:13,950 Så arrays i PHP representerer faktisk en ordnet kartet. 655 00:31:13,950 --> 00:31:17,550 >> Så arrays knytte verdier til tastene. 656 00:31:17,550 --> 00:31:23,350 De to måter å erklære en array, basert på denne syntaks, 657 00:31:23,350 --> 00:31:26,380 vi kan være mer eksplisitt i å si har vi en rekke 658 00:31:26,380 --> 00:31:31,010 og vi har denne nøkkel1 som er tilordnet dette verdi1, NØKKEL2 som kart verdi2. 659 00:31:31,010 --> 00:31:34,660 Eller vi kan bare lage en matrise som inneholder verdiene seg 660 00:31:34,660 --> 00:31:38,360 og deretter tastene er forstås på en måte. 661 00:31:38,360 --> 00:31:40,000 Eventuelle spørsmål om dette? 662 00:31:40,000 --> 00:31:42,500 >> Målgruppe: Hva ville nøkler være i det andre eksempel? 663 00:31:42,500 --> 00:31:47,100 664 00:31:47,100 --> 00:31:47,920 0, 1, 2, 3? 665 00:31:47,920 --> 00:31:50,650 666 00:31:50,650 --> 00:31:55,780 >> MARIA ZLATKOVA: For eksempel er det bare nøklene i dette ikke nødvendigvis 667 00:31:55,780 --> 00:31:56,550 gjør en forskjell. 668 00:31:56,550 --> 00:32:01,720 De bare definere hvordan du kan bruke verdiene på innsiden av det. 669 00:32:01,720 --> 00:32:08,660 Så hvis vi hadde en foreach sløyfe i PHP som ville 670 00:32:08,660 --> 00:32:14,760 tillate oss å gå gjennom alle verdiene, vi kan gå gjennom alle verdiene, 671 00:32:14,760 --> 00:32:19,570 selv om vi hadde eller ikke hadde definert en bestemt nøkkel innenfor områdets 672 00:32:19,570 --> 00:32:20,820 forrige syntaks. 673 00:32:20,820 --> 00:32:23,460 >> Så selv med denne typen av array, kunne vi fortsatt 674 00:32:23,460 --> 00:32:26,260 har en foreach løkke som går gjennom hver 675 00:32:26,260 --> 00:32:31,240 av verdiene i nøkkelen i rekken. 676 00:32:31,240 --> 00:32:36,180 Så syntaksen til en foreach sløyfe, starter vi med en matrise. 677 00:32:36,180 --> 00:32:38,720 678 00:32:38,720 --> 00:32:43,900 Denne $ arr variabelen er vår faktiske utvalg at vi definert i forrige lysbilde 679 00:32:43,900 --> 00:32:47,550 som verdi som bokstavelig talt går gjennom hver av verdiene 680 00:32:47,550 --> 00:32:50,122 Uansett vær vi hadde en nøkkel eller ikke. 681 00:32:50,122 --> 00:32:53,080 Og så kan vi gjøre noe med verdien innsiden av foreach sløyfen. 682 00:32:53,080 --> 00:32:57,730 Så igjen, hvis vi hadde en rekke som dette her created-- 683 00:32:57,730 --> 00:33:03,270 så vi har nøkkelen til foo og verdien av bar, nøkkelen til Baz og verdien av qux-- 684 00:33:03,270 --> 00:33:09,730 vi kan ha en foreach loop som går gjennom matrisen som nøkkelverdi 685 00:33:09,730 --> 00:33:11,900 og deretter gjøre noe med nøkkelen og / eller verdi. 686 00:33:11,900 --> 00:33:15,980 Men vi gjør ikke nødvendigvis alltid må ha en foreach løkker som 687 00:33:15,980 --> 00:33:19,410 går gjennom matrisen som sentrale kartet til verdi. 688 00:33:19,410 --> 00:33:26,060 Vi kan gå via foreach løkke matrise som verdi. 689 00:33:26,060 --> 00:33:28,990 >> HANNAH Blumberg: Og jeg tror to-- var spørsmålet ditt, hva 690 00:33:28,990 --> 00:33:31,229 er den implisitte indeksen? 691 00:33:31,229 --> 00:33:31,895 PUBLIKUM: Kinda. 692 00:33:31,895 --> 00:33:32,240 MARIA ZLATKOVA: Oh. 693 00:33:32,240 --> 00:33:33,406 HANNAH Blumberg: Ja, ja. 694 00:33:33,406 --> 00:33:36,150 Så i utgangspunktet, hvis du ikke angir en nøkkel, kommer det til å være 01. 695 00:33:36,150 --> 00:33:37,140 >> MARIA ZLATKOVA: Yeah. 696 00:33:37,140 --> 00:33:41,718 Akkurat som med C, er det null indeksert hvis du ikke angir en nøkkel. 697 00:33:41,718 --> 00:33:42,384 PUBLIKUM: Sorry. 698 00:33:42,384 --> 00:33:43,827 Kan du prøve å snakke litt høyere? 699 00:33:43,827 --> 00:33:45,270 Jeg har en liten bit av problemer med å høre alt. 700 00:33:45,270 --> 00:33:46,478 >> MARIA ZLATKOVA: Jeg er så lei meg. 701 00:33:46,478 --> 00:33:48,439 Ja selvfølgelig. 702 00:33:48,439 --> 00:33:50,230 Så ønsker du å meg å gå over dette igjen? 703 00:33:50,230 --> 00:33:51,680 Eller er dette-- 704 00:33:51,680 --> 00:33:54,930 PUBLIKUM: Så på den forrige slide-- hvis du bare kunne gå tilbake i ett sekund. 705 00:33:54,930 --> 00:33:57,313 MARIA ZLATKOVA: Selvfølgelig, beklager. 706 00:33:57,313 --> 00:33:59,237 PUBLIKUM: Så den andre matrise her ikke 707 00:33:59,237 --> 00:34:04,135 ser ut til å ha en verdi å taste, på en måte [? årsakssammenheng. ?] 708 00:34:04,135 --> 00:34:05,343 MARIA ZLATKOVA: Høyre, høyre. 709 00:34:05,343 --> 00:34:07,608 PUBLIKUM: Så hvordan fungerer det når du sier det er alle eller ingen. 710 00:34:07,608 --> 00:34:08,969 For meg ser ut som en [? foo?] allerede. 711 00:34:08,969 --> 00:34:10,093 >> MARIA ZLATKOVA: Ja, ja. 712 00:34:10,093 --> 00:34:12,969 Så igjen, er dette en bestilte kartet i denne forstand 713 00:34:12,969 --> 00:34:15,639 at det ikke er forstått, for eksempel indeksene 714 00:34:15,639 --> 00:34:20,159 her kan forstås som 0, 1, 2, 3. 715 00:34:20,159 --> 00:34:25,929 Igjen, det er å ha dem indekser tilsvarer vår 716 00:34:25,929 --> 00:34:28,980 av å ha nøkler kartlagt på verdier. 717 00:34:28,980 --> 00:34:34,710 Så hvis våre viktigste var 0-- beklager. 718 00:34:34,710 --> 00:34:36,524 >> HANNAH Blumberg: Nei, det har kritt opp her. 719 00:34:36,524 --> 00:34:36,929 Det er faktisk veldig hyggelig. 720 00:34:36,929 --> 00:34:37,460 >> MARIA ZLATKOVA: Det er flott. 721 00:34:37,460 --> 00:34:38,260 OK. 722 00:34:38,260 --> 00:34:49,489 Så igjen, ville $ arr 0 være nøkkelen for verdien 1. 723 00:34:49,489 --> 00:34:51,138 0 ville være nøkkelen for verdien 1. 724 00:34:51,138 --> 00:34:51,971 PUBLIKUM: Jeg beklager. 725 00:34:51,971 --> 00:34:53,190 Det er usynlig. 726 00:34:53,190 --> 00:34:53,659 >> HANNAH Blumberg: Greit, nevermind. 727 00:34:53,659 --> 00:34:54,980 Kritt var en dårlig idé. 728 00:34:54,980 --> 00:34:58,030 Jeg tar det tilbake. 729 00:34:58,030 --> 00:35:01,425 Du kan tenke på tastene som 0 kart til verdien 1. 730 00:35:01,425 --> 00:35:02,300 MARIA ZLATKOVA: Yeah. 731 00:35:02,300 --> 00:35:04,630 Så dette er 0, er dette en, to, tre. 732 00:35:04,630 --> 00:35:05,760 Disse kan være nøklene. 733 00:35:05,760 --> 00:35:10,020 Du kan tenke på dem as-- ja. 734 00:35:10,020 --> 00:35:12,740 Så i stedet for å ha eksplisitte tastene, de er 735 00:35:12,740 --> 00:35:17,180 liksom forstått som indeksene starter på 0. 736 00:35:17,180 --> 00:35:21,630 737 00:35:21,630 --> 00:35:24,820 Kritt hjalp ikke. 738 00:35:24,820 --> 00:35:25,722 Yeah. 739 00:35:25,722 --> 00:35:30,914 >> PUBLIKUM: For foreach loop, hvis vi ønsket å se som verdi, 740 00:35:30,914 --> 00:35:33,245 det ville bare automatisk indeksen til 0? 741 00:35:33,245 --> 00:35:34,120 MARIA ZLATKOVA: Yeah. 742 00:35:34,120 --> 00:35:35,745 Det ville gå gjennom hver av verdiene. 743 00:35:35,745 --> 00:35:39,130 PUBLIKUM: [uhørbart] som 0 eller ville det bare gjøre 0? 744 00:35:39,130 --> 00:35:43,710 >> MARIA ZLATKOVA: Du ville ha å si som dollartegn og deretter 745 00:35:43,710 --> 00:35:46,266 noen variabelnavn, verdi. 746 00:35:46,266 --> 00:35:47,182 PUBLIKUM: [uhørlig]. 747 00:35:47,182 --> 00:35:50,048 748 00:35:50,048 --> 00:35:50,964 MARIA ZLATKOVA: Sorry? 749 00:35:50,964 --> 00:35:52,839 PUBLIKUM: Beklager, jeg er bare prøver å huske. 750 00:35:52,839 --> 00:35:57,190 Hvordan vil du at hvis du kan gjøre det automatisk indeksering er bare 0 av? 751 00:35:57,190 --> 00:36:00,780 >> MARIA ZLATKOVA: Så hvordan ville du gjøre det hvis du ikke har bestemt nøkkel navn? 752 00:36:00,780 --> 00:36:01,710 >> PUBLIKUM: Yeah. 753 00:36:01,710 --> 00:36:07,820 >> MARIA ZLATKOVA: Du ville bare define-- bare si deg selv som noen navn. 754 00:36:07,820 --> 00:36:17,950 Så i dine psets, dere kanskje Husk foreach $ p $ rekker, 755 00:36:17,950 --> 00:36:24,610 vi skapt oss selv denne $ rad sier vi ønsker å gå gjennom p $ rader. 756 00:36:24,610 --> 00:36:28,360 Selv om vi ikke har dette eksplisitt $ rader definert, 757 00:36:28,360 --> 00:36:31,990 vi kunne bare gå og sier dette kan være vår nøkkel, 758 00:36:31,990 --> 00:36:33,615 og bare gå gjennom hver av verdiene. 759 00:36:33,615 --> 00:36:37,295 760 00:36:37,295 --> 00:36:41,660 >> PUBLIKUM: Så er verdien en ny variabel vi skaper for å lagre [uhørbart]? 761 00:36:41,660 --> 00:36:46,820 762 00:36:46,820 --> 00:36:49,990 >> MARIA ZLATKOVA: Så det er ikke iboende en ny variabel. 763 00:36:49,990 --> 00:37:00,310 Det er en variabel som refererer til inne i matrisen for hver av dem. 764 00:37:00,310 --> 00:37:02,060 HANNAH Blumberg: Det er en ny variabel navn. 765 00:37:02,060 --> 00:37:04,018 MARIA ZLATKOVA: Ja, det er en ny variabel navn, 766 00:37:04,018 --> 00:37:06,680 men det er ikke inherently-- ja. 767 00:37:06,680 --> 00:37:08,950 Det er bare en ny variabel at du kan gjøre det. 768 00:37:08,950 --> 00:37:12,680 Så bare hvordan vi gjorde $ rad som $ rader, rader 769 00:37:12,680 --> 00:37:17,980 var en ny variabel navn som vi kunne skape i vår foreach loop. 770 00:37:17,980 --> 00:37:22,065 Det trenger ikke å preexist før det. 771 00:37:22,065 --> 00:37:25,777 >> PUBLIKUM: Kan du gå gjennom logikk for hver, ved hjelp av eksempel er det? 772 00:37:25,777 --> 00:37:26,610 MARIA ZLATKOVA: Mhm. 773 00:37:26,610 --> 00:37:31,240 774 00:37:31,240 --> 00:37:32,080 Åh unnskyld. 775 00:37:32,080 --> 00:37:33,780 Her er et eksempel. 776 00:37:33,780 --> 00:37:34,280 Ja visst. 777 00:37:34,280 --> 00:37:38,950 Så for hver array-- så det betyr gå til denne matrisen 778 00:37:38,950 --> 00:37:43,930 som sentrale value-- som kommer å gå gjennom denne matrisen 779 00:37:43,930 --> 00:37:49,480 og først gå og få foo, den Nøkkelen foo og verdien bar. 780 00:37:49,480 --> 00:37:51,570 Og deretter på den andre gjentakelse av for loop, 781 00:37:51,570 --> 00:37:55,090 det kommer til å gå gjennom og ta nøkkelen baz og verdien qux. 782 00:37:55,090 --> 00:38:00,512 Og så kan du gjøre noe med en av dem eller begge. 783 00:38:00,512 --> 00:38:03,488 >> PUBLIKUM: Så ideen bak å ha et sentralt punkt til verdien, 784 00:38:03,488 --> 00:38:07,470 hva gjør du ende opp med å få tilgang til? 785 00:38:07,470 --> 00:38:10,680 >> MARIA ZLATKOVA: Hva er ideen av å ha en nøkkel som peker til verdi? 786 00:38:10,680 --> 00:38:16,400 Det er bare en annen konvensjon, en annen måte å gå gjennom rekke 787 00:38:16,400 --> 00:38:22,600 og å kunne få tilgang enten nøkkel eller verdien eller begge deler og bruker dem. 788 00:38:22,600 --> 00:38:27,100 >> PUBLIKUM: Hva er rollen for pålegg om foreach kjører i? 789 00:38:27,100 --> 00:38:29,250 Så hvis vi skulle legge elementer i matrisen senere 790 00:38:29,250 --> 00:38:32,140 ville de være de første kalles i foreach array, 791 00:38:32,140 --> 00:38:33,750 eller ville det være senere? 792 00:38:33,750 --> 00:38:37,770 >> MARIA ZLATKOVA: Så hva er rekkefølgen at foreach 793 00:38:37,770 --> 00:38:39,210 sløyfe går gjennom en rekke i? 794 00:38:39,210 --> 00:38:42,220 Det går gjennom den første element til det siste element, 795 00:38:42,220 --> 00:38:43,400 til det siste ekstra element. 796 00:38:43,400 --> 00:38:48,020 Hvis du legger til elementer senere, ville de bli accessed-- de første elementene ville 797 00:38:48,020 --> 00:38:51,410 nås som den første elementer i matrisen, 798 00:38:51,410 --> 00:38:57,620 og så vil du gå gjennom hver av elementene som liksom en ordered-- 799 00:38:57,620 --> 00:39:02,930 ikke en ordnet, men den måten at de har blitt satt inn i matrisen. 800 00:39:02,930 --> 00:39:06,855 >> PUBLIKUM: Så nye elementer legges senere? 801 00:39:06,855 --> 00:39:10,680 Så de added-- de vil være siste som i [? iterasjon. ?] 802 00:39:10,680 --> 00:39:14,280 >> MARIA ZLATKOVA: Nye elementer can-- utgangspunktet, når nye elementer legges til, 803 00:39:14,280 --> 00:39:16,520 blir de lagt til slutten av tabellen? 804 00:39:16,520 --> 00:39:17,632 >> PUBLIKUM: Yeah. 805 00:39:17,632 --> 00:39:18,840 MARIA ZLATKOVA: Jeg tror det. 806 00:39:18,840 --> 00:39:20,850 Ja. 807 00:39:20,850 --> 00:39:24,330 Og så med foreach loop, etter at du har lagt til nye elementer 808 00:39:24,330 --> 00:39:26,790 og du går gjennom dem, de nye elementene ville 809 00:39:26,790 --> 00:39:30,930 være accessed-- den nye element, hvis det er lagt siste, ville det være tilgang sist. 810 00:39:30,930 --> 00:39:34,416 >> PUBLIKUM: Kan du bare gi et eksempel av noe som ville [uhørbart] 811 00:39:34,416 --> 00:39:37,404 med noe med verdi som [uhørbart] eller verdi, 812 00:39:37,404 --> 00:39:38,910 liker hvordan du vil formatere det? 813 00:39:38,910 --> 00:39:39,785 >> MARIA ZLATKOVA: Sure. 814 00:39:39,785 --> 00:39:42,340 815 00:39:42,340 --> 00:39:46,410 Kan jeg gi et eksempel på hva vi ville gjøre med verdien? 816 00:39:46,410 --> 00:39:52,440 Så hva dere kan bli kjent med er at vi har gått gjennom en rekke 817 00:39:52,440 --> 00:39:55,380 og i utgangspunktet skrives hvert av elementene, 818 00:39:55,380 --> 00:40:00,910 for eksempel som en del av en sortert liste eller noe som. 819 00:40:00,910 --> 00:40:02,674 Betyr det fornuftig eller ønsker vi to-- 820 00:40:02,674 --> 00:40:04,340 PUBLIKUM: Kan vi skrive ut disse verdiene ut? 821 00:40:04,340 --> 00:40:13,220 MARIA ZLATKOVA: Ja, vi kunne skrive ut og deretter i utgangspunktet $ verdi fordi på 822 00:40:13,220 --> 00:40:16,570 som bestemt verdi, vil vi være skriver verdien på innsiden av det. 823 00:40:16,570 --> 00:40:20,150 Så hvis vi var på vår første iterasjon av det og vi skrives $ verdi, 824 00:40:20,150 --> 00:40:23,775 vi vil være utskrift bar. 825 00:40:23,775 --> 00:40:27,020 >> PUBLIKUM: Er det også for løkker i PHP eller bare foreach løkker? 826 00:40:27,020 --> 00:40:30,430 >> MARIA ZLATKOVA: Det finnes også etter looper i PHP. 827 00:40:30,430 --> 00:40:33,399 Og deres logikk er det meste samme som det du har vært vant til. 828 00:40:33,399 --> 00:40:34,690 PUBLIKUM: Så verdien er null. 829 00:40:34,690 --> 00:40:35,090 MARIA ZLATKOVA: Det er som det samme. 830 00:40:35,090 --> 00:40:35,590 Yeah. 831 00:40:35,590 --> 00:40:37,747 PUBLIKUM: Jeg skal bare spørre. 832 00:40:37,747 --> 00:40:39,695 Så når du deklarerer en array, trenger du ikke 833 00:40:39,695 --> 00:40:42,617 å fortelle hvilken størrelse det kommer til å være, noe som betyr at du kan bare 834 00:40:42,617 --> 00:40:44,417 legge til og ta bort elementer [uhørbart]. 835 00:40:44,417 --> 00:40:45,250 MARIA ZLATKOVA: Yup. 836 00:40:45,250 --> 00:40:45,750 Jepp. 837 00:40:45,750 --> 00:40:46,251 Nettopp. 838 00:40:46,251 --> 00:40:48,875 Når vi erklære en matrise, vi trenger ikke å si hvilken størrelse det er, 839 00:40:48,875 --> 00:40:51,022 så vi kan bare legge til elementer på det senere også. 840 00:40:51,022 --> 00:40:55,075 841 00:40:55,075 --> 00:40:55,700 Flere spørsmål? 842 00:40:55,700 --> 00:40:59,870 843 00:40:59,870 --> 00:41:05,950 Så bringe PHP og HTML sammen, hva vi har seen-- godt, 844 00:41:05,950 --> 00:41:15,130 for eksempel, i dette eksempel, har vi et HTML-skjema som har en inngang felt. 845 00:41:15,130 --> 00:41:18,830 >> Og inntastingsfeltet er bare navn og da den har en Send-knappen. 846 00:41:18,830 --> 00:41:26,040 Og når du trykker på Send inn knappen i vår hello.php fil, 847 00:41:26,040 --> 00:41:32,130 fordi metoden for formen er får, kan vi få tilgang til alt som er på navn 848 00:41:32,130 --> 00:41:40,360 etter dette få global variabel som er-- syntaksen for det er $ _GET. 849 00:41:40,360 --> 00:41:44,520 Og så kan vi få tilgang uansett brukerundersøkelser innsiden av den form for navn 850 00:41:44,520 --> 00:41:47,410 ved å angi navnet på det feltet. 851 00:41:47,410 --> 00:41:51,480 852 00:41:51,480 --> 00:41:55,060 >> Eventuelle andre spørsmål eller noe spørsmål om dette konkret eksempel? 853 00:41:55,060 --> 00:41:58,275 >> PUBLIKUM: Hvor er PHP? 854 00:41:58,275 --> 00:41:59,150 MARIA ZLATKOVA: Her. 855 00:41:59,150 --> 00:42:01,150 Så dette er vår åpning tag for PHP. 856 00:42:01,150 --> 00:42:01,530 >> PUBLIKUM: Oh, ikke sant. 857 00:42:01,530 --> 00:42:02,363 >> MARIA ZLATKOVA: Ja. 858 00:42:02,363 --> 00:42:05,320 859 00:42:05,320 --> 00:42:09,609 >> HANNAH Blumberg:? The = er stenografi for dette er PHP og bare ekko. 860 00:42:09,609 --> 00:42:10,150 PUBLIKUM: Oh. 861 00:42:10,150 --> 00:42:10,720 MARIA ZLATKOVA: Ja, beklager. 862 00:42:10,720 --> 00:42:12,040 Jeg burde ha gjort det klart. 863 00:42:12,040 --> 00:42:13,759 >> HANNAH Blumberg: Print. 864 00:42:13,759 --> 00:42:16,800 MARIA ZLATKOVA: Det er bare funksjonen som tillater oss å skrive ut noe. 865 00:42:16,800 --> 00:42:19,795 866 00:42:19,795 --> 00:42:20,420 Stort spørsmål. 867 00:42:20,420 --> 00:42:24,140 868 00:42:24,140 --> 00:42:25,495 Så going-- ja. 869 00:42:25,495 --> 00:42:31,940 >> PUBLIKUM: Er det kommer til å være ganske litt av hånden koding av PHP og HTML 870 00:42:31,940 --> 00:42:33,450 på quiz en? 871 00:42:33,450 --> 00:42:36,310 872 00:42:36,310 --> 00:42:38,810 MARIA ZLATKOVA: Det kan være en god del tolkning 873 00:42:38,810 --> 00:42:43,330 av PHP og HTML, ikke nødvendigvis som en enorm mengde koding, 874 00:42:43,330 --> 00:42:46,960 selv om du kanskje nødt til å skrive et foreach loop, skjønt, en for loop. 875 00:42:46,960 --> 00:42:49,790 Noen av løkker som vi dekke her er fritt vilt. 876 00:42:49,790 --> 00:42:51,889 Og det er stort sett det. 877 00:42:51,889 --> 00:42:53,430 HANNAH Blumberg: Jeg vil være forberedt. 878 00:42:53,430 --> 00:42:57,010 På samme måte som ba vi deg til å skrive en haug med C-funksjoner på quiz 0, 879 00:42:57,010 --> 00:42:59,766 Jeg ville være forberedt på å gjøre det samme i PHP og Javascript. 880 00:42:59,766 --> 00:43:00,640 MARIA ZLATKOVA: Yeah. 881 00:43:00,640 --> 00:43:03,210 HANNAH Blumberg: Jeg vil si en little-- som vi ikke 882 00:43:03,210 --> 00:43:06,251 kommer til å få deg til å skrive en stor HTML side bare fordi det er en liten bit 883 00:43:06,251 --> 00:43:08,240 langtekkelig, men du kan ha deler. 884 00:43:08,240 --> 00:43:09,310 Det er helt fair game. 885 00:43:09,310 --> 00:43:11,082 Som liten HTML-side, helt fair. 886 00:43:11,082 --> 00:43:11,623 PUBLIKUM: OK. 887 00:43:11,623 --> 00:43:13,814 Hva med i Javascript så vel? 888 00:43:13,814 --> 00:43:14,730 HANNAH Blumberg: Yeah. 889 00:43:14,730 --> 00:43:15,250 Javascript er fritt vilt. 890 00:43:15,250 --> 00:43:15,635 >> MARIA ZLATKOVA: Yeah. 891 00:43:15,635 --> 00:43:16,801 Det er helt fair game. 892 00:43:16,801 --> 00:43:19,280 HANNAH Blumberg: Vi får som den i 10 minutter. 893 00:43:19,280 --> 00:43:23,750 >> MARIA ZLATKOVA: SQL, igjen, Structured Query Language. 894 00:43:23,750 --> 00:43:28,651 Det gir i utgangspunktet oss å administrere data i en relasjonsdatabase 895 00:43:28,651 --> 00:43:29,150 system. 896 00:43:29,150 --> 00:43:31,149 Som bare betyr i utgangspunktet at vi har et sted 897 00:43:31,149 --> 00:43:37,980 til å lagre noen data som vi kanskje vil bruk i et nettsted, eller i noen annen form. 898 00:43:37,980 --> 00:43:42,190 Og så har vi spørsmål for å få opplysninger fra vår database, 899 00:43:42,190 --> 00:43:44,320 eller sette inn informasjon i dem. 900 00:43:44,320 --> 00:43:47,560 Mye av felles ones-- UPDATE, INSERT, SELECT, og DELETE. 901 00:43:47,560 --> 00:43:50,790 >> Så for UPDATE, er denne syntaksen for oppdatering av data i en database. 902 00:43:50,790 --> 00:43:53,330 903 00:43:53,330 --> 00:43:57,340 Oppdatere denne tabellen kalt tabellen ved å si SET, 904 00:43:57,340 --> 00:44:04,170 vi kan sette noen verdier i det hele tatt rader til lik noe annet. 905 00:44:04,170 --> 00:44:09,410 Så vi kan også angi noen spesifikk oppføringer som vi ønsker å endre 906 00:44:09,410 --> 00:44:11,240 og som kan være hjelp DER. 907 00:44:11,240 --> 00:44:16,380 Og vi kan spesifisere at vi bare ønsker å modifisere noen rader der huset for, 908 00:44:16,380 --> 00:44:19,830 hvis vi hadde et bord av studenter og alle elevene hadde hus, 909 00:44:19,830 --> 00:44:24,890 så vi ville bare endre noen verdier hvor et hus er lik Currier, 910 00:44:24,890 --> 00:44:25,430 for eksempel. 911 00:44:25,430 --> 00:44:29,120 912 00:44:29,120 --> 00:44:31,800 >> For INSERT, kan vi sette inn visse verdier i en tabell. 913 00:44:31,800 --> 00:44:35,150 Så INSERT INTO tabell, og deretter verdiene, 914 00:44:35,150 --> 00:44:39,080 og deretter i parentes oppgir vi hvilke verdier du vil sette inn. 915 00:44:39,080 --> 00:44:43,220 Så INSERT INTO tabell, col1 og col2, er verdien VAL1 og val2. 916 00:44:43,220 --> 00:44:48,930 Så dette setter i utgangspunktet en ny rad inn en tabell som inneholder verdiene 1 og 2 917 00:44:48,930 --> 00:44:50,850 under kolonnene 1 og 2. 918 00:44:50,850 --> 00:44:54,760 >> Og så skal vi gå over en rask eksempel på hvordan dette ser ut 919 00:44:54,760 --> 00:44:56,310 som i vår database litt. 920 00:44:56,310 --> 00:44:58,685 Men dette siste spørsmålet som jeg tror vi kommer til å gå over, 921 00:44:58,685 --> 00:45:01,450 SELECT, det bare gir oss for å velge data fra en tabell 922 00:45:01,450 --> 00:45:03,080 å muligens bruke det etterpå. 923 00:45:03,080 --> 00:45:05,830 Og måten vi gjør dette er at vi bare lagre den på en eller annen variabel. 924 00:45:05,830 --> 00:45:07,780 Og så kan vi muligens bruke det igjen. 925 00:45:07,780 --> 00:45:10,260 >> Så SELECT stjerne betyr velge alle. 926 00:45:10,260 --> 00:45:13,280 Det er bare en forkortelse for å velge alle. 927 00:45:13,280 --> 00:45:19,760 FROM tabell WHERE, er vi på jakt for noen bestemte vilkår, 928 00:45:19,760 --> 00:45:22,290 så der kolonne lik noe, for eksempel. 929 00:45:22,290 --> 00:45:24,410 Hvis vi bare ønsket å Velg alle fra bordet, 930 00:45:24,410 --> 00:45:28,400 dette bare velger alle kolonner og alle rader fra en tabell. 931 00:45:28,400 --> 00:45:32,040 >> Og deretter DELETE FROM tabell HVOR col lik noe, 932 00:45:32,040 --> 00:45:36,440 dette bare sletter noen rad fra vårt bord 933 00:45:36,440 --> 00:45:38,860 hvor vi har noen spesifikke forhold. 934 00:45:38,860 --> 00:45:41,870 I dette tilfellet, vilkårene er kolonnen tilsvarer noe. 935 00:45:41,870 --> 00:45:43,460 Så bare en rask eksempel på dette. 936 00:45:43,460 --> 00:45:49,100 Hvis vi har denne tabellen til høyre her, og vi sette det inn i en tabell, disse verdiene, 937 00:45:49,100 --> 00:45:50,400 som ville sette inn en ny rad. 938 00:45:50,400 --> 00:45:56,380 Og hvis vi hadde auto-økning, ville dette bare øke vår-ID fra 0 til 1 for å 2. 939 00:45:56,380 --> 00:46:00,010 >> Hvis vi valgt alt fra studenter, det bare returnerer alle felt og alle radene. 940 00:46:00,010 --> 00:46:02,430 Hvor året er større enn eller lik 2016, 941 00:46:02,430 --> 00:46:04,390 det ville bare tilbake Hannah og meg selv. 942 00:46:04,390 --> 00:46:08,360 Og så hvis vi bare valgt år id og år fra studenter 943 00:46:08,360 --> 00:46:11,710 hvor huset er Cabot House, som ville, igjen, tilbake Hannah og meg selv. 944 00:46:11,710 --> 00:46:14,430 >> Så hvis vi slettet fra studenter der navn er lik Rob, 945 00:46:14,430 --> 00:46:16,760 som ville slette hele raden. 946 00:46:16,760 --> 00:46:19,696 Og så hvis vi setter navn, UPDATE studenter 947 00:46:19,696 --> 00:46:21,570 SET navn tilsvarer Daven HVOR huset er lik 948 00:46:21,570 --> 00:46:27,010 Cabot House, er det kommer til å gå til de radene og deretter oppdatere navnet. 949 00:46:27,010 --> 00:46:31,470 >> Og så et par SQL datatyper er Røye, VARCHAR, INT, og flyte. 950 00:46:31,470 --> 00:46:32,760 Disse er fritt vilt. 951 00:46:32,760 --> 00:46:36,740 Jeg vil gå over igjen og sørg for at du vet 952 00:46:36,740 --> 00:46:40,930 og ha dem på jukselapp, hva hver enkelt av disse tegnene 953 00:46:40,930 --> 00:46:44,140 har vært brukt for, hva du brukte dem på psets, 954 00:46:44,140 --> 00:46:48,050 og pass på at du er kjent og komfortabel med å måtte velge 955 00:46:48,050 --> 00:46:51,450 fra forskjellige data typer i din PSet. 956 00:46:51,450 --> 00:46:51,950 Ja. 957 00:46:51,950 --> 00:46:54,300 >> PUBLIKUM: Hva var det bordet lagret? 958 00:46:54,300 --> 00:46:57,119 Ja, hvor er denne tabellen lagres? 959 00:46:57,119 --> 00:46:59,160 MARIA ZLATKOVA: Vel, akkurat nå, er det ikke lagret. 960 00:46:59,160 --> 00:47:00,700 Uansett, hvor er denne tabellen lagres? 961 00:47:00,700 --> 00:47:04,503 Men det kan være lagret i en database SQL. 962 00:47:04,503 --> 00:47:07,330 >> PUBLIKUM: Og hvor er SQL database? 963 00:47:07,330 --> 00:47:11,200 I datamaskinen, online et sted, serveren? 964 00:47:11,200 --> 00:47:15,000 >> MARIA ZLATKOVA: Det kan være en rekke forskjellige ting. 965 00:47:15,000 --> 00:47:19,690 >> HANNAH Blumberg: Vi har tilkobles med SQL-tabeller for det meste med phpMyAdmin. 966 00:47:19,690 --> 00:47:22,060 Så vi kunne spørre en server til å lagre dem for oss. 967 00:47:22,060 --> 00:47:23,830 Vi kunne lagre dem på vår egen datamaskin. 968 00:47:23,830 --> 00:47:27,950 >> MARIA ZLATKOVA: Det avhenger bare av hvordan du vil gjøre det selv. 969 00:47:27,950 --> 00:47:30,075 Men vi har vært lagring dem, som Hannah nevnt, 970 00:47:30,075 --> 00:47:31,755 på phpMyAdmin, som er online. 971 00:47:31,755 --> 00:47:36,550 972 00:47:36,550 --> 00:47:39,280 Og så måten vi bruker PHP og SQL, vi lagre den 973 00:47:39,280 --> 00:47:43,450 inn i noen variable hva vi har spørres etter. 974 00:47:43,450 --> 00:47:48,370 >> Så hvis vi Merk alt historie hvor user_id lik SESSION id, 975 00:47:48,370 --> 00:47:53,900 som vil velge alle radene for den spesifikke person som 976 00:47:53,900 --> 00:47:58,327 logges inn fra historien bord og sortere dem i rader. 977 00:47:58,327 --> 00:48:00,410 En kul ting å vite er at CS50 søket til funksjon 978 00:48:00,410 --> 00:48:02,180 beskytter mot SQL-injeksjon koder. 979 00:48:02,180 --> 00:48:07,420 Det betyr bare at det gjør at innspill som er kommet er riktig 980 00:48:07,420 --> 00:48:09,920 og at personen som går inn inngangs 981 00:48:09,920 --> 00:48:15,100 prøver ikke å legge inn noen ondsinnet kode for å enten slippe våre tabeller 982 00:48:15,100 --> 00:48:17,305 eller slette alt innsiden av vår database. 983 00:48:17,305 --> 00:48:20,060 984 00:48:20,060 --> 00:48:23,400 >> En rask oversikt over Model View Controller modell, 985 00:48:23,400 --> 00:48:27,360 det er bare en måte å organisere og tenker på kode. 986 00:48:27,360 --> 00:48:29,100 Det er nytt, et design paradigme. 987 00:48:29,100 --> 00:48:33,380 Hva det betyr er at vi can-- og det er god praksis 988 00:48:33,380 --> 00:48:37,790 å skille ulike deler av koden vår og hva de 989 00:48:37,790 --> 00:48:40,530 kontrollere inn i disse tre paradigmer. 990 00:48:40,530 --> 00:48:46,700 >> Så vårt syn er oftest vår maler, vår layout, vei 991 00:48:46,700 --> 00:48:48,260 at vi setter hvordan koden vår ser ut. 992 00:48:48,260 --> 00:48:55,190 Det er stort sett våre CSS-filer og måten at vi definerte utformingen av vår kode, 993 00:48:55,190 --> 00:48:55,710 i utgangspunktet. 994 00:48:55,710 --> 00:48:59,280 Vår kontrolleren er det meste hva vi har gjort med PHP-filer. 995 00:48:59,280 --> 00:49:03,030 Så igjen, som arbeider med informasjon som vi har 996 00:49:03,030 --> 00:49:06,700 og definere hvordan det Informasjonen brukes 997 00:49:06,700 --> 00:49:10,660 og deretter passerer denne informasjonen enten på visning eller modell. 998 00:49:10,660 --> 00:49:13,880 Og modellen, måten vi har brukt er har vært vår database, 999 00:49:13,880 --> 00:49:17,510 så der vår informasjon er er lagret slik at den har et eller annet sted 1000 00:49:17,510 --> 00:49:21,490 å leve i, og noen av de kode som er relatert til veien 1001 00:49:21,490 --> 00:49:25,410 at vi får den informasjonen, eller den måte som vi oppdaterer denne informasjonen. 1002 00:49:25,410 --> 00:49:28,940 1003 00:49:28,940 --> 00:49:33,200 >> Så i MVC-modellen, HTTP forespørsler sendes til en webserver. 1004 00:49:33,200 --> 00:49:36,220 Deretter kontrolleren tolker anmodning fra brukeren 1005 00:49:36,220 --> 00:49:38,260 og deretter validerer brukerundersøkelser. 1006 00:49:38,260 --> 00:49:41,580 Det er valgfritt om at vi har kontrolleren kommunisere 1007 00:49:41,580 --> 00:49:44,000 med en modell, slik at noe som vår database 1008 00:49:44,000 --> 00:49:47,500 eller noen annen funksjonalitet som releer informasjon. 1009 00:49:47,500 --> 00:49:50,340 Og så til slutt, kontrolleren passerer informasjon på visningen 1010 00:49:50,340 --> 00:49:52,090 slik at det kan bli gjengitt og at det kan 1011 00:49:52,090 --> 00:49:55,860 bli synlig for en person tilgang til nettsiden. 1012 00:49:55,860 --> 00:49:58,440 1013 00:49:58,440 --> 00:50:01,340 >> Noen spørsmål? 1014 00:50:01,340 --> 00:50:01,840 Awesome. 1015 00:50:01,840 --> 00:50:04,530 1016 00:50:04,530 --> 00:50:08,469 Så igjen, modellen, dens funksjon, igjen, 1017 00:50:08,469 --> 00:50:11,260 er vedvarende lagring av informasjon, administrere og organisere data. 1018 00:50:11,260 --> 00:50:13,890 Og det vi har sett så langt er MySQL database 1019 00:50:13,890 --> 00:50:16,200 og datafiler som kan bruke. 1020 00:50:16,200 --> 00:50:20,580 >> View, presentasjon av informasjon til brukeren, UI, eller brukergrensesnitt. 1021 00:50:20,580 --> 00:50:22,350 Og eksempel på dette er HTML. 1022 00:50:22,350 --> 00:50:23,950 Og så kan vi ha minimal PHP. 1023 00:50:23,950 --> 00:50:28,360 Så en for løkke som gjentar i løpet av data som er skrevet ut 1024 00:50:28,360 --> 00:50:30,720 er en del av visningen, som motsetning til kontrolleren. 1025 00:50:30,720 --> 00:50:35,660 Og så mange av våre PHP-filer falle inn i kontrolleren kategori. 1026 00:50:35,660 --> 00:50:38,410 Den håndterer bare bruker ber og får informasjon fra modellen. 1027 00:50:38,410 --> 00:50:42,880 1028 00:50:42,880 --> 00:50:45,590 >> Hopping i dokument Object Model, dette er bare 1029 00:50:45,590 --> 00:50:47,700 refererer seg til den måten HTML dokumentene er organisert. 1030 00:50:47,700 --> 00:50:51,600 Og de er organisert i et tre struktur som har et hierarki. 1031 00:50:51,600 --> 00:50:56,720 Så hvis vi har tilgang til [uhørbart] representasjon av dokumentet, 1032 00:50:56,720 --> 00:51:02,750 vi kan arbeide med dokumentet, som vi manipulere objekter i utgangspunktet. 1033 00:51:02,750 --> 00:51:06,630 >> Og for å gjøre dette til en litt klarere, når 1034 00:51:06,630 --> 00:51:10,540 vi har mye av vår ulike koder svare 1035 00:51:10,540 --> 00:51:12,590 til forskjellige ruter i treet vårt. 1036 00:51:12,590 --> 00:51:17,070 Og så for dette eksempelet vi har basisdokument node. 1037 00:51:17,070 --> 00:51:20,010 Vi har altså vår HTML node som deler seg i hodet og kroppen. 1038 00:51:20,010 --> 00:51:22,810 Hodet har tittel og deretter Tittelen inneholder hallo, verden. 1039 00:51:22,810 --> 00:51:24,860 Og kroppen vår bare inneholder hallo, verden også. 1040 00:51:24,860 --> 00:51:28,700 1041 00:51:28,700 --> 00:51:31,900 >> Så noen spørsmål om noen av ting som vi dekket hittil? 1042 00:51:31,900 --> 00:51:35,891 Og hvis ikke, Hannah vil ta over med Javascript. 1043 00:51:35,891 --> 00:51:36,390 Awesome. 1044 00:51:36,390 --> 00:51:37,473 >> HANNAH Blumberg: OK, kult. 1045 00:51:37,473 --> 00:51:40,980 Hvis noe kommer opp med PHP eller HTML, eller noen av sakene Maria dekket, 1046 00:51:40,980 --> 00:51:42,700 vi kan alltid pause. 1047 00:51:42,700 --> 00:51:46,430 Vi gjør det bedre på tid igjen, så fantastisk. 1048 00:51:46,430 --> 00:51:48,770 Og bare for å gå tilbake veldig raskt til denne, 1049 00:51:48,770 --> 00:51:51,010 hvis du ser på hver siste årets eksamen, dette 1050 00:51:51,010 --> 00:51:54,120 kommer opp either-- her er litt HTML, gjør dette diagrammet. 1051 00:51:54,120 --> 00:51:58,380 Eller her er dette diagrammet, gjøre noen HTML, så definitivt øve det. 1052 00:51:58,380 --> 00:52:01,500 Og så det er en garantert spørsmål som du kan få rett. 1053 00:52:01,500 --> 00:52:02,000 Kjølig. 1054 00:52:02,000 --> 00:52:04,510 Så la oss snakke om Javascript og hvor det er en liten bit 1055 00:52:04,510 --> 00:52:09,130 forskjellig fra språk som PHP og C, de to språkene vi så på forhånd. 1056 00:52:09,130 --> 00:52:10,780 Så nummer én, det er løst skrevet. 1057 00:52:10,780 --> 00:52:14,630 Det er som PHP, men i motsetning til C. 1058 00:52:14,630 --> 00:52:15,890 >> Det er et tolket språk. 1059 00:52:15,890 --> 00:52:19,870 Igjen, det er sånn PHP, i motsetning til C. Og dette 1060 00:52:19,870 --> 00:52:24,630 kommer til å tillate oss å use-- det fungerer veldig bra med nettsider. 1061 00:52:24,630 --> 00:52:28,350 Det kommer til å tillate oss å manipulere innholdet og hvordan det ser ut 1062 00:52:28,350 --> 00:52:30,300 og hva den gjør. 1063 00:52:30,300 --> 00:52:32,330 >> Vi kommer til å se litt av Ajax. 1064 00:52:32,330 --> 00:52:36,140 Det tillater oss å kommunisere asynkront med forskjellige servere 1065 00:52:36,140 --> 00:52:37,950 og få informasjon. 1066 00:52:37,950 --> 00:52:42,820 Og dette er det som virkelig skiller Javascript fra PHP og C 1067 00:52:42,820 --> 00:52:45,590 er at det er på klientsiden. 1068 00:52:45,590 --> 00:52:49,860 Både PHP og C er typisk server-side. 1069 00:52:49,860 --> 00:52:51,960 >> For det meste, og nesten helt hva 1070 00:52:51,960 --> 00:52:53,900 vi har sett, i hvert fall i denne klassen, Javascript 1071 00:52:53,900 --> 00:52:57,040 virker på klientsiden, noe som betyr at nettleseren er faktisk 1072 00:52:57,040 --> 00:52:58,597 ansvarlig for å kjøre den. 1073 00:52:58,597 --> 00:53:01,180 Og det betyr at vi ikke trenger å samhandle med serveren. 1074 00:53:01,180 --> 00:53:04,380 Så det betyr at det kan være mye raskere fordi det er faktisk bare det er Chrome, 1075 00:53:04,380 --> 00:53:10,420 det er Safari, det er Firefox, uansett hva du bruker faktisk kjører Javascript. 1076 00:53:10,420 --> 00:53:12,290 >> PUBLIKUM: Hva betyr asynkron? 1077 00:53:12,290 --> 00:53:13,620 >> HANNAH Blumberg: Ah, hva betyr asynkront? 1078 00:53:13,620 --> 00:53:14,250 Stort spørsmål. 1079 00:53:14,250 --> 00:53:17,890 Asynkront means-- vel, innholdet i hvilket 1080 00:53:17,890 --> 00:53:22,140 vi bruker det er, OK, vi oppretter en nettside 1081 00:53:22,140 --> 00:53:23,860 og vi trenger å få litt informasjon. 1082 00:53:23,860 --> 00:53:28,250 Så med eksempel på mashup, noen informasjon som vi kanskje vil 1083 00:53:28,250 --> 00:53:30,580 er artikkelen titler. 1084 00:53:30,580 --> 00:53:33,330 Nå could-- vi ett alternativ er å gjøre det synkront 1085 00:53:33,330 --> 00:53:37,940 og det betyr la oss stoppe, går du få artikkelen, 1086 00:53:37,940 --> 00:53:41,275 få artikkelen tilbake, og deretter gjengi, men det ville være veldig treg. 1087 00:53:41,275 --> 00:53:44,150 Det ville være en dårlig brukeropplevelse fordi du ville bare bli sittende 1088 00:53:44,150 --> 00:53:46,630 der venter på noe å svare. 1089 00:53:46,630 --> 00:53:50,020 >> Asynkront betyr at vi vil fortsette å gå om vår virksomhet, 1090 00:53:50,020 --> 00:53:52,529 rende siden, og vi vil sende ut en forespørsel 1091 00:53:52,529 --> 00:53:54,570 Det er litt å gå på skje i bakgrunnen. 1092 00:53:54,570 --> 00:53:57,610 Jeg tror vi bruker eksemplet i foredrag for å ringe Rob og sa: 1093 00:53:57,610 --> 00:53:59,980 hei, kan du se dette opp for meg og komme tilbake til meg, 1094 00:53:59,980 --> 00:54:02,870 i motsetning til bare meg venter på telefonen. 1095 00:54:02,870 --> 00:54:07,020 Så asynkront betyr det skjer i bakgrunnen bort fra oss 1096 00:54:07,020 --> 00:54:08,676 parallelt. 1097 00:54:08,676 --> 00:54:10,400 >> Stort spørsmål. 1098 00:54:10,400 --> 00:54:11,830 Alt annet? 1099 00:54:11,830 --> 00:54:12,330 Flott. 1100 00:54:12,330 --> 00:54:15,020 Vi skal hoppe mye mer inn asynkrone forespørsler med Ajax. 1101 00:54:15,020 --> 00:54:18,287 >> PUBLIKUM: Har JavaScript-- hvor kommer det falle med modell-view-controller? 1102 00:54:18,287 --> 00:54:19,620 HANNAH Blumberg: Great spørsmålet. 1103 00:54:19,620 --> 00:54:23,320 Hvor kommer Script fall med modell-view-controller? 1104 00:54:23,320 --> 00:54:23,930 Hm. 1105 00:54:23,930 --> 00:54:28,350 Jeg antar det kan fall-- så vi ikke vanligvis 1106 00:54:28,350 --> 00:54:31,340 liker å squish det inn som paradigmet, men jeg antar jeg vil si, 1107 00:54:31,340 --> 00:54:34,280 OK, så Script faktisk kommer til å tillate 1108 00:54:34,280 --> 00:54:37,587 oss å samle data, tolke data, faktisk gjøre 1109 00:54:37,587 --> 00:54:38,920 meningsfulle ting med dataene. 1110 00:54:38,920 --> 00:54:41,100 På den måten er det veldig kontroll-aktig. 1111 00:54:41,100 --> 00:54:43,900 >> Men det er også kommer til å tillate oss å vise ting og skrive ut ting. 1112 00:54:43,900 --> 00:54:47,021 På den måten er det veldig view-aktig. 1113 00:54:47,021 --> 00:54:47,520 Yeah. 1114 00:54:47,520 --> 00:54:51,710 Så det er litt som PHP i hvor det kan slags være begge deler. 1115 00:54:51,710 --> 00:54:53,330 Godt spørsmål. 1116 00:54:53,330 --> 00:54:55,209 Alt annet? 1117 00:54:55,209 --> 00:54:56,000 Greit, awesome. 1118 00:54:56,000 --> 00:54:57,120 Flytte rett sammen. 1119 00:54:57,120 --> 00:54:59,110 >> Så la oss se et eksempel på hvordan vi kan bruke 1120 00:54:59,110 --> 00:55:02,250 Java i en av våre web-programmer. 1121 00:55:02,250 --> 00:55:05,680 Så jeg vil vurdere dette index.html med en haug med HTML. 1122 00:55:05,680 --> 00:55:08,800 Og jeg ønsker deg fokusere på er dette skriptet tag. 1123 00:55:08,800 --> 00:55:13,280 Og dette sier, OK, jeg ønsker å kjøre noen Javascript og her er der den lever. 1124 00:55:13,280 --> 00:55:15,400 Den lever i hello.js. 1125 00:55:15,400 --> 00:55:21,120 >> Og veldig mye som CSS, vi kunne sette Javascript i HTML. 1126 00:55:21,120 --> 00:55:24,000 Hvorfor kan vi ønsker å skille det ut? 1127 00:55:24,000 --> 00:55:24,500 Yeah. 1128 00:55:24,500 --> 00:55:25,486 >> PUBLIKUM: Lettere å skrive? 1129 00:55:25,486 --> 00:55:26,402 >> HANNAH Blumberg: Yeah. 1130 00:55:26,402 --> 00:55:28,450 Det er enklere å bruke på tvers forskjellige nettsider. 1131 00:55:28,450 --> 00:55:29,980 Det holder ting renere. 1132 00:55:29,980 --> 00:55:32,090 Det er bare god praksis. 1133 00:55:32,090 --> 00:55:32,590 Awesome. 1134 00:55:32,590 --> 00:55:33,930 Bra svar. 1135 00:55:33,930 --> 00:55:36,690 Så bra, så dette kommer å være vår index.html. 1136 00:55:36,690 --> 00:55:39,430 Og deretter ned her er vår bitte liten Javascript-fil. 1137 00:55:39,430 --> 00:55:42,410 >> Og all den sier er våken Hei, verden. 1138 00:55:42,410 --> 00:55:46,040 Så hva skjer når denne siden renders-- 1139 00:55:46,040 --> 00:55:49,680 så hvis du går til hva nettsiden dette er-- alt som kommer til å skje 1140 00:55:49,680 --> 00:55:53,330 er det kommer til å si, OK, jeg er kommer til å kjøre denne Javascript-kode. 1141 00:55:53,330 --> 00:55:56,370 Og denne Javascript-kode bare sier varsling Hei, verden. 1142 00:55:56,370 --> 00:55:59,090 Så jeg kommer til å få dette vennlige lille pop-up. 1143 00:55:59,090 --> 00:56:00,360 >> Kjølig? 1144 00:56:00,360 --> 00:56:04,746 Det er litt som vår aller første Javascript-program, våre Hei, verden. 1145 00:56:04,746 --> 00:56:07,690 1146 00:56:07,690 --> 00:56:12,190 La oss se litt mer om hva syntaksen til Javascript ser ut. 1147 00:56:12,190 --> 00:56:16,330 Og spesielt, la oss sammenligne det med C og PHP, som vi har sett før. 1148 00:56:16,330 --> 00:56:20,610 >> I Javascript, vi kommer til å ha Var, navnet på variabelen, og deretter 1149 00:56:20,610 --> 00:56:21,690 den faktiske verdien. 1150 00:56:21,690 --> 00:56:26,170 Og vi ikke spesifiserer en type, bare som i PHP, men i motsetning til i meget C. 1151 00:56:26,170 --> 00:56:28,850 Så for eksempel, hvis vi ønsket for å lagre verdien 50 1152 00:56:28,850 --> 00:56:32,490 i C, ville vi har å si, hei, C, jeg vil ha et heltall, 1153 00:56:32,490 --> 00:56:35,076 Jeg kommer til å kalle det Jeg, og verdien er 50. 1154 00:56:35,076 --> 00:56:36,450 I PHP, er det litt enklere. 1155 00:56:36,450 --> 00:56:41,880 Vi sier hei, jeg vil ha en variabel heter jeg, og verdien er 50. 1156 00:56:41,880 --> 00:56:45,890 Svært likt, i Javascript, vi si hei, jeg vil ha en variabel kalt i, 1157 00:56:45,890 --> 00:56:47,080 verdien er 50. 1158 00:56:47,080 --> 00:56:52,140 Hver påfølgende tid som jeg bruker jeg, jeg trenger ikke å skrive var. 1159 00:56:52,140 --> 00:56:53,810 Det er bare jeg fra det punktet på. 1160 00:56:53,810 --> 00:56:58,660 På samme måte, i C, der når vi sier int i, vi bare bruker jeg. 1161 00:56:58,660 --> 00:57:00,340 Kjølig? 1162 00:57:00,340 --> 00:57:01,800 Greit. 1163 00:57:01,800 --> 00:57:03,710 >> Flytte til sløyfer, heldigvis, disse nesten 1164 00:57:03,710 --> 00:57:06,720 ser exactly-- Jeg tror de er nøyaktig det samme som hva 1165 00:57:06,720 --> 00:57:09,799 sløyfer kommer til å se ut i noe sånt som C der for loop 1166 00:57:09,799 --> 00:57:11,840 kommer til å ha tre- parts-- en initialisering, 1167 00:57:11,840 --> 00:57:13,640 en betingelse, og en oppdatering. 1168 00:57:13,640 --> 00:57:15,340 En stund loop, ser det nøyaktig samme. 1169 00:57:15,340 --> 00:57:16,390 Vi bare gi det en betingelse. 1170 00:57:16,390 --> 00:57:18,264 >> Og en gjør mens loop, igjen, nøyaktig det samme. 1171 00:57:18,264 --> 00:57:20,190 Vi gir det et vilkår. 1172 00:57:20,190 --> 00:57:24,510 La oss si at jeg ønsket å veksle over-- Jeg ønsket å gjøre noe fem ganger. 1173 00:57:24,510 --> 00:57:27,840 I C, kan vi skrive for init jeg er lik 0. 1174 00:57:27,840 --> 00:57:30,480 Jeg er mindre enn 5, i ++. 1175 00:57:30,480 --> 00:57:34,240 Eneste forskjellen, i Javascript, stedet for å si int i lik 0, 1176 00:57:34,240 --> 00:57:36,820 vi sier Var jeg er lik 0. 1177 00:57:36,820 --> 00:57:38,370 Vakker. 1178 00:57:38,370 --> 00:57:41,320 Det er den eneste forskjellen. 1179 00:57:41,320 --> 00:57:43,200 Eventuelle spørsmål om noe av det? 1180 00:57:43,200 --> 00:57:44,160 Ja. 1181 00:57:44,160 --> 00:57:48,480 >> PUBLIKUM: Så i PHP, det er det samme ting, bortsett men som en variabel? 1182 00:57:48,480 --> 00:57:49,564 Eller var det en VAR eksempel? 1183 00:57:49,564 --> 00:57:50,480 HANNAH Blumberg: Yeah. 1184 00:57:50,480 --> 00:57:52,310 Så i PHP, det kommer å være et dollartegn. 1185 00:57:52,310 --> 00:57:59,450 Så det kommer til å $ i equals 0, $ jeg er mindre enn 5, $ i ++. 1186 00:57:59,450 --> 00:58:02,490 Stort spørsmål. 1187 00:58:02,490 --> 00:58:04,570 >> Nå la oss snakke om funksjons erklæringer. 1188 00:58:04,570 --> 00:58:07,010 I C, når vi erklært funksjon, vi ga den et navn 1189 00:58:07,010 --> 00:58:08,490 og vi ga det noen parametere. 1190 00:58:08,490 --> 00:58:10,670 Og i begynnelsen, skrev vi den type. 1191 00:58:10,670 --> 00:58:12,440 I Javascript, alt vi trenger å gjøre er å skrive 1192 00:58:12,440 --> 00:58:15,080 nøkkelordet funksjon som sier, hei, Javascript, 1193 00:58:15,080 --> 00:58:16,570 Jeg er i ferd med å definere en funksjon. 1194 00:58:16,570 --> 00:58:18,520 >> I dette tilfellet har det navn sum. 1195 00:58:18,520 --> 00:58:20,820 Og det tar to argumenter, x og y. 1196 00:58:20,820 --> 00:58:23,280 Legg merke til at vi ikke bryr om hvilke typer x og y. 1197 00:58:23,280 --> 00:58:26,280 Og akkurat som C, har vi dette søkeordet retur, 1198 00:58:26,280 --> 00:58:29,140 slik at vi kan gjøre noe som avkastning x og y. 1199 00:58:29,140 --> 00:58:32,540 >> Og nå når vi har skrevet denne første funksjon, kan vi bruke sum hvor som helst. 1200 00:58:32,540 --> 00:58:34,740 Og det er helt greit. 1201 00:58:34,740 --> 00:58:37,530 En virkelig kule ting om Javascript som er veldig ulikt C 1202 00:58:37,530 --> 00:58:40,770 er at funksjoner kan bli behandlet som verdier. 1203 00:58:40,770 --> 00:58:43,895 Så vi kan gjøre noe sånt her der jeg antar at jeg dekke dette opp-- 1204 00:58:43,895 --> 00:58:46,400 Jeg dekket opp Var sum part-- og vi sa 1205 00:58:46,400 --> 00:58:49,850 funksjon xy er lik avkastning x pluss y. 1206 00:58:49,850 --> 00:58:52,140 >> Det er det som vil bli kalt en anonym funksjon. 1207 00:58:52,140 --> 00:58:53,920 Det er en funksjon uten navn. 1208 00:58:53,920 --> 00:58:56,290 Mens dette sier funksjon sum, blah, blah, blah, 1209 00:58:56,290 --> 00:58:59,340 dette ville bare si funksjon. 1210 00:58:59,340 --> 00:59:02,020 Men nå selv om jeg har dette anonym funksjon, 1211 00:59:02,020 --> 00:59:03,630 at funksjonen er egentlig bare en verdi. 1212 00:59:03,630 --> 00:59:05,160 Vi kan behandle det som en verdi. 1213 00:59:05,160 --> 00:59:10,180 >> Så vi kan lagre det i en variabel samme måten vi kunne lagre 50 i en variabel. 1214 00:59:10,180 --> 00:59:13,870 Så vi kan si, OK, jeg vil ha en variabel, det heter sum, 1215 00:59:13,870 --> 00:59:16,011 og det er denne funksjonen. 1216 00:59:16,011 --> 00:59:18,760 Så disse to tingene er faktisk kommer til å gjøre akkurat det samme, 1217 00:59:18,760 --> 00:59:21,576 men syntaksen er litt annerledes og slag av en morsom kommentar. 1218 00:59:21,576 --> 00:59:22,076 Yeah. 1219 00:59:22,076 --> 00:59:25,548 >> PUBLIKUM: Så du kan kalle en funksjon som var anonym ved å si: 1220 00:59:25,548 --> 00:59:28,244 sum brak 2, 5? 1221 00:59:28,244 --> 00:59:29,160 HANNAH Blumberg: Yeah. 1222 00:59:29,160 --> 00:59:32,280 Du kan kalle denne anonyme funksjon på samme måte. 1223 00:59:32,280 --> 00:59:33,350 Du ville gjøre sum (2, 5) ;. 1224 00:59:33,350 --> 00:59:36,180 1225 00:59:36,180 --> 00:59:38,200 Det ville være helt fint. 1226 00:59:38,200 --> 00:59:41,575 >> Hvis jeg ikke gjorde Var sum lik funksjonen, hvis jeg bare slettet 1227 00:59:41,575 --> 00:59:45,480 dette-- Jeg vet det er på min side, men late som jeg slettet dette-- deretter 1228 00:59:45,480 --> 00:59:46,964 at funksjonen er slags bare borte. 1229 00:59:46,964 --> 00:59:49,630 Du kan aldri bruke det igjen fordi du har ikke et navn for det. 1230 00:59:49,630 --> 00:59:53,497 Det er vanskelig å referere til noe du vet ikke hva jeg skal kalle. 1231 00:59:53,497 --> 00:59:54,080 Godt spørsmål. 1232 00:59:54,080 --> 00:59:54,580 Yeah. 1233 00:59:54,580 --> 00:59:59,580 >> PUBLIKUM: Kan du referere sum i andre steder med verdien av x pluss y? 1234 00:59:59,580 --> 01:00:01,940 >> HANNAH Blumberg: Kan du referanse sum i andre steder 1235 01:00:01,940 --> 01:00:03,360 med verdien x pluss y? 1236 01:00:03,360 --> 01:00:05,130 Jeg er ikke helt sikker på hva du mener. 1237 01:00:05,130 --> 01:00:10,582 >> PUBLIKUM: Så din fortid semi-anonym Funksjonen er sum er lik denne 1238 01:00:10,582 --> 01:00:14,452 anonym funksjon, så summen er nå en variabel som du can-- 1239 01:00:14,452 --> 01:00:15,410 HANNAH Blumberg: Høyre. 1240 01:00:15,410 --> 01:00:18,980 Så sum er den variable, men det er actually-- 1241 01:00:18,980 --> 01:00:23,770 slik sum er en variabel med verdien er funksjonen. 1242 01:00:23,770 --> 01:00:27,030 Så det er en funksjon, som er slags en merkelig ting å vikle hodet rundt 1243 01:00:27,030 --> 01:00:29,880 siden vi har spilt med C, og du kan ikke gjøre det i C. 1244 01:00:29,880 --> 01:00:32,679 Men nå kan vi kalle oppsummere samme måte som vi kan kalle summen her. 1245 01:00:32,679 --> 01:00:33,220 PUBLIKUM: OK. 1246 01:00:33,220 --> 01:00:33,970 HANNAH Blumberg: Yeah. 1247 01:00:33,970 --> 01:00:34,553 Godt spørsmål. 1248 01:00:34,553 --> 01:00:35,438 Yeah. 1249 01:00:35,438 --> 01:00:39,862 >> PUBLIKUM: Så vi ikke bruker prototyper i PHP eller Javascript? 1250 01:00:39,862 --> 01:00:42,070 HANNAH Blumberg: Nei, vi trenger ikke å bruke prototyper, 1251 01:00:42,070 --> 01:00:43,880 spesielt i Javascript. 1252 01:00:43,880 --> 01:00:49,380 Så en dårlig praksis ting som jeg er kommer til å si at du ikke bør gjøre 1253 01:00:49,380 --> 01:00:52,620 er at du ikke trenger å skrive var i = 50. 1254 01:00:52,620 --> 01:00:54,840 Du kan bare begynne å gjøre i = 50. 1255 01:00:54,840 --> 01:00:57,490 Og ville bare gjøre jeg en global variabel. 1256 01:00:57,490 --> 01:01:00,550 >> Det er veldig dårlig praksis å aldri si explicity Var jeg, 1257 01:01:00,550 --> 01:01:01,800 men det er noe du kan gjøre. 1258 01:01:01,800 --> 01:01:03,591 Tolken er ikke kommer til å kjefte på deg. 1259 01:01:03,591 --> 01:01:05,920 Javascript er ganske like, du kan gjøre hva du vil. 1260 01:01:05,920 --> 01:01:09,301 1261 01:01:09,301 --> 01:01:09,800 Åh unnskyld. 1262 01:01:09,800 --> 01:01:10,300 Det er to. 1263 01:01:10,300 --> 01:01:12,150 I de oransje bukser. 1264 01:01:12,150 --> 01:01:13,190 Gå videre. 1265 01:01:13,190 --> 01:01:14,390 >> PUBLIKUM: Nei, du går først. 1266 01:01:14,390 --> 01:01:16,765 >> PUBLIKUM: Nei, jeg sier bare Jeg har ikke min hånd opp. 1267 01:01:16,765 --> 01:01:20,248 1268 01:01:20,248 --> 01:01:20,748 OK. 1269 01:01:20,748 --> 01:01:26,604 Så hvis du skulle ringe den første gang, nå oppsummere, 1270 01:01:26,604 --> 01:01:29,864 vi kaller det på samme måte, x, y, som hver eneste gang? 1271 01:01:29,864 --> 01:01:30,780 HANNAH Blumberg: Yeah. 1272 01:01:30,780 --> 01:01:32,572 Så disse to vesentlige gjøre det samme. 1273 01:01:32,572 --> 01:01:35,113 PUBLIKUM: Og hva er fordelen ved hjelp av den ene eller den andre? 1274 01:01:35,113 --> 01:01:37,500 HANNAH Blumberg: Ingen fordel ved hjelp av den ene eller den andre. 1275 01:01:37,500 --> 01:01:40,080 Jeg ville bare vise dere to ulike deler av syntaks. 1276 01:01:40,080 --> 01:01:42,770 Mange ganger hvor anonym funksjoner har en hensikt 1277 01:01:42,770 --> 01:01:48,220 er hvis argumentet til en annen funksjonen skal være en funksjon. 1278 01:01:48,220 --> 01:01:50,600 Og vi vil se at i bare et sekund med Ajax. 1279 01:01:50,600 --> 01:01:53,577 >> Så hvis det ikke gjør noe fornuftig, lagre den på baksiden av hodet. 1280 01:01:53,577 --> 01:01:55,660 Det er der en anonym Funksjonen kan være nyttig 1281 01:01:55,660 --> 01:01:58,284 fordi det er egentlig ikke verdt gi den et navn siden vi er bare 1282 01:01:58,284 --> 01:01:59,443 kommer til å bruke det en gang. 1283 01:01:59,443 --> 01:02:00,370 Yeah. 1284 01:02:00,370 --> 01:02:03,635 >> PUBLIKUM: Hvis x og y endring senere på, vil oppsummere endre så vel? 1285 01:02:03,635 --> 01:02:06,510 HANNAH Blumberg: Hvis x og y endring senere, vil oppsummere endre så vel? 1286 01:02:06,510 --> 01:02:08,840 Så dette er faktisk jeg tror noe som er, 1287 01:02:08,840 --> 01:02:12,260 igjen, det bare føles veldig annerledes fra C. Dette er ikke en verdi. 1288 01:02:12,260 --> 01:02:13,620 Det er ikke fem. 1289 01:02:13,620 --> 01:02:15,550 Det er bare selve funksjonen. 1290 01:02:15,550 --> 01:02:19,110 Slik at så snart du gir den parametere, Da vil du faktisk beregne en verdi. 1291 01:02:19,110 --> 01:02:21,193 >> MARIA ZLATKOVA: Og så du kan kalle funksjonen 1292 01:02:21,193 --> 01:02:23,272 og bruke den til å få noen verdi. 1293 01:02:23,272 --> 01:02:24,230 HANNAH Blumberg: Høyre. 1294 01:02:24,230 --> 01:02:25,250 Nettopp. 1295 01:02:25,250 --> 01:02:25,863 Yeah. 1296 01:02:25,863 --> 01:02:27,946 >> PUBLIKUM: Så hvis du bare lagre den i variabelen, 1297 01:02:27,946 --> 01:02:31,430 som var x er lik summen av to values-- 1298 01:02:31,430 --> 01:02:32,420 >> HANNAH Blumberg: Yeah. 1299 01:02:32,420 --> 01:02:35,320 Så du kan bare gjøre Var sum er lik summen av to verdier. 1300 01:02:35,320 --> 01:02:37,670 Yeah. 1301 01:02:37,670 --> 01:02:38,680 Eventuelle andre spørsmål? 1302 01:02:38,680 --> 01:02:39,642 Yeah. 1303 01:02:39,642 --> 01:02:42,047 >> PUBLIKUM: Men ville det forvirre sum og sum? 1304 01:02:42,047 --> 01:02:45,062 Som hvis du ringer variabel sum, ville du kaller funksjonen sum? 1305 01:02:45,062 --> 01:02:45,895 HANNAH Blumberg: Mm. 1306 01:02:45,895 --> 01:02:46,395 Mm. 1307 01:02:46,395 --> 01:02:51,253 Hvis du gjorde noe som, er lik summen sum 2, 5? 1308 01:02:51,253 --> 01:02:53,170 >> PUBLIKUM: Yeah. 1309 01:02:53,170 --> 01:02:56,465 >> HANNAH Blumberg: Jeg tror at vil overskrive verdien av summen. 1310 01:02:56,465 --> 01:02:59,290 Så en annen interessant ting om Javascript 1311 01:02:59,290 --> 01:03:02,950 er at en enkelt variabel kan ta på en haug av forskjellige typer. 1312 01:03:02,950 --> 01:03:03,790 Dårlig praksis. 1313 01:03:03,790 --> 01:03:06,280 Du bør ikke gjøre noe som det du nettopp sa. 1314 01:03:06,280 --> 01:03:10,240 >> Men i C, hvis jeg er satt lik et helt tall, 1315 01:03:10,240 --> 01:03:13,570 vi vet at det er aldri kommer til å bli en streng. 1316 01:03:13,570 --> 01:03:15,670 Dette er ikke tilfelle i Javascript. 1317 01:03:15,670 --> 01:03:17,770 Ja, godt spørsmål. 1318 01:03:17,770 --> 01:03:20,151 Alt annet? 1319 01:03:20,151 --> 01:03:20,650 Greit. 1320 01:03:20,650 --> 01:03:21,850 Gjør alt rett tid. 1321 01:03:21,850 --> 01:03:23,050 Holde går. 1322 01:03:23,050 --> 01:03:25,200 Greit. 1323 01:03:25,200 --> 01:03:27,780 >> Hvis vi ser på en rekke i Javascript, her 1324 01:03:27,780 --> 01:03:30,250 en rask eksempel på en rekke strenger. 1325 01:03:30,250 --> 01:03:31,967 Og arrays kan vokse dynamisk. 1326 01:03:31,967 --> 01:03:33,675 De har ikke en med fast størrelse på samme måte 1327 01:03:33,675 --> 01:03:37,990 som de gjør i C. Vi kan få tilgang til elementer med bare hakeparenteser. 1328 01:03:37,990 --> 01:03:41,720 >> Det ser mye som PHP og mye som C, der kan vi si, i dette tilfellet 1329 01:03:41,720 --> 01:03:48,360 hvis jeg ønsket ordet Javascript, ville jeg har arr hakeparenteser med en 0, 1, 2. 1330 01:03:48,360 --> 01:03:51,450 1331 01:03:51,450 --> 01:03:55,390 Og så hvis du husker i C når vi ønsket å få lengden av en matrise, 1332 01:03:55,390 --> 01:03:56,820 det var veldig irriterende. 1333 01:03:56,820 --> 01:03:58,460 Men i Javascript, super lett. 1334 01:03:58,460 --> 01:03:59,910 Alt vi gjør, .length. 1335 01:03:59,910 --> 01:04:01,120 Gir det lengdene. 1336 01:04:01,120 --> 01:04:01,892 Det er alt. 1337 01:04:01,892 --> 01:04:03,140 >> PUBLIKUM: Det er enkelt. 1338 01:04:03,140 --> 01:04:05,306 >> HANNAH Blumberg: Ja, gjør livet mye enklere. 1339 01:04:05,306 --> 01:04:08,950 1340 01:04:08,950 --> 01:04:11,560 OK, object-- ikke der. 1341 01:04:11,560 --> 01:04:15,480 Objekter i Javascript følelse mye som structs i C 1342 01:04:15,480 --> 01:04:18,280 og assosiative arrays i PHP. 1343 01:04:18,280 --> 01:04:20,270 Så det vi har sett en Mange er JSON, som 1344 01:04:20,270 --> 01:04:23,150 står for Javascript Object Notation. 1345 01:04:23,150 --> 01:04:25,550 Og det er i utgangspunktet en måte strukturere våre data. 1346 01:04:25,550 --> 01:04:27,880 >> Så la oss se et eksempel, trolig den enkleste. 1347 01:04:27,880 --> 01:04:32,540 Så her er et eksempel på et objekt som lagrer klassen, CS50. 1348 01:04:32,540 --> 01:04:37,790 Og når jeg sier klasse, mener jeg selvfølgelig, ikke like-- yeah, selvfølgelig, CS50. 1349 01:04:37,790 --> 01:04:40,730 Og du vil se at alt i objektet 1350 01:04:40,730 --> 01:04:43,526 kommer til å ligge i klammeparentes. 1351 01:04:43,526 --> 01:04:48,260 >> Og vi begynner å assosiere feltnavn eller nøkler med forskjellige verdier. 1352 01:04:48,260 --> 01:04:52,920 Så kan du begynne å se hvordan denne typen føles som en assosiativ array i PHP. 1353 01:04:52,920 --> 01:04:57,450 Så vi kommer til å knytte feltet eller nøkkelen navn, selvfølgelig, med strengen, 1354 01:04:57,450 --> 01:04:58,510 CS50. 1355 01:04:58,510 --> 01:04:59,940 >> Vi kommer til å ha en instruktør. 1356 01:04:59,940 --> 01:05:00,940 Vi kommer til å ha TFS. 1357 01:05:00,940 --> 01:05:05,240 Vi kommer til å ha flere psets og vi kommer til å ha spilt inn. 1358 01:05:05,240 --> 01:05:10,720 Og en kul ting å merke seg er alle disse tingene har forskjellige typer, 1359 01:05:10,720 --> 01:05:12,020 og det er helt greit. 1360 01:05:12,020 --> 01:05:15,330 >> Det er greit for et objekt, faktisk, det sannsynligvis forventet for et objekt 1361 01:05:15,330 --> 01:05:19,620 å ha en kombinasjon av strenger og tall og Booleans og arrays 1362 01:05:19,620 --> 01:05:23,420 og alt annet du kanskje ønsker å ha inni objektet. 1363 01:05:23,420 --> 01:05:28,570 Og merk at disse kommer til å være navnene eller tastene, og da er vi bare 1364 01:05:28,570 --> 01:05:30,300 sette den lik med litt kolon. 1365 01:05:30,300 --> 01:05:32,015 >> PUBLIKUM: Hva gjør JSON mener? 1366 01:05:32,015 --> 01:05:33,890 HANNAH Blumberg: Hva nøyaktig gjør JSON mener? 1367 01:05:33,890 --> 01:05:36,470 JSON bare står for Javascript Object Notation. 1368 01:05:36,470 --> 01:05:38,430 Det er bare en måte å formatering. 1369 01:05:38,430 --> 01:05:40,040 Yeah. 1370 01:05:40,040 --> 01:05:41,800 Det er en måte å formatere våre data. 1371 01:05:41,800 --> 01:05:43,620 >> I C, er det structs. 1372 01:05:43,620 --> 01:05:45,800 I PHP, er det assosiative arrays. 1373 01:05:45,800 --> 01:05:47,120 I Javascript, har vi stedene. 1374 01:05:47,120 --> 01:05:48,969 >> PUBLIKUM: Så CS50 er et objekt? 1375 01:05:48,969 --> 01:05:51,010 HANNAH Blumberg: CS50 er gjenstanden i dette tilfellet. 1376 01:05:51,010 --> 01:05:54,830 1377 01:05:54,830 --> 01:05:57,880 Nå, hvordan gjør vi faktisk tilgang disse feltene eller endre disse feltene. 1378 01:05:57,880 --> 01:06:03,920 For eksempel at vi bestemte oss for at du ønsket en færre PSet dette semesteret. 1379 01:06:03,920 --> 01:06:06,300 I stedet for ni, er vi bare nødt til åtte. 1380 01:06:06,300 --> 01:06:08,240 Hvordan ville vi endre på det? 1381 01:06:08,240 --> 01:06:09,436 >> Oh, feil vei. 1382 01:06:09,436 --> 01:06:11,060 Det er to måter som vi kan gjøre det. 1383 01:06:11,060 --> 01:06:13,490 Nummer én er med prikken notasjon og nummer to 1384 01:06:13,490 --> 01:06:15,750 er med hakeparentes notasjon. 1385 01:06:15,750 --> 01:06:19,720 Så, for eksempel hvis jeg ønsket å endre eller tilgang 1386 01:06:19,720 --> 01:06:26,820 den psets feltet i vår CS50 objekt, hva jeg ville gjøre er CS50.psets, 1387 01:06:26,820 --> 01:06:30,770 så navnet på objektet dot navnet på feltet eller nøkkelen. 1388 01:06:30,770 --> 01:06:37,120 >> Svært likt, det er akkurat tilsvar å gjøre CS50, og deretter 1389 01:06:37,120 --> 01:06:42,050 i hakeparentes, psets. 1390 01:06:42,050 --> 01:06:42,837 Kjølig? 1391 01:06:42,837 --> 01:06:44,298 Yeah. 1392 01:06:44,298 --> 01:06:47,707 >> PUBLIKUM: Så er JSON teknisk Javascript fortsatt, 1393 01:06:47,707 --> 01:06:51,814 selv om det i de psets vi skille det ut [uhørbart]? 1394 01:06:51,814 --> 01:06:52,730 HANNAH Blumberg: Sure. 1395 01:06:52,730 --> 01:06:56,290 Så spørsmålet er, er Javascript og JSON tilsvarende? 1396 01:06:56,290 --> 01:07:00,750 Så JSON er notasjon, i utgangspunktet den måten at vi skriver ut 1397 01:07:00,750 --> 01:07:02,700 et objekt fra Javascript. 1398 01:07:02,700 --> 01:07:05,190 Så de er ikke akkurat det samme. 1399 01:07:05,190 --> 01:07:08,950 >> Jeg vil si Javascript, der er objekter i Javascript. 1400 01:07:08,950 --> 01:07:12,590 JSON tar disse objektene og skriver dem og viser dem 1401 01:07:12,590 --> 01:07:15,160 eller lagrer dem på en fin måte. 1402 01:07:15,160 --> 01:07:18,110 Så JSON er ikke et programmerings språket slik at Javascript er. 1403 01:07:18,110 --> 01:07:20,900 Det er bare notasjon for våre objekter i Javascript. 1404 01:07:20,900 --> 01:07:21,400 Yeah. 1405 01:07:21,400 --> 01:07:24,144 >> PUBLIKUM: Så hva [Uhørbart] fullføre? 1406 01:07:24,144 --> 01:07:25,060 HANNAH Blumberg: Sure. 1407 01:07:25,060 --> 01:07:27,727 Så dette faktisk gjør ingenting. 1408 01:07:27,727 --> 01:07:28,935 Dette er bare en måte å få tilgang. 1409 01:07:28,935 --> 01:07:31,393 Så la oss si at vi ønsket å endre antall oppgavesett 1410 01:07:31,393 --> 01:07:32,450 9-8. 1411 01:07:32,450 --> 01:07:34,383 Det vi gjør er å gjøre noe som CS50.psets = 8 ;. 1412 01:07:34,383 --> 01:07:38,500 1413 01:07:38,500 --> 01:07:39,400 >> Ja, stort spørsmål. 1414 01:07:39,400 --> 01:07:40,733 Dette er bare for å vise deg syntaks. 1415 01:07:40,733 --> 01:07:43,620 Faktisk ikke gjøre noe nyttig. 1416 01:07:43,620 --> 01:07:46,085 Noen spørsmål? 1417 01:07:46,085 --> 01:07:48,210 Flytte rett sammen. 1418 01:07:48,210 --> 01:07:51,960 >> Så la oss se på en rask eksempel på hvordan Javascript fungerer fordi jeg fortalte deg det 1419 01:07:51,960 --> 01:07:55,170 gjør alle disse kule ting og tillater oss å endre nettsider. 1420 01:07:55,170 --> 01:07:56,970 La oss faktisk se den i aksjon. 1421 01:07:56,970 --> 01:07:59,850 Så ta, for eksempel denne HTML-fil. 1422 01:07:59,850 --> 01:08:04,350 >> Og ting jeg vil du skal fokusere på er denne koden, som er en knapp, 1423 01:08:04,350 --> 01:08:06,182 med id Search_Button. 1424 01:08:06,182 --> 01:08:08,670 Det er bare på den siden. 1425 01:08:08,670 --> 01:08:10,690 Så nå la oss se hva vi kan faktisk gjør. 1426 01:08:10,690 --> 01:08:12,560 >> Vel, antar at når du klikker denne knappen, 1427 01:08:12,560 --> 01:08:16,010 vi ønsker å gjøre en alert-- du klikket på knappen. 1428 01:08:16,010 --> 01:08:17,840 La oss se hvordan vi kan gjøre det. 1429 01:08:17,840 --> 01:08:23,869 Så window.onload-- dette er ikke noe som du har sett i klassen, derfor 1430 01:08:23,869 --> 01:08:26,180 trenger ikke å vite det for quiz. 1431 01:08:26,180 --> 01:08:33,660 Men dette utgangspunktet sier, OK, samtale denne funksjonen når vinduet belastninger. 1432 01:08:33,660 --> 01:08:35,080 >> Så det er bare slags oppsett kode. 1433 01:08:35,080 --> 01:08:36,390 Ikke bekymre deg så mye om det. 1434 01:08:36,390 --> 01:08:39,170 Det jeg vil at du skal fokusere på er her. 1435 01:08:39,170 --> 01:08:44,020 Vi sier Var searchButton lik document.getElementById Search_Button. 1436 01:08:44,020 --> 01:08:46,450 >> Så som du kanskje skjønner, Hva dette er den sier, 1437 01:08:46,450 --> 01:08:50,920 OK, gå finne elementet med ID Search_Button. 1438 01:08:50,920 --> 01:08:52,790 Og nå har vi at faktiske element og jeg er 1439 01:08:52,790 --> 01:08:56,279 skal lagre den i en variabel searchButton. 1440 01:08:56,279 --> 01:09:00,651 Og nå kan vi faktisk bruke det elementet og endre den, eller få tilgang til sine verdier, 1441 01:09:00,651 --> 01:09:01,359 ting som det. 1442 01:09:01,359 --> 01:09:04,649 Vi kan faktisk begynne å engasjere seg med nettsiden. 1443 01:09:04,649 --> 01:09:10,330 >> Så her jeg si, OK, nå som jeg har den knappen, når den blir klikket, 1444 01:09:10,330 --> 01:09:12,859 kalle denne anonym funksjon. 1445 01:09:12,859 --> 01:09:16,811 Så dette er hvor anonym funksjoner bli nyttig. 1446 01:09:16,811 --> 01:09:18,060 Og hva funksjonen gjør? 1447 01:09:18,060 --> 01:09:20,529 Vel, det bare kaller denne varsling og den sier, 1448 01:09:20,529 --> 01:09:22,910 du klikket på Søk-knappen. 1449 01:09:22,910 --> 01:09:29,670 >> Så hva vil skje hvis jeg går dit denne HTML bor og jeg klikker på knappen, 1450 01:09:29,670 --> 01:09:33,729 Jeg får en fancy liten varsling som sier at du har klikket på knappen. 1451 01:09:33,729 --> 01:09:40,710 Så ting å fokusere på her-- document.getElementById 1452 01:09:40,710 --> 01:09:44,960 får en bestemt HTML element med den gitte ID. 1453 01:09:44,960 --> 01:09:48,529 Og nå kan vi sette hva som skal skje når 1454 01:09:48,529 --> 01:09:50,702 det bestemt element klikkes. 1455 01:09:50,702 --> 01:09:52,670 >> PUBLIKUM: Vi må sette alt dette i? 1456 01:09:52,670 --> 01:09:53,162 >> HANNAH Blumberg: Sorry? 1457 01:09:53,162 --> 01:09:55,130 >> PUBLIKUM: Må vi fysisk kode alt dette? 1458 01:09:55,130 --> 01:09:56,340 >> HANNAH Blumberg: Må vi fysisk kode alt dette? 1459 01:09:56,340 --> 01:09:56,839 Ja. 1460 01:09:56,839 --> 01:09:58,120 Er ikke dette litt irriterende? 1461 01:09:58,120 --> 01:10:00,032 Dette er en mye kode. 1462 01:10:00,032 --> 01:10:01,574 >> PUBLIKUM: Du kan importere noe. 1463 01:10:01,574 --> 01:10:02,532 HANNAH Blumberg: Høyre. 1464 01:10:02,532 --> 01:10:03,610 Vi kunne bruke noe. 1465 01:10:03,610 --> 01:10:08,140 Og i particular-- oh, er det forteller meg at jeg må lære delen. 1466 01:10:08,140 --> 01:10:11,061 Spesielt, la oss bruke biblioteket jQuery, 1467 01:10:11,061 --> 01:10:13,060 fordi det var virkelig lang og veldig irriterende 1468 01:10:13,060 --> 01:10:16,860 og jeg ønsker å være i stand til å forenkle det og gjøre det kortere og enklere å skrive. 1469 01:10:16,860 --> 01:10:19,810 >> Så jQuery er et Javascript-bibliotek. 1470 01:10:19,810 --> 01:10:24,930 Så Javascript er programmering språk; jQuery er et bibliotek. 1471 01:10:24,930 --> 01:10:27,190 Og det gjør en haug med ting enklere. 1472 01:10:27,190 --> 01:10:33,230 Det gjør endring og går på tvers et HTML-dokument mye enklere. 1473 01:10:33,230 --> 01:10:35,030 >> Det gjør håndtering hendelser enklere. 1474 01:10:35,030 --> 01:10:37,580 Det gjør animasjon enklere og det gjør Ajax enklere. 1475 01:10:37,580 --> 01:10:40,140 Så la oss hoppe inn to av disse tingene akkurat nå. 1476 01:10:40,140 --> 01:10:40,900 Unnskyld meg. 1477 01:10:40,900 --> 01:10:42,620 Før vi gjør det, noen grunnleggende syntaks. 1478 01:10:42,620 --> 01:10:46,870 >> Dette er hva de fleste samtaler til jQuery biblioteket se ut. 1479 01:10:46,870 --> 01:10:50,520 Vi bruker dette dollar sign-- ingen forbindelse tegn til PHP, 1480 01:10:50,520 --> 01:10:56,030 bare inconvenient-- navnet på en velger, prikk, og deretter en handling. 1481 01:10:56,030 --> 01:10:58,860 Så la oss se litt konkrete eksempler på det. 1482 01:10:58,860 --> 01:11:02,980 >> Så dette faktisk er den samme kode fra arrangementet lysbildet. 1483 01:11:02,980 --> 01:11:08,740 Så dette lenge, stygge ting blir dette mye hyggeligere, mindre ting. 1484 01:11:08,740 --> 01:11:10,370 Så la oss prøve å bryte dette ned. 1485 01:11:10,370 --> 01:11:17,090 Dette sier, OK, jQuery-- dette dollar sign-- jQuery, finne meg i vinduet. 1486 01:11:17,090 --> 01:11:18,480 Så det er velgeren. 1487 01:11:18,480 --> 01:11:21,800 >> Når det lastes, kaller denne funksjonen. 1488 01:11:21,800 --> 01:11:23,880 Så det er alt inni. 1489 01:11:23,880 --> 01:11:24,380 OK. 1490 01:11:24,380 --> 01:11:25,740 Så langt så bra? 1491 01:11:25,740 --> 01:11:26,750 Greit. 1492 01:11:26,750 --> 01:11:32,970 >> Nå, jQuery, finne meg Saken med ID Search_Button. 1493 01:11:32,970 --> 01:11:36,090 Og hva det klikkes, kalle denne funksjonen. 1494 01:11:36,090 --> 01:11:37,900 Og så denne funksjonen er akkurat det samme. 1495 01:11:37,900 --> 01:11:41,052 Bare gjøre en liten bit av varsling, du klikket på Søk-knappen. 1496 01:11:41,052 --> 01:11:42,650 >> Så det er veldig fint. 1497 01:11:42,650 --> 01:11:46,260 Det virkelig kondenserer og forenkler vår kode. 1498 01:11:46,260 --> 01:11:49,030 Hvordan visste jeg at det er ID Search_Button 1499 01:11:49,030 --> 01:11:50,960 og ikke liker klassen Search_Button? 1500 01:11:50,960 --> 01:11:52,024 >> PUBLIKUM: Hashtag? 1501 01:11:52,024 --> 01:11:52,940 HANNAH Blumberg: Yeah. 1502 01:11:52,940 --> 01:11:56,450 Denne hash symbol, er det akkurat som CSS. 1503 01:11:56,450 --> 01:12:00,080 Så husk, med CSS, når vi ønsket å velge noe av ID, 1504 01:12:00,080 --> 01:12:01,590 vi brukte firkanttegn. 1505 01:12:01,590 --> 01:12:05,400 Og når vi ønsket å velge noe av klasse, vi bruker punktum. 1506 01:12:05,400 --> 01:12:06,870 Flott. 1507 01:12:06,870 --> 01:12:08,230 Gir mening? 1508 01:12:08,230 --> 01:12:11,500 Så jQuery er ment å bare gjøre livet vårt enklere. 1509 01:12:11,500 --> 01:12:12,000 Yeah. 1510 01:12:12,000 --> 01:12:15,660 >> PUBLIKUM: Så jeg er litt forvirret til hvordan den anonyme funksjonen fungerer. 1511 01:12:15,660 --> 01:12:19,027 Vet du navnet på denne anonymouse funksjon, fungere? 1512 01:12:19,027 --> 01:12:20,594 Hvordan er det heter? 1513 01:12:20,594 --> 01:12:21,510 HANNAH Blumberg: Sure. 1514 01:12:21,510 --> 01:12:25,812 Så funksjonen er bare et søkeord som sier, jeg er i ferd med å definere en funksjon. 1515 01:12:25,812 --> 01:12:26,520 PUBLIKUM: Oh, OK. 1516 01:12:26,520 --> 01:12:27,353 HANNAH Blumberg: OK? 1517 01:12:27,353 --> 01:12:32,120 Og så passerer vi det som en argument to-- la oss ta 1518 01:12:32,120 --> 01:12:37,040 denne indre one-- til klikk-funksjonen. 1519 01:12:37,040 --> 01:12:39,420 Så ja, slik at funksjon, dette anonym funksjon, 1520 01:12:39,420 --> 01:12:40,910 blir en faktisk argument. 1521 01:12:40,910 --> 01:12:43,632 Så husk i Javascript, vi kan behandle funksjoner som verdier. 1522 01:12:43,632 --> 01:12:44,340 PUBLIKUM: Oh, OK. 1523 01:12:44,340 --> 01:12:45,256 HANNAH Blumberg: Yeah. 1524 01:12:45,256 --> 01:12:46,035 Jeg liker at "oh." 1525 01:12:46,035 --> 01:12:47,490 Fin. 1526 01:12:47,490 --> 01:12:49,915 Andre spørsmål? 1527 01:12:49,915 --> 01:12:50,505 Tid? 1528 01:12:50,505 --> 01:12:51,380 MARIA ZLATKOVA: Good. 1529 01:12:51,380 --> 01:12:52,760 God. 1530 01:12:52,760 --> 01:12:54,210 >> HANNAH Blumberg: Awesome. 1531 01:12:54,210 --> 01:12:55,720 Noen kjappe nyttig jQuery. 1532 01:12:55,720 --> 01:12:57,559 Jeg kommer ikke til å gå gjennom alle disse. 1533 01:12:57,559 --> 01:12:59,350 Disse slides vil være opp online litt 1534 01:12:59,350 --> 01:13:02,040 senere, slik at du kan sjekke det ut litt senere. 1535 01:13:02,040 --> 01:13:07,120 Men i utgangspunktet, den generelle Mønsteret holder der vi sier, 1536 01:13:07,120 --> 01:13:11,510 OK, hei, jQuery, her er min velgeren og så her er en handling. 1537 01:13:11,510 --> 01:13:15,940 Og du kan gjøre ting som tilgang til Verdien av et skjema, få tilgang til noen HTML, 1538 01:13:15,940 --> 01:13:19,195 kontroll på hva som skjer når brukeren sender inn et skjema, sånne ting. 1539 01:13:19,195 --> 01:13:20,106 Ja. 1540 01:13:20,106 --> 01:13:22,090 >> PUBLIKUM: Så i eksamen, vi kommer til å trenge 1541 01:13:22,090 --> 01:13:25,066 å vite ganske mye fra dokumentasjonen jQuery. 1542 01:13:25,066 --> 01:13:31,018 Så gitt at vi kopiere / lim inn jQuery dokumentasjon til vår jukselapp, 1543 01:13:31,018 --> 01:13:32,506 hvor er linjen trukket? 1544 01:13:32,506 --> 01:13:33,957 Som hvor mange trenger vi å vite? 1545 01:13:33,957 --> 01:13:35,290 HANNAH Blumberg: Great spørsmålet. 1546 01:13:35,290 --> 01:13:37,765 Spørsmålet er hovedsak gitt at du 1547 01:13:37,765 --> 01:13:41,330 får ikke tilgang til dokumentasjon jQuery i løpet av testen, hvor mye skal du 1548 01:13:41,330 --> 01:13:41,830 kjenne til? 1549 01:13:41,830 --> 01:13:45,540 Vi ville ikke forvente deg å komme opp med noen tilfeldig funksjon 1550 01:13:45,540 --> 01:13:47,240 at vi forventer du til Google. 1551 01:13:47,240 --> 01:13:52,930 >> Ting som er fritt vilt er jeg ville sier bare slags generell syntaks, 1552 01:13:52,930 --> 01:13:58,310 å være i stand til å velge ved ID og av class-- så akkurat som CSS. 1553 01:13:58,310 --> 01:14:01,876 Og deretter selve funksjonene seg selv, vil vi trolig fortelle deg. 1554 01:14:01,876 --> 01:14:02,376 Yeah. 1555 01:14:02,376 --> 01:14:05,591 >> PUBLIKUM: Så når du velger av klassen ville bety dot. 1556 01:14:05,591 --> 01:14:06,840 HANNAH Blumberg: Ja, akkurat. 1557 01:14:06,840 --> 01:14:07,340 God. 1558 01:14:07,340 --> 01:14:10,461 Når du velger av klassen, kommer det til å bli prikk i stedet for firkanttegn. 1559 01:14:10,461 --> 01:14:10,960 Ja. 1560 01:14:10,960 --> 01:14:12,710 >> PUBLIKUM: Ville du gå over forskjellen 1561 01:14:12,710 --> 01:14:14,310 mellom valg av ID og av klasse? 1562 01:14:14,310 --> 01:14:14,560 >> HANNAH Blumberg: Sure. 1563 01:14:14,560 --> 01:14:17,510 Forskjellen mellom å velge ID og velge av klasse. 1564 01:14:17,510 --> 01:14:20,685 Så som Maria sa en litt tidligere, er det 1565 01:14:20,685 --> 01:14:26,280 kan bare være en HTML-elementet med en gitt id, mens klasse 1566 01:14:26,280 --> 01:14:29,740 det gir oss mulighet til å gruppere en haug av forskjellige elementer sammen, 1567 01:14:29,740 --> 01:14:34,300 så ting som er relatert, men ikke akkurat det samme. 1568 01:14:34,300 --> 01:14:35,685 Betyr det spørsmålet? 1569 01:14:35,685 --> 01:14:36,200 Awesome. 1570 01:14:36,200 --> 01:14:37,194 Ja. 1571 01:14:37,194 --> 01:14:40,680 >> PUBLIKUM: Hva om du har flere ting som er i samme klasse? 1572 01:14:40,680 --> 01:14:42,150 >> HANNAH Blumberg: Hva skjer hvis du har flere ting som 1573 01:14:42,150 --> 01:14:43,280 er i samme klasse? 1574 01:14:43,280 --> 01:14:45,829 Så, for eksempel hvis vi er bare ved hjelp av ren Javascript, 1575 01:14:45,829 --> 01:14:48,120 vi ville gjøre noe sånt document.getElementsByClass. 1576 01:14:48,120 --> 01:14:52,280 1577 01:14:52,280 --> 01:14:56,320 Og så hva som faktisk gjør er avkastningen en rekke elementer. 1578 01:14:56,320 --> 01:14:59,517 >> Og du må enten iterere over dem eller finne hvilken du ønsker. 1579 01:14:59,517 --> 01:15:01,350 Det kommer ikke til å gi man et enkelt element. 1580 01:15:01,350 --> 01:15:03,450 Det kommer til å gi deg en rekke elementer. 1581 01:15:03,450 --> 01:15:05,280 Stort spørsmål. 1582 01:15:05,280 --> 01:15:07,700 Alt annet? 1583 01:15:07,700 --> 01:15:09,520 Awesome. 1584 01:15:09,520 --> 01:15:12,860 >> Så jeg tror at hvis du er kjent med noen jQuery du så i PSet, 1585 01:15:12,860 --> 01:15:15,600 du bør være godt å gå. 1586 01:15:15,600 --> 01:15:16,325 Spørsmål? 1587 01:15:16,325 --> 01:15:17,610 Å nei. 1588 01:15:17,610 --> 01:15:18,859 Jeg må virkelig lære. 1589 01:15:18,859 --> 01:15:19,358 Slappe av. 1590 01:15:19,358 --> 01:15:20,035 Det blir fin. 1591 01:15:20,035 --> 01:15:20,660 Jeg skal komme dit. 1592 01:15:20,660 --> 01:15:24,670 1593 01:15:24,670 --> 01:15:26,870 >> La oss snakke om Ajax. 1594 01:15:26,870 --> 01:15:31,350 Så Ajax kommer til å være a-- godt, la oss starte med hva det står for. 1595 01:15:31,350 --> 01:15:32,350 Det er et akronym. 1596 01:15:32,350 --> 01:15:35,855 Det står for Asynchronous Javascript og XML. 1597 01:15:35,855 --> 01:15:39,800 Og XML er i utgangspunktet kommer til å være [Uhørbart] med en type våre data. 1598 01:15:39,800 --> 01:15:42,100 Men vi har faktisk ikke brukt XML. 1599 01:15:42,100 --> 01:15:43,430 I stedet, vi bare bruke JSON. 1600 01:15:43,430 --> 01:15:48,350 >> Så i utgangspunktet, er det noen data-- asynkron, Javascript og data, 1601 01:15:48,350 --> 01:15:50,040 i dette tilfellet, JSON. 1602 01:15:50,040 --> 01:15:52,820 Og målet vårt, som vi har nevnt litt tidligere, 1603 01:15:52,820 --> 01:15:56,880 er å være i stand til å foreta en forespørsel, har denne forespørselen gjøre 1604 01:15:56,880 --> 01:16:00,700 sin ting i bakgrunn, men fortsetter 1605 01:16:00,700 --> 01:16:02,550 gjøre hva vi var tenkt å gjøre. 1606 01:16:02,550 --> 01:16:06,650 Og så når denne informasjonen er klar, så får vi innlemme det. 1607 01:16:06,650 --> 01:16:08,470 >> Så la oss se hva denne faktisk ser ut. 1608 01:16:08,470 --> 01:16:11,210 Og dette, bør du være litt kjent 1609 01:16:11,210 --> 01:16:13,680 fra pset8, den du bare slått på. 1610 01:16:13,680 --> 01:16:16,200 Så her er en gyldig jQuery funksjon som vi kan 1611 01:16:16,200 --> 01:16:18,250 ønsker å vite om-- dette dollartegn. 1612 01:16:18,250 --> 01:16:21,500 Så det sier jQuery funksjon, .getJson. 1613 01:16:21,500 --> 01:16:25,020 >> Og hva denne funksjonen gjør er det tar en URL og noen parameters-- 1614 01:16:25,020 --> 01:16:28,000 så jeg tror i tilfelle av pset8, var det som, 1615 01:16:28,000 --> 01:16:33,520 URL var articles.php og parametere var go = noen postnummer. 1616 01:16:33,520 --> 01:16:41,580 Og den sier, OK, gjør en forespørsel til denne nettadressen med de gitte parametre. 1617 01:16:41,580 --> 01:16:43,480 Og som bare skjer. 1618 01:16:43,480 --> 01:16:47,730 >> Når den er ferdig, er det enten kommer til å fullføre 1619 01:16:47,730 --> 01:16:49,370 eller det kommer til å mislykkes. 1620 01:16:49,370 --> 01:16:53,480 Så dette er tilsvarende samtale Rob og be ham om å gjøre noe. 1621 01:16:53,480 --> 01:17:00,260 Og så når han ringer tilbake, er han enten kommer til å si jeg er ferdig eller jeg mislyktes. 1622 01:17:00,260 --> 01:17:04,030 >> Så i tilfelle hvor du er gjort, sier du, OK, jeg er ferdig. 1623 01:17:04,030 --> 01:17:05,980 Og så kaller denne funksjonen. 1624 01:17:05,980 --> 01:17:08,915 I dette tilfellet kommer det til å være en funksjon som tar litt informasjon. 1625 01:17:08,915 --> 01:17:12,890 Den vi vanligvis bryr seg om er data, dataene som vi faktisk tilbake 1626 01:17:12,890 --> 01:17:15,900 som et resultat av å kalle .getJSON. 1627 01:17:15,900 --> 01:17:17,470 >> Og du kan gjøre noe med det. 1628 01:17:17,470 --> 01:17:23,670 Så i tilfelle av pset8, vi vises det som en liste. 1629 01:17:23,670 --> 01:17:29,050 Fail kommer til å være en funksjon som kalles dersom kravet ikke 1630 01:17:29,050 --> 01:17:30,450 uansett grunn. 1631 01:17:30,450 --> 01:17:35,104 Og i tilfelle av pset8, vi bare console.log det. 1632 01:17:35,104 --> 01:17:36,020 Eventuelle spørsmål om det? 1633 01:17:36,020 --> 01:17:36,300 Yeah. 1634 01:17:36,300 --> 01:17:39,633 >> PUBLIKUM: Kan vi bare bruke funksjonen theta istedenfor funksjon, textStatus, jqHXR. 1635 01:17:39,633 --> 01:17:43,464 1636 01:17:43,464 --> 01:17:44,380 HANNAH Blumberg: Sure. 1637 01:17:44,380 --> 01:17:46,713 Så ja, jeg tror i PSet, vi nettopp så funksjonen data. 1638 01:17:46,713 --> 01:17:48,700 Så det er bare the-- ja, OK. 1639 01:17:48,700 --> 01:17:50,510 Det er hva vi så i PSet. 1640 01:17:50,510 --> 01:17:51,480 Det er helt greit. 1641 01:17:51,480 --> 01:17:54,210 >> Dette er bare hvis du ønsket å trekke ut mer informasjon, 1642 01:17:54,210 --> 01:17:57,190 dette er ting som du kan få fra .getJSON. 1643 01:17:57,190 --> 01:17:59,040 Godt spørsmål. 1644 01:17:59,040 --> 01:17:59,706 Alt annet? 1645 01:17:59,706 --> 01:18:00,206 Yeah. 1646 01:18:00,206 --> 01:18:01,787 >> PUBLIKUM: Så .getJSON er Ajax? 1647 01:18:01,787 --> 01:18:02,620 HANNAH Blumberg: OK. 1648 01:18:02,620 --> 01:18:05,700 Så dette er den type vanskelige delen. 1649 01:18:05,700 --> 01:18:12,390 Det er en jQuery funksjon som tillater du skal gjøre asynkrone samtaler. 1650 01:18:12,390 --> 01:18:16,080 Og disse asynkrone samtaler, det er hva vi har vært å henvise til som Ajax. 1651 01:18:16,080 --> 01:18:16,850 Yeah. 1652 01:18:16,850 --> 01:18:20,185 Det tok meg veldig lang tid å trekk fra hverandre da jeg var student. 1653 01:18:20,185 --> 01:18:21,560 PUBLIKUM: Kan du si det igjen? 1654 01:18:21,560 --> 01:18:22,476 HANNAH Blumberg: Yeah. 1655 01:18:22,476 --> 01:18:23,630 Kan jeg si det igjen? 1656 01:18:23,630 --> 01:18:29,010 Dette .getJSON funksjon, Det er et jQuery funksjon. 1657 01:18:29,010 --> 01:18:31,970 Og det kommer til å gjøre en asynkron samtale. 1658 01:18:31,970 --> 01:18:35,700 Og disse asynkrone samtaler, vi har vært å henvise til dem som Ajax. 1659 01:18:35,700 --> 01:18:39,610 1660 01:18:39,610 --> 01:18:41,872 >> Eventuelle andre spørsmål? 1661 01:18:41,872 --> 01:18:43,330 Vi har bare et par minutter igjen. 1662 01:18:43,330 --> 01:18:45,080 Og Maria kommer til å brytes opp med sikkerhet 1663 01:18:45,080 --> 01:18:47,464 og så skal vi å være omtrent ferdig. 1664 01:18:47,464 --> 01:18:48,630 MARIA ZLATKOVA: Awesome, OK. 1665 01:18:48,630 --> 01:18:54,030 Så dette er-- bare ta et par sekunder for å se over dette. 1666 01:18:54,030 --> 01:18:56,750 Og dette er ikke noe virkelig flott. 1667 01:18:56,750 --> 01:18:59,430 Og kan noen fortelle meg hvorfor? 1668 01:18:59,430 --> 01:19:05,650 Hva som skjer i foo og kan kunne potensielt føre til noe dårlig, 1669 01:19:05,650 --> 01:19:06,770 og hva det heter? 1670 01:19:06,770 --> 01:19:07,270 Yeah. 1671 01:19:07,270 --> 01:19:10,391 PUBLIKUM: Hvis argumentet som er vedtatt i mer enn 12 tegn, 1672 01:19:10,391 --> 01:19:11,454 det kan renne over. 1673 01:19:11,454 --> 01:19:12,370 MARIA ZLATKOVA: Høyre. 1674 01:19:12,370 --> 01:19:14,180 Perfekt. 1675 01:19:14,180 --> 01:19:15,384 Hva heter det? 1676 01:19:15,384 --> 01:19:16,300 Du bare nevnte det. 1677 01:19:16,300 --> 01:19:16,840 >> PUBLIKUM: Buffer overflow. 1678 01:19:16,840 --> 01:19:18,381 >> MARIA ZLATKOVA: Yup, buffer overflow. 1679 01:19:18,381 --> 01:19:21,230 Så dette er noe vi refererer til som buffer overflow. 1680 01:19:21,230 --> 01:19:25,500 Og vi ser at innsiden av foo, Vi har definert vår buffer, c, 1681 01:19:25,500 --> 01:19:27,240 med en størrelse på 12. 1682 01:19:27,240 --> 01:19:32,680 Men i hovedsak gjør vi ikke sjekk på noen måte i det hele tatt 1683 01:19:32,680 --> 01:19:36,480 vidt argv1-- slik at var det andre argumentet. 1684 01:19:36,480 --> 01:19:39,630 Vi sjekker ikke om størrelsen av det er hensiktsmessig. 1685 01:19:39,630 --> 01:19:43,380 >> Så hvis vi hadde en spesielt ondsinnet bruker 1686 01:19:43,380 --> 01:19:47,170 som satt i noen argument som var lenger enn 12, og deretter eventuelt 1687 01:19:47,170 --> 01:19:50,850 utover grensene for det argument, hadde noen kjørbar kode 1688 01:19:50,850 --> 01:19:55,570 at han prøvde å gjøre noe dårlig med det; så dette, hva som ville skje, 1689 01:19:55,570 --> 01:19:59,310 ville overstyre retur Adressen til foo funksjon, 1690 01:19:59,310 --> 01:20:04,370 slik at funksjonen til når tilbake til å kjøre denne koden. 1691 01:20:04,370 --> 01:20:07,540 Og så dårlige ting kan skje. 1692 01:20:07,540 --> 01:20:09,850 Betyr dette fornuftig for alle? 1693 01:20:09,850 --> 01:20:12,424 >> Og hvordan kan vi beskytte mot dette? 1694 01:20:12,424 --> 01:20:13,090 Noen forslag? 1695 01:20:13,090 --> 01:20:16,480 1696 01:20:16,480 --> 01:20:21,890 I utgangspunktet, innsiden av potensielt foo, hvordan 1697 01:20:21,890 --> 01:20:28,294 kan vi sjekke for å være sikker at det ikke kan skje? 1698 01:20:28,294 --> 01:20:33,879 >> PUBLIKUM: Hvis størrelsen 12 er overskredet, du ville bevilge ekstra minne? 1699 01:20:33,879 --> 01:20:37,170 MARIA ZLATKOVA: Forslag er, fordele ekstra minne av størrelsen skredet. 1700 01:20:37,170 --> 01:20:39,800 Egentlig kan vi gjøre noe mye enklere enn det også. 1701 01:20:39,800 --> 01:20:44,870 Vi kan bare få strengen lengde av argumentet som er lagt inn, 1702 01:20:44,870 --> 01:20:48,590 sjekk om det er mindre enn eller lik 12-- 1703 01:20:48,590 --> 01:20:50,790 som er det vi vil ha det å være fordi vi ikke ønsker 1704 01:20:50,790 --> 01:20:52,373 det å overskride grensene for vår buffer. 1705 01:20:52,373 --> 01:20:55,690 Og hvis den ikke gjør det, vi kan arbeide med argumentet. 1706 01:20:55,690 --> 01:21:00,296 Og hvis den gjør det, vi faktisk ønsker til Yello potensielt på brukeren. 1707 01:21:00,296 --> 01:21:01,670 Men dette er hvordan vi ville gjøre det. 1708 01:21:01,670 --> 01:21:02,443 Ja. 1709 01:21:02,443 --> 01:21:04,360 >> PUBLIKUM: Kunne du forklare memcpy virkelig rask? 1710 01:21:04,360 --> 01:21:05,443 MARIA ZLATKOVA: Oh, sorry. 1711 01:21:05,443 --> 01:21:06,040 Ja. 1712 01:21:06,040 --> 01:21:11,290 Memcpy tar uansett er-- beklager, OK. 1713 01:21:11,290 --> 01:21:15,850 Memcpy tar alt som er i baren, er det vedtatt 1714 01:21:15,850 --> 01:21:18,050 på foo som kommandolinjen argument. 1715 01:21:18,050 --> 01:21:19,440 Så det kommer til å ta argv1. 1716 01:21:19,440 --> 01:21:21,420 Argv1 kalles bar her. 1717 01:21:21,420 --> 01:21:24,453 Så det kommer til å ta bar og det kommer til å kopiere den inn c. 1718 01:21:24,453 --> 01:21:25,402 >> PUBLIKUM: OK. 1719 01:21:25,402 --> 01:21:28,360 MARIA ZLATKOVA: Og det kommer til å copy-- tredje argumentet bare refererer 1720 01:21:28,360 --> 01:21:30,601 til hvor mye det kommer til å kopiere inn i c. 1721 01:21:30,601 --> 01:21:31,142 PUBLIKUM: Ah. 1722 01:21:31,142 --> 01:21:33,030 Så dette ens kopiering alt sammen da. 1723 01:21:33,030 --> 01:21:34,310 >> MARIA ZLATKOVA: Ja, det er å kopiere alt sammen. 1724 01:21:34,310 --> 01:21:34,810 Jepp. 1725 01:21:34,810 --> 01:21:38,400 1726 01:21:38,400 --> 01:21:41,910 Først sørger vi for at baren er ikke lik null, fordi det er en peker. 1727 01:21:41,910 --> 01:21:44,680 Så vi får strengen lengden på bar. 1728 01:21:44,680 --> 01:21:47,530 Vi sørger for at det er mindre enn eller lik 12. 1729 01:21:47,530 --> 01:21:50,070 Og da fordi vi har sørget for, kan vi faktisk 1730 01:21:50,070 --> 01:21:53,122 memcpy og være sikker på at det er OK. 1731 01:21:53,122 --> 01:21:53,705 Noen spørsmål? 1732 01:21:53,705 --> 01:21:56,280 1733 01:21:56,280 --> 01:21:58,690 Flott. 1734 01:21:58,690 --> 01:22:00,400 Jeg har to sanne eller falske spørsmål. 1735 01:22:00,400 --> 01:22:05,470 Kan noen fortelle meg med en gang om disse er sant eller usant? 1736 01:22:05,470 --> 01:22:07,460 Ja, det er falsk. 1737 01:22:07,460 --> 01:22:07,960 Nettopp. 1738 01:22:07,960 --> 01:22:09,330 Begge er falsk. 1739 01:22:09,330 --> 01:22:12,682 Så bruker et enkelt passord er aldri veldig god idé 1740 01:22:12,682 --> 01:22:14,890 fordi hvis noen vet passordet ditt, kan de bare 1741 01:22:14,890 --> 01:22:16,260 få tilgang til alle dine andre kontoer. 1742 01:22:16,260 --> 01:22:19,260 Og så ikoner gjør ingenting å sikre sikkerheten. 1743 01:22:19,260 --> 01:22:24,900 Vi bør vanligvis ser for HTTPS i stedet for HTTP og URL. 1744 01:22:24,900 --> 01:22:28,560 >> Og noen andre typer angrep som vi har nevnt, 1745 01:22:28,560 --> 01:22:31,390 at David har nevnt i forelese, SQL-injeksjon angrep. 1746 01:22:31,390 --> 01:22:37,310 Vi har allerede sett at hvis vi don't-- den CS50 spørring funksjon sørger for at SQL 1747 01:22:37,310 --> 01:22:39,530 injeksjon angrep kan ikke forekomme. 1748 01:22:39,530 --> 01:22:42,640 Men hvis vi ikke bruker CS50, sitat, unquote "i søket," 1749 01:22:42,640 --> 01:22:46,830 vi må sørge for at brukerundersøkelser er faktisk ikke noen SQL 1750 01:22:46,830 --> 01:22:49,670 spørring som vil føre til at all våre bord for å bli droppet 1751 01:22:49,670 --> 01:22:54,070 eller noe dårlig å skje med vår database. 1752 01:22:54,070 --> 01:22:56,790 >> Session kapring er en annen type angrep 1753 01:22:56,790 --> 01:23:05,940 som skjer når noen dårlige person bruker noen offerets sesjon 1754 01:23:05,940 --> 01:23:08,740 ID for å få tilgang til påloggingsinformasjon. 1755 01:23:08,740 --> 01:23:13,620 Så en veldig trivielt eksempel på det er som om vi har en offentlig datamaskin, 1756 01:23:13,620 --> 01:23:21,120 så dårlig person logger inn og deretter de har informasjonskapsler som er lagret. 1757 01:23:21,120 --> 01:23:23,380 Og informasjonskapsler ikke endrer for økten. 1758 01:23:23,380 --> 01:23:27,620 >> Så vi har offeret gå i og deretter logge inn på nettstedet. 1759 01:23:27,620 --> 01:23:30,290 Cookies endrer ikke for en bestemt sesjon. 1760 01:23:30,290 --> 01:23:33,060 Og da offeret logger inn nettsiden og deretter forlater. 1761 01:23:33,060 --> 01:23:36,190 Og da den personen som går tilbake Deretter kan du fortsatt bruke sin session ID 1762 01:23:36,190 --> 01:23:37,430 å få tilgang til informasjon. 1763 01:23:37,430 --> 01:23:40,050 Så det er ett eksempel på hvordan det kunne skje. 1764 01:23:40,050 --> 01:23:45,570 >> Og så ville jeg ikke bekymre deg for mye om spesifikk kode eller noe 1765 01:23:45,570 --> 01:23:49,270 sånn som kan forårsake dette, men å ha en slags anelse om hva 1766 01:23:49,270 --> 01:23:51,400 variabler som er involvert i dette er. 1767 01:23:51,400 --> 01:23:53,897 Og deretter manipulere header data er en annen type angrep 1768 01:23:53,897 --> 01:23:55,230 som har David har snakket om. 1769 01:23:55,230 --> 01:23:59,730 Og det bare refererer til hva som kan skje når 1770 01:23:59,730 --> 01:24:04,300 responsen, HTTP respons innsiden av vår header 1771 01:24:04,300 --> 01:24:05,720 er ikke sterilisert skikkelig. 1772 01:24:05,720 --> 01:24:14,340 >> Og en hvilken som helst av de fields-- f.eks hvis noen overskriver en av overskriften 1773 01:24:14,340 --> 01:24:18,860 verdier for å inneholde noe mer enn hva de bør contain-- og faktisk 1774 01:24:18,860 --> 01:24:22,720 inneholde, for eksempel, en 200 OK statuskode, så de 1775 01:24:22,720 --> 01:24:26,890 kan potensielt gjøre skadelig ting når de ikke skal. 1776 01:24:26,890 --> 01:24:30,815 Men jeg ville ikke bekymre deg for mye om spesifikk kode 1777 01:24:30,815 --> 01:24:34,110 som kan forårsake dette, bare en slags forståelse 1778 01:24:34,110 --> 01:24:37,290 høyt nivå sånt. 1779 01:24:37,290 --> 01:24:39,570 >> Jeg tror dette er alt at vi må dekke. 1780 01:24:39,570 --> 01:24:40,090 Utrolig. 1781 01:24:40,090 --> 01:24:43,310 Alle som har noen spørsmål om noen av de tingene som vi dekket? 1782 01:24:43,310 --> 01:24:44,213 Ja. 1783 01:24:44,213 --> 01:24:48,077 >> PUBLIKUM: Så en slags mer logistisk spørsmål. 1784 01:24:48,077 --> 01:24:53,400 Er innholdet i hovedsak fokusert på ting etter quiz 1? 1785 01:24:53,400 --> 01:24:55,730 >> MARIA ZLATKOVA: So Spørsmålet er, er innholdet 1786 01:24:55,730 --> 01:24:59,720 fokusert hovedsakelig på ting etter quiz 1? 1787 01:24:59,720 --> 01:25:06,070 Slik at fokus er på etter quiz 1, med unntak 1788 01:25:06,070 --> 01:25:10,914 at vi trenger å fokusere på ting i pset5 og mange av de datastrukturer 1789 01:25:10,914 --> 01:25:11,580 at vi dekket. 1790 01:25:11,580 --> 01:25:14,300 Og vi kan ikke si at vi kan ignorere noe før 1791 01:25:14,300 --> 01:25:17,120 at fordi det bygger på det også. 1792 01:25:17,120 --> 01:25:21,845 >> Så fokus på det, pluss pset5 materiale som blant annet knyttet lister, stabler, 1793 01:25:21,845 --> 01:25:23,720 køer og alt at Hannah gikk over. 1794 01:25:23,720 --> 01:25:24,050 >> HANNAH Blumberg: Høyre. 1795 01:25:24,050 --> 01:25:27,450 Ja, vi gikk over all C stuff helt i begynnelsen veldig raskt. 1796 01:25:27,450 --> 01:25:29,090 Men sørg for å gjennomgå det. 1797 01:25:29,090 --> 01:25:32,700 Gå tilbake og se quizen 0 anmeldelse. 1798 01:25:32,700 --> 01:25:36,110 >> Et par mer logistiske notater, bare mens vi har din oppmerksomhet. 1799 01:25:36,110 --> 01:25:39,100 Vi kommer til å ha kontortid både på mandag og tirsdag kveld. 1800 01:25:39,100 --> 01:25:41,540 De kommer til å være i MD 119. 1801 01:25:41,540 --> 01:25:44,220 Dette er alt på nettsiden, så Hvis du ikke hører det, ingen bekymringer. 1802 01:25:44,220 --> 01:25:45,266 >> MARIA ZLATKOVA: 08:30-11:00. 1803 01:25:45,266 --> 01:25:46,260 >> HANNAH Blumberg: Yeah, 08:30 til 11:00. 1804 01:25:46,260 --> 01:25:46,910 Vi vil være der. 1805 01:25:46,910 --> 01:25:48,368 Vi vil være der for å svare på spørsmål. 1806 01:25:48,368 --> 01:25:49,480 Det er ganske chill og morsom. 1807 01:25:49,480 --> 01:25:53,240 Dere kan stille spørsmål som du har på quiz en. 1808 01:25:53,240 --> 01:25:55,740 Og quiz 1 er på Onsdag, så lykke til. 1809 01:25:55,740 --> 01:25:59,770 Hvis du har noen spørsmål, kanskje komme å snakke med oss ​​her oppe one-on-one. 1810 01:25:59,770 --> 01:26:00,880 Kjølig. 1811 01:26:00,880 --> 01:26:01,630 Takk så mye. 1812 01:26:01,630 --> 01:26:02,880 >> MARIA ZLATKOVA: Takk så mye, folkens. 1813 01:26:02,880 --> 01:26:03,480 >> PUBLIKUM: Yay. 1814 01:26:03,480 --> 01:26:05,930 >> [BIFALL] 1815 01:26:05,930 --> 01:26:07,530