1 00:00:00,000 --> 00:00:00,060 2 00:00:00,060 --> 00:00:01,560 >> DAVID MALAN: Okay, vi er tilbage. 3 00:00:01,560 --> 00:00:03,830 Så for spændende Afslutningsvis vores sidste sektion 4 00:00:03,830 --> 00:00:06,900 på web programmering, som jeg troede, vi ville bruge som en generel betegnelse 5 00:00:06,900 --> 00:00:08,440 at fange et par resterende emner. 6 00:00:08,440 --> 00:00:10,390 Så ved slutningen af ​​den dag, vil vi rent faktisk gør 7 00:00:10,390 --> 00:00:14,830 en lille smule af hands-on web programmering med et sprog kaldet JavaScript. 8 00:00:14,830 --> 00:00:17,510 Og jeg tror, ​​vi vil tage et kig på noget relateret til billeder 9 00:00:17,510 --> 00:00:20,040 og opdage noget hemmeligt skjult i et billede, 10 00:00:20,040 --> 00:00:23,230 og også tage et kig på Google Maps API, application programming 11 00:00:23,230 --> 00:00:26,040 grænseflade, som noget repræsentativ for den type software 12 00:00:26,040 --> 00:00:28,800 det er i stigende grad og frit tilgængelige i dag. 13 00:00:28,800 --> 00:00:32,029 >> Men hvorfor skal vi ikke tage et kig på en ingrediens til denne verden 14 00:00:32,029 --> 00:00:34,070 at vi har sådan været tager for givet eksisterer 15 00:00:34,070 --> 00:00:36,720 i nogen tid, en database. 16 00:00:36,720 --> 00:00:39,150 I de sidste dage, og en halv vi har antaget 17 00:00:39,150 --> 00:00:42,910 at vi har adgang til en database, men hvilket problem har en database løse? 18 00:00:42,910 --> 00:00:45,540 Hvad gør det for os? 19 00:00:45,540 --> 00:00:47,030 Hvad er det? 20 00:00:47,030 --> 00:00:48,679 >> PUBLIKUM: [uhørligt] 21 00:00:48,679 --> 00:00:51,720 DAVID MALAN: Holder alle de oplysninger, OK, og hvilke former for information 22 00:00:51,720 --> 00:00:53,186 kan du lægge i det? 23 00:00:53,186 --> 00:00:54,590 >> PUBLIKUM: [uhørligt] 24 00:00:54,590 --> 00:00:56,450 >> DAVID MALAN: Alle oplysninger, du lægger i det, får du tilbage. 25 00:00:56,450 --> 00:00:57,070 Det er sandt. 26 00:00:57,070 --> 00:01:01,900 Og på en typisk web-baseret websted eller web ansøgning, hvilke typer af oplysninger, 27 00:01:01,900 --> 00:01:03,385 specifikt, kan du sætte i? 28 00:01:03,385 --> 00:01:04,260 PUBLIKUM: [uhørligt] 29 00:01:04,260 --> 00:01:05,051 DAVID MALAN: Brugere. 30 00:01:05,051 --> 00:01:07,000 Så hvad er en bruger? 31 00:01:07,000 --> 00:01:09,765 >> PUBLIKUM: [uhørligt] 32 00:01:09,765 --> 00:01:11,640 DAVID MALAN: OK, registreret bruger af sitet. 33 00:01:11,640 --> 00:01:15,100 Og hvad vil det sige at gemme brugernes oplysninger? 34 00:01:15,100 --> 00:01:17,260 Hvad komponerer en bruger? 35 00:01:17,260 --> 00:01:18,331 En bruger har hvad? 36 00:01:18,331 --> 00:01:19,206 PUBLIKUM: [uhørligt] 37 00:01:19,206 --> 00:01:21,040 DAVID MALAN: Ja, personlig data, og jeg kan lide det. 38 00:01:21,040 --> 00:01:21,970 Lad os være mere præcis. 39 00:01:21,970 --> 00:01:25,275 Så en bruger har typisk et navn, hvad der ellers kan en bruger have? 40 00:01:25,275 --> 00:01:26,150 PUBLIKUM: [uhørligt] 41 00:01:26,150 --> 00:01:29,130 DAVID MALAN: En addr-- OK, så fornavn, efternavn. 42 00:01:29,130 --> 00:01:29,630 Det er godt. 43 00:01:29,630 --> 00:01:31,463 Faktisk, lad os ordne at, fordi det vil 44 00:01:31,463 --> 00:01:35,010 at åbne mulighed for diskussion, stadig, yderligere. 45 00:01:35,010 --> 00:01:39,090 Fornavn, efternavn, køn. 46 00:01:39,090 --> 00:01:41,820 47 00:01:41,820 --> 00:01:43,481 En id af en slags. 48 00:01:43,481 --> 00:01:43,980 Hvad ellers? 49 00:01:43,980 --> 00:01:45,438 Jeg hørte noget andet før, også. 50 00:01:45,438 --> 00:01:51,600 En e-mail, postadresse. 51 00:01:51,600 --> 00:01:58,170 >> Så lad os holde pause der og nu overveje ikke hvad vi lagring i databasen, 52 00:01:58,170 --> 00:02:01,980 men-- og ikke hvorfor, da det er måske indlysende, at når du registrerer en bruger, 53 00:02:01,980 --> 00:02:03,730 du ønsker at huske dem i nogen tid. 54 00:02:03,730 --> 00:02:05,480 Du ønsker ikke at blot lagres i RAM 55 00:02:05,480 --> 00:02:08,690 og være forgotten-- så lad os fokusere på hvordan. 56 00:02:08,690 --> 00:02:11,700 >> Det viser sig, at i verden af ​​databaser, 57 00:02:11,700 --> 00:02:14,410 der er mindst to typer disse dage. 58 00:02:14,410 --> 00:02:20,010 Noget kaldet en SQL-database, Struktureret forespørgselssprog, 59 00:02:20,010 --> 00:02:24,770 eller, cutely navngivet, NoSQL, hvilket ikke SQL. 60 00:02:24,770 --> 00:02:26,980 Og sidstnævnte er en eksempel på, hvad might 61 00:02:26,980 --> 00:02:30,660 kaldes en objektorienteret, eller et objekt butik, en database 62 00:02:30,660 --> 00:02:36,010 der lagrer objekter, og ikke, undskyldning mig, da vi snart vil se, rækker. 63 00:02:36,010 --> 00:02:41,800 >> Så vi vil fokusere for bare et øjeblik på den første af disse, nemlig en SQL 64 00:02:41,800 --> 00:02:46,850 database, hvis blot fordi det er så velkendt allerede, til nogen 65 00:02:46,850 --> 00:02:51,070 der har brugt Excel eller Google Sheets eller Apple 66 00:02:51,070 --> 00:02:53,740 Tal eller enhver standard regnearksprogram, 67 00:02:53,740 --> 00:02:56,040 eller, ækvivalent, eller mere sofistikerede, 68 00:02:56,040 --> 00:02:58,610 noget som Microsoft Access eller Oracle 69 00:02:58,610 --> 00:03:03,890 eller MySQL eller PostgreSQL, som alle er produktnavne for implementeringer 70 00:03:03,890 --> 00:03:04,865 af følgende idé. 71 00:03:04,865 --> 00:03:10,350 >> En relationsdatabase er simpelthen noget, der har rækker og kolonner. 72 00:03:10,350 --> 00:03:12,850 Og med rækker og kolonner, Jeg bogstaveligt talt betyde noget 73 00:03:12,850 --> 00:03:21,860 som dette, så hvor vi kan have den navn på et felt og dets type herovre. 74 00:03:21,860 --> 00:03:25,800 Og faktisk, lad mig nu begynde at kortlægge disse. 75 00:03:25,800 --> 00:03:29,420 Så faktisk, ved jeg ikke hvorfor jeg tegnede en separat diagram. 76 00:03:29,420 --> 00:03:30,780 Lad os holde dette enkle. 77 00:03:30,780 --> 00:03:34,830 >> Vi har lige her den begyndelse af vores bord, hvor 78 00:03:34,830 --> 00:03:40,150 dette er navnet på marken og dette er datatypen, 79 00:03:40,150 --> 00:03:41,660 og ved type I mener 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 afsnit, er det binære data, som et billede? 82 00:03:49,340 --> 00:03:51,980 Og lad os bare drille dette fra hinanden for et øjeblik. 83 00:03:51,980 --> 00:03:57,575 Så først navn, nummer, snor, stor bid af text-- 84 00:03:57,575 --> 00:03:58,450 PUBLIKUM: [uhørligt] 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 sammenhæng, vil vi typisk kalder dette char felt. 87 00:04:04,744 --> 00:04:07,660 Jeg vil bare sige char for nu, men vi er kommer til at forfine dette om et øjeblik. 88 00:04:07,660 --> 00:04:09,180 Tegn felt. 89 00:04:09,180 --> 00:04:11,365 Efternavn er sandsynligvis den samme. 90 00:04:11,365 --> 00:04:11,865 Køn? 91 00:04:11,865 --> 00:04:16,230 92 00:04:16,230 --> 00:04:18,310 >> Mand eller kvinde, så det kunne være en char felt. 93 00:04:18,310 --> 00:04:21,380 Det kunne enten være tilbud, citat slut "Male" eller citat, citat slut "kvindelige" 94 00:04:21,380 --> 00:04:23,650 eller det kunne være m eller f. 95 00:04:23,650 --> 00:04:26,540 Hvis du ønsker at være mere rummeligt, du måske brug for en tredje værdi 96 00:04:26,540 --> 00:04:28,640 eller en slags andet felt helt. 97 00:04:28,640 --> 00:04:31,350 Og så kunne du bruge sand falsk. 98 00:04:31,350 --> 00:04:35,036 Feltet kunne kaldes mandlige, og så kunne du sige sand eller falsk. 99 00:04:35,036 --> 00:04:38,160 Men det betyder ikke nødvendigvis fange alle de oplysninger, du måske ønsker. 100 00:04:38,160 --> 00:04:41,118 >> Så det viser sig at der er en anden type af felt som kan være nyttige her 101 00:04:41,118 --> 00:04:46,040 i en typisk database, benævnt en enum, hvor det er et tegn felt, 102 00:04:46,040 --> 00:04:50,480 men du, designeren, komme til opregne de mulige værdier, 103 00:04:50,480 --> 00:04:54,630 ligesom tilbud, citat slut "male", citat, citat slut "kvinde" og så videre. 104 00:04:54,630 --> 00:04:57,620 Så at uanset værdi er i din database, 105 00:04:57,620 --> 00:05:00,670 er faktisk tegn-baseret, men det må være en af ​​disse værdier. 106 00:05:00,670 --> 00:05:03,520 Vi ville sandsynligvis ikke have en enum for fornavn eller efternavn. 107 00:05:03,520 --> 00:05:05,630 Ellers ville vi have at optælle, som navnet 108 00:05:05,630 --> 00:05:09,570 stammer fra, bogstaveligt talt hver muligt fornavn og efternavn. 109 00:05:09,570 --> 00:05:13,960 >> OK, så ID hvad skal et ID være? 110 00:05:13,960 --> 00:05:15,200 Ja, så måske et tal. 111 00:05:15,200 --> 00:05:17,870 Så lad os holde fast i at for nu, nummer. 112 00:05:17,870 --> 00:05:22,010 Og efter antal, nummer er lidt for bred nu. 113 00:05:22,010 --> 00:05:23,900 For enden af ​​den anden dag, jeg har lyst til vi 114 00:05:23,900 --> 00:05:25,280 bør være lidt mere præcis. 115 00:05:25,280 --> 00:05:29,280 Nummer kan betyde ligesom, det kunne være noget lignende 1,236. 116 00:05:29,280 --> 00:05:31,500 Og det er nok ikke hvad vi mener med et ID. 117 00:05:31,500 --> 00:05:34,635 Hvad mener vi nok mener med et ID? 118 00:05:34,635 --> 00:05:36,382 >> PUBLIKUM: [uhørligt] 119 00:05:36,382 --> 00:05:38,590 DAVID MALAN: Åh, OK, så måske er det ikke engang et tal. 120 00:05:38,590 --> 00:05:42,840 Måske er det faktisk en entydig identifikator det er en streng, ligesom et brugernavn. 121 00:05:42,840 --> 00:05:44,580 Så absolut, kunne være. 122 00:05:44,580 --> 00:05:46,730 Jeg tror, ​​at nogen nok betød numerisk, selv om. 123 00:05:46,730 --> 00:05:48,460 Så lad os holde med det. 124 00:05:48,460 --> 00:05:49,320 Hvilken slags tal? 125 00:05:49,320 --> 00:05:51,960 Hvad er en mere precise-- et heltal. 126 00:05:51,960 --> 00:05:56,710 Så en række like 0, 1, 2, 3, så vi vil kalde dette et heltal. 127 00:05:56,710 --> 00:05:58,909 Og selv da, jeg kunne være nitpicking, det er 128 00:05:58,909 --> 00:06:00,700 ikke egentlig bare en generel heltal, du ønsker. 129 00:06:00,700 --> 00:06:04,340 Du har sandsynligvis ikke ønsker negative værdier, bare fordi, det bare føles underligt. 130 00:06:04,340 --> 00:06:06,070 Du ønsker sikkert positive heltal. 131 00:06:06,070 --> 00:06:07,920 Så du kan også udtrykke at i en database, 132 00:06:07,920 --> 00:06:09,450 men for nu, vil vi sige heltal. 133 00:06:09,450 --> 00:06:10,650 >> E-mail? 134 00:06:10,650 --> 00:06:13,550 Dette er sandsynligvis bare-- en hvad? 135 00:06:13,550 --> 00:06:14,460 >> PUBLIKUM: [uhørligt] 136 00:06:14,460 --> 00:06:16,980 >> DAVID MALAN: Det er en e-mail, men det er tegn, ikke? 137 00:06:16,980 --> 00:06:19,813 Den har bare et funky karakter som en "at" symbol eller noget andet, 138 00:06:19,813 --> 00:06:21,580 men det er stadig et tegn felt. 139 00:06:21,580 --> 00:06:23,900 Og postadresse? 140 00:06:23,900 --> 00:06:25,360 Tegn felt. 141 00:06:25,360 --> 00:06:31,400 Så det er en dejlig start, men lad os være lidt mere præcis nu. 142 00:06:31,400 --> 00:06:34,540 >> Så det viser sig, at i en database, du ofte 143 00:06:34,540 --> 00:06:39,120 har et valg over mere raffineret versioner af disse ting. 144 00:06:39,120 --> 00:06:44,330 Faktisk i en typisk SQL database, SQL, eller mere generelt, relationel database, 145 00:06:44,330 --> 00:06:46,680 databaser med rækker og kolonner, du ofte 146 00:06:46,680 --> 00:06:53,610 komme til at angive ikke kun den type af field-- lad mig gøre lidt plads her-- 147 00:06:53,610 --> 00:06:56,600 men også længden. 148 00:06:56,600 --> 00:06:59,900 >> Så hvor længe er et fornavn? 149 00:06:59,900 --> 00:07:07,060 Jeg tror, ​​D-A-V-I-D. OK, fik det jeg nok bare fornærmet ligesom halvdelen 150 00:07:07,060 --> 00:07:11,260 af de mennesker i lokalet, højre, da dine navne er længere end fem 151 00:07:11,260 --> 00:07:16,608 breve, så fem virker lidt egoistisk og naiv, så hvad er en bedre værdi? 152 00:07:16,608 --> 00:07:19,320 153 00:07:19,320 --> 00:07:24,330 10, okay, og jeg tror vi er OK i rummet. 154 00:07:24,330 --> 00:07:26,254 13? 155 00:07:26,254 --> 00:07:27,541 30? 156 00:07:27,541 --> 00:07:29,540 Hvorfor kan jeg ikke tage tilgang af tidligere, da vi 157 00:07:29,540 --> 00:07:31,081 talte om arrays og hukommelse? 158 00:07:31,081 --> 00:07:32,450 Hvorfor jeg ikke bare sige ligesom 1000? 159 00:07:32,450 --> 00:07:35,260 Ingen navn går at være længere end 1.000. 160 00:07:35,260 --> 00:07:36,706 Skub tilbage. 161 00:07:36,706 --> 00:07:38,005 >> PUBLIKUM: [uhørligt] 162 00:07:38,005 --> 00:07:40,130 DAVID MALAN: Ja, det er ødsel, højre, især 163 00:07:40,130 --> 00:07:44,630 hvis de fleste navne er kun fem eller 10 eller 15 tegn, der er meget uøkonomisk. 164 00:07:44,630 --> 00:07:45,810 Så ved du hvad? 165 00:07:45,810 --> 00:07:48,020 Dette er lidt af en hård spørgsmål. 166 00:07:48,020 --> 00:07:51,721 Nu kan vi helt sikkert analysere engelsk og alle andre sprog navne 167 00:07:51,721 --> 00:07:54,470 og finde ud af, godt, hvad der er den average-- gennemsnit ikke rigtig 168 00:07:54,470 --> 00:07:57,150 hjælpe os-- hvad er max er sandsynligvis, hvad vi virkelig ønsker. 169 00:07:57,150 --> 00:07:59,920 Men det viser sig, vi selv har nogle valg over den type her. 170 00:07:59,920 --> 00:08:03,400 >> I en typisk SQL-database, du har noget, der hedder en char felt 171 00:08:03,400 --> 00:08:07,505 og også en varchar, V-A-R, for variabel felt char. 172 00:08:07,505 --> 00:08:08,630 Og forskellen er dette. 173 00:08:08,630 --> 00:08:12,400 En char felt, du designeren, skal angive på forhånd 174 00:08:12,400 --> 00:08:14,900 den nøjagtige længde af banen. 175 00:08:14,900 --> 00:08:20,530 Så måske det første navn ligesom 20 føles slags sikker. 176 00:08:20,530 --> 00:08:23,950 Måske nødt til at gøre nogle googling til se, om det er faktisk sikkert nok. 177 00:08:23,950 --> 00:08:26,910 Der er sikkert et navn med 21 tegn, men for nu, formoder 20 178 00:08:26,910 --> 00:08:27,620 er sikkert. 179 00:08:27,620 --> 00:08:30,070 >> En char felt ville indebære i en database, som du 180 00:08:30,070 --> 00:08:33,289 er at bruge 20 og altid 20 tegn. 181 00:08:33,289 --> 00:08:37,419 Nu, hvis det er bare D-A-V-I-D, 15 af dem bare kommer til at være tomme tegn, 182 00:08:37,419 --> 00:08:40,450 men du stadig bruger alle 20 bytes. 183 00:08:40,450 --> 00:08:46,302 En VARCHAR felt, derimod, betyder snor bør være op til 20 tegn 184 00:08:46,302 --> 00:08:48,260 men hvis det er kun fem, du kun kommer til at bruge 185 00:08:48,260 --> 00:08:51,270 fem eller måske seks for en særlig værdi ved slutningen, 186 00:08:51,270 --> 00:08:54,980 gerne, at 0 vi diskuterede, at betegner afslutningen af ​​en karakter 187 00:08:54,980 --> 00:08:56,790 sekvens i hukommelsen. 188 00:08:56,790 --> 00:08:59,950 >> Så når tror du du kan vælge char 189 00:08:59,950 --> 00:09:05,240 versus varchar, da trade-off? 190 00:09:05,240 --> 00:09:09,321 Char bruger at mange tegn, VARCHAR bruger ikke mere end så mange tegn. 191 00:09:09,321 --> 00:09:10,196 PUBLIKUM: [uhørligt] 192 00:09:10,196 --> 00:09:13,859 193 00:09:13,859 --> 00:09:16,900 DAVID MALAN: OK, når du kender længden af ​​strengen temmelig overbevisende 194 00:09:16,900 --> 00:09:19,316 at bare bruge char, fordi hvis du ved det, bare sætte den ned. 195 00:09:19,316 --> 00:09:23,390 Og måske det er sandt for en zip kode, i USA, i det mindste, 02138, 196 00:09:23,390 --> 00:09:26,660 det altid vil være fem tegn, indtil du tilføjer streg fire. 197 00:09:26,660 --> 00:09:29,750 Men du har måske nogle værdier for som du altid ved længden. 198 00:09:29,750 --> 00:09:32,310 Eller måske statslige symboler, ligesom 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 Måske har du har nogle situationer hvor det er helt rimeligt, 201 00:09:36,560 --> 00:09:39,520 men ved denne logik, hvorfor er vi selv overthinking dette? 202 00:09:39,520 --> 00:09:41,800 Hvorfor vi ikke bare bruge varchar og så vil vi bare 203 00:09:41,800 --> 00:09:46,730 altid bruge to karakterer alligevel, eller altid bruge fem tegn alligevel? 204 00:09:46,730 --> 00:09:50,300 Hvorfor ikke bare spare VARCHAR for alt, som denne logik? 205 00:09:50,300 --> 00:09:51,677 Der skal være en fangst. 206 00:09:51,677 --> 00:09:52,552 PUBLIKUM: [uhørligt] 207 00:09:52,552 --> 00:09:54,952 208 00:09:54,952 --> 00:09:56,660 DAVID MALAN: Kunne skrive noget galt. 209 00:09:56,660 --> 00:09:58,090 Så det er sandt. 210 00:09:58,090 --> 00:10:01,030 Men selv da, kan de ikke bruge mere hukommelse end jeg tildele. 211 00:10:01,030 --> 00:10:03,340 Jeg har stadig den endelige sige over længden, 212 00:10:03,340 --> 00:10:06,780 så de kan ikke komme til at lave den fejl, men en god tanke. 213 00:10:06,780 --> 00:10:10,510 Det er mere subtile, men det er meget relateret til vores diskussion, faktisk, af arrays 214 00:10:10,510 --> 00:10:12,390 og forbundet lister tidligere. 215 00:10:12,390 --> 00:10:16,290 >> Det viser sig, at en database, hvis den ved, at alle værdierne er 216 00:10:16,290 --> 00:10:19,250 af en fast længde, selv om nogle af disse værdier er tomme, 217 00:10:19,250 --> 00:10:22,484 slags æstetisk tomt, D-A-V-I-D og derefter 15 råemner, 218 00:10:22,484 --> 00:10:24,650 det viser sig, at hvis hver felt er den samme længde, 219 00:10:24,650 --> 00:10:28,670 meget ligesom et array havde alle sine ting ryg mod ryg mod ryg mod ryg, så 220 00:10:28,670 --> 00:10:33,480 du kunne bare plus 1 for at komme til den næste værdi, samme idé i en database tabel. 221 00:10:33,480 --> 00:10:37,550 Hvis alle din karakter strenge er den samme længde, 222 00:10:37,550 --> 00:10:39,390 du har, hvad der kaldes random access. 223 00:10:39,390 --> 00:10:41,850 Hvis alle strengene er af længde 20, ikke gør du bare 224 00:10:41,850 --> 00:10:45,230 gør plus en du bare gøre plus 20, plus 20 plus 20 plus 20, 225 00:10:45,230 --> 00:10:48,775 og du kan meget hurtigt rulle gennem eller søge gennem alle dine data. 226 00:10:48,775 --> 00:10:54,420 >> En variabel char felt, derimod, ikke altid har 20 tegn. 227 00:10:54,420 --> 00:10:58,000 Det kunne have 20 og derefter 15 og derefter 19 og derefter 10, 228 00:10:58,000 --> 00:11:00,720 og så hvis du ønsker at søge igennem det, kan du ikke bare blindt 229 00:11:00,720 --> 00:11:03,050 tilsættes 20 bytes for at komme til den næste. 230 00:11:03,050 --> 00:11:07,280 Du bogstaveligt talt nødt til at søge gennem fordi kanten af ​​datastruktur, 231 00:11:07,280 --> 00:11:08,340 hvis du vil, er ujævn. 232 00:11:08,340 --> 00:11:11,480 Det slags går ind og ud baseret på den faktiske længde af strengen. 233 00:11:11,480 --> 00:11:14,460 Så når du kender længden, som Kareem siger, brug en char felt, 234 00:11:14,460 --> 00:11:16,460 fordi du får at effektivitet af at være 235 00:11:16,460 --> 00:11:19,170 i stand til at søge gennem det hurtigere når du søger efter data, 236 00:11:19,170 --> 00:11:20,550 ellers bruge en variabel. 237 00:11:20,550 --> 00:11:24,450 >> Desværre, jeg har ikke noget godt svar hvor længe navnet skal være, 238 00:11:24,450 --> 00:11:26,360 men for noget lignende et navn, vil jeg sige 239 00:11:26,360 --> 00:11:28,470 en varchar er almindelig fordi det ikke vil 240 00:11:28,470 --> 00:11:30,430 at være en fast længde for alle. 241 00:11:30,430 --> 00:11:33,650 20, ved jeg ikke, 20 føles lidt stram. 242 00:11:33,650 --> 00:11:36,460 Lad os bare sige 50, 50. 243 00:11:36,460 --> 00:11:39,210 Det gør ikke rigtig koste dig at meget mere at sige 50 i stedet for 40, 244 00:11:39,210 --> 00:11:41,260 men på et tidspunkt, du har brug for at foretage en dom opkald. 245 00:11:41,260 --> 00:11:43,090 >> Meget almindelige, helt ærligt, til [? historisk?] 246 00:11:43,090 --> 00:11:47,670 grunde, selvom det er overdreven, dvs. 255, fordi nogen tid siden, 247 00:11:47,670 --> 00:11:51,440 i populære databasesystemer, ligesom MySQL, en gratis open source værktøj 248 00:11:51,440 --> 00:11:53,790 at en masse virksomheder ligesom bruges, selv Facebook, 249 00:11:53,790 --> 00:11:56,654 dette var den maksimale standard så folk bare gik med det. 250 00:11:56,654 --> 00:11:59,070 Så ikke urimeligt, men vi vil bruge lidt mere intuition 251 00:11:59,070 --> 00:12:02,970 og sige, sikker 50, der er nok lidt overdrevet. 252 00:12:02,970 --> 00:12:05,720 >> Køn, jeg bryder enum, og så vi kan derfor 253 00:12:05,720 --> 00:12:08,760 opregne mand eller kvinde, eller måske mere effektivt, 254 00:12:08,760 --> 00:12:13,420 m eller f eller en anden symbolik, men enum føles som et godt valg der. 255 00:12:13,420 --> 00:12:16,740 For at være klar, køn kunne bare være en varchar, 256 00:12:16,740 --> 00:12:19,090 og vi kunne bare alle enige søde mennesker, 257 00:12:19,090 --> 00:12:21,010 til altid sætte de samme værdier der. 258 00:12:21,010 --> 00:12:22,720 Mand eller kvinde eller whatnot. 259 00:12:22,720 --> 00:12:27,800 >> Men problemet er så, at vi kunne laver en fejl, som [uhørligt] foreslået 260 00:12:27,800 --> 00:12:29,140 tidligere i en anden sammenhæng. 261 00:12:29,140 --> 00:12:32,780 Hvis vi laver en fejl, kunne vi få forkerte værdier i vores database. 262 00:12:32,780 --> 00:12:36,320 Så hvad er rart om databaser ligesom Oracle og MySQL og andre, 263 00:12:36,320 --> 00:12:39,280 er, at du har denne sidste lag af forsvar, hvor 264 00:12:39,280 --> 00:12:43,010 din DBA, database administrator, hvem er at designe denne tabel som vi 265 00:12:43,010 --> 00:12:46,440 er verbalt, kunne sætte på plads en enum som 266 00:12:46,440 --> 00:12:51,250 beskytter mod dette ved at angive mand, kvinde, og så ingen 267 00:12:51,250 --> 00:12:54,230 ellers ingen programmør kan ved et uheld indsætte en anden værdi. 268 00:12:54,230 --> 00:12:55,480 Så det ville være en god ting. 269 00:12:55,480 --> 00:12:56,660 Dette er en funktion. 270 00:12:56,660 --> 00:13:00,760 >> Så et ID, under forudsætning af en numerisk ID, det burde nok være et positivt heltal. 271 00:13:00,760 --> 00:13:04,380 Og vi nogle gange har mulighed for at diskutere længden. 272 00:13:04,380 --> 00:13:06,830 Du ville ikke typisk angive et tal her, 273 00:13:06,830 --> 00:13:11,310 du vil i stedet angive dette er en int, eller en stor int, 274 00:13:11,310 --> 00:13:12,980 da de er typisk kaldes. 275 00:13:12,980 --> 00:13:18,840 Men typisk, et helt tal ville være, lad os sige, 4 byte. 276 00:13:18,840 --> 00:13:23,694 Og hvis det er 4 bytes, det er, hvor mange bit? 277 00:13:23,694 --> 00:13:24,630 >> PUBLIKUM: [uhørligt] 278 00:13:24,630 --> 00:13:26,610 >> DAVID MALAN: 32 bit. 279 00:13:26,610 --> 00:13:30,270 Så hvor mange brugere kan vi i vores database, hvis de alle har et ID 280 00:13:30,270 --> 00:13:33,320 og dette id skal være unikt? 281 00:13:33,320 --> 00:13:36,780 32 bit betyder, at vi har mønstre af en, to, tre, fire, five-- 282 00:13:36,780 --> 00:13:41,000 så hvor mange forskellige mønstre af nuller og dem kan du få, hvis der er 32? 283 00:13:41,000 --> 00:13:43,235 Det er det samme som spørger, hvad er to til 32? 284 00:13:43,235 --> 00:13:46,472 285 00:13:46,472 --> 00:13:48,430 Det er en stor nummer, Jeg kan ikke helt få ret, 286 00:13:48,430 --> 00:13:50,270 men jeg ved, det er omtrent 4 mia. 287 00:13:50,270 --> 00:13:53,970 Så dette betyder, at din database tabel kan har fire milliarder brugere, og det er det. 288 00:13:53,970 --> 00:13:56,410 >> Så det er en interessant design konsekvenser. 289 00:13:56,410 --> 00:14:00,840 En anstændig række virksomheder har besluttet, måske ikke så meget 290 00:14:00,840 --> 00:14:04,860 for deres brugere tabellen, fordi at have 4 milliarder brugere er en sjælden problem. 291 00:14:04,860 --> 00:14:08,410 Dette er en slags Facebook-stil problem, ikke en typisk virksomhed problem. 292 00:14:08,410 --> 00:14:12,670 Men måske hvis du har transaktionsjournaler eller en slags data, der konstant 293 00:14:12,670 --> 00:14:15,610 bliver skrevet ind i din database der absolut kunne have milliarder 294 00:14:15,610 --> 00:14:18,900 og milliarder af rækker, og du bruger et heltal for det, 295 00:14:18,900 --> 00:14:22,750 hvad der kommer til at ske, så snart du får at ro nummer 4 milliarder 296 00:14:22,750 --> 00:14:26,210 og så du prøver at indsætte 4 milliarddel og 1, så at sige? 297 00:14:26,210 --> 00:14:29,610 Jeg forenkle tallene en smule. 298 00:14:29,610 --> 00:14:33,740 >> Du kan skære ned, mener jeg, at du nødt til at håndtere det på en måde. 299 00:14:33,740 --> 00:14:37,910 Og hvad en computer vil typisk gøre, tænke over det selv fra i morges, 300 00:14:37,910 --> 00:14:42,430 hvis du har en 4-bit værdi gerne 1, 1, 1, 1, der, 301 00:14:42,430 --> 00:14:44,920 bare for at binde om morgenen sammen til eftermiddag, hvad 302 00:14:44,920 --> 00:14:48,369 er dette tal repræsenterer i binær? 303 00:14:48,369 --> 00:14:49,410 OK, vi vil gøre det nemmere. 304 00:14:49,410 --> 00:14:53,310 Hvad betyder dette nummer repræsenterer i binær? 305 00:14:53,310 --> 00:14:56,794 OK, vi vil gøre det lettere, hvad udgør dette 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 dem column-- 308 00:14:59,670 --> 00:15:00,450 [LATTER] 309 00:15:00,450 --> 00:15:01,350 Puha! 310 00:15:01,350 --> 00:15:03,980 Vi havde kolonnen dem og toere kolonnen. 311 00:15:03,980 --> 00:15:07,250 Så formoder, at, ja, vores [? indmarken?] var ikke 32 bits, 312 00:15:07,250 --> 00:15:13,440 men det var to bit, kan vi tæller fra brugernummer 0, 1, 2, 3, 313 00:15:13,440 --> 00:15:18,040 og så er vi sådan tilbage til bruger 00 igen. 314 00:15:18,040 --> 00:15:19,739 Så dette er hvad der typisk sker. 315 00:15:19,739 --> 00:15:22,780 Hvis du nogensinde har hørt expression-- sandsynligvis ikke, men hvis du have-- 316 00:15:22,780 --> 00:15:26,500 heltalsoverløb, hvor du holde spejlvende alle dine bits 317 00:15:26,500 --> 00:15:29,640 at være de største mulige værdier, og så er du ude af bits, 318 00:15:29,640 --> 00:15:30,850 hvad ville typisk ske? 319 00:15:30,850 --> 00:15:32,280 Hvorfor siger jeg 00? 320 00:15:32,280 --> 00:15:33,220 Nå, det er tre. 321 00:15:33,220 --> 00:15:34,230 Hvordan kan jeg repræsenterer 4? 322 00:15:34,230 --> 00:15:36,890 323 00:15:36,890 --> 00:15:38,915 Hvordan kan jeg repræsenterer til nummer 4 i binær? 324 00:15:38,915 --> 00:15:39,790 PUBLIKUM: [uhørligt] 325 00:15:39,790 --> 00:15:41,780 DAVID MALAN: en-- yeah, siger ikke 100 per se, 326 00:15:41,780 --> 00:15:44,190 fordi det har den forkerte konnotation, men 1-0-0. 327 00:15:44,190 --> 00:15:48,920 Således at antallet 1-0-0 er faktisk korrekt, men hvis du kun har to bits, 328 00:15:48,920 --> 00:15:50,820 hvad har du virkelig 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 hvad der ville ske. 331 00:15:54,760 --> 00:15:56,884 Faktisk kan du tror om dette mere familiært. 332 00:15:56,884 --> 00:15:59,350 Hvis du husker, hvad, 16 år siden, verden 333 00:15:59,350 --> 00:16:03,380 skulle slutte, når Y2K problemet skete. 334 00:16:03,380 --> 00:16:04,330 Hvorfor var det? 335 00:16:04,330 --> 00:16:08,170 Well de fleste computere, for fornuftige beslutninger, 336 00:16:08,170 --> 00:16:15,320 blev lagring numre som den år 1975 eller 1999 337 00:16:15,320 --> 00:16:19,010 ved blot at bruge to cifre i computerens hukommelse. 338 00:16:19,010 --> 00:16:21,950 Så selvfølgelig, hvad der sker når du kommer til år 2000, 339 00:16:21,950 --> 00:16:25,790 du går til dette, eller rettere, ja. 340 00:16:25,790 --> 00:16:30,120 Så du går til år 2000, men hvis du kun bruger to cifre det ser 341 00:16:30,120 --> 00:16:32,660 ligesom årene 00 og så du har rullet over. 342 00:16:32,660 --> 00:16:36,820 Og dette er grunden til en masse systemer behov for at blive opdateret på det tidspunkt. 343 00:16:36,820 --> 00:16:42,500 >> Så med det sagt, virksomheder som Facebook løbe op imod dette. 344 00:16:42,500 --> 00:16:46,147 Så den eneste måde at håndtere situationen, helt ærligt, er til at forudse det. 345 00:16:46,147 --> 00:16:47,980 Eller den reneste måde at håndtere denne situation 346 00:16:47,980 --> 00:16:50,330 er til at forudse det, så du ikke gør nødt til at foretage ændringer senere. 347 00:16:50,330 --> 00:16:51,970 Så i stedet for 8 bytes, ved du hvad? 348 00:16:51,970 --> 00:16:54,261 Jeg har tænkt mig at være fremsynede her, selvom det er 349 00:16:54,261 --> 00:16:56,760 lidt optimistisk, at vi kommer til at have 4 milliarder 350 00:16:56,760 --> 00:16:58,850 og 1 brugere på vores hjemmeside. 351 00:16:58,850 --> 00:17:01,790 Men lad os bare bruge 8 bytes, eller 64 bit, som generelt vil være 352 00:17:01,790 --> 00:17:05,640 kaldes en stor heltal, meget teknisk. 353 00:17:05,640 --> 00:17:10,280 Og det betyder bare du kan have endnu flere cifre i dit nummer. 354 00:17:10,280 --> 00:17:12,599 Men dette er en vigtig design beslutning, 355 00:17:12,599 --> 00:17:16,400 fordi hvis du vælger et tal, der har for få bits af udtryksfuldhed 356 00:17:16,400 --> 00:17:19,089 du faktisk kunne oprette en fejl i softwaren. 357 00:17:19,089 --> 00:17:21,750 >> Okay, så lad os wrap op med e-mail og postadresse. 358 00:17:21,750 --> 00:17:26,369 Så email, hvor længe skal en e-mailadresse være? 359 00:17:26,369 --> 00:17:26,869 50. 360 00:17:26,869 --> 00:17:29,220 Jeg har virkelig ingen idé, men det er sandsynligvis noget lignende, 361 00:17:29,220 --> 00:17:32,261 fordi ellers ingen kommer til at skriv dig, hvis det bliver for længe, ​​så 50, 362 00:17:32,261 --> 00:17:33,360 Lad os gå med det for nu. 363 00:17:33,360 --> 00:17:35,770 Postadresse, hvor længe skal det være? 364 00:17:35,770 --> 00:17:38,325 365 00:17:38,325 --> 00:17:39,200 PUBLIKUM: [uhørligt] 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, selv om. 368 00:17:43,890 --> 00:17:45,720 Postadresse, hørte jeg. 369 00:17:45,720 --> 00:17:50,720 Så det er ligesom en Brattle Square, komma, Cambridge Mass., komma, 02138. 370 00:17:50,720 --> 00:17:53,860 Og i virkeligheden, så lad mig bare trække op en lille regneark her. 371 00:17:53,860 --> 00:17:56,510 Det føles som om det er en forspildt chance. 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 gøre det bedre end blot postadresse. 374 00:18:04,510 --> 00:18:07,100 Hvorfor har vi ikke eksplodere dette en lille smule? 375 00:18:07,100 --> 00:18:08,030 Hvad får jeg på? 376 00:18:08,030 --> 00:18:10,970 Hvad skal vi i stedet have for vores rækker her, måske? 377 00:18:10,970 --> 00:18:12,260 >> PUBLIKUM: [uhørligt] 378 00:18:12,260 --> 00:18:17,579 >> DAVID MALAN: Ja, så lad os kalder det street_number, 379 00:18:17,579 --> 00:18:20,620 og en understregning er bare en almindelig måde have hvad der ligner et rum, 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 derefter city-- undskyld? 382 00:18:26,240 --> 00:18:28,440 >> PUBLIKUM: [uhørligt] 383 00:18:28,440 --> 00:18:29,690 DAVID MALAN: Vi kunne gøre det. 384 00:18:29,690 --> 00:18:30,702 Linie én, linje to. 385 00:18:30,702 --> 00:18:32,410 Hvorfor ikke vil vi holde det nemt for nu, 386 00:18:32,410 --> 00:18:34,840 men det er absolut en acceptabel beslutning. 387 00:18:34,840 --> 00:18:38,180 Og så tilstand, og så lad os være lidt amerikansk-centreret for nu 388 00:18:38,180 --> 00:18:42,040 og bare gøre postnummer, bare fordi det vil føre til en interessant fejl 389 00:18:42,040 --> 00:18:43,090 eller problem her. 390 00:18:43,090 --> 00:18:44,655 Så formoder, at nu er vores adresse. 391 00:18:44,655 --> 00:18:47,280 Det er lidt mere irriterende, at vi har alle disse flere felter, 392 00:18:47,280 --> 00:18:49,200 men nu kan vi mærke tingene lidt bedre. 393 00:18:49,200 --> 00:18:53,210 >> Så nu vejnummer sandsynligvis bør ikke være en char, skulle det? 394 00:18:53,210 --> 00:18:54,835 Hvad skal det være? 395 00:18:54,835 --> 00:18:55,710 PUBLIKUM: [uhørligt] 396 00:18:55,710 --> 00:18:57,835 DAVID MALAN: Måske, et tal ligesom et heltal igen? 397 00:18:57,835 --> 00:19:00,170 En stor heltal? 398 00:19:00,170 --> 00:19:02,170 Du sandsynligvis ikke leve på 4 milliarder Main Street 399 00:19:02,170 --> 00:19:03,490 eller noget vanvittigt sådan. 400 00:19:03,490 --> 00:19:06,850 Så heltal er sandsynligvis fint, men har nogen 401 00:19:06,850 --> 00:19:13,880 nogensinde har levet på en adresse som 1A Brattle Square, eller en og 1/2? 402 00:19:13,880 --> 00:19:17,030 findes disse ting, desværre, selvom du ikke har boet der, 403 00:19:17,030 --> 00:19:21,240 der er disse anomalier lignende lejlighed 1A, 1B, 1C. 404 00:19:21,240 --> 00:19:24,260 Så ved du hvad, vi sandsynligvis bør ikke gå med heltal, 405 00:19:24,260 --> 00:19:27,440 ellers vil vi at miste nogle salg. 406 00:19:27,440 --> 00:19:29,920 >> Char felt, måske? 407 00:19:29,920 --> 00:19:30,870 Jeg ved ikke hvor længe. 408 00:19:30,870 --> 00:19:33,370 Det er nok ikke kommer til at være så længe, ​​så 10 eller noget. 409 00:19:33,370 --> 00:19:34,950 Ingen kommer til at skrive en længere række, måske. 410 00:19:34,950 --> 00:19:37,070 Men igen, skal vi nok give flere tanke til det. 411 00:19:37,070 --> 00:19:39,900 Måske google, gøre nogle forskning, men vi vil gå med vores indvolde for nu. 412 00:19:39,900 --> 00:19:44,565 Streets, char, 50, ved jeg ikke. 413 00:19:44,565 --> 00:19:46,940 På et tidspunkt, er ingen kommer at skrive det på en konvolut, 414 00:19:46,940 --> 00:19:49,350 også, så der er nok nogle øvre grænser der. 415 00:19:49,350 --> 00:19:54,200 City, samme, sikker, så char 50. 416 00:19:54,200 --> 00:19:59,120 >> Stat, kan være US-centreret for nu. 417 00:19:59,120 --> 00:20:01,850 Så det kunne være en liste, så venlig af en dom opkald tilstand. 418 00:20:01,850 --> 00:20:04,000 Det kunne være som to tegn. 419 00:20:04,000 --> 00:20:06,140 Så faktisk, måske, jeg holdt siger char. 420 00:20:06,140 --> 00:20:09,420 Jeg mener nok VARCHAR, blot for nogle effektivitet, 421 00:20:09,420 --> 00:20:12,240 men vi vil vende tilbage til denne beslutning i et øjeblik. 422 00:20:12,240 --> 00:20:16,150 Kunne være en char med længden 2 for staten. 423 00:20:16,150 --> 00:20:20,670 Hvis det i USA har, ligesom MA, Massachusetts, NY, New York, NJ, 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 kunne fastsættes 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ået en anden fremgangsmåde. 428 00:20:29,915 --> 00:20:30,790 PUBLIKUM: [uhørligt] 429 00:20:30,790 --> 00:20:33,670 DAVID MALAN: Ja, så det er en lidt irriterende at skrive, 430 00:20:33,670 --> 00:20:37,890 men en enum kunne give mere mening, fordi denne måde, i hvert fald i USA, 431 00:20:37,890 --> 00:20:41,320 du kunne optælle, hvis kedelig, men du gør det bare én gang i din database 432 00:20:41,320 --> 00:20:47,480 og aldrig igen nødt til at tænke over det, alle 50 to-tegnkoder. 433 00:20:47,480 --> 00:20:48,660 Så jeg kan lide enum. 434 00:20:48,660 --> 00:20:51,720 Lad os holde fast i, at der, fordi det slags håndhæver mere stringens. 435 00:20:51,720 --> 00:20:53,620 Og så zip kode? 436 00:20:53,620 --> 00:20:55,306 Jeg tror Andrew havde en tanke om, at 437 00:20:55,306 --> 00:20:56,180 PUBLIKUM: [uhørligt] 438 00:20:56,180 --> 00:20:57,240 DAVID MALAN: Ja, fem eller ni. 439 00:20:57,240 --> 00:20:58,323 Lad os bare holde det simpelt. 440 00:20:58,323 --> 00:20:59,380 Bare gør fem for nu. 441 00:20:59,380 --> 00:21:03,070 Men måske jeg kunne bare gøre et heltal, ikke? 442 00:21:03,070 --> 00:21:08,750 Jeg kunne, men ved du hvad, jeg lavede denne fejl en gang, i en vis forstand. 443 00:21:08,750 --> 00:21:13,110 År siden, blev jeg migrerer fra Microsoft Outlook til Gmail, 444 00:21:13,110 --> 00:21:18,640 og Outlook har en måde at eksportere alle dine kontakter som en Excel-fil, 445 00:21:18,640 --> 00:21:21,280 en CSV-fil, kommasepareret værdier fil. 446 00:21:21,280 --> 00:21:23,950 Og jeg lavede den fejl, jeg tænker, på at dobbeltklikke på det, 447 00:21:23,950 --> 00:21:27,380 når jeg hentede eksporten, til sørg for at det så ud som jeg havde forventet. 448 00:21:27,380 --> 00:21:31,320 Jeg må have ramt Gem eller lad auto-save spark i eller noget. 449 00:21:31,320 --> 00:21:35,100 Fordi når jeg importeret derefter det ind i Gmail, det hele arbejdet. 450 00:21:35,100 --> 00:21:39,910 Men i årevis, til denne dag, og Jeg gjorde dette fem, 10 år siden, 451 00:21:39,910 --> 00:21:44,380 Jeg er stadig at finde venner, som har adresser, der ligner dette. 452 00:21:44,380 --> 00:21:45,700 Hvorfor? 453 00:21:45,700 --> 00:21:47,900 >> PUBLIKUM: [uhørligt] 454 00:21:47,900 --> 00:21:50,650 >> DAVID MALAN: Det tog 0, godt, snarere det 455 00:21:50,650 --> 00:21:53,810 tog hele postnummer som et nummer, og derfor er det 456 00:21:53,810 --> 00:21:56,590 en indledende 0, hvilket betyder det har ingen betydning. 457 00:21:56,590 --> 00:21:59,470 Og så 2138 ser ud til at være min postnummer. 458 00:21:59,470 --> 00:22:07,100 Og det er helt ærligt, en irriterende Excel funktion hvorved jeg tror som standard, 459 00:22:07,100 --> 00:22:10,980 selv om det er meningen, at bare være tekst, Microsoft Excel 460 00:22:10,980 --> 00:22:13,780 beslutter, lad mig være nyttigt, og åh, jeg ser kun tal. 461 00:22:13,780 --> 00:22:15,290 Lad os behandle disse som tal. 462 00:22:15,290 --> 00:22:16,790 Og det afkorter de førende nuller. 463 00:22:16,790 --> 00:22:19,165 >> Jeg sværger til Gud, hvert par måneder jeg finde en adresse, 464 00:22:19,165 --> 00:22:22,300 og ud af en slags OCD, jeg går tilbage i og tilsæt 0, selv om jeg aldrig 465 00:22:22,300 --> 00:22:23,700 sende folk breve eller noget. 466 00:22:23,700 --> 00:22:25,510 Men jeg er stadig at finde rester af dette. 467 00:22:25,510 --> 00:22:28,820 Så dette er at sige, er det en god idé? 468 00:22:28,820 --> 00:22:31,610 OK, nej, fordi nogen i Massachusetts, på dette område, 469 00:22:31,610 --> 00:22:33,270 vil have en o fører dem. 470 00:22:33,270 --> 00:22:38,070 Så lad os gå med lignende char, sandsynligvis, fem. 471 00:22:38,070 --> 00:22:41,450 >> Og her, indser vi kunne bruge en enum og vi 472 00:22:41,450 --> 00:22:44,600 kunne opregne 10.000 mulige postnumre, 473 00:22:44,600 --> 00:22:48,530 men der føles som det er nok krydse en linje af, ligesom, fordele. 474 00:22:48,530 --> 00:22:51,350 Hvis du har til input, mange data i din database 475 00:22:51,350 --> 00:22:52,940 at beskytte mod noget. 476 00:22:52,940 --> 00:22:57,400 Så char indså du kunne skrive i H-E-L-L-O som dit postnummer, 477 00:22:57,400 --> 00:22:59,180 hvilket ikke er, naturligvis, numerisk. 478 00:22:59,180 --> 00:23:01,680 Så der er ingen måde, i en typisk database, 479 00:23:01,680 --> 00:23:05,561 at angive kun numerisk og kun fem tegn, 480 00:23:05,561 --> 00:23:07,310 så vi bliver nødt til at gøre det i kode. 481 00:23:07,310 --> 00:23:11,100 Vi kommer til at gøre det i PHP eller Java eller hvad sprog er vi 482 00:23:11,100 --> 00:23:14,230 under anvendelse på serveren for at håndhæve den slags tvang. 483 00:23:14,230 --> 00:23:14,860 >> Waow! 484 00:23:14,860 --> 00:23:18,322 Okay, så eventuelle spørgsmål endnu? 485 00:23:18,322 --> 00:23:19,780 Lad os gøre et andet design beslutning. 486 00:23:19,780 --> 00:23:22,500 Det viser sig, at du også komme til at vælge, 487 00:23:22,500 --> 00:23:26,600 når designe en SQL database, eller typiske relationelle database-- hvor 488 00:23:26,600 --> 00:23:28,790 igen, relationel bare betyder rækker og kolonner, 489 00:23:28,790 --> 00:23:35,500 det er hvordan du organisere dine data-- og indse, at hvad det betyder er, 490 00:23:35,500 --> 00:23:37,740 Jeg har været misvisende i at, jeg er drawing-- dette 491 00:23:37,740 --> 00:23:40,190 er, hvad der kaldes skemaet for en database tabel. 492 00:23:40,190 --> 00:23:42,810 Dette er som specifikationer for table-- 493 00:23:42,810 --> 00:23:48,040 men når det drejer sig tid For rent faktisk at gemme data, 494 00:23:48,040 --> 00:23:52,081 og vi vil gøre dette blot ved eksempel her. 495 00:23:52,081 --> 00:23:55,080 Jeg har tænkt mig at åbne op Excel, fordi Excel vil give mig rækker og kolonner. 496 00:23:55,080 --> 00:23:58,050 Og det er præcis, hvad Oracle og MySQL og andre værktøjer vil give mig. 497 00:23:58,050 --> 00:24:02,270 Så jeg bare vil bruge det til diskussion skyld. 498 00:24:02,270 --> 00:24:05,250 Lad mig gå videre og åbne op for en repræsentative dokument her, 499 00:24:05,250 --> 00:24:06,310 zoome ind lidt. 500 00:24:06,310 --> 00:24:15,200 Så for eksempel vores overskrifter er nu fornavn, efternavn, køn, ID, 501 00:24:15,200 --> 00:24:20,980 e-mail, vejnummer, gade-, hovsa. 502 00:24:20,980 --> 00:24:25,710 Street, by, stat, blot om passer på skærmen. 503 00:24:25,710 --> 00:24:29,080 >> Så hvad dette betyder, at når en brugeren først registrerer til min hjemmeside, 504 00:24:29,080 --> 00:24:32,880 det vil være noget lignende David, Malan, m, lad os sige en, 505 00:24:32,880 --> 00:24:42,910 malan@harvard.edu, vil vejnummer være som en Brattle Square, Cambridge, MA, 506 00:24:42,910 --> 00:24:44,780 02138, og derefter så videre. 507 00:24:44,780 --> 00:24:48,290 Så når jeg siger, at en relationel database eller SQL database er rækker 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 er lagret i rækker og kolonner. 510 00:24:51,900 --> 00:24:53,950 Dette er blot en tilfældighed, at vi talte, 511 00:24:53,950 --> 00:24:56,033 og jeg var bare at trække den ud i rækker og kolonner. 512 00:24:56,033 --> 00:24:58,320 Dette er blot skemaet, den overordnede definition. 513 00:24:58,320 --> 00:25:01,640 >> Så af disse felter her, eller ækvivalent, der, 514 00:25:01,640 --> 00:25:06,270 som er de felter, som du mener Jeg er tilbøjelige til at søge på, hvis jeg er en bruger 515 00:25:06,270 --> 00:25:09,200 eller hvis jeg er databasen administrator? 516 00:25:09,200 --> 00:25:12,426 Ligesom, hvilke felter er jeg faktisk kommer til at søge på? 517 00:25:12,426 --> 00:25:13,830 >> PUBLIKUM: [uhørligt] 518 00:25:13,830 --> 00:25:17,690 >> DAVID MALAN: Navnet, ja så Jeg kan godt lide, at-- yeah, 519 00:25:17,690 --> 00:25:19,750 e-mail kan være temmelig almindelig. 520 00:25:19,750 --> 00:25:21,440 Beklager, du sagde navnet. 521 00:25:21,440 --> 00:25:24,030 Så maybe-- og igen, vi er slags taler abstrakt. 522 00:25:24,030 --> 00:25:25,988 Jeg ved ikke, hvorfor du ville være at søge efter et navn, 523 00:25:25,988 --> 00:25:29,340 men der føles rimelig, hvis du søger efter en bruger. 524 00:25:29,340 --> 00:25:31,170 Måske hedder, sikker, ID. 525 00:25:31,170 --> 00:25:34,100 526 00:25:34,100 --> 00:25:36,160 >> Og det er en glat hældning, fordi jeg kunne 527 00:25:36,160 --> 00:25:38,890 udtænke et scenario, hvor måske min chef har bedt mig, 528 00:25:38,890 --> 00:25:40,417 hvor mange mænd har vi på vores hjemmeside? 529 00:25:40,417 --> 00:25:42,000 Hvor mange kvinder har vi på vores hjemmeside? 530 00:25:42,000 --> 00:25:45,210 Og så på det punkt, kan du at søge på banen køn, også, 531 00:25:45,210 --> 00:25:45,940 og intet andet. 532 00:25:45,940 --> 00:25:47,350 Så der er et trade-off her. 533 00:25:47,350 --> 00:25:49,180 Igen, der er ingen rigtige svar, men der 534 00:25:49,180 --> 00:25:53,760 er en funktion i de fleste SQL databaser kendt som indeksering, hvorved 535 00:25:53,760 --> 00:25:56,100 du, designeren, den database administrator, 536 00:25:56,100 --> 00:26:01,730 komme til at afgøre på forhånd, hvilke felter i databasen skal optimere 537 00:26:01,730 --> 00:26:02,980 for søgninger på. 538 00:26:02,980 --> 00:26:07,620 >> Du kunne meget naivt sige, optimere dette, optimere, at optimere 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 gøre nogle magiske ting under hætte, og gøre noget på en sådan måde 541 00:26:14,882 --> 00:26:17,090 at næste gang du søger på nogen af ​​disse områder, 542 00:26:17,090 --> 00:26:18,400 det vil faktisk være hurtigere. 543 00:26:18,400 --> 00:26:19,110 Dette er muligt. 544 00:26:19,110 --> 00:26:20,530 Det betyder ikke annullere sig ud. 545 00:26:20,530 --> 00:26:22,500 Men der skal være en pris betalt. 546 00:26:22,500 --> 00:26:27,220 >> Hvis du naivt, eller over-entusiastisk siger, indeksere alle disse områder, 547 00:26:27,220 --> 00:26:29,810 så at sige, gøre dem alle effektivt søgbare, 548 00:26:29,810 --> 00:26:31,625 hvilken pris er du sandsynligvis betale? 549 00:26:31,625 --> 00:26:32,500 PUBLIKUM: [uhørligt] 550 00:26:32,500 --> 00:26:33,090 DAVID MALAN: Performance. 551 00:26:33,090 --> 00:26:33,798 Hvad mener du? 552 00:26:33,798 --> 00:26:37,380 Nå ydeevne, i det mindste i kontekst jeg diskuterer, er bedre nu. 553 00:26:37,380 --> 00:26:38,830 Det er definitionen af ​​indeksering. 554 00:26:38,830 --> 00:26:41,180 Det vil gøre søgninger hurtigere. 555 00:26:41,180 --> 00:26:43,366 Så tiden falder, så at sige. 556 00:26:43,366 --> 00:26:44,240 PUBLIKUM: [uhørligt] 557 00:26:44,240 --> 00:26:45,031 DAVID MALAN: Space. 558 00:26:45,031 --> 00:26:46,520 Så igen, disse er en fælles handelspolitik. 559 00:26:46,520 --> 00:26:50,820 Jeg kan fremskynde dine søgninger, men det er kommer til at koste dig flere bytes af plads. 560 00:26:50,820 --> 00:26:51,610 Hvorfor? 561 00:26:51,610 --> 00:26:55,230 Nå, som standard, hvis vi har ingen af disse røde stjerner, ingen af ​​disse indekser, 562 00:26:55,230 --> 00:26:58,797 som jeg siger, hvordan du søger efter et navn i denne database? 563 00:26:58,797 --> 00:27:00,630 Så lad os trække vores opmærksom på dette eksempel. 564 00:27:00,630 --> 00:27:06,300 Hvis vi har David og Scully og Kareem og Arwa og andre i disse rækker, 565 00:27:06,300 --> 00:27:06,910 for eksempel. 566 00:27:06,910 --> 00:27:08,390 >> Så lad os gøre netop dette. 567 00:27:08,390 --> 00:27:13,990 Scully er herinde, og derefter vi har Kareem, og Arwa, 568 00:27:13,990 --> 00:27:18,390 og alle andre, hvis du ikke har et indeks defineret, så at sige, 569 00:27:18,390 --> 00:27:20,160 det bedste du kan gøre, er lineær søgning. 570 00:27:20,160 --> 00:27:23,470 Hvis du søger efter Arwa, vi er ikke vil være i stand til at hoppe ret til hende 571 00:27:23,470 --> 00:27:24,140 hurtigt. 572 00:27:24,140 --> 00:27:26,556 Vi kommer til at starte øverst og gå hele vejen til bunden, 573 00:27:26,556 --> 00:27:28,600 ikke ulig vores oprindelige Mike Smith eksempel. 574 00:27:28,600 --> 00:27:33,470 >> Men hvis jeg siger, hey, database, indeks fornavn feltet, 575 00:27:33,470 --> 00:27:37,000 så det kommer til at gøre noget avanceret og støtte noget 576 00:27:37,000 --> 00:27:38,130 ligesom binær søgning. 577 00:27:38,130 --> 00:27:39,820 Det er nok ikke binær søgning per se. 578 00:27:39,820 --> 00:27:42,810 Databaser tendens til at bruge en anden datastruktur kaldet B-træer, 579 00:27:42,810 --> 00:27:46,540 ikke at forveksle med binære træer, at bare gøre det hurtigere at søge 580 00:27:46,540 --> 00:27:48,500 noget logaritmisk i naturen. 581 00:27:48,500 --> 00:27:53,510 Men den pris, du betaler for at opbygge, at funktion, at datastruktur i hukommelsen, 582 00:27:53,510 --> 00:27:54,570 er flere byte. 583 00:27:54,570 --> 00:27:57,170 Så det kan tage nogle megabyte, nogle gigabytes, hvem ved? 584 00:27:57,170 --> 00:27:58,410 Det afhænger af dataene. 585 00:27:58,410 --> 00:28:02,640 >> Så på et tidspunkt, er du nødt til at beslutte, det er nok ikke en fælles sag. 586 00:28:02,640 --> 00:28:06,000 Så hvad er den egentlige fælles tilfælde, hvis du virkelig skulle vælge, 587 00:28:06,000 --> 00:28:10,080 hvad kan dine yndlings felter være? 588 00:28:10,080 --> 00:28:10,580 E-mail. 589 00:28:10,580 --> 00:28:14,400 Og jeg kan lide email, fordi e-mail, i teorien burde være unik. 590 00:28:14,400 --> 00:28:17,650 Og så typisk, når man ved på forhånd, at en af ​​dine marker 591 00:28:17,650 --> 00:28:20,277 er eller vil være unik, at tendens til at være en god felt 592 00:28:20,277 --> 00:28:22,860 at søge på, fordi den måde, når du søger efter noget, 593 00:28:22,860 --> 00:28:26,194 du kommer til at komme tilbage en eller nul svarene og så er du færdig. 594 00:28:26,194 --> 00:28:28,110 Du behøver ikke at holde leder efter endnu andre. 595 00:28:28,110 --> 00:28:31,992 >> Og så i dette tilfælde her, e-mail, så længe du ikke kan registrere to gange 596 00:28:31,992 --> 00:28:33,450 med den samme e-mail, er en god en. 597 00:28:33,450 --> 00:28:36,710 ID definition i datalogi verden, 598 00:28:36,710 --> 00:28:39,610 Hvis du taler om en ID, som bedre havde være unik. 599 00:28:39,610 --> 00:28:42,970 Det er slags konnotation af id eller id. 600 00:28:42,970 --> 00:28:46,440 Og resten af ​​disse kunne være, lad os kalde dem rart at haves, 601 00:28:46,440 --> 00:28:47,860 men ikke rigtig nødvendig. 602 00:28:47,860 --> 00:28:49,976 >> Og så i en database, du angiver indekser, 603 00:28:49,976 --> 00:28:51,350 men du kan være endnu mere præcis. 604 00:28:51,350 --> 00:28:56,060 Man kan sige, hey, database, skal du sørge at hver ID i denne tabel er unik. 605 00:28:56,060 --> 00:28:59,330 Må ikke engang lade en programmør uheld sat i en dublet e-mail 606 00:28:59,330 --> 00:29:00,740 eller kopiere ID-nummer. 607 00:29:00,740 --> 00:29:03,140 Så meget som Gentagelsestyper beskytte os på samme måde, du 608 00:29:03,140 --> 00:29:04,881 kan have disse lavere niveau forsvar. 609 00:29:04,881 --> 00:29:07,130 Og så database design, i vis forstand, er form for sjov, 610 00:29:07,130 --> 00:29:08,380 fordi du gør det defensivt. 611 00:29:08,380 --> 00:29:11,460 Du slags antage, at du arbejder med forfærdelige, forfærdelige programmører 612 00:29:11,460 --> 00:29:15,550 og du ønsker at sætte i så mange forsvarsværker som du kan for at beskytte dine data, 613 00:29:15,550 --> 00:29:18,940 men samtidig ønskede at hjælpe dem med at klare sig bedre 614 00:29:18,940 --> 00:29:21,386 ved at vælge hvilke felter til at optimere for. 615 00:29:21,386 --> 00:29:24,260 Men du kan ikke nødvendigvis gøre det i et vakuum ligesom vi slags er her. 616 00:29:24,260 --> 00:29:26,480 Du har fået at vide, hvad er de almindelige tilfælde være. 617 00:29:26,480 --> 00:29:29,397 Hvis udviklerne er gennemføre en adressebog, 618 00:29:29,397 --> 00:29:32,230 du kan meget vel ønsker at kunne at søge på næsten alle områder, 619 00:29:32,230 --> 00:29:33,830 bare af natur af ansøgningen. 620 00:29:33,830 --> 00:29:37,910 Så måske du bruger at ekstra plads. 621 00:29:37,910 --> 00:29:39,090 >> Right, nogen spørgsmål? 622 00:29:39,090 --> 00:29:41,820 623 00:29:41,820 --> 00:29:42,486 Ja. 624 00:29:42,486 --> 00:29:43,470 >> PUBLIKUM: [uhørligt] 625 00:29:43,470 --> 00:29:44,404 >> DAVID MALAN: Nej. 626 00:29:44,404 --> 00:29:45,279 >> PUBLIKUM: [uhørligt] 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ørligt] 630 00:29:49,701 --> 00:29:52,420 631 00:29:52,420 --> 00:29:54,850 >> DAVID MALAN: Åh, så vi taler på en måde 632 00:29:54,850 --> 00:29:57,940 nu det er helt sprog agnostiker. 633 00:29:57,940 --> 00:30:02,370 Så vi taler nu om relationelle databaser mere generelt 634 00:30:02,370 --> 00:30:04,760 eller SQL databaser mere generelt. 635 00:30:04,760 --> 00:30:06,870 >> PUBLIKUM: [uhørligt] 636 00:30:06,870 --> 00:30:10,030 >> DAVID MALAN: Et bedre ord at bruge er, kan bruges af alle sprog. 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 tale med en database og udføre forespørgsler. 639 00:30:19,010 --> 00:30:22,310 Faktisk, det er ikke en dårlig segue til et eksempel forespørgsel. 640 00:30:22,310 --> 00:30:25,720 Og igen, vi ikke kommer til at gå ind i Java eller C ++ eller et af det længere, 641 00:30:25,720 --> 00:30:29,420 men i SQL, det sprog, som jeg holder henvise Structured Query Language, 642 00:30:29,420 --> 00:30:32,790 dette i sig selv er et programmeringssprog, men det er meningen skal anvendes til, nej 643 00:30:32,790 --> 00:30:37,330 overraskelse, Structured Query forespørgsler. 644 00:30:37,330 --> 00:30:38,660 >> Dermed mener jeg dette. 645 00:30:38,660 --> 00:30:41,190 Den måde, du vælger data fra en MySQL-database 646 00:30:41,190 --> 00:30:49,330 er du bogstaveligt talt skrive dit program noget lignende Vælg stjerne fra brugerne. 647 00:30:49,330 --> 00:30:52,200 Jeg går ud fra, at denne tabel, herefter kaldes brugere. 648 00:30:52,200 --> 00:30:54,860 Jeg kunne kalde det noget, vi ønsker, men den slags giver mening. 649 00:30:54,860 --> 00:30:57,240 Og så skal du vælge en meget fælles verbum, hvis du 650 00:30:57,240 --> 00:30:59,290 vil i SQL, der bogstaveligt talt gør det. 651 00:30:59,290 --> 00:31:02,730 Hvad tror du stjerne betyder i denne sammenhæng? 652 00:31:02,730 --> 00:31:04,410 >> PUBLIKUM: [uhørligt] 653 00:31:04,410 --> 00:31:05,380 >> DAVID MALAN: Jeg er ked af? 654 00:31:05,380 --> 00:31:06,300 >> PUBLIKUM: [uhørligt] 655 00:31:06,300 --> 00:31:09,580 >> DAVID MALAN: Ikke påkrævet, er det mere rummeligt end det, faktisk. 656 00:31:09,580 --> 00:31:11,700 Det er det wild card karakter. 657 00:31:11,700 --> 00:31:14,740 Stjerne næsten altid betyder noget, så det betyder i dette tilfælde, 658 00:31:14,740 --> 00:31:16,510 vælge alt fra databasen. 659 00:31:16,510 --> 00:31:20,730 Så når jeg siger dette, mener jeg give mig tilbage hver kolonne 660 00:31:20,730 --> 00:31:22,440 fra min tabel kaldet brugere. 661 00:31:22,440 --> 00:31:24,730 Så giv mig et resultat sæt, som det hedder. 662 00:31:24,730 --> 00:31:28,210 Med andre ord, give mig en kopi af regneark, er, hvad jeg får på. 663 00:31:28,210 --> 00:31:34,890 >> Men hvis jeg sagde vælge stjerne fra brugere hvor ID er lig med 1, hvor stor skal 664 00:31:34,890 --> 00:31:36,640 mit resultat sæt så være? 665 00:31:36,640 --> 00:31:41,680 Eller tilsvarende, bør hvor mange rækker Jeg afleveres tilbage fra databasen? 666 00:31:41,680 --> 00:31:45,860 Sandsynligvis bare en, hvis jeg har faktisk behandlet ID som et entydigt id, 667 00:31:45,860 --> 00:31:50,710 og hvis David har den unikke id, jeg bør komme tilbage én og kun én række 668 00:31:50,710 --> 00:31:53,220 indeholder alle Davids oplysninger. 669 00:31:53,220 --> 00:31:56,390 Hvis jeg sagde dette, hvor ID lig 99, skal jeg komme tilbage, 670 00:31:56,390 --> 00:32:00,320 i denne forbindelse nul rækker, mindst i øjeblikket. 671 00:32:00,320 --> 00:32:03,620 >> Men hvis jeg ikke rigtig pleje om alle disse oplysninger, 672 00:32:03,620 --> 00:32:06,970 Jeg kunne bare sige, hvor kommer David bor? 673 00:32:06,970 --> 00:32:10,860 Vælg postnummer fra brugere, hvor ID er 1. 674 00:32:10,860 --> 00:32:15,820 Dette vil vælge mig kun Davids zip kode og ikke helheden af ​​den pågældende række. 675 00:32:15,820 --> 00:32:19,541 Hvorfor kan jeg gøre dette i stedet for stjernen forespørgslen, wild card? 676 00:32:19,541 --> 00:32:21,950 >> PUBLIKUM: [uhørligt] 677 00:32:21,950 --> 00:32:24,590 >> DAVID MALAN: Ja, jeg måske kun har brug for det. 678 00:32:24,590 --> 00:32:26,350 Så ydeevne er igen svaret her. 679 00:32:26,350 --> 00:32:28,540 Hvorfor bede om mere oplysninger, end du har brug for, 680 00:32:28,540 --> 00:32:32,020 for selv om det er i orden sammen, du stadig nødt til at kopiere disse data, 681 00:32:32,020 --> 00:32:35,560 det synes, fra databasen ind i dit program eller anden måde, 682 00:32:35,560 --> 00:32:38,490 og det er bare dumt, hvis du kun brug for fem af disse cifre, 683 00:32:38,490 --> 00:32:40,340 ikke hele den række. 684 00:32:40,340 --> 00:32:42,180 >> Så hvordan kan jeg indsætter en bruger? 685 00:32:42,180 --> 00:32:44,780 Antag en bruger har bare registreret første gang. 686 00:32:44,780 --> 00:32:46,560 Syntaksen normalt ville se sådan ud. 687 00:32:46,560 --> 00:32:52,700 Indsæt i brugere, og så ville vi sige værdier, 688 00:32:52,700 --> 00:33:00,150 og så ville vi sige værdier lignende, lad os sige, Lauren Scully, 689 00:33:00,150 --> 00:33:02,380 vores fotograf lige her. 690 00:33:02,380 --> 00:33:04,390 Og det næste felt er køn. 691 00:33:04,390 --> 00:33:08,020 Så vi vil sige tilbud, citat slut "F", så har vi et id 692 00:33:08,020 --> 00:33:12,250 og jeg har tænkt mig at say-- lad os foregive hun ikke er faktisk her, 693 00:33:12,250 --> 00:33:14,380 så vi vil spole tilbage i historien. 694 00:33:14,380 --> 00:33:16,530 Så 2 vil være hendes id. 695 00:33:16,530 --> 00:33:19,130 Og derefter den næste felt her er hendes e-mail. 696 00:33:19,130 --> 00:33:22,140 Så det kommer til at være ligesom Lauren Scully og så videre, 697 00:33:22,140 --> 00:33:24,360 og vi vil bare dot dot dot den væk fra her på. 698 00:33:24,360 --> 00:33:26,890 Nu vil det blive lidt kedelig, men insertet forespørgslen 699 00:33:26,890 --> 00:33:28,310 ville i sidste ende ligne det. 700 00:33:28,310 --> 00:33:30,970 >> Hvis jeg ønsker at slippe af med Scully, uh-oh, lad os afmelde 701 00:33:30,970 --> 00:33:37,420 hende, hun sletter sin konto, slette fra brugere, hvor ID er lig 2, 702 00:33:37,420 --> 00:33:38,500 vil slippe af Scully. 703 00:33:38,500 --> 00:33:48,050 Eller jeg kan sige opdatere brugere indstillet, lad os sige, hvad kunne vi ændre? 704 00:33:48,050 --> 00:33:49,430 Antag hun bevæger sig. 705 00:33:49,430 --> 00:33:53,730 Set zip lig 021-- nope, det er hendes nuværende lynlås. 706 00:33:53,730 --> 00:33:54,487 90210. 707 00:33:54,487 --> 00:33:56,320 Den eneste anden postnummer Jeg kender i verden. 708 00:33:56,320 --> 00:33:59,002 Så det ville ændre hendes zip code-- faktisk, 709 00:33:59,002 --> 00:34:00,460 der ville ikke ændre hendes postnummer. 710 00:34:00,460 --> 00:34:02,170 >> Hvad gjorde jeg bare gøre? 711 00:34:02,170 --> 00:34:04,292 Selvom syntaksen er sandsynligvis nyt. 712 00:34:04,292 --> 00:34:05,302 >> PUBLIKUM: [uhørligt] 713 00:34:05,302 --> 00:34:08,010 DAVID MALAN: Ja, jeg flyttede alle til Beverly Hills, Californien. 714 00:34:08,010 --> 00:34:11,920 Så jeg burde faktisk sige, hvor ID er lig med 2. 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 former for instruktioner. 717 00:34:15,290 --> 00:34:20,260 Vælg, indsætte, slette, opdatere, med disse prædikater ved udgangen 718 00:34:20,260 --> 00:34:22,139 disse hvor klausuler, så at sige. 719 00:34:22,139 --> 00:34:25,170 Og der er meget mere du kan gør, men det er virkelig bare koges ned 720 00:34:25,170 --> 00:34:29,750 blot, hvis arcanely, der udtrykker hvad du ønsker, at databasen for at gøre. 721 00:34:29,750 --> 00:34:31,580 >> Og derefter databasen vil finde ud af, når 722 00:34:31,580 --> 00:34:35,630 du indsætter Lauren Scully ind i database, hvor man kan sætte hende i hukommelsen 723 00:34:35,630 --> 00:34:38,230 så vi meget hurtigt kan få hendes baseret på hendes email adresse 724 00:34:38,230 --> 00:34:42,610 eller baseret på hendes 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ørligt] 727 00:34:44,266 --> 00:34:46,364 728 00:34:46,364 --> 00:34:47,780 DAVID MALAN: Rigtig godt spørgsmål. 729 00:34:47,780 --> 00:34:50,370 Vil disse scripts skifte 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 svar er det afhænger af. 732 00:34:53,790 --> 00:34:58,697 I teorien er der en meget betydelig fælles undergruppe af SQL 733 00:34:58,697 --> 00:35:00,780 der er delt på tværs af alle af disse implementeringer. 734 00:35:00,780 --> 00:35:03,340 Dog, forskellige producenter har tilføjet funktioner 735 00:35:03,340 --> 00:35:07,120 til deres databaser at gøre visse ting uden for rammerne af disse funktioner, 736 00:35:07,120 --> 00:35:08,720 der kan faktisk gå i stykker. 737 00:35:08,720 --> 00:35:11,210 >> Så den måde udviklere afdække dette, 738 00:35:11,210 --> 00:35:14,350 er, at snarere end at skrive rå SQL kode som jeg skriver her, 739 00:35:14,350 --> 00:35:19,460 de i stedet bruge et bibliotek, en fælles bibliotek, selv 740 00:35:19,460 --> 00:35:23,650 er en slags højere niveau og abstracts væk, hvilket produkt du bruger. 741 00:35:23,650 --> 00:35:25,710 Og det giver dig funktioner og procedurer 742 00:35:25,710 --> 00:35:28,810 at ringe, så du aldrig faktisk skrive rå SQL. 743 00:35:28,810 --> 00:35:32,609 >> I teorien, så kan du ændre produkter fra Oracle til Microsoft 744 00:35:32,609 --> 00:35:34,650 eller omvendt eller noget andet, og du bogstaveligt talt 745 00:35:34,650 --> 00:35:36,920 ændre noget om din kode. 746 00:35:36,920 --> 00:35:40,180 Virkeligheden er dog,, du nogle gange opgive karakteristika på grund. 747 00:35:40,180 --> 00:35:43,860 Du har måske valgt et produkt, fordi det har fået disse værdiskabende funktioner, 748 00:35:43,860 --> 00:35:46,610 og du er bare nu ikke bruger dem bevidst. 749 00:35:46,610 --> 00:35:51,630 >> Og anekdotisk, de fleste virksomheder har en tendens aldrig at bevæge sig væk fra deres database. 750 00:35:51,630 --> 00:35:54,002 Så mens det er et rart at har træk, virkeligheden 751 00:35:54,002 --> 00:35:55,960 er, hvis du overhale din database, er du 752 00:35:55,960 --> 00:35:59,890 sandsynligvis gøre klaser af andre ændringer alligevel, at du ikke nødvendigvis 753 00:35:59,890 --> 00:36:01,360 nødt til at foregribe det. 754 00:36:01,360 --> 00:36:03,720 Så det er velsagtens over-engineering problemet, 755 00:36:03,720 --> 00:36:05,670 men det virkelig afhænger af konteksten. 756 00:36:05,670 --> 00:36:09,960 Men i teorien, er SQL delt på tværs af disse forskellige produkter. 757 00:36:09,960 --> 00:36:11,560 Virkelig gode spørgsmål. 758 00:36:11,560 --> 00:36:12,272 Ja. 759 00:36:12,272 --> 00:36:13,147 >> PUBLIKUM: [uhørligt] 760 00:36:13,147 --> 00:36:17,820 761 00:36:17,820 --> 00:36:21,480 >> DAVID MALAN: Ja, så du kan tænke en database 762 00:36:21,480 --> 00:36:25,020 er blot en server, i slutningen af dagen, og inde i nævnte server 763 00:36:25,020 --> 00:36:28,670 er en hel masse tabeller, rækker og kolonner. 764 00:36:28,670 --> 00:36:33,410 Og når du sender en forespørgsel som denne fra dit program, din hjemmeside, 765 00:36:33,410 --> 00:36:39,340 skrevet i Java, Ruby, Python, uanset hvad, serveren modtager denne kommando 766 00:36:39,340 --> 00:36:41,660 og fortolke det i bogstaveligt på samme måde 767 00:36:41,660 --> 00:36:43,660 vi diskuterede tidligere med fortolket sprog, 768 00:36:43,660 --> 00:36:47,333 og derefter udføre en handling på nul eller flere rækker i nul eller flere tabeller. 769 00:36:47,333 --> 00:36:48,208 PUBLIKUM: [uhørligt] 770 00:36:48,208 --> 00:36:53,540 771 00:36:53,540 --> 00:36:55,070 >> DAVID MALAN: Præcis, præcis. 772 00:36:55,070 --> 00:36:58,450 Så pseudokode for noget ligesom der kan være dette. 773 00:36:58,450 --> 00:37:02,450 I din PHP fil eller din Python-fil eller din Java-fil, 774 00:37:02,450 --> 00:37:09,210 du ville have pseudokode kode, eller Scratch-lignende blokke som, hvis brugeren besøger 775 00:37:09,210 --> 00:37:19,870 acme.com/register~~V for første gang, derefter indsætte i brugere og så videre. 776 00:37:19,870 --> 00:37:22,619 Og vi ville oversætte dette til mere konkret kode i sidste ende. 777 00:37:22,619 --> 00:37:24,660 Men virkelig, vi har alle byggestenene her, 778 00:37:24,660 --> 00:37:27,680 selvom vi springe nogle af trinene gennemførelsen. 779 00:37:27,680 --> 00:37:31,560 >> Så lad mig finde fejl med det, vi vidunderligt gjorde bare et øjeblik siden. 780 00:37:31,560 --> 00:37:36,470 Du har oprettet en smuk komplet tabel for brugere. 781 00:37:36,470 --> 00:37:38,920 Ganske vist kunne vi gennemføre det i et par forskellige måder, 782 00:37:38,920 --> 00:37:43,030 men du rent faktisk har ført os ned path-- og sige jeg dig, 783 00:37:43,030 --> 00:37:48,080 men det er nok min fault-- af en temmelig ineffektiv database implementering. 784 00:37:48,080 --> 00:37:49,950 Det er ikke normaliseret. 785 00:37:49,950 --> 00:37:52,320 >> Og ved normaliseret jeg mener der vil være, 786 00:37:52,320 --> 00:37:57,380 over tid, en væsentlig redundans, og derfor ineffektivitet, 787 00:37:57,380 --> 00:38:00,210 der er spild af plads. 788 00:38:00,210 --> 00:38:05,650 Baseret på kun hvad du ser her, kan du forestiller hvor denne spild af plads 789 00:38:05,650 --> 00:38:08,710 vil komme fra, over tid, som flere og flere brugere registrere 790 00:38:08,710 --> 00:38:10,860 til din hjemmeside? 791 00:38:10,860 --> 00:38:13,047 Hvilke data kan blive overflødige? 792 00:38:13,047 --> 00:38:19,084 793 00:38:19,084 --> 00:38:20,940 >> PUBLIKUM: [uhørligt] 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ørligt] 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 lad os antage, med henblik af i dag, at det er sandt. 799 00:38:35,622 --> 00:38:38,330 Slår ud, og vi har lært dette på den hårde måde, det er ikke sandt. 800 00:38:38,330 --> 00:38:41,670 Anden måde flere byer har, eller anden måde, det samme postnummer, 801 00:38:41,670 --> 00:38:43,390 som bryder denne vidunderlige intuition. 802 00:38:43,390 --> 00:38:46,180 Men lad os antage, at er sandt, fordi det er næsten altid sandt. 803 00:38:46,180 --> 00:38:51,390 Så antage, at et postnummer er altid forbundet med samme by 804 00:38:51,390 --> 00:38:53,600 og stat, hvilket er lidt rimelig antagelse, 805 00:38:53,600 --> 00:38:54,840 men forkert, viser det sig. 806 00:38:54,840 --> 00:38:57,310 Men en rimelig antagelse for nutidens formål. 807 00:38:57,310 --> 00:39:01,650 >> Så formoder, at jeg bor i Cambridge, MA, ifølge denne brugers bord, 808 00:39:01,650 --> 00:39:04,100 og antage, at Lauren Scully bor i Cambridge, MA, 809 00:39:04,100 --> 00:39:06,120 og antage, at Kareem bor i Cambridge, MA, 810 00:39:06,120 --> 00:39:10,400 og Arwa bor i Cambridge, MA, alle os i 02138. 811 00:39:10,400 --> 00:39:15,890 Hvorfor er vi huske Cambridge, MA, 02138 for alle fire af os? 812 00:39:15,890 --> 00:39:18,903 Hvad skal være tilstrækkeligt til at huske? 813 00:39:18,903 --> 00:39:20,249 >> PUBLIKUM: [uhørligt] 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 ved, hvad vi kunne gøre? 816 00:39:25,080 --> 00:39:32,650 Vi kunne få lidt fancy her og herovre, definere en anden tabel 817 00:39:32,650 --> 00:39:35,850 hvor dette vil være den navn, vil dette være den type, 818 00:39:35,850 --> 00:39:38,840 dette vil være den længde, og nu er jeg 819 00:39:38,840 --> 00:39:42,900 vil kalde dette mit byer bord. 820 00:39:42,900 --> 00:39:47,011 Dette blev kaldt, af Selvfølgelig min brugere bord. 821 00:39:47,011 --> 00:39:49,885 Og så hvad skal jeg sætte herovre for min byer tabellen, tror du? 822 00:39:49,885 --> 00:39:53,605 823 00:39:53,605 --> 00:39:54,535 >> PUBLIKUM: [uhørligt] 824 00:39:54,535 --> 00:39:55,930 >> DAVID MALAN: Ja. 825 00:39:55,930 --> 00:40:01,440 Så zip og stat og by. 826 00:40:01,440 --> 00:40:05,350 Og så den type her, vil vi sige dette vil være en char 5 igen, 827 00:40:05,350 --> 00:40:06,750 forbehold debatten af ​​tidligere. 828 00:40:06,750 --> 00:40:14,810 Dette vil være en enum, måske som før, vil og by være en varchar 50. 829 00:40:14,810 --> 00:40:17,960 Og så nu, hvad får jeg at slette fra denne tabel 830 00:40:17,960 --> 00:40:21,995 at fjerne denne ineffektivitet? 831 00:40:21,995 --> 00:40:23,100 >> PUBLIKUM: [uhørligt] 832 00:40:23,100 --> 00:40:23,850 DAVID MALAN: Nice. 833 00:40:23,850 --> 00:40:30,239 Stat og by gå væk, så jeg har nu elimineret den potentielle 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åbentlig er aldrig vil ændre sig. 836 00:40:35,712 --> 00:40:37,670 Og selv hvis den gør, er det minorly irriterende, nu 837 00:40:37,670 --> 00:40:39,750 at jeg er nødt til at ændre det i flere rækker, 838 00:40:39,750 --> 00:40:43,770 mens her, jeg kunne bare ændre det på ét sted. 839 00:40:43,770 --> 00:40:46,890 >> Nu hvad er trade-off, måske? 840 00:40:46,890 --> 00:40:48,020 Det var super praktisk. 841 00:40:48,020 --> 00:40:50,730 Havde alle mine data pænt sammen. 842 00:40:50,730 --> 00:40:53,644 Men hvad er klart tilfældet nu? 843 00:40:53,644 --> 00:40:55,684 >> PUBLIKUM: [uhørligt] 844 00:40:55,684 --> 00:40:58,100 DAVID MALAN: Præcis, og jeg er glad for du brugte ordet slutte, 845 00:40:58,100 --> 00:41:01,320 fordi det er faktisk nøgleordet, i verden af ​​relationsdatabaser 846 00:41:01,320 --> 00:41:05,270 i SQL, er det en faktiske ord, du kan skrive eller i det mindste formidle. 847 00:41:05,270 --> 00:41:09,280 Og i virkeligheden, hvad vi nu skal gøre at vælge Davids fuldstændige oplysninger er 848 00:41:09,280 --> 00:41:19,700 noget lignende Vælg stjerne fra brugere, deltage byerne, on-- og nu 849 00:41:19,700 --> 00:41:24,010 Jeg har tænkt mig at bare flytte til en anden linje så denne fits-- users.zip lig 850 00:41:24,010 --> 00:41:34,570 cities.zip, hvor users.ID er lig med 1. 851 00:41:34,570 --> 00:41:35,550 >> Så hvad sker der? 852 00:41:35,550 --> 00:41:38,970 Det er grimt at kigge, men du kan slags læse det venstre til højre, top til bund. 853 00:41:38,970 --> 00:41:41,030 Vælg stjerne fra brugere er den samme som før, 854 00:41:41,030 --> 00:41:42,930 men det er ikke fra brugere, per se. 855 00:41:42,930 --> 00:41:45,910 Det er fra brugere slutte byer. 856 00:41:45,910 --> 00:41:48,520 Hvad skal jeg forbinder de to tabeller på? 857 00:41:48,520 --> 00:41:51,820 Nå, tilsyneladende, den brugernes tabeller zip felt, 858 00:41:51,820 --> 00:41:54,810 og denne periode er blot særlige syntaks til at udtrykke den idé, 859 00:41:54,810 --> 00:41:58,130 og det er de byer borde zip felt. 860 00:41:58,130 --> 00:42:01,580 Jeg ønsker de to at være lig, men jeg vil gerne i sidste ende vælge 861 00:42:01,580 --> 00:42:06,280 kun de rækker, hvor ID i brugernes tabellen 862 00:42:06,280 --> 00:42:08,730 er lig med 1, som tilfældigvis mine. 863 00:42:08,730 --> 00:42:11,781 >> Og bare for at være klar, en programmør, typisk når 864 00:42:11,781 --> 00:42:14,780 hardcode noget som antallet 1, for ellers hjemmesiden kun 865 00:42:14,780 --> 00:42:17,630 støtter David eller allerførste bruger, du 866 00:42:17,630 --> 00:42:20,720 i stedet ville gøre noget som ID, hvor 867 00:42:20,720 --> 00:42:22,510 dette repræsenterer en variabel, noget der 868 00:42:22,510 --> 00:42:26,210 kan ændre sig over tid, lignende i ånden til, hvad jeg sagde tidligere 869 00:42:26,210 --> 00:42:28,080 med den slags pladsholdere. 870 00:42:28,080 --> 00:42:30,396 Men for nu vil vi bare hardcode det som en. 871 00:42:30,396 --> 00:42:31,520 Og så hvad betyder det? 872 00:42:31,520 --> 00:42:35,100 Tja, en dejlig måde at visualisere dette er at hvis denne hånd er brugere tabellen, 873 00:42:35,100 --> 00:42:38,090 og denne hånd er lynlåse tabel, vi er slags finding-- 874 00:42:38,090 --> 00:42:41,330 og spidsen af ​​mine fingre er zip herovre, og spidsen af ​​mine fingre 875 00:42:41,330 --> 00:42:43,740 her er zip, er du slags sikringsanlæg det 876 00:42:43,740 --> 00:42:47,950 så du får tilbage den resulterende oprindelige tabel, ved virkelig sammenføjning 877 00:42:47,950 --> 00:42:49,590 de to tabeller om de fælles område. 878 00:42:49,590 --> 00:42:50,840 Og det behøver ikke at være zip. 879 00:42:50,840 --> 00:42:54,460 Det kunne være mest noget andet, men zip er rart, fordi man, det er kort, 880 00:42:54,460 --> 00:42:56,470 to, det er altid det samme længde, så der er 881 00:42:56,470 --> 00:43:02,270 en reel effektivitet til hvad Olivier foreslås her 882 00:43:02,270 --> 00:43:05,200 med factoring ud lynlåsen, og [Uhørligt] foreslår, at vi slipper 883 00:43:05,200 --> 00:43:07,110 af byen og stater. 884 00:43:07,110 --> 00:43:11,370 >> Så dette er den proces kendt som normalisering. 885 00:43:11,370 --> 00:43:14,171 Eventuelle spørgsmål om, at? 886 00:43:14,171 --> 00:43:16,170 Jamen så lad mig påpege det er den slags ting, 887 00:43:16,170 --> 00:43:19,202 selvom det er temmelig lavt niveau, denne diskussion, at man skulle tro 888 00:43:19,202 --> 00:43:20,910 du slags få tabt i ukrudt, 889 00:43:20,910 --> 00:43:26,690 dette er en manifestation af rigelig mulighed for udviklere at være dårligt. 890 00:43:26,690 --> 00:43:29,600 Og i virkeligheden, selv når vi, i kurser, jeg har lært, når vi har haft, 891 00:43:29,600 --> 00:43:32,290 for eksempel, uerfarne bachelor programmører 892 00:43:32,290 --> 00:43:35,920 bygge websites, ved første øjekast, hjemmesider kan se fantastisk. 893 00:43:35,920 --> 00:43:38,280 Og de har alle de funktionalitet vi har krævet, 894 00:43:38,280 --> 00:43:40,650 udviklerne gjorde et godt stykke arbejde. 895 00:43:40,650 --> 00:43:43,370 >> Men de havde ikke nødvendigvis ved nok om databasedesign 896 00:43:43,370 --> 00:43:46,680 eller de ikke tænke hårdt nok om de typer af data 897 00:43:46,680 --> 00:43:49,220 og de typer af brugerne hjemmeside skulle have, 898 00:43:49,220 --> 00:43:53,240 og vi finder da, seks måneder senere, efter at de har opgraderet eller flyttes på, 899 00:43:53,240 --> 00:43:56,016 at damn it, vores hjemmeside er virkelig, virkelig langsom. 900 00:43:56,016 --> 00:43:58,890 Og jeg er ikke engang tale om at have millioner eller tusindvis af brugere. 901 00:43:58,890 --> 00:44:02,580 Jeg mener et par hundrede brugere på campus, som alle gerne, for eksempel, 902 00:44:02,580 --> 00:44:04,870 shop for kurser på samme tid, de er 903 00:44:04,870 --> 00:44:07,010 ved hjælp af denne kursuskatalog ansøgning jeg nævnte 904 00:44:07,010 --> 00:44:10,410 og ting bliver virkelig langsom, fordi der ikke var nogen indekser. 905 00:44:10,410 --> 00:44:13,740 Der var ingen røde stjerner, så at tale, eller vi havde ikke nødvendigvis 906 00:44:13,740 --> 00:44:17,690 indregnes de fælles data til få nogle besparelser på plads. 907 00:44:17,690 --> 00:44:21,880 >> Og så når behandlingen af ​​en udvikler eller database person eller lignende, 908 00:44:21,880 --> 00:44:25,864 den slags spørgsmål at tænke igennem er endda, når vi gennemgår en andens kode, 909 00:44:25,864 --> 00:44:28,530 at sige, ikke nødvendigvis ser gennem alle deres kode, men siger, 910 00:44:28,530 --> 00:44:30,154 lad os se gennem databasetabeller. 911 00:44:30,154 --> 00:44:31,150 Hvad er du opbevare? 912 00:44:31,150 --> 00:44:33,941 Og så at sige, godt, vente en minut, hvorfor bruger du et heltal? 913 00:44:33,941 --> 00:44:36,224 Hvad hvis vi har 4 milliarder og en af ​​disse rækker? 914 00:44:36,224 --> 00:44:38,140 Og den slags spørgsmål er en mulighed 915 00:44:38,140 --> 00:44:40,170 at slags skubbe tilbage og få en fornemmelse af, hvor 916 00:44:40,170 --> 00:44:42,300 hvis du ikke er tryg ved at gøre det, at have nogen mere teknisk 917 00:44:42,300 --> 00:44:45,425 stille disse spørgsmål, af, hvorvidt personen virkelig kender deres kram. 918 00:44:45,425 --> 00:44:47,890 Og det er den form for ting, også, at folk 919 00:44:47,890 --> 00:44:50,540 på internettet, der er selvlært, måske 920 00:44:50,540 --> 00:44:53,920 lære mindre hyppigt, fordi du ikke nødvendigvis kommer på tværs af det 921 00:44:53,920 --> 00:44:56,630 så meget, fordi du kan få databasen op at køre, 922 00:44:56,630 --> 00:44:58,880 men medmindre du har læst op på tutorials eller været 923 00:44:58,880 --> 00:45:01,880 fortalt om database normalisering og indeksering og ydeevne, 924 00:45:01,880 --> 00:45:04,255 disse er den slags ting der kommer til at skade dig. 925 00:45:04,255 --> 00:45:07,480 Og du måske tror, ​​eller en dårlig ingeniør måske sige, åh, ja, vi bedre løn 926 00:45:07,480 --> 00:45:09,600 for en større database eller en hurtigere database 927 00:45:09,600 --> 00:45:13,360 eller bare smide penge på dette, lodret skala, ikke nødvendigvis tilfældet. 928 00:45:13,360 --> 00:45:16,920 Hvis du går in-- og du kan gå i efter fact-- og tilføje indekser, 929 00:45:16,920 --> 00:45:20,320 og det kan tage et par timer til database at opbygge det nye data 930 00:45:20,320 --> 00:45:24,100 struktur, som jeg hentydet til tidligere, du kan stadig løse dette efter den kendsgerning, 931 00:45:24,100 --> 00:45:26,180 at det er her du begynde at skelne 932 00:45:26,180 --> 00:45:28,830 gode designere fra dårlig designere, ikke bare æstetisk, 933 00:45:28,830 --> 00:45:32,972 men performance-wise så godt. 934 00:45:32,972 --> 00:45:33,555 Nogen spørgsmål? 935 00:45:33,555 --> 00:45:36,420 936 00:45:36,420 --> 00:45:37,480 Ingen? 937 00:45:37,480 --> 00:45:41,980 Så for NoSQL, som var den anden type af database, som jeg hentydede tidligere, 938 00:45:41,980 --> 00:45:43,490 du ikke har rækker og kolonner. 939 00:45:43,490 --> 00:45:47,000 I stedet ville du have noget der ser lidt mere som denne. 940 00:45:47,000 --> 00:45:48,630 Jeg har tænkt mig at bruge fælles syntaks. 941 00:45:48,630 --> 00:45:51,270 Curly seler tilfældigvis bruges her ganske meget. 942 00:45:51,270 --> 00:45:55,400 Du har måske noget ligesom fornavn er David, 943 00:45:55,400 --> 00:46:00,180 du har måske sidste navn er Malan, citater, 944 00:46:00,180 --> 00:46:07,530 du måske har ID is-- undskyld mig, whoops-- ID er en, 945 00:46:07,530 --> 00:46:13,410 e-mail er malan@harvard.edu, og jeg vil ikke gider skrive resten, og derefter 946 00:46:13,410 --> 00:46:14,380 nogle andre ting. 947 00:46:14,380 --> 00:46:17,380 >> Med andre ord er dette en tekstuel repræsentation 948 00:46:17,380 --> 00:46:20,720 af, hvad vi generelt ville kalde et objekt i et computerprogram. 949 00:46:20,720 --> 00:46:26,079 Og en genstand er generelt bare en samling af de vigtigste værdi par. 950 00:46:26,079 --> 00:46:27,370 Så igen, denne tilbagevendende tema. 951 00:46:27,370 --> 00:46:30,440 Vi så central værdi par i HTML, vi så nøgle værdipar nu 952 00:46:30,440 --> 00:46:34,020 i forbindelse med databaser, og vi så centrale værdi par i forbindelse 953 00:46:34,020 --> 00:46:35,970 af, tror jeg, et sprog tidligere i dag. 954 00:46:35,970 --> 00:46:36,890 Holder kommer op. 955 00:46:36,890 --> 00:46:39,620 Og ja, det er virkelig hvilke data kan koges ned til, 956 00:46:39,620 --> 00:46:44,240 data og metadata, eller værdier og nøgler henholdsvis. 957 00:46:44,240 --> 00:46:47,430 >> Så en ikke-relationel database, noget, der bygger 958 00:46:47,430 --> 00:46:50,680 på genstande, hvor man bare klumper det hele sammen og sætte det 959 00:46:50,680 --> 00:46:55,640 i hukommelsen, vil generelt være afbilledet som eller tænkt på, da dette. 960 00:46:55,640 --> 00:47:00,500 Og jeg vil overlade nu som slags alternativ fremgangsmåde. 961 00:47:00,500 --> 00:47:03,750 Og man er ikke nødvendigvis bedre end den anden. 962 00:47:03,750 --> 00:47:07,310 Faktisk meget på mode disse dage er databasesystemer 963 00:47:07,310 --> 00:47:11,942 ligesom MongoDB og Redis og et par andre sådanne værktøjer, frit tilgængelige, 964 00:47:11,942 --> 00:47:13,400 men de er stadig mere da mode. 965 00:47:13,400 --> 00:47:18,850 Dels fordi de tilbyder ekstra har over disse tabelform tilgange, 966 00:47:18,850 --> 00:47:20,850 men også fordi de er lidt lettere at bruge, 967 00:47:20,850 --> 00:47:24,099 fordi du ikke behøver at tænke så hårdt om en masse af disse designbeslutninger. 968 00:47:24,099 --> 00:47:25,970 Så plusser og minusser. 969 00:47:25,970 --> 00:47:29,740 Så indser der er muligheder ud over, hvad vi lige brugt tid på. 970 00:47:29,740 --> 00:47:32,310 >> Så lad os gøre det. 971 00:47:32,310 --> 00:47:37,870 Lad os overgangen lidt tilbage nu til web programmering, 972 00:47:37,870 --> 00:47:40,470 så vi slags indgå dag med noget 973 00:47:40,470 --> 00:47:43,930 Det er lidt hands-on, påfyldning i nogle huller fra i går. 974 00:47:43,930 --> 00:47:45,340 Lad mig gå til denne første. 975 00:47:45,340 --> 00:47:49,310 Så minde om, at i går vi havde nogle kanoniske HTML 976 00:47:49,310 --> 00:47:55,110 sider, der oprindeligt havde, kun HTML, og derefter sekundært havde 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 nyt tag, som vi ikke se i går, eller dvæle ved, 979 00:47:59,830 --> 00:48:01,490 såkaldt script-tag. 980 00:48:01,490 --> 00:48:05,830 >> Slår ud du faktisk kan integrere en sprog hedder JavaScript i din web 981 00:48:05,830 --> 00:48:08,310 side og gøre din web sider gør noget. 982 00:48:08,310 --> 00:48:09,710 Så hvad mener jeg med det? 983 00:48:09,710 --> 00:48:12,630 Nå, lad mig gå videre og bare låne denne kode for et øjeblik. 984 00:48:12,630 --> 00:48:15,860 Jeg har tænkt mig at gå ind i Cloud9, intet behov at gå der selv lige nu, 985 00:48:15,860 --> 00:48:21,350 og jeg har tænkt mig at kalde denne alert.HTML. 986 00:48:21,350 --> 00:48:23,650 Jeg har tænkt mig at indsætte i min fil her. 987 00:48:23,650 --> 00:48:32,070 Og bare for at præcisere, hvad jeg har gjort, så lad mig gå til denne adresse og gå at advare, 988 00:48:32,070 --> 00:48:33,870 og du ser Hello World. 989 00:48:33,870 --> 00:48:35,440 >> Men det er lidt underwhelming. 990 00:48:35,440 --> 00:48:37,410 Jeg ønsker at gøre noget lidt anderledes. 991 00:48:37,410 --> 00:48:40,610 Så jeg har tænkt mig at rent faktisk at gøre dette. 992 00:48:40,610 --> 00:48:43,820 Jeg har tænkt mig at gå i her e, og i mellem mine scripttags, 993 00:48:43,820 --> 00:48:53,460 siger alert ( 'hej, verden'); så varsel det er lidt sjusket, men jeg har fået HTML, 994 00:48:53,460 --> 00:48:56,180 inderside er en sprog kaldet JavaScript 995 00:48:56,180 --> 00:48:59,420 og det er det, der kaldes en funktionskald eller procedure call. 996 00:48:59,420 --> 00:49:04,500 Dette er et verbum, bogstaveligt talt, i dette tilfælde, og jeg påberåber kode funktionalitet 997 00:49:04,500 --> 00:49:06,310 at en anden skrev. 998 00:49:06,310 --> 00:49:09,630 >> Således at funktionaliteten er en alarm, så lad os gå til denne side 999 00:49:09,630 --> 00:49:14,046 nu og klik reload, og nu se en lille smule af interaktivitet. 1000 00:49:14,046 --> 00:49:15,420 Det er slags gamle skole og grimme. 1001 00:49:15,420 --> 00:49:18,580 Denne form for minder dig om pop-ups, måske, af gårsdagens 1002 00:49:18,580 --> 00:49:22,030 men det gjorde gøre noget lidt mere programmatisk. 1003 00:49:22,030 --> 00:49:26,940 >> Så mere end det, lad os gøre noget mere interessant. 1004 00:49:26,940 --> 00:49:30,980 Lad mig gå ind her og slippe af med dette. 1005 00:49:30,980 --> 00:49:33,840 Og jeg har tænkt mig at gå videre og oprette en formular, som vi gjorde i går. 1006 00:49:33,840 --> 00:49:34,840 Faktisk, ved du hvad? 1007 00:49:34,840 --> 00:49:37,350 Jeg har tænkt mig at gå ind i google.html, som vi 1008 00:49:37,350 --> 00:49:43,027 startede på i går, der lignede dette, via hvilken vi søgt efter kat 1009 00:49:43,027 --> 00:49:45,360 Men bemærk at der er sådan en fejl i den aktuelle version. 1010 00:49:45,360 --> 00:49:49,770 Det virker for katte, men formoder, at Jeg kan ikke samarbejde, og jeg skriver ikke noget, 1011 00:49:49,770 --> 00:49:53,290 og jeg klikker simpelthen indsende. 1012 00:49:53,290 --> 00:49:54,540 Det er lidt underligt adfærd. 1013 00:49:54,540 --> 00:49:57,300 Tog mig til den virkelige Google, gav mig ikke en fejlmeddelelse. 1014 00:49:57,300 --> 00:50:00,590 Jeg vil gerne fortælle brugeren du nødt til at give os en værdi. 1015 00:50:00,590 --> 00:50:01,780 >> Så hvordan kan vi gøre det? 1016 00:50:01,780 --> 00:50:06,790 Jamen så lad mig gå tilbage til Cloud9 og lad mig gå ind i toppen af ​​min side 1017 00:50:06,790 --> 00:50:11,980 og tilføje et script-tag som dette, hvor Jeg har tænkt mig at skrive nogle JavaScript-kode. 1018 00:50:11,980 --> 00:50:15,420 Og jeg har tænkt mig at gøre følgende. 1019 00:50:15,420 --> 00:50:22,910 Hvis (document.getelementByID-- og tilbagekaldelse at vi talte om det tidligere, 1020 00:50:22,910 --> 00:50:23,960 denne funktion. 1021 00:50:23,960 --> 00:50:25,310 Hvad ID ønsker jeg at få? 1022 00:50:25,310 --> 00:50:33,050 Jeg ønsker at få q, og jeg har tænkt mig at sige lig ingenting, ligesom denne-- 1023 00:50:33,050 --> 00:50:38,220 faktisk lade mig bruge dobbelte anførselstegn bare for consistency-- lig ingenting, 1024 00:50:38,220 --> 00:50:46,650 derefter alert ( "Indtast en forespørgsel") her. 1025 00:50:46,650 --> 00:50:49,200 >> Så jeg har, hvad der synes at være noget som en betingelse. 1026 00:50:49,200 --> 00:50:51,410 Vi har set denne generelle idé i Scratch. 1027 00:50:51,410 --> 00:50:54,240 Det er ligesom en af ​​dem puslespil stykker, der lignede dette. 1028 00:50:54,240 --> 00:50:55,780 Og hvad er det jeg siger? 1029 00:50:55,780 --> 00:50:59,520 Nå, hernede, mærke jeg er kommer til at gøre følgende. 1030 00:50:59,520 --> 00:51:02,790 Jeg har tænkt mig at give denne formular felt ikke blot et navn q, som 1031 00:51:02,790 --> 00:51:06,630 er det, der får overført til Google, men jeg er vil give det en lokal identifikator, 1032 00:51:06,630 --> 00:51:07,630 også kaldet q. 1033 00:51:07,630 --> 00:51:11,780 Men jeg kunne kalde dette noget jeg ønsker, jeg bare at holde det simpelt 1034 00:51:11,780 --> 00:51:14,570 og også kalde det q, bare for enkelhed. 1035 00:51:14,570 --> 00:51:17,650 >> Og nu vil jeg gøre noget lidt mere. 1036 00:51:17,650 --> 00:51:22,600 På formularfelterne her, vil jeg tilføje, hvad der kaldes en event handler. 1037 00:51:22,600 --> 00:51:32,260 På indsende, jeg vil ringe til en funktion kaldet validere. 1038 00:51:32,260 --> 00:51:35,520 Dette findes ikke endnu, det ord, eller denne verbum validere, 1039 00:51:35,520 --> 00:51:38,560 fordi det, jeg har tænkt mig at gøre heroppe nu tilføje noget kode. 1040 00:51:38,560 --> 00:51:42,200 >> Jeg har tænkt mig at sige funktion validere. 1041 00:51:42,200 --> 00:51:48,280 Jeg har tænkt mig at indrykke dette og tilføje en anden krøllede klammeparentes her og en anden her. 1042 00:51:48,280 --> 00:51:50,110 Overvej, hvad det er nu gør. 1043 00:51:50,110 --> 00:51:54,210 Jeg har nu-- tænke på dette som skabte min egen brik, der ikke tidligere 1044 00:51:54,210 --> 00:51:57,440 eksisterer, og jeg har kaldt dette puslespil stykke af validere brik. 1045 00:51:57,440 --> 00:52:01,620 Dens formål i livet er at udføre de fire linjer kode inde i den. 1046 00:52:01,620 --> 00:52:04,940 >> Hvis document.getElementById så begrebsmæssigt, 1047 00:52:04,940 --> 00:52:09,380 der kommer til at gå ind i elementet, HTML element hvis unikke 1048 00:52:09,380 --> 00:52:12,930 Ideen er bare q, og derefter selv om syntaksen ser lidt underligt, 1049 00:52:12,930 --> 00:52:16,430 at lige lig betyder bare ligemænd. 1050 00:52:16,430 --> 00:52:20,950 Så det betyder, hvis elementet med unik identifikation af q, når fået, 1051 00:52:20,950 --> 00:52:25,700 har ingen værdi, det bare er lig citat Citat slut, intet derinde, 1052 00:52:25,700 --> 00:52:27,170 så hvad ønsker jeg at gøre? 1053 00:52:27,170 --> 00:52:29,360 Jeg ønsker at råbe på brugeren. 1054 00:52:29,360 --> 00:52:31,710 >> Og vi vil ikke gå detaljer her. 1055 00:52:31,710 --> 00:52:32,960 Jeg har tænkt mig at vende tilbage falsk. 1056 00:52:32,960 --> 00:52:34,380 Det er en fejl. 1057 00:52:34,380 --> 00:52:38,746 Else, jeg har tænkt mig at returnere sandt. 1058 00:52:38,746 --> 00:52:40,120 Så enten det virkede eller det gjorde ikke. 1059 00:52:40,120 --> 00:52:41,800 Falsk eller sandt. 1060 00:52:41,800 --> 00:52:47,820 Og nu, hvis jeg ikke gøre nogen fejl, lad mig gemme denne og genindlæse dette. 1061 00:52:47,820 --> 00:52:50,940 Og lad mig lige dobbelttjekke, at Jeg har ikke, i virkeligheden, foretage eventuelle stavefejl, 1062 00:52:50,940 --> 00:52:52,690 så jeg ikke genere mig. 1063 00:52:52,690 --> 00:52:54,240 Lad os se, om det virker. 1064 00:52:54,240 --> 00:52:56,930 >> Så nu vil jeg skrive katte. 1065 00:52:56,930 --> 00:52:59,421 Det virker stadig, eller halv værker, i det mindste. 1066 00:52:59,421 --> 00:53:02,170 Lad mig nu genindlæse den, og lad os nu mig forsøge at sende uden at skrive 1067 00:53:02,170 --> 00:53:05,860 anything-- damn it, det brød. 1068 00:53:05,860 --> 00:53:06,430 Et øjeblik. 1069 00:53:06,430 --> 00:53:09,380 1070 00:53:09,380 --> 00:53:12,660 Lad mig åbne konsollen, [Uhørligt] log, genindlæse siden. 1071 00:53:12,660 --> 00:53:13,576 Lad mig prøve dette igen. 1072 00:53:13,576 --> 00:53:17,000 1073 00:53:17,000 --> 00:53:17,501 Åh, for pokker. 1074 00:53:17,501 --> 00:53:18,000 Jeg glemte. 1075 00:53:18,000 --> 00:53:18,630 Jeg lavede en tastefejl. 1076 00:53:18,630 --> 00:53:20,760 Jeg kan huske, hvad det er. 1077 00:53:20,760 --> 00:53:21,350 .værdi. 1078 00:53:21,350 --> 00:53:27,060 Jeg ville sige, hvis værdien af elementet, hvis ID er q 1079 00:53:27,060 --> 00:53:29,800 lig det, så råber på brugeren. 1080 00:53:29,800 --> 00:53:31,870 >> Så lad mig holde min ånde igen. 1081 00:53:31,870 --> 00:53:33,480 Nu sker det. 1082 00:53:33,480 --> 00:53:34,130 Sådan der. 1083 00:53:34,130 --> 00:53:35,010 Indtast en forespørgsel. 1084 00:53:35,010 --> 00:53:36,840 Så det er ikke at lade mig igennem. 1085 00:53:36,840 --> 00:53:40,210 Jeg kan være slags legende med dette, og i stedet for at kontrollere for ingen værdi, 1086 00:53:40,210 --> 00:53:46,720 Jeg kan sige noget lignende, ikke mere at søge efter katte, 1087 00:53:46,720 --> 00:53:51,150 og nu kan vi bare mere legende lad brugeren søge efter hunde, hvis han eller hun 1088 00:53:51,150 --> 00:53:57,490 ønsker, eller hvis jeg går ind her og søge efter katte, nu kan jeg ikke. 1089 00:53:57,490 --> 00:53:58,690 >> Så hvad er takeaway her? 1090 00:53:58,690 --> 00:54:03,010 Så man har vi indført i vores verden af ​​HTML og CSS, 1091 00:54:03,010 --> 00:54:04,320 programmering funktionalitet. 1092 00:54:04,320 --> 00:54:06,300 Jeg kan faktisk nu træffe beslutninger i koden. 1093 00:54:06,300 --> 00:54:10,570 Tidligere alt hvad jeg kunne gøre, er at markere tekstmæssige indhold eller grafisk indhold 1094 00:54:10,570 --> 00:54:13,080 og fortælle det hvad man skal kigge ud, og hvor der skal vises. 1095 00:54:13,080 --> 00:54:16,650 Nu kan jeg faktisk spørge spørgsmål af websiden 1096 00:54:16,650 --> 00:54:20,010 og træffe beslutninger baseret på det, og bede brugeren 1097 00:54:20,010 --> 00:54:22,780 hvis jeg har brug for at råbe ad ham eller hende. 1098 00:54:22,780 --> 00:54:28,740 >> Så lad os prøve noget på vores egne med dette. 1099 00:54:28,740 --> 00:54:33,350 Gå videre, lad mig åbne op for den næste dias her, og blot påpege én ting. 1100 00:54:33,350 --> 00:54:37,250 Ligesom med CSS, kan vi faktor ud vores JavaScript-kode til en separat fil, 1101 00:54:37,250 --> 00:54:40,660 du kan gøre det samme med JavaScript som med CSS. 1102 00:54:40,660 --> 00:54:44,520 Og du bruger, at bruge en kilde attribut af scriptet tag. 1103 00:54:44,520 --> 00:54:46,540 Men vi vil ikke komplicere tingene for nu. 1104 00:54:46,540 --> 00:54:50,440 I stedet hvis du kunne gå til ikke denne side, 1105 00:54:50,440 --> 00:55:02,690 men-- lad mig flytte dette rundt i order-- gå til, hvis du kunne, denne side her. 1106 00:55:02,690 --> 00:55:03,592 Denne webadresse her. 1107 00:55:03,592 --> 00:55:04,550 Det er i dagens lysbilleder. 1108 00:55:04,550 --> 00:55:07,133 Du har måske at genindlæse fordi Jeg har tilføjet et par ting. 1109 00:55:07,133 --> 00:55:09,970 1110 00:55:09,970 --> 00:55:13,890 >> Men gå der, hvor nogle gåder venter. 1111 00:55:13,890 --> 00:55:16,670 Og det vil give os en chance, i en lidt mere sjov sammenhæng, 1112 00:55:16,670 --> 00:55:20,610 at fuske med nogle JavaScript. 1113 00:55:20,610 --> 00:55:25,505 Og når du får der, Jeg vil forklare, hvad der 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 Set blå. 1118 00:56:03,562 --> 00:56:11,030 1119 00:56:11,030 --> 00:56:13,930 Sætter grøn, indstiller rød. 1120 00:56:13,930 --> 00:56:19,220 1121 00:56:19,220 --> 00:56:20,220 Ups. 1122 00:56:20,220 --> 00:56:22,330 Undskyld. 1123 00:56:22,330 --> 00:56:27,630 >> Dette er omfanget af vores dokumentation for denne udfordring. 1124 00:56:27,630 --> 00:56:29,920 Og det kommer til at fungere som følger. 1125 00:56:29,920 --> 00:56:33,340 Så hvad du har på dette side er en hel masse 1126 00:56:33,340 --> 00:56:38,024 af billeddata puslespil med en kammerat på Stanford University. 1127 00:56:38,024 --> 00:56:41,190 Så hvad du ser her er næsten form for en af ​​de magiske øje puslespil, 1128 00:56:41,190 --> 00:56:43,815 men hvis du bare stirrer på det, intet kommer til at poppe ud på dig. 1129 00:56:43,815 --> 00:56:46,000 Snarere noget er skjult i dette billede. 1130 00:56:46,000 --> 00:56:47,790 Og det er skjult på følgende måde. 1131 00:56:47,790 --> 00:56:51,740 Billeder, som du måske ved, kan være sammensat af blot tre farver. 1132 00:56:51,740 --> 00:56:53,346 Nogle røde, nogle blå, og nogle grønne. 1133 00:56:53,346 --> 00:56:55,220 Og vi kan gøre hele farver i regnbuen 1134 00:56:55,220 --> 00:56:57,570 ved at blande disse tre farver eller anden måde. 1135 00:56:57,570 --> 00:57:01,940 >> Så det ser for det meste grønt og blå, men som Nick siger her, 1136 00:57:01,940 --> 00:57:04,060 dette jern puslespil billede er et puslespil. 1137 00:57:04,060 --> 00:57:06,780 Den indeholder et billede af noget berømt imidlertid 1138 00:57:06,780 --> 00:57:08,310 billedet er forvrænget. 1139 00:57:08,310 --> 00:57:11,500 Den berømte objektet er i de røde værdier. 1140 00:57:11,500 --> 00:57:13,810 Men den røde værdier er alle blevet divideret med 10. 1141 00:57:13,810 --> 00:57:16,230 Så de er for små med en faktor 10. 1142 00:57:16,230 --> 00:57:18,280 Så med andre ord, Nick tog et originalt billede, 1143 00:57:18,280 --> 00:57:21,500 og han desaturerede alle af den røde fra det, 1144 00:57:21,500 --> 00:57:23,850 sænke mængden af ​​røde blæk, hvis du vil, i den. 1145 00:57:23,850 --> 00:57:26,060 >> De blå og grønne værdier er alle lige meningsløst, 1146 00:57:26,060 --> 00:57:30,000 tilfældige værdier, alias støj designet at tilsløre det virkelige billede. 1147 00:57:30,000 --> 00:57:32,250 Så hvad Nick gjorde, var han tonet ned den røde og derefter 1148 00:57:32,250 --> 00:57:34,380 han bare kastede tilfældig mængder af blå og grøn 1149 00:57:34,380 --> 00:57:37,590 på billedet til slags obskure hvad er faktisk stadig. 1150 00:57:37,590 --> 00:57:41,089 Du skal fortryde disse forvridninger at afsløre billedet. 1151 00:57:41,089 --> 00:57:44,255 Først indstille alle de blå og grønne værdier til nul for at få dem ud af vejen, 1152 00:57:44,255 --> 00:57:48,700 og se på resultatet. Derefter multipliceres hver red værdi med 10, 1153 00:57:48,700 --> 00:57:51,720 skalering tilbage op til cirka sin endelige værdi. 1154 00:57:51,720 --> 00:57:53,035 Hvad er den berømte objekt? 1155 00:57:53,035 --> 00:57:57,920 >> Så alt du har denne rektangel i din browser lige nu. 1156 00:57:57,920 --> 00:58:00,830 Og bemærke, at der er en vis forret kode, så at sige. 1157 00:58:00,830 --> 00:58:04,370 Dette er JavaScript-kode, Nick har skrevet til dig. 1158 00:58:04,370 --> 00:58:07,250 Og bemærke, at der er en linie i midten, 1159 00:58:07,250 --> 00:58:10,380 starter med en skråstreg skråstreg, der er hvad der generelt kaldes en kommentar. 1160 00:58:10,380 --> 00:58:14,660 Det betyder, at det er en sætning til programmøren som ikke har nogen funktionel betydning. 1161 00:58:14,660 --> 00:58:16,520 Det er bare en visuel cue til mennesket. 1162 00:58:16,520 --> 00:58:18,670 >> Så du kan gå videre og slette bare den linje, 1163 00:58:18,670 --> 00:58:22,214 og være super omhyggelig med ikke at slette eller ændre noget andet. 1164 00:58:22,214 --> 00:58:25,130 Og lad mig bare gå dig gennem hvad denne kode gør, og jeg vil overlade det 1165 00:58:25,130 --> 00:58:28,580 til dig at finde ud af hemmeligheden billede. 1166 00:58:28,580 --> 00:58:32,226 Denne første linje her, at jeg har bare fremhævede giver dig følgende. 1167 00:58:32,226 --> 00:58:34,100 På venstre side, du har, hvad der kaldes 1168 00:58:34,100 --> 00:58:39,140 en variabel, Nick har vilkårligt, men med rimelighed kaldes im for billedet. 1169 00:58:39,140 --> 00:58:41,660 På højre side af at lige tegn, 1170 00:58:41,660 --> 00:58:45,240 han siger give mig en ny tilbud, citat slut "simpel billede". 1171 00:58:45,240 --> 00:58:49,680 >> Simple billede i denne forbindelse er, hvad der kaldes en klasse, godt, 1172 00:58:49,680 --> 00:58:53,910 Det er lidt ligesom en class-- teknisk en prototype-- men virkelig, 1173 00:58:53,910 --> 00:58:58,000 Dette giver mig et nyt objekt, hvis indhold 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, og Nick oprettet denne forestilling om en simpel billede 1176 00:59:03,190 --> 00:59:05,920 så vi kan, for pædagogisk formål, lege med billedet 1177 00:59:05,920 --> 00:59:09,790 og ændre dets røde, grøn og blå værdier. 1178 00:59:09,790 --> 00:59:11,750 >> Og hvordan gør vi det? 1179 00:59:11,750 --> 00:59:15,360 Denne noget kryptiske syntaks her er lidt ligesom den gentagne blok 1180 00:59:15,360 --> 00:59:19,140 at nogle af jer så i Scratch tidligere i dag, hvor du kan gentage 10 gange. 1181 00:59:19,140 --> 00:59:22,220 I dette tilfælde, Nick har ikke hardcodede en række ligesom 10. 1182 00:59:22,220 --> 00:59:28,020 I stedet siger han, initialisere en variabel kaldet x til 0, 1183 00:59:28,020 --> 00:59:33,180 kontrollere, om x er mindre end bredden af ​​billedet. 1184 00:59:33,180 --> 00:59:38,160 >> Og således være mere korrekt, billede er det variabel, prik betyder gå inde i det 1185 00:59:38,160 --> 00:59:40,900 og få sin bredde, og derefter åbne parentes, lukket 1186 00:59:40,900 --> 00:59:43,687 parentes er bare en programmør måde for at sige det er en funktion. 1187 00:59:43,687 --> 00:59:44,520 Dette er en procedure. 1188 00:59:44,520 --> 00:59:46,430 Dette er funktionalitet en anden skrev. 1189 00:59:46,430 --> 00:59:48,570 Brug den og give mig tilbage et svar. 1190 00:59:48,570 --> 00:59:53,610 Og så x ++ er en fancy måde siger, efter at du har gjort dette én gang, 1191 00:59:53,610 --> 00:59:55,850 tilvækst x med 1. 1192 00:59:55,850 --> 00:59:58,760 Med andre ord er dette er en programmør måde 1193 00:59:58,760 --> 01:00:05,760 inducere en løkke, der er vil gentage over 1194 01:00:05,760 --> 01:00:10,410 alle kolonnerne i et billede. 1195 01:00:10,410 --> 01:00:14,790 >> Et billede er bare et gitter af prikker, rækker og kolonner af prikker. 1196 01:00:14,790 --> 01:00:18,270 Dette er en måde at iteration over alle disse kolonner. 1197 01:00:18,270 --> 01:00:20,770 Og på indersiden, i mellemtiden, vi iteration 1198 01:00:20,770 --> 01:00:24,030 over højder, her og her og her. 1199 01:00:24,030 --> 01:00:29,442 Så dette er blot en måde at traipsing, næsten som en gammel skole skrivemaskine, 1200 01:00:29,442 --> 01:00:32,230 bare gå over hele billedet iterativt. 1201 01:00:32,230 --> 01:00:36,370 Selv det er ikke helt helt klar, bare tage på tro for nu, 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 at give dig mulighed for iterativt se ved hver pixel, hver prik i billedet. 1204 01:00:43,090 --> 01:00:43,790 >> Hvad er en pixel? 1205 01:00:43,790 --> 01:00:46,250 Nå, for at være klar, hvis vi ser ved den oprindelige og zoome ind, 1206 01:00:46,250 --> 01:00:49,060 hvis du virkelig lægge dine øjne til computerskærmen, det er 1207 01:00:49,060 --> 01:00:53,510 bare en hel masse prikker, flere tusinde prikker pakkes sammen der. 1208 01:00:53,510 --> 01:00:56,180 Og så hvad er du om at gøre? 1209 01:00:56,180 --> 01:00:59,240 Hver af disse prikker, en endelig definition, 1210 01:00:59,240 --> 01:01:06,350 er et resultat af, hvad der er generelt kaldet RGB, rød, grøn, blå, hvilket 1211 01:01:06,350 --> 01:01:09,940 igen, kan kombineres til at give dig nogen antal farver. 1212 01:01:09,940 --> 01:01:13,200 >> Faktisk, hvis du kan huske fra mange, mange år siden, 1213 01:01:13,200 --> 01:01:17,320 projektor skærme som disse ting bruges til at have ikke én linse, men tre. 1214 01:01:17,320 --> 01:01:20,700 En af dem spytte rødt lys, en af dem spytte grønt lys, en af ​​dem 1215 01:01:20,700 --> 01:01:21,600 spytte ud blåt lys. 1216 01:01:21,600 --> 01:01:24,391 Og hvis du var i en mellemskole ligesom jeg var, hvor de var aldrig 1217 01:01:24,391 --> 01:01:27,000 justeret korrekt, du var altid se historie film 1218 01:01:27,000 --> 01:01:29,770 der var lidt forvrænget, fordi de tre farver var ikke 1219 01:01:29,770 --> 01:01:30,970 kombinere korrekt. 1220 01:01:30,970 --> 01:01:36,330 >> Men det viser sig, at hver af disse værdier røde, grønne og blå, 1221 01:01:36,330 --> 01:01:37,980 kan have en række forbundet med dem. 1222 01:01:37,980 --> 01:01:42,500 For eksempel 0 til rød betyder ingen rød, 0 for grøn betyder ingen grøn, 1223 01:01:42,500 --> 01:01:45,120 og 0 for blå betyder ingen blå. 1224 01:01:45,120 --> 01:01:49,403 Så hvis du ikke har nogen rød, ingen grøn, og ingen blå, hvad farve har du? 1225 01:01:49,403 --> 01:01:51,009 >> PUBLIKUM: [uhørligt] 1226 01:01:51,009 --> 01:01:52,800 DAVID MALAN: Du ville håber det, det er hvidt. 1227 01:01:52,800 --> 01:01:55,333 Desværre er dette operates-- undskyld? 1228 01:01:55,333 --> 01:01:56,380 >> PUBLIKUM: [uhørligt] 1229 01:01:56,380 --> 01:01:58,630 DAVID MALAN: Så du faktisk har sort, i dette tilfælde. 1230 01:01:58,630 --> 01:02:01,530 Så hvis du har ingen af ​​disse farver tændt, har du sort. 1231 01:02:01,530 --> 01:02:06,510 Men hvis du har, lad os sige en masse af dem, som en masse rød, 255 af den, 1232 01:02:06,510 --> 01:02:10,340 en masse grønt, og en masse af blå, der er hvidt. 1233 01:02:10,340 --> 01:02:12,230 Så det er de to yderpunkter. 1234 01:02:12,230 --> 01:02:17,460 Så ved denne logik, hvis jeg har en masse rød og ingen grønne og ingen blå, 1235 01:02:17,460 --> 01:02:18,485 hvad farve er det? 1236 01:02:18,485 --> 01:02:19,360 PUBLIKUM: [uhørligt] 1237 01:02:19,360 --> 01:02:20,610 DAVID MALAN: Right, naturligvis. 1238 01:02:20,610 --> 01:02:25,940 Og derefter ingen rød, masse grøn, ingen blå, og derefter 1239 01:02:25,940 --> 01:02:29,590 hvis du have-- godt, vil vi bare slutte det, bare fordi, men dette er naturligvis, 1240 01:02:29,590 --> 01:02:31,350 nu, er blå. 1241 01:02:31,350 --> 01:02:33,030 Og nu kan du kombinere disse farver. 1242 01:02:33,030 --> 01:02:36,430 Nu som en sidebemærkning, hvis nogen af ​​jer har nogensinde gjort nogle egentlige hjemmeside design, 1243 01:02:36,430 --> 01:02:38,360 du måske faktisk se symboler som dette. 1244 01:02:38,360 --> 01:02:42,030 FFF-- og faktisk, det er sandsynligvis ikke engang det. 1245 01:02:42,030 --> 01:02:44,380 Det er FFFFFF. 1246 01:02:44,380 --> 01:02:48,970 >> Nogen nogensinde set F'er og E s og A through-- så det viser sig, 1247 01:02:48,970 --> 01:02:52,970 vi talte i går om decimal, og i dag, sådan om decimal. 1248 01:02:52,970 --> 01:02:54,570 I dag har vi talt om binær. 1249 01:02:54,570 --> 01:02:59,010 Slår ud, hexadecimal er en meget fælles grundlag system til at bruge i computing. 1250 01:02:59,010 --> 01:03:04,960 Binary er to, decimal er 10, hex er 16. 1251 01:03:04,960 --> 01:03:08,640 Og det viser sig, hvordan du tæller i hexadecimal? 1252 01:03:08,640 --> 01:03:11,620 Nul, en, to, tre, fire, fem, seks, syv, otte, 1253 01:03:11,620 --> 01:03:14,730 ni, hvad bruger du efter ni? 1254 01:03:14,730 --> 01:03:16,600 Hvad er det næste nummer? 1255 01:03:16,600 --> 01:03:19,180 Vi har allerede brugt nul. 1256 01:03:19,180 --> 01:03:20,570 Jeg har brug for 16 af disse. 1257 01:03:20,570 --> 01:03:25,770 Nul, en, to, tre, fire, fem, seks, syv, otte, ni, 1258 01:03:25,770 --> 01:03:27,520 du har brug for nogle vilkårlige konvention. 1259 01:03:27,520 --> 01:03:30,810 >> Og hvad menneskeheden besluttet nogen tid siden, at efter ni kommer brevet 1260 01:03:30,810 --> 01:03:34,450 A og derefter B og derefter C. Så måde du tæller i hexadecimal 1261 01:03:34,450 --> 01:03:37,040 er nul, en, to, tre, fire, fem, seks, syv, otte, ni, 1262 01:03:37,040 --> 01:03:42,880 A, B, C, D, E, F, og der vil tælle dig hele vejen, viser det sig, at 15. 1263 01:03:42,880 --> 01:03:47,850 Så nul til 15 er nul gennem F. Nu hvorfor er det væsentligt? 1264 01:03:47,850 --> 01:03:51,570 Nå, når du har to F'er, det er hvordan du udtrykker 255. 1265 01:03:51,570 --> 01:03:54,350 >> Så lang historie kort, i verden af ​​Photoshop, 1266 01:03:54,350 --> 01:03:57,299 at grafisk design software, i verden af ​​web udvikling, 1267 01:03:57,299 --> 01:03:59,590 hvor du har masser af farver, selvfølgelig, at lege med, 1268 01:03:59,590 --> 01:04:02,350 ofte programmører vil udtrykke dem i hexadecimal, 1269 01:04:02,350 --> 01:04:05,260 bare fordi det har tendens at være lidt enklere. 1270 01:04:05,260 --> 01:04:07,850 Selvom ved første øjekast det er meget mere kompleks. 1271 01:04:07,850 --> 01:04:11,590 >> Så under alle omstændigheder er dette vigtigt fordi Nick på Stanford 1272 01:04:11,590 --> 01:04:15,100 har givet os seks stykker af funktionalitet at du, den spirende programmører, 1273 01:04:15,100 --> 01:04:17,060 vil nu have evnen til at bruge. 1274 01:04:17,060 --> 01:04:19,960 Indbygget i denne web side er seks funktioner, 1275 01:04:19,960 --> 01:04:21,820 seks procedurer, Nick skrev. 1276 01:04:21,820 --> 01:04:26,800 Tre af dem vil få dig et nummer, en rød, en grøn eller blå værdi. 1277 01:04:26,800 --> 01:04:28,787 Tre af dem vil sætte denne værdi. 1278 01:04:28,787 --> 01:04:30,620 Og disse understregninger er bare pladsholdere, 1279 01:04:30,620 --> 01:04:32,600 så du skal vide, hvad de er. 1280 01:04:32,600 --> 01:04:36,240 >> Så med disse tre funktioner, den første af disse ting 1281 01:04:36,240 --> 01:04:39,190 kommer til at være en x-koordinat, og den anden af ​​disse ting 1282 01:04:39,190 --> 01:04:40,700 vil være en y-koordinat. 1283 01:04:40,700 --> 01:04:44,650 Med andre ord, som dot, hvilket pixel ønsker du at få den grønne af, 1284 01:04:44,650 --> 01:04:46,480 få det blå, får røde af. 1285 01:04:46,480 --> 01:04:51,440 Og så her, det vil være x, dette vil være en y-værdi, 1286 01:04:51,440 --> 01:04:55,379 og dette vil være et tal. 1287 01:04:55,379 --> 01:04:57,170 Så lad os gøre det første linje i denne sammen 1288 01:04:57,170 --> 01:05:00,220 og så vil jeg overlade det til dig for at forsøge at udlede resten. 1289 01:05:00,220 --> 01:05:03,100 Så pr instruktionerne på denne side, vi har brug for 1290 01:05:03,100 --> 01:05:08,960 at øge den røde med en faktor 10, og vi er nødt til at fjerne den grønne 1291 01:05:08,960 --> 01:05:09,930 og fjern blå. 1292 01:05:09,930 --> 01:05:12,410 Lad os starte med sidstnævnte scenarier. 1293 01:05:12,410 --> 01:05:17,760 Så hvis jeg vil, og jeg har tænkt mig at indrykke ved hjælp af nogle rum, 1294 01:05:17,760 --> 01:05:22,291 hvis jeg ønsker at indstille den røde, den grønne eller blå værdi, 1295 01:05:22,291 --> 01:05:23,540 Jeg har tænkt mig at gøre følgende. 1296 01:05:23,540 --> 01:05:31,280 >> Billede, im.setBlue, og derefter baseret på mine anvisninger her, 1297 01:05:31,280 --> 01:05:36,700 hvad tre ting skal jeg skriv inde i parenteser nu? 1298 01:05:36,700 --> 01:05:41,960 Jeg har brug for x-værdien, den y-værdi, og hvilket nummer 1299 01:05:41,960 --> 01:05:48,770 skal jeg sætte her, hvis jeg ønsker at slippe af det blå, er baseret på denne historie her? 1300 01:05:48,770 --> 01:05:49,630 Bare nul. 1301 01:05:49,630 --> 01:05:52,420 Hvis jeg vil ikke blå, jeg er bare kommer til at ændre det til nul. 1302 01:05:52,420 --> 01:05:54,465 >> Lad os nu bare opsummere, hvad det gør. 1303 01:05:54,465 --> 01:05:56,970 1304 01:05:56,970 --> 01:06:01,170 Jeg har her på disse top anden og tredje linje, 1305 01:06:01,170 --> 01:06:04,080 Jeg hævdede to sløjfer, indlejrede løkker, hvis du 1306 01:06:04,080 --> 01:06:08,360 vil, som vil have den virkning, af forløber fra venstre mod højre, 1307 01:06:08,360 --> 01:06:11,590 top til bund over hele x værdier og alle Y-værdier. 1308 01:06:11,590 --> 01:06:15,167 Fordi igen, et billede er blot et gitter af rækker og kolonner. 1309 01:06:15,167 --> 01:06:17,000 Så dette vil få slippe af alle de blå. 1310 01:06:17,000 --> 01:06:18,627 Lad mig forlade den næste linje til dig. 1311 01:06:18,627 --> 01:06:20,043 Hvordan kan jeg slippe af med alle de grønne? 1312 01:06:20,043 --> 01:06:23,747 1313 01:06:23,747 --> 01:06:25,140 >> PUBLIKUM: [uhørligt] 1314 01:06:25,140 --> 01:06:26,151 >> DAVID MALAN: Nice. 1315 01:06:26,151 --> 01:06:28,260 >> PUBLIKUM: [uhørligt] 1316 01:06:28,260 --> 01:06:30,850 >> DAVID MALAN: Nice. 1317 01:06:30,850 --> 01:06:36,120 Og jeg har tænkt mig at zoome ud, og bare tage pleje af, at du ikke har gjort nogen stavefejl. 1318 01:06:36,120 --> 01:06:39,390 Og hvis du har det godt med hvad du har gjort, 1319 01:06:39,390 --> 01:06:42,936 gå videre og klik på knappen Kør / Gem og se, hvad du får. 1320 01:06:42,936 --> 01:06:46,982 1321 01:06:46,982 --> 01:06:48,690 Og igen, har vi gjort blot tre ændringer. 1322 01:06:48,690 --> 01:06:52,130 Vi udgår der først kommentere og erstattet den 1323 01:06:52,130 --> 01:06:53,575 med disse to linjer 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 har brug for at ramme på knappen Kør / Gem et par gange 1326 01:06:58,450 --> 01:07:01,190 at reparere noget. 1327 01:07:01,190 --> 01:07:03,610 >> Og lad mig også zoome ind på min kode så du kan transskribere. 1328 01:07:03,610 --> 01:07:04,110 God. 1329 01:07:04,110 --> 01:07:08,720 Så jeg ser Andrew har hvad synes at være en fejl. 1330 01:07:08,720 --> 01:07:11,110 Han har lige fået en stor sort rektangel på hans skærm. 1331 01:07:11,110 --> 01:07:13,120 Er der andre, har en stor sort firkant? 1332 01:07:13,120 --> 01:07:13,390 >> PUBLIKUM: Ja. 1333 01:07:13,390 --> 01:07:14,360 >> DAVID MALAN: Big sort rektangel? 1334 01:07:14,360 --> 01:07:16,068 OK, så lad os tænke om, hvad det betyder. 1335 01:07:16,068 --> 01:07:20,560 Vi sagde, at nul, nul, nul, så ingen grønne, ingen rød, ingen blå, 1336 01:07:20,560 --> 01:07:21,980 vil give dig sort. 1337 01:07:21,980 --> 01:07:24,467 Og det viser sig, at de fleste af vores bærbare computere 1338 01:07:24,467 --> 01:07:25,800 bare ikke har nok troskab. 1339 01:07:25,800 --> 01:07:27,750 Du kan ikke helt fortælle der er faktisk noget der. 1340 01:07:27,750 --> 01:07:30,340 Og hvis du slags måske læne skærmen frem og tilbage, 1341 01:07:30,340 --> 01:07:32,850 måske ser du en lidt noget der? 1342 01:07:32,850 --> 01:07:34,820 Måske, slags, en slags? 1343 01:07:34,820 --> 01:07:36,640 Det er ikke helt sort. 1344 01:07:36,640 --> 01:07:38,050 >> PUBLIKUM: [uhørligt] 1345 01:07:38,050 --> 01:07:39,510 >> DAVID MALAN: Spoiler! 1346 01:07:39,510 --> 01:07:42,610 Der er nogle røde der, men husker fra specifikationerne 1347 01:07:42,610 --> 01:07:44,940 af problemet, Nick tonet det ned. 1348 01:07:44,940 --> 01:07:47,860 Han desaturerede det noget, men ikke hele vejen til nul. 1349 01:07:47,860 --> 01:07:51,670 Så hvis vi ønsker at forstørre størrelsen af rød, lad mig foreslå dette trick. 1350 01:07:51,670 --> 01:07:53,750 Lad mig zoome ind på min skærm. 1351 01:07:53,750 --> 01:07:58,678 Og lad mig gå videre og sige beløb er lig im.getRed (x, y). 1352 01:07:58,678 --> 01:08:02,440 1353 01:08:02,440 --> 01:08:05,790 >> Denne linje kode giver mig noget, der hedder en variabel. 1354 01:08:05,790 --> 01:08:09,643 Jeg har vilkårligt, men, velsagtens, rimelighed kaldte min variabel hvad, 1355 01:08:09,643 --> 01:08:10,143 tilsyneladende? 1356 01:08:10,143 --> 01:08:13,530 1357 01:08:13,530 --> 01:08:14,340 Beløb. 1358 01:08:14,340 --> 01:08:14,980 Bare beløb. 1359 01:08:14,980 --> 01:08:16,960 Jeg kunne have kaldt det hvad jeg vil, men jeg er 1360 01:08:16,960 --> 01:08:19,490 ved hjælp af denne anden funktion at jeg beskrev tidligere 1361 01:08:19,490 --> 01:08:25,359 at få mængden af ​​røde 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 Hvad vil du gøre her? 1364 01:08:30,004 --> 01:08:32,910 1365 01:08:32,910 --> 01:08:33,619 Du er nødt til add-- 1366 01:08:33,619 --> 01:08:34,493 PUBLIKUM: [uhørligt] 1367 01:08:34,493 --> 01:08:36,279 DAVID MALAN: Ja, måske ganges med 10. 1368 01:08:36,279 --> 01:08:38,862 Og hvis du ikke kender dette, er jeg kommer til at gå videre og gøre dette. 1369 01:08:38,862 --> 01:08:42,060 Jeg har tænkt mig at gå videre og sige, jeg vil mængden af ​​røde 1370 01:08:42,060 --> 01:08:46,550 Jeg ønsker at være, hvad er på den røde, gange 10, 1371 01:08:46,550 --> 01:08:50,330 og stjernen, stjernen på din tastatur er til-- ikke bruger x. 1372 01:08:50,330 --> 01:08:51,569 Brug stjerne. 1373 01:08:51,569 --> 01:08:55,350 Det er sådan du formere tingene i de fleste programmeringssprog. 1374 01:08:55,350 --> 01:08:59,790 >> Så ifølge Kareem intuition, lagret i denne variabel kaldet beløb, 1375 01:08:59,790 --> 01:09:03,649 er, hvor meget rød vil jeg på placering xy. 1376 01:09:03,649 --> 01:09:11,500 Hvordan, nu gør jeg det pixel har dette nummer? 1377 01:09:11,500 --> 01:09:12,859 Du har allerede gjort det før. 1378 01:09:12,859 --> 01:09:17,666 Du sætter den grønne og den blå til ingen værdi, til nul. 1379 01:09:17,666 --> 01:09:18,540 PUBLIKUM: [uhørligt] 1380 01:09:18,540 --> 01:09:20,040 DAVID MALAN: Ja, godt du ikke vil have det til 10. 1381 01:09:20,040 --> 01:09:21,460 Du har allerede gjorde det math her. 1382 01:09:21,460 --> 01:09:24,779 Så vi får værdien af ​​rød, der er et lavt antal, formodentlig. 1383 01:09:24,779 --> 01:09:26,180 Vi multiplicere med 10. 1384 01:09:26,180 --> 01:09:29,139 Hvad du ønsker at gøre med det variable beløb nu? 1385 01:09:29,139 --> 01:09:30,130 >> PUBLIKUM: [uhørligt] 1386 01:09:30,130 --> 01:09:30,880 >> DAVID MALAN: Nice. 1387 01:09:30,880 --> 01:09:34,616 Så im.set-- hvad? 1388 01:09:34,616 --> 01:09:35,640 >> PUBLIKUM: setRed. 1389 01:09:35,640 --> 01:09:39,760 >> DAVID MALAN: setRed ved placering xy. 1390 01:09:39,760 --> 01:09:40,260 Ja. 1391 01:09:40,260 --> 01:09:41,200 Og bare beløb. 1392 01:09:41,200 --> 01:09:44,257 Med andre ord, en variabel er en midlertidig pladsholder 1393 01:09:44,257 --> 01:09:45,840 at du kan sætte noget, du ønsker i. 1394 01:09:45,840 --> 01:09:48,680 Vi tilfældigvis at sætte et nummer i det, i øjeblikket. 1395 01:09:48,680 --> 01:09:51,569 Vi har ganget det med 10 for at gøre det større. 1396 01:09:51,569 --> 01:09:56,480 Og nu er jeg erstatte den variable som tredje argument, eller input 1397 01:09:56,480 --> 01:09:57,810 at indstille rød. 1398 01:09:57,810 --> 01:10:00,440 Og så, at når du afslutte det, og tage til efterretning 1399 01:10:00,440 --> 01:10:02,330 af semikolon og parenteser. 1400 01:10:02,330 --> 01:10:06,290 >> Gå videre og klik køre / gemme igen, og du 1401 01:10:06,290 --> 01:10:10,690 skal se, magisk, hvad var faktisk der. [? Arwa,?] Hvad er der? 1402 01:10:10,690 --> 01:10:16,412 Eiffeltårnet i fuldgyldigt rød, ikke helt mørkt. 1403 01:10:16,412 --> 01:10:17,870 det burde være mere indlysende nu, ja? 1404 01:10:17,870 --> 01:10:18,840 OKAY. 1405 01:10:18,840 --> 01:10:20,215 Og Andrew, ikke mere sorte boks? 1406 01:10:20,215 --> 01:10:21,090 PUBLIKUM: [uhørligt] 1407 01:10:21,090 --> 01:10:22,180 DAVID MALAN: Okay. 1408 01:10:22,180 --> 01:10:23,610 Så jeg vil holde dette på skærmen. 1409 01:10:23,610 --> 01:10:27,010 Hvis du ønsker at spille med dette senere, vil jeg genskabe dette for dig. 1410 01:10:27,010 --> 01:10:29,140 Men denne kode gjorde præcis det. 1411 01:10:29,140 --> 01:10:31,460 Hvorfor gør vi ikke gøre en anden. 1412 01:10:31,460 --> 01:10:33,880 Lad mig rulle lidt ned. 1413 01:10:33,880 --> 01:10:36,760 >> Så i dette tilfælde, projektoren ikke rigtig gøre det retfærdighed. 1414 01:10:36,760 --> 01:10:40,486 Men på dine skærme, har du sandsynligvis har en meget rød og meget sort boks. 1415 01:10:40,486 --> 01:10:42,610 Også dette er et puslespil, der viser noget berømt. 1416 01:10:42,610 --> 01:10:44,193 Imidlertid har det billede blevet forvrænget. 1417 01:10:44,193 --> 01:10:47,740 Det sande billede, denne gang, er i de blå og grønne værdier. 1418 01:10:47,740 --> 01:10:51,820 Men de har alle været delt ved 20, så værdierne er meget små. 1419 01:10:51,820 --> 01:10:54,660 De røde værdier er lige tilfældige tal, støj. 1420 01:10:54,660 --> 01:10:57,190 Fortryd disse forvridninger at afsløre den sande billede. 1421 01:10:57,190 --> 01:10:59,200 >> Så Nick så fortæller dig hvad du skal gøre. 1422 01:10:59,200 --> 01:11:04,290 Indstil de røde værdier til nul, og så skal du ikke ødelægge, hvad det er. 1423 01:11:04,290 --> 01:11:07,110 Så ganger det blå og grønne værdier med 20. 1424 01:11:07,110 --> 01:11:09,820 Så det er næsten det samme program som før, 1425 01:11:09,820 --> 01:11:11,380 men du vende processen. 1426 01:11:11,380 --> 01:11:13,780 Og jeg vil sætte min kode fra før på skærmen i tilfælde 1427 01:11:13,780 --> 01:11:16,650 du ønsker at vende tilbage til det eller spille videre med at en. 1428 01:11:16,650 --> 01:11:18,100 Lad mig zoome ind på det. 1429 01:11:18,100 --> 01:11:21,450 Men løse kobber billede puslespil, nummer to. 1430 01:11:21,450 --> 01:11:37,623 1431 01:11:37,623 --> 01:11:40,580 >> PUBLIKUM: [uhørligt] 1432 01:11:40,580 --> 01:11:44,010 >> DAVID MALAN: OK, så dette er jeg ikke vil give så mange hints. 1433 01:11:44,010 --> 01:11:47,220 Så jeg would-- åh, lad os se, du har en stavefejl her. 1434 01:11:47,220 --> 01:11:49,621 Så husk, dette her faktisk har brug for at gå der. 1435 01:11:49,621 --> 01:11:52,870 Så hvad jeg ville foreslå, hvis du vil fokusere på denne ene, er der svaret. 1436 01:11:52,870 --> 01:11:57,060 Hvis du ønsker at omskrive det, at bør få den første arbejdsdag. 1437 01:11:57,060 --> 01:11:59,910 Og så kan du bruge det som inspiration til den anden. 1438 01:11:59,910 --> 01:12:02,230 Pæn. 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 nysgerrige, det er et simpelt eksempel 1442 01:12:08,180 --> 01:12:11,080 af en videnskab eller en kunst kaldet steganografi, 1443 01:12:11,080 --> 01:12:14,100 kunsten at skjule oplysninger i billeder. 1444 01:12:14,100 --> 01:12:16,890 Typisk kan billederne være vandmærke meget åbenlyst 1445 01:12:16,890 --> 01:12:19,500 med et logo i bunden hjørne, men det er klart, du 1446 01:12:19,500 --> 01:12:22,070 kan være meget mere sofistikeret om det, og faktisk 1447 01:12:22,070 --> 01:12:25,050 skjule andre billeder i billederne eller anden måde med denne teknik. 1448 01:12:25,050 --> 01:12:59,890 1449 01:12:59,890 --> 01:13:05,770 >> Tag endnu 30 sekunder, og så vil vi i det mindste meddele, hvad du skal se. 1450 01:13:05,770 --> 01:13:08,330 Og jeg vil forlade den tredje en som en derhjemme motion, 1451 01:13:08,330 --> 01:13:11,353 Hvis du ønsker mere af en udfordre denne weekend. 1452 01:13:11,353 --> 01:13:18,240 1453 01:13:18,240 --> 01:13:20,390 Og jeg tror, ​​Andrew måske har fået det først. 1454 01:13:20,390 --> 01:13:22,645 Hvad er det andet billede, 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 denne gang. 1457 01:13:28,500 --> 01:13:31,140 Så igen, bare nogle enkle eksempler, hvis mål 1458 01:13:31,140 --> 01:13:35,040 er at give dig en fornemmelse af, hvordan Vi har oversat billedlig Scratch 1459 01:13:35,040 --> 01:13:40,410 blokke til mere irriterende og mere kompliceret kode, men alle de ideer 1460 01:13:40,410 --> 01:13:42,980 er stadig nøjagtig den samme, omend med indførelsen 1461 01:13:42,980 --> 01:13:48,380 nu af begrebet en variabel, bliver kunne lagre noget midlertidigt. 1462 01:13:48,380 --> 01:13:51,750 >> Lad os gøre en mere hands-on, bare at nu forbinde prikker 1463 01:13:51,750 --> 01:13:53,880 til noget lidt mere virkelige verden. 1464 01:13:53,880 --> 01:13:56,610 Når du er klar, hvis du kunne gå til denne URL på skærmen. 1465 01:13:56,610 --> 01:14:00,610 Det er også i din kopi af den dias, developers.google.com/maps~~V. 1466 01:14:00,610 --> 01:14:03,660 Lad os rent faktisk gør noget reelle, så at sige, på nettet 1467 01:14:03,660 --> 01:14:07,600 ved hjælp af Google Maps API, eller application programming interface, 1468 01:14:07,600 --> 01:14:08,940 på følgende måde. 1469 01:14:08,940 --> 01:14:12,341 >> Google, ligesom mange virksomheder, giver en masse fri funktionalitet 1470 01:14:12,341 --> 01:14:14,840 som du kan bruge til at opbygge din egne interessante applikationer. 1471 01:14:14,840 --> 01:14:18,890 Faktisk, hvis du nogensinde har brugt Uber at få en cab eller en bil, 1472 01:14:18,890 --> 01:14:21,640 du sikkert ved, at Uber har en kort og det viser biler på den. 1473 01:14:21,640 --> 01:14:24,870 Det vil sige, så godt som jeg kan fortælle, Google Maps API. 1474 01:14:24,870 --> 01:14:28,884 De er faktisk bruger Googles kort, men Uber er ikke en kortlægning selskab, 1475 01:14:28,884 --> 01:14:31,050 heller ikke ville det være en særlig interessant problem 1476 01:14:31,050 --> 01:14:33,510 at løse på toppen af ​​deres bil service problem. 1477 01:14:33,510 --> 01:14:35,510 Og så de er stående, igen, på skuldrene 1478 01:14:35,510 --> 01:14:37,520 af andre, Google i dette tilfælde. 1479 01:14:37,520 --> 01:14:42,850 Så de bruger Googles maps men deres egen bil tjenester og andre sådanne funktioner. 1480 01:14:42,850 --> 01:14:47,770 >> Så vi kommer til at drage fordel af dette for at gøre følgende. 1481 01:14:47,770 --> 01:14:50,230 Og hvis jeg har gået for hurtigt, bare kalde mig over i et øjeblik. 1482 01:14:50,230 --> 01:14:53,500 Glad for at opsummere nogle af billedet ting. 1483 01:14:53,500 --> 01:14:56,290 Du skulle se dig selv på en side som denne. 1484 01:14:56,290 --> 01:14:58,230 Så Googles rart, og de er blandt de bedste 1485 01:14:58,230 --> 01:15:01,364 tilvejebringe ikke kun APIs, men gratis API'er, som du 1486 01:15:01,364 --> 01:15:02,780 kan spille med eller kommercielt. 1487 01:15:02,780 --> 01:15:06,450 De begynder at oplade dig, hvis dit forbrug er høj, men jeg gik videre på forhånd 1488 01:15:06,450 --> 01:15:10,490 og underskrevet os op til en gratis konto at forhåbentlig 10 computere 1489 01:15:10,490 --> 01:15:12,480 vil ikke diskvalificere os for pludseligt. 1490 01:15:12,480 --> 01:15:14,320 Så forhåbentlig demonstration vil arbejde. 1491 01:15:14,320 --> 01:15:18,840 >> Og opdager, at de har API'er til Android, iOS, web, og web services, 1492 01:15:18,840 --> 01:15:19,620 hvad det er. 1493 01:15:19,620 --> 01:15:20,700 Lad os fokusere på nettet. 1494 01:15:20,700 --> 01:15:26,560 Så klik den lyserøde boks, web, og at vil føre dig, forhåbentlig, 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ået en hel masse API'er. 1497 01:15:29,335 --> 01:15:31,210 Og det kan være lidt overvældende i starten, 1498 01:15:31,210 --> 01:15:33,000 men jeg vil styre os igennem det, 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 klik at en. 1501 01:15:40,380 --> 01:15:49,360 Og der vil føre dig nu til følgende side, demoer og eksempelkode. 1502 01:15:49,360 --> 01:15:51,190 Lad mig zoome ud her. 1503 01:15:51,190 --> 01:15:56,300 Og lad mig få os at-- rulle ned til hvor der står quick start trin. 1504 01:15:56,300 --> 01:15:57,970 Din skærm skal se ud mine. 1505 01:15:57,970 --> 01:16:01,130 >> Og der er to trin, får en nøgle og begynde at udvikle. 1506 01:16:01,130 --> 01:16:04,190 Jeg allerede gjorde trin et til os, at få en såkaldt nøgle. 1507 01:16:04,190 --> 01:16:05,320 Og dette er en fælles idé. 1508 01:16:05,320 --> 01:16:09,210 En API nøgle er generelt bare et stort tilfældigt tal eller snor 1509 01:16:09,210 --> 01:16:11,130 at du skal at indsætte i din kode, 1510 01:16:11,130 --> 01:16:15,280 så Google ved, hvem du er, når du bruger deres service, deres API. 1511 01:16:15,280 --> 01:16:17,370 Betyder ikke vi er oplades noget. 1512 01:16:17,370 --> 01:16:21,030 Og nu, klik, i stedet for en, skal du klikke på begynde at udvikle. 1513 01:16:21,030 --> 01:16:25,990 Hvis du bare kunne vinke mig over, hvis ikke sikker på, hvor vi er. 1514 01:16:25,990 --> 01:16:28,040 >> Så vi vil bare ridse overflade, her, men hvad 1515 01:16:28,040 --> 01:16:31,000 Jeg troede ville være overbevisende er rent faktisk at have os alle, 1516 01:16:31,000 --> 01:16:34,240 hjælp Cloud9 i ét vindue og denne tutorial i et andet vindue, 1517 01:16:34,240 --> 01:16:37,120 lader faktisk få vores egen ansøgning op at køre 1518 01:16:37,120 --> 01:16:40,920 der integrerer en brugerdefineret Google kort i vores egen hjemmeside, 1519 01:16:40,920 --> 01:16:43,010 og derefter tilføjer en eller to funktioner. 1520 01:16:43,010 --> 01:16:45,520 Men vi vil bare ridse overfladen af, hvad vi kan gøre. 1521 01:16:45,520 --> 01:16:47,020 >> Så bare en hurtig tilregnelighed check. 1522 01:16:47,020 --> 01:16:49,740 Er alle på denne side, Google Maps JavaScript API? 1523 01:16:49,740 --> 01:16:50,872 Skal sige at komme i gang. 1524 01:16:50,872 --> 01:16:53,330 Vi kommer ikke til at gå igennem det hele som helst måde. 1525 01:16:53,330 --> 01:16:58,090 OK, i en anden fane, hvis du ikke gør har den åben, går ind i Cloud9 1526 01:16:58,090 --> 01:17:03,500 og få dig selv til bare en ny fane, i sidste ende. 1527 01:17:03,500 --> 01:17:11,070 Så igen, c9.io fra i går, c9.io, og bare oprette en ny fil. 1528 01:17:11,070 --> 01:17:13,500 Og gå videre og opkald det hvad du vil. 1529 01:17:13,500 --> 01:17:16,495 Jeg kaldte mine map.html. 1530 01:17:16,495 --> 01:17:17,870 Kald det noget der ender på .html. 1531 01:17:17,870 --> 01:17:23,930 1532 01:17:23,930 --> 01:17:26,580 Og du skal være nogenlunde hvor jeg er i denne proces 1533 01:17:26,580 --> 01:17:31,470 med blot en blinkende prompt i en tom Fanen kaldes noget lignende map.html. 1534 01:17:31,470 --> 01:17:35,808 1535 01:17:35,808 --> 01:17:38,148 Eller fil, ny fil denne gang. 1536 01:17:38,148 --> 01:17:41,960 1537 01:17:41,960 --> 01:17:48,000 >> Og nu, over på den Google Maps JavaScript API, 1538 01:17:48,000 --> 01:17:50,010 vi vil springe læsning gennem alle denne tekst. 1539 01:17:50,010 --> 01:17:53,760 Men se, at hej verden er ja overalt, du ser det nu. 1540 01:17:53,760 --> 01:17:58,020 Hej verden har denne store farverige eksempel på en hel masse HTML. 1541 01:17:58,020 --> 01:18:03,590 Gå videre og kopiere og indsætte kun at HTML, så fra doc typen øverst 1542 01:18:03,590 --> 01:18:08,810 hele vejen til den tætte HTML-tag, gå videre og kopiere alle at-- igen, 1543 01:18:08,810 --> 01:18:14,430 det er under hello verden example-- og indsæt det i din Cloud9 fane, 1544 01:18:14,430 --> 01:18:17,996 så nu din skærm skal se nogenlunde som mit. 1545 01:18:17,996 --> 01:18:22,280 1546 01:18:22,280 --> 01:18:24,520 >> Og du kan gemme den, men ikke indlæse det endnu. 1547 01:18:24,520 --> 01:18:26,290 Lad os først se på koden, og se, om vi 1548 01:18:26,290 --> 01:18:29,110 kan ikke udlede eller lære fra, hvad det er Google 1549 01:18:29,110 --> 01:18:30,860 har haft os blindt kopiere og indsætte. 1550 01:18:30,860 --> 01:18:33,334 De ønsker bare at hjælpe, bogstaveligt, få os startede, 1551 01:18:33,334 --> 01:18:35,500 men der er ikke så meget kompleksitet faktisk er der. 1552 01:18:35,500 --> 01:18:40,100 1553 01:18:40,100 --> 01:18:42,210 Eventuelle spørgsmål endnu? 1554 01:18:42,210 --> 01:18:43,790 Vi er sikre på at gå videre? 1555 01:18:43,790 --> 01:18:44,330 OKAY. 1556 01:18:44,330 --> 01:18:46,800 >> Så hurtigt, lad os bare gøre nogle hurtige sundhedstjek. 1557 01:18:46,800 --> 01:18:48,800 Linje en af ​​hvad jeg se, og forhåbentlig, du 1558 01:18:48,800 --> 01:18:51,710 se, hvad betyder det, DOCTYPE HTML? 1559 01:18:51,710 --> 01:18:52,385 Kareem, huske? 1560 01:18:52,385 --> 01:18:53,260 PUBLIKUM: [uhørligt] 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 mellemtiden, linje to på skærm betyder her hey browser, 1564 01:18:57,950 --> 01:18:59,482 her kommer den egentlige HTML. 1565 01:18:59,482 --> 01:19:01,440 Linje tre er hey browser, her kommer hovedet. 1566 01:19:01,440 --> 01:19:04,260 Linje fire er naturligvis, Hey browser, her kommer titlen. 1567 01:19:04,260 --> 01:19:07,780 Hvad betyder linje fem gøre? 1568 01:19:07,780 --> 01:19:09,930 Faktisk er dette ikke gør virkelig gøre noget for os. 1569 01:19:09,930 --> 01:19:13,340 I dette tilfælde er det kun ændres størrelsen siden til en standard. Linje seks, 1570 01:19:13,340 --> 01:19:16,140 Vi har ikke talt om, men det angiver tegnsæt. 1571 01:19:16,140 --> 01:19:19,181 Der er forskellige måder at koder filer, især for fremmedsprog. 1572 01:19:19,181 --> 01:19:21,100 UTF-8 bare en tendens til at være standard. 1573 01:19:21,100 --> 01:19:26,580 >> Så nu vil vi se på linje syv til 16, nogle CSS. 1574 01:19:26,580 --> 01:19:29,260 Og selvom vi har ikke set alle disse ting før, 1575 01:19:29,260 --> 01:19:30,810 vi kan slags udlede. 1576 01:19:30,810 --> 01:19:37,075 Så linje otte midler, hey browser, gælder alle de følgende, som to tags, 1577 01:19:37,075 --> 01:19:37,575 tilsyneladende? 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å kommaet er den nye ting der. 1581 01:19:43,200 --> 01:19:46,140 Og det er bare en måde at specificere flere tags på en gang. 1582 01:19:46,140 --> 01:19:47,640 >> Så har vi de krøllede parenteser. 1583 01:19:47,640 --> 01:19:51,170 Så tilsyneladende, dette fortæller browseren, gøre højden af ​​siden 100%. 1584 01:19:51,170 --> 01:19:54,170 Så selv om der er meget lidt indhold, gør hele siden, 1585 01:19:54,170 --> 01:19:55,530 gøre ting fylde siden. 1586 01:19:55,530 --> 01:19:57,524 Lav kortet i sidste ende fylde siden. 1587 01:19:57,524 --> 01:19:58,690 Margin, hvad betyder det? 1588 01:19:58,690 --> 01:20:01,559 Det er som regel ligesom vilkårlig hvid plads omkring kanterne 1589 01:20:01,559 --> 01:20:04,350 at nogle browser designer bare besluttet skal være der, fordi det 1590 01:20:04,350 --> 01:20:05,540 slags gør tingene ser renere. 1591 01:20:05,540 --> 01:20:06,498 Men vi vil ikke have det. 1592 01:20:06,498 --> 01:20:08,710 Vi ønsker, at kortet vil hele vejen til kanterne. 1593 01:20:08,710 --> 01:20:10,930 Polstring, ligner i ånd til marginer. 1594 01:20:10,930 --> 01:20:14,980 Margener betyde udenfor, polstring midler inde, men det er den samme form for aftale. 1595 01:20:14,980 --> 01:20:17,520 Det er lidt af en buffer mellem dig og kanterne. 1596 01:20:17,520 --> 01:20:21,170 >> Og derefter linie 13 er en god chance for en hurtig gennemgang. 1597 01:20:21,170 --> 01:20:26,440 Hvad betyder skarp tegnet map betyde, eller hashtag map betyde? 1598 01:20:26,440 --> 01:20:29,650 Hvad betyder det refererer til, i princippet? 1599 01:20:29,650 --> 01:20:31,485 >> PUBLIKUM: [uhørligt] 1600 01:20:31,485 --> 01:20:32,360 DAVID MALAN: Præcis. 1601 01:20:32,360 --> 01:20:36,900 Denne egenskab er denne CSS ejendom gælder kun én ting, HTML-tag 1602 01:20:36,900 --> 01:20:41,180 der har et id af tilbud, citat slut "kort". 1603 01:20:41,180 --> 01:20:44,460 Og lad os nu hurtigt frem, rulle ned til bunden af ​​filen, som 1604 01:20:44,460 --> 01:20:49,860 er ikke alt for langt væk, og meddelelse om linjen 19, hvis du indsætter det præcis som jeg gjorde, 1605 01:20:49,860 --> 01:20:53,405 linie 19 har blot en div, som er en opdeling på siden, hvilket i går jeg 1606 01:20:53,405 --> 01:20:54,820 kaldet et rektangulært område. 1607 01:20:54,820 --> 01:20:55,820 Det har ikke noget i det. 1608 01:20:55,820 --> 01:20:57,550 Det er en åben tag, tæt tag. 1609 01:20:57,550 --> 01:20:59,490 Men det har et unikt id. 1610 01:20:59,490 --> 01:21:02,090 >> Så hvad synes at være sker her, er Google 1611 01:21:02,090 --> 01:21:05,880 er klargøring vores webside for at har en komplet 100% højde, 1612 01:21:05,880 --> 01:21:09,680 og ingen udfyldning, ingen margener, fordi hvad vi kommer til at sætte ind 1613 01:21:09,680 --> 01:21:13,647 af denne div, hvis unikke ID er kort, er en egentlig integreret kort. 1614 01:21:13,647 --> 01:21:15,480 Og vi vil have det til at fylde siden og ikke bare 1615 01:21:15,480 --> 01:21:17,560 være nogle lille rektangel i midten. 1616 01:21:17,560 --> 01:21:24,220 Så linje 14 på samme måde understreger, at kort selv bør have en højde på 100%. 1617 01:21:24,220 --> 01:21:29,220 >> Så nu mærke til mellem linjerne 20 og 28, dette er JavaScript-kode. 1618 01:21:29,220 --> 01:21:33,020 Og dette er, selvom det er syntaktisk lidt mærkeligt, 1619 01:21:33,020 --> 01:21:34,730 Der er ikke så meget foregår her. 1620 01:21:34,730 --> 01:21:39,310 I linie 21 er denne erklære noget, der hedder en variabel. 1621 01:21:39,310 --> 01:21:42,030 I stedet for at kalde det beløb, som vi gjorde før, 1622 01:21:42,030 --> 01:21:44,500 vi mere præcist at sige var, som netop betyder variabel. 1623 01:21:44,500 --> 01:21:46,520 Vi kunne have brugt det i Nicks kode, men han gjorde ikke, så jeg 1624 01:21:46,520 --> 01:21:48,190 ikke gider at gøre det enten. 1625 01:21:48,190 --> 01:21:50,240 Det er en variabel kaldet kort, og så er der 1626 01:21:50,240 --> 01:21:53,360 en funktion, der er tilsyneladende kaldet initMap. 1627 01:21:53,360 --> 01:21:55,780 >> Så det er ligesom vores egne brugerdefinerede brik i Scratch. 1628 01:21:55,780 --> 01:21:58,830 Vi har lavet et stykke af funktionalitet kaldet initMap, 1629 01:21:58,830 --> 01:22:00,980 og du kan slags udlede hvad sker der her. 1630 01:22:00,980 --> 01:22:02,930 På venstre side, vi har fået en variabel, 1631 01:22:02,930 --> 01:22:06,000 så vi kommer til at sætte følgende ting inde denne variabel, 1632 01:22:06,000 --> 01:22:07,362 fra højre mod venstre. 1633 01:22:07,362 --> 01:22:11,940 Den højre side siger, hey browser, giver mig en ny Google-kort. 1634 01:22:11,940 --> 01:22:16,490 Og google.maps.map er blot en funky måde for at angive, at denne funktionalitet 1635 01:22:16,490 --> 01:22:19,790 tilhører Google Maps. 1636 01:22:19,790 --> 01:22:23,010 >> Efter parentes, har vi set dette før, hey browser, får 1637 01:22:23,010 --> 01:22:29,210 mig elementerne i siden, den tag i den side, hvis unikt id is-- 1638 01:22:29,210 --> 01:22:30,710 >> PUBLIKUM: [uhørligt] 1639 01:22:30,710 --> 01:22:31,790 >> DAVID MALAN: --map. 1640 01:22:31,790 --> 01:22:35,770 Og hvad der foregår, godt, denne linje sammen, linie 23, 1641 01:22:35,770 --> 01:22:38,630 hovedsagelig siger, hey browser, gå få mig 1642 01:22:38,630 --> 01:22:42,800 at tomme div på siden hvis unikke ID er kort, 1643 01:22:42,800 --> 01:22:45,600 fordi jeg ønsker at indsætte ind i det-- injicere ind i det, 1644 01:22:45,600 --> 01:22:49,520 hvis du will-- en hel masse indhold der sker for at være kommer fra internettet, 1645 01:22:49,520 --> 01:22:50,427 efterfølgende. 1646 01:22:50,427 --> 01:22:52,010 Og Googles gør alt dette for os. 1647 01:22:52,010 --> 01:22:55,350 >> Så igen, i det slutningen af ​​dagen, vi har dette eksempel på abstraktion. 1648 01:22:55,350 --> 01:22:58,610 Jeg aner ikke hvad et kort er eller hvordan man gennemfører et kort API. 1649 01:22:58,610 --> 01:22:59,460 Vi behøver ikke at. 1650 01:22:59,460 --> 01:23:02,740 Vi skal bare fortælle kortet hvor at sætte sig selv, og lad 1651 01:23:02,740 --> 01:23:04,880 dem, der ligger til grund implementering detaljer til Google. 1652 01:23:04,880 --> 01:23:08,190 Nu er der tilsyneladende to stykker 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 Tilsyneladende midten af ​​kortet, og zoom-niveau, så at sige. 1655 01:23:16,450 --> 01:23:21,390 >> Og er der nogen genkende disse koordinater, breddegrad og længdegrad? 1656 01:23:21,390 --> 01:23:24,364 Sandsynligvis ikke, men vi kan gå tilbage til tutorial, bogstaveligt talt se. 1657 01:23:24,364 --> 01:23:25,780 Men vi vil se det på bare et øjeblik. 1658 01:23:25,780 --> 01:23:29,880 Zoom-niveau er en værdi mellem, det gør jeg ikke ved, en i 13 eller noget lignende. 1659 01:23:29,880 --> 01:23:32,880 Det har bare at gøre med, hvor langt du er zoomet ind eller ud, og det er det. 1660 01:23:32,880 --> 01:23:35,690 Og nu til allersidst af siden, varsel line 29-- 1661 01:23:35,690 --> 01:23:39,960 det er lidt grimt, fordi det wraps-- denne linje kode 1662 01:23:39,960 --> 01:23:44,570 er det, der downloader til browser Googles aktuelle API. 1663 01:23:44,570 --> 01:23:47,500 Alle af koden, at Googles ingeniører har skrevet, at gennemføre 1664 01:23:47,500 --> 01:23:50,000 Hele denne funktion i integrerbare kort. 1665 01:23:50,000 --> 01:23:51,470 >> Lad os nu ikke ændre noget. 1666 01:23:51,470 --> 01:23:54,761 Hvis du følger med, gå videre og bare gemme filen, hvis du rent faktisk har 1667 01:23:54,761 --> 01:23:55,760 hvad jeg har. 1668 01:23:55,760 --> 01:23:57,370 Gå til sin URL. 1669 01:23:57,370 --> 01:23:59,820 Du kan klikke på knappen Kør op toppen og der vil fortælle 1670 01:23:59,820 --> 01:24:03,050 du webadressen på din webserver igen. 1671 01:24:03,050 --> 01:24:06,010 Og det vil føre dig til en ny fane. 1672 01:24:06,010 --> 01:24:11,910 Hvis du klikker på Åbn for map.html, og odds er du er 1673 01:24:11,910 --> 01:24:15,520 kommer til at få en advarsel, en fejlmeddelelse, ja? 1674 01:24:15,520 --> 01:24:18,570 Fejlmeddelelse, fejlmeddelelse? 1675 01:24:18,570 --> 01:24:21,170 >> Så desværre, fejlen budskab er ikke, at oplysende 1676 01:24:21,170 --> 01:24:23,890 medmindre du rent faktisk åbner konsol, at særlige fane vi 1677 01:24:23,890 --> 01:24:27,110 holdes åbne i går og lidt tidligere i dag. 1678 01:24:27,110 --> 01:24:29,445 Men jeg faldt over dette tidligere, så jeg allerede 1679 01:24:29,445 --> 01:24:30,820 regnet ud, hvad løsningen er. 1680 01:24:30,820 --> 01:24:34,440 I dagens dias, eller snarere, i Cloud9, varsel 1681 01:24:34,440 --> 01:24:36,430 at vi ikke gjorde noget bevidst. 1682 01:24:36,430 --> 01:24:40,690 Bemærk at dette script tag i linie 29, hvis du læser igennem det, 1683 01:24:40,690 --> 01:24:44,440 det er ligesom maps.googleapis.com/ noget, noget, noget, 1684 01:24:44,440 --> 01:24:46,430 derefter mærke til nogen, en af ​​udviklerne, 1685 01:24:46,430 --> 01:24:50,040 skrev i al kapital breve, din API nøgle. 1686 01:24:50,040 --> 01:24:51,700 >> Vi er nødt til at indsætte noget derinde. 1687 01:24:51,700 --> 01:24:53,450 Og dette var trin Jeg gjorde for os før, 1688 01:24:53,450 --> 01:24:57,190 og igen de måske blackliste os, hvis pludselig, 12 eller flere af os 1689 01:24:57,190 --> 01:24:59,470 begynde at bruge den samme nøgle, men lad os se hvad der sker. 1690 01:24:59,470 --> 01:25:03,030 Så hvis du går ind i dagens dias, en slide senere, er der 1691 01:25:03,030 --> 01:25:07,070 denne meget funky udseende tekststreng. 1692 01:25:07,070 --> 01:25:12,230 Gå videre og bare kopiere det og indsætte den hvor der står dit API-nøgle. 1693 01:25:12,230 --> 01:25:15,120 Det er den jeg tilmeldt. 1694 01:25:15,120 --> 01:25:17,700 >> Og absolut ikke forsøge skrive det manuelt, 1695 01:25:17,700 --> 01:25:21,210 fordi det føles fyldt med stavefejl, potentielt. 1696 01:25:21,210 --> 01:25:23,260 Så bare kopiere og indsætte det. 1697 01:25:23,260 --> 01:25:26,090 Og det kommer til at gøre linjen længere, men nu, bare for at være klar, 1698 01:25:26,090 --> 01:25:29,540 det skal se lidt mere som dette, hvor nøglen er lig ikke 1699 01:25:29,540 --> 01:25:32,200 kapitaliserede råben på dig. 1700 01:25:32,200 --> 01:25:34,810 Gem din side, gå tilbage til den anden fane, genindlæse, 1701 01:25:34,810 --> 01:25:36,770 og håber at se et kort over, hvor? 1702 01:25:36,770 --> 01:25:37,790 >> PUBLIKUM: Australien. 1703 01:25:37,790 --> 01:25:38,748 >> DAVID MALAN: Australien. 1704 01:25:38,748 --> 01:25:41,200 Så tilsyneladende det er de GPS-koordinater af Australien. 1705 01:25:41,200 --> 01:25:44,491 Og lad mig gå rundt for bare et øjeblik og hjælpe alle, der er ikke helt der, 1706 01:25:44,491 --> 01:25:47,729 men lad mig foreslå, via Google, find GPS-koordinater af din egen hjemby 1707 01:25:47,729 --> 01:25:48,770 eller dit eget hjemland. 1708 01:25:48,770 --> 01:25:51,436 Og sandsynligvis Google kan slå denne op, eller Wikipedia kan fortælle dig. 1709 01:25:51,436 --> 01:25:54,410 Men vælge to forskellige værdier for breddegrad og længdegrad, 1710 01:25:54,410 --> 01:25:57,530 gå tilbage i og indsætte dem, og derefter genindlæse siden efter at have gemt 1711 01:25:57,530 --> 01:26:00,718 og se om du kan få en kort 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 færdig med at opfølgningen challenge-- 1714 01:26:08,042 --> 01:26:11,250 og jeg vil give lidt mindre retning, bevidst, så du bevidst 1715 01:26:11,250 --> 01:26:13,791 nødt til at kæmpe for et par minut med dokumentationen, 1716 01:26:13,791 --> 01:26:18,740 ændre kortets at være ikke denne tegneserieagtige standard, men en satellit kort. 1717 01:26:18,740 --> 01:26:24,600 Så du faktisk se satellit billedsprog i stedet for de smukke farver. 1718 01:26:24,600 --> 01:26:29,710 >> Og tippet jeg vil give dig er at ændre kortets type. 1719 01:26:29,710 --> 01:26:33,084 Gå tilbage til, at få startede side for inspiration. 1720 01:26:33,084 --> 01:26:40,599 1721 01:26:40,599 --> 01:26:42,390 Som du måske har forstået, hvis du leder efter, 1722 01:26:42,390 --> 01:26:44,250 der er så mange flere ting du kan gøre. 1723 01:26:44,250 --> 01:26:46,380 Nogle af jer har allerede ændret korttypen. 1724 01:26:46,380 --> 01:26:49,890 Men du kan do-- for eksempel, lad mig gå til noget, 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 af vores undergrads gjorde dette. 1727 01:26:53,470 --> 01:26:58,890 Vi centrerer vores kort i Harvard Yard og overlay alle disse bygningsdele navne, 1728 01:26:58,890 --> 01:27:01,070 og vi havde ham tilføje dette. 1729 01:27:01,070 --> 01:27:04,270 Så hvis jeg vil søge efter, for eksempel Matthews Hall, 1730 01:27:04,270 --> 01:27:05,730 vi har en lille rullemenu. 1731 01:27:05,730 --> 01:27:09,080 Og jeg tror han bruger Bootstrap, den bibliotek vi diskuterede tidligere for dette. 1732 01:27:09,080 --> 01:27:12,190 Og hvis du klikker på Matthews Hall, er det straks 1733 01:27:12,190 --> 01:27:14,790 springer kortet til en vis placering, og det viser 1734 01:27:14,790 --> 01:27:16,440 dig et billede i denne lille pop-up. 1735 01:27:16,440 --> 01:27:18,670 >> Men selv dette lille pop-up, vi ikke gennemføre. 1736 01:27:18,670 --> 01:27:27,521 Hvis jeg rulle ned på vores få startede side og kigge efter info-vinduer, 1737 01:27:27,521 --> 01:27:29,770 du vil se, at nogle af de funktionalitet, du selv 1738 01:27:29,770 --> 01:27:31,561 kan tilføje, om end med en smule mere kompliceret, 1739 01:27:31,561 --> 01:27:33,970 er noget, der hedder en info-vindue. 1740 01:27:33,970 --> 01:27:37,190 Og hvis jeg klikker et eksempel her, og det er, hvad der er sjovt, 1741 01:27:37,190 --> 01:27:40,530 du kan gøre ting som dette, klikke på en markør og derefter voila, 1742 01:27:40,530 --> 01:27:42,400 information popper op. 1743 01:27:42,400 --> 01:27:45,874 >> Så har vi ikke helt indført nok funktioner i JavaScript 1744 01:27:45,874 --> 01:27:49,040 at male et billede af præcis, hvordan du kunne wire alle disse ting sammen, 1745 01:27:49,040 --> 01:27:50,706 men vi har slags kradset i overfladen. 1746 01:27:50,706 --> 01:27:53,140 Faktisk hvad jeg lige gjorde, da Jeg klikkede på denne markør, 1747 01:27:53,140 --> 01:27:55,819 blev udløser en hændelse, et såkaldte ved klik begivenhed. 1748 01:27:55,819 --> 01:27:57,610 Og vi faktisk så en begivenhed tidligere i dag, 1749 01:27:57,610 --> 01:28:00,670 den såkaldte indsende begivenhed, da vi forhindrer 1750 01:28:00,670 --> 01:28:02,490 brugeren fra at søge til katte. 1751 01:28:02,490 --> 01:28:06,560 Så vi har slags plukket og choosed blandt alle disse forskellige funktioner, 1752 01:28:06,560 --> 01:28:08,990 at give dig en følelse, forhåbentlig, af, hvad du kan faktisk 1753 01:28:08,990 --> 01:28:11,000 gøre med en smule mere komfort i programmering, 1754 01:28:11,000 --> 01:28:12,587 og helt gratis ressourcer. 1755 01:28:12,587 --> 01:28:15,856 1756 01:28:15,856 --> 01:28:18,770 >> Nogen spørgsmål? 1757 01:28:18,770 --> 01:28:19,790 Ingen? 1758 01:28:19,790 --> 01:28:22,542 Dette er din sidste chance, mindst i dag, på en fredag, 1759 01:28:22,542 --> 01:28:25,000 at få noget fra brystet så du går ud af her 1760 01:28:25,000 --> 01:28:27,067 føler dig sikker 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 tilføje en ting mere? 1763 01:28:29,740 --> 01:28:32,720 >> DAVID MALAN: Åh min godhed. 1764 01:28:32,720 --> 01:28:35,260 Jeg har brug for at hvile i denne weekend, jeg tror. 1765 01:28:35,260 --> 01:28:36,180 Andre spørgsmål? 1766 01:28:36,180 --> 01:28:37,055 >> PUBLIKUM: [uhørligt] 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 plejede at være i stand til at sætte VB script, virtuelle grundlæggende script, 1770 01:28:49,310 --> 01:28:50,643 men der virkelig aldrig fanget på. 1771 01:28:50,643 --> 01:28:52,490 Så det korte svar er bare JavaScript. 1772 01:28:52,490 --> 01:28:55,144 1773 01:28:55,144 --> 01:28:55,810 Andre spørgsmål? 1774 01:28:55,810 --> 01:28:58,427 1775 01:28:58,427 --> 01:28:59,760 Okay, godt, lad mig gøre det. 1776 01:28:59,760 --> 01:29:02,070 Lad mig få fat vores kolleger udenfor. 1777 01:29:02,070 --> 01:29:04,500 De har nogle evaluering former, som de ønsker alle 1778 01:29:04,500 --> 01:29:06,310 at bruge et par minutter at udfylde. 1779 01:29:06,310 --> 01:29:08,775 De ønsker at indsamle denne form, og enhver dispensationer, som du måtte have udenfor. 1780 01:29:08,775 --> 01:29:10,240 De vil også have certifikater. 1781 01:29:10,240 --> 01:29:12,380 Jeg gætte der er stadig nogle snacks udenfor. 1782 01:29:12,380 --> 01:29:14,360 Lad mig passere disse ud, og hvis du har spørgsmål i mellemtiden, 1783 01:29:14,360 --> 01:29:17,120 Jeg vil gå rundt mere individuelt og vi kan få dig 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ørligt] 1786 01:29:18,754 --> 01:29:26,737 1787 01:29:26,737 --> 01:29:28,570 DAVID MALAN: Det er normalt sandt i disse dage. 1788 01:29:28,570 --> 01:29:30,730 Bestemt med web software, du hælder 1789 01:29:30,730 --> 01:29:32,901 på andre er du enten æstetisk bruger ting 1790 01:29:32,901 --> 01:29:35,400 ligesom Bootstrap, så du ikke nødt til at gennemføre det lave niveau 1791 01:29:35,400 --> 01:29:37,169 oplysninger om menuer og knapper og alt det. 1792 01:29:37,169 --> 01:29:39,210 Du hælder på nogen som Google, så du 1793 01:29:39,210 --> 01:29:42,050 behøver ikke at opbygge en Uber forretning og en kortlægning virksomhed, 1794 01:29:42,050 --> 01:29:44,850 og et vilkårligt antal lignende ansøgninger. 1795 01:29:44,850 --> 01:29:46,350 >> Faktisk logins er populære, også. 1796 01:29:46,350 --> 01:29:48,500 Hvis du har brugt Spotify eller vilkårligt antal hjemmesider, 1797 01:29:48,500 --> 01:29:51,210 du logge ind på nogle hjemmesider der bruger Facebook. 1798 01:29:51,210 --> 01:29:53,350 Så hvad er rart, der er API'er til logins 1799 01:29:53,350 --> 01:29:56,570 dag, så du ikke behøver at have din egen brugere bordet 1800 01:29:56,570 --> 01:29:59,440 og alle dine egen database nødvendigvis i samme grad. 1801 01:29:59,440 --> 01:30:01,795 Du kan lade Facebook gøre alt af denne kompleksitet for dig. 1802 01:30:01,795 --> 01:30:03,920 Så det er en spændende tid, ærligt, i programmeringen, 1803 01:30:03,920 --> 01:30:07,200 fordi der er så mange tredjepart tjenester, som du kan bygge oven på. 1804 01:30:07,200 --> 01:30:10,890 >> Og igen, den pris, du betaler, er enten økonomisk eller nedetid. 1805 01:30:10,890 --> 01:30:13,750 Hvis Google går ned, så gør Uber, velsagtens, 1806 01:30:13,750 --> 01:30:15,690 men måske det er en rimelig afvejning. 1807 01:30:15,690 --> 01:30:18,040 Og igen, det var et af temaerne, forhåbentlig for de sidste par dage, 1808 01:30:18,040 --> 01:30:18,780 er disse kompromisser. 1809 01:30:18,780 --> 01:30:20,738 Og sjældent er der går at være en rigtige svar. 1810 01:30:20,738 --> 01:30:25,700 Det er virkelig det bedre af to eller flere svar. 1811 01:30:25,700 --> 01:30:26,682 >> Pass disse omkring. 1812 01:30:26,682 --> 01:30:36,830 1813 01:30:36,830 --> 01:30:41,110 >> Og disse Cloud9 konti vil fortsætte at arbejde, i teorien, i al evighed. 1814 01:30:41,110 --> 01:30:45,000 Du kan finde, hvis du venter et par dage eller en uge eller mere at logge på igen ind i dem, 1815 01:30:45,000 --> 01:30:49,170 det kan tage som en eller fem minutter til at åbne op igen, 1816 01:30:49,170 --> 01:30:54,090 men det er bare fordi de sætter den på vågeblus for at spare på ressourcerne. 1817 01:30:54,090 --> 01:31:10,527