1 00:00:00,000 --> 00:00:00,060 2 00:00:00,060 --> 00:00:01,560 >> DAVID MALAN: Greit, vi er tilbake. 3 00:00:01,560 --> 00:00:03,830 Så for spennende Konklusjonen vår siste avsnitt 4 00:00:03,830 --> 00:00:06,900 på web-programmering, som jeg tenkte vi skulle bruke som en generell term 5 00:00:06,900 --> 00:00:08,440 å fange noen få gjenværende emner. 6 00:00:08,440 --> 00:00:10,390 Så ved slutten av dag, vil vi faktisk gjør 7 00:00:10,390 --> 00:00:14,830 litt hands-on webprogrammering med et språk som kalles Javascript. 8 00:00:14,830 --> 00:00:17,510 Og jeg tror vi vil se på noe relatert til bilder 9 00:00:17,510 --> 00:00:20,040 og oppdage noe hemmelighet gjemt i et bilde, 10 00:00:20,040 --> 00:00:23,230 og også ta en titt på Google Maps API, Application Programming 11 00:00:23,230 --> 00:00:26,040 grensesnitt, som noe representativ for den type programvare 12 00:00:26,040 --> 00:00:28,800 det er stadig mer og fritt tilgjengelig i dag. 13 00:00:28,800 --> 00:00:32,029 >> Men hvorfor ikke vi ta en titt på en ingrediens til denne verden 14 00:00:32,029 --> 00:00:34,070 som vi har på en måte vært tar for gitt foreligger 15 00:00:34,070 --> 00:00:36,720 i noen tid, en database. 16 00:00:36,720 --> 00:00:39,150 For det siste døgnet og en halv vi har antatt 17 00:00:39,150 --> 00:00:42,910 at vi har tilgang til en database, men hva problemet har en database løse? 18 00:00:42,910 --> 00:00:45,540 Hva gjør det for oss? 19 00:00:45,540 --> 00:00:47,030 Hva er det? 20 00:00:47,030 --> 00:00:48,679 >> PUBLIKUM: [uhørlig] 21 00:00:48,679 --> 00:00:51,720 DAVID MALAN: Holder all informasjon, OK, og hva slags informasjon 22 00:00:51,720 --> 00:00:53,186 kan du legge i det? 23 00:00:53,186 --> 00:00:54,590 >> PUBLIKUM: [uhørlig] 24 00:00:54,590 --> 00:00:56,450 >> DAVID MALAN: All informasjon du putter i den, vil du få tilbake. 25 00:00:56,450 --> 00:00:57,070 Det er sant. 26 00:00:57,070 --> 00:01:01,900 Og på en typisk web-basert nettsted eller web søknad, hva slags informasjon, 27 00:01:01,900 --> 00:01:03,385 spesielt, kan du sette inn? 28 00:01:03,385 --> 00:01:04,260 PUBLIKUM: [uhørlig] 29 00:01:04,260 --> 00:01:05,051 DAVID MALAN: Brukere. 30 00:01:05,051 --> 00:01:07,000 Så hva er en bruker? 31 00:01:07,000 --> 00:01:09,765 >> PUBLIKUM: [uhørlig] 32 00:01:09,765 --> 00:01:11,640 DAVID MALAN: OK, registrert bruker av nettstedet. 33 00:01:11,640 --> 00:01:15,100 Og hva betyr det å lagre brukernes informasjon? 34 00:01:15,100 --> 00:01:17,260 Hva komponerer en bruker? 35 00:01:17,260 --> 00:01:18,331 En bruker har hva? 36 00:01:18,331 --> 00:01:19,206 PUBLIKUM: [uhørlig] 37 00:01:19,206 --> 00:01:21,040 DAVID MALAN: Ja, personlig data, og det liker jeg. 38 00:01:21,040 --> 00:01:21,970 La oss være mer presis. 39 00:01:21,970 --> 00:01:25,275 Så en bruker har vanligvis et navn, hva annet kan en bruker ha? 40 00:01:25,275 --> 00:01:26,150 PUBLIKUM: [uhørlig] 41 00:01:26,150 --> 00:01:29,130 DAVID MALAN: En addr-- OK, så fornavn, etternavn. 42 00:01:29,130 --> 00:01:29,630 Det er bra. 43 00:01:29,630 --> 00:01:31,463 Egentlig, la oss fikse det, fordi det kommer 44 00:01:31,463 --> 00:01:35,010 for å åpne opp en mulighet for diskusjon, likevel, ytterligere. 45 00:01:35,010 --> 00:01:39,090 Fornavn, etternavn, kjønn. 46 00:01:39,090 --> 00:01:41,820 47 00:01:41,820 --> 00:01:43,481 En ID av noe slag. 48 00:01:43,481 --> 00:01:43,980 Hva annet? 49 00:01:43,980 --> 00:01:45,438 Jeg har hørt noe annet før, også. 50 00:01:45,438 --> 00:01:51,600 En e-post, postadresse. 51 00:01:51,600 --> 00:01:58,170 >> Så la oss stoppe der, og nå vurdere ikke hva vi lagring i databasen, 52 00:01:58,170 --> 00:02:01,980 men-- og ikke hvorfor, siden det er kanskje opplagt at når du registrere en bruker, 53 00:02:01,980 --> 00:02:03,730 du ønsker å huske dem i noen tid. 54 00:02:03,730 --> 00:02:05,480 Du ønsker ikke det å bare lagres i RAM 55 00:02:05,480 --> 00:02:08,690 og bli forgotten-- så la oss fokusere på hvordan. 56 00:02:08,690 --> 00:02:11,700 >> Det viser seg at i verden av databaser, 57 00:02:11,700 --> 00:02:14,410 det er minst to typer i disse dager. 58 00:02:14,410 --> 00:02:20,010 Noe som kalles en SQL-database, Structured Query Language, 59 00:02:20,010 --> 00:02:24,770 eller, cutely navngitt, NoSQL, som ikke er SQL. 60 00:02:24,770 --> 00:02:26,980 Og den sistnevnte er en eksempel på hva som kan 61 00:02:26,980 --> 00:02:30,660 bli kalt et objekt-orientert, eller et objekt butikken, en database 62 00:02:30,660 --> 00:02:36,010 som lagrer objekter, og ikke, unnskyldning meg, som vi snart vil se, rader. 63 00:02:36,010 --> 00:02:41,800 >> Så vil vi fokusere på bare et øyeblikk på den første av disse, nemlig en SQL 64 00:02:41,800 --> 00:02:46,850 database, hvis bare fordi den er så kjent allerede, for alle 65 00:02:46,850 --> 00:02:51,070 som har brukt Excel eller Google Regneark eller Apple 66 00:02:51,070 --> 00:02:53,740 Tall eller en hvilken som helst standard regnearkprogram, 67 00:02:53,740 --> 00:02:56,040 eller, tilsvarende, eller mer sofistikerte, 68 00:02:56,040 --> 00:02:58,610 noe som Microsoft Access eller Oracle 69 00:02:58,610 --> 00:03:03,890 eller MySQL eller PostgreSQL, som alle er produktnavn for implementeringer 70 00:03:03,890 --> 00:03:04,865 av det følgende idé. 71 00:03:04,865 --> 00:03:10,350 >> En relasjonsdatabase er rett og slett noe som har rader og kolonner. 72 00:03:10,350 --> 00:03:12,850 Og av rader og kolonner, Jeg bokstavelig talt bety noe 73 00:03:12,850 --> 00:03:21,860 som dette, så hvor vi kan ha navn på et felt og sin type over her. 74 00:03:21,860 --> 00:03:25,800 Og faktisk, la meg nå begynne å kartlegge disse. 75 00:03:25,800 --> 00:03:29,420 Så egentlig, jeg vet ikke hvorfor jeg trakk et eget diagram. 76 00:03:29,420 --> 00:03:30,780 La oss holde dette enkelt. 77 00:03:30,780 --> 00:03:34,830 >> Vi har rett her Begynnelsen av bordet vårt, der 78 00:03:34,830 --> 00:03:40,150 Dette er navnet på feltet og dette er den datatypen 79 00:03:40,150 --> 00:03:41,660 og etter type mener jeg følgende. 80 00:03:41,660 --> 00:03:45,510 Er det et nummer, er det en streng, en kort streng som et ord, 81 00:03:45,510 --> 00:03:49,340 er det et avsnitt, er det binære data, for eksempel et bilde? 82 00:03:49,340 --> 00:03:51,980 Og la oss bare erte dette hverandre for bare et øyeblikk. 83 00:03:51,980 --> 00:03:57,575 Så først navn, nummer, streng, stor del av text-- 84 00:03:57,575 --> 00:03:58,450 PUBLIKUM: [uhørlig] 85 00:03:58,450 --> 00:03:59,616 DAVID MALAN: Ja, så streng. 86 00:03:59,616 --> 00:04:04,744 Og i en database sammenheng, vil vi vanligvis kaller dette røye feltet. 87 00:04:04,744 --> 00:04:07,660 Jeg vil bare si røye for nå, men vi er kommer til å avgrense dette i et øyeblikk. 88 00:04:07,660 --> 00:04:09,180 Tegnfelt. 89 00:04:09,180 --> 00:04:11,365 Etternavn er trolig den samme. 90 00:04:11,365 --> 00:04:11,865 Kjønn? 91 00:04:11,865 --> 00:04:16,230 92 00:04:16,230 --> 00:04:18,310 >> Mann eller kvinne, så det kan være en char felt. 93 00:04:18,310 --> 00:04:21,380 Det kan være enten sitat, unquote "Mannlig" eller sitat, unquote "kvinnelige" 94 00:04:21,380 --> 00:04:23,650 eller det kan være m eller f. 95 00:04:23,650 --> 00:04:26,540 Hvis du ønsker å være mer inkluderende, du trenger en tredje verdi 96 00:04:26,540 --> 00:04:28,640 eller noen form for andre felt helt. 97 00:04:28,640 --> 00:04:31,350 Og så du kan bruke true false. 98 00:04:31,350 --> 00:04:35,036 Feltet kan kalles mannlig, og så du kan si sant eller usant. 99 00:04:35,036 --> 00:04:38,160 Men det betyr ikke nødvendigvis fange all informasjon du måtte ønske. 100 00:04:38,160 --> 00:04:41,118 >> Så det viser seg at det er en annen type felt som kan være nyttig her 101 00:04:41,118 --> 00:04:46,040 i en typisk database, kalt en enum, hvor det er et tegnfelt, 102 00:04:46,040 --> 00:04:50,480 men du, designeren, bli oppsummere de mulige verdier, 103 00:04:50,480 --> 00:04:54,630 som sitat, unquote "mannlig", sitat, unquote "kvinnelige" og så videre. 104 00:04:54,630 --> 00:04:57,620 Slik at uansett verdi er i databasen, 105 00:04:57,620 --> 00:05:00,670 er faktisk karakter-basert, men det må være en av disse verdiene. 106 00:05:00,670 --> 00:05:03,520 Vi sannsynligvis ikke ønsker en enum for fornavn eller etternavn. 107 00:05:03,520 --> 00:05:05,630 Ellers ville vi ha å nummerere, som navnet 108 00:05:05,630 --> 00:05:09,570 stammer fra, bokstavelig talt hvert mulig fornavn og etternavn. 109 00:05:09,570 --> 00:05:13,960 >> OK, så ID hva skal en ID være? 110 00:05:13,960 --> 00:05:15,200 Ja, så kanskje et tall. 111 00:05:15,200 --> 00:05:17,870 Så la oss holde fast med det for nå, nummer. 112 00:05:17,870 --> 00:05:22,010 Og etter nummer, er nummer litt for bred nå. 113 00:05:22,010 --> 00:05:23,900 For enden av den andre dag, føler jeg at vi 114 00:05:23,900 --> 00:05:25,280 bør være litt mer presis. 115 00:05:25,280 --> 00:05:29,280 Antall kan bety like, det kan være noe sånt som 1.236. 116 00:05:29,280 --> 00:05:31,500 Og det er sannsynligvis ikke hva vi mener med en ID. 117 00:05:31,500 --> 00:05:34,635 Hva gjør vi sannsynligvis mener med en ID? 118 00:05:34,635 --> 00:05:36,382 >> PUBLIKUM: [uhørlig] 119 00:05:36,382 --> 00:05:38,590 DAVID MALAN: Oh, OK, så kanskje det er ikke engang et nummer. 120 00:05:38,590 --> 00:05:42,840 Kanskje det er faktisk en unik identifikator det er en streng, som et brukernavn. 121 00:05:42,840 --> 00:05:44,580 Så absolutt, kunne være. 122 00:05:44,580 --> 00:05:46,730 Jeg tror noen trolig betydde numerisk, though. 123 00:05:46,730 --> 00:05:48,460 Så la oss bli med det. 124 00:05:48,460 --> 00:05:49,320 Hva slags tall? 125 00:05:49,320 --> 00:05:51,960 Hva er en mer precise-- et heltall. 126 00:05:51,960 --> 00:05:56,710 Så mange som 0, 1, 2, 3, så vi vil kalle dette et heltall. 127 00:05:56,710 --> 00:05:58,909 Og selv da, jeg kunne bli nitpicking, er det 128 00:05:58,909 --> 00:06:00,700 egentlig ikke bare en Generelt heltall du vil. 129 00:06:00,700 --> 00:06:04,340 Du har sannsynligvis ikke vil negative verdier, bare fordi det føles bare rart. 130 00:06:04,340 --> 00:06:06,070 Du har sannsynligvis vil positive heltall. 131 00:06:06,070 --> 00:06:07,920 Så du kan også uttrykke at i en database, 132 00:06:07,920 --> 00:06:09,450 men for nå, vil vi si heltall. 133 00:06:09,450 --> 00:06:10,650 >> E-post? 134 00:06:10,650 --> 00:06:13,550 Dette er sannsynligvis just-- en hva? 135 00:06:13,550 --> 00:06:14,460 >> PUBLIKUM: [uhørlig] 136 00:06:14,460 --> 00:06:16,980 >> DAVID MALAN: Det er en e-post, men det er tegn, ikke sant? 137 00:06:16,980 --> 00:06:19,813 Den har bare en funky karakter som en "i" symbol eller noe annet, 138 00:06:19,813 --> 00:06:21,580 men det er fortsatt et tegnfelt. 139 00:06:21,580 --> 00:06:23,900 Og postadresse? 140 00:06:23,900 --> 00:06:25,360 Tegnfelt. 141 00:06:25,360 --> 00:06:31,400 Så det er en fin begynnelse, men la oss være litt mer presis nå. 142 00:06:31,400 --> 00:06:34,540 >> Så det viser seg at i en database, du ofte 143 00:06:34,540 --> 00:06:39,120 har et valg over mer raffinert versjoner av disse tingene. 144 00:06:39,120 --> 00:06:44,330 Faktisk, i en typisk SQL database, SQL, eller mer generelt, relasjonsdatabase, 145 00:06:44,330 --> 00:06:46,680 databaser med rader og kolonner, du ofte 146 00:06:46,680 --> 00:06:53,610 komme til å angi ikke bare den type av field-- la meg gjøre noen plass her-- 147 00:06:53,610 --> 00:06:56,600 men også lengden. 148 00:06:56,600 --> 00:06:59,900 >> Så hvor lenge er et fornavn? 149 00:06:59,900 --> 00:07:07,060 Jeg tror, ​​D-A-V-I-D. OK, fikk det jeg sannsynligvis bare fornærmet som halvparten 150 00:07:07,060 --> 00:07:11,260 av personene i rommet, ikke sant, Siden navnene er lengre enn fem 151 00:07:11,260 --> 00:07:16,608 bokstaver, så fem virker litt egoistisk og naiv, hva er så en bedre verdi? 152 00:07:16,608 --> 00:07:19,320 153 00:07:19,320 --> 00:07:24,330 10, greit, og jeg tror vi er OK i rommet. 154 00:07:24,330 --> 00:07:26,254 1. 3? 155 00:07:26,254 --> 00:07:27,541 30? 156 00:07:27,541 --> 00:07:29,540 Hvorfor får jeg ikke ta tilnærming til tidligere da vi 157 00:07:29,540 --> 00:07:31,081 snakket om matriser og minne? 158 00:07:31,081 --> 00:07:32,450 Hvorfor kan jeg ikke bare si som 1000? 159 00:07:32,450 --> 00:07:35,260 Ingen navn kommer for å være mer enn 1000. 160 00:07:35,260 --> 00:07:36,706 Skyve tilbake. 161 00:07:36,706 --> 00:07:38,005 >> PUBLIKUM: [uhørlig] 162 00:07:38,005 --> 00:07:40,130 DAVID MALAN: Ja, det er sløsing, ikke sant, spesielt 163 00:07:40,130 --> 00:07:44,630 om de fleste navnene er bare fem eller ti eller 15 tegn, det er veldig unødvendig. 164 00:07:44,630 --> 00:07:45,810 Så vet du hva? 165 00:07:45,810 --> 00:07:48,020 Dette er slags et vanskelig spørsmål. 166 00:07:48,020 --> 00:07:51,721 Nå kan vi sikkert analysere engelsk og eventuelle andre språkets navn 167 00:07:51,721 --> 00:07:54,470 og finne ut, vel, hva er average-- gjennomsnitt gjør egentlig ikke 168 00:07:54,470 --> 00:07:57,150 hjelpe us-- hva er max er sannsynligvis hva vi egentlig ønsker. 169 00:07:57,150 --> 00:07:59,920 Men det viser seg at vi har til noen valg over typen her. 170 00:07:59,920 --> 00:08:03,400 >> I et typisk SQL database, du har noe som kalles en røye felt 171 00:08:03,400 --> 00:08:07,505 og også en varchar, V-A-R, for variabel røye felt. 172 00:08:07,505 --> 00:08:08,630 Og forskjellen er dette. 173 00:08:08,630 --> 00:08:12,400 En røye felt, du designer, må spesifisere på forhånd 174 00:08:12,400 --> 00:08:14,900 den nøyaktige lengden av feltet. 175 00:08:14,900 --> 00:08:20,530 Så kanskje det første navnet som 20 føles slags trygg. 176 00:08:20,530 --> 00:08:23,950 Kan ha å gjøre litt googling til se om det er faktisk trygg nok. 177 00:08:23,950 --> 00:08:26,910 Det er nok et navn med 21 tegn, men for nå, antar 20 178 00:08:26,910 --> 00:08:27,620 er trygg. 179 00:08:27,620 --> 00:08:30,070 >> En røye felt skulle tilsi i en database som du 180 00:08:30,070 --> 00:08:33,289 er å bruke 20 og alltid 20 tegn. 181 00:08:33,289 --> 00:08:37,419 Nå hvis det er bare D-A-V-I-D, 15 av dem bare kommer til å være tomme tegn, 182 00:08:37,419 --> 00:08:40,450 men du fortsatt bruker alle 20 bytes. 183 00:08:40,450 --> 00:08:46,302 En VARCHAR- felt, derimot, betyr strengen skal være opptil 20 tegn 184 00:08:46,302 --> 00:08:48,260 men hvis det er bare fem, du bare kommer til å bruke 185 00:08:48,260 --> 00:08:51,270 fem, seks eller kanskje for en spesiell verdi ved utgangen, 186 00:08:51,270 --> 00:08:54,980 sånn 0 vi diskutert at betyr slutten av et tegn 187 00:08:54,980 --> 00:08:56,790 sekvens i minnet. 188 00:08:56,790 --> 00:08:59,950 >> Så når tror du du kan velge røye 189 00:08:59,950 --> 00:09:05,240 versus varchar, gitt at trade-off? 190 00:09:05,240 --> 00:09:09,321 Char bruker det mange tegn, varchar bruker ikke mer enn at mange tegn. 191 00:09:09,321 --> 00:09:10,196 PUBLIKUM: [uhørlig] 192 00:09:10,196 --> 00:09:13,859 193 00:09:13,859 --> 00:09:16,900 DAVID MALAN: OK, når du vet lengden på strengen ganske overbevisende 194 00:09:16,900 --> 00:09:19,316 å bare bruke røye, fordi hvis du vet det, bare legge det ned. 195 00:09:19,316 --> 00:09:23,390 Og kanskje det er sant for en zip kode, i USA, i det minste, 02138, 196 00:09:23,390 --> 00:09:26,660 det alltid kommer til å være fem tegn til du legger til dash fire. 197 00:09:26,660 --> 00:09:29,750 Men du har kanskje noen verdier for som du vet alltid lengden. 198 00:09:29,750 --> 00:09:32,310 Eller kanskje statlige symboler, som NY for New York, 199 00:09:32,310 --> 00:09:33,811 og MA for Massachusetts i USA. 200 00:09:33,811 --> 00:09:36,560 Kanskje du har noen situasjoner hvor det er helt rimelig, 201 00:09:36,560 --> 00:09:39,520 men etter den logikken, hvorfor er vi selv overthinking dette? 202 00:09:39,520 --> 00:09:41,800 Kan vi ikke bare bruke varchar og så får vi 203 00:09:41,800 --> 00:09:46,730 Bruk alltid to tegn uansett, eller alltid bruke fem tegn likevel? 204 00:09:46,730 --> 00:09:50,300 Hvorfor ikke bare spare varchar for alt, etter den logikken? 205 00:09:50,300 --> 00:09:51,677 Det må være en fange. 206 00:09:51,677 --> 00:09:52,552 PUBLIKUM: [uhørlig] 207 00:09:52,552 --> 00:09:54,952 208 00:09:54,952 --> 00:09:56,660 DAVID MALAN: Kunne skrive noe galt. 209 00:09:56,660 --> 00:09:58,090 Så det er sant. 210 00:09:58,090 --> 00:10:01,030 Men selv da kan de ikke bruke mer minne enn jeg fordele. 211 00:10:01,030 --> 00:10:03,340 Jeg har fortsatt den endelige si over lengden, 212 00:10:03,340 --> 00:10:06,780 slik at de kan ikke tilfeldigvis gjøre det feil, men en god tanke. 213 00:10:06,780 --> 00:10:10,510 Det er mer subtil, men det er veldig relatert til vår diskusjon, faktisk, av arrays 214 00:10:10,510 --> 00:10:12,390 og knyttet listene tidligere. 215 00:10:12,390 --> 00:10:16,290 >> Det viser seg at en database, hvis den vet at alle verdiene er 216 00:10:16,290 --> 00:10:19,250 av en fast lengde, selv om noen av disse verdiene er tomme, 217 00:10:19,250 --> 00:10:22,484 slags estetisk blank, D-A-V-I-D og deretter 15 emner, 218 00:10:22,484 --> 00:10:24,650 det viser seg at hvis hver feltet er det samme lengde, 219 00:10:24,650 --> 00:10:28,670 mye som en matrise hadde alle sine ting rygg mot rygg mot rygg mot rygg, slik at 220 00:10:28,670 --> 00:10:33,480 du kan bare pluss 1 for å komme til neste verdi, samme idé i en databasetabell. 221 00:10:33,480 --> 00:10:37,550 Hvis alle karakter strenger har samme lengde, 222 00:10:37,550 --> 00:10:39,390 du har det som kalles tilfeldig tilgang. 223 00:10:39,390 --> 00:10:41,850 Dersom alle strengene er av lengde 20, trenger du ikke bare 224 00:10:41,850 --> 00:10:45,230 gjøre pluss en du bare gjøre pluss 20, pluss 20, pluss 20, pluss 20, 225 00:10:45,230 --> 00:10:48,775 og du kan veldig raskt bla gjennom eller søk gjennom alle dine data. 226 00:10:48,775 --> 00:10:54,420 >> En variabel char felt, derimot, ikke alltid har 20 tegn. 227 00:10:54,420 --> 00:10:58,000 Det kan ha 20 og deretter 15 og deretter 19 og så 10, 228 00:10:58,000 --> 00:11:00,720 og så hvis du ønsker å søke gjennom den, kan du ikke bare blindt 229 00:11:00,720 --> 00:11:03,050 legge til 20 bytes for å komme til den neste. 230 00:11:03,050 --> 00:11:07,280 Du har bokstavelig talt å søke gjennom fordi kanten av datastrukturen, 231 00:11:07,280 --> 00:11:08,340 om du vil, er fillete. 232 00:11:08,340 --> 00:11:11,480 Den slags går inn og ut basert på den faktiske lengden av strengen. 233 00:11:11,480 --> 00:11:14,460 Så når du vet lengden, som Kareem sier, bruk en røye felt, 234 00:11:14,460 --> 00:11:16,460 fordi du får det effektivitet for å bli 235 00:11:16,460 --> 00:11:19,170 i stand til å søke gjennom det raskere når du leter etter data, 236 00:11:19,170 --> 00:11:20,550 ellers bruke en variabel. 237 00:11:20,550 --> 00:11:24,450 >> Dessverre, jeg har ikke noe godt svar til hvor lenge navnet skal være, 238 00:11:24,450 --> 00:11:26,360 men for noe sånt et navn, vil jeg si 239 00:11:26,360 --> 00:11:28,470 en varchar er vanlig fordi det er ikke til 240 00:11:28,470 --> 00:11:30,430 å være en fast lengde for alle. 241 00:11:30,430 --> 00:11:33,650 20, vet jeg ikke, 20 føles litt stramt. 242 00:11:33,650 --> 00:11:36,460 La oss bare si 50, 50. 243 00:11:36,460 --> 00:11:39,210 Det gjør egentlig ikke koste deg som mye mer å si 50 i stedet for 40, 244 00:11:39,210 --> 00:11:41,260 men på et tidspunkt må du å foreta en vurderingssak. 245 00:11:41,260 --> 00:11:43,090 >> Svært vanlige, ærlig, for [? historisk?] 246 00:11:43,090 --> 00:11:47,670 grunner, selv om det er overdreven, Det vil si 255, fordi en tid siden, 247 00:11:47,670 --> 00:11:51,440 i populære databasesystemer, som MySQL, et gratis open source verktøy 248 00:11:51,440 --> 00:11:53,790 at en rekke selskaper som selv Facebook brukes, 249 00:11:53,790 --> 00:11:56,654 Dette var den maksimale standard slik at folk bare gikk med den. 250 00:11:56,654 --> 00:11:59,070 Så ikke urimelig, men vi vil bruke litt mer intuisjon 251 00:11:59,070 --> 00:12:02,970 og si at 50, det er sannsynligvis litt overdreven. 252 00:12:02,970 --> 00:12:05,720 >> Kjønn, jeg liker enum, Og så kan vi derfor 253 00:12:05,720 --> 00:12:08,760 nummerere mann eller kvinne, eller kanskje mer effektivt, 254 00:12:08,760 --> 00:12:13,420 m eller f eller noen andre symbologi, men enum føles som et godt valg der. 255 00:12:13,420 --> 00:12:16,740 For å være klar, kjønn kan bare være en varchar, 256 00:12:16,740 --> 00:12:19,090 og vi kunne bare alle enige om hyggelige mennesker, 257 00:12:19,090 --> 00:12:21,010 å alltid sette de samme verdiene der. 258 00:12:21,010 --> 00:12:22,720 Mann eller kvinne eller whatnot. 259 00:12:22,720 --> 00:12:27,800 >> Men problemet da, er at vi kunne gjør en feil, så [hørbar] foreslått 260 00:12:27,800 --> 00:12:29,140 tidligere i en annen sammenheng. 261 00:12:29,140 --> 00:12:32,780 Hvis vi gjør en feil, kan vi få uriktige verdier i vår database. 262 00:12:32,780 --> 00:12:36,320 Så hva er fint om databaser som Oracle og MySQL og andre, 263 00:12:36,320 --> 00:12:39,280 er at du har denne siste lag av forsvar der 264 00:12:39,280 --> 00:12:43,010 DBA, databaseadministrator den som utformer denne tabellen som vi 265 00:12:43,010 --> 00:12:46,440 er verbalt, kunne sette på plass en enum som 266 00:12:46,440 --> 00:12:51,250 beskytter mot at ved å spesifisere mann, kvinne, og slik at ingen 267 00:12:51,250 --> 00:12:54,230 ellers ingen programmerer kan ved et uhell sette inn en annen verdi. 268 00:12:54,230 --> 00:12:55,480 Så dette ville være en god ting. 269 00:12:55,480 --> 00:12:56,660 Dette er en funksjon. 270 00:12:56,660 --> 00:13:00,760 >> Så en ID, forutsatt en numerisk ID, det sannsynligvis bør være et positivt heltall. 271 00:13:00,760 --> 00:13:04,380 Og vi noen ganger har mulighet til å diskutere lengden. 272 00:13:04,380 --> 00:13:06,830 Du ville ikke vanligvis angir et tall her, 273 00:13:06,830 --> 00:13:11,310 ville du i stedet oppgi Dette er en int, eller en stor int, 274 00:13:11,310 --> 00:13:12,980 som de er vanligvis kalles. 275 00:13:12,980 --> 00:13:18,840 Men typisk, et heltall ville være, la oss si, 4 byte. 276 00:13:18,840 --> 00:13:23,694 Og hvis det er 4 byte, det er hvor mange biter? 277 00:13:23,694 --> 00:13:24,630 >> PUBLIKUM: [uhørlig] 278 00:13:24,630 --> 00:13:26,610 >> DAVID MALAN: 32 biter. 279 00:13:26,610 --> 00:13:30,270 Så hvor mange brukere kan vi ha i vår database om de alle har en ID 280 00:13:30,270 --> 00:13:33,320 og dette ID må være unik? 281 00:13:33,320 --> 00:13:36,780 32 bits betyr at vi har mønstre av en, to, tre, fire, five-- 282 00:13:36,780 --> 00:13:41,000 så hvor mange forskjellige mønstre av nuller og de kan du ha hvis det er 32? 283 00:13:41,000 --> 00:13:43,235 Det er det samme som spør hva som er to til 32? 284 00:13:43,235 --> 00:13:46,472 285 00:13:46,472 --> 00:13:48,430 Det er et stort antall som Jeg kan ikke helt få rett, 286 00:13:48,430 --> 00:13:50,270 men jeg vet det er omtrent 4 milliarder. 287 00:13:50,270 --> 00:13:53,970 Så dette betyr at databasen tabellen kan har fire milliarder brukere og det er det. 288 00:13:53,970 --> 00:13:56,410 >> Så dette er et interessant utforming implikasjon. 289 00:13:56,410 --> 00:14:00,840 En anstendig antall selskaper har bestemt seg, kanskje ikke så mye 290 00:14:00,840 --> 00:14:04,860 for deres brukere bordet, fordi det å ha 4 milliarder brukere er et sjeldent problem. 291 00:14:04,860 --> 00:14:08,410 Dette er liksom et Facebook-stil problem, ikke et typisk selskap problem. 292 00:14:08,410 --> 00:14:12,670 Men kanskje hvis du har transaksjonslogger eller annen form for data som stadig 293 00:14:12,670 --> 00:14:15,610 blir skrevet inn i databasen som absolutt kunne ha milliarder 294 00:14:15,610 --> 00:14:18,900 og milliarder av rader, og du bruker et heltall for det, 295 00:14:18,900 --> 00:14:22,750 hva som skal skje så snart som du kommer til rad nummer 4000000000 296 00:14:22,750 --> 00:14:26,210 og deretter prøver å sette inn 4 milliard og en, så å si? 297 00:14:26,210 --> 00:14:29,610 Jeg forenkle tallene litt. 298 00:14:29,610 --> 00:14:33,740 >> Du kan klippe tilbake, jeg mener du må håndtere det liksom. 299 00:14:33,740 --> 00:14:37,910 Og hva en datamaskin ville vanligvis gjør, tenker på det selv fra i morges, 300 00:14:37,910 --> 00:14:42,430 hvis du har en 4-bits verdi som 1, 1, 1, 1, som, 301 00:14:42,430 --> 00:14:44,920 bare for å binde morgen sammen til ettermiddagen, hva 302 00:14:44,920 --> 00:14:48,369 betyr dette tallet representerer i binær? 303 00:14:48,369 --> 00:14:49,410 OK, vi skal gjøre det lettere. 304 00:14:49,410 --> 00:14:53,310 Hva betyr dette tallet representerer i binær? 305 00:14:53,310 --> 00:14:56,794 OK, vi skal gjøre det enklere, hva gjør dette representerer i binær? 306 00:14:56,794 --> 00:14:57,460 PUBLIKUM: Tre. 307 00:14:57,460 --> 00:14:59,670 DAVID MALAN: Tre, fordi vi har de column-- 308 00:14:59,670 --> 00:15:00,450 [LATTER] 309 00:15:00,450 --> 00:15:01,350 Puh! 310 00:15:01,350 --> 00:15:03,980 Vi hadde de kolonne og toere kolonnen. 311 00:15:03,980 --> 00:15:07,250 Så antar at, ja, vår [? infield?] var ikke 32 bits, 312 00:15:07,250 --> 00:15:13,440 men det var to biter, vi kan telle fra brukerens nummer 0, 1, 2, 3, 313 00:15:13,440 --> 00:15:18,040 og da er vi litt tilbake til bruker 00 igjen. 314 00:15:18,040 --> 00:15:19,739 Så dette er hva vanligvis skjer. 315 00:15:19,739 --> 00:15:22,780 Hvis du noen gang har hørt expression-- sannsynligvis ikke, men hvis du Opptaktene 316 00:15:22,780 --> 00:15:26,500 Heltallsoverflyt, hvor du holde bla alle dine biter 317 00:15:26,500 --> 00:15:29,640 å være den største mulige verdier, og da er du ute av biter, 318 00:15:29,640 --> 00:15:30,850 hva ville vanligvis skje? 319 00:15:30,850 --> 00:15:32,280 Hvorfor må jeg si 00? 320 00:15:32,280 --> 00:15:33,220 Vel, dette er tre. 321 00:15:33,220 --> 00:15:34,230 Hvordan skriver jeg fire? 322 00:15:34,230 --> 00:15:36,890 323 00:15:36,890 --> 00:15:38,915 Hvordan representerer jeg den for nummer 4 i binær? 324 00:15:38,915 --> 00:15:39,790 PUBLIKUM: [uhørlig] 325 00:15:39,790 --> 00:15:41,780 DAVID MALAN: One-- yeah, ikke si 100 per se, 326 00:15:41,780 --> 00:15:44,190 fordi det har feil konnotasjon, men 1-0-0. 327 00:15:44,190 --> 00:15:48,920 Slik at antall 1-0-0 er faktisk riktig, men hvis du bare har to biter, 328 00:15:48,920 --> 00:15:50,820 hva har du egentlig gjort? 329 00:15:50,820 --> 00:15:53,219 Du har rullet over til 00. 330 00:15:53,219 --> 00:15:54,760 Og ja, det er hva som ville skje. 331 00:15:54,760 --> 00:15:56,884 Egentlig kan du tenke om dette mer fortrolig. 332 00:15:56,884 --> 00:15:59,350 Hvis du husker, hva, 16 år siden, verden 333 00:15:59,350 --> 00:16:03,380 skulle ende når Y2K problemet skjedde. 334 00:16:03,380 --> 00:16:04,330 Hvorfor var det? 335 00:16:04,330 --> 00:16:08,170 Vel de fleste datamaskiner, for fornuftige beslutninger, 336 00:16:08,170 --> 00:16:15,320 ble lagring av tall som år 1975 eller år 1999 337 00:16:15,320 --> 00:16:19,010 ved å bare bruke to sifre i datamaskinens minne. 338 00:16:19,010 --> 00:16:21,950 Så selvfølgelig, hva skjer når du kommer til år 2000, 339 00:16:21,950 --> 00:16:25,790 du gå til denne, eller rettere sagt, ja. 340 00:16:25,790 --> 00:16:30,120 Så du går til år 2000, men hvis du bare bruker to sifre det ser ut 341 00:16:30,120 --> 00:16:32,660 som året 00 og så du har rullet over. 342 00:16:32,660 --> 00:16:36,820 Og dette er grunnen til at mange systemer nødvendig å bli oppdatert samtidig. 343 00:16:36,820 --> 00:16:42,500 >> Så med det sagt, selskaper som Facebook løpe opp mot dette. 344 00:16:42,500 --> 00:16:46,147 Så den eneste måten å håndtere situasjon, ærlig, er å forutse det. 345 00:16:46,147 --> 00:16:47,980 Eller den reneste måten å håndtere denne situasjonen 346 00:16:47,980 --> 00:16:50,330 er å forutse det slik at du ikke nødt til å gjøre endringer senere. 347 00:16:50,330 --> 00:16:51,970 Så i stedet for 8 byte, vet du hva? 348 00:16:51,970 --> 00:16:54,261 Jeg kommer til å være framtidsrettet her, selv om det er 349 00:16:54,261 --> 00:16:56,760 litt optimistisk at vi kommer til å ha 4 milliarder 350 00:16:56,760 --> 00:16:58,850 og 1 brukere på våre nettsider. 351 00:16:58,850 --> 00:17:01,790 Men la oss bare bruke 8 byte, eller 64 bits, som vanligvis ville bli 352 00:17:01,790 --> 00:17:05,640 kalles en stor heltall, veldig teknisk. 353 00:17:05,640 --> 00:17:10,280 Og det betyr bare at du kan ha enda flere siffer i nummeret ditt. 354 00:17:10,280 --> 00:17:12,599 Men dette er en viktig utforming avgjørelse, 355 00:17:12,599 --> 00:17:16,400 fordi hvis du velger et tall som har for få biter av ekspressivitet 356 00:17:16,400 --> 00:17:19,089 du kan faktisk lage en feil i programvaren. 357 00:17:19,089 --> 00:17:21,750 >> Greit, så la oss bryte opp med e-post og postadresse. 358 00:17:21,750 --> 00:17:26,369 Så e-post, hvor lenge bør en e-postadresse være? 359 00:17:26,369 --> 00:17:26,869 50. 360 00:17:26,869 --> 00:17:29,220 Jeg har ingen anelse om, men det er sannsynligvis noe sånt, 361 00:17:29,220 --> 00:17:32,261 fordi ellers ingen kommer til å skrive deg hvis det blir for lang, så 50, 362 00:17:32,261 --> 00:17:33,360 la oss gå med det for nå. 363 00:17:33,360 --> 00:17:35,770 Adresse, hvor lenge skal det være? 364 00:17:35,770 --> 00:17:38,325 365 00:17:38,325 --> 00:17:39,200 PUBLIKUM: [uhørlig] 366 00:17:39,200 --> 00:17:41,900 367 00:17:41,900 --> 00:17:43,890 >> DAVID MALAN: Det er ikke bare et postnummer, skjønt. 368 00:17:43,890 --> 00:17:45,720 Adresse, hørte jeg. 369 00:17:45,720 --> 00:17:50,720 Så dette er som en Brattle Square, komma, Cambridge Mass., komma, 02138. 370 00:17:50,720 --> 00:17:53,860 Og faktisk, la meg bare dra opp litt regneark her. 371 00:17:53,860 --> 00:17:56,510 Dette føles som om det er en tapt mulighet. 372 00:17:56,510 --> 00:18:01,480 Hvis vi har en Brattle Square, komma, Cambridge, MA 02138, 373 00:18:01,480 --> 00:18:04,510 Jeg føler at vi kan gjøre bedre enn bare postadresse. 374 00:18:04,510 --> 00:18:07,100 Hvorfor gjør vi ikke eksplodere dette litt? 375 00:18:07,100 --> 00:18:08,030 Hva får jeg på? 376 00:18:08,030 --> 00:18:10,970 Hva bør vi i stedet ha for våre rekker her, kanskje? 377 00:18:10,970 --> 00:18:12,260 >> PUBLIKUM: [uhørlig] 378 00:18:12,260 --> 00:18:17,579 >> DAVID MALAN: Ja, så la oss kalle det street_number, 379 00:18:17,579 --> 00:18:20,620 og en understrekning er bare en vanlig måte å ha det som ser ut som en plass, 380 00:18:20,620 --> 00:18:22,360 men det er ikke, faktisk. 381 00:18:22,360 --> 00:18:26,240 Street, og deretter city-- lei? 382 00:18:26,240 --> 00:18:28,440 >> PUBLIKUM: [uhørlig] 383 00:18:28,440 --> 00:18:29,690 DAVID MALAN: Vi kunne gjøre det. 384 00:18:29,690 --> 00:18:30,702 Linje en, linje to. 385 00:18:30,702 --> 00:18:32,410 Hvorfor kan ikke vi vil holde det enkelt for nå, 386 00:18:32,410 --> 00:18:34,840 men det er absolutt en akseptabel avgjørelse. 387 00:18:34,840 --> 00:18:38,180 Og så staten, og så la oss være litt USA-sentriske for nå 388 00:18:38,180 --> 00:18:42,040 og bare gjøre postnummer, bare fordi det vil føre til en interessant feil 389 00:18:42,040 --> 00:18:43,090 eller problem her. 390 00:18:43,090 --> 00:18:44,655 Så antar det er nå vår adresse. 391 00:18:44,655 --> 00:18:47,280 Det er litt mer irriterende at Vi har alle disse flere felt, 392 00:18:47,280 --> 00:18:49,200 men nå kan vi merke ting litt bedre. 393 00:18:49,200 --> 00:18:53,210 >> Så nå gatenummer trolig bør ikke være en char, skulle det? 394 00:18:53,210 --> 00:18:54,835 Hva skulle det være? 395 00:18:54,835 --> 00:18:55,710 PUBLIKUM: [uhørlig] 396 00:18:55,710 --> 00:18:57,835 DAVID MALAN: Kanskje, et tall som et heltall igjen? 397 00:18:57,835 --> 00:19:00,170 En stor heltall? 398 00:19:00,170 --> 00:19:02,170 Du har sannsynligvis ikke leve på 4 milliarder Main Street 399 00:19:02,170 --> 00:19:03,490 eller noe gale sånn. 400 00:19:03,490 --> 00:19:06,850 Så heltall er sannsynligvis fine, men har noen 401 00:19:06,850 --> 00:19:13,880 noensinne har levd på en adresse som 1A Brattle Square, eller en og 1/2? 402 00:19:13,880 --> 00:19:17,030 Disse tingene finnes, dessverre, selv om du ikke har bodd der, 403 00:19:17,030 --> 00:19:21,240 det er disse anomaliene som leilighet 1A, 1B, 1C. 404 00:19:21,240 --> 00:19:24,260 Så vet du hva, vi sannsynligvis bør ikke gå med heltall, 405 00:19:24,260 --> 00:19:27,440 ellers skal vi å miste noen salg. 406 00:19:27,440 --> 00:19:29,920 >> Char-feltet, kanskje? 407 00:19:29,920 --> 00:19:30,870 Jeg vet ikke hvor lenge. 408 00:19:30,870 --> 00:19:33,370 Det er sannsynligvis ikke kommer til å være så lang tid, så 10 eller noe. 409 00:19:33,370 --> 00:19:34,950 Ingen kommer til å skrive en lengre rekke, kanskje. 410 00:19:34,950 --> 00:19:37,070 Men igjen, bør vi sannsynligvis tenke mer på det. 411 00:19:37,070 --> 00:19:39,900 Kanskje google, gjøre noen undersøkelser, men vi vil gå med våre guts for nå. 412 00:19:39,900 --> 00:19:44,565 Streets, røye, 50, jeg vet ikke. 413 00:19:44,565 --> 00:19:46,940 På et tidspunkt, ingen kommer å skrive det på en konvolutt, 414 00:19:46,940 --> 00:19:49,350 også, så det er nok noen øvre grenser der. 415 00:19:49,350 --> 00:19:54,200 City, samme, sikker, så røye 50. 416 00:19:54,200 --> 00:19:59,120 >> Staten kan være USA-sentriske for nå. 417 00:19:59,120 --> 00:20:01,850 Så det kan være en liste, så snill av en vurderingssak, tilstand. 418 00:20:01,850 --> 00:20:04,000 Det kan være som to tegn. 419 00:20:04,000 --> 00:20:06,140 Så egentlig, kanskje, holdt jeg sier røye. 420 00:20:06,140 --> 00:20:09,420 Jeg mener sannsynligvis varchar, bare for noen effektivitet, 421 00:20:09,420 --> 00:20:12,240 men vi vil komme tilbake til denne avgjørelsen i et øyeblikk. 422 00:20:12,240 --> 00:20:16,150 Kan være en char med lengde 2 for staten. 423 00:20:16,150 --> 00:20:20,670 Hvis du er i USA de har, som MA, Massachusetts, NY, New York, New Jersey, New 424 00:20:20,670 --> 00:20:22,100 Jersey, og så videre. 425 00:20:22,100 --> 00:20:23,630 Så det kan være fast på det. 426 00:20:23,630 --> 00:20:25,900 DC for Washington DC. 427 00:20:25,900 --> 00:20:29,915 >> Men jeg tror, ​​Olivier, du foreslått en annen tilnærming. 428 00:20:29,915 --> 00:20:30,790 PUBLIKUM: [uhørlig] 429 00:20:30,790 --> 00:20:33,670 DAVID MALAN: Ja, det er slik at en Litt irriterende å skrive inn, 430 00:20:33,670 --> 00:20:37,890 men en enum kan være mer fornuftig, fordi denne måten, i det minste i USA, 431 00:20:37,890 --> 00:20:41,320 du kan nummerere, hvis ordinært, men du gjør det bare en gang i databasen 432 00:20:41,320 --> 00:20:47,480 og aldri igjen måtte tenke på det, alle 50 to-tegnkoder. 433 00:20:47,480 --> 00:20:48,660 Så jeg liker enum. 434 00:20:48,660 --> 00:20:51,720 La oss holde fast med det der, fordi den slags håndhever mer fasthet. 435 00:20:51,720 --> 00:20:53,620 Og så postnummer? 436 00:20:53,620 --> 00:20:55,306 Jeg tror Andrew hadde en tanke om at 437 00:20:55,306 --> 00:20:56,180 PUBLIKUM: [uhørlig] 438 00:20:56,180 --> 00:20:57,240 DAVID MALAN: Ja, fem eller ni. 439 00:20:57,240 --> 00:20:58,323 La oss bare holde det enkelt. 440 00:20:58,323 --> 00:20:59,380 Bare gjør fem for nå. 441 00:20:59,380 --> 00:21:03,070 Men kanskje jeg bare kunne gjøre et heltall, ikke sant? 442 00:21:03,070 --> 00:21:08,750 Jeg kunne, men vet du hva, jeg har gjort denne feilen en gang, i en viss forstand. 443 00:21:08,750 --> 00:21:13,110 For mange år siden var jeg migrerer fra Microsoft Outlook til Gmail, 444 00:21:13,110 --> 00:21:18,640 og Outlook har en måte å eksportere alle kontaktene dine som en Excel-fil, 445 00:21:18,640 --> 00:21:21,280 en CSV-fil, kommaseparerte verdier fil. 446 00:21:21,280 --> 00:21:23,950 Og jeg gjorde en feil, jeg tenker på å dobbeltklikke på det, 447 00:21:23,950 --> 00:21:27,380 når jeg lastet ned eksport, til sørge for at det så ut som jeg forventet. 448 00:21:27,380 --> 00:21:31,320 Jeg må ha truffet Lagre eller la auto-save skudd eller noe. 449 00:21:31,320 --> 00:21:35,100 Fordi når jeg deretter importeres det inn i Gmail, alt arbeidet. 450 00:21:35,100 --> 00:21:39,910 Men i år, til denne dagen, og Jeg gjorde dette fem, for 10 år siden, 451 00:21:39,910 --> 00:21:44,380 Jeg er fortsatt å finne venner som har adresser som ser ut som dette. 452 00:21:44,380 --> 00:21:45,700 Hvorfor? 453 00:21:45,700 --> 00:21:47,900 >> PUBLIKUM: [uhørlig] 454 00:21:47,900 --> 00:21:50,650 >> DAVID MALAN: Det tok 0, vel, heller, det 455 00:21:50,650 --> 00:21:53,810 tok hele postnummer som et tall, og derfor er det 456 00:21:53,810 --> 00:21:56,590 en ledende 0 som betyr det har ingen betydning. 457 00:21:56,590 --> 00:21:59,470 Og så 2138 ser ut til å være min postnummer. 458 00:21:59,470 --> 00:22:07,100 Og dette er, ærlig, en irriterende Excel funksjon der jeg tror som standard, 459 00:22:07,100 --> 00:22:10,980 selv om det er ment å bare være tekst, Microsoft Excel 460 00:22:10,980 --> 00:22:13,780 bestemmer, la meg være nyttig, og oh, ser jeg bare tall. 461 00:22:13,780 --> 00:22:15,290 La oss behandle disse som tall. 462 00:22:15,290 --> 00:22:16,790 Og det avkorter de ledende nuller. 463 00:22:16,790 --> 00:22:19,165 >> Jeg sverger til Gud, hvert par månedene jeg finne en adresse, 464 00:22:19,165 --> 00:22:22,300 og ut av en slags OCD, jeg går tilbake inn og legge til 0, selv om jeg aldri 465 00:22:22,300 --> 00:22:23,700 sende folk bokstaver eller noe. 466 00:22:23,700 --> 00:22:25,510 Men jeg er fortsatt å finne rester av dette. 467 00:22:25,510 --> 00:22:28,820 Så dette er å si, er dette en god idé? 468 00:22:28,820 --> 00:22:31,610 OK, nei, fordi noen i Massachusetts, i dette området, 469 00:22:31,610 --> 00:22:33,270 kommer til å ha en o ledende dem. 470 00:22:33,270 --> 00:22:38,070 Så la oss gå med like røye, sannsynligvis, fem. 471 00:22:38,070 --> 00:22:41,450 >> Og her, innser vi kunne bruke en enum og vi 472 00:22:41,450 --> 00:22:44,600 kunne oppsummere 10000 mulige postnummer, 473 00:22:44,600 --> 00:22:48,530 men det føles som om det er nok krysset en linje av, liker, fordeler. 474 00:22:48,530 --> 00:22:51,350 Hvis du har til innspill som mye data i databasen 475 00:22:51,350 --> 00:22:52,940 å beskytte mot noe. 476 00:22:52,940 --> 00:22:57,400 Så røye skjønte du kan skrive i H-E-L-L-O som ditt postnummer, 477 00:22:57,400 --> 00:22:59,180 som ikke er det, selvsagt, numerisk. 478 00:22:59,180 --> 00:23:01,680 Så det er ingen måte, i en typisk database, 479 00:23:01,680 --> 00:23:05,561 å spesifisere bare tall- og bare fem tegn, 480 00:23:05,561 --> 00:23:07,310 så vi kommer til å ha å gjøre det i kode. 481 00:23:07,310 --> 00:23:11,100 Vi kommer til å gjøre det i PHP eller Java eller uansett språk vi er 482 00:23:11,100 --> 00:23:14,230 bruker på serveren for å håndheve den slags tvang. 483 00:23:14,230 --> 00:23:14,860 >> Whoo! 484 00:23:14,860 --> 00:23:18,322 Ok, så noen spørsmål ennå? 485 00:23:18,322 --> 00:23:19,780 La oss gjøre et annet valg med. 486 00:23:19,780 --> 00:23:22,500 Det viser seg at du også kommer til å velge, 487 00:23:22,500 --> 00:23:26,600 når du utformer en SQL-database, eller typiske relasjonelle database-- der 488 00:23:26,600 --> 00:23:28,790 igjen, relasjons bare betyr rader og kolonner, 489 00:23:28,790 --> 00:23:35,500 det er hvordan du organisere data-- og innse at hva dette betyr er, 490 00:23:35,500 --> 00:23:37,740 Jeg har vært misvisende i det er jeg drawing-- dette 491 00:23:37,740 --> 00:23:40,190 er det som kalles skjemaet for en databasetabell. 492 00:23:40,190 --> 00:23:42,810 Dette er som spesifikasjoner for table-- 493 00:23:42,810 --> 00:23:48,040 men når det gjelder tid å faktisk lagre data, 494 00:23:48,040 --> 00:23:52,081 og vi vil gjøre dette bare ved eksempel her. 495 00:23:52,081 --> 00:23:55,080 Jeg kommer til å åpne opp Excel, fordi Excel vil gi meg rader og kolonner. 496 00:23:55,080 --> 00:23:58,050 Og det er akkurat hva Oracle og MySQL og andre verktøy vil gi meg. 497 00:23:58,050 --> 00:24:02,270 Så jeg bare kommer til å bruke det for diskusjon skyld. 498 00:24:02,270 --> 00:24:05,250 La meg gå videre og åpne opp en representant dokument her, 499 00:24:05,250 --> 00:24:06,310 zoome inn litt. 500 00:24:06,310 --> 00:24:15,200 Så for eksempel, våre overskrifter er nå fornavn, etternavn, kjønn, ID, 501 00:24:15,200 --> 00:24:20,980 e-post, gatenummer, gate, whoops. 502 00:24:20,980 --> 00:24:25,710 Gate, by, stat, bare om passer på skjermen. 503 00:24:25,710 --> 00:24:29,080 >> Så hva dette betyr er at når en brukeren først registrerer for nettstedet mitt, 504 00:24:29,080 --> 00:24:32,880 det kommer til å være noe sånt David Malan, m, la oss si en, 505 00:24:32,880 --> 00:24:42,910 malan@harvard.edu, vil gatenummer være som en Brattle Square, Cambridge, MA, 506 00:24:42,910 --> 00:24:44,780 02138, og da så videre. 507 00:24:44,780 --> 00:24:48,290 Så når jeg sier at en relasjonsdatabase eller SQL-database er rader og kolonner, 508 00:24:48,290 --> 00:24:49,350 Jeg mener dette. 509 00:24:49,350 --> 00:24:51,900 Det faktiske data lagres i rader og kolonner. 510 00:24:51,900 --> 00:24:53,950 Dette er bare en tilfeldighet, at vi snakket, 511 00:24:53,950 --> 00:24:56,033 og jeg var bare å tegne den ut i rader og kolonner. 512 00:24:56,033 --> 00:24:58,320 Dette er bare skjemaet, det overordnede definisjonen. 513 00:24:58,320 --> 00:25:01,640 >> Så av disse feltene her, eller ekvivalent, der, 514 00:25:01,640 --> 00:25:06,270 som er de feltene som du tror Jeg er sannsynlig å søke på hvis jeg er en bruker 515 00:25:06,270 --> 00:25:09,200 eller om jeg er den databaseadministrator? 516 00:25:09,200 --> 00:25:12,426 Liker, hva felt er jeg faktisk kommer til å søke på? 517 00:25:12,426 --> 00:25:13,830 >> PUBLIKUM: [uhørlig] 518 00:25:13,830 --> 00:25:17,690 >> DAVID MALAN: Navnet, ja så Jeg liker det faktum at-- yeah, 519 00:25:17,690 --> 00:25:19,750 e-post kan være ganske vanlig. 520 00:25:19,750 --> 00:25:21,440 Beklager, du sa navnet. 521 00:25:21,440 --> 00:25:24,030 Så maybe-- og igjen, vi er form av å snakke i det abstrakte. 522 00:25:24,030 --> 00:25:25,988 Jeg vet ikke hvorfor du ville være å søke etter et navn, 523 00:25:25,988 --> 00:25:29,340 men som føles rimelig hvis du søker etter en bruker. 524 00:25:29,340 --> 00:25:31,170 Kanskje sier, sikker, ID. 525 00:25:31,170 --> 00:25:34,100 526 00:25:34,100 --> 00:25:36,160 >> Og det er en glatt skråningen, fordi jeg kunne 527 00:25:36,160 --> 00:25:38,890 pønsker et scenario der kanskje sjefen min har bedt meg om, 528 00:25:38,890 --> 00:25:40,417 hvor mange menn har vi på vår side? 529 00:25:40,417 --> 00:25:42,000 Hvor mange kvinner har vi på vår side? 530 00:25:42,000 --> 00:25:45,210 Og så på det punktet, vil du kanskje for å søke på kjønnsfeltet, også, 531 00:25:45,210 --> 00:25:45,940 og ingenting annet. 532 00:25:45,940 --> 00:25:47,350 Så det er en avveining her. 533 00:25:47,350 --> 00:25:49,180 Igjen, det er ingen rette svaret, men det 534 00:25:49,180 --> 00:25:53,760 er en funksjon i de fleste SQL-databaser kjent som indeksering, der 535 00:25:53,760 --> 00:25:56,100 du, designeren, den Databaseadministrator, 536 00:25:56,100 --> 00:26:01,730 får bestemme på forhånd hvilke markene til databasen bør optimalisere 537 00:26:01,730 --> 00:26:02,980 for søk på. 538 00:26:02,980 --> 00:26:07,620 >> Du kan meget naivt si, optimalisere dette, optimalisere det, optimalisere dette, 539 00:26:07,620 --> 00:26:10,300 optimere det og dette, og databasen vil 540 00:26:10,300 --> 00:26:14,882 gjøre noen magiske ting under hette, og gjøre noe på en slik måte 541 00:26:14,882 --> 00:26:17,090 at neste gang du søker på noen av disse feltene, 542 00:26:17,090 --> 00:26:18,400 Det vil faktisk være raskere. 543 00:26:18,400 --> 00:26:19,110 Dette er mulig. 544 00:26:19,110 --> 00:26:20,530 Det trenger ikke avbryte seg ut. 545 00:26:20,530 --> 00:26:22,500 Men det må være en pris som er betalt. 546 00:26:22,500 --> 00:26:27,220 >> Hvis du naivt, eller over-entusiastisk si, indeksere alle disse feltene, 547 00:26:27,220 --> 00:26:29,810 så å si, gjøre dem alle effektivt søkbar, 548 00:26:29,810 --> 00:26:31,625 hvilken pris er du sannsynligvis betale? 549 00:26:31,625 --> 00:26:32,500 PUBLIKUM: [uhørlig] 550 00:26:32,500 --> 00:26:33,090 DAVID MALAN: Ytelse. 551 00:26:33,090 --> 00:26:33,798 Hva mener du? 552 00:26:33,798 --> 00:26:37,380 Vel ytelse, i det minste i konteksten jeg diskuterer, er bedre nå. 553 00:26:37,380 --> 00:26:38,830 Det er definisjonen av indeksering. 554 00:26:38,830 --> 00:26:41,180 Det vil gjøre søk raskere. 555 00:26:41,180 --> 00:26:43,366 Så tiden minker, så å si. 556 00:26:43,366 --> 00:26:44,240 PUBLIKUM: [uhørlig] 557 00:26:44,240 --> 00:26:45,031 DAVID MALAN: Space. 558 00:26:45,031 --> 00:26:46,520 Så igjen, dette er en vanlig handel. 559 00:26:46,520 --> 00:26:50,820 Jeg kan fremskynde søkene dine, men det er kommer til å koste deg flere byte av plass. 560 00:26:50,820 --> 00:26:51,610 Hvorfor? 561 00:26:51,610 --> 00:26:55,230 Vel, som standard, hvis vi ikke har noen av disse røde stjerner, ingen av disse indeksene, 562 00:26:55,230 --> 00:26:58,797 som jeg sier, hvordan kan du søke etter et navn i denne databasen? 563 00:26:58,797 --> 00:27:00,630 Så la oss trekke vår hensyn til dette eksemplet. 564 00:27:00,630 --> 00:27:06,300 Hvis vi har David og Scully og Kareem og Arwa og andre i disse radene, 565 00:27:06,300 --> 00:27:06,910 for eksempel. 566 00:27:06,910 --> 00:27:08,390 >> Så la oss gjøre akkurat det. 567 00:27:08,390 --> 00:27:13,990 Scully er her inne, og deretter vi har Kareem, og Arwa, 568 00:27:13,990 --> 00:27:18,390 og alle andre, hvis du ikke har en indeks definert, så å si, 569 00:27:18,390 --> 00:27:20,160 det beste du kan gjøre er lineær søk. 570 00:27:20,160 --> 00:27:23,470 Hvis du søker etter Arwa, vi er ikke kommer til å være i stand til å hoppe rett til henne 571 00:27:23,470 --> 00:27:24,140 raskt. 572 00:27:24,140 --> 00:27:26,556 Vi kommer til å starte øverst og gå helt ned til bunnen, 573 00:27:26,556 --> 00:27:28,600 ikke ulikt vår opprinnelige Mike Smith eksempel. 574 00:27:28,600 --> 00:27:33,470 >> Hvis, derimot, sier jeg, hei, database, indeksere fornavn feltet, 575 00:27:33,470 --> 00:27:37,000 så det kommer til å gjøre noe avansert og støtte noe 576 00:27:37,000 --> 00:27:38,130 som binære søk. 577 00:27:38,130 --> 00:27:39,820 Det er nok ikke binært søk per se. 578 00:27:39,820 --> 00:27:42,810 Databaser pleier å bruke en annen datastruktur kalt B-trær, 579 00:27:42,810 --> 00:27:46,540 ikke forveksles med binære trær, som bare gjør det raskere å søke 580 00:27:46,540 --> 00:27:48,500 noe logaritmisk i naturen. 581 00:27:48,500 --> 00:27:53,510 Men prisen du betaler for å bygge opp den trekk, at datastruktur i minnet, 582 00:27:53,510 --> 00:27:54,570 er flere bytes. 583 00:27:54,570 --> 00:27:57,170 Så det kan ta noen megabyte, noen gigabyte, hvem vet? 584 00:27:57,170 --> 00:27:58,410 Det avhenger av dataene. 585 00:27:58,410 --> 00:28:02,640 >> Så på et tidspunkt, må du bestemme, det er nok ikke en vanlig sak. 586 00:28:02,640 --> 00:28:06,000 Så hva er den faktiske felles tilfeller, hvis du virkelig måtte velge, 587 00:28:06,000 --> 00:28:10,080 hva kan din favoritt feltene være? 588 00:28:10,080 --> 00:28:10,580 E-post. 589 00:28:10,580 --> 00:28:14,400 Og jeg liker e-post fordi e-post, I teorien bør være unike. 590 00:28:14,400 --> 00:28:17,650 Og så typisk, når du vet på forhånd at en av dine felt 591 00:28:17,650 --> 00:28:20,277 er eller vil være unik, at pleier å være en god felt 592 00:28:20,277 --> 00:28:22,860 å søke på, fordi den måten, når du søker etter noe, 593 00:28:22,860 --> 00:28:26,194 du kommer til å få tilbake en eller null svar og så er du ferdig. 594 00:28:26,194 --> 00:28:28,110 Du trenger ikke å holde leter etter men andre. 595 00:28:28,110 --> 00:28:31,992 >> Og så i dette tilfellet her, e-post, så lenge du ikke kan registrere to ganger 596 00:28:31,992 --> 00:28:33,450 med den samme e-post, er en god en. 597 00:28:33,450 --> 00:28:36,710 ID per definisjon, i informatikk verden, 598 00:28:36,710 --> 00:28:39,610 hvis du snakker om en ID, som bedre hadde være unikt. 599 00:28:39,610 --> 00:28:42,970 Det er liksom den konnotasjon av ID eller identifikator. 600 00:28:42,970 --> 00:28:46,440 Og resten av disse kan være, la oss kalle dem hyggelig å haves, 601 00:28:46,440 --> 00:28:47,860 men egentlig ikke nødvendig. 602 00:28:47,860 --> 00:28:49,976 >> Og så i en database, du angir indekser, 603 00:28:49,976 --> 00:28:51,350 men du kan være enda mer presis. 604 00:28:51,350 --> 00:28:56,060 Du kan si hei, database, sørg at hver ID i denne tabellen er unik. 605 00:28:56,060 --> 00:28:59,330 Ikke engang la en programmerer tilfeldigvis satt i en duplikat e-post 606 00:28:59,330 --> 00:29:00,740 eller kopiere ID-nummer. 607 00:29:00,740 --> 00:29:03,140 Så mye som enums beskytte oss på samme måte, du 608 00:29:03,140 --> 00:29:04,881 kan ha disse lavere nivå forsvar. 609 00:29:04,881 --> 00:29:07,130 Og så database design, i noen måte er like gøy, 610 00:29:07,130 --> 00:29:08,380 fordi du gjør det defensivt. 611 00:29:08,380 --> 00:29:11,460 Du slags anta at du jobber med fryktelig, fryktelig programmerere 612 00:29:11,460 --> 00:29:15,550 og du ønsker å sette inn så mange forsvar du kan for å beskytte dine data, 613 00:29:15,550 --> 00:29:18,940 men samtidig du vil for å hjelpe dem bedre resultater 614 00:29:18,940 --> 00:29:21,386 ved å velge hvilken felt for å optimalisere for. 615 00:29:21,386 --> 00:29:24,260 Men du kan ikke nødvendigvis gjøre det i et vakuum som vi slags er her. 616 00:29:24,260 --> 00:29:26,480 Du er nødt til å vite hva som er de vanligste tilfellene være. 617 00:29:26,480 --> 00:29:29,397 Hvis utviklerne er implementere en adressebok, 618 00:29:29,397 --> 00:29:32,230 du kan godt ønsker å kunne for å søke på nesten alle felt, 619 00:29:32,230 --> 00:29:33,830 bare ved innholdet i søknaden. 620 00:29:33,830 --> 00:29:37,910 Så kanskje du bruker som ekstra plass. 621 00:29:37,910 --> 00:29:39,090 >> Høyre, noen spørsmål? 622 00:29:39,090 --> 00:29:41,820 623 00:29:41,820 --> 00:29:42,486 Yeah. 624 00:29:42,486 --> 00:29:43,470 >> PUBLIKUM: [uhørlig] 625 00:29:43,470 --> 00:29:44,404 >> DAVID MALAN: Nei. 626 00:29:44,404 --> 00:29:45,279 >> PUBLIKUM: [uhørlig] 627 00:29:45,279 --> 00:29:47,840 628 00:29:47,840 --> 00:29:48,826 >> DAVID MALAN: OK. 629 00:29:48,826 --> 00:29:49,701 >> PUBLIKUM: [uhørlig] 630 00:29:49,701 --> 00:29:52,420 631 00:29:52,420 --> 00:29:54,850 >> DAVID MALAN: Å, så vi snakker i en vei 632 00:29:54,850 --> 00:29:57,940 nå det er helt språket agnostiker. 633 00:29:57,940 --> 00:30:02,370 Så vi snakker nå om relasjonsdatabaser mer generelt, 634 00:30:02,370 --> 00:30:04,760 eller SQL databaser mer generelt. 635 00:30:04,760 --> 00:30:06,870 >> PUBLIKUM: [uhørlig] 636 00:30:06,870 --> 00:30:10,030 >> DAVID MALAN: Et bedre ord å bruke er, kan brukes av alle språk. 637 00:30:10,030 --> 00:30:15,280 Så jeg kan skrive Javascript-kode, C kode, C ++ kode, Java kode, Ruby kode, 638 00:30:15,280 --> 00:30:19,010 som alle snakke med en database og utføre spørringer. 639 00:30:19,010 --> 00:30:22,310 Faktisk, det er ikke en dårlig naturlig overgang til et eksempel spørring. 640 00:30:22,310 --> 00:30:25,720 Og igjen, vi kommer ikke til å gå inn Java eller C ++ eller noe av det lenger, 641 00:30:25,720 --> 00:30:29,420 men i SQL, språket som jeg holder henvise, Structured Query Language, 642 00:30:29,420 --> 00:30:32,790 Dette i seg selv er et programmeringsspråk, men det er ment å bli brukt for, ingen 643 00:30:32,790 --> 00:30:37,330 overraskelse, strukturert spørrespørringer. 644 00:30:37,330 --> 00:30:38,660 >> Med det mener jeg dette. 645 00:30:38,660 --> 00:30:41,190 Måten du velger data fra en MySQL database 646 00:30:41,190 --> 00:30:49,330 er du bokstavelig talt skriver i programmet noe sånt som velger stjerne fra brukere. 647 00:30:49,330 --> 00:30:52,200 Jeg antar at denne tabellen, heretter kalles brukere. 648 00:30:52,200 --> 00:30:54,860 Jeg kan kalle det noe vi ønsker, men den slags er fornuftig. 649 00:30:54,860 --> 00:30:57,240 Og så velger er en veldig vanlig verb, hvis du 650 00:30:57,240 --> 00:30:59,290 vil i SQL, gjør det bokstavelig talt det. 651 00:30:59,290 --> 00:31:02,730 Hva tror du stjerne betyr i denne sammenheng? 652 00:31:02,730 --> 00:31:04,410 >> PUBLIKUM: [uhørlig] 653 00:31:04,410 --> 00:31:05,380 >> DAVID MALAN: Jeg beklager? 654 00:31:05,380 --> 00:31:06,300 >> PUBLIKUM: [uhørlig] 655 00:31:06,300 --> 00:31:09,580 >> DAVID MALAN: Ikke nødvendig, det er mer inkluderende enn det, faktisk. 656 00:31:09,580 --> 00:31:11,700 Det er wild card karakter. 657 00:31:11,700 --> 00:31:14,740 Stjerne nesten alltid betyr noe, så betyr dette, i dette tilfellet 658 00:31:14,740 --> 00:31:16,510 velge alt fra databasen. 659 00:31:16,510 --> 00:31:20,730 Så når jeg sier dette, mener jeg gi meg tilbake hver kolonne 660 00:31:20,730 --> 00:31:22,440 fra mitt bord kalt brukere. 661 00:31:22,440 --> 00:31:24,730 Så gi meg et resultatsett, som det heter. 662 00:31:24,730 --> 00:31:28,210 Med andre ord, gi meg en kopi av regneark, er det jeg prøver å si. 663 00:31:28,210 --> 00:31:34,890 >> Men hvis jeg sa velger stjerne fra brukere hvor ID lik 1, hvor stor bør 664 00:31:34,890 --> 00:31:36,640 mitt resultat sett være da? 665 00:31:36,640 --> 00:31:41,680 Eller ekvivalent, hvor mange rader bør Jeg skal leveres tilbake fra databasen? 666 00:31:41,680 --> 00:31:45,860 Sannsynligvis bare en, hvis jeg har faktisk behandlet ID som en unik identifikator, 667 00:31:45,860 --> 00:31:50,710 og hvis David har den unike ID, jeg bør få tilbake én og bare én rad 668 00:31:50,710 --> 00:31:53,220 inneholder alle Davids informasjon. 669 00:31:53,220 --> 00:31:56,390 Hvis jeg sa dette hvor ID lik 99, skal jeg komme tilbake, 670 00:31:56,390 --> 00:32:00,320 i denne sammenheng ingen rader, i det minste i øyeblikket. 671 00:32:00,320 --> 00:32:03,620 >> Men hvis jeg ikke egentlig bryr seg om all denne informasjonen, 672 00:32:03,620 --> 00:32:06,970 Jeg kunne bare si, hvor kommer David bor? 673 00:32:06,970 --> 00:32:10,860 Velg postnummer fra brukere der ID er en. 674 00:32:10,860 --> 00:32:15,820 Dette vil velge for meg bare Davids zip kode og ikke helheten av den raden. 675 00:32:15,820 --> 00:32:19,541 Hvorfor kan jeg gjøre dette i stedet for stjernen søket, wild card? 676 00:32:19,541 --> 00:32:21,950 >> PUBLIKUM: [uhørlig] 677 00:32:21,950 --> 00:32:24,590 >> DAVID MALAN: Ja, kanskje jeg bare trenger det. 678 00:32:24,590 --> 00:32:26,350 Så ytelse er igjen svaret her. 679 00:32:26,350 --> 00:32:28,540 Hvorfor be om mer informasjon enn du trenger, 680 00:32:28,540 --> 00:32:32,020 fordi selv om det er greit sammen, du har fortsatt å kopiere disse dataene, 681 00:32:32,020 --> 00:32:35,560 det ville virke, fra databasen inn i programmet eller annen måte, 682 00:32:35,560 --> 00:32:38,490 og det er bare dumt hvis du trenger bare fem av disse tallene, 683 00:32:38,490 --> 00:32:40,340 ikke helheten av raden. 684 00:32:40,340 --> 00:32:42,180 >> Så hvordan setter jeg inn en bruker? 685 00:32:42,180 --> 00:32:44,780 Anta at en bruker har bare registrert for første gang. 686 00:32:44,780 --> 00:32:46,560 Syntaksen vil vanligvis se slik ut. 687 00:32:46,560 --> 00:32:52,700 Sett inn brukere, og så vi vil si verdier, 688 00:32:52,700 --> 00:33:00,150 og da ville vi si verdier som, la oss si, Lauren Scully, 689 00:33:00,150 --> 00:33:02,380 vår videographer her. 690 00:33:02,380 --> 00:33:04,390 Og neste felt er kjønn. 691 00:33:04,390 --> 00:33:08,020 Så vi vil si sitat, unquote "F", så har vi en ID 692 00:33:08,020 --> 00:33:12,250 og jeg kommer til å say-- la oss late som hun er faktisk ikke her, 693 00:33:12,250 --> 00:33:14,380 så vi vil spole tilbake i historien. 694 00:33:14,380 --> 00:33:16,530 Så to vil bli hennes ID. 695 00:33:16,530 --> 00:33:19,130 Og så neste felt her er hennes e-post. 696 00:33:19,130 --> 00:33:22,140 Så det kommer til å bli som Lauren Scully og så videre, 697 00:33:22,140 --> 00:33:24,360 og vi må bare dot dot prikk den bort herfra på. 698 00:33:24,360 --> 00:33:26,890 Nå vil det bli litt langtekkelig, men innsatsen søket 699 00:33:26,890 --> 00:33:28,310 vil til slutt se ut som. 700 00:33:28,310 --> 00:33:30,970 >> Hvis jeg ønsker å bli kvitt Scully, uh-oh, la oss avregistrere 701 00:33:30,970 --> 00:33:37,420 henne, sletter hun sin konto, slette fra brukere der ID er lik 2, 702 00:33:37,420 --> 00:33:38,500 vil bli kvitt Scully. 703 00:33:38,500 --> 00:33:48,050 Eller jeg kan si oppdatere brukerne sette, la oss si, hva kan vi endre? 704 00:33:48,050 --> 00:33:49,430 Anta at hun beveger seg. 705 00:33:49,430 --> 00:33:53,730 Set zip lik 021-- nope, det er hennes nåværende zip. 706 00:33:53,730 --> 00:33:54,487 90210. 707 00:33:54,487 --> 00:33:56,320 Den eneste andre postnummer Jeg vet i verden. 708 00:33:56,320 --> 00:33:59,002 Så det ville endre hennes zip code-- faktisk, 709 00:33:59,002 --> 00:34:00,460 som ikke ville endre hennes postnummer. 710 00:34:00,460 --> 00:34:02,170 >> Hva gjorde jeg bare gjøre? 711 00:34:02,170 --> 00:34:04,292 Selv om syntaksen er trolig ny. 712 00:34:04,292 --> 00:34:05,302 >> PUBLIKUM: [uhørlig] 713 00:34:05,302 --> 00:34:08,010 DAVID MALAN: Ja, jeg flyttet alle Beverly Hills, California. 714 00:34:08,010 --> 00:34:11,920 Så jeg burde egentlig si hvor ID er lik to. 715 00:34:11,920 --> 00:34:12,820 Og så videre. 716 00:34:12,820 --> 00:34:15,290 Så SQL handler om disse typer instrukser. 717 00:34:15,290 --> 00:34:20,260 Velg, sette inn, slette, oppdatere, med disse predikater på slutten 718 00:34:20,260 --> 00:34:22,139 disse der klausuler, så å si. 719 00:34:22,139 --> 00:34:25,170 Og det er mye mer du kan gjøre, men det er egentlig bare koker ned 720 00:34:25,170 --> 00:34:29,750 til enkelt, hvis arcanely, uttrykker hva du vil at databasen skal gjøre. 721 00:34:29,750 --> 00:34:31,580 >> Og så databasen vil finne ut når 722 00:34:31,580 --> 00:34:35,630 du setter Lauren Scully inn database, hvor du skal sette henne i minnet 723 00:34:35,630 --> 00:34:38,230 slik at vi raskt kan få henne basert på hennes e-postadresse 724 00:34:38,230 --> 00:34:42,610 eller basert på hennes ID-nummer eller lignende. 725 00:34:42,610 --> 00:34:43,391 Ja, Dan. 726 00:34:43,391 --> 00:34:44,266 PUBLIKUM: [uhørlig] 727 00:34:44,266 --> 00:34:46,364 728 00:34:46,364 --> 00:34:47,780 DAVID MALAN: Virkelig godt spørsmål. 729 00:34:47,780 --> 00:34:50,370 Vil disse skriptene endres fra Microsoft Access til Oracle 730 00:34:50,370 --> 00:34:52,290 til MySQL til PostgreSQL? 731 00:34:52,290 --> 00:34:53,790 Det korte svaret er det avhenger. 732 00:34:53,790 --> 00:34:58,697 I teorien er det en meget betydelig felles delsett av SQL 733 00:34:58,697 --> 00:35:00,780 som deles på tvers av alle av disse implementeringer. 734 00:35:00,780 --> 00:35:03,340 Men, ulike produsenter har lagt til funksjoner 735 00:35:03,340 --> 00:35:07,120 til sine databaser for å gjøre visse ting utenfor rammen av disse funksjonene, 736 00:35:07,120 --> 00:35:08,720 som kan, i virkeligheten, i stykker. 737 00:35:08,720 --> 00:35:11,210 >> Så hvordan utviklere sikre seg mot dette, 738 00:35:11,210 --> 00:35:14,350 er at heller enn å skrive rå SQL-kode som jeg skriver her, 739 00:35:14,350 --> 00:35:19,460 de i stedet bruke et bibliotek, et felles bibliotek som seg selv 740 00:35:19,460 --> 00:35:23,650 er liksom høyere nivå og sammendrag borte hvilket produkt du bruker. 741 00:35:23,650 --> 00:35:25,710 Og det gir deg funksjoner og prosedyrer 742 00:35:25,710 --> 00:35:28,810 å ringe slik at du aldri faktisk skrive rå SQL. 743 00:35:28,810 --> 00:35:32,609 >> I teorien så kan du endre produkter fra Oracle til Microsoft 744 00:35:32,609 --> 00:35:34,650 eller vice versa, eller noe annet, og du bokstavelig talt 745 00:35:34,650 --> 00:35:36,920 endrer ingenting om koden din. 746 00:35:36,920 --> 00:35:40,180 Realiteten er imidlertid, du noen ganger gi opp funksjoner som resultat. 747 00:35:40,180 --> 00:35:43,860 Du har kanskje valgt et produkt fordi det har disse verdiøkende funksjoner, 748 00:35:43,860 --> 00:35:46,610 og du er bare nå ikke bruke dem bevisst. 749 00:35:46,610 --> 00:35:51,630 >> Og anekdotisk, de fleste selskaper har en tendens aldri å bevege seg bort fra deres database. 750 00:35:51,630 --> 00:35:54,002 Så selv om dette er en hyggelig å ha-funksjonen, virkeligheten 751 00:35:54,002 --> 00:35:55,960 er, hvis du overhale databasen, du er 752 00:35:55,960 --> 00:35:59,890 sannsynligvis lage bunter av andre endringer uansett, at du ikke nødvendigvis 753 00:35:59,890 --> 00:36:01,360 trenger å forutse det. 754 00:36:01,360 --> 00:36:03,720 Så det er uten tvil over-engineering problem, 755 00:36:03,720 --> 00:36:05,670 men det er egentlig avhengig av kontekst. 756 00:36:05,670 --> 00:36:09,960 Men i teorien, blir SQL-delt på tvers av disse forskjellige produkter. 757 00:36:09,960 --> 00:36:11,560 Virkelig gode spørsmål. 758 00:36:11,560 --> 00:36:12,272 Yeah. 759 00:36:12,272 --> 00:36:13,147 >> PUBLIKUM: [uhørlig] 760 00:36:13,147 --> 00:36:17,820 761 00:36:17,820 --> 00:36:21,480 >> DAVID MALAN: Ja, så du kan tenke en database 762 00:36:21,480 --> 00:36:25,020 er bare en server ved enden av dag, og på innsiden av denne serveren 763 00:36:25,020 --> 00:36:28,670 er en hel haug med tabeller, rader og kolonner. 764 00:36:28,670 --> 00:36:33,410 Og når du sender en spørring som dette fra programmet, ditt nettsted, 765 00:36:33,410 --> 00:36:39,340 skrevet i Java, Ruby, Python, uansett, serveren mottar denne kommandoen 766 00:36:39,340 --> 00:36:41,660 og tolke det i bokstavelig talt på samme måte 767 00:36:41,660 --> 00:36:43,660 vi diskutert tidligere med tolket språk, 768 00:36:43,660 --> 00:36:47,333 og deretter utføre noen handling på null eller flere rader i null eller flere tabeller. 769 00:36:47,333 --> 00:36:48,208 PUBLIKUM: [uhørlig] 770 00:36:48,208 --> 00:36:53,540 771 00:36:53,540 --> 00:36:55,070 >> DAVID MALAN: Akkurat, akkurat. 772 00:36:55,070 --> 00:36:58,450 Så pseudo for noe som det kan være dette. 773 00:36:58,450 --> 00:37:02,450 I PHP-filen eller Python-filen eller Java-fil, 774 00:37:02,450 --> 00:37:09,210 du ville ha pseudokode, eller Scratch-lignende blokker som, hvis brukeren besøker 775 00:37:09,210 --> 00:37:19,870 acme.com/register~~V for første gang, deretter sette inn brukere og så videre. 776 00:37:19,870 --> 00:37:22,619 Og vi ville oversette dette til mer konkret kode til slutt. 777 00:37:22,619 --> 00:37:24,660 Men egentlig har vi alle byggesteinene her, 778 00:37:24,660 --> 00:37:27,680 selv om vi hopper over noen av implementeringstrinn. 779 00:37:27,680 --> 00:37:31,560 >> Så la meg finne feil med det vi fantastisk gjorde bare et øyeblikk siden. 780 00:37:31,560 --> 00:37:36,470 Du har opprettet en pen komplett tabell for brukerne. 781 00:37:36,470 --> 00:37:38,920 Riktignok kan vi iverksette det i et par forskjellige måter, 782 00:37:38,920 --> 00:37:43,030 men du har faktisk ført oss ned path-- og sier jeg deg, 783 00:37:43,030 --> 00:37:48,080 men det er nok min fault-- om en nokså ineffektiv database implementering. 784 00:37:48,080 --> 00:37:49,950 Det er ikke normalisert. 785 00:37:49,950 --> 00:37:52,320 >> Og ved normalisert mener jeg det kommer til å bli, 786 00:37:52,320 --> 00:37:57,380 over tid, en betydelig redundans, og derfor ineffektivitet, 787 00:37:57,380 --> 00:38:00,210 det er sløsing med plass. 788 00:38:00,210 --> 00:38:05,650 Basert på bare det du ser her, kan du ser hvor dette bortkastet plass 789 00:38:05,650 --> 00:38:08,710 skal komme fra, over tid, som flere og flere brukere registrerer 790 00:38:08,710 --> 00:38:10,860 for nettstedet ditt? 791 00:38:10,860 --> 00:38:13,047 Hvilke data kan bli overflødig? 792 00:38:13,047 --> 00:38:19,084 793 00:38:19,084 --> 00:38:20,940 >> PUBLIKUM: [uhørlig] 794 00:38:20,940 --> 00:38:22,686 >> DAVID MALAN: Hvorfor mener du det? 795 00:38:22,686 --> 00:38:23,561 PUBLIKUM: [uhørlig] 796 00:38:23,561 --> 00:38:32,180 797 00:38:32,180 --> 00:38:32,930 DAVID MALAN: Ja. 798 00:38:32,930 --> 00:38:35,622 Og la oss anta for de formål i dag at det er sant. 799 00:38:35,622 --> 00:38:38,330 Slår ut, og vi har lært dette den harde måten, det er ikke sant. 800 00:38:38,330 --> 00:38:41,670 Liksom flere byer har, en eller annen måte, det samme postnummer, 801 00:38:41,670 --> 00:38:43,390 som bryter denne fantastiske intuisjon. 802 00:38:43,390 --> 00:38:46,180 Men la oss anta at det er sant, fordi det er nesten alltid sant. 803 00:38:46,180 --> 00:38:51,390 Så antar at et postnummer er alltid forbundet med den samme byen 804 00:38:51,390 --> 00:38:53,600 og staten, som er snill rimelig antagelse, 805 00:38:53,600 --> 00:38:54,840 men feil, viser det seg. 806 00:38:54,840 --> 00:38:57,310 Men en rimelig antakelse for dagens formål. 807 00:38:57,310 --> 00:39:01,650 >> Da antar at jeg bor i Cambridge, MA, i henhold til denne brukerens bord, 808 00:39:01,650 --> 00:39:04,100 og anta at Lauren Scully bor i Cambridge, MA, 809 00:39:04,100 --> 00:39:06,120 og anta at Kareem bor i Cambridge, MA, 810 00:39:06,120 --> 00:39:10,400 og Arwa bor i Cambridge, MA, alle av oss i 02138. 811 00:39:10,400 --> 00:39:15,890 Hvorfor er vi huske Cambridge, MA, 02138 for alle fire av oss? 812 00:39:15,890 --> 00:39:18,903 Hva bør være nok til å huske? 813 00:39:18,903 --> 00:39:20,249 >> PUBLIKUM: [uhørlig] 814 00:39:20,249 --> 00:39:21,540 DAVID MALAN: Bare postnummer. 815 00:39:21,540 --> 00:39:25,080 Bare at 02138 eksisterer, fordi du vet hva vi kan gjøre? 816 00:39:25,080 --> 00:39:32,650 Vi kunne få litt fancy her og over her, definere en annen tabell 817 00:39:32,650 --> 00:39:35,850 hvor dette kommer til å være navn, dette kommer til å være den typen, 818 00:39:35,850 --> 00:39:38,840 dette kommer til å være lengde, og fra nå av er jeg 819 00:39:38,840 --> 00:39:42,900 kommer til å kalle dette min byer tabellen. 820 00:39:42,900 --> 00:39:47,011 Dette ble kalt, av Selvfølgelig min brukere bord. 821 00:39:47,011 --> 00:39:49,885 Og så hva skal jeg sette over her for min byer bordet, tror du? 822 00:39:49,885 --> 00:39:53,605 823 00:39:53,605 --> 00:39:54,535 >> PUBLIKUM: [uhørlig] 824 00:39:54,535 --> 00:39:55,930 >> DAVID MALAN: Ja. 825 00:39:55,930 --> 00:40:01,440 Så zip og staten og byen. 826 00:40:01,440 --> 00:40:05,350 Og så den typen her, vil vi si dette kommer til å være en char 5 igjen, 827 00:40:05,350 --> 00:40:06,750 lagt debatten om tidligere. 828 00:40:06,750 --> 00:40:14,810 Dette vil være en enum, kanskje som før, vil og byen være en varchar 50. 829 00:40:14,810 --> 00:40:17,960 Og så nå hva får jeg slette fra denne tabellen 830 00:40:17,960 --> 00:40:21,995 for å eliminere at ineffektivitet? 831 00:40:21,995 --> 00:40:23,100 >> PUBLIKUM: [uhørlig] 832 00:40:23,100 --> 00:40:23,850 DAVID MALAN: Nice. 833 00:40:23,850 --> 00:40:30,239 Staten og byen gå bort, så jeg har nå eliminert den potensielle ineffektivitet 834 00:40:30,239 --> 00:40:33,280 for redundant huske, Cambridge, MA, Cambridge, MA, Cambridge, MA, 835 00:40:33,280 --> 00:40:35,712 Cambridge, MA, som forhåpentligvis aldri kommer til å forandre seg. 836 00:40:35,712 --> 00:40:37,670 Og selv om den gjør det, er det minorly irriterende, nå 837 00:40:37,670 --> 00:40:39,750 at jeg må endre det i flere rader, 838 00:40:39,750 --> 00:40:43,770 mens her, jeg kunne bare endre det på ett sted. 839 00:40:43,770 --> 00:40:46,890 >> Nå hva er trade-off, kanskje? 840 00:40:46,890 --> 00:40:48,020 Dette var super praktisk. 841 00:40:48,020 --> 00:40:50,730 Hadde alle mine data pent sammen. 842 00:40:50,730 --> 00:40:53,644 Men hva er klart saken nå? 843 00:40:53,644 --> 00:40:55,684 >> PUBLIKUM: [uhørlig] 844 00:40:55,684 --> 00:40:58,100 DAVID MALAN: Akkurat, og jeg er glad du brukte ordet delta, 845 00:40:58,100 --> 00:41:01,320 fordi det er faktisk nøkkelordet, i verden av relasjonsdatabaser 846 00:41:01,320 --> 00:41:05,270 i SQL, er det en faktisk ordet du kan skrive eller minst formidle. 847 00:41:05,270 --> 00:41:09,280 Og faktisk, det vi nå har å gjøre å velge Davids full informasjon er 848 00:41:09,280 --> 00:41:19,700 noe sånt som velger stjernen fra brukere, bli med byer, on-- og nå 849 00:41:19,700 --> 00:41:24,010 Jeg kommer til å bare flytte til en annen linje slik at denne fits-- users.zip lik 850 00:41:24,010 --> 00:41:34,570 cities.zip, hvor users.ID lik en. 851 00:41:34,570 --> 00:41:35,550 >> Så hva skjer? 852 00:41:35,550 --> 00:41:38,970 Det er stygt å se, men du kan slags lese den venstre til høyre, øverst til nederst. 853 00:41:38,970 --> 00:41:41,030 Velg stjerne fra brukere er den samme som før, 854 00:41:41,030 --> 00:41:42,930 men det er ikke fra brukere, per se. 855 00:41:42,930 --> 00:41:45,910 Det er fra brukere delta byer. 856 00:41:45,910 --> 00:41:48,520 Hva skal jeg bli med disse to tabellene på? 857 00:41:48,520 --> 00:41:51,820 Vel, tydeligvis, brukere tabeller zip-feltet, 858 00:41:51,820 --> 00:41:54,810 og denne periode er bare spesielle syntaks for å uttrykke den ideen, 859 00:41:54,810 --> 00:41:58,130 og dette er de byer tabeller zip-feltet. 860 00:41:58,130 --> 00:42:01,580 Jeg vil at disse to skal være like, men jeg vil til slutt velge 861 00:42:01,580 --> 00:42:06,280 bare de radene der ID i brukertabellen 862 00:42:06,280 --> 00:42:08,730 lik 1, som skjedde til å være mine. 863 00:42:08,730 --> 00:42:11,781 >> Og bare for å være klar, en programmerer, vanligvis når 864 00:42:11,781 --> 00:42:14,780 hardcode noe sånt antall 1, fordi ellers bare nettsiden 865 00:42:14,780 --> 00:42:17,630 støtter David eller aller første bruker, 866 00:42:17,630 --> 00:42:20,720 vil i stedet gjøre noe som ID, hvor 867 00:42:20,720 --> 00:42:22,510 dette representerer en variabel, noe som 868 00:42:22,510 --> 00:42:26,210 kan endre seg over tid, tilsvar i ånden til det jeg sa tidligere 869 00:42:26,210 --> 00:42:28,080 med slike plassholdere. 870 00:42:28,080 --> 00:42:30,396 Men for nå skal vi bare hardcode det som en. 871 00:42:30,396 --> 00:42:31,520 Og så hva betyr dette? 872 00:42:31,520 --> 00:42:35,100 Vel, en fin måte å visualisere dette er at hvis denne hånden er det brukere bordet, 873 00:42:35,100 --> 00:42:38,090 og denne hånden er glidelåser tabellen, vi er liksom finding-- 874 00:42:38,090 --> 00:42:41,330 og tips av fingrene mine er zip over her, og tips av fingrene 875 00:42:41,330 --> 00:42:43,740 her er zip, du er type sikringsanlegg det 876 00:42:43,740 --> 00:42:47,950 slik at du får tilbake den resulterende opprinnelige tabellen, etter virkelig å bli 877 00:42:47,950 --> 00:42:49,590 de to tabellene på felles felt. 878 00:42:49,590 --> 00:42:50,840 Og det trenger ikke å være zip. 879 00:42:50,840 --> 00:42:54,460 Det kan være de fleste noe annet, men zip er fint, fordi en, det er kort, 880 00:42:54,460 --> 00:42:56,470 to, det er alltid samme lengde, slik at det er 881 00:42:56,470 --> 00:43:02,270 en reell effektivitet til hva Olivier foreslått her 882 00:43:02,270 --> 00:43:05,200 med factoring ut zip, og [Hørbar] foreslår at vi blir kvitt 883 00:43:05,200 --> 00:43:07,110 av byen og stater. 884 00:43:07,110 --> 00:43:11,370 >> Så dette er prosessen som kalles normalisering. 885 00:43:11,370 --> 00:43:14,171 Eventuelle spørsmål om det? 886 00:43:14,171 --> 00:43:16,170 Vel la meg påpeke Dette er den type ting, 887 00:43:16,170 --> 00:43:19,202 selv om det er ganske lavt nivå, denne diskusjonen, at du tror 888 00:43:19,202 --> 00:43:20,910 du liksom få tapt i ugress, 889 00:43:20,910 --> 00:43:26,690 dette er en manifestasjon av god mulighet for utviklere å være dårlig. 890 00:43:26,690 --> 00:43:29,600 Og i virkeligheten, selv når vi, i kurs jeg har lært, når vi har hatt, 891 00:43:29,600 --> 00:43:32,290 for eksempel, uerfaren lavere programmerere 892 00:43:32,290 --> 00:43:35,920 bygge nettsteder, ved første øyekast, nettsteder kan se veldig bra. 893 00:43:35,920 --> 00:43:38,280 Og de har alle funksjonalitet vi bedt om, 894 00:43:38,280 --> 00:43:40,650 utviklerne gjorde en god jobb. 895 00:43:40,650 --> 00:43:43,370 >> Men de hadde ikke nødvendigvis vet nok om databasedesign 896 00:43:43,370 --> 00:43:46,680 eller de ikke tenker hardt nok om hvilke typer data 897 00:43:46,680 --> 00:43:49,220 og hvilke typer brukerne Nettsiden ble nødt til, 898 00:43:49,220 --> 00:43:53,240 og vi finner da seks måneder senere, etter at de har oppgradert eller flyttet på, 899 00:43:53,240 --> 00:43:56,016 som faen, vår hjemmeside er virkelig, virkelig sakte. 900 00:43:56,016 --> 00:43:58,890 Og jeg er ikke engang snakke om å ha millioner eller tusenvis av brukere. 901 00:43:58,890 --> 00:44:02,580 Jeg mener et par hundre brukere på campus, alle som ønsker å, for eksempel, 902 00:44:02,580 --> 00:44:04,870 handle for kurs på Samtidig er de 903 00:44:04,870 --> 00:44:07,010 bruker som kurskatalog søknad jeg nevnte 904 00:44:07,010 --> 00:44:10,410 og ting blir virkelig bremse fordi det var ingen indekser. 905 00:44:10,410 --> 00:44:13,740 Det var ingen røde stjerner, så å snakke, eller hadde vi ikke nødvendigvis 906 00:44:13,740 --> 00:44:17,690 tatt ut felles data til få noen besparelser på plass. 907 00:44:17,690 --> 00:44:21,880 >> Og så når vetting en utvikler eller database person eller lignende, 908 00:44:21,880 --> 00:44:25,864 hva slags spørsmål å tenke gjennom er selv, når vi vurderer noen kode, 909 00:44:25,864 --> 00:44:28,530 å si, ikke nødvendigvis ser gjennom alle koden sin, men sier: 910 00:44:28,530 --> 00:44:30,154 La oss se gjennom databasetabeller. 911 00:44:30,154 --> 00:44:31,150 Hva er det du lagrer? 912 00:44:31,150 --> 00:44:33,941 Og så å si, vel, vent minutt, hvorfor bruker du et heltall? 913 00:44:33,941 --> 00:44:36,224 Hva hvis vi har 4000000000 og en av disse radene? 914 00:44:36,224 --> 00:44:38,140 Og slike spørsmål er en mulighet 915 00:44:38,140 --> 00:44:40,170 til slags presse tilbake og få en følelse av hvor 916 00:44:40,170 --> 00:44:42,300 hvis du ikke er komfortabel med å gjøre det, å ha noen mer teknisk 917 00:44:42,300 --> 00:44:45,425 stille disse spørsmålene, om hvorvidt personen virkelig kjenner sine ting. 918 00:44:45,425 --> 00:44:47,890 Og dette er den type ting også, som folk 919 00:44:47,890 --> 00:44:50,540 på internett som er selvlært, kanskje 920 00:44:50,540 --> 00:44:53,920 lære sjeldnere, fordi du ikke nødvendigvis kommer over det 921 00:44:53,920 --> 00:44:56,630 så mye, fordi du kan få databasen oppe og går, 922 00:44:56,630 --> 00:44:58,880 men med mindre du har lest opp på tutorials eller vært 923 00:44:58,880 --> 00:45:01,880 fortalte om database normalisering og indeksering og ytelse, 924 00:45:01,880 --> 00:45:04,255 disse er den slags ting som kommer til å skade deg. 925 00:45:04,255 --> 00:45:07,480 Og du tenker kanskje, eller en dårlig ingeniør kan si, oh, vel, vi bedre lønn 926 00:45:07,480 --> 00:45:09,600 for en større database eller en raskere database 927 00:45:09,600 --> 00:45:13,360 eller bare kaste penger på dette, vertikalt målestokk, ikke nødvendigvis slik. 928 00:45:13,360 --> 00:45:16,920 Hvis du går in-- og du kan gå i etter fact-- og legge indekser, 929 00:45:16,920 --> 00:45:20,320 og det kan ta noen timer for database for å bygge opp den nye data 930 00:45:20,320 --> 00:45:24,100 struktur som jeg antydet tidligere, du kan fortsatt fikse dette i ettertid, 931 00:45:24,100 --> 00:45:26,180 at dette er hvor du begynner å skille 932 00:45:26,180 --> 00:45:28,830 gode designere fra dårlig designere, ikke bare estetisk, 933 00:45:28,830 --> 00:45:32,972 men ytelsesmessig også. 934 00:45:32,972 --> 00:45:33,555 Noen spørsmål? 935 00:45:33,555 --> 00:45:36,420 936 00:45:36,420 --> 00:45:37,480 Nei? 937 00:45:37,480 --> 00:45:41,980 Så for NoSQL, som var den andre typen database som jeg antydet tidligere, 938 00:45:41,980 --> 00:45:43,490 du trenger ikke rader og kolonner. 939 00:45:43,490 --> 00:45:47,000 I stedet må du ha noe som ser litt mer ut som dette. 940 00:45:47,000 --> 00:45:48,630 Jeg kommer til å bruke sunn syntaks. 941 00:45:48,630 --> 00:45:51,270 Klammeparentes tilfeldigvis brukes her ganske mye. 942 00:45:51,270 --> 00:45:55,400 Du har kanskje noe som første navn er David, 943 00:45:55,400 --> 00:46:00,180 du kan ha siste Navnet er Malan, sitater, 944 00:46:00,180 --> 00:46:07,530 du kan ha ID er-- Unnskyld meg, er whoops-- ID 1, 945 00:46:07,530 --> 00:46:13,410 e-post er malan@harvard.edu, og jeg vil ikke bry å skrive ut resten, og deretter 946 00:46:13,410 --> 00:46:14,380 noen andre ting. 947 00:46:14,380 --> 00:46:17,380 >> Med andre ord, er denne en tekstlig representasjon 948 00:46:17,380 --> 00:46:20,720 av hva vi ville vanligvis kaller et objekt i et dataprogram. 949 00:46:20,720 --> 00:46:26,079 Og et objekt er vanligvis bare en samling av viktige verdi-par. 950 00:46:26,079 --> 00:46:27,370 Så igjen, dette tilbakevendende tema. 951 00:46:27,370 --> 00:46:30,440 Vi så nøkkelen verdi-parene i HTML, vi så sentrale verdiparene nå 952 00:46:30,440 --> 00:46:34,020 i sammenheng med databaser, og vi så sentrale verdiparene i sammenheng 953 00:46:34,020 --> 00:46:35,970 av, tror jeg, et språk tidligere i dag. 954 00:46:35,970 --> 00:46:36,890 Holder kommer opp. 955 00:46:36,890 --> 00:46:39,620 Og ja, det er virkelig hvilke data som koker ned til, 956 00:46:39,620 --> 00:46:44,240 data og metadata, eller verdier og nøkler, henholdsvis. 957 00:46:44,240 --> 00:46:47,430 >> Så en ikke-relasjons database, noe basert 958 00:46:47,430 --> 00:46:50,680 på objekter, der du bare klumper seg alt sammen og legg den 959 00:46:50,680 --> 00:46:55,640 i minnet, vil generelt være avbildet som, eller tenkt på, som dette. 960 00:46:55,640 --> 00:47:00,500 Og jeg vil la det nå som en slags alternativ tilnærming. 961 00:47:00,500 --> 00:47:03,750 Og man er ikke nødvendigvis bedre enn den andre. 962 00:47:03,750 --> 00:47:07,310 Faktisk veldig mye på moten i disse dager er databasesystemer 963 00:47:07,310 --> 00:47:11,942 som MongoDB og Redis og noen andre slike verktøy, fritt tilgjengelig, 964 00:47:11,942 --> 00:47:13,400 men de er i økende grad en mote. 965 00:47:13,400 --> 00:47:18,850 Delvis fordi de tilbyr ekstra har over disse tabell tilnærminger, 966 00:47:18,850 --> 00:47:20,850 men også fordi de er litt enklere å bruke, 967 00:47:20,850 --> 00:47:24,099 fordi du ikke trenger å tenke så hardt om mange av disse design beslutninger. 968 00:47:24,099 --> 00:47:25,970 Så plusser og minuser. 969 00:47:25,970 --> 00:47:29,740 Så skjønner det finnes alternativer utover det vi bare brukt tid på. 970 00:47:29,740 --> 00:47:32,310 >> Så la oss gjøre dette. 971 00:47:32,310 --> 00:47:37,870 La oss gå over litt tilbake nå til web-programmering, 972 00:47:37,870 --> 00:47:40,470 slik at vi på en måte konkludere i dag med noe 973 00:47:40,470 --> 00:47:43,930 det er litt hands-on, fylling i noen hull fra i går. 974 00:47:43,930 --> 00:47:45,340 La meg gå til denne først. 975 00:47:45,340 --> 00:47:49,310 Så husker at i går vi hadde noen kanonisk HTML 976 00:47:49,310 --> 00:47:55,110 sider som hadde i utgangspunktet, bare HTML, og deretter sekundært hadde CSS, 977 00:47:55,110 --> 00:47:56,620 Cascading Style Sheets. 978 00:47:56,620 --> 00:47:59,830 Dette er et nytt merke som vi ikke har se i går, eller dvele ved, 979 00:47:59,830 --> 00:48:01,490 såkalte script tag. 980 00:48:01,490 --> 00:48:05,830 >> Det viser seg at du faktisk kan legge inn en språk kalt Javascript i nett 981 00:48:05,830 --> 00:48:08,310 side og nett sider gjøre noe. 982 00:48:08,310 --> 00:48:09,710 Så hva mener jeg med det? 983 00:48:09,710 --> 00:48:12,630 Vel, la meg gå videre og bare låne denne koden for en stund. 984 00:48:12,630 --> 00:48:15,860 Jeg kommer til å gå inn i Cloud9, ikke behov å gå der selv ennå, 985 00:48:15,860 --> 00:48:21,350 og jeg kommer til å kalle dette alert.HTML. 986 00:48:21,350 --> 00:48:23,650 Jeg kommer til å lime inn i min fil her. 987 00:48:23,650 --> 00:48:32,070 Og bare for å klargjøre hva jeg har gjort, la meg gå til denne adressen og gå for å varsle, 988 00:48:32,070 --> 00:48:33,870 og du ser Hello World. 989 00:48:33,870 --> 00:48:35,440 >> Men dette er slags uimponerende. 990 00:48:35,440 --> 00:48:37,410 Jeg ønsker å gjøre noe litt annerledes. 991 00:48:37,410 --> 00:48:40,610 Så jeg kommer til å faktisk gjøre dette. 992 00:48:40,610 --> 00:48:43,820 Jeg kommer til å gå inn her e, og i mellom mine skriptkodene, 993 00:48:43,820 --> 00:48:53,460 sier alert ( "Hei, verden '); så varsel det er litt slurvete, men jeg har fått HTML, 994 00:48:53,460 --> 00:48:56,180 på innsiden av hvilken er en språk kalt Javascript, 995 00:48:56,180 --> 00:48:59,420 og dette er det som kalles en funksjonskall eller prosedyrekallet. 996 00:48:59,420 --> 00:49:04,500 Dette er et verb, bokstavelig talt, i dette tilfellet og jeg påkalle kode funksjonalitet 997 00:49:04,500 --> 00:49:06,310 at noen andre skrev. 998 00:49:06,310 --> 00:49:09,630 >> Slik at funksjonaliteten er en varsling, så la oss gå til denne siden 999 00:49:09,630 --> 00:49:14,046 nå og klikk på reload, og nå se litt av interaktivitet. 1000 00:49:14,046 --> 00:49:15,420 Det er slags gamle skolen og stygg. 1001 00:49:15,420 --> 00:49:18,580 Denne typen minner deg om pop-ups, kanskje, fra en svunnen tid 1002 00:49:18,580 --> 00:49:22,030 men det gjorde ikke noe litt mer programma. 1003 00:49:22,030 --> 00:49:26,940 >> Så mer enn det, la oss gjøre noe mer interessant. 1004 00:49:26,940 --> 00:49:30,980 La meg gå inn her og bli kvitt dette. 1005 00:49:30,980 --> 00:49:33,840 Og jeg kommer til å gå videre og lage et skjema som vi gjorde i går. 1006 00:49:33,840 --> 00:49:34,840 Egentlig vet du hva? 1007 00:49:34,840 --> 00:49:37,350 Jeg kommer til å gå inn google.html, som vi 1008 00:49:37,350 --> 00:49:43,027 startet på i går, noe som så ut som dette, via som vi søkte etter katt 1009 00:49:43,027 --> 00:49:45,360 Men merker det er litt av en bug i den gjeldende versjonen. 1010 00:49:45,360 --> 00:49:49,770 Det fungerer for katter, men antar at det Jeg vet ikke samarbeide og jeg skriver noe, 1011 00:49:49,770 --> 00:49:53,290 og jeg klikker du ganske enkelt. 1012 00:49:53,290 --> 00:49:54,540 Det er slags merkelig oppførsel. 1013 00:49:54,540 --> 00:49:57,300 Tok meg til den virkelige Google, ikke gi meg en feilmelding. 1014 00:49:57,300 --> 00:50:00,590 Jeg vil gjerne fortelle brukeren du trenger for å gi oss en verdi. 1015 00:50:00,590 --> 00:50:01,780 >> Så hvordan kan vi gjøre dette? 1016 00:50:01,780 --> 00:50:06,790 Vel la meg gå tilbake til Cloud9 og la meg gå inn på toppen av siden min 1017 00:50:06,790 --> 00:50:11,980 og legge til et script tag som dette, hvor Jeg kommer til å skrive noen Javascript-kode. 1018 00:50:11,980 --> 00:50:15,420 Og jeg kommer til å gjøre følgende. 1019 00:50:15,420 --> 00:50:22,910 Hvis (document.getelementByID-- og tilbakekalling at vi snakket om det tidligere, 1020 00:50:22,910 --> 00:50:23,960 denne funksjonen. 1021 00:50:23,960 --> 00:50:25,310 Hva ID ønsker jeg å få? 1022 00:50:25,310 --> 00:50:33,050 Jeg ønsker å få q, og jeg kommer til å si lik ingenting, som dette-- 1023 00:50:33,050 --> 00:50:38,220 faktisk la meg bruke anførselstegn bare for consistency-- lik ingenting, 1024 00:50:38,220 --> 00:50:46,650 deretter alert ( "Vennligst skriv en spørring") her. 1025 00:50:46,650 --> 00:50:49,200 >> Så jeg har det som synes å være noe som en betingelse. 1026 00:50:49,200 --> 00:50:51,410 Vi har sett denne generelle ideen i Scratch. 1027 00:50:51,410 --> 00:50:54,240 Det er som en av disse pusle stykker som så ut som dette. 1028 00:50:54,240 --> 00:50:55,780 Og hva er det jeg sier? 1029 00:50:55,780 --> 00:50:59,520 Vel, her nede, merker jeg er kommer til å gjøre følgende. 1030 00:50:59,520 --> 00:51:02,790 Jeg kommer til å gi ut dette skjemaet feltet er ikke bare et navn på q, som 1031 00:51:02,790 --> 00:51:06,630 er det som får sendt til Google, men jeg er kommer til å gi det en lokal identifikator, 1032 00:51:06,630 --> 00:51:07,630 også kalt q. 1033 00:51:07,630 --> 00:51:11,780 Men jeg kunne kalle dette noe jeg vil, jeg skal bare holde det enkelt 1034 00:51:11,780 --> 00:51:14,570 og også kaller det q, bare for enkelhet. 1035 00:51:14,570 --> 00:51:17,650 >> Og nå skal jeg gjøre noe litt mer. 1036 00:51:17,650 --> 00:51:22,600 På skjemafeltene her, kommer jeg til å legge til det som kalles en hendelseshåndterer. 1037 00:51:22,600 --> 00:51:32,260 På sender inn, jeg vil kalle en funksjon som heter validere. 1038 00:51:32,260 --> 00:51:35,520 Denne eksisterer ikke ennå, dette ord, eller dette verbet validere, 1039 00:51:35,520 --> 00:51:38,560 fordi hva jeg skal gjøre her oppe nå er å legge noen kode. 1040 00:51:38,560 --> 00:51:42,200 >> Jeg kommer til å si funksjon validere. 1041 00:51:42,200 --> 00:51:48,280 Jeg kommer til å rykke inn dette og legge til en annen klammeparentes her og en annen her. 1042 00:51:48,280 --> 00:51:50,110 Tenk hva dette er nå gjør. 1043 00:51:50,110 --> 00:51:54,210 Jeg har now-- tenke på dette som skapte min eget puslespill brikke som ikke tidligere 1044 00:51:54,210 --> 00:51:57,440 finnes, og jeg har kalt dette pusle sette den validere puslespill brikke. 1045 00:51:57,440 --> 00:52:01,620 Dens formål i livet er å utføre de fire linjer med kode inne i den. 1046 00:52:01,620 --> 00:52:04,940 >> Hvis document.getElementById så konseptuelt, 1047 00:52:04,940 --> 00:52:09,380 som kommer til å gå inn i element, HTML-elementet hvis unike 1048 00:52:09,380 --> 00:52:12,930 Tanken er bare q, og da selv om syntaksen ser litt rart, 1049 00:52:12,930 --> 00:52:16,430 som tilsvarer tilsvarer bare betyr likeverdige. 1050 00:52:16,430 --> 00:52:20,950 Så betyr det at hvis elementet med unik identifikator for q, da fått, 1051 00:52:20,950 --> 00:52:25,700 har ingen verdi, det bare er lik quote unquote, ingenting der, 1052 00:52:25,700 --> 00:52:27,170 så hva gjør jeg ønsker å gjøre? 1053 00:52:27,170 --> 00:52:29,360 Jeg ønsker å kjefte på brukeren. 1054 00:52:29,360 --> 00:52:31,710 >> Og vi vil ikke gå i stor detalj her. 1055 00:52:31,710 --> 00:52:32,960 Jeg kommer til å returnere false. 1056 00:52:32,960 --> 00:52:34,380 Det er en feil. 1057 00:52:34,380 --> 00:52:38,746 Else, jeg kommer til å returnere true. 1058 00:52:38,746 --> 00:52:40,120 Så enten det fungerte eller det ikke. 1059 00:52:40,120 --> 00:52:41,800 Falsk eller ekte. 1060 00:52:41,800 --> 00:52:47,820 Og nå hvis jeg ikke gjør noen feil, la meg lagre dette og legg dette. 1061 00:52:47,820 --> 00:52:50,940 Og la meg bare dobbeltsjekke at Jeg visste ikke, faktisk, gjør eventuelle skrivefeil, 1062 00:52:50,940 --> 00:52:52,690 så jeg ikke flau selv. 1063 00:52:52,690 --> 00:52:54,240 La oss se om dette fungerer. 1064 00:52:54,240 --> 00:52:56,930 >> Så nå kommer jeg til å skrive katter. 1065 00:52:56,930 --> 00:52:59,421 Det fortsatt fungerer, eller halv verk, minst. 1066 00:52:59,421 --> 00:53:02,170 Nå la meg laste det, og nå la meg prøve å sende inn uten å skrive 1067 00:53:02,170 --> 00:53:05,860 anything-- faen, det brøt. 1068 00:53:05,860 --> 00:53:06,430 Et øyeblikk. 1069 00:53:06,430 --> 00:53:09,380 1070 00:53:09,380 --> 00:53:12,660 La meg åpne konsollen, [Hørbar] log, oppdater siden. 1071 00:53:12,660 --> 00:53:13,576 La meg prøve dette igjen. 1072 00:53:13,576 --> 00:53:17,000 1073 00:53:17,000 --> 00:53:17,501 Å, faen. 1074 00:53:17,501 --> 00:53:18,000 Jeg glemte. 1075 00:53:18,000 --> 00:53:18,630 Jeg har gjort en skrivefeil. 1076 00:53:18,630 --> 00:53:20,760 Jeg husker hva det er. 1077 00:53:20,760 --> 00:53:21,350 .verdi. 1078 00:53:21,350 --> 00:53:27,060 Jeg mente å si hvis verdien av elementet hvis ID er q 1079 00:53:27,060 --> 00:53:29,800 lik det, så kjefte på brukeren. 1080 00:53:29,800 --> 00:53:31,870 >> Så nå la meg holde pusten igjen. 1081 00:53:31,870 --> 00:53:33,480 Her går vi. 1082 00:53:33,480 --> 00:53:34,130 Det vi går. 1083 00:53:34,130 --> 00:53:35,010 Skriv inn et søk. 1084 00:53:35,010 --> 00:53:36,840 Så det er ikke å la meg gjennom. 1085 00:53:36,840 --> 00:53:40,210 Jeg kan være litt leken med dette, og i stedet for å se etter noen verdi, 1086 00:53:40,210 --> 00:53:46,720 Jeg kan si noe sånt som: ikke mer å lete etter katter, 1087 00:53:46,720 --> 00:53:51,150 og nå kan vi bare mer lekent la brukeren søk for hunder hvis han eller hun 1088 00:53:51,150 --> 00:53:57,490 ønsker, eller hvis jeg går inn her og søke etter katter, nå kan jeg ikke. 1089 00:53:57,490 --> 00:53:58,690 >> Så hva er takeaway her? 1090 00:53:58,690 --> 00:54:03,010 Så en har vi ført inn vår verden av HTML og CSS, 1091 00:54:03,010 --> 00:54:04,320 programmering funksjonalitet. 1092 00:54:04,320 --> 00:54:06,300 Jeg kan faktisk nå fatte vedtak i kode. 1093 00:54:06,300 --> 00:54:10,570 Tidligere er alt jeg kunne gjøre markere tekstlig innhold eller grafisk innhold 1094 00:54:10,570 --> 00:54:13,080 og fortelle den hva du skal se ut og hvor de skal vise. 1095 00:54:13,080 --> 00:54:16,650 Nå kan jeg faktisk spørre spørsmål av nettsiden 1096 00:54:16,650 --> 00:54:20,010 og ta avgjørelser basert på den, og be brukeren 1097 00:54:20,010 --> 00:54:22,780 hvis jeg trenger å kjefte på ham eller henne. 1098 00:54:22,780 --> 00:54:28,740 >> Så la oss prøve noe på vår egen med dette. 1099 00:54:28,740 --> 00:54:33,350 Kom igjen, la meg åpne opp neste lysbilde her, og bare påpeke en ting. 1100 00:54:33,350 --> 00:54:37,250 Akkurat som med CSS, kan vi faktor ut Javascript-koden til en egen fil, 1101 00:54:37,250 --> 00:54:40,660 du kan gjøre det samme med Javascript som med CSS. 1102 00:54:40,660 --> 00:54:44,520 Og du bruker som bruker en kilde attributt av skriptmerket. 1103 00:54:44,520 --> 00:54:46,540 Men vi vil ikke komplisere ting for nå. 1104 00:54:46,540 --> 00:54:50,440 I stedet, hvis du kunne gå til ikke denne siden 1105 00:54:50,440 --> 00:55:02,690 men-- la meg flytte dette rundt i order-- gå til, hvis du kunne, denne siden her. 1106 00:55:02,690 --> 00:55:03,592 Denne nettadressen her. 1107 00:55:03,592 --> 00:55:04,550 Det er i dagens lysbilder. 1108 00:55:04,550 --> 00:55:07,133 Du må kanskje laste fordi Jeg har lagt til et par ting. 1109 00:55:07,133 --> 00:55:09,970 1110 00:55:09,970 --> 00:55:13,890 >> Men går det der noen oppgaver venter. 1111 00:55:13,890 --> 00:55:16,670 Og dette vil gi oss en sjanse, i en litt mer moro sammenheng 1112 00:55:16,670 --> 00:55:20,610 å prøve seg med litt Javascript. 1113 00:55:20,610 --> 00:55:25,505 Og når du kommer dit, Jeg skal forklare hva som venter. 1114 00:55:25,505 --> 00:55:47,350 1115 00:55:47,350 --> 00:55:47,850 Få grønt. 1116 00:55:47,850 --> 00:56:03,063 1117 00:56:03,063 --> 00:56:03,562 Sett blå. 1118 00:56:03,562 --> 00:56:11,030 1119 00:56:11,030 --> 00:56:13,930 Stiller grønn setter rødt. 1120 00:56:13,930 --> 00:56:19,220 1121 00:56:19,220 --> 00:56:20,220 Oops. 1122 00:56:20,220 --> 00:56:22,330 Beklager. 1123 00:56:22,330 --> 00:56:27,630 >> Dette er omfanget av vår dokumentasjon for denne utfordringen. 1124 00:56:27,630 --> 00:56:29,920 Og dette kommer til å fungere som følger. 1125 00:56:29,920 --> 00:56:33,340 Så hva du har på denne side er en hel haug 1126 00:56:33,340 --> 00:56:38,024 bilde puslespill av en kompis ved Stanford University. 1127 00:56:38,024 --> 00:56:41,190 Så det du ser her er nesten form for en av de magiske øye puslespill, 1128 00:56:41,190 --> 00:56:43,815 men hvis du bare stirre på den, ingenting kommer til å sprette ut på deg. 1129 00:56:43,815 --> 00:56:46,000 Snarere er noe gjemt i dette bildet. 1130 00:56:46,000 --> 00:56:47,790 Og det er skjult på følgende måte. 1131 00:56:47,790 --> 00:56:51,740 Bilder, som du kanskje vet, kan være sammensatt av bare tre farger. 1132 00:56:51,740 --> 00:56:53,346 Noen røde, noen blå og noen grønne. 1133 00:56:53,346 --> 00:56:55,220 Og vi kan gjøre hele fargene i regnbuen 1134 00:56:55,220 --> 00:56:57,570 ved å blande de tre fargene eller annen måte. 1135 00:56:57,570 --> 00:57:01,940 >> Så dette ser det meste grønne og blå, men som Nick sier her, 1136 00:57:01,940 --> 00:57:04,060 Dette jern puslespillet bildet er et puslespill. 1137 00:57:04,060 --> 00:57:06,780 Den inneholder et bilde av noe kjent, men 1138 00:57:06,780 --> 00:57:08,310 bildet har blitt forvrengt. 1139 00:57:08,310 --> 00:57:11,500 Den berømte objekt er i de røde verdier. 1140 00:57:11,500 --> 00:57:13,810 Men den røde verdier har alle blitt delt på 10. 1141 00:57:13,810 --> 00:57:16,230 Så de er for små med en faktor på ti. 1142 00:57:16,230 --> 00:57:18,280 Så med andre ord, Nick tok et originalt bilde, 1143 00:57:18,280 --> 00:57:21,500 og han Desaturated alle av den røde fra det, 1144 00:57:21,500 --> 00:57:23,850 redusere mengden av rødt blekk, om du vil, i det. 1145 00:57:23,850 --> 00:57:26,060 >> De blå og grønne verdier er alle bare meningsløst, 1146 00:57:26,060 --> 00:57:30,000 tilfeldige verdier, aka støy utformet å skjule det virkelige bildet. 1147 00:57:30,000 --> 00:57:32,250 Så hva Nick gjorde var han tonet ned den røde og deretter 1148 00:57:32,250 --> 00:57:34,380 han bare kastet tilfeldig mengder av blått og grønt 1149 00:57:34,380 --> 00:57:37,590 på bildet til slags obskure hva er faktisk fortsatt der. 1150 00:57:37,590 --> 00:57:41,089 Du må angre disse forvrengninger for å vise bildet. 1151 00:57:41,089 --> 00:57:44,255 Først setter alle de blå og grønne verdier til null for å få dem ut av veien, 1152 00:57:44,255 --> 00:57:48,700 og se på resultatet. Deretter multipliserer hver rød verdi av 10, 1153 00:57:48,700 --> 00:57:51,720 innskrenker seg til omtrent den endelige verdien. 1154 00:57:51,720 --> 00:57:53,035 Hva er den berømte objekt? 1155 00:57:53,035 --> 00:57:57,920 >> Så alt du har dette rektangelet i nettleseren din akkurat nå. 1156 00:57:57,920 --> 00:58:00,830 Og legg merke til at det er noen starter kode, så å si. 1157 00:58:00,830 --> 00:58:04,370 Dette er Javascript-kode som Nick har skrevet for deg. 1158 00:58:04,370 --> 00:58:07,250 Og legg merke til at det er en linje i midten 1159 00:58:07,250 --> 00:58:10,380 starter med en skråstrek skråstrek, det er det som vanligvis kalles en kommentar. 1160 00:58:10,380 --> 00:58:14,660 Det betyr at det er en setning til programmereren som ikke har noen funksjonell betydning. 1161 00:58:14,660 --> 00:58:16,520 Det er bare et visuelt til menneske. 1162 00:58:16,520 --> 00:58:18,670 >> Så du kan gå videre og slette bare den linjen, 1163 00:58:18,670 --> 00:58:22,214 og være super forsiktig så du ikke slette eller endre noe annet. 1164 00:58:22,214 --> 00:58:25,130 Og la meg bare gå gjennom hva denne koden gjør, og jeg skal la det 1165 00:58:25,130 --> 00:58:28,580 til deg å finne ut hemmeligheten bildet. 1166 00:58:28,580 --> 00:58:32,226 Denne første linje her at jeg har bare uthevede gir deg følgende. 1167 00:58:32,226 --> 00:58:34,100 På venstre side, du har det som kalles 1168 00:58:34,100 --> 00:58:39,140 en variabel som Nick har vilkårlig, men rimelig kalt im for bilde. 1169 00:58:39,140 --> 00:58:41,660 På høyre side av at likhetstegnet, 1170 00:58:41,660 --> 00:58:45,240 han sier gi meg en ny sitat, unquote "simple image". 1171 00:58:45,240 --> 00:58:49,680 >> Enkelt bilde, i denne sammenheng er det som kalles en klasse, vel, 1172 00:58:49,680 --> 00:58:53,910 det er litt som en class-- teknisk sett en prototype-- men virkelig, 1173 00:58:53,910 --> 00:58:58,000 Dette gir meg et nytt objekt, hvis innhold som er filen, 1174 00:58:58,000 --> 00:58:59,610 jern-puzzle.png. 1175 00:58:59,610 --> 00:59:03,190 Med andre ord, har Nick opprettet denne oppfatningen av et enkelt bilde 1176 00:59:03,190 --> 00:59:05,920 slik at vi kan, for pedagogisk formål, leke med bildet 1177 00:59:05,920 --> 00:59:09,790 og endre sin røde, grønne og blå verdier. 1178 00:59:09,790 --> 00:59:11,750 >> Og hvordan gjør vi det? 1179 00:59:11,750 --> 00:59:15,360 Denne noe kryptisk syntaks her er typen som gjentar blokk 1180 00:59:15,360 --> 00:59:19,140 at noen av dere så i Scratch tidligere i dag, hvor du kan gjenta 10 ganger. 1181 00:59:19,140 --> 00:59:22,220 I dette tilfellet har ikke Nick hardkodet et tall som 10. 1182 00:59:22,220 --> 00:59:28,020 I stedet sier han, initial en variabel kalt x 0, 1183 00:59:28,020 --> 00:59:33,180 sjekk om x er mindre enn bredden av bildet. 1184 00:59:33,180 --> 00:59:38,160 >> Og så for å være mer korrekt, er bildet variabel, betyr dot gå på innsiden av det 1185 00:59:38,160 --> 00:59:40,900 og få dens bredde, og deretter åpne paren, lukket 1186 00:59:40,900 --> 00:59:43,687 paren er bare en programmerer måte å si dette er en funksjon. 1187 00:59:43,687 --> 00:59:44,520 Dette er en prosedyre. 1188 00:59:44,520 --> 00:59:46,430 Dette er funksjonalitet noen andre skrev. 1189 00:59:46,430 --> 00:59:48,570 Bruk den og gi meg tilbake et svar. 1190 00:59:48,570 --> 00:59:53,610 Og så x ++ er en fancy måte si, etter at du har gjort dette en gang, 1191 00:59:53,610 --> 00:59:55,850 øke x etter en. 1192 00:59:55,850 --> 00:59:58,760 Med andre ord, denne er en programmerer måte 1193 00:59:58,760 --> 01:00:05,760 til å indusere en løkke som er kommer til å iterere over 1194 01:00:05,760 --> 01:00:10,410 alle kolonnene i et bilde. 1195 01:00:10,410 --> 01:00:14,790 >> Et bilde er bare et rutenett av prikker, rader og kolonner med prikker. 1196 01:00:14,790 --> 01:00:18,270 Dette er en måte å itera i løpet av alle disse kolonnene. 1197 01:00:18,270 --> 01:00:20,770 Og på innsiden, i mellomtiden, vi gjentar 1198 01:00:20,770 --> 01:00:24,030 over høyder, her og her og her. 1199 01:00:24,030 --> 01:00:29,442 Så dette er bare en måte å traipsing, nesten som en gammel skole skrivemaskin, 1200 01:00:29,442 --> 01:00:32,230 å bare gå over Hele bildet iterativt. 1201 01:00:32,230 --> 01:00:36,370 Selv det er ikke helt helt klar, bare ta på tro for nå, 1202 01:00:36,370 --> 01:00:38,880 at disse tre linjer kode sammen er 1203 01:00:38,880 --> 01:00:43,090 kommer til å tillate deg å iterativt se på hver piksel, hver prikk i bildet. 1204 01:00:43,090 --> 01:00:43,790 >> Hva er en piksel? 1205 01:00:43,790 --> 01:00:46,250 Vel, for å være klar, hvis vi ser på den opprinnelige og zoome inn, 1206 01:00:46,250 --> 01:00:49,060 hvis du virkelig setter øynene til dataskjermen, det er 1207 01:00:49,060 --> 01:00:53,510 bare en hel haug med prikker, flere tusen prikker pakket sammen der. 1208 01:00:53,510 --> 01:00:56,180 Og så hva er du i ferd med å gjøre? 1209 01:00:56,180 --> 01:00:59,240 Hver og en av disse punkter, en endelig definisjon, 1210 01:00:59,240 --> 01:01:06,350 er et resultat av hva som er generelt heter RGB, rød, grønn, blå, som 1211 01:01:06,350 --> 01:01:09,940 igjen, kan kombineres for å gi deg en rekke farger. 1212 01:01:09,940 --> 01:01:13,200 >> Faktisk, hvis du husker fra mange, mange år siden, 1213 01:01:13,200 --> 01:01:17,320 projektor skjermer som disse tingene pleide å ha ikke en objektiv, men tre. 1214 01:01:17,320 --> 01:01:20,700 En av dem spytte ut rødt lys, en av dem spytte ut grønt lys, og en av dem 1215 01:01:20,700 --> 01:01:21,600 spytte ut blått lys. 1216 01:01:21,600 --> 01:01:24,391 Og hvis du var i en ungdomsskole som jeg var der de var aldri 1217 01:01:24,391 --> 01:01:27,000 riktig justert, var du alltid ser historiske filmer 1218 01:01:27,000 --> 01:01:29,770 som var litt forvrengt, fordi de tre fargene var ikke 1219 01:01:29,770 --> 01:01:30,970 kombinere riktig. 1220 01:01:30,970 --> 01:01:36,330 >> Men det viser seg at hver av disse verdiene røde, grønne og blå, 1221 01:01:36,330 --> 01:01:37,980 kan ha en rekke forbundet med dem. 1222 01:01:37,980 --> 01:01:42,500 For eksempel, 0 for rød betyr ingen rød, 0 for grønn betyr ingen grønn, 1223 01:01:42,500 --> 01:01:45,120 og 0 for blå betyr ingen blå. 1224 01:01:45,120 --> 01:01:49,403 Så hvis du ikke har noen røde, ingen grønn, og ingen blå, hvilken farge har du? 1225 01:01:49,403 --> 01:01:51,009 >> PUBLIKUM: [uhørlig] 1226 01:01:51,009 --> 01:01:52,800 DAVID MALAN: Du ville håper det, er det hvitt. 1227 01:01:52,800 --> 01:01:55,333 Dessverre, operates-- dette beklager? 1228 01:01:55,333 --> 01:01:56,380 >> PUBLIKUM: [uhørlig] 1229 01:01:56,380 --> 01:01:58,630 DAVID MALAN: Så du faktisk har svart, i dette tilfellet. 1230 01:01:58,630 --> 01:02:01,530 Så hvis du har ingen av disse farger slått på, du har svart. 1231 01:02:01,530 --> 01:02:06,510 Men hvis du har, la oss si mye av dem, som mye rødt, 255 av den, 1232 01:02:06,510 --> 01:02:10,340 en masse av grønt, og en masse av blått, er det hvit. 1233 01:02:10,340 --> 01:02:12,230 Så dette er de to ytterpunktene. 1234 01:02:12,230 --> 01:02:17,460 Så ved denne logikken, hvis jeg har mye av rødt og ikke grønt og ingen blå, 1235 01:02:17,460 --> 01:02:18,485 hvilken farge er det? 1236 01:02:18,485 --> 01:02:19,360 PUBLIKUM: [uhørlig] 1237 01:02:19,360 --> 01:02:20,610 DAVID MALAN: Høyre, selvsagt. 1238 01:02:20,610 --> 01:02:25,940 Og så ingen røde, mye grønn, ikke blå, og deretter 1239 01:02:25,940 --> 01:02:29,590 hvis du Opptaktene bra, vil vi bare fullføre det, nettopp fordi, men dette er selvfølgelig 1240 01:02:29,590 --> 01:02:31,350 nå, er blå. 1241 01:02:31,350 --> 01:02:33,030 Og nå kan du kombinere disse fargene. 1242 01:02:33,030 --> 01:02:36,430 Nå som en side, hvis noen av dere har inne har gjort noen faktiske webdesign, 1243 01:02:36,430 --> 01:02:38,360 du kan faktisk se symboler som dette. 1244 01:02:38,360 --> 01:02:42,030 FFF-- og faktisk, det er sannsynligvis ikke det engang. 1245 01:02:42,030 --> 01:02:44,380 Det er FFFFFF. 1246 01:02:44,380 --> 01:02:48,970 >> Alle som noen gang har sett F og E s og A through-- så det viser seg, 1247 01:02:48,970 --> 01:02:52,970 Vi snakket i går om desimal, og hva slags dag, om desimal. 1248 01:02:52,970 --> 01:02:54,570 I dag har vi snakket om binære. 1249 01:02:54,570 --> 01:02:59,010 Slår ut, er heksadesimale en veldig felles base system som skal brukes i databehandling. 1250 01:02:59,010 --> 01:03:04,960 Binary er to, er desimal 10, er hex 16. 1251 01:03:04,960 --> 01:03:08,640 Og det viser seg, hvordan du telle i heksadesimal? 1252 01:03:08,640 --> 01:03:11,620 Zero, en, to, tre, fire, fem, seks, sju, åtte, 1253 01:03:11,620 --> 01:03:14,730 ni, hva bruker dere etter ni? 1254 01:03:14,730 --> 01:03:16,600 Hva er det neste tallet? 1255 01:03:16,600 --> 01:03:19,180 Vi har allerede brukt null. 1256 01:03:19,180 --> 01:03:20,570 Jeg trenger 16 av disse. 1257 01:03:20,570 --> 01:03:25,770 Zero, en, to, tre, fire, fem, seks, sju, åtte, ni, 1258 01:03:25,770 --> 01:03:27,520 du trenger litt vilkårlig konvensjonen. 1259 01:03:27,520 --> 01:03:30,810 >> Og hva menneskeheten besluttet for en tid siden at etter ni kommer brevet 1260 01:03:30,810 --> 01:03:34,450 A og deretter B og deretter C. Så Måten du telle i heksadesimal 1261 01:03:34,450 --> 01:03:37,040 er null, en, to, tre, fire, fem, seks, sju, åtte, ni, 1262 01:03:37,040 --> 01:03:42,880 A, B, C, D, E, F, og som vil telle deg hele veien, viser det seg, til 15. 1263 01:03:42,880 --> 01:03:47,850 Så null til 15 er null gjennom F. Nå hvorfor er det viktig? 1264 01:03:47,850 --> 01:03:51,570 Vel, når du har to F-tallet, det er hvordan du uttrykker 255. 1265 01:03:51,570 --> 01:03:54,350 >> Så lang historie kort, i verden av Photoshop, 1266 01:03:54,350 --> 01:03:57,299 som grafisk design software, i verden av web-utvikling, 1267 01:03:57,299 --> 01:03:59,590 hvor du har massevis av farger, selvfølgelig å spille med, 1268 01:03:59,590 --> 01:04:02,350 ofte programmerere vil uttrykke de i heksadesimal, 1269 01:04:02,350 --> 01:04:05,260 bare fordi det har en tendens å være litt enklere. 1270 01:04:05,260 --> 01:04:07,850 Selv om ved første øyekast det er mye mer kompleks. 1271 01:04:07,850 --> 01:04:11,590 >> Så i alle fall er dette viktig fordi Nick ved Stanford 1272 01:04:11,590 --> 01:04:15,100 har gitt oss seks stykker av funksjonalitet at du, spirende programmerere, 1273 01:04:15,100 --> 01:04:17,060 vil nå ha muligheten til å bruke. 1274 01:04:17,060 --> 01:04:19,960 Innebygd i denne web side er seks funksjoner, 1275 01:04:19,960 --> 01:04:21,820 seks prosedyrer som Nick skrev. 1276 01:04:21,820 --> 01:04:26,800 Tre av dem vil få deg et nummer, en rød, en grønn eller blå verdi. 1277 01:04:26,800 --> 01:04:28,787 Tre av dem vil sette denne verdien. 1278 01:04:28,787 --> 01:04:30,620 Og disse strek er bare plassholdere, 1279 01:04:30,620 --> 01:04:32,600 så du trenger å vite hva de er. 1280 01:04:32,600 --> 01:04:36,240 >> Så med disse tre funksjonene den første av disse tingene 1281 01:04:36,240 --> 01:04:39,190 kommer til å være en x-koordinat, og den andre av disse tingene 1282 01:04:39,190 --> 01:04:40,700 kommer til å være en y-koordinat. 1283 01:04:40,700 --> 01:04:44,650 Med andre ord, som prikken, som pixel ønsker du å få det grønne, 1284 01:04:44,650 --> 01:04:46,480 få blå, få den røde av. 1285 01:04:46,480 --> 01:04:51,440 Og så her, dette kommer til å være x, dette kommer til å være en y-verdi, 1286 01:04:51,440 --> 01:04:55,379 og dette kommer til å være et tall. 1287 01:04:55,379 --> 01:04:57,170 Så la oss gjøre det første linje av denne sammen 1288 01:04:57,170 --> 01:05:00,220 og så skal jeg la det til deg for å prøve å utlede de andre. 1289 01:05:00,220 --> 01:05:03,100 Så per instruksjonene på denne siden, trenger vi 1290 01:05:03,100 --> 01:05:08,960 for å øke den røde med en faktor 10, og vi trenger å fjerne den grønne 1291 01:05:08,960 --> 01:05:09,930 og fjerne det blå. 1292 01:05:09,930 --> 01:05:12,410 La oss starte med sistnevnte scenarier. 1293 01:05:12,410 --> 01:05:17,760 Så hvis jeg vil, og jeg kommer rykke inn ved hjelp av noen områder, 1294 01:05:17,760 --> 01:05:22,291 hvis jeg ønsker å sette den røde, den grønne eller blå verdi, 1295 01:05:22,291 --> 01:05:23,540 Jeg kommer til å gjøre følgende. 1296 01:05:23,540 --> 01:05:31,280 >> Image, im.setBlue, og deretter basert på mine instrukser her, 1297 01:05:31,280 --> 01:05:36,700 hva tre ting bør jeg skriver inni parentes nå? 1298 01:05:36,700 --> 01:05:41,960 Jeg trenger den x-verdi, jo y-verdi, og hvilket nummer 1299 01:05:41,960 --> 01:05:48,770 skal jeg sette her hvis jeg ønsker å bli kvitt av det blå, basert på denne historien her? 1300 01:05:48,770 --> 01:05:49,630 Bare null. 1301 01:05:49,630 --> 01:05:52,420 Hvis jeg ønsker ikke blå, jeg er bare kommer til å endre den til null. 1302 01:05:52,420 --> 01:05:54,465 >> Nå la oss bare oppsummere hva denne gjør. 1303 01:05:54,465 --> 01:05:56,970 1304 01:05:56,970 --> 01:06:01,170 Jeg har her på disse toppen andre og tredje linjer, 1305 01:06:01,170 --> 01:06:04,080 Jeg hevdet to sløyfer, nestede løkker, hvis du 1306 01:06:04,080 --> 01:06:08,360 vil, som kommer til å ha effekt av progresjon fra venstre til høyre, 1307 01:06:08,360 --> 01:06:11,590 topp til bunn i løpet av hele x verdier og alle y-verdier. 1308 01:06:11,590 --> 01:06:15,167 Fordi igjen, er et bilde bare et rutenett av rader og kolonner. 1309 01:06:15,167 --> 01:06:17,000 Så dette kommer til å få kvitte seg med alt det blå. 1310 01:06:17,000 --> 01:06:18,627 La meg la i neste linje til deg. 1311 01:06:18,627 --> 01:06:20,043 Hvordan kan jeg bli kvitt all den grønne? 1312 01:06:20,043 --> 01:06:23,747 1313 01:06:23,747 --> 01:06:25,140 >> PUBLIKUM: [uhørlig] 1314 01:06:25,140 --> 01:06:26,151 >> DAVID MALAN: Nice. 1315 01:06:26,151 --> 01:06:28,260 >> PUBLIKUM: [uhørlig] 1316 01:06:28,260 --> 01:06:30,850 >> DAVID MALAN: Nice. 1317 01:06:30,850 --> 01:06:36,120 Og jeg kommer til å zoome ut, og bare ta vare på at du ikke har gjort noen skrivefeil. 1318 01:06:36,120 --> 01:06:39,390 Og hvis du er komfortabel med hva du har gjort, 1319 01:06:39,390 --> 01:06:42,936 gå videre og klikk på knappen Kjør / Lagre og se hva du får. 1320 01:06:42,936 --> 01:06:46,982 1321 01:06:46,982 --> 01:06:48,690 Og igjen, har vi gjort bare tre endringer. 1322 01:06:48,690 --> 01:06:52,130 Vi har slettet det første kommentere og erstattet den 1323 01:06:52,130 --> 01:06:53,575 med disse to linjer med kode. 1324 01:06:53,575 --> 01:06:55,742 1325 01:06:55,742 --> 01:06:58,450 Og det er OK hvis du trenger å treffe Kjør / Lagre-knappen et par ganger 1326 01:06:58,450 --> 01:07:01,190 å fikse noe. 1327 01:07:01,190 --> 01:07:03,610 >> Og la meg også zoome inn på min kode slik at du kan transkribere. 1328 01:07:03,610 --> 01:07:04,110 God. 1329 01:07:04,110 --> 01:07:08,720 Så jeg ser Andrew har det synes å være en feil. 1330 01:07:08,720 --> 01:07:11,110 Han har nettopp fått en stor svart rektangel på skjermen sin. 1331 01:07:11,110 --> 01:07:13,120 Har noen andre har en stor svart rektangel? 1332 01:07:13,120 --> 01:07:13,390 >> PUBLIKUM: Ja. 1333 01:07:13,390 --> 01:07:14,360 >> DAVID MALAN: Big svart rektangel? 1334 01:07:14,360 --> 01:07:16,068 OK, så la oss tenke om hva dette betyr. 1335 01:07:16,068 --> 01:07:20,560 Vi sa at null, null, null, det grønne, ingen rød, ingen blå, 1336 01:07:20,560 --> 01:07:21,980 kommer til å gi deg svart. 1337 01:07:21,980 --> 01:07:24,467 Og det viser seg at de fleste av våre bærbare datamaskiner 1338 01:07:24,467 --> 01:07:25,800 bare ikke har nok troskap. 1339 01:07:25,800 --> 01:07:27,750 Du kan ikke helt si det er faktisk noe der. 1340 01:07:27,750 --> 01:07:30,340 Og hvis du slags kanskje lene skjermen fremover og tilbake, 1341 01:07:30,340 --> 01:07:32,850 Kanskje ser du en litt noe der? 1342 01:07:32,850 --> 01:07:34,820 Kanskje, på en måte, liksom? 1343 01:07:34,820 --> 01:07:36,640 Det er ikke helt svart. 1344 01:07:36,640 --> 01:07:38,050 >> PUBLIKUM: [uhørlig] 1345 01:07:38,050 --> 01:07:39,510 >> DAVID MALAN: Spoiler! 1346 01:07:39,510 --> 01:07:42,610 Det er noe rødt der, men husker fra spesifikasjonene 1347 01:07:42,610 --> 01:07:44,940 av problemet, Nick tonet det ned. 1348 01:07:44,940 --> 01:07:47,860 Han Desaturated det noe, men ikke hele veien til null. 1349 01:07:47,860 --> 01:07:51,670 Så hvis vi ønsker å foredle mengden rød, la meg foreslå dette trikset. 1350 01:07:51,670 --> 01:07:53,750 La meg zoome inn på skjermen min. 1351 01:07:53,750 --> 01:07:58,678 Og la meg gå videre og si Mengden er lik im.getRed (x, y). 1352 01:07:58,678 --> 01:08:02,440 1353 01:08:02,440 --> 01:08:05,790 >> Dette kodelinje er å gi meg noe som kalles en variabel. 1354 01:08:05,790 --> 01:08:09,643 Jeg har vilkårlig, men, uten tvil, rimelig ringte min variabel hva, 1355 01:08:09,643 --> 01:08:10,143 tilsynelatende? 1356 01:08:10,143 --> 01:08:13,530 1357 01:08:13,530 --> 01:08:14,340 Beløp. 1358 01:08:14,340 --> 01:08:14,980 Bare beløp. 1359 01:08:14,980 --> 01:08:16,960 Jeg kunne ha kalt det noe jeg vil, men jeg er 1360 01:08:16,960 --> 01:08:19,490 bruker denne annen funksjon som jeg beskrev tidligere 1361 01:08:19,490 --> 01:08:25,359 å få mengden rødt ved x komma y. 1362 01:08:25,359 --> 01:08:27,520 Hvorfor gjorde jeg det? 1363 01:08:27,520 --> 01:08:30,004 Hva vil du gjøre her? 1364 01:08:30,004 --> 01:08:32,910 1365 01:08:32,910 --> 01:08:33,619 Du må add-- 1366 01:08:33,619 --> 01:08:34,493 PUBLIKUM: [uhørlig] 1367 01:08:34,493 --> 01:08:36,279 DAVID MALAN: Ja, kanskje multiplisere det med 10. 1368 01:08:36,279 --> 01:08:38,862 Og hvis du ikke vet dette, er jeg kommer til å gå videre og gjøre dette. 1369 01:08:38,862 --> 01:08:42,060 Jeg kommer til å gå videre og si, jeg vil mengden av rødt 1370 01:08:42,060 --> 01:08:46,550 Jeg ønsker å være uansett er på rødt, ganger 10, 1371 01:08:46,550 --> 01:08:50,330 og stjernen, stjernen på Tastaturet er folk flest i ikke bruker x. 1372 01:08:50,330 --> 01:08:51,569 Bruk stjernen. 1373 01:08:51,569 --> 01:08:55,350 Det er hvordan du multiplisere ting i de fleste programmeringsspråk. 1374 01:08:55,350 --> 01:08:59,790 >> Så ifølge Kareem intuisjon, som er lagret i denne variabel kalt mengde, 1375 01:08:59,790 --> 01:09:03,649 er hvor mye rødt jeg ønsker på stedet xy. 1376 01:09:03,649 --> 01:09:11,500 Hvordan nå, gjør jeg det Pixel har det nummeret? 1377 01:09:11,500 --> 01:09:12,859 Du har allerede gjort dette før. 1378 01:09:12,859 --> 01:09:17,666 Du setter den grønne og den blå eller ingen verdi, til null. 1379 01:09:17,666 --> 01:09:18,540 PUBLIKUM: [uhørlig] 1380 01:09:18,540 --> 01:09:20,040 DAVID MALAN: Ja, vel du ikke vil ha det til 10. 1381 01:09:20,040 --> 01:09:21,460 Du har allerede gjorde regnestykket her. 1382 01:09:21,460 --> 01:09:24,779 Så vi får verdien av røde, som er et lavt tall, formodentlig. 1383 01:09:24,779 --> 01:09:26,180 Vi multiplisere opp med 10. 1384 01:09:26,180 --> 01:09:29,139 Hva du ønsker å gjøre med den variable beløpet nå? 1385 01:09:29,139 --> 01:09:30,130 >> PUBLIKUM: [uhørlig] 1386 01:09:30,130 --> 01:09:30,880 >> DAVID MALAN: Nice. 1387 01:09:30,880 --> 01:09:34,616 Så im.set-- hva? 1388 01:09:34,616 --> 01:09:35,640 >> PUBLIKUM: Setred. 1389 01:09:35,640 --> 01:09:39,760 >> DAVID MALAN: Setred, ved plassering xy. 1390 01:09:39,760 --> 01:09:40,260 Yeah. 1391 01:09:40,260 --> 01:09:41,200 Og akkurat beløp. 1392 01:09:41,200 --> 01:09:44,257 Med andre ord, en variabel er en midlertidig plassholder 1393 01:09:44,257 --> 01:09:45,840 at du kan sette alt du vil i. 1394 01:09:45,840 --> 01:09:48,680 Vi måtte være å sette en tall i den, i øyeblikket. 1395 01:09:48,680 --> 01:09:51,569 Vi har ganget det med 10 for å gjøre den større. 1396 01:09:51,569 --> 01:09:56,480 Og nå er jeg erstatte den variabelen som det tredje argumentet, eller innspill 1397 01:09:56,480 --> 01:09:57,810 å sette rødt. 1398 01:09:57,810 --> 01:10:00,440 Og slik at når du ferdig med det, og ta notat 1399 01:10:00,440 --> 01:10:02,330 av semikolon og parenteser. 1400 01:10:02,330 --> 01:10:06,290 >> Gå videre og klikk kjøre / lagre på nytt, og du 1401 01:10:06,290 --> 01:10:10,690 bør se, magisk, det var faktisk der. [? Arwa,?] Hva er det? 1402 01:10:10,690 --> 01:10:16,412 Eiffeltårnet i full-fledged rød, ikke helt mørkt. 1403 01:10:16,412 --> 01:10:17,870 det bør være mer opplagt nå, ja? 1404 01:10:17,870 --> 01:10:18,840 OK. 1405 01:10:18,840 --> 01:10:20,215 Og Andrew, ikke mer svart boks? 1406 01:10:20,215 --> 01:10:21,090 PUBLIKUM: [uhørlig] 1407 01:10:21,090 --> 01:10:22,180 DAVID MALAN: Greit. 1408 01:10:22,180 --> 01:10:23,610 Så jeg vil holde dette på skjermen. 1409 01:10:23,610 --> 01:10:27,010 Hvis du ønsker å spille med denne senere, vil jeg gjenskape dette for deg. 1410 01:10:27,010 --> 01:10:29,140 Men denne koden her gjorde akkurat det. 1411 01:10:29,140 --> 01:10:31,460 Hvorfor kan ikke vi gjøre en annen. 1412 01:10:31,460 --> 01:10:33,880 La meg bla ned litt. 1413 01:10:33,880 --> 01:10:36,760 >> Så i dette tilfelle projektoren ikke virkelig gjøre det rettferdighet. 1414 01:10:36,760 --> 01:10:40,486 Men på skjermer, har du sannsynligvis ha en meget rød og meget sorte boksen. 1415 01:10:40,486 --> 01:10:42,610 Også dette er et puslespill som viser noe kjent. 1416 01:10:42,610 --> 01:10:44,193 Imidlertid har det blitt forvrengt bilde. 1417 01:10:44,193 --> 01:10:47,740 Den sanne bilde, denne gangen, er i det blå og grønne verdier. 1418 01:10:47,740 --> 01:10:51,820 Men de har alle blitt delt ved 20 slik at verdiene er svært små. 1419 01:10:51,820 --> 01:10:54,660 De røde verdier er bare tilfeldige tall, støy. 1420 01:10:54,660 --> 01:10:57,190 Angre disse forvrengninger for å vise den virkelige bildet. 1421 01:10:57,190 --> 01:10:59,200 >> Så Nick så forteller deg hva du skal gjøre. 1422 01:10:59,200 --> 01:11:04,290 Setter de røde verdiene til null, og så ikke ødelegge hva det er. 1423 01:11:04,290 --> 01:11:07,110 Deretter multiplisere den blå og grønne verdier med 20. 1424 01:11:07,110 --> 01:11:09,820 Så det er nesten det samme programmet som før, 1425 01:11:09,820 --> 01:11:11,380 men du reversere prosessen. 1426 01:11:11,380 --> 01:11:13,780 Og jeg vil sette min kode fra før på skjermen i tilfelle 1427 01:11:13,780 --> 01:11:16,650 du ønsker å se tilbake på det eller spille videre med den. 1428 01:11:16,650 --> 01:11:18,100 La meg zoome inn på det. 1429 01:11:18,100 --> 01:11:21,450 Men løse kobber bilde puslespill, nummer to. 1430 01:11:21,450 --> 01:11:37,623 1431 01:11:37,623 --> 01:11:40,580 >> PUBLIKUM: [uhørlig] 1432 01:11:40,580 --> 01:11:44,010 >> DAVID MALAN: OK, så dette er jeg ikke kommer til å gi så mange tips. 1433 01:11:44,010 --> 01:11:47,220 Så jeg would-- oh, la oss se, du har en skrivefeil her. 1434 01:11:47,220 --> 01:11:49,621 Så husk, dette her faktisk trenger å gå dit. 1435 01:11:49,621 --> 01:11:52,870 Så det jeg ville foreslå, hvis du ønsker å fokus på dette, det er svaret. 1436 01:11:52,870 --> 01:11:57,060 Hvis du ønsker å transkribere det, at bør få den første arbeids. 1437 01:11:57,060 --> 01:11:59,910 Og så kan du bruke det som inspirasjon for andre. 1438 01:11:59,910 --> 01:12:02,230 Hyggelig. 1439 01:12:02,230 --> 01:12:02,730 God. 1440 01:12:02,730 --> 01:12:05,430 1441 01:12:05,430 --> 01:12:08,180 >> Og for de nysgjerrige, Dette er et enkelt eksempel 1442 01:12:08,180 --> 01:12:11,080 av en vitenskap eller en kunst kalles steganography, 1443 01:12:11,080 --> 01:12:14,100 kunsten å skjule informasjon i bildene. 1444 01:12:14,100 --> 01:12:16,890 Vanligvis bilder kan være vannmerke veldig åpenlyst 1445 01:12:16,890 --> 01:12:19,500 med en logo i bunnen hjørne, men klart, du 1446 01:12:19,500 --> 01:12:22,070 kan være mye mer sofistikert om det og faktisk 1447 01:12:22,070 --> 01:12:25,050 skjule andre bilder i bilder en eller annen måte med denne teknikken. 1448 01:12:25,050 --> 01:12:59,890 1449 01:12:59,890 --> 01:13:05,770 >> Ta en annen 30 sekunder, og deretter vi vil minst kunn hva du bør se. 1450 01:13:05,770 --> 01:13:08,330 Og jeg vil forlate den tredje en som en hjemme-trening, 1451 01:13:08,330 --> 01:13:11,353 Hvis du ønsker mer av en utfordre denne helgen. 1452 01:13:11,353 --> 01:13:18,240 1453 01:13:18,240 --> 01:13:20,390 Og jeg tror Andrew kanskje har fått det første. 1454 01:13:20,390 --> 01:13:22,645 Hva er det andre bildet, Andrew? 1455 01:13:22,645 --> 01:13:23,920 >> PUBLIKUM: Statue of Liberty. 1456 01:13:23,920 --> 01:13:28,500 >> DAVID MALAN: Statue of Liberty vil være svaret dette tidspunktet. 1457 01:13:28,500 --> 01:13:31,140 Så igjen, bare noen enkle eksempler, har som mål 1458 01:13:31,140 --> 01:13:35,040 er å gi deg en følelse av hvordan Vi har oversatt billed Scratch 1459 01:13:35,040 --> 01:13:40,410 blokker til mer irriterende og mer komplisert kode, men alle ideene 1460 01:13:40,410 --> 01:13:42,980 fremdeles er nøyaktig det samme, riktignok med innføringen 1461 01:13:42,980 --> 01:13:48,380 nå av tanken om en variabel, blir stand til å lagre noe midlertidig. 1462 01:13:48,380 --> 01:13:51,750 >> La oss gjøre en mer hands-on, bare for å nå koble prikkene 1463 01:13:51,750 --> 01:13:53,880 til noe litt mer virkelige verden. 1464 01:13:53,880 --> 01:13:56,610 Når du er klar, hvis du kunne gå til denne nettadressen på skjermen. 1465 01:13:56,610 --> 01:14:00,610 Det er også i din kopi av lysbilder, developers.google.com/maps~~V. 1466 01:14:00,610 --> 01:14:03,660 La oss faktisk gjøre noe ekte, så å si, på Internett 1467 01:14:03,660 --> 01:14:07,600 ved hjelp av Google Maps API, eller Applikasjonsprogrammeringsgrensesnitt, 1468 01:14:07,600 --> 01:14:08,940 på følgende måte. 1469 01:14:08,940 --> 01:14:12,341 >> Google, som mange selskaper, gir mye gratis funksjonalitet 1470 01:14:12,341 --> 01:14:14,840 som du kan bruke til å bygge din egne interessante programmer. 1471 01:14:14,840 --> 01:14:18,890 Faktisk, hvis du noen gang har brukt Uber å få en drosje eller en bil, 1472 01:14:18,890 --> 01:14:21,640 du sannsynligvis vet at Uber har et kart, og det viser biler på den. 1473 01:14:21,640 --> 01:14:24,870 Det er, så godt jeg kan fortelle, Google Maps API. 1474 01:14:24,870 --> 01:14:28,884 De er faktisk bruker Googles kart, men Uber er ikke en kartlegging selskap, 1475 01:14:28,884 --> 01:14:31,050 og heller ikke ville det være en spesielt interessant problem 1476 01:14:31,050 --> 01:14:33,510 å løse på toppen av deres bilservice problem. 1477 01:14:33,510 --> 01:14:35,510 Og så de står, igjen, på skuldrene 1478 01:14:35,510 --> 01:14:37,520 av andre, Google i dette tilfellet. 1479 01:14:37,520 --> 01:14:42,850 Så de bruker Googles kart, men sine egne bilen tjenester og andre slike funksjoner. 1480 01:14:42,850 --> 01:14:47,770 >> Så vi kommer til å dra nytte av dette for å gjøre følgende. 1481 01:14:47,770 --> 01:14:50,230 Og hvis jeg har gått for fort, bare ring meg over på et øyeblikk. 1482 01:14:50,230 --> 01:14:53,500 Glad for å gjenerobre noe av bildet ting. 1483 01:14:53,500 --> 01:14:56,290 Du bør se deg selv på en side som dette. 1484 01:14:56,290 --> 01:14:58,230 Så Googles hyggelig, og de er blant de beste 1485 01:14:58,230 --> 01:15:01,364 om å tilby ikke bare APIer, men gratis APIer som du 1486 01:15:01,364 --> 01:15:02,780 kan spille med eller bruke kommersielt. 1487 01:15:02,780 --> 01:15:06,450 De begynner å belaste deg hvis din bruk er høy, men jeg gikk videre på forhånd 1488 01:15:06,450 --> 01:15:10,490 og signert oss opp for en gratis konto det, forhåpentligvis, 10 datamaskiner 1489 01:15:10,490 --> 01:15:12,480 vil ikke diskvalifisere oss for plutselig. 1490 01:15:12,480 --> 01:15:14,320 Så forhåpentligvis dette demonstrasjonen vil fungere. 1491 01:15:14,320 --> 01:15:18,840 >> Og legg merke til at de har APIer for Android, iOS, web og web-tjenester, 1492 01:15:18,840 --> 01:15:19,620 uansett hva det er. 1493 01:15:19,620 --> 01:15:20,700 La oss fokusere på nettet. 1494 01:15:20,700 --> 01:15:26,560 Så klikker du på rosa boksen, web, og at vil lede deg, forhåpentligvis, til en side 1495 01:15:26,560 --> 01:15:27,630 her. 1496 01:15:27,630 --> 01:15:29,335 Og de har fått en hel haug med APIer. 1497 01:15:29,335 --> 01:15:31,210 Og det kan være litt overveldende i starten, 1498 01:15:31,210 --> 01:15:33,000 men jeg skal styre oss gjennom hva vi ønsker. 1499 01:15:33,000 --> 01:15:38,500 >> Øverst til venstre er Google Maps Javascript API, Javascript API. 1500 01:15:38,500 --> 01:15:40,380 Så gå videre og klikk på den. 1501 01:15:40,380 --> 01:15:49,360 Og som vil lede deg nå til neste side, demoer og eksempelkode. 1502 01:15:49,360 --> 01:15:51,190 La meg zoome ut her. 1503 01:15:51,190 --> 01:15:56,300 Og la meg få oss to-- bla nedover til der det står rask start trinn. 1504 01:15:56,300 --> 01:15:57,970 Skjermen skal se ut mine. 1505 01:15:57,970 --> 01:16:01,130 >> Og det er to trinn, får en nøkkel og begynne å utvikle. 1506 01:16:01,130 --> 01:16:04,190 Jeg har allerede gjort trinn én for oss, får en såkalt tasten. 1507 01:16:04,190 --> 01:16:05,320 Og dette er en felles idé. 1508 01:16:05,320 --> 01:16:09,210 En API-nøkkel er vanligvis bare en stor tilfeldig tall eller streng 1509 01:16:09,210 --> 01:16:11,130 at du er ment lime inn koden, 1510 01:16:11,130 --> 01:16:15,280 slik at Google vet hvem du er når du bruker deres tjeneste, deres API. 1511 01:16:15,280 --> 01:16:17,370 Betyr ikke at vi er blir belastet noe. 1512 01:16:17,370 --> 01:16:21,030 Og nå, klikk, i stedet for en, klikker du begynne å utvikle. 1513 01:16:21,030 --> 01:16:25,990 Hvis du bare kunne vinke meg over hvis ikke sikker på hvor vi er. 1514 01:16:25,990 --> 01:16:28,040 >> Så får vi bare ripe opp overflaten, her, men hva 1515 01:16:28,040 --> 01:16:31,000 Jeg trodde ville være overbevisende er å faktisk ha oss alle, 1516 01:16:31,000 --> 01:16:34,240 bruker Cloud9 i ett vindu og denne opplæringen i et annet vindu, 1517 01:16:34,240 --> 01:16:37,120 lar faktisk få vår egen applikasjon oppe og går 1518 01:16:37,120 --> 01:16:40,920 som bygger en tilpasset Google kart i vår egen webside, 1519 01:16:40,920 --> 01:16:43,010 og deretter legger til en eller to funksjoner. 1520 01:16:43,010 --> 01:16:45,520 Men vi vil bare ripe opp overflaten av hva vi kan gjøre. 1521 01:16:45,520 --> 01:16:47,020 >> Så bare en rask sunn fornuft sjekk. 1522 01:16:47,020 --> 01:16:49,740 Er alle på denne siden, Google Maps Javascript API? 1523 01:16:49,740 --> 01:16:50,872 Burde si å komme i gang. 1524 01:16:50,872 --> 01:16:53,330 Vi kommer ikke til å gå gjennom hele greia på noen måte. 1525 01:16:53,330 --> 01:16:58,090 OK, i en annen fane, hvis du ikke gjør det har den åpen, gå inn Cloud9 1526 01:16:58,090 --> 01:17:03,500 og få deg til å bare en ny fane, til slutt. 1527 01:17:03,500 --> 01:17:11,070 Så igjen, c9.io fra i går, c9.io, og bare lage en ny fil. 1528 01:17:11,070 --> 01:17:13,500 Og gå videre og samtale det hva du vil. 1529 01:17:13,500 --> 01:17:16,495 Jeg ringte min map.html. 1530 01:17:16,495 --> 01:17:17,870 Kall det noe som ender i HTML. 1531 01:17:17,870 --> 01:17:23,930 1532 01:17:23,930 --> 01:17:26,580 Og du bør være omtrent hvor jeg er i denne prosessen 1533 01:17:26,580 --> 01:17:31,470 med bare en blinkende tekst i en tom Kategorien heter noe sånt som map.html. 1534 01:17:31,470 --> 01:17:35,808 1535 01:17:35,808 --> 01:17:38,148 Eller fil, ny fil av denne tiden. 1536 01:17:38,148 --> 01:17:41,960 1537 01:17:41,960 --> 01:17:48,000 >> Og nå, over på Google Maps Javascript API, 1538 01:17:48,000 --> 01:17:50,010 vi hopper lesing gjennom hele denne teksten. 1539 01:17:50,010 --> 01:17:53,760 Men legg merke til at hello world er ja overalt, ser du det nå. 1540 01:17:53,760 --> 01:17:58,020 Hei, verden har dette stor fargerik eksempel på en hel haug med HTML. 1541 01:17:58,020 --> 01:18:03,590 Gå videre og kopiere og lime inn bare det HTML, så fra doc typen på toppen 1542 01:18:03,590 --> 01:18:08,810 hele veien til utgangen HTML-koden, gå videre og kopiere alle at-- igjen, 1543 01:18:08,810 --> 01:18:14,430 som er under hello world example-- og lim den inn i kategorien Cloud9, 1544 01:18:14,430 --> 01:18:17,996 så nå skjermen din bør se omtrent som min. 1545 01:18:17,996 --> 01:18:22,280 1546 01:18:22,280 --> 01:18:24,520 >> Og du kan lagre det, men ikke legger det ennå. 1547 01:18:24,520 --> 01:18:26,290 La oss først se på koden og se om vi 1548 01:18:26,290 --> 01:18:29,110 kan ikke slutte eller lære fra hva det er Google 1549 01:18:29,110 --> 01:18:30,860 har hatt oss blindt kopiere og lime. 1550 01:18:30,860 --> 01:18:33,334 De ønsker bare å hjelpe, bokstavelig talt, få oss i gang, 1551 01:18:33,334 --> 01:18:35,500 men det er ikke så mye kompleksitet faktisk det. 1552 01:18:35,500 --> 01:18:40,100 1553 01:18:40,100 --> 01:18:42,210 Eventuelle spørsmål ennå? 1554 01:18:42,210 --> 01:18:43,790 Vi er trygge å smi videre? 1555 01:18:43,790 --> 01:18:44,330 OK. 1556 01:18:44,330 --> 01:18:46,800 >> Så raskt, la oss bare gjøre noen raske feilsjekkene. 1557 01:18:46,800 --> 01:18:48,800 Linje en av hva jeg se, og forhåpentligvis, du 1558 01:18:48,800 --> 01:18:51,710 se, hva betyr det, DOCTYPE HTML? 1559 01:18:51,710 --> 01:18:52,385 Kareem, husker? 1560 01:18:52,385 --> 01:18:53,260 PUBLIKUM: [uhørlig] 1561 01:18:53,260 --> 01:18:53,968 DAVID MALAN: Ja. 1562 01:18:53,968 --> 01:18:54,870 Her kommer HTML 5. 1563 01:18:54,870 --> 01:18:57,950 I mellomtiden, linje to i skjermen her betyr hei nettleser, 1564 01:18:57,950 --> 01:18:59,482 her kommer selve HTML. 1565 01:18:59,482 --> 01:19:01,440 Linje tre er hey nettleser, her kommer hodet. 1566 01:19:01,440 --> 01:19:04,260 Linje fire er, selvfølgelig, hei nettleser, her kommer tittelen. 1567 01:19:04,260 --> 01:19:07,780 Hva gjør linjen fem gjøre? 1568 01:19:07,780 --> 01:19:09,930 Egentlig gjør ikke dette virkelig gjøre noe for oss. 1569 01:19:09,930 --> 01:19:13,340 I dette tilfellet, det bare endrer størrelsen siden til en standard. Linje seks, 1570 01:19:13,340 --> 01:19:16,140 vi har ikke snakket om, men det spesifiserer tegnkoding. 1571 01:19:16,140 --> 01:19:19,181 Det er forskjellige måter å kode filene, spesielt for fremmedspråk. 1572 01:19:19,181 --> 01:19:21,100 UTF-8 bare en tendens til å være standard. 1573 01:19:21,100 --> 01:19:26,580 >> Så nå får vi se i kø sju til 16, noen CSS. 1574 01:19:26,580 --> 01:19:29,260 Og selv om vi ikke har sett alle disse tingene før, 1575 01:19:29,260 --> 01:19:30,810 vi kan slags antyde. 1576 01:19:30,810 --> 01:19:37,075 Så linje åtte midler, hei nettleser, gjelder alt av følgende til hvilke to koder, 1577 01:19:37,075 --> 01:19:37,575 tilsynelatende? 1578 01:19:37,575 --> 01:19:40,650 1579 01:19:40,650 --> 01:19:41,701 HTML og brødtekst. 1580 01:19:41,701 --> 01:19:43,200 Så komma er det nye ting der. 1581 01:19:43,200 --> 01:19:46,140 Og det er bare en måte å spesifisere flere koder samtidig. 1582 01:19:46,140 --> 01:19:47,640 >> Da har vi klammeparentes. 1583 01:19:47,640 --> 01:19:51,170 Så tydeligvis, forteller denne nettleseren, gjøre høyden på side 100%. 1584 01:19:51,170 --> 01:19:54,170 Så selv om det er svært lite innhold, gjør hele siden, 1585 01:19:54,170 --> 01:19:55,530 gjøre ting fylle siden. 1586 01:19:55,530 --> 01:19:57,524 Gjør kartet til slutt fylle siden. 1587 01:19:57,524 --> 01:19:58,690 Margin, hva betyr det? 1588 01:19:58,690 --> 01:20:01,559 Det er som regel like vilkårlig hvit ramme rundt kantene 1589 01:20:01,559 --> 01:20:04,350 at noen leseren designer bare besluttet skal være der, fordi det 1590 01:20:04,350 --> 01:20:05,540 slags gjør ting ser renere. 1591 01:20:05,540 --> 01:20:06,498 Men vi ønsker ikke det. 1592 01:20:06,498 --> 01:20:08,710 Vi vil at kartet skal helt ut til kantene. 1593 01:20:08,710 --> 01:20:10,930 Padding, ligner i ånden til marginer. 1594 01:20:10,930 --> 01:20:14,980 Marginene bety utenfor, padding midler inne, men det er den samme type avtale. 1595 01:20:14,980 --> 01:20:17,520 Det er litt av en buffer mellom deg og kantene. 1596 01:20:17,520 --> 01:20:21,170 >> Og deretter linje 13 er en god mulighet for en rask gjennomgang. 1597 01:20:21,170 --> 01:20:26,440 Hva gjør skarpt tegnet kart mener, eller hashtag kartet? 1598 01:20:26,440 --> 01:20:29,650 Hva betyr det refererer til, i prinsippet? 1599 01:20:29,650 --> 01:20:31,485 >> PUBLIKUM: [uhørlig] 1600 01:20:31,485 --> 01:20:32,360 DAVID MALAN: Nettopp. 1601 01:20:32,360 --> 01:20:36,900 Denne egenskapen, denne CSS eiendom gjelder bare en ting, HTML-koden 1602 01:20:36,900 --> 01:20:41,180 som har en ID sitat, unquote "kart". 1603 01:20:41,180 --> 01:20:44,460 Og nå la oss spole fremover, bla ned til bunnen av filen, hvilken 1604 01:20:44,460 --> 01:20:49,860 er ikke så langt unna, og varsel på linje 19, hvis du limer det akkurat som jeg gjorde, 1605 01:20:49,860 --> 01:20:53,405 linjen 19 har bare en div, som er et delingen av siden som i går jeg 1606 01:20:53,405 --> 01:20:54,820 kalles en rektangulær region. 1607 01:20:54,820 --> 01:20:55,820 Det har ingenting i den. 1608 01:20:55,820 --> 01:20:57,550 Det er en åpen tag, nær tag. 1609 01:20:57,550 --> 01:20:59,490 Men det har en unik ID. 1610 01:20:59,490 --> 01:21:02,090 >> Så hva synes å være skjer her er Google 1611 01:21:02,090 --> 01:21:05,880 er Klargjøring vår nettside for å har en fullstendig 100% høyde, 1612 01:21:05,880 --> 01:21:09,680 og ingen padding, ingen marginer, fordi hva vi kommer til å sette inne 1613 01:21:09,680 --> 01:21:13,647 av denne div, hvis unike ID er kartet, er en faktisk innebygd kart. 1614 01:21:13,647 --> 01:21:15,480 Og vi vil at den skal fylle siden og ikke bare 1615 01:21:15,480 --> 01:21:17,560 være noen liten firkant i midten. 1616 01:21:17,560 --> 01:21:24,220 Så linje 14 på samme måte understreker den kartlegge seg selv skal ha en høyde på 100%. 1617 01:21:24,220 --> 01:21:29,220 >> Så nå ser mellom linjene 20 og 28, er dette Javascript-kode. 1618 01:21:29,220 --> 01:21:33,020 Og dette er, selv om det er syntaktisk litt rart, 1619 01:21:33,020 --> 01:21:34,730 det er ikke så mye som skjer her. 1620 01:21:34,730 --> 01:21:39,310 I tråd 21, er dette erklære noe som kalles en variabel. 1621 01:21:39,310 --> 01:21:42,030 I stedet for å kalle det utgjør, som vi gjorde før, 1622 01:21:42,030 --> 01:21:44,500 Vi er mer presist å si Var, som nettopp betyr variabel. 1623 01:21:44,500 --> 01:21:46,520 Vi kunne ha brukt det i Nick kode, men han gjorde det ikke, så jeg 1624 01:21:46,520 --> 01:21:48,190 ikke bry å gjøre det heller. 1625 01:21:48,190 --> 01:21:50,240 Det er en variabel kalt kart, og så er det 1626 01:21:50,240 --> 01:21:53,360 en funksjon som er tilsynelatende kalt initMap. 1627 01:21:53,360 --> 01:21:55,780 >> Så dette er som våre egne puslespillbiten i Scratch. 1628 01:21:55,780 --> 01:21:58,830 Vi har laget et stykke funksjonalitet kalt initMap, 1629 01:21:58,830 --> 01:22:00,980 og du kan slags antyde Hva foregår her. 1630 01:22:00,980 --> 01:22:02,930 På venstre side, vi har fått en variabel, 1631 01:22:02,930 --> 01:22:06,000 så vi kommer til å sette følgende ting inni den variabelen, 1632 01:22:06,000 --> 01:22:07,362 fra høyre mot venstre. 1633 01:22:07,362 --> 01:22:11,940 Den høyre side sier: hey nettleser, gi meg en ny Google-kartet. 1634 01:22:11,940 --> 01:22:16,490 Og google.maps.map er bare en funky måte for å spesifisere at denne funksjonaliteten 1635 01:22:16,490 --> 01:22:19,790 tilhører Google Maps. 1636 01:22:19,790 --> 01:22:23,010 >> Etter parentesene, har vi sett dette før, hei nettleser, får 1637 01:22:23,010 --> 01:22:29,210 meg elementene i siden, tag på siden hvis unike ID er-- 1638 01:22:29,210 --> 01:22:30,710 >> PUBLIKUM: [uhørlig] 1639 01:22:30,710 --> 01:22:31,790 >> DAVID MALAN: --map. 1640 01:22:31,790 --> 01:22:35,770 Og hva som skjer, vel, denne linjen sammen, linje 23, 1641 01:22:35,770 --> 01:22:38,630 er i hovedsak si, hei nettleser, gå meg 1642 01:22:38,630 --> 01:22:42,800 som tom div på siden hvis unike ID er kartet, 1643 01:22:42,800 --> 01:22:45,600 fordi jeg ønsker å sette inn inn i it injisere inn i det, 1644 01:22:45,600 --> 01:22:49,520 hvis du will-- en hel haug med innhold som skjer for å komme fra nettet, 1645 01:22:49,520 --> 01:22:50,427 deretter. 1646 01:22:50,427 --> 01:22:52,010 Og Googles gjør alt dette for oss. 1647 01:22:52,010 --> 01:22:55,350 >> Så igjen, helt på slutten av dagen, vi har dette eksempelet av abstraksjon. 1648 01:22:55,350 --> 01:22:58,610 Jeg har ingen anelse om hva et kart er eller hvordan å implementere et kart API. 1649 01:22:58,610 --> 01:22:59,460 Vi trenger ikke å. 1650 01:22:59,460 --> 01:23:02,740 Vi trenger bare å fortelle kartet hvor du skal plassere seg selv, og la 1651 01:23:02,740 --> 01:23:04,880 de underliggende implementeringen detaljer til Google. 1652 01:23:04,880 --> 01:23:08,190 Nå er det tydeligvis to stykker av data 1653 01:23:08,190 --> 01:23:11,940 at dette eksempel er leverer til Googles API. 1654 01:23:11,940 --> 01:23:16,450 Tilsynelatende midten av kartet, og zoomnivået, så å si. 1655 01:23:16,450 --> 01:23:21,390 >> Og er det noen som kjenner igjen disse koordinater, lengde- og breddegrad? 1656 01:23:21,390 --> 01:23:24,364 Sannsynligvis ikke, men vi kan gå tilbake til opplæringen, bokstavelig talt se. 1657 01:23:24,364 --> 01:23:25,780 Men vi får se det i bare et øyeblikk. 1658 01:23:25,780 --> 01:23:29,880 Zoom-nivå er en verdi mellom, jeg gjør ikke vet, en i 13 eller noe sånt. 1659 01:23:29,880 --> 01:23:32,880 Det har bare å gjøre med hvor langt du er zoomet inn eller ut, og det er det. 1660 01:23:32,880 --> 01:23:35,690 Og nå helt på slutten av siden, varsel linje 29-- 1661 01:23:35,690 --> 01:23:39,960 det er litt stygg fordi det wraps-- denne linjen med kode 1662 01:23:39,960 --> 01:23:44,570 er hva laster ned til Nettleseren Google faktiske API. 1663 01:23:44,570 --> 01:23:47,500 All kode som Googles ingeniører har skrevet at implementere 1664 01:23:47,500 --> 01:23:50,000 hele denne funksjonen innebygges kart. 1665 01:23:50,000 --> 01:23:51,470 >> La oss nå ikke endre noe. 1666 01:23:51,470 --> 01:23:54,761 Hvis du følger med, gå videre og bare lagre filen, hvis du faktisk har 1667 01:23:54,761 --> 01:23:55,760 hva jeg har. 1668 01:23:55,760 --> 01:23:57,370 Gå til nettadressen. 1669 01:23:57,370 --> 01:23:59,820 Du kan klikke på knappen Kjør opp toppen og som vil fortelle 1670 01:23:59,820 --> 01:24:03,050 du nettadressen til webserveren din igjen. 1671 01:24:03,050 --> 01:24:06,010 Og det vil lede deg til en ny fane. 1672 01:24:06,010 --> 01:24:11,910 Hvis du klikker Åpne for map.html, og oddsen er du er 1673 01:24:11,910 --> 01:24:15,520 kommer til å få et varsel, en feilmelding, ja? 1674 01:24:15,520 --> 01:24:18,570 Feilmelding, feilmelding? 1675 01:24:18,570 --> 01:24:21,170 >> Så dessverre, feil Meldingen er ikke så opplysende 1676 01:24:21,170 --> 01:24:23,890 med mindre du faktisk åpner konsollen, den spesielle kategorien vi 1677 01:24:23,890 --> 01:24:27,110 holdt åpne i går og litt tidligere i dag. 1678 01:24:27,110 --> 01:24:29,445 Men jeg snublet over dette tidligere, så jeg allerede 1679 01:24:29,445 --> 01:24:30,820 funnet ut hva løsningen er. 1680 01:24:30,820 --> 01:24:34,440 I dagens lysbilder, eller heller, i Cloud9, varsel 1681 01:24:34,440 --> 01:24:36,430 at vi ikke gjorde noe bevisst. 1682 01:24:36,430 --> 01:24:40,690 Legg merke til at dette skriptet koden i linje 29, hvis du leser gjennom det, 1683 01:24:40,690 --> 01:24:44,440 det er som maps.googleapis.com/ noe, noe, noe 1684 01:24:44,440 --> 01:24:46,430 Da oppdager noen, en av utviklerne, 1685 01:24:46,430 --> 01:24:50,040 skrev i all kapital bokstaver, API nøkkel. 1686 01:24:50,040 --> 01:24:51,700 >> Vi trenger å lime inn noe der. 1687 01:24:51,700 --> 01:24:53,450 Og dette var trinnet Jeg gjorde for oss før, 1688 01:24:53,450 --> 01:24:57,190 og igjen de kan svarteliste oss hvis plutselig, 12 eller mer av oss 1689 01:24:57,190 --> 01:24:59,470 begynne å bruke den samme nøkkelen, men la oss se hva som skjer. 1690 01:24:59,470 --> 01:25:03,030 Så hvis du går inn i dagens lysbilder, en sklie senere, er det 1691 01:25:03,030 --> 01:25:07,070 dette svært funky utseende tekststreng. 1692 01:25:07,070 --> 01:25:12,230 Gå videre og bare kopiere det og lime det inn der det står API nøkkel. 1693 01:25:12,230 --> 01:25:15,120 Det er den jeg registrerte meg for. 1694 01:25:15,120 --> 01:25:17,700 >> Og definitivt ikke prøv skrive det ut manuelt, 1695 01:25:17,700 --> 01:25:21,210 fordi det føles nervøs med skrivefeil, potensielt. 1696 01:25:21,210 --> 01:25:23,260 Så bare kopiere og lime det. 1697 01:25:23,260 --> 01:25:26,090 Og det kommer til å gjøre linjen lenger, men nå, bare for å være klar, 1698 01:25:26,090 --> 01:25:29,540 det skal se litt mer som dette, der nøkkelen er lik ikke 1699 01:25:29,540 --> 01:25:32,200 kapitalisert roping på deg. 1700 01:25:32,200 --> 01:25:34,810 Lagre siden din, gå tilbake til den andre kategorien, laste, 1701 01:25:34,810 --> 01:25:36,770 og håper å se et kart over hvor? 1702 01:25:36,770 --> 01:25:37,790 >> PUBLIKUM: Australia. 1703 01:25:37,790 --> 01:25:38,748 >> DAVID MALAN: Australia. 1704 01:25:38,748 --> 01:25:41,200 Så tilsynelatende de er GPS-koordinater fra Australia. 1705 01:25:41,200 --> 01:25:44,491 Og la meg gå rundt for bare et øyeblikk og hjelpe alle som ikke er helt der, 1706 01:25:44,491 --> 01:25:47,729 men la meg foreslå, via Google, finner GPS-koordinatene til din egen hjemby 1707 01:25:47,729 --> 01:25:48,770 eller ditt eget hjemland. 1708 01:25:48,770 --> 01:25:51,436 Og sannsynligvis Google kan snu dette opp, eller Wikipedia kan fortelle deg. 1709 01:25:51,436 --> 01:25:54,410 Men velger to forskjellige verdier for breddegrad og lengdegrad, 1710 01:25:54,410 --> 01:25:57,530 gå tilbake i og lime dem, og så laste siden på nytt etter lagring 1711 01:25:57,530 --> 01:26:00,718 og se om du kan ha en kart for din egen hjemby. 1712 01:26:00,718 --> 01:26:04,500 1713 01:26:04,500 --> 01:26:08,042 >> Og når du er ferdig med at oppfølgingen challenge-- 1714 01:26:08,042 --> 01:26:11,250 og jeg skal gi litt mindre retning, bevisst, slik at du bevisst 1715 01:26:11,250 --> 01:26:13,791 må kjempe for et par minutter med dokumentasjon, 1716 01:26:13,791 --> 01:26:18,740 endre kart å være ikke dette cartoonish standard, men en satellitt kart. 1717 01:26:18,740 --> 01:26:24,600 Så du faktisk se satellitt bilder i stedet for de vakre fargene. 1718 01:26:24,600 --> 01:26:29,710 >> Og tipset jeg vil gi deg er å endre kartets type. 1719 01:26:29,710 --> 01:26:33,084 Gå tilbake til at å få startet side for inspirasjon. 1720 01:26:33,084 --> 01:26:40,599 1721 01:26:40,599 --> 01:26:42,390 Som du kanskje har sanket, hvis du er ute, 1722 01:26:42,390 --> 01:26:44,250 det er så mange flere ting du kan gjøre. 1723 01:26:44,250 --> 01:26:46,380 Noen av dere har allerede endret karttype. 1724 01:26:46,380 --> 01:26:49,890 Men du kan do-- for eksempel, la meg gå til noe vi gjorde for kurset 1725 01:26:49,890 --> 01:26:52,050 Jeg teach-- maps.cs50.net. 1726 01:26:52,050 --> 01:26:53,470 En av våre undergrads gjorde dette. 1727 01:26:53,470 --> 01:26:58,890 Vi sentrere kartet våre over Harvard Yard og overlegg alle disse bygge navn, 1728 01:26:58,890 --> 01:27:01,070 og vi hadde ham legge dette. 1729 01:27:01,070 --> 01:27:04,270 Så hvis jeg vil søke etter, for eksempel, Matthews Hall, 1730 01:27:04,270 --> 01:27:05,730 vi har en liten rullegardinmenyen. 1731 01:27:05,730 --> 01:27:09,080 Og jeg tror han bruker Bootstrap, den Biblioteket vi diskutert tidligere for dette. 1732 01:27:09,080 --> 01:27:12,190 Og hvis du klikker på Matthews Hall, det umiddelbart 1733 01:27:12,190 --> 01:27:14,790 hopper kartet til en viss beliggenhet, og det viser 1734 01:27:14,790 --> 01:27:16,440 du et bilde i denne lille pop-up. 1735 01:27:16,440 --> 01:27:18,670 >> Men selv denne lille pop-up, hadde vi ikke gjennomføre. 1736 01:27:18,670 --> 01:27:27,521 Hvis jeg ruller nedover på våre får begynte og se etter informasjonsvinduer, 1737 01:27:27,521 --> 01:27:29,770 vil du se at noen av de funksjonaliteten du selv 1738 01:27:29,770 --> 01:27:31,561 kan legge til, om enn med litt større kompleksitet 1739 01:27:31,561 --> 01:27:33,970 er noe som kalles et informasjonsvindu. 1740 01:27:33,970 --> 01:27:37,190 Og hvis jeg klikker et eksempel her, og dette er hva som er morsomt, 1741 01:27:37,190 --> 01:27:40,530 du kan gjøre ting som dette, klikke på en markør og så voila, 1742 01:27:40,530 --> 01:27:42,400 informasjon dukker opp. 1743 01:27:42,400 --> 01:27:45,874 >> Så vi har ikke helt innført nok funksjoner med Javascript 1744 01:27:45,874 --> 01:27:49,040 å male et bilde av nøyaktig hvordan du kunne koble alt dette ting sammen, 1745 01:27:49,040 --> 01:27:50,706 men vi har litt riper i overflaten. 1746 01:27:50,706 --> 01:27:53,140 Faktisk, det jeg nettopp gjorde da Jeg klikket på at markør, 1747 01:27:53,140 --> 01:27:55,819 ble utløser en hendelse, en såkalte ved klikk hendelsen. 1748 01:27:55,819 --> 01:27:57,610 Og vi faktisk så en hendelse tidligere i dag, 1749 01:27:57,610 --> 01:28:00,670 den såkalte sende hendelse, da vi ble forebygge 1750 01:28:00,670 --> 01:28:02,490 brukeren fra å søke for katter. 1751 01:28:02,490 --> 01:28:06,560 Så vi har plukket slags og choosed blant alle disse ulike funksjoner, 1752 01:28:06,560 --> 01:28:08,990 for å gi deg en følelse, forhåpentligvis, av hva du faktisk kan 1753 01:28:08,990 --> 01:28:11,000 gjøre med litt mer komfort i programmering, 1754 01:28:11,000 --> 01:28:12,587 og helt gratis ressurser. 1755 01:28:12,587 --> 01:28:15,856 1756 01:28:15,856 --> 01:28:18,770 >> Noen spørsmål? 1757 01:28:18,770 --> 01:28:19,790 Nei? 1758 01:28:19,790 --> 01:28:22,542 Dette er din siste sjanse, i det minste i dag, på en fredag, 1759 01:28:22,542 --> 01:28:25,000 å få noe av brystet slik at du går ut herfra 1760 01:28:25,000 --> 01:28:27,067 føler seg trygg og komfortabel. 1761 01:28:27,067 --> 01:28:27,566 Ja. 1762 01:28:27,566 --> 01:28:29,740 >> PUBLIKUM: Hvorfor ikke du legge til en ting? 1763 01:28:29,740 --> 01:28:32,720 >> DAVID MALAN: Oh my goodness. 1764 01:28:32,720 --> 01:28:35,260 Jeg trenger å hvile denne helgen, tror jeg. 1765 01:28:35,260 --> 01:28:36,180 Andre spørsmål? 1766 01:28:36,180 --> 01:28:37,055 >> PUBLIKUM: [uhørlig] 1767 01:28:37,055 --> 01:28:44,130 1768 01:28:44,130 --> 01:28:46,810 >> DAVID MALAN: Du can-- i Internet Explorer, hvile i fred, 1769 01:28:46,810 --> 01:28:49,310 du pleide å være i stand til å sette VB script, virtuell basic script, 1770 01:28:49,310 --> 01:28:50,643 men som egentlig aldri fanget på. 1771 01:28:50,643 --> 01:28:52,490 Så det korte svaret er rett Javascript. 1772 01:28:52,490 --> 01:28:55,144 1773 01:28:55,144 --> 01:28:55,810 Andre spørsmål? 1774 01:28:55,810 --> 01:28:58,427 1775 01:28:58,427 --> 01:28:59,760 Greit, vel, la meg gjøre dette. 1776 01:28:59,760 --> 01:29:02,070 La meg ta våre kolleger utenfor. 1777 01:29:02,070 --> 01:29:04,500 De har noen evaluering skjemaer som de ønsker alle 1778 01:29:04,500 --> 01:29:06,310 å bruke noen minutter å fylle ut. 1779 01:29:06,310 --> 01:29:08,775 De ønsker å samle den form og eventuelle fritak som du måtte ha utenfor. 1780 01:29:08,775 --> 01:29:10,240 De vil også ha sertifikater. 1781 01:29:10,240 --> 01:29:12,380 Jeg tipper det er fortsatt noen snacks utenfor. 1782 01:29:12,380 --> 01:29:14,360 La meg passere disse ut, og hvis du har noen spørsmål i mellomtiden, 1783 01:29:14,360 --> 01:29:17,120 Jeg skal gå rundt mer individuelt og vi kan komme i gang. 1784 01:29:17,120 --> 01:29:17,879 Ja, selvfølgelig. 1785 01:29:17,879 --> 01:29:18,754 PUBLIKUM: [uhørlig] 1786 01:29:18,754 --> 01:29:26,737 1787 01:29:26,737 --> 01:29:28,570 DAVID MALAN: Det er vanligvis sant i disse dager. 1788 01:29:28,570 --> 01:29:30,730 Gjerne med web programvare, er du lener 1789 01:29:30,730 --> 01:29:32,901 på andre du enten estetisk bruker ting 1790 01:29:32,901 --> 01:29:35,400 som Bootstrap, slik at du ikke nødt til å gjennomføre det lave nivå 1791 01:29:35,400 --> 01:29:37,169 detaljer om menyer og knapper og alt det der. 1792 01:29:37,169 --> 01:29:39,210 Du lener seg på noen som Google, slik at du 1793 01:29:39,210 --> 01:29:42,050 trenger ikke å bygge en Uber virksomhet og en kartlegging virksomhet, 1794 01:29:42,050 --> 01:29:44,850 og hvilket som helst antall av tilsvarende applikasjoner så vel. 1795 01:29:44,850 --> 01:29:46,350 >> Faktisk pålogginger er populære, også. 1796 01:29:46,350 --> 01:29:48,500 Hvis du har brukt Spotify eller en rekke nettsteder, 1797 01:29:48,500 --> 01:29:51,210 du logger deg på noen nettsteder med Facebook. 1798 01:29:51,210 --> 01:29:53,350 Så hva er fint, det er APIer for pålogging 1799 01:29:53,350 --> 01:29:56,570 i dag, slik at du ikke trenger å ha din egen brukere tabell 1800 01:29:56,570 --> 01:29:59,440 og alle din egen database nødvendigvis i samme grad. 1801 01:29:59,440 --> 01:30:01,795 Du kan la Facebook gjøre alt av at kompleksiteten for deg. 1802 01:30:01,795 --> 01:30:03,920 Så det er en spennende tid, ærlig, i programmering, 1803 01:30:03,920 --> 01:30:07,200 fordi det er så mange tredjeparts tjenester som du kan bygge på toppen av. 1804 01:30:07,200 --> 01:30:10,890 >> Og igjen, prisen du betaler er enten økonomisk eller nedetid. 1805 01:30:10,890 --> 01:30:13,750 Hvis Google går ned, så gjør Uber, uten tvil, 1806 01:30:13,750 --> 01:30:15,690 men kanskje det er en rimelig avveining. 1807 01:30:15,690 --> 01:30:18,040 Og igjen, det var ett av temaene, forhåpentligvis, for de siste par dagene, 1808 01:30:18,040 --> 01:30:18,780 er disse avveininger. 1809 01:30:18,780 --> 01:30:20,738 Og sjelden er det å gå å være et riktig svar. 1810 01:30:20,738 --> 01:30:25,700 Det er egentlig det bedre av to eller flere svar. 1811 01:30:25,700 --> 01:30:26,682 >> Pass disse rundt. 1812 01:30:26,682 --> 01:30:36,830 1813 01:30:36,830 --> 01:30:41,110 >> Og disse Cloud9 kontoene vil fortsette å jobbe, i teorien, i det uendelige. 1814 01:30:41,110 --> 01:30:45,000 Du kan finne hvis du venter noen dager eller en uke eller mer for å logge deg inn i dem, 1815 01:30:45,000 --> 01:30:49,170 det kan ta ut en eller fem minutter å åpne opp igjen, 1816 01:30:49,170 --> 01:30:54,090 men det er bare fordi de setter det å sove for å spare på ressursene. 1817 01:30:54,090 --> 01:31:10,527