1 00:00:00,000 --> 00:00:00,060 2 00:00:00,060 --> 00:00:01,560 >> DAVID MALAN: Okej, vi är tillbaka. 3 00:00:01,560 --> 00:00:03,830 Så för den spännande Sammanfattningsvis vår sista avsnittet 4 00:00:03,830 --> 00:00:06,900 på webbprogrammering, vilket jag Trodde vi skulle använda som en generell term 5 00:00:06,900 --> 00:00:08,440 att fånga några kvarvarande ämnen. 6 00:00:08,440 --> 00:00:10,390 Så i slutet av dag, kommer vi faktiskt göra 7 00:00:10,390 --> 00:00:14,830 lite praktisk webbprogrammering med ett språk som kallas JavaScript. 8 00:00:14,830 --> 00:00:17,510 Och jag tror att vi tar en titt på något relaterat till bilder 9 00:00:17,510 --> 00:00:20,040 och upptäcka något hemlighet gömd i en bild, 10 00:00:20,040 --> 00:00:23,230 och även ta en titt på Google Maps API, Application Programming 11 00:00:23,230 --> 00:00:26,040 gränssnitt, som något representativ för den typ av programvara 12 00:00:26,040 --> 00:00:28,800 det är allt och fritt tillgänglig idag. 13 00:00:28,800 --> 00:00:32,029 >> Men varför inte ta en titt vid en ingrediens till denna värld 14 00:00:32,029 --> 00:00:34,070 att vi har sådan varit tar för givet existerar 15 00:00:34,070 --> 00:00:36,720 under en tid, en databas. 16 00:00:36,720 --> 00:00:39,150 För den senaste dagen och en halv vi har antagit 17 00:00:39,150 --> 00:00:42,910 att vi har tillgång till en databas, men vilket problem gör en databas lösa? 18 00:00:42,910 --> 00:00:45,540 Vad gör den för oss? 19 00:00:45,540 --> 00:00:47,030 Vad är det? 20 00:00:47,030 --> 00:00:48,679 >> PUBLIK: [OHÖRBART] 21 00:00:48,679 --> 00:00:51,720 DAVID MALAN: Håller all information, OK, och vilka typer av information 22 00:00:51,720 --> 00:00:53,186 kanske du sätter i det? 23 00:00:53,186 --> 00:00:54,590 >> PUBLIK: [OHÖRBART] 24 00:00:54,590 --> 00:00:56,450 >> DAVID MALAN: All information du sätter in det, får du tillbaka. 25 00:00:56,450 --> 00:00:57,070 Det är sant. 26 00:00:57,070 --> 00:01:01,900 Och på en typisk web-baserad webbplats eller webb tillämpning, vilka typer av information, 27 00:01:01,900 --> 00:01:03,385 specifikt, kan du sätta in? 28 00:01:03,385 --> 00:01:04,260 PUBLIK: [OHÖRBART] 29 00:01:04,260 --> 00:01:05,051 DAVID MALAN: Användare. 30 00:01:05,051 --> 00:01:07,000 Så vad är en användare? 31 00:01:07,000 --> 00:01:09,765 >> PUBLIK: [OHÖRBART] 32 00:01:09,765 --> 00:01:11,640 DAVID MALAN: OK, registrerat användare av webbplatsen. 33 00:01:11,640 --> 00:01:15,100 Och vad betyder det att lagra användarnas information? 34 00:01:15,100 --> 00:01:17,260 Vad komponerar en användare? 35 00:01:17,260 --> 00:01:18,331 En användare har vad? 36 00:01:18,331 --> 00:01:19,206 PUBLIK: [OHÖRBART] 37 00:01:19,206 --> 00:01:21,040 DAVID MALAN: Ja, personlig uppgifter, och jag gillar det. 38 00:01:21,040 --> 00:01:21,970 Låt oss vara mer exakt. 39 00:01:21,970 --> 00:01:25,275 Så att en användare har typiskt ett namn, vad kan en användare ha? 40 00:01:25,275 --> 00:01:26,150 PUBLIK: [OHÖRBART] 41 00:01:26,150 --> 00:01:29,130 DAVID MALAN: En addr-- OK, så förnamn, efternamn. 42 00:01:29,130 --> 00:01:29,630 Det är bra. 43 00:01:29,630 --> 00:01:31,463 Faktiskt, låt oss fixa att eftersom det kommer 44 00:01:31,463 --> 00:01:35,010 att öppna upp en möjlighet för diskussion, stillbild, ytterligare. 45 00:01:35,010 --> 00:01:39,090 Förnamn, efternamn, kön. 46 00:01:39,090 --> 00:01:41,820 47 00:01:41,820 --> 00:01:43,481 Ett ID av något slag. 48 00:01:43,481 --> 00:01:43,980 Vad annars? 49 00:01:43,980 --> 00:01:45,438 Jag hörde något annat innan också. 50 00:01:45,438 --> 00:01:51,600 E-post, postadress. 51 00:01:51,600 --> 00:01:58,170 >> Så låt oss stanna där och nu överväga inte vad vi lagrar i databasen, 52 00:01:58,170 --> 00:02:01,980 men-- och inte varför, eftersom det är kanske uppenbart att när du registrerar en användare, 53 00:02:01,980 --> 00:02:03,730 du vill komma ihåg dem under en längre tid. 54 00:02:03,730 --> 00:02:05,480 Du behöver inte vill att det ska bara lagras i RAM-minnet 55 00:02:05,480 --> 00:02:08,690 och bli forgotten-- så Låt oss fokusera på hur. 56 00:02:08,690 --> 00:02:11,700 >> Det visar sig att i världen av databaser, 57 00:02:11,700 --> 00:02:14,410 det finns åtminstone två typer i dessa dagar. 58 00:02:14,410 --> 00:02:20,010 Något som kallas en SQL-databas, Structured Query Language, 59 00:02:20,010 --> 00:02:24,770 eller, cutely namnges, NoSQL, vilket inte är SQL. 60 00:02:24,770 --> 00:02:26,980 Och den senare är en exempel på vad som kan 61 00:02:26,980 --> 00:02:30,660 att kallas ett objektorienterat, eller ett objekt butik, en databas 62 00:02:30,660 --> 00:02:36,010 som lagrar objekt, och inte, ursäkt mig, som vi snart kommer att se, rader. 63 00:02:36,010 --> 00:02:41,800 >> Så vi ska fokusera på bara ett ögonblick på den första av dessa, nämligen en SQL 64 00:02:41,800 --> 00:02:46,850 databas, om bara för att det är så bekant redan till någon 65 00:02:46,850 --> 00:02:51,070 som har använt Excel eller Google Kalkylark eller Apple 66 00:02:51,070 --> 00:02:53,740 Siffror eller någon standard kalkylprogram, 67 00:02:53,740 --> 00:02:56,040 eller ekvivalent, eller mer sofistikerat, 68 00:02:56,040 --> 00:02:58,610 något som Microsoft Access eller Oracle 69 00:02:58,610 --> 00:03:03,890 eller MySQL eller PostgreSQL, som alla är produktnamn för implementeringar 70 00:03:03,890 --> 00:03:04,865 av följande idé. 71 00:03:04,865 --> 00:03:10,350 >> En relationsdatabas är helt enkelt något som har rader och kolumner. 72 00:03:10,350 --> 00:03:12,850 Och rader och kolumner, Jag menar bokstavligen något 73 00:03:12,850 --> 00:03:21,860 så här, så där vi kan ha namnet på ett fält och dess typ hit. 74 00:03:21,860 --> 00:03:25,800 Och faktiskt, låt mig börja nu att kartlägga dessa. 75 00:03:25,800 --> 00:03:29,420 Så egentligen, jag vet inte varför jag ritade en separat diagram. 76 00:03:29,420 --> 00:03:30,780 Låt oss hålla det enkelt. 77 00:03:30,780 --> 00:03:34,830 >> Vi har rätt här början av vårt bord, där 78 00:03:34,830 --> 00:03:40,150 Detta är namnet på fältet och detta är datatypen, 79 00:03:40,150 --> 00:03:41,660 och typ menar jag följande. 80 00:03:41,660 --> 00:03:45,510 Är den ett antal, är det en sträng, en kort sträng som ett ord, 81 00:03:45,510 --> 00:03:49,340 är det ett stycke, är det binärdata, som en bild? 82 00:03:49,340 --> 00:03:51,980 Och låt oss bara retas detta isär för ett ögonblick. 83 00:03:51,980 --> 00:03:57,575 Så första namn, nummer, sträng, stor del av text-- 84 00:03:57,575 --> 00:03:58,450 PUBLIK: [OHÖRBART] 85 00:03:58,450 --> 00:03:59,616 DAVID MALAN: Ja, så sträng. 86 00:03:59,616 --> 00:04:04,744 Och i en databas sammanhang, vi ska vanligtvis kallar detta char fältet. 87 00:04:04,744 --> 00:04:07,660 Jag ska bara säga röding för nu, men vi är kommer att förfina detta i ett ögonblick. 88 00:04:07,660 --> 00:04:09,180 Teckenfältet. 89 00:04:09,180 --> 00:04:11,365 Efternamn är troligen samma. 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 >> Man eller kvinna, så det skulle kunna vara en röding fält. 93 00:04:18,310 --> 00:04:21,380 Det kan vara antingen citat, unquote "Manliga" eller citat, unquote "kvinnliga" 94 00:04:21,380 --> 00:04:23,650 eller det kan vara m eller f. 95 00:04:23,650 --> 00:04:26,540 Om du vill vara mer inkluderande, du kanske behöver ett tredje värde 96 00:04:26,540 --> 00:04:28,640 eller någon form av annat område helt och hållet. 97 00:04:28,640 --> 00:04:31,350 Och så att du kan använda sant falskt. 98 00:04:31,350 --> 00:04:35,036 Fältet skulle kunna kallas manlig, och då kan man säga sant eller falskt. 99 00:04:35,036 --> 00:04:38,160 Men det betyder inte nödvändigtvis fångar all information som du kanske vill. 100 00:04:38,160 --> 00:04:41,118 >> Så det visar sig att det finns en annan typ av fält som kan vara användbart här 101 00:04:41,118 --> 00:04:46,040 i en typisk databas som kallas en enum, där det är ett tecken fält, 102 00:04:46,040 --> 00:04:50,480 men du, formgivaren, komma till räkna upp de möjliga värden, 103 00:04:50,480 --> 00:04:54,630 som citerar, unquote "manliga", citationstecken, unquote "kvinnliga" och så vidare. 104 00:04:54,630 --> 00:04:57,620 Så att oavsett värde är i databasen, 105 00:04:57,620 --> 00:05:00,670 är verkligen teckenbaserad, men det måste vara en av dessa värden. 106 00:05:00,670 --> 00:05:03,520 Vi förmodligen inte skulle ha en enum för förnamn eller efternamn. 107 00:05:03,520 --> 00:05:05,630 Annars skulle vi ha att räkna upp, som namnet 108 00:05:05,630 --> 00:05:09,570 härstammar från, bokstavligen varje möjligt förnamn och efternamn. 109 00:05:09,570 --> 00:05:13,960 >> OK, så ID vad ska en ID vara? 110 00:05:13,960 --> 00:05:15,200 Ja, så kanske ett nummer. 111 00:05:15,200 --> 00:05:17,870 Så låt oss hålla fast vid att nu, nummer. 112 00:05:17,870 --> 00:05:22,010 Och i antal, är nummer lite för bred nu. 113 00:05:22,010 --> 00:05:23,900 För slutet av den andra dag, jag tycker vi 114 00:05:23,900 --> 00:05:25,280 bör vara lite mer exakt. 115 00:05:25,280 --> 00:05:29,280 Nummer kan betyda som det kan vara något som 1.236. 116 00:05:29,280 --> 00:05:31,500 Och det är förmodligen inte vad vi menar med ett ID. 117 00:05:31,500 --> 00:05:34,635 Vad menar vi troligen genom ett ID? 118 00:05:34,635 --> 00:05:36,382 >> PUBLIK: [OHÖRBART] 119 00:05:36,382 --> 00:05:38,590 DAVID MALAN: Åh, OK, så kanske är det inte ens ett tal. 120 00:05:38,590 --> 00:05:42,840 Kanske är det faktiskt en unik identifierare det är en sträng, som ett användarnamn. 121 00:05:42,840 --> 00:05:44,580 Så absolut, skulle kunna vara. 122 00:05:44,580 --> 00:05:46,730 Jag tror att någon förmodligen menade numerisk, men. 123 00:05:46,730 --> 00:05:48,460 Så låt oss stanna med det. 124 00:05:48,460 --> 00:05:49,320 Vilken typ av nummer? 125 00:05:49,320 --> 00:05:51,960 Vad är en mer precise-- ett heltal. 126 00:05:51,960 --> 00:05:56,710 Så ett antal som 0, 1, 2, 3, så vi kallar detta ett heltal. 127 00:05:56,710 --> 00:05:58,909 Och även då, jag kunde vara nitpicking, är det 128 00:05:58,909 --> 00:06:00,700 inte egentligen bara en allmän heltal du vill. 129 00:06:00,700 --> 00:06:04,340 Du har förmodligen inte vill negativa värden, bara för att det känns bara konstigt. 130 00:06:04,340 --> 00:06:06,070 Du vill förmodligen positiva heltal. 131 00:06:06,070 --> 00:06:07,920 Så du kan också uttrycka att i en databas, 132 00:06:07,920 --> 00:06:09,450 men nu ska vi säga heltal. 133 00:06:09,450 --> 00:06:10,650 >> E-post? 134 00:06:10,650 --> 00:06:13,550 Detta är förmodligen bara-- en vad? 135 00:06:13,550 --> 00:06:14,460 >> PUBLIK: [OHÖRBART] 136 00:06:14,460 --> 00:06:16,980 >> DAVID MALAN: Det är ett e-postmeddelande, men det är tecken, eller hur? 137 00:06:16,980 --> 00:06:19,813 Det har bara en funky karaktär som en "på" symbol eller något annat, 138 00:06:19,813 --> 00:06:21,580 men det är fortfarande ett tecken fält. 139 00:06:21,580 --> 00:06:23,900 Och postadress? 140 00:06:23,900 --> 00:06:25,360 Teckenfältet. 141 00:06:25,360 --> 00:06:31,400 Så det är en fin början, men Låt oss vara lite mer exakt nu. 142 00:06:31,400 --> 00:06:34,540 >> Så visar det sig att det i en databas, du ofta 143 00:06:34,540 --> 00:06:39,120 har ett val över mer raffinerad versioner av dessa saker. 144 00:06:39,120 --> 00:06:44,330 I själva verket, i en typisk SQL-databas, SQL, eller mer generellt, relationsdatabas, 145 00:06:44,330 --> 00:06:46,680 databaser med rader och kolumner, du ofta 146 00:06:46,680 --> 00:06:53,610 få att specificera inte endast den typ av field-- Låt mig göra några rum här-- 147 00:06:53,610 --> 00:06:56,600 men även längden. 148 00:06:56,600 --> 00:06:59,900 >> Så hur länge är ett förnamn? 149 00:06:59,900 --> 00:07:07,060 Jag tror, ​​D-A-V-I-D. OK, fick det jag förmodligen bara kränkt som halv 150 00:07:07,060 --> 00:07:11,260 av människorna i rummet, höger, eftersom era namn är längre än fem 151 00:07:11,260 --> 00:07:16,608 bokstäver, så fem verkar lite självisk och naiv, så vad är ett bättre värde? 152 00:07:16,608 --> 00:07:19,320 153 00:07:19,320 --> 00:07:24,330 10, okej, och jag tror Vi är 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 Varför jag inte ta tillvägagångssätt tidigare när vi 157 00:07:29,540 --> 00:07:31,081 talade om matriser och minne? 158 00:07:31,081 --> 00:07:32,450 Varför inte jag bara säga som 1000? 159 00:07:32,450 --> 00:07:35,260 Ingen namn går att vara längre än 1000. 160 00:07:35,260 --> 00:07:36,706 Trycka tillbaka. 161 00:07:36,706 --> 00:07:38,005 >> PUBLIK: [OHÖRBART] 162 00:07:38,005 --> 00:07:40,130 DAVID MALAN: Ja, det är slösaktig, höger, i synnerhet 163 00:07:40,130 --> 00:07:44,630 om de flesta namnen är bara fem eller tio eller 15 tecken, det är mycket slösaktigt. 164 00:07:44,630 --> 00:07:45,810 Så du vet vad? 165 00:07:45,810 --> 00:07:48,020 Detta är lite av en svår fråga. 166 00:07:48,020 --> 00:07:51,721 Nu kan vi verkligen analysera engelska och något annat språk namnger 167 00:07:51,721 --> 00:07:54,470 och räkna ut, ja, vad är det average-- genomsnitt inte riktigt 168 00:07:54,470 --> 00:07:57,150 hjälpa oss-- vad är max är antagligen vad vi verkligen vill. 169 00:07:57,150 --> 00:07:59,920 Men det visar sig att vi har även vissa val över typen här. 170 00:07:59,920 --> 00:08:03,400 >> I en typisk SQL-databas, du har något som kallas en röding fält 171 00:08:03,400 --> 00:08:07,505 och även en varchar, V-A-R, för variabel röding fält. 172 00:08:07,505 --> 00:08:08,630 Och skillnaden är. 173 00:08:08,630 --> 00:08:12,400 En röding fält, du konstruktör, måste ange i förväg 174 00:08:12,400 --> 00:08:14,900 den exakta längden av fältet. 175 00:08:14,900 --> 00:08:20,530 Så kanske förnamnet som 20 känns lite säker. 176 00:08:20,530 --> 00:08:23,950 Kanske måste göra vissa googling till se om det är faktiskt säker nog. 177 00:08:23,950 --> 00:08:26,910 Det är förmodligen ett namn med 21 tecken, men för nu, antar 20 178 00:08:26,910 --> 00:08:27,620 är säkert. 179 00:08:27,620 --> 00:08:30,070 >> En röding område skulle innebära i en databas som du 180 00:08:30,070 --> 00:08:33,289 är att använda 20 och alltid 20 tecken. 181 00:08:33,289 --> 00:08:37,419 Nu om det bara är D-A-V-I-D, 15 av dem bara kommer att vara tomma tecken, 182 00:08:37,419 --> 00:08:40,450 men du fortfarande använder alla 20 byte. 183 00:08:40,450 --> 00:08:46,302 En varchar fält, däremot, innebär den sträng bör vara upp till 20 tecken 184 00:08:46,302 --> 00:08:48,260 men om det är bara fem, du bara ska använda 185 00:08:48,260 --> 00:08:51,270 fem, eller kanske sex för en speciellt värde i slutet, 186 00:08:51,270 --> 00:08:54,980 sånt 0 diskuterade vi att betyder slutet på en karaktär 187 00:08:54,980 --> 00:08:56,790 sekvens i minnet. 188 00:08:56,790 --> 00:08:59,950 >> Så när tror du du kan välja röding 189 00:08:59,950 --> 00:09:05,240 kontra varchar, med tanke på att trade-off? 190 00:09:05,240 --> 00:09:09,321 Char använder att många tecken, varchar använder högst så många tecken. 191 00:09:09,321 --> 00:09:10,196 PUBLIK: [OHÖRBART] 192 00:09:10,196 --> 00:09:13,859 193 00:09:13,859 --> 00:09:16,900 DAVID MALAN: OK, när du vet längden på strängen ganska övertygande 194 00:09:16,900 --> 00:09:19,316 att bara använda röding, för om du vet det, bara lägga ner den. 195 00:09:19,316 --> 00:09:23,390 Och kanske det är sant för en zip kod, i USA, åtminstone 02138, 196 00:09:23,390 --> 00:09:26,660 det alltid kommer att vara fem tecken tills du lägga till streck fyra. 197 00:09:26,660 --> 00:09:29,750 Men du kanske har några värden för som du alltid vet längden. 198 00:09:29,750 --> 00:09:32,310 Eller kanske statliga symboler, som NY för New York, 199 00:09:32,310 --> 00:09:33,811 och MA för Massachusetts i USA. 200 00:09:33,811 --> 00:09:36,560 Kanske du har vissa situationer där det är helt rimligt, 201 00:09:36,560 --> 00:09:39,520 men vid den logik, varför är Vi overthinking även detta? 202 00:09:39,520 --> 00:09:41,800 Varför inte vi bara använda varchar och sedan ska vi bara 203 00:09:41,800 --> 00:09:46,730 alltid använda två tecken ändå, eller alltid använda fem tecken ändå? 204 00:09:46,730 --> 00:09:50,300 Varför inte bara spara varchar för allt genom denna logik? 205 00:09:50,300 --> 00:09:51,677 Det måste finnas en hake. 206 00:09:51,677 --> 00:09:52,552 PUBLIK: [OHÖRBART] 207 00:09:52,552 --> 00:09:54,952 208 00:09:54,952 --> 00:09:56,660 DAVID MALAN: Kan skriva något fel. 209 00:09:56,660 --> 00:09:58,090 Så det är sant. 210 00:09:58,090 --> 00:10:01,030 Men även då kan de inte använda mer minne än jag fördela. 211 00:10:01,030 --> 00:10:03,340 Jag har fortfarande den slutliga säga över längden, 212 00:10:03,340 --> 00:10:06,780 så att de inte kan oavsiktligt göra det misstaget, men en bra tanke. 213 00:10:06,780 --> 00:10:10,510 Det är mer subtil, men det är mycket relaterat till vår diskussion, faktiskt, av matriser 214 00:10:10,510 --> 00:10:12,390 och listor länkade tidigare. 215 00:10:12,390 --> 00:10:16,290 >> Det visar sig att en databas, om den vet att alla värden är 216 00:10:16,290 --> 00:10:19,250 av en fast längd, även om några av dessa värden är tomma, 217 00:10:19,250 --> 00:10:22,484 slags estetiskt ämne, D-A-V-I-D och sedan 15 råämnen, 218 00:10:22,484 --> 00:10:24,650 Det visar sig att om varje fältet har samma längd, 219 00:10:24,650 --> 00:10:28,670 mycket som en rad hade alla sina grejer rygg mot rygg mot rygg mot rygg så att 220 00:10:28,670 --> 00:10:33,480 du kan bara plus en för att komma till nästa värde, samma idé i en databastabell. 221 00:10:33,480 --> 00:10:37,550 Om alla din karaktär strängar är av samma längd, 222 00:10:37,550 --> 00:10:39,390 du har vad som kallas random access. 223 00:10:39,390 --> 00:10:41,850 Om alla strängarna är av längd 20, gör du inte bara 224 00:10:41,850 --> 00:10:45,230 göra plus ett du bara göra plus 20 plus 20 plus 20 plus 20, 225 00:10:45,230 --> 00:10:48,775 och du kan mycket snabbt bläddra igenom eller söka igenom alla dina data. 226 00:10:48,775 --> 00:10:54,420 >> En variabel röding fält, däremot, inte alltid har 20 tecken. 227 00:10:54,420 --> 00:10:58,000 Det kan ha 20 och sedan 15 och sedan 19 och sedan 10, 228 00:10:58,000 --> 00:11:00,720 och så om du vill söka genom det, kan du inte bara blint 229 00:11:00,720 --> 00:11:03,050 lägga till 20 bytes för att komma till nästa. 230 00:11:03,050 --> 00:11:07,280 Du har bokstavligen att söka igenom eftersom kanten av datastrukturen, 231 00:11:07,280 --> 00:11:08,340 om ni så vill, är trasig. 232 00:11:08,340 --> 00:11:11,480 Det går typ av in och ut baserat på den faktiska längden av strängen. 233 00:11:11,480 --> 00:11:14,460 Så när du vet längden, som Kareem säger, använd en röding fält, 234 00:11:14,460 --> 00:11:16,460 eftersom du får att effektiviteten av att vara 235 00:11:16,460 --> 00:11:19,170 kunna söka igenom det snabbare när du letar efter information, 236 00:11:19,170 --> 00:11:20,550 annat sätt använda en variabel. 237 00:11:20,550 --> 00:11:24,450 >> Tyvärr har jag inget bra svar hur länge namnet borde vara, 238 00:11:24,450 --> 00:11:26,360 men för något liknande ett namn, skulle jag säga 239 00:11:26,360 --> 00:11:28,470 en varchar är vanligt eftersom det inte går 240 00:11:28,470 --> 00:11:30,430 för att vara en fast längd för alla. 241 00:11:30,430 --> 00:11:33,650 20, jag vet inte, 20 känns lite tight. 242 00:11:33,650 --> 00:11:36,460 Låt oss bara säga 50, 50. 243 00:11:36,460 --> 00:11:39,210 Det spelar egentligen ingen kosta att mycket mer att säga 50 i stället för 40, 244 00:11:39,210 --> 00:11:41,260 men någon gång måste du att göra en bedömning. 245 00:11:41,260 --> 00:11:43,090 >> Mycket vanliga, ärligt talat, för [? historisk ?] 246 00:11:43,090 --> 00:11:47,670 orsaker, även om det är överdriven, det vill säga 255, eftersom en tid sedan, 247 00:11:47,670 --> 00:11:51,440 i populära databassystem, som MySQL, en fri öppen källkod verktyg 248 00:11:51,440 --> 00:11:53,790 att en hel del företag som även Facebook används 249 00:11:53,790 --> 00:11:56,654 Detta var den högsta standard så att folk bara gick med det. 250 00:11:56,654 --> 00:11:59,070 Så inte orimligt, men vi ska använda lite mer intuition 251 00:11:59,070 --> 00:12:02,970 och säga, säker 50, det är förmodligen lite överdrivet. 252 00:12:02,970 --> 00:12:05,720 >> Kön, jag gillar enum, och så vi kan därför 253 00:12:05,720 --> 00:12:08,760 räkna manlig eller kvinnlig, eller kanske mer effektivt, 254 00:12:08,760 --> 00:12:13,420 m eller f eller någon annan symbolik, men enum känns som ett bra val där. 255 00:12:13,420 --> 00:12:16,740 För att vara tydlig, kön kan bara vara en Varchar 256 00:12:16,740 --> 00:12:19,090 och vi kunde bara alla överens om trevliga människor, 257 00:12:19,090 --> 00:12:21,010 att alltid sätta samma värden där. 258 00:12:21,010 --> 00:12:22,720 Man eller kvinna eller allt. 259 00:12:22,720 --> 00:12:27,800 >> Men problemet är alltså att vi kunde gör ett misstag, som [OHÖRBART] föreslagna 260 00:12:27,800 --> 00:12:29,140 tidigare i ett annat sammanhang. 261 00:12:29,140 --> 00:12:32,780 Om vi ​​gör ett misstag, skulle vi kunna få felaktiga värden i vår databas. 262 00:12:32,780 --> 00:12:36,320 Vad är trevligt om databaser som Oracle och MySQL och andra, 263 00:12:36,320 --> 00:12:39,280 är att du har denna sista skikt av försvaret där 264 00:12:39,280 --> 00:12:43,010 din DBA, databasadministratör, vem är att utforma den här tabellen som vi 265 00:12:43,010 --> 00:12:46,440 är verbalt, skulle kunna sätta på plats en enum som 266 00:12:46,440 --> 00:12:51,250 skyddar mot det genom att ange män, kvinnor, och så ingen 267 00:12:51,250 --> 00:12:54,230 annars ingen programmerare kan av misstag in något annat värde. 268 00:12:54,230 --> 00:12:55,480 Så det skulle vara en bra sak. 269 00:12:55,480 --> 00:12:56,660 Detta är en funktion. 270 00:12:56,660 --> 00:13:00,760 >> Så ett ID, under antagande av ett numeriskt ID, det förmodligen bör vara ett positivt heltal. 271 00:13:00,760 --> 00:13:04,380 Och vi gör ibland har tillfälle att diskutera längd. 272 00:13:04,380 --> 00:13:06,830 Du skulle inte normalt ange ett antal här, 273 00:13:06,830 --> 00:13:11,310 skulle du istället ange detta är en int, eller en stor int, 274 00:13:11,310 --> 00:13:12,980 eftersom de är vanligtvis kallas. 275 00:13:12,980 --> 00:13:18,840 Men typiskt, ett heltal skulle vara, låt oss säga, 4 byte. 276 00:13:18,840 --> 00:13:23,694 Och om det är 4 byte, det är hur många bitar? 277 00:13:23,694 --> 00:13:24,630 >> PUBLIK: [OHÖRBART] 278 00:13:24,630 --> 00:13:26,610 >> DAVID MALAN: 32 bitar. 279 00:13:26,610 --> 00:13:30,270 Så hur många användare kan vi ha i vår databas om de alla har ett ID 280 00:13:30,270 --> 00:13:33,320 och detta ID måste vara unikt? 281 00:13:33,320 --> 00:13:36,780 32 bitar betyder att vi har mönster av en, två, tre, fyra, five-- 282 00:13:36,780 --> 00:13:41,000 så hur många olika mönster av nollor och de kan ha om det finns 32? 283 00:13:41,000 --> 00:13:43,235 Det är samma sak som frågar vad är två till 32? 284 00:13:43,235 --> 00:13:46,472 285 00:13:46,472 --> 00:13:48,430 Det är en stor siffra som Jag kan inte riktigt få rätt, 286 00:13:48,430 --> 00:13:50,270 men jag vet att det är ungefär 4 miljarder. 287 00:13:50,270 --> 00:13:53,970 Så detta innebär att din databastabell kan har fyra miljarder användare och det är det. 288 00:13:53,970 --> 00:13:56,410 >> Så detta är en intressant utformning innebörd. 289 00:13:56,410 --> 00:14:00,840 Ett anständigt antal företag har beslutat, kanske inte så mycket 290 00:14:00,840 --> 00:14:04,860 för deras användare tabellen, eftersom att ha 4 miljarder användare är en sällsynt problem. 291 00:14:04,860 --> 00:14:08,410 Detta är en slags Facebook-stil problem, inte ett typiskt företag problem. 292 00:14:08,410 --> 00:14:12,670 Men kanske om du har transaktionsloggar eller någon typ av data som ständigt 293 00:14:12,670 --> 00:14:15,610 får skrivas in din databas som absolut skulle kunna ha miljarder 294 00:14:15,610 --> 00:14:18,900 och miljarder rader, och du använder ett heltal för det, 295 00:14:18,900 --> 00:14:22,750 vad som kommer att ske så snart som du får radnummer 4 miljarder 296 00:14:22,750 --> 00:14:26,210 och sedan försöker att sätta in 4000000000. Och en, så att säga? 297 00:14:26,210 --> 00:14:29,610 Jag förenkla siffrorna en bit. 298 00:14:29,610 --> 00:14:33,740 >> Du kan klippa tillbaka, menar jag att du måste hantera det på något sätt. 299 00:14:33,740 --> 00:14:37,910 Och vad en dator skulle normalt gör, tänker på det även från i morse, 300 00:14:37,910 --> 00:14:42,430 Om du har en 4-bitarsvärde som 1, 1, 1, 1, som 301 00:14:42,430 --> 00:14:44,920 bara för att binda på morgonen tillsammans till eftermiddag, vad 302 00:14:44,920 --> 00:14:48,369 innebär detta nummer representerar i binär? 303 00:14:48,369 --> 00:14:49,410 OK, vi kommer att göra det lättare. 304 00:14:49,410 --> 00:14:53,310 Vad gör detta nummer representerar i binär? 305 00:14:53,310 --> 00:14:56,794 OK, vi kommer att göra det enklare, vad innebär detta representerar i binär? 306 00:14:56,794 --> 00:14:57,460 PUBLIK: Tre. 307 00:14:57,460 --> 00:14:59,670 DAVID MALAN: Tre, eftersom vi har de column-- 308 00:14:59,670 --> 00:15:00,450 [SKRATT] 309 00:15:00,450 --> 00:15:01,350 Puh! 310 00:15:01,350 --> 00:15:03,980 Vi hade de kolumnen och twos kolonnen. 311 00:15:03,980 --> 00:15:07,250 Så antar att, ja, vår [? infield?] inte var 32 bitar, 312 00:15:07,250 --> 00:15:13,440 men det var två bitar, vi kan räkna från användarnummer 0, 1, 2, 3, 313 00:15:13,440 --> 00:15:18,040 och då är vi typ av tillbaka till användaren 00 igen. 314 00:15:18,040 --> 00:15:19,739 Så detta är vad normalt händer. 315 00:15:19,739 --> 00:15:22,780 Om du någonsin har hört expression-- antagligen inte, men om du have-- 316 00:15:22,780 --> 00:15:26,500 heltalsspill, där du hålla vända alla dina bitar 317 00:15:26,500 --> 00:15:29,640 att vara den största möjliga värden, och då du är ute bitar, 318 00:15:29,640 --> 00:15:30,850 vad skulle normalt hända? 319 00:15:30,850 --> 00:15:32,280 Varför säger jag 00? 320 00:15:32,280 --> 00:15:33,220 Nåväl, detta är tre. 321 00:15:33,220 --> 00:15:34,230 Hur gör jag representerar fyra? 322 00:15:34,230 --> 00:15:36,890 323 00:15:36,890 --> 00:15:38,915 Hur gör jag representerar för nummer fyra i binär? 324 00:15:38,915 --> 00:15:39,790 PUBLIK: [OHÖRBART] 325 00:15:39,790 --> 00:15:41,780 DAVID MALAN: en-- ja, inte säga 100 per se, 326 00:15:41,780 --> 00:15:44,190 eftersom det har fel klang, men 1-0-0. 327 00:15:44,190 --> 00:15:48,920 Så att antalet 1-0-0 är verkligen korrekt, men om du bara har två bitar, 328 00:15:48,920 --> 00:15:50,820 vad har du egentligen gjort? 329 00:15:50,820 --> 00:15:53,219 Du har överförts till 00. 330 00:15:53,219 --> 00:15:54,760 Och faktiskt, det är vad som skulle hända. 331 00:15:54,760 --> 00:15:56,884 Egentligen kan du tror om detta mer familjärt. 332 00:15:56,884 --> 00:15:59,350 Om ni minns, vad, 16 år sedan, världen 333 00:15:59,350 --> 00:16:03,380 var tänkt att upphöra när Y2K problemet hände. 334 00:16:03,380 --> 00:16:04,330 Varför var det? 335 00:16:04,330 --> 00:16:08,170 Väl de flesta datorer, för rimliga beslut, 336 00:16:08,170 --> 00:16:15,320 var att lagra siffror som den år 1975 eller år 1999 337 00:16:15,320 --> 00:16:19,010 genom att bara använda två siffror i datorns minne. 338 00:16:19,010 --> 00:16:21,950 Så naturligtvis, vad händer När du kommer till år 2000, 339 00:16:21,950 --> 00:16:25,790 du går till detta, eller snarare, ja. 340 00:16:25,790 --> 00:16:30,120 Så du går till år 2000, men om du bara använder två siffror det ser 341 00:16:30,120 --> 00:16:32,660 som år 00 och så att du har rullat över. 342 00:16:32,660 --> 00:16:36,820 Och det är därför en hel del system behövs för att uppdateras vid den tidpunkten. 343 00:16:36,820 --> 00:16:42,500 >> Så med det sagt, företag som Facebook köra upp mot detta. 344 00:16:42,500 --> 00:16:46,147 Så det enda sättet att hantera situation, uppriktigt sagt, är att förutse det. 345 00:16:46,147 --> 00:16:47,980 Eller renaste sättet att hantera denna situation 346 00:16:47,980 --> 00:16:50,330 är att förutse det så att du inte måste göra ändringar senare. 347 00:16:50,330 --> 00:16:51,970 Så istället för 8 bytes, vet du vad? 348 00:16:51,970 --> 00:16:54,261 Jag kommer att vara framåtblickande här, även om det är 349 00:16:54,261 --> 00:16:56,760 lite optimistisk att vi kommer att ha 4 miljarder 350 00:16:56,760 --> 00:16:58,850 och 1 användare på vår hemsida. 351 00:16:58,850 --> 00:17:01,790 Men låt oss bara använda 8 byte, eller 64 bitar, som i allmänhet skulle vara 352 00:17:01,790 --> 00:17:05,640 kallas en stor heltal, mycket teknisk. 353 00:17:05,640 --> 00:17:10,280 Och det betyder bara att du kan ha ännu fler siffror i numret. 354 00:17:10,280 --> 00:17:12,599 Men detta är en viktig utformning beslut, 355 00:17:12,599 --> 00:17:16,400 eftersom om du väljer ett nummer som har för få bitar av uttrycksfullhet 356 00:17:16,400 --> 00:17:19,089 du faktiskt kan skapa ett fel i programvaran. 357 00:17:19,089 --> 00:17:21,750 >> Okej, så låt oss slå in med e-post och postadress. 358 00:17:21,750 --> 00:17:26,369 Så e-post, hur länge ska en e-postadress vara? 359 00:17:26,369 --> 00:17:26,869 50. 360 00:17:26,869 --> 00:17:29,220 Jag har verkligen ingen aning om, men det är förmodligen något liknande, 361 00:17:29,220 --> 00:17:32,261 annars ingen kommer att skriver du om det blir för lång, så 50, 362 00:17:32,261 --> 00:17:33,360 Låt oss gå med det för nu. 363 00:17:33,360 --> 00:17:35,770 Postadress, hur länge ska det vara? 364 00:17:35,770 --> 00:17:38,325 365 00:17:38,325 --> 00:17:39,200 PUBLIK: [OHÖRBART] 366 00:17:39,200 --> 00:17:41,900 367 00:17:41,900 --> 00:17:43,890 >> DAVID MALAN: Det är inte bara ett postnummer, dock. 368 00:17:43,890 --> 00:17:45,720 Postadress, hörde jag. 369 00:17:45,720 --> 00:17:50,720 Så det här är som en Brattle Square, kommatecken, Cambridge Mass., kommatecken, 02138. 370 00:17:50,720 --> 00:17:53,860 Och i själva verket, låt mig bara dra upp en liten kalkylblad här. 371 00:17:53,860 --> 00:17:56,510 Det känns som det är en missad möjlighet. 372 00:17:56,510 --> 00:18:01,480 Om vi ​​har en Brattle Square, kommatecken, Cambridge, MA 02138, 373 00:18:01,480 --> 00:18:04,510 Jag tycker vi kan göra bättre än bara postadress. 374 00:18:04,510 --> 00:18:07,100 Varför vi inte exploderar detta lite? 375 00:18:07,100 --> 00:18:08,030 Vad får jag på? 376 00:18:08,030 --> 00:18:10,970 Vad ska vi istället ha för våra rader här, kanske? 377 00:18:10,970 --> 00:18:12,260 >> PUBLIK: [OHÖRBART] 378 00:18:12,260 --> 00:18:17,579 >> DAVID MALAN: Ja, så låt oss kalla det street_number, 379 00:18:17,579 --> 00:18:20,620 och ett understreck är bara en vanlig sätt att få vad som ser ut som ett utrymme, 380 00:18:20,620 --> 00:18:22,360 men det är inte, faktiskt. 381 00:18:22,360 --> 00:18:26,240 Gata, och sedan city-- ledsen? 382 00:18:26,240 --> 00:18:28,440 >> PUBLIK: [OHÖRBART] 383 00:18:28,440 --> 00:18:29,690 DAVID MALAN: Vi kunde göra det. 384 00:18:29,690 --> 00:18:30,702 Linje ett, rad två. 385 00:18:30,702 --> 00:18:32,410 Varför inte vi kommer att hålla det enkelt för nu, 386 00:18:32,410 --> 00:18:34,840 men det är absolut en acceptabel beslut. 387 00:18:34,840 --> 00:18:38,180 Och sedan staten, och sedan ska vi vara lite USA-centrerad nu 388 00:18:38,180 --> 00:18:42,040 och bara göra postnummer, bara för att det ska leda till en intressant misstag 389 00:18:42,040 --> 00:18:43,090 eller problem här. 390 00:18:43,090 --> 00:18:44,655 Så antar att det är nu vår adress. 391 00:18:44,655 --> 00:18:47,280 Det är lite mer irriterande att Vi har alla dessa flera fält, 392 00:18:47,280 --> 00:18:49,200 men nu kan vi märka saker lite bättre. 393 00:18:49,200 --> 00:18:53,210 >> Så nu gatunummer förmodligen bör inte vara en röding, bör det? 394 00:18:53,210 --> 00:18:54,835 Vad ska det vara? 395 00:18:54,835 --> 00:18:55,710 PUBLIK: [OHÖRBART] 396 00:18:55,710 --> 00:18:57,835 DAVID MALAN: Kanske ett antal som ett heltal igen? 397 00:18:57,835 --> 00:19:00,170 Ett stort heltal? 398 00:19:00,170 --> 00:19:02,170 Du har förmodligen inte bor på 4 miljarder Main Street 399 00:19:02,170 --> 00:19:03,490 eller något galet sånt. 400 00:19:03,490 --> 00:19:06,850 Så heltal är förmodligen bra, men har någon 401 00:19:06,850 --> 00:19:13,880 någonsin bodde på en adress som 1A Brattle Square, eller en och halv? 402 00:19:13,880 --> 00:19:17,030 Dessa saker finns, tyvärr, även om du inte har bott där, 403 00:19:17,030 --> 00:19:21,240 finns dessa anomalier som lägenhet 1A, 1B, 1C. 404 00:19:21,240 --> 00:19:24,260 Så vet du vad, vi förmodligen bör inte gå med heltal, 405 00:19:24,260 --> 00:19:27,440 annars ska vi att förlora en del försäljning. 406 00:19:27,440 --> 00:19:29,920 >> Röding fält, kanske? 407 00:19:29,920 --> 00:19:30,870 Jag vet inte hur länge. 408 00:19:30,870 --> 00:19:33,370 Det är förmodligen inte kommer att vara så länge, så 10 eller något. 409 00:19:33,370 --> 00:19:34,950 Ingen kommer att skriva ett längre nummer, kanske. 410 00:19:34,950 --> 00:19:37,070 Men återigen, vi borde nog ägna mer uppmärksamhet åt det. 411 00:19:37,070 --> 00:19:39,900 Kanske google, gör en del efterforskningar, men vi kommer att gå med våra tarmar för nu. 412 00:19:39,900 --> 00:19:44,565 Gator, röding, 50, jag vet inte. 413 00:19:44,565 --> 00:19:46,940 Vid något tillfälle, är ingen kommer att skriva det på ett kuvert, 414 00:19:46,940 --> 00:19:49,350 också, så det är nog några övre gränser där. 415 00:19:49,350 --> 00:19:54,200 Stad, samma, säker, så char 50. 416 00:19:54,200 --> 00:19:59,120 >> Tillstånd kan vara USA-centrerad nu. 417 00:19:59,120 --> 00:20:01,850 Så det kan vara en lista, så snäll av en dom samtal tillstånd. 418 00:20:01,850 --> 00:20:04,000 Det kan vara som två tecken. 419 00:20:04,000 --> 00:20:06,140 Så egentligen, kanske, jag fortsatte att säga röding. 420 00:20:06,140 --> 00:20:09,420 Jag menar nog Varchar bara för några effektivitet, 421 00:20:09,420 --> 00:20:12,240 men vi kommer tillbaka till detta beslut i ett ögonblick. 422 00:20:12,240 --> 00:20:16,150 Kan vara en röding med längden 2 för staten. 423 00:20:16,150 --> 00:20:20,670 Om i USA de har, som MA, Massachusetts, NY, New York, New Jersey, New 424 00:20:20,670 --> 00:20:22,100 Jersey, och så vidare. 425 00:20:22,100 --> 00:20:23,630 Så det kan fastställas till det. 426 00:20:23,630 --> 00:20:25,900 DC för Washington DC. 427 00:20:25,900 --> 00:20:29,915 >> Men jag tror, ​​Olivier, du föreslås en annan metod. 428 00:20:29,915 --> 00:20:30,790 PUBLIK: [OHÖRBART] 429 00:20:30,790 --> 00:20:33,670 DAVID MALAN: Ja, så det är en lite irriterande att skriva in, 430 00:20:33,670 --> 00:20:37,890 men en enum kan göra mer meningsfullt, eftersom detta sätt, åtminstone i USA, 431 00:20:37,890 --> 00:20:41,320 du kan räkna, om tråkiga, men du gör det bara en gång i databasen 432 00:20:41,320 --> 00:20:47,480 och aldrig mer behöva tänka på det, alla 50 två-teckenkoder. 433 00:20:47,480 --> 00:20:48,660 Så jag gillar enum. 434 00:20:48,660 --> 00:20:51,720 Låt oss hålla fast vid att det, på grund av det slags upprätt mer stringens. 435 00:20:51,720 --> 00:20:53,620 Och sedan postnummer? 436 00:20:53,620 --> 00:20:55,306 Jag tror att Andrew hade en tanke på att 437 00:20:55,306 --> 00:20:56,180 PUBLIK: [OHÖRBART] 438 00:20:56,180 --> 00:20:57,240 DAVID MALAN: Ja, fem eller nio. 439 00:20:57,240 --> 00:20:58,323 Låt oss bara hålla det enkelt. 440 00:20:58,323 --> 00:20:59,380 Bara göra fem nu. 441 00:20:59,380 --> 00:21:03,070 Men kanske jag kunde bara göra ett heltal, eller hur? 442 00:21:03,070 --> 00:21:08,750 Jag kunde, men vet du vad, jag gjorde detta misstag en gång, i någon mening. 443 00:21:08,750 --> 00:21:13,110 År sedan, var jag migrera från Microsoft Outlook till Gmail, 444 00:21:13,110 --> 00:21:18,640 och Outlook har ett sätt att exportera alla dina kontakter som en Excel-fil, 445 00:21:18,640 --> 00:21:21,280 en CSV-fil, kommaseparerade värden fil. 446 00:21:21,280 --> 00:21:23,950 Och jag gjorde misstaget jag tror på att dubbelklicka den, 447 00:21:23,950 --> 00:21:27,380 när jag hämtat export till se till att det såg ut som förväntat. 448 00:21:27,380 --> 00:21:31,320 Jag måste ha träffat Spara eller låt auto-save spark i eller något. 449 00:21:31,320 --> 00:21:35,100 För när jag sedan importeras den i Gmail, allt fungerade. 450 00:21:35,100 --> 00:21:39,910 Men i år, i dag, och Jag gjorde det fem, 10 år sedan, 451 00:21:39,910 --> 00:21:44,380 Jag är fortfarande att hitta vänner som har adresser som ser ut så här. 452 00:21:44,380 --> 00:21:45,700 Varför? 453 00:21:45,700 --> 00:21:47,900 >> PUBLIK: [OHÖRBART] 454 00:21:47,900 --> 00:21:50,650 >> DAVID MALAN: Det tog 0, väl snarare det 455 00:21:50,650 --> 00:21:53,810 tog hela postnummer som ett antal, och därför är det 456 00:21:53,810 --> 00:21:56,590 en ledande 0, vilket innebär Det har ingen betydelse. 457 00:21:56,590 --> 00:21:59,470 Och så 2138 verkar vara mitt postnummer. 458 00:21:59,470 --> 00:22:07,100 Och detta är, uppriktigt sagt, en irriterande Excel funktion där jag tror som standard, 459 00:22:07,100 --> 00:22:10,980 även om det är tänkt att bara vara text, Microsoft Excel 460 00:22:10,980 --> 00:22:13,780 beslutar, låt mig vara till hjälp, och åh, ser jag bara siffror. 461 00:22:13,780 --> 00:22:15,290 Låt oss behandla dessa siffror. 462 00:22:15,290 --> 00:22:16,790 Och det klipper de ledande nollor. 463 00:22:16,790 --> 00:22:19,165 >> Jag svär, varje par månader jag söka efter en adress, 464 00:22:19,165 --> 00:22:22,300 och ur en sorts OCD, jag går tillbaka i och tillsätt 0, även om jag aldrig 465 00:22:22,300 --> 00:22:23,700 skicka folk bokstäver eller något. 466 00:22:23,700 --> 00:22:25,510 Men jag är fortfarande hitta rester av detta. 467 00:22:25,510 --> 00:22:28,820 Så detta är att säga, är detta en bra idé? 468 00:22:28,820 --> 00:22:31,610 OK, nej, eftersom vem som helst i Massachusetts, i detta område, 469 00:22:31,610 --> 00:22:33,270 kommer att ha en o leder dem. 470 00:22:33,270 --> 00:22:38,070 Så låt oss gå med liknande röding, troligen fem. 471 00:22:38,070 --> 00:22:41,450 >> Och här, inser vi skulle kunna använda en enum och vi 472 00:22:41,450 --> 00:22:44,600 kunde räkna upp 10000 möjliga postnummer, 473 00:22:44,600 --> 00:22:48,530 men det känns som det är förmodligen korsar en linje av, liksom förmåner. 474 00:22:48,530 --> 00:22:51,350 Om du måste ingång som mycket data i databasen 475 00:22:51,350 --> 00:22:52,940 för att skydda mot något. 476 00:22:52,940 --> 00:22:57,400 Så röding insåg att du kan skriva i H-E-L-L-O som ditt postnummer, 477 00:22:57,400 --> 00:22:59,180 vilket inte är, uppenbarligen, numeriskt. 478 00:22:59,180 --> 00:23:01,680 Så det finns inget sätt, i en typisk databas, 479 00:23:01,680 --> 00:23:05,561 ange bara numeriska och bara fem tecken långa, 480 00:23:05,561 --> 00:23:07,310 så vi kommer att ha att göra det i koden. 481 00:23:07,310 --> 00:23:11,100 Vi kommer att göra det i PHP eller Java eller vilket språk vi 482 00:23:11,100 --> 00:23:14,230 använder på servern för att genomdriva den typen av begränsning. 483 00:23:14,230 --> 00:23:14,860 >> Whoo! 484 00:23:14,860 --> 00:23:18,322 Okej, så några frågor ännu? 485 00:23:18,322 --> 00:23:19,780 Låt oss göra ett annat beslut design. 486 00:23:19,780 --> 00:23:22,500 Det visar sig att du också får välja, 487 00:23:22,500 --> 00:23:26,600 när man utformar en SQL-databas, eller typiska relations database-- där 488 00:23:26,600 --> 00:23:28,790 igen, relations bara betyder rader och kolumner, 489 00:23:28,790 --> 00:23:35,500 det är hur du organisera dina data-- och inser att vad detta innebär är, 490 00:23:35,500 --> 00:23:37,740 Jag har varit vilseledande i att jag drawing-- detta 491 00:23:37,740 --> 00:23:40,190 är vad som kallas schemat för en databastabell. 492 00:23:40,190 --> 00:23:42,810 Detta är som specifikationer för table-- 493 00:23:42,810 --> 00:23:48,040 men när det börjar bli dags För att verkligen lagra data, 494 00:23:48,040 --> 00:23:52,081 och vi kommer att göra detta bara genom exempel här. 495 00:23:52,081 --> 00:23:55,080 Jag kommer att öppna upp Excel, eftersom Excel kommer att ge mig rader och kolumner. 496 00:23:55,080 --> 00:23:58,050 Och det är precis vad Oracle och MySQL och andra verktyg kommer att ge mig. 497 00:23:58,050 --> 00:24:02,270 Så jag bara kommer att använda för diskussion skull. 498 00:24:02,270 --> 00:24:05,250 Låt mig gå vidare och öppna upp en representativ dokumentet här, 499 00:24:05,250 --> 00:24:06,310 zooma in en bit. 500 00:24:06,310 --> 00:24:15,200 Så till exempel, våra rubriker är nu förnamn, efternamn, kön, ID, 501 00:24:15,200 --> 00:24:20,980 e-post, gatunummer, gata, hoppsan. 502 00:24:20,980 --> 00:24:25,710 Gata, stad, stat, bara om passar på skärmen. 503 00:24:25,710 --> 00:24:29,080 >> Så vad detta betyder är att när en användaren först registrerar för min hemsida, 504 00:24:29,080 --> 00:24:32,880 det kommer att vara något i stil David, Malan, m, låt oss säga en, 505 00:24:32,880 --> 00:24:42,910 malan@harvard.edu, gatunummer kommer vara en Brattle Square, Cambridge, MA, 506 00:24:42,910 --> 00:24:44,780 02138, och sedan så vidare. 507 00:24:44,780 --> 00:24:48,290 Så när jag säger att en relationsdatabas eller SQL-databas är rader och kolumner, 508 00:24:48,290 --> 00:24:49,350 Jag menar det. 509 00:24:49,350 --> 00:24:51,900 Det faktiska data lagras i rader och kolumner. 510 00:24:51,900 --> 00:24:53,950 Detta är bara en tillfällighet, att vi talade, 511 00:24:53,950 --> 00:24:56,033 och jag var bara att dra det ut i rader och kolumner. 512 00:24:56,033 --> 00:24:58,320 Detta är bara schemat, det övergripande definition. 513 00:24:58,320 --> 00:25:01,640 >> Så av dessa områden här, eller ekvivalent, där, 514 00:25:01,640 --> 00:25:06,270 vilka är de områden som du tror Jag är sannolikt att söka på om jag är en användare 515 00:25:06,270 --> 00:25:09,200 eller om jag är databasadministratör? 516 00:25:09,200 --> 00:25:12,426 Liksom, vilka områden är jag faktiskt går att söka på? 517 00:25:12,426 --> 00:25:13,830 >> PUBLIK: [OHÖRBART] 518 00:25:13,830 --> 00:25:17,690 >> DAVID MALAN: Namn, ja så Jag gillar det faktum that-- ja, 519 00:25:17,690 --> 00:25:19,750 e-post kan vara ganska vanligt. 520 00:25:19,750 --> 00:25:21,440 Tyvärr, du sa namn. 521 00:25:21,440 --> 00:25:24,030 Så maybe-- och igen, vi är typ av samtal i det abstrakta. 522 00:25:24,030 --> 00:25:25,988 Jag vet inte varför du att söka efter ett namn, 523 00:25:25,988 --> 00:25:29,340 men det känns rimligt om du söker för en användare. 524 00:25:29,340 --> 00:25:31,170 Kanske påstår, säker, ID. 525 00:25:31,170 --> 00:25:34,100 526 00:25:34,100 --> 00:25:36,160 >> Och det är en hal lutning, eftersom jag kunde 527 00:25:36,160 --> 00:25:38,890 contrive ett scenario där kanske min chef har bett mig, 528 00:25:38,890 --> 00:25:40,417 Hur många män har vi på vår webbplats? 529 00:25:40,417 --> 00:25:42,000 Hur många kvinnor har vi på vår webbplats? 530 00:25:42,000 --> 00:25:45,210 Och så på den punkten, kanske du vill att söka på fältet kön, också, 531 00:25:45,210 --> 00:25:45,940 och ingenting annat. 532 00:25:45,940 --> 00:25:47,350 Så det finns en avvägning här. 533 00:25:47,350 --> 00:25:49,180 Återigen, det finns ingen rätt svar, men det 534 00:25:49,180 --> 00:25:53,760 är en funktion i de flesta SQL-databaser känd som indexering, varigenom 535 00:25:53,760 --> 00:25:56,100 dig, designer, den databasadministratör, 536 00:25:56,100 --> 00:26:01,730 får bestämma i förväg vilka fält i databasen bör optimera 537 00:26:01,730 --> 00:26:02,980 för sökningar på. 538 00:26:02,980 --> 00:26:07,620 >> Du kan mycket naivt säga, optimera detta, optimera det, optimera denna, 539 00:26:07,620 --> 00:26:10,300 optimera det och det, och databasen kommer 540 00:26:10,300 --> 00:26:14,882 göra några magiska sak under huv, och göra något på ett sådant sätt 541 00:26:14,882 --> 00:26:17,090 att nästa gång du söker på någon av dessa områden, 542 00:26:17,090 --> 00:26:18,400 det kommer i själva verket att vara snabbare. 543 00:26:18,400 --> 00:26:19,110 Det här är möjligt. 544 00:26:19,110 --> 00:26:20,530 Det spelar ingen avbryter sig själv. 545 00:26:20,530 --> 00:26:22,500 Men det måste finnas en betalkurs. 546 00:26:22,500 --> 00:26:27,220 >> Om du naivt, eller över entusiastiskt säg, indexera alla dessa områden, 547 00:26:27,220 --> 00:26:29,810 så att säga, göra dem alla effektivt sökbara, 548 00:26:29,810 --> 00:26:31,625 vilket pris du förmodligen betalar? 549 00:26:31,625 --> 00:26:32,500 PUBLIK: [OHÖRBART] 550 00:26:32,500 --> 00:26:33,090 DAVID MALAN: Performance. 551 00:26:33,090 --> 00:26:33,798 Vad menar du? 552 00:26:33,798 --> 00:26:37,380 Väl prestanda, åtminstone på sammanhang jag diskuterar, är bättre nu. 553 00:26:37,380 --> 00:26:38,830 Det är definitionen av indexering. 554 00:26:38,830 --> 00:26:41,180 Det kommer att göra sökningar snabbare. 555 00:26:41,180 --> 00:26:43,366 Så tiden minskar, så att säga. 556 00:26:43,366 --> 00:26:44,240 PUBLIK: [OHÖRBART] 557 00:26:44,240 --> 00:26:45,031 DAVID MALAN: Space. 558 00:26:45,031 --> 00:26:46,520 Så återigen, det är en vanlig handel. 559 00:26:46,520 --> 00:26:50,820 Jag kan snabba upp dina sökningar, men det är kommer att kosta dig mer byte av utrymme. 560 00:26:50,820 --> 00:26:51,610 Varför? 561 00:26:51,610 --> 00:26:55,230 Tja, som standard, om vi har ingen av dessa röda stjärnor, ingen av dessa index, 562 00:26:55,230 --> 00:26:58,797 som jag säger, hur du söker efter ett namn i denna databas? 563 00:26:58,797 --> 00:27:00,630 Så låt oss dra vårt uppmärksamhet till detta exempel. 564 00:27:00,630 --> 00:27:06,300 Om vi ​​har David och Scully och Kareem och Arwa och andra i dessa rader, 565 00:27:06,300 --> 00:27:06,910 till exempel. 566 00:27:06,910 --> 00:27:08,390 >> Så låt oss göra just detta. 567 00:27:08,390 --> 00:27:13,990 Scully är här, och sedan vi har Kareem, och Arwa, 568 00:27:13,990 --> 00:27:18,390 och alla andra, om du inte ha ett index definierat, så att säga, 569 00:27:18,390 --> 00:27:20,160 det bästa du kan göra är linjär sökning. 570 00:27:20,160 --> 00:27:23,470 Om du söker efter Arwa, är vi inte kommer att kunna hoppa rätt till sin 571 00:27:23,470 --> 00:27:24,140 snabbt. 572 00:27:24,140 --> 00:27:26,556 Vi kommer att börja överst och gå hela vägen till botten, 573 00:27:26,556 --> 00:27:28,600 inte olikt vår ursprungliga Mike Smith exempel. 574 00:27:28,600 --> 00:27:33,470 >> Men om jag säger, hej, databas, Index förnamnet fältet, 575 00:27:33,470 --> 00:27:37,000 då det kommer att göra något snyggare och stödja något 576 00:27:37,000 --> 00:27:38,130 som binär sökning. 577 00:27:38,130 --> 00:27:39,820 Det är förmodligen inte binär sökning i sig. 578 00:27:39,820 --> 00:27:42,810 Databaser tenderar att använda en annan datastruktur som kallas B-träd, 579 00:27:42,810 --> 00:27:46,540 inte att förväxla med binära träd, att bara göra det snabbare att söka 580 00:27:46,540 --> 00:27:48,500 något logaritmisk i naturen. 581 00:27:48,500 --> 00:27:53,510 Men det pris du betalar för att bygga upp det funktionen att datastruktur i minnet, 582 00:27:53,510 --> 00:27:54,570 är flera byte. 583 00:27:54,570 --> 00:27:57,170 Så det kan ta några megabyte, några gigabyte, vem vet? 584 00:27:57,170 --> 00:27:58,410 Det beror på data. 585 00:27:58,410 --> 00:28:02,640 >> Så någon gång, måste du bestämma, det är förmodligen inte en gemensam fallet. 586 00:28:02,640 --> 00:28:06,000 Så vad är den verkliga gemensamma fall, om du verkligen var tvungen att välja, 587 00:28:06,000 --> 00:28:10,080 vad skulle din favorit fält vara? 588 00:28:10,080 --> 00:28:10,580 E-post. 589 00:28:10,580 --> 00:28:14,400 Och jag gillar e-post, eftersom e-post, i teorin, bör vara unikt. 590 00:28:14,400 --> 00:28:17,650 Och så ofta, när du vet i förväg att en av dina fält 591 00:28:17,650 --> 00:28:20,277 är eller kommer att vara unik, att tenderar att vara en bra fält 592 00:28:20,277 --> 00:28:22,860 att söka på, eftersom det sättet, när du söker efter något, 593 00:28:22,860 --> 00:28:26,194 du kommer att få tillbaka en eller noll svar och sedan du är klar. 594 00:28:26,194 --> 00:28:28,110 Du behöver inte hålla efter ytterligare andra. 595 00:28:28,110 --> 00:28:31,992 >> Och så i det här fallet här, e-post, så länge du inte kan registrera två gånger 596 00:28:31,992 --> 00:28:33,450 med samma e-post, är en bra en. 597 00:28:33,450 --> 00:28:36,710 ID per definition, i datavetenskap världen, 598 00:28:36,710 --> 00:28:39,610 Om du pratar om en ID, som hade bättre vara unik. 599 00:28:39,610 --> 00:28:42,970 Det är typ av klang av ID eller ID. 600 00:28:42,970 --> 00:28:46,440 Och resten av dessa kan vara, låt oss kalla dem trevligt att haves, 601 00:28:46,440 --> 00:28:47,860 men inte verkligen behövs. 602 00:28:47,860 --> 00:28:49,976 >> Och så i en databas, du anger index, 603 00:28:49,976 --> 00:28:51,350 men du kan vara ännu mer exakt. 604 00:28:51,350 --> 00:28:56,060 Man kan säga, hej, databas, se att varje ID i denna tabell är unik. 605 00:28:56,060 --> 00:28:59,330 Inte ens låta en programmerare misstag sätta i en dubblett e 606 00:28:59,330 --> 00:29:00,740 eller kopiera ID-nummer. 607 00:29:00,740 --> 00:29:03,140 Så mycket som enums skydda oss på samma sätt, du 608 00:29:03,140 --> 00:29:04,881 kan ha dessa lägre nivå försvar. 609 00:29:04,881 --> 00:29:07,130 Och så databasdesign, i någon mening, är ganska kul, 610 00:29:07,130 --> 00:29:08,380 eftersom du gör det defensivt. 611 00:29:08,380 --> 00:29:11,460 Du slags anta att du arbetar med fruktansvärda, hemska programmerare 612 00:29:11,460 --> 00:29:15,550 och du vill sätta in så många försvar du kan för att skydda dina data, 613 00:29:15,550 --> 00:29:18,940 men samtidigt vill att hjälpa dem att prestera bättre 614 00:29:18,940 --> 00:29:21,386 genom att välja vilka fält för att optimera för. 615 00:29:21,386 --> 00:29:24,260 Men du kan inte nödvändigtvis göra det i ett vakuum som vi slags är här. 616 00:29:24,260 --> 00:29:26,480 Du måste veta vad som är de vanligaste fallen är. 617 00:29:26,480 --> 00:29:29,397 Om utvecklarna är genomföra en adressbok, 618 00:29:29,397 --> 00:29:32,230 du kan mycket väl vill kunna att söka på nästan alla områden, 619 00:29:32,230 --> 00:29:33,830 bara genom typ av ansökan. 620 00:29:33,830 --> 00:29:37,910 Så kanske du spenderar det extra utrymme. 621 00:29:37,910 --> 00:29:39,090 >> Höger, några frågor? 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 >> PUBLIK: [OHÖRBART] 625 00:29:43,470 --> 00:29:44,404 >> DAVID MALAN: Nej 626 00:29:44,404 --> 00:29:45,279 >> PUBLIK: [OHÖRBART] 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 >> PUBLIK: [OHÖRBART] 630 00:29:49,701 --> 00:29:52,420 631 00:29:52,420 --> 00:29:54,850 >> DAVID MALAN: Åh, så vi talar på ett sätt 632 00:29:54,850 --> 00:29:57,940 nu som är helt språk agnostiker. 633 00:29:57,940 --> 00:30:02,370 Så vi talar nu om relationsdatabaser mer allmänt, 634 00:30:02,370 --> 00:30:04,760 eller SQL-databaser i allmänhet. 635 00:30:04,760 --> 00:30:06,870 >> PUBLIK: [OHÖRBART] 636 00:30:06,870 --> 00:30:10,030 >> DAVID MALAN: En bättre ord att använda är, kan användas av alla språk. 637 00:30:10,030 --> 00:30:15,280 Så jag kan skriva JavaScript-kod, C kod, C ++ kod, Java-kod, Ruby-kod, 638 00:30:15,280 --> 00:30:19,010 vilka alla prata med en databas och köra frågor. 639 00:30:19,010 --> 00:30:22,310 I själva verket är det inte en dålig segue till exempel fråga. 640 00:30:22,310 --> 00:30:25,720 Och återigen, vi kommer inte att gå in på Java eller C ++ eller någon av det längre, 641 00:30:25,720 --> 00:30:29,420 men i SQL, det språk som jag håller hänvisar, Structured Query Language, 642 00:30:29,420 --> 00:30:32,790 detta i sig är ett programmeringsspråk, men det är tänkt att användas för, ingen 643 00:30:32,790 --> 00:30:37,330 överraskning, Structured Query frågor. 644 00:30:37,330 --> 00:30:38,660 >> Med det menar jag här. 645 00:30:38,660 --> 00:30:41,190 Sättet du välja data från en MySQL-databas 646 00:30:41,190 --> 00:30:49,330 är du bokstavligen skriva in ditt program något som väljer stjärnan från användare. 647 00:30:49,330 --> 00:30:52,200 Jag utgår från att denna tabell hädanefter kallas användare. 648 00:30:52,200 --> 00:30:54,860 Jag skulle kunna kalla det vad vi vill, men denna typ av vettigt. 649 00:30:54,860 --> 00:30:57,240 Och så väljer är en mycket gemensam verb, om du 650 00:30:57,240 --> 00:30:59,290 kommer i SQL, som bokstavligen gör det. 651 00:30:59,290 --> 00:31:02,730 Vad tror du stjärna betyder i detta sammanhang? 652 00:31:02,730 --> 00:31:04,410 >> PUBLIK: [OHÖRBART] 653 00:31:04,410 --> 00:31:05,380 >> DAVID MALAN: Jag är ledsen? 654 00:31:05,380 --> 00:31:06,300 >> PUBLIK: [OHÖRBART] 655 00:31:06,300 --> 00:31:09,580 >> DAVID MALAN: Behövs ej, är det mer inkluderande än att faktiskt. 656 00:31:09,580 --> 00:31:11,700 Det är jokertecken. 657 00:31:11,700 --> 00:31:14,740 Star nästan alltid betyder något, så det betyder i detta fall, 658 00:31:14,740 --> 00:31:16,510 markera allt från databasen. 659 00:31:16,510 --> 00:31:20,730 Så när jag säger detta menar jag ge mig tillbaka varje kolumn 660 00:31:20,730 --> 00:31:22,440 från mitt bord kallas användare. 661 00:31:22,440 --> 00:31:24,730 Så ge mig ett resultat, som det kallas. 662 00:31:24,730 --> 00:31:28,210 Med andra ord, ge mig en kopia av kalkylblad, är vad jag får på. 663 00:31:28,210 --> 00:31:34,890 >> Men om jag sa välj stjärna från användare där ID är lika med ett, hur stor bör 664 00:31:34,890 --> 00:31:36,640 mitt resultat set vara då? 665 00:31:36,640 --> 00:31:41,680 Eller ekvivalent, hur många rader bör Jag lämnas tillbaka från databasen? 666 00:31:41,680 --> 00:31:45,860 Förmodligen bara en, om jag har verkligen behandlade ID som en unik identifierare, 667 00:31:45,860 --> 00:31:50,710 och om David har den unika ID, jag bör få tillbaka en och endast en rad 668 00:31:50,710 --> 00:31:53,220 innehåller alla Davids information. 669 00:31:53,220 --> 00:31:56,390 Om jag sa det där ID lika 99, skulle jag komma tillbaka, 670 00:31:56,390 --> 00:32:00,320 I detta sammanhang noll rader, åtminstone för tillfället. 671 00:32:00,320 --> 00:32:03,620 >> Men om jag bryr mig egentligen inte om all denna information, 672 00:32:03,620 --> 00:32:06,970 Jag kunde bara säga, var kommer David bor? 673 00:32:06,970 --> 00:32:10,860 Välj postnummer från användare där ID är ett. 674 00:32:10,860 --> 00:32:15,820 Detta kommer att välja mig bara Davids zip kod och inte helheten av den raden. 675 00:32:15,820 --> 00:32:19,541 Varför skulle jag göra detta i stället för stjärnan fråga, wild card? 676 00:32:19,541 --> 00:32:21,950 >> PUBLIK: [OHÖRBART] 677 00:32:21,950 --> 00:32:24,590 >> DAVID MALAN: Ja, jag kanske bara behöver det. 678 00:32:24,590 --> 00:32:26,350 Så prestanda är återigen svaret här. 679 00:32:26,350 --> 00:32:28,540 Varför begära mer information än du behöver, 680 00:32:28,540 --> 00:32:32,020 eftersom även om det är okej tillsammans, du fortfarande har att kopiera dessa data, 681 00:32:32,020 --> 00:32:35,560 det verkar, från databasen i ditt program på något sätt, 682 00:32:35,560 --> 00:32:38,490 och det är bara dumt om du bara behöver fem av dessa siffror, 683 00:32:38,490 --> 00:32:40,340 inte hela den raden. 684 00:32:40,340 --> 00:32:42,180 >> Så hur sätter jag en användare? 685 00:32:42,180 --> 00:32:44,780 Antag att en användare har bara registrerats för första gången. 686 00:32:44,780 --> 00:32:46,560 Syntaxen normalt skulle se ut så här. 687 00:32:46,560 --> 00:32:52,700 Sätt in användare, och då skulle vi säga värden, 688 00:32:52,700 --> 00:33:00,150 och då skulle vi säga värden som, låt oss säga, Lauren Scully, 689 00:33:00,150 --> 00:33:02,380 vår filmare här. 690 00:33:02,380 --> 00:33:04,390 Och nästa fält är kön. 691 00:33:04,390 --> 00:33:08,020 Så vi säger citat, unquote "F", då har vi ett ID 692 00:33:08,020 --> 00:33:12,250 och jag kommer att säga-- låt oss låtsas att hon är faktiskt inte här, 693 00:33:12,250 --> 00:33:14,380 så vi kommer att spola tillbaka i historien. 694 00:33:14,380 --> 00:33:16,530 Så två kommer att bli hennes ID. 695 00:33:16,530 --> 00:33:19,130 Och sedan nästa fält Här är hennes e-post. 696 00:33:19,130 --> 00:33:22,140 Så det kommer att se ut Lauren Scully och så vidare, 697 00:33:22,140 --> 00:33:24,360 och vi ska bara dot dot dot bort härifrån. 698 00:33:24,360 --> 00:33:26,890 Nu kommer det att bli lite tråkiga, men insatsen fråga 699 00:33:26,890 --> 00:33:28,310 i slutändan skulle se ut som. 700 00:33:28,310 --> 00:33:30,970 >> Om jag vill bli av med Scully, uh-oh, låt oss avregistrera 701 00:33:30,970 --> 00:33:37,420 henne, raderar hon hennes konto, bort från användare där ID är lika med 2, 702 00:33:37,420 --> 00:33:38,500 kommer att bli av Scully. 703 00:33:38,500 --> 00:33:48,050 Eller jag kan säga uppdatera användare ställa, låt oss säga, vad kan vi förändra? 704 00:33:48,050 --> 00:33:49,430 Antag att hon rör sig. 705 00:33:49,430 --> 00:33:53,730 Uppsättning zip lika 021-- nix, det är hennes nuvarande dragkedja. 706 00:33:53,730 --> 00:33:54,487 90210. 707 00:33:54,487 --> 00:33:56,320 Den enda andra postnummer Jag vet i världen. 708 00:33:56,320 --> 00:33:59,002 Så som skulle förändra hennes zip code-- faktiskt, 709 00:33:59,002 --> 00:34:00,460 som inte skulle ändra sin postnummer. 710 00:34:00,460 --> 00:34:02,170 >> Vad gjorde jag bara göra? 711 00:34:02,170 --> 00:34:04,292 Även om syntaxen är förmodligen nytt. 712 00:34:04,292 --> 00:34:05,302 >> PUBLIK: [OHÖRBART] 713 00:34:05,302 --> 00:34:08,010 DAVID MALAN: Ja, jag flyttade alla Beverly Hills, Kalifornien. 714 00:34:08,010 --> 00:34:11,920 Så jag borde faktiskt säga där ID är lika med två. 715 00:34:11,920 --> 00:34:12,820 Och så vidare. 716 00:34:12,820 --> 00:34:15,290 Så SQL handlar om dessa typer av instruktioner. 717 00:34:15,290 --> 00:34:20,260 Välj, infoga, ta bort, uppdatera, med dessa predikat i slutet 718 00:34:20,260 --> 00:34:22,139 dessa där klausuler, så att säga. 719 00:34:22,139 --> 00:34:25,170 Och det finns mycket mer du kan gör, men det är egentligen bara handlar om 720 00:34:25,170 --> 00:34:29,750 att helt enkelt, om arcanely, som uttrycker vad du vill att databasen för att göra. 721 00:34:29,750 --> 00:34:31,580 >> Och sedan databasen kommer att räkna ut, när 722 00:34:31,580 --> 00:34:35,630 du sätter Lauren Scully i databas, var att sätta henne i minnet 723 00:34:35,630 --> 00:34:38,230 så att vi mycket snabbt kan få henne baserat på hennes e-postadress 724 00:34:38,230 --> 00:34:42,610 eller baserat på hennes ID-nummer eller liknande. 725 00:34:42,610 --> 00:34:43,391 Ja, Dan. 726 00:34:43,391 --> 00:34:44,266 PUBLIK: [OHÖRBART] 727 00:34:44,266 --> 00:34:46,364 728 00:34:46,364 --> 00:34:47,780 DAVID MALAN: Riktigt bra fråga. 729 00:34:47,780 --> 00:34:50,370 Kommer dessa skript ändras från Microsoft tillgång till Oracle 730 00:34:50,370 --> 00:34:52,290 till MySQL till PostgreSQL? 731 00:34:52,290 --> 00:34:53,790 Det korta svaret är att det beror. 732 00:34:53,790 --> 00:34:58,697 I teorin, finns det en mycket betydande gemensam delmängd av SQL 733 00:34:58,697 --> 00:35:00,780 som delas mellan alla av dessa implementationer. 734 00:35:00,780 --> 00:35:03,340 Men olika tillverkare har extra funktioner 735 00:35:03,340 --> 00:35:07,120 till sina databaser för att göra vissa saker utanför ramen för dessa funktioner, 736 00:35:07,120 --> 00:35:08,720 som kan faktiskt bryta. 737 00:35:08,720 --> 00:35:11,210 >> Så hur utvecklare skydda sig mot detta, 738 00:35:11,210 --> 00:35:14,350 är att i stället för att skriva råa SQL-kod som jag skriver här, 739 00:35:14,350 --> 00:35:19,460 de istället använda ett bibliotek, en gemensam bibliotek som själv 740 00:35:19,460 --> 00:35:23,650 är en slags högre nivå och abstracts bort som produkt du använder. 741 00:35:23,650 --> 00:35:25,710 Och det ger dig funktioner och procedurer 742 00:35:25,710 --> 00:35:28,810 att ringa så att du aldrig faktiskt skriva rå SQL. 743 00:35:28,810 --> 00:35:32,609 >> I teorin, då kan du ändra produkter från Oracle till Microsoft 744 00:35:32,609 --> 00:35:34,650 eller vice versa eller något annars, och du bokstavligen 745 00:35:34,650 --> 00:35:36,920 ändra ingenting om koden. 746 00:35:36,920 --> 00:35:40,180 Verkligheten är dock, du ibland ge upp funktioner som följd. 747 00:35:40,180 --> 00:35:43,860 Du kanske har valt en produkt eftersom den har dessa mervärdesfunktioner 748 00:35:43,860 --> 00:35:46,610 och du är bara nu inte använda dem medvetet. 749 00:35:46,610 --> 00:35:51,630 >> Och anekdotiskt, de flesta företag tenderar aldrig att röra sig bort från sin databas. 750 00:35:51,630 --> 00:35:54,002 Så medan detta är ett trevligt att har funktionen verkligheten 751 00:35:54,002 --> 00:35:55,960 är, om du översyn din databas, du 752 00:35:55,960 --> 00:35:59,890 förmodligen göra klasar av andra förändringar hur som helst, att du inte nödvändigtvis 753 00:35:59,890 --> 00:36:01,360 måste förutse det. 754 00:36:01,360 --> 00:36:03,720 Så det är utan tvekan över-engineering problemet, 755 00:36:03,720 --> 00:36:05,670 men det verkligen beror på sammanhanget. 756 00:36:05,670 --> 00:36:09,960 Men i teorin, är SQL delas över dessa olika produkter. 757 00:36:09,960 --> 00:36:11,560 Riktigt bra frågor. 758 00:36:11,560 --> 00:36:12,272 Ja. 759 00:36:12,272 --> 00:36:13,147 >> PUBLIK: [OHÖRBART] 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änka en databas 762 00:36:21,480 --> 00:36:25,020 är bara en server, vid slutet av dagen, och insidan av den servern 763 00:36:25,020 --> 00:36:28,670 är en hel massa tabeller, rader och kolumner. 764 00:36:28,670 --> 00:36:33,410 Och när du skickar en fråga som denna från ditt program, din webbplats, 765 00:36:33,410 --> 00:36:39,340 skrivet i Java, Ruby, Python, vad som helst, servern tar emot detta kommando 766 00:36:39,340 --> 00:36:41,660 och tolka den i bokstavligen på samma sätt 767 00:36:41,660 --> 00:36:43,660 vi diskuterat tidigare med tolkade språk, 768 00:36:43,660 --> 00:36:47,333 och sedan utföra vissa åtgärder på noll eller flera rader i noll eller flera tabeller. 769 00:36:47,333 --> 00:36:48,208 PUBLIK: [OHÖRBART] 770 00:36:48,208 --> 00:36:53,540 771 00:36:53,540 --> 00:36:55,070 >> DAVID MALAN: Exakt, exakt. 772 00:36:55,070 --> 00:36:58,450 Så pseudokoden för något liknande som kan vara så här. 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 skulle ha pseudokod kod, eller Skrapliknande block som, om användaren besöker 775 00:37:09,210 --> 00:37:19,870 acme.com/register~~V för första gången, sedan in i användare och så vidare. 776 00:37:19,870 --> 00:37:22,619 Och vi skulle översätta detta till mer konkret kod i slutet. 777 00:37:22,619 --> 00:37:24,660 Men egentligen, vi har alla byggstenarna här, 778 00:37:24,660 --> 00:37:27,680 även om vi hoppa över några av steg i genomförandet. 779 00:37:27,680 --> 00:37:31,560 >> Så låt mig hitta fel med vad vi underbart gjorde nyss. 780 00:37:31,560 --> 00:37:36,470 Du har skapat en ganska komplett tabell för användarna. 781 00:37:36,470 --> 00:37:38,920 Visserligen kunde vi genomföra det i ett par olika sätt, 782 00:37:38,920 --> 00:37:43,030 men du har faktiskt lett oss ner path-- och jag säger dig, 783 00:37:43,030 --> 00:37:48,080 men det är nog min fault-- av en ganska ineffektiv databas genomförande. 784 00:37:48,080 --> 00:37:49,950 Det är inte normaliserats. 785 00:37:49,950 --> 00:37:52,320 >> Och normaliserad menar jag det kommer att bli, 786 00:37:52,320 --> 00:37:57,380 över tiden, en betydande redundans, och därför ineffektivitet, 787 00:37:57,380 --> 00:38:00,210 det är slöseri med utrymme. 788 00:38:00,210 --> 00:38:05,650 Baserat på bara vad du ser här, kan du förutspå var detta slöseri med utrymme 789 00:38:05,650 --> 00:38:08,710 kommer att komma från tiden, eftersom fler och fler användare registrera 790 00:38:08,710 --> 00:38:10,860 för din webbplats? 791 00:38:10,860 --> 00:38:13,047 Vilka uppgifter kan bli överflödig? 792 00:38:13,047 --> 00:38:19,084 793 00:38:19,084 --> 00:38:20,940 >> PUBLIK: [OHÖRBART] 794 00:38:20,940 --> 00:38:22,686 >> DAVID MALAN: Varför menar du det? 795 00:38:22,686 --> 00:38:23,561 PUBLIK: [OHÖRBART] 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 Och låt oss anta för de ändamål i dag att det är sant. 799 00:38:35,622 --> 00:38:38,330 Det visade sig, och vi har lärt sig detta den hårda vägen, det är inte sant. 800 00:38:38,330 --> 00:38:41,670 På något sätt flera städer har, på något sätt, med samma postnummer, 801 00:38:41,670 --> 00:38:43,390 som bryter denna underbara intuition. 802 00:38:43,390 --> 00:38:46,180 Men låt oss anta att det är sant, eftersom det är nästan alltid sant. 803 00:38:46,180 --> 00:38:51,390 Så antar att ett postnummer är alltid förknippade med samma stad 804 00:38:51,390 --> 00:38:53,600 och staten, som är snäll av rimligt antagande, 805 00:38:53,600 --> 00:38:54,840 men felaktig, visar det sig. 806 00:38:54,840 --> 00:38:57,310 Men ett rimligt antagande för dagens ändamål. 807 00:38:57,310 --> 00:39:01,650 >> Då antar att jag bor i Cambridge, MA, enligt denna användarens bord, 808 00:39:01,650 --> 00:39:04,100 och antar att Lauren Scully bor i Cambridge, MA, 809 00:39:04,100 --> 00:39:06,120 och antag att Kareem bor i Cambridge, MA, 810 00:39:06,120 --> 00:39:10,400 och Arwa bor i Cambridge, MA, alla av oss i 02138. 811 00:39:10,400 --> 00:39:15,890 Varför vi minnas Cambridge, MA, 02138 för alla fyra av oss? 812 00:39:15,890 --> 00:39:18,903 Vad borde räcka för att komma ihåg? 813 00:39:18,903 --> 00:39:20,249 >> PUBLIK: [OHÖRBART] 814 00:39:20,249 --> 00:39:21,540 DAVID MALAN: Bara postnummer. 815 00:39:21,540 --> 00:39:25,080 Bara att 02138 existerar, eftersom du vet vad vi kan göra? 816 00:39:25,080 --> 00:39:32,650 Vi kunde få lite fancy här och hit, definiera en annan tabell 817 00:39:32,650 --> 00:39:35,850 där det kommer att vara namn, kommer detta att vara den typ, 818 00:39:35,850 --> 00:39:38,840 detta kommer att vara längd, och hädanefter är jag 819 00:39:38,840 --> 00:39:42,900 kommer att kalla detta mitt städer tabellen. 820 00:39:42,900 --> 00:39:47,011 Detta kallades av Naturligtvis min användare tabell. 821 00:39:47,011 --> 00:39:49,885 Och så vad ska jag sätta hit för min städer bord, tror du? 822 00:39:49,885 --> 00:39:53,605 823 00:39:53,605 --> 00:39:54,535 >> PUBLIK: [OHÖRBART] 824 00:39:54,535 --> 00:39:55,930 >> DAVID MALAN: Ja. 825 00:39:55,930 --> 00:40:01,440 Så zip och staten och staden. 826 00:40:01,440 --> 00:40:05,350 Och så den typ här, ska vi säga detta kommer att bli en röding 5 igen, 827 00:40:05,350 --> 00:40:06,750 under förutsättning att debatten om tidigare. 828 00:40:06,750 --> 00:40:14,810 Detta kommer att vara en enum, kanske som tidigare kommer och stad vara en varchar 50. 829 00:40:14,810 --> 00:40:17,960 Och så nu vad får jag att radera från denna tabell 830 00:40:17,960 --> 00:40:21,995 att eliminera den ineffektivitet? 831 00:40:21,995 --> 00:40:23,100 >> PUBLIK: [OHÖRBART] 832 00:40:23,100 --> 00:40:23,850 DAVID MALAN: Nice. 833 00:40:23,850 --> 00:40:30,239 Staten och staden försvinna, så jag har nu elimineras den potentiella ineffektivitet 834 00:40:30,239 --> 00:40:33,280 för redundant minnas, Cambridge, MA, Cambridge, MA, Cambridge, MA, 835 00:40:33,280 --> 00:40:35,712 Cambridge, MA, som förhoppningsvis aldrig kommer att förändras. 836 00:40:35,712 --> 00:40:37,670 Och även om det gör det, är det minorly irriterande, nu 837 00:40:37,670 --> 00:40:39,750 att jag måste ändra det i flera rader, 838 00:40:39,750 --> 00:40:43,770 medan här, jag kunde bara ändra det på ett ställe. 839 00:40:43,770 --> 00:40:46,890 >> Nu vad är trade-off, kanske? 840 00:40:46,890 --> 00:40:48,020 Detta var super bekvämt. 841 00:40:48,020 --> 00:40:50,730 Hade alla mina data fint tillsammans. 842 00:40:50,730 --> 00:40:53,644 Men vad är uppenbarligen fallet nu? 843 00:40:53,644 --> 00:40:55,684 >> PUBLIK: [OHÖRBART] 844 00:40:55,684 --> 00:40:58,100 DAVID MALAN: Precis, och jag är glad att du använde ordet gå, 845 00:40:58,100 --> 00:41:01,320 eftersom det är faktiskt nyckelordet, i en värld av relationsdatabaser 846 00:41:01,320 --> 00:41:05,270 i SQL, det är en verklig ord du kan skriva eller åtminstone förmedla. 847 00:41:05,270 --> 00:41:09,280 Och faktiskt, vad vi nu har att göra att välja Davids fullständig information är 848 00:41:09,280 --> 00:41:19,700 något som väljer stjärna från användare, gå städer, on-- och nu 849 00:41:19,700 --> 00:41:24,010 Jag ska bara gå till en andra linje så att denna fits-- users.zip lika med 850 00:41:24,010 --> 00:41:34,570 cities.zip, där users.ID lika med ett. 851 00:41:34,570 --> 00:41:35,550 >> Så vad händer? 852 00:41:35,550 --> 00:41:38,970 Det är fult ut, men du kan sorts läsa den från vänster till höger, uppifrån och ned. 853 00:41:38,970 --> 00:41:41,030 Välj stjärna från användare är densamma som tidigare, 854 00:41:41,030 --> 00:41:42,930 men det är inte från användare, per se. 855 00:41:42,930 --> 00:41:45,910 Det är från användare ansluta städer. 856 00:41:45,910 --> 00:41:48,520 Vad jag ansluta dessa två tabeller på? 857 00:41:48,520 --> 00:41:51,820 Jo, tydligen, den användares tabeller zip fält, 858 00:41:51,820 --> 00:41:54,810 och denna period är bara speciella syntax för att uttrycka den tanken, 859 00:41:54,810 --> 00:41:58,130 och detta är städer tabellerna zip fält. 860 00:41:58,130 --> 00:42:01,580 Jag vill att de två att vara lika, men jag vill att slutligen välja 861 00:42:01,580 --> 00:42:06,280 endast de rader där ID i tabellen användare 862 00:42:06,280 --> 00:42:08,730 är lika med 1, som råkade vara min. 863 00:42:08,730 --> 00:42:11,781 >> Och bara för att vara tydlig, en programmerare, vanligtvis när 864 00:42:11,781 --> 00:42:14,780 hårdkoda något liknande det antal 1, annars bara webbplatsen 865 00:42:14,780 --> 00:42:17,630 stöder David eller allra första användare, du 866 00:42:17,630 --> 00:42:20,720 skulle i stället göra något i stil med ID, där 867 00:42:20,720 --> 00:42:22,510 detta representerar en variabel, något som 868 00:42:22,510 --> 00:42:26,210 kan förändras över tid, liknande i anden vad jag sade tidigare 869 00:42:26,210 --> 00:42:28,080 med dessa typer av platshållare. 870 00:42:28,080 --> 00:42:30,396 Men nu ska vi bara hårdkoda det som en. 871 00:42:30,396 --> 00:42:31,520 Och så vad betyder det? 872 00:42:31,520 --> 00:42:35,100 Tja, är ett trevligt sätt att visualisera detta att om denna hand är bordet användare, 873 00:42:35,100 --> 00:42:38,090 och denna hand är blixtlås tabellen, vi slags finding-- 874 00:42:38,090 --> 00:42:41,330 och tips av mina fingrar är zip hit och tips av mina fingrar 875 00:42:41,330 --> 00:42:43,740 Här är zip, du är typ av förregling det 876 00:42:43,740 --> 00:42:47,950 så att du får tillbaka den resulterande ursprungliga tabellen, genom att verkligen gå med 877 00:42:47,950 --> 00:42:49,590 de två tabellerna på gemensamma området. 878 00:42:49,590 --> 00:42:50,840 Och det behöver inte vara dragkedja. 879 00:42:50,840 --> 00:42:54,460 Det kan vara mest något annat, men zip är trevligt, eftersom en, det är kort, 880 00:42:54,460 --> 00:42:56,470 två, det är alltid samma längd, så det finns 881 00:42:56,470 --> 00:43:02,270 en verklig effektivitet vad Olivier föreslås här 882 00:43:02,270 --> 00:43:05,200 med factoring ut zip, och [OHÖRBART] föreslår att vi bli 883 00:43:05,200 --> 00:43:07,110 av staden och stater. 884 00:43:07,110 --> 00:43:11,370 >> Så detta är den process känd som normalisering. 885 00:43:11,370 --> 00:43:14,171 Eventuella frågor om det? 886 00:43:14,171 --> 00:43:16,170 Bra låt mig påpeka Detta är den typ av saker, 887 00:43:16,170 --> 00:43:19,202 även om det är ganska låg nivå, denna diskussion, att man skulle kunna tro 888 00:43:19,202 --> 00:43:20,910 du slags få vilse i ogräs, 889 00:43:20,910 --> 00:43:26,690 Detta är ett uttryck för gott möjlighet för utvecklare att vara dåligt. 890 00:43:26,690 --> 00:43:29,600 Och i själva verket, även om vi i kurser jag har lärt, när vi har haft, 891 00:43:29,600 --> 00:43:32,290 exempelvis oerfarna grund programmerare 892 00:43:32,290 --> 00:43:35,920 bygga webbplatser, vid första anblicken, webbplatser kan se fantastiskt. 893 00:43:35,920 --> 00:43:38,280 Och de har alla funktionalitet vi begärt, 894 00:43:38,280 --> 00:43:40,650 utvecklarna gjorde ett bra jobb. 895 00:43:40,650 --> 00:43:43,370 >> Men att de inte nödvändigtvis vet tillräckligt om databasdesign 896 00:43:43,370 --> 00:43:46,680 eller de inte tror hårt tillräckligt om vilka typer av uppgifter 897 00:43:46,680 --> 00:43:49,220 och vilka typer av användare av Webbplatsen kommer att ha, 898 00:43:49,220 --> 00:43:53,240 och vi finner alltså sex månader senare, efter att de har examen eller gått vidare, 899 00:43:53,240 --> 00:43:56,016 som fan, vår hemsida är verkligen, verkligen långsamt. 900 00:43:56,016 --> 00:43:58,890 Och jag är inte ens tala om att ha miljoner eller tusentals användare. 901 00:43:58,890 --> 00:44:02,580 Jag menar några hundra användare på campus, varav alla vilja, till exempel, 902 00:44:02,580 --> 00:44:04,870 handla kurser på Samtidigt är de 903 00:44:04,870 --> 00:44:07,010 använder den kurskatalogen applikation jag nämnde 904 00:44:07,010 --> 00:44:10,410 och saken blir verkligen sakta eftersom det fanns inga index. 905 00:44:10,410 --> 00:44:13,740 Det fanns inga röda stjärnor, så att tala, eller vi hade inte nödvändigtvis 906 00:44:13,740 --> 00:44:17,690 räknas ut gemensamma data till få några besparingar i rymden. 907 00:44:17,690 --> 00:44:21,880 >> Och så när prövning en utvecklare eller databas personen eller liknande, 908 00:44:21,880 --> 00:44:25,864 den typ av frågor att tänka igenom är även, när man ser över någons kod, 909 00:44:25,864 --> 00:44:28,530 att säga, inte nödvändigtvis ser genom alla deras kod, men säga, 910 00:44:28,530 --> 00:44:30,154 låt oss titta igenom databastabeller. 911 00:44:30,154 --> 00:44:31,150 Vad du lagrar? 912 00:44:31,150 --> 00:44:33,941 Och sedan att säga, ja, vänta minut, varför använder du ett heltal? 913 00:44:33,941 --> 00:44:36,224 Vad händer om vi har 4 miljarder och en av dessa rader? 914 00:44:36,224 --> 00:44:38,140 Och dessa typer av frågor är en möjlighet 915 00:44:38,140 --> 00:44:40,170 att typ av push-back och få en känsla av, där 916 00:44:40,170 --> 00:44:42,300 om du inte är bekväm att göra det, att ha någon mer teknisk 917 00:44:42,300 --> 00:44:45,425 ställa dessa frågor, av huruvida personen verkligen känner sina grejer. 918 00:44:45,425 --> 00:44:47,890 Och detta är den typ av saker också, att folk 919 00:44:47,890 --> 00:44:50,540 på Internet som är självlärd, kanske 920 00:44:50,540 --> 00:44:53,920 lära mindre ofta, eftersom du inte nödvändigtvis komma över det 921 00:44:53,920 --> 00:44:56,630 så mycket, eftersom du kan få databasen igång, 922 00:44:56,630 --> 00:44:58,880 men om du inte har läst upp på handledning eller varit 923 00:44:58,880 --> 00:45:01,880 berättade om normalform och indexering och prestanda, 924 00:45:01,880 --> 00:45:04,255 det är dessa typer av saker som kommer att skada dig. 925 00:45:04,255 --> 00:45:07,480 Och man kan tro, eller en dålig ingenjör kan säga, oh, ja, vi bättre lön 926 00:45:07,480 --> 00:45:09,600 för en större databas eller en snabbare databas 927 00:45:09,600 --> 00:45:13,360 eller bara kasta pengar på detta, vertikalt skala, inte nödvändigtvis så. 928 00:45:13,360 --> 00:45:16,920 Om du går in-- och du kan gå in efter fact-- och lägga index, 929 00:45:16,920 --> 00:45:20,320 och det kan ta några timmar för databas för att bygga upp den nya data 930 00:45:20,320 --> 00:45:24,100 struktur som jag nämndes tidigare, du kan fortfarande fixa detta i efterhand, 931 00:45:24,100 --> 00:45:26,180 att det är där du börja att skilja 932 00:45:26,180 --> 00:45:28,830 bra designers från dåliga designers, inte bara estetiskt, 933 00:45:28,830 --> 00:45:32,972 men prestandamässigt också. 934 00:45:32,972 --> 00:45:33,555 Några frågor? 935 00:45:33,555 --> 00:45:36,420 936 00:45:36,420 --> 00:45:37,480 Nej? 937 00:45:37,480 --> 00:45:41,980 Så för NoSQL, som var den andra typen databas som jag nämnt tidigare, 938 00:45:41,980 --> 00:45:43,490 du inte har rader och kolumner. 939 00:45:43,490 --> 00:45:47,000 I stället skulle man ha något som ser lite mer om detta. 940 00:45:47,000 --> 00:45:48,630 Jag kommer att använda gemensamma syntax. 941 00:45:48,630 --> 00:45:51,270 Klamrar råkar användas här ganska mycket. 942 00:45:51,270 --> 00:45:55,400 Du kanske har något som första namn är David, 943 00:45:55,400 --> 00:46:00,180 du kanske har sista heter Malan, citationstecken, 944 00:46:00,180 --> 00:46:07,530 du kan ha ID är-- ursäkta mig, är whoops-- ID 1, 945 00:46:07,530 --> 00:46:13,410 e-post är malan@harvard.edu, och jag kommer inte bry skriva ut resten, och sedan 946 00:46:13,410 --> 00:46:14,380 vissa andra saker. 947 00:46:14,380 --> 00:46:17,380 >> Med andra ord är detta en textrepresentation 948 00:46:17,380 --> 00:46:20,720 av vad vi i allmänhet skulle kalla ett objekt i ett datorprogram. 949 00:46:20,720 --> 00:46:26,079 Och ett föremål är i allmänhet bara en samling av nyckelpar värde. 950 00:46:26,079 --> 00:46:27,370 Så återigen, denna återkommande tema. 951 00:46:27,370 --> 00:46:30,440 Vi såg nyckelvärdespar i HTML, Vi såg nyckelpar värde nu 952 00:46:30,440 --> 00:46:34,020 i samband med databaser, och vi såg nyckelpar värde i samband 953 00:46:34,020 --> 00:46:35,970 av, tror jag, ett språk tidigare idag. 954 00:46:35,970 --> 00:46:36,890 Håller kommer upp. 955 00:46:36,890 --> 00:46:39,620 Och faktiskt, det är verkligen vilka data handlar om, 956 00:46:39,620 --> 00:46:44,240 data och metadata, eller värden och nycklar, respektive. 957 00:46:44,240 --> 00:46:47,430 >> Så en icke-relationella databas, något baserad 958 00:46:47,430 --> 00:46:50,680 på objekt, där du bara klumpar allt tillsammans och sätta den 959 00:46:50,680 --> 00:46:55,640 i minnet, i allmänhet skulle vara beskrivas som, eller tänkt på, som denna. 960 00:46:55,640 --> 00:47:00,500 Och jag lämnar det nu som en slags alternativt tillvägagångssätt. 961 00:47:00,500 --> 00:47:03,750 Och en är inte nödvändigtvis bättre än den andra. 962 00:47:03,750 --> 00:47:07,310 I själva verket mycket i ropet dessa dagar är databassystem 963 00:47:07,310 --> 00:47:11,942 liknande MongoDB och Redis och några andra sådana verktyg, fritt tillgängliga, 964 00:47:11,942 --> 00:47:13,400 men de blir alltmer en vogue. 965 00:47:13,400 --> 00:47:18,850 Dels för att de erbjuder ytterligare innehåller över dessa tabell metoder, 966 00:47:18,850 --> 00:47:20,850 men också för att de är lite enklare att använda, 967 00:47:20,850 --> 00:47:24,099 eftersom du inte behöver tänka så hårt om en hel del av dessa designbeslut. 968 00:47:24,099 --> 00:47:25,970 Så plus och minus. 969 00:47:25,970 --> 00:47:29,740 Så inser att det finns alternativ utöver vad vi precis spenderat tid på. 970 00:47:29,740 --> 00:47:32,310 >> Så låt oss göra detta. 971 00:47:32,310 --> 00:47:37,870 Låt oss övergå lite tillbaka nu till webbprogrammering, 972 00:47:37,870 --> 00:47:40,470 så att vi typ av avsluta idag med något 973 00:47:40,470 --> 00:47:43,930 Det är lite hands-on, fyllning i vissa luckor från igår. 974 00:47:43,930 --> 00:47:45,340 Låt mig gå till denna första. 975 00:47:45,340 --> 00:47:49,310 Så minns att igår Vi hade några kanoniska HTML 976 00:47:49,310 --> 00:47:55,110 sidor som hade från början, bara HTML, och sedan i andra hand hade CSS, 977 00:47:55,110 --> 00:47:56,620 Cascading Style Sheets. 978 00:47:56,620 --> 00:47:59,830 Detta är en ny tagg som vi inte se igår, eller bo på, 979 00:47:59,830 --> 00:48:01,490 så kallade skripttagg. 980 00:48:01,490 --> 00:48:05,830 >> Det visade sig att du faktiskt kan bädda in en språk som kallas JavaScript i din webb 981 00:48:05,830 --> 00:48:08,310 sida och gör din webb sidor gör något. 982 00:48:08,310 --> 00:48:09,710 Så vad menar jag med det? 983 00:48:09,710 --> 00:48:12,630 Nåväl, låt mig gå vidare och bara låna denna kod för en stund. 984 00:48:12,630 --> 00:48:15,860 Jag kommer att gå in i Cloud9, inget behov att åka dit er ännu, 985 00:48:15,860 --> 00:48:21,350 och jag kommer att kalla detta alert.HTML. 986 00:48:21,350 --> 00:48:23,650 Jag kommer att klistra in min fil här. 987 00:48:23,650 --> 00:48:32,070 Och bara för att klargöra vad jag har gjort, låt mig gå till denna adress och går för att varna, 988 00:48:32,070 --> 00:48:33,870 och du ser Hello World. 989 00:48:33,870 --> 00:48:35,440 >> Men det är typ av underwhelming. 990 00:48:35,440 --> 00:48:37,410 jag vill göra något lite annorlunda. 991 00:48:37,410 --> 00:48:40,610 Så jag kommer att faktiskt göra detta. 992 00:48:40,610 --> 00:48:43,820 Jag kommer att gå in här e, och mellan mina script-taggar, 993 00:48:43,820 --> 00:48:53,460 säger alert ( "Hej, världen"); så meddelande det är lite slarvigt, men jag har HTML, 994 00:48:53,460 --> 00:48:56,180 inuti vilket är en språk som kallas JavaScript 995 00:48:56,180 --> 00:48:59,420 och detta är vad som kallas en funktionsanrop eller proceduranropet. 996 00:48:59,420 --> 00:49:04,500 Detta är ett verb, bokstavligen, i detta fall, och jag åberopar kod funktionalitet 997 00:49:04,500 --> 00:49:06,310 att någon annan skrev. 998 00:49:06,310 --> 00:49:09,630 >> Så att funktionaliteten är en alert, så låt oss gå till denna sida 999 00:49:09,630 --> 00:49:14,046 nu och klicka omladdning, och nu se lite av interaktivitet. 1000 00:49:14,046 --> 00:49:15,420 Det är typ av gamla skolan och ful. 1001 00:49:15,420 --> 00:49:18,580 Denna typ av påminner dig om pop-ups, kanske, från förr 1002 00:49:18,580 --> 00:49:22,030 men det gjorde något lite mer programmatisk. 1003 00:49:22,030 --> 00:49:26,940 >> Så mer än så, låt oss göra något mer intressant. 1004 00:49:26,940 --> 00:49:30,980 Låt mig gå in här och bli av med detta. 1005 00:49:30,980 --> 00:49:33,840 Och jag kommer att gå vidare och skapa ett formulär som vi gjorde igår. 1006 00:49:33,840 --> 00:49:34,840 Egentligen vet du vad? 1007 00:49:34,840 --> 00:49:37,350 Jag kommer att gå in google.html, som vi 1008 00:49:37,350 --> 00:49:43,027 började på igår, som såg ut som detta, via vilken vi sökte efter katt 1009 00:49:43,027 --> 00:49:45,360 Men märker att det är lite av en fel i den nuvarande versionen. 1010 00:49:45,360 --> 00:49:49,770 Det fungerar för katter, men antar att Jag samarbetar inte och jag skriver ingenting, 1011 00:49:49,770 --> 00:49:53,290 och jag klickar ber. 1012 00:49:53,290 --> 00:49:54,540 Det är lite konstigt beteende. 1013 00:49:54,540 --> 00:49:57,300 Tog mig till den verkliga Google, gav mig inte ett felmeddelande. 1014 00:49:57,300 --> 00:50:00,590 Jag skulle vilja tala om för användaren du behöver för att ge oss ett värde. 1015 00:50:00,590 --> 00:50:01,780 >> Så hur kan vi göra detta? 1016 00:50:01,780 --> 00:50:06,790 Bra låt mig gå tillbaka till Cloud9 och Låt mig gå in i toppen av min sida 1017 00:50:06,790 --> 00:50:11,980 och lägga till en script-tagg som denna, där Jag kommer att skriva några JavaScript-kod. 1018 00:50:11,980 --> 00:50:15,420 Och jag kommer att göra följande. 1019 00:50:15,420 --> 00:50:22,910 Om (document.getelementByID-- och återkallande att vi talade om det tidigare, 1020 00:50:22,910 --> 00:50:23,960 denna funktion. 1021 00:50:23,960 --> 00:50:25,310 Vad ID vill jag få? 1022 00:50:25,310 --> 00:50:33,050 Jag vill få q, och jag ska säg lika med ingenting, som this-- 1023 00:50:33,050 --> 00:50:38,220 faktiskt Låt mig använda citationstecken bara för consistency-- lika ingenting, 1024 00:50:38,220 --> 00:50:46,650 då alert ( "Skriv en fråga") här. 1025 00:50:46,650 --> 00:50:49,200 >> Så jag har vad som verkar vara något som en förutsättning. 1026 00:50:49,200 --> 00:50:51,410 Vi har sett denna allmän uppfattning i Scratch. 1027 00:50:51,410 --> 00:50:54,240 Det är som en av de pussel bitar som såg ut så här. 1028 00:50:54,240 --> 00:50:55,780 Och vad säger jag? 1029 00:50:55,780 --> 00:50:59,520 Tja, här nere, märker jag kommer att göra följande. 1030 00:50:59,520 --> 00:51:02,790 Jag kommer att ge denna form fält inte bara ett namn på q, som 1031 00:51:02,790 --> 00:51:06,630 är vad som får skickas till Google, men jag är kommer att ge det en lokal identifierare, 1032 00:51:06,630 --> 00:51:07,630 även kallad q. 1033 00:51:07,630 --> 00:51:11,780 Men jag kan kalla detta något jag vill jag bara att hålla det enkelt 1034 00:51:11,780 --> 00:51:14,570 och även kallar det q, bara för enkelhetens skull. 1035 00:51:14,570 --> 00:51:17,650 >> Och nu ska jag göra något lite mer. 1036 00:51:17,650 --> 00:51:22,600 På formulärfält här, kommer jag att lägga till vad som kallas en händelsehanterare. 1037 00:51:22,600 --> 00:51:32,260 På lämna, jag vill ringa en funktion som kallas validera. 1038 00:51:32,260 --> 00:51:35,520 Detta existerar inte ännu, detta ord eller denna verb validera, 1039 00:51:35,520 --> 00:51:38,560 eftersom vad jag ska göra upp här nu är att lägga lite kod. 1040 00:51:38,560 --> 00:51:42,200 >> Jag kommer att säga funktionen validera. 1041 00:51:42,200 --> 00:51:48,280 Jag kommer att dra in detta och lägga till en annan klammerparentes här och en annan här. 1042 00:51:48,280 --> 00:51:50,110 Tänk på vad detta nu gör. 1043 00:51:50,110 --> 00:51:54,210 Jag har now-- tänka på detta som skapade min egen pusselbit som inte tidigare 1044 00:51:54,210 --> 00:51:57,440 existerar, och jag har kallat detta pussel pussla validate pusselbit. 1045 00:51:57,440 --> 00:52:01,620 Dess syfte i livet är att verkställa fyra rader kod inne i den. 1046 00:52:01,620 --> 00:52:04,940 >> Om document.getElementById så konceptuellt, 1047 00:52:04,940 --> 00:52:09,380 som kommer att gå in i elementet, HTML-elementet vars unika 1048 00:52:09,380 --> 00:52:12,930 Tanken är bara q, och sedan även om syntaxen ser lite konstig, 1049 00:52:12,930 --> 00:52:16,430 att lika lika betyder bara jämlikar. 1050 00:52:16,430 --> 00:52:20,950 Så det betyder att om elementet med unik identifierare för q, när fått, 1051 00:52:20,950 --> 00:52:25,700 har inget värde, bara lika det citat unquote, ingenting där, 1052 00:52:25,700 --> 00:52:27,170 vad vill jag göra? 1053 00:52:27,170 --> 00:52:29,360 Jag vill skrika på användaren. 1054 00:52:29,360 --> 00:52:31,710 >> Och vi kommer inte att gå detalj här. 1055 00:52:31,710 --> 00:52:32,960 Jag kommer att returnera false. 1056 00:52:32,960 --> 00:52:34,380 Det är ett fel. 1057 00:52:34,380 --> 00:52:38,746 Annars kommer jag att återvända sant. 1058 00:52:38,746 --> 00:52:40,120 Så antingen det fungerade eller så inte är fallet. 1059 00:52:40,120 --> 00:52:41,800 Falsk eller sann. 1060 00:52:41,800 --> 00:52:47,820 Och nu om jag inte gjorde några misstag, Låt mig spara och ladda om. 1061 00:52:47,820 --> 00:52:50,940 Och låt mig bara dubbelkolla att Jag inte, i själva verket gör några stavfel, 1062 00:52:50,940 --> 00:52:52,690 så jag inte genera mig. 1063 00:52:52,690 --> 00:52:54,240 Låt oss se om det fungerar. 1064 00:52:54,240 --> 00:52:56,930 >> Så nu ska jag skriva katter. 1065 00:52:56,930 --> 00:52:59,421 Den fungerar fortfarande, eller halv verk, åtminstone. 1066 00:52:59,421 --> 00:53:02,170 Låt mig ladda om den, och nu låt mig försöka lämna in utan att skriva 1067 00:53:02,170 --> 00:53:05,860 anything-- fan det, bröt det. 1068 00:53:05,860 --> 00:53:06,430 Ett ögonblick. 1069 00:53:06,430 --> 00:53:09,380 1070 00:53:09,380 --> 00:53:12,660 Låt mig öppna konsolen, [OHÖRBART] log, ladda om sidan. 1071 00:53:12,660 --> 00:53:13,576 Låt mig försöka här igen. 1072 00:53:13,576 --> 00:53:17,000 1073 00:53:17,000 --> 00:53:17,501 Åh, fan. 1074 00:53:17,501 --> 00:53:18,000 Jag glömde. 1075 00:53:18,000 --> 00:53:18,630 Jag gjorde ett stavfel. 1076 00:53:18,630 --> 00:53:20,760 Jag kommer ihåg vad det är. 1077 00:53:20,760 --> 00:53:21,350 .värde. 1078 00:53:21,350 --> 00:53:27,060 Jag menade att säga om värdet av elementet vars ID är q 1079 00:53:27,060 --> 00:53:29,800 lika att sedan skrika på användaren. 1080 00:53:29,800 --> 00:53:31,870 >> Så nu vill jag hålla andan igen. 1081 00:53:31,870 --> 00:53:33,480 Nu kör vi. 1082 00:53:33,480 --> 00:53:34,130 Det går vi. 1083 00:53:34,130 --> 00:53:35,010 Skriv en fråga. 1084 00:53:35,010 --> 00:53:36,840 Så det är inte låta mig igenom. 1085 00:53:36,840 --> 00:53:40,210 Jag kan vara typ av lekfull med detta, och i stället för kontroll av något värde, 1086 00:53:40,210 --> 00:53:46,720 Jag kan säga något liknande, inte mer letande efter katter, 1087 00:53:46,720 --> 00:53:51,150 och nu kan vi bara mer lekfullt låta användaren söka efter hundar om han eller hon 1088 00:53:51,150 --> 00:53:57,490 vill, eller om jag går in här och söka efter katter, nu kan jag inte. 1089 00:53:57,490 --> 00:53:58,690 >> Så vad är takeaway här? 1090 00:53:58,690 --> 00:54:03,010 Så en, har vi infört i vår värld av HTML och CSS, 1091 00:54:03,010 --> 00:54:04,320 programmering funktionalitet. 1092 00:54:04,320 --> 00:54:06,300 Jag kan faktiskt nu fatta beslut i koden. 1093 00:54:06,300 --> 00:54:10,570 Tidigare är allt jag kunde göra märka upp textinnehåll eller grafiskt innehåll 1094 00:54:10,570 --> 00:54:13,080 och tala om vad att se ut och var att visa. 1095 00:54:13,080 --> 00:54:16,650 Nu kan jag faktiskt fråga frågor om webbsidan 1096 00:54:16,650 --> 00:54:20,010 och fatta beslut baserade på den, och uppmana användaren 1097 00:54:20,010 --> 00:54:22,780 om jag behöver skrika på honom eller henne. 1098 00:54:22,780 --> 00:54:28,740 >> Så låt oss prova något på vår egen med detta. 1099 00:54:28,740 --> 00:54:33,350 Gå vidare, låt mig att öppna upp nästa bild här och bara påpeka en sak. 1100 00:54:33,350 --> 00:54:37,250 Precis som med CSS, kan vi räkna ut vår JavaScript-kod till en separat fil, 1101 00:54:37,250 --> 00:54:40,660 du kan göra samma sak med JavaScript som med CSS. 1102 00:54:40,660 --> 00:54:44,520 Och du använder som använder en källa attribut av skripttagg. 1103 00:54:44,520 --> 00:54:46,540 Men vi kommer inte att komplicera saker för nu. 1104 00:54:46,540 --> 00:54:50,440 Istället, om du kunde gå till inte denna sida, 1105 00:54:50,440 --> 00:55:02,690 men-- låt mig flytta runt i order-- gå till, om du kunde, denna sida här. 1106 00:55:02,690 --> 00:55:03,592 Denna URL här. 1107 00:55:03,592 --> 00:55:04,550 Det är i dagens diabilder. 1108 00:55:04,550 --> 00:55:07,133 Du kan behöva ladda om eftersom Jag har lagt till ett par sak. 1109 00:55:07,133 --> 00:55:09,970 1110 00:55:09,970 --> 00:55:13,890 >> Men dit där vissa pussel väntar. 1111 00:55:13,890 --> 00:55:16,670 Och detta kommer att ge oss en chans, i en något mer kul sammanhang 1112 00:55:16,670 --> 00:55:20,610 att fuska med några JavaScript. 1113 00:55:20,610 --> 00:55:25,505 Och när du kommer dit, Jag ska förklara vad som väntar. 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 Ställ blå. 1118 00:56:03,562 --> 00:56:11,030 1119 00:56:11,030 --> 00:56:13,930 Ställer grön, sätter rött. 1120 00:56:13,930 --> 00:56:19,220 1121 00:56:19,220 --> 00:56:20,220 Oj då. 1122 00:56:20,220 --> 00:56:22,330 Förlåt. 1123 00:56:22,330 --> 00:56:27,630 >> Detta är omfattningen av vår dokumentation för denna utmaning. 1124 00:56:27,630 --> 00:56:29,920 Och detta kommer att fungera på följande sätt. 1125 00:56:29,920 --> 00:56:33,340 Så vad du har på detta sida är en hel massa 1126 00:56:33,340 --> 00:56:38,024 bild pussel med en kompis vid Stanford University. 1127 00:56:38,024 --> 00:56:41,190 Så vad du ser här är nästan typ av en av dessa magiska ögat pussel, 1128 00:56:41,190 --> 00:56:43,815 men om du bara stirrar på det, ingenting kommer att poppa ut på dig. 1129 00:56:43,815 --> 00:56:46,000 Snarare är något gömd i den här bilden. 1130 00:56:46,000 --> 00:56:47,790 Och det är dolt på följande sätt. 1131 00:56:47,790 --> 00:56:51,740 Bilder, som ni kanske vet, kan vara med bara tre färger. 1132 00:56:51,740 --> 00:56:53,346 Lite rött, lite blått, och några gröna. 1133 00:56:53,346 --> 00:56:55,220 Och vi kan göra hela färger i regnbågen 1134 00:56:55,220 --> 00:56:57,570 genom att blanda dessa tre färger på något sätt. 1135 00:56:57,570 --> 00:57:01,940 >> Så det här ser mestadels grönt och blå, men som Nick säger här, 1136 00:57:01,940 --> 00:57:04,060 detta järn pussel bild är ett pussel. 1137 00:57:04,060 --> 00:57:06,780 Den innehåller en bild av något känt, dock 1138 00:57:06,780 --> 00:57:08,310 bilden har missuppfattats. 1139 00:57:08,310 --> 00:57:11,500 Den berömda objektet är i de röda värdena. 1140 00:57:11,500 --> 00:57:13,810 Men den röda värden har alla delats med 10. 1141 00:57:13,810 --> 00:57:16,230 Så de är för små med en faktor 10. 1142 00:57:16,230 --> 00:57:18,280 Så med andra ord, Nick tog en originalbild, 1143 00:57:18,280 --> 00:57:21,500 och han desaturated alla av röd från det, 1144 00:57:21,500 --> 00:57:23,850 att minska mängden av rött bläck, om ni så vill, i det. 1145 00:57:23,850 --> 00:57:26,060 >> De blå och gröna värden är alla bara meningslöst, 1146 00:57:26,060 --> 00:57:30,000 slumpmässiga värden, aka buller utformade att fördunkla den verkliga bilden. 1147 00:57:30,000 --> 00:57:32,250 Så vad Nick gjorde han tonas ned den röda och sedan 1148 00:57:32,250 --> 00:57:34,380 Han kastade bara slump mängder av blått och grönt 1149 00:57:34,380 --> 00:57:37,590 på bilden för typ av oklar vad som faktiskt fortfarande kvar. 1150 00:57:37,590 --> 00:57:41,089 Du måste ångra dessa störningar för att avslöja bilden. 1151 00:57:41,089 --> 00:57:44,255 Först ställa in alla de blå och gröna värden till noll för att få dem ur vägen, 1152 00:57:44,255 --> 00:57:48,700 och titta på resultatet. Sedan multiplicera varje röd värde av 10, 1153 00:57:48,700 --> 00:57:51,720 skala tillbaka till ungefär dess slutliga värdet. 1154 00:57:51,720 --> 00:57:53,035 Vad är den berömda föremål? 1155 00:57:53,035 --> 00:57:57,920 >> Så alla ni har denna rektangel i webbläsaren just nu. 1156 00:57:57,920 --> 00:58:00,830 Och märker att det finns en viss startkoden, så att säga. 1157 00:58:00,830 --> 00:58:04,370 Detta är JavaScript-kod som Nick har skrivit för dig. 1158 00:58:04,370 --> 00:58:07,250 Och märker att det finns en linje i mitten som 1159 00:58:07,250 --> 00:58:10,380 börjar med ett snedstreck snedstreck, det är vad brukar kallas en kommentar. 1160 00:58:10,380 --> 00:58:14,660 Det betyder att det är en fras till programmeraren som inte har någon funktionell betydelse. 1161 00:58:14,660 --> 00:58:16,520 Det är bara en visuell kö för att människan. 1162 00:58:16,520 --> 00:58:18,670 >> Så du kan gå vidare och ta bort just den raden, 1163 00:58:18,670 --> 00:58:22,214 och vara super noga med att inte ta bort eller ändra något annat. 1164 00:58:22,214 --> 00:58:25,130 Och låt mig bara gå igenom vad denna kod gör och jag lämnar det 1165 00:58:25,130 --> 00:58:28,580 till dig att räkna ut den hemliga bilden. 1166 00:58:28,580 --> 00:58:32,226 Denna första raden här som jag har bara markerad ger dig följande. 1167 00:58:32,226 --> 00:58:34,100 På den vänstra sidan, du har vad som kallas 1168 00:58:34,100 --> 00:58:39,140 en variabel som Nick har godtyckligt, men rimligen kallas im för bilden. 1169 00:58:39,140 --> 00:58:41,660 På höger sida av det likhetstecken, 1170 00:58:41,660 --> 00:58:45,240 han säger att ge mig en ny citationstecken, unquote "enkel bild". 1171 00:58:45,240 --> 00:58:49,680 >> Enkel bild, i detta sammanhang är vad som kallas en klass, ja, 1172 00:58:49,680 --> 00:58:53,910 Det är ungefär som en class-- tekniskt en prototype-- men egentligen, 1173 00:58:53,910 --> 00:58:58,000 Detta ger mig ett nytt objekt, vars innehåll är filen, 1174 00:58:58,000 --> 00:58:59,610 järn-puzzle.png. 1175 00:58:59,610 --> 00:59:03,190 Med andra ord, har Nick skapat denna föreställning om en enkel bild 1176 00:59:03,190 --> 00:59:05,920 så att vi kan, för pedagogiska ändamål, leka med bilden 1177 00:59:05,920 --> 00:59:09,790 och ändra dess röda, gröna och blå värden. 1178 00:59:09,790 --> 00:59:11,750 >> Och hur gör vi det? 1179 00:59:11,750 --> 00:59:15,360 Detta något kryptiska syntax här är ungefär som att repetera blockering 1180 00:59:15,360 --> 00:59:19,140 att en del av er såg i Scratch tidigare idag, där du kan upprepa 10 gånger. 1181 00:59:19,140 --> 00:59:22,220 I det här fallet har Nick inte hårdkodade ett antal som 10. 1182 00:59:22,220 --> 00:59:28,020 Istället han säger, initiera en variabel som heter x till 0, 1183 00:59:28,020 --> 00:59:33,180 kontrollera om x är mindre än bredden av bilden. 1184 00:59:33,180 --> 00:59:38,160 >> Och så för att vara mer korrekt, är avbilda variabel, punkt innebär gå inne i det 1185 00:59:38,160 --> 00:59:40,900 och få dess bredd, och sedan öppna Paren, stängd 1186 00:59:40,900 --> 00:59:43,687 Paren är bara en programmerare sätt att säga detta är en funktion. 1187 00:59:43,687 --> 00:59:44,520 Detta är ett förfarande. 1188 00:59:44,520 --> 00:59:46,430 Detta är funktionalitet någon annan skrev. 1189 00:59:46,430 --> 00:59:48,570 Använd den och ge mig tillbaka ett svar. 1190 00:59:48,570 --> 00:59:53,610 Och då x ++ är ett fint sätt att sade efter att du har gjort detta en gång, 1191 00:59:53,610 --> 00:59:55,850 öka x med ett. 1192 00:59:55,850 --> 00:59:58,760 Med andra ord, detta är en programmerare sätt 1193 00:59:58,760 --> 01:00:05,760 att inducera en slinga som är kommer att iterera över 1194 01:00:05,760 --> 01:00:10,410 alla kolumner i en bild. 1195 01:00:10,410 --> 01:00:14,790 >> En bild är bara ett rutnät av prickar, rader och kolumner av prickar. 1196 01:00:14,790 --> 01:00:18,270 Detta är ett sätt att iteration över alla dessa kolonner. 1197 01:00:18,270 --> 01:00:20,770 Och på insidan, Samtidigt ska vi iteration 1198 01:00:20,770 --> 01:00:24,030 under de höjder, här och här och här. 1199 01:00:24,030 --> 01:00:29,442 Så det här är bara ett sätt att Traipsing, nästan som en gammal skola skrivmaskin, 1200 01:00:29,442 --> 01:00:32,230 att bara gå över hela bilden iterativt. 1201 01:00:32,230 --> 01:00:36,370 Även det är inte riktigt helt klar, bara ta på tro för nu, 1202 01:00:36,370 --> 01:00:38,880 att dessa tre linjer av kod tillsammans är 1203 01:00:38,880 --> 01:00:43,090 kommer att tillåta dig att iterativt se vid varje pixel, varje prick i bilden. 1204 01:00:43,090 --> 01:00:43,790 >> Vad är en pixel? 1205 01:00:43,790 --> 01:00:46,250 Jo, att vara tydlig, om vi ser på den ursprungliga och zooma in, 1206 01:00:46,250 --> 01:00:49,060 om du verkligen sätta dina ögon till datorskärmen, det är 1207 01:00:49,060 --> 01:00:53,510 bara en massa punkter, flera tusen punkter sammanpackade där. 1208 01:00:53,510 --> 01:00:56,180 Och så vad är du om att göra? 1209 01:00:56,180 --> 01:00:59,240 Var och en av dessa punkter, en slutlig definition, 1210 01:00:59,240 --> 01:01:06,350 är ett resultat av vad som finns i allmänhet kallas RGB, röd, grön, blå, vilket 1211 01:01:06,350 --> 01:01:09,940 igen, kan kombineras för att ge dig ett obegränsat antal färger. 1212 01:01:09,940 --> 01:01:13,200 >> I själva verket, om du kommer ihåg från många, många år sedan, 1213 01:01:13,200 --> 01:01:17,320 projektordukar som dessa saker brukade ha inte en objektiv utan tre. 1214 01:01:17,320 --> 01:01:20,700 En av dem spotta ut rött ljus, en av dem spotta ut grönt ljus, en av dem 1215 01:01:20,700 --> 01:01:21,600 spotta ut blått ljus. 1216 01:01:21,600 --> 01:01:24,391 Och om du var i en mellanstadium som jag var där de var aldrig 1217 01:01:24,391 --> 01:01:27,000 korrekt inställd, du var alltid titta på historie filmer 1218 01:01:27,000 --> 01:01:29,770 som var något förvrängd, eftersom de tre färgerna var inte 1219 01:01:29,770 --> 01:01:30,970 kombinera ordentligt. 1220 01:01:30,970 --> 01:01:36,330 >> Men det visar sig att var och en av dessa värden rött, grönt och blått, 1221 01:01:36,330 --> 01:01:37,980 kan ha ett antal associerade med dem. 1222 01:01:37,980 --> 01:01:42,500 Exempelvis 0 för rött betyder ingen röd, 0 för grönt betyder inget grönt, 1223 01:01:42,500 --> 01:01:45,120 och 0 för blå innebär ingen blå. 1224 01:01:45,120 --> 01:01:49,403 Så om du har något rött, inget grönt, och ingen blå, vilken färg har du? 1225 01:01:49,403 --> 01:01:51,009 >> PUBLIK: [OHÖRBART] 1226 01:01:51,009 --> 01:01:52,800 DAVID MALAN: Du skulle hoppas det, det är vitt. 1227 01:01:52,800 --> 01:01:55,333 Tyvärr operates-- denna ledsen? 1228 01:01:55,333 --> 01:01:56,380 >> PUBLIK: [OHÖRBART] 1229 01:01:56,380 --> 01:01:58,630 DAVID MALAN: Så du faktiskt har svart, i det här fallet. 1230 01:01:58,630 --> 01:02:01,530 Så om du har ingen av dessa färger påslagen du har svart. 1231 01:02:01,530 --> 01:02:06,510 Men om du har, låt oss säga en hel del av dem, liksom en hel del rött, 255 av det, 1232 01:02:06,510 --> 01:02:10,340 mycket grönt, och en hel del blå, är det vitt. 1233 01:02:10,340 --> 01:02:12,230 Så dessa är de två ytterligheterna. 1234 01:02:12,230 --> 01:02:17,460 Så genom denna logik, om jag har en hel del rött och inget grönt och inget blått, 1235 01:02:17,460 --> 01:02:18,485 vilken färg är det? 1236 01:02:18,485 --> 01:02:19,360 PUBLIK: [OHÖRBART] 1237 01:02:19,360 --> 01:02:20,610 DAVID MALAN: Höger, naturligtvis. 1238 01:02:20,610 --> 01:02:25,940 Och då ingen röd, mycket grön, ingen blå, och sedan 1239 01:02:25,940 --> 01:02:29,590 Om du have-- bra, vi bara avsluta det, därför att precis, men detta, naturligtvis, 1240 01:02:29,590 --> 01:02:31,350 nu är blå. 1241 01:02:31,350 --> 01:02:33,030 Och nu kan du kombinera dessa färger. 1242 01:02:33,030 --> 01:02:36,430 Nu som en sidoreplik, om någon av er har någonsin gjort några faktiska webbdesign, 1243 01:02:36,430 --> 01:02:38,360 du kanske faktiskt se symboler som denna. 1244 01:02:38,360 --> 01:02:42,030 FFF-- och faktiskt är det förmodligen inte ens det. 1245 01:02:42,030 --> 01:02:44,380 Det är FFFFFF. 1246 01:02:44,380 --> 01:02:48,970 >> Någon någonsin sett F: s och E: s och A through-- så visar det sig, 1247 01:02:48,970 --> 01:02:52,970 Vi pratade igår om decimal, och idag, typ av om decimal. 1248 01:02:52,970 --> 01:02:54,570 Idag talade vi om binär. 1249 01:02:54,570 --> 01:02:59,010 Det visade sig, är hexadecimalt en mycket gemensam bas system att använda i datoranvändning. 1250 01:02:59,010 --> 01:03:04,960 Binary är två, är decimal 10, är ​​hex 16. 1251 01:03:04,960 --> 01:03:08,640 Och det visar sig, hur man räknar i hexadecimal? 1252 01:03:08,640 --> 01:03:11,620 Noll, ett, två, tre, fyra, fem, sex, sju, åtta, 1253 01:03:11,620 --> 01:03:14,730 nio, vad använder ni efter nio? 1254 01:03:14,730 --> 01:03:16,600 Vad är nästa nummer? 1255 01:03:16,600 --> 01:03:19,180 Vi använde redan noll. 1256 01:03:19,180 --> 01:03:20,570 Jag behöver 16 av dessa. 1257 01:03:20,570 --> 01:03:25,770 Noll, ett, två, tre, fyra, fem, sex, sju, åtta, nio, 1258 01:03:25,770 --> 01:03:27,520 du behöver någon godtycklig konvention. 1259 01:03:27,520 --> 01:03:30,810 >> Och vad människan beslutade en tid sedan att efter nio kommer bokstaven 1260 01:03:30,810 --> 01:03:34,450 A och sedan B och sedan C Så sätt man räknar i hexadecimal 1261 01:03:34,450 --> 01:03:37,040 är noll, ett, två, tre, fyra, fem, sex, sju, åtta, nio, 1262 01:03:37,040 --> 01:03:42,880 A, B, C, D, E, F, och det kommer att räkna du hela vägen, visar det sig, till 15. 1263 01:03:42,880 --> 01:03:47,850 Så noll till 15 är noll genom F. Nu varför är det viktigt? 1264 01:03:47,850 --> 01:03:51,570 Jo, när du har två F-talet, det är hur du uttrycker 255. 1265 01:03:51,570 --> 01:03:54,350 >> Så lång historia kort, i värld Photoshop, 1266 01:03:54,350 --> 01:03:57,299 som grafisk design mjukvara, i en värld av webbutveckling, 1267 01:03:57,299 --> 01:03:59,590 där du har massor av färger, naturligtvis att leka med, 1268 01:03:59,590 --> 01:04:02,350 ofta programmerare kommer uttrycka de i hexadecimal, 1269 01:04:02,350 --> 01:04:05,260 bara för att det tenderar att vara lite enklare. 1270 01:04:05,260 --> 01:04:07,850 Även om det vid första anblicken det är mycket mer komplex. 1271 01:04:07,850 --> 01:04:11,590 >> Så i alla fall, är det viktigt eftersom Nick vid Stanford 1272 01:04:11,590 --> 01:04:15,100 har gett oss sex stycken av funktionalitet att du, de knoppande programmerare, 1273 01:04:15,100 --> 01:04:17,060 kommer nu att ha förmågan att använda. 1274 01:04:17,060 --> 01:04:19,960 Inbyggt i denna web sidan är sex funktioner, 1275 01:04:19,960 --> 01:04:21,820 sex förfaranden som Nick skrev. 1276 01:04:21,820 --> 01:04:26,800 Tre av dem kommer att få dig ett antal, en röd, en grön eller blå värde. 1277 01:04:26,800 --> 01:04:28,787 Tre av dem kommer att ställa det värdet. 1278 01:04:28,787 --> 01:04:30,620 Och dessa streck är bara platshållare, 1279 01:04:30,620 --> 01:04:32,600 så du behöver veta vad de är. 1280 01:04:32,600 --> 01:04:36,240 >> Så med dessa tre funktioner, den första av dessa saker 1281 01:04:36,240 --> 01:04:39,190 kommer att vara en x-koordinat, och den andra av dessa saker 1282 01:04:39,190 --> 01:04:40,700 kommer att bli en y-koordinat. 1283 01:04:40,700 --> 01:04:44,650 Med andra ord, som pricken, vilket pixel vill du få gröna, 1284 01:04:44,650 --> 01:04:46,480 få blå, få de röda. 1285 01:04:46,480 --> 01:04:51,440 Och så här, kommer detta att vara x, kommer detta att vara en Y-värde, 1286 01:04:51,440 --> 01:04:55,379 och detta kommer att vara en siffra. 1287 01:04:55,379 --> 01:04:57,170 Så låt oss göra det första linje detta tillsammans 1288 01:04:57,170 --> 01:05:00,220 och då jag lämnar det till dig för att försöka härleda resten. 1289 01:05:00,220 --> 01:05:03,100 Så enligt instruktionerna På den här sidan behöver vi 1290 01:05:03,100 --> 01:05:08,960 att öka den röda med en faktor av 10, och vi måste ta bort det gröna 1291 01:05:08,960 --> 01:05:09,930 och ta bort den blå. 1292 01:05:09,930 --> 01:05:12,410 Låt oss börja med de sistnämnda scenarierna. 1293 01:05:12,410 --> 01:05:17,760 Så om jag vill, och jag ska att dra in genom att använda vissa utrymmen, 1294 01:05:17,760 --> 01:05:22,291 om jag vill ställa den röda, den gröna eller blå värde, 1295 01:05:22,291 --> 01:05:23,540 Jag kommer att göra följande. 1296 01:05:23,540 --> 01:05:31,280 >> Bild, im.setBlue, och sedan baserat på mina instruktioner här, 1297 01:05:31,280 --> 01:05:36,700 Vilka tre saker skulle jag skriver insidan av parenteser nu? 1298 01:05:36,700 --> 01:05:41,960 Jag behöver x-värdet, den y-värde, och hur många 1299 01:05:41,960 --> 01:05:48,770 ska jag sätta här om jag vill bli av blå, baserat på denna berättelse här? 1300 01:05:48,770 --> 01:05:49,630 Bara noll. 1301 01:05:49,630 --> 01:05:52,420 Om jag vill inte blå, jag är bara kommer att ändra det till noll. 1302 01:05:52,420 --> 01:05:54,465 >> Låt oss nu bara sammanfatta vad det gör. 1303 01:05:54,465 --> 01:05:56,970 1304 01:05:56,970 --> 01:06:01,170 Jag har här på dessa topp andra och tredje raden, 1305 01:06:01,170 --> 01:06:04,080 Jag hävdade två slingor, kapslade slingor, om du 1306 01:06:04,080 --> 01:06:08,360 kommer som kommer att ha effekt av att gå från vänster till höger, 1307 01:06:08,360 --> 01:06:11,590 topp till botten över alla X värderingar och alla av y-värdena. 1308 01:06:11,590 --> 01:06:15,167 Eftersom igen, är en bild bara ett rutnät av rader och kolumner. 1309 01:06:15,167 --> 01:06:17,000 Så detta kommer att få bort alla blå. 1310 01:06:17,000 --> 01:06:18,627 Låt mig lämna i nästa rad till dig. 1311 01:06:18,627 --> 01:06:20,043 Hur blir jag av alla gröna? 1312 01:06:20,043 --> 01:06:23,747 1313 01:06:23,747 --> 01:06:25,140 >> PUBLIK: [OHÖRBART] 1314 01:06:25,140 --> 01:06:26,151 >> DAVID MALAN: Nice. 1315 01:06:26,151 --> 01:06:28,260 >> PUBLIK: [OHÖRBART] 1316 01:06:28,260 --> 01:06:30,850 >> DAVID MALAN: Nice. 1317 01:06:30,850 --> 01:06:36,120 Och jag kommer att zooma ut och bara ta hand om att du inte har gjort några stavfel. 1318 01:06:36,120 --> 01:06:39,390 Och om du känner dig bekväm med vad du har gjort, 1319 01:06:39,390 --> 01:06:42,936 gå vidare och klicka på knappen Kör / Spara och se vad du får. 1320 01:06:42,936 --> 01:06:46,982 1321 01:06:46,982 --> 01:06:48,690 Och återigen, har vi gjort bara tre förändringar. 1322 01:06:48,690 --> 01:06:52,130 Vi utgår det första kommentera och ersatt det 1323 01:06:52,130 --> 01:06:53,575 med dessa två rader kod. 1324 01:06:53,575 --> 01:06:55,742 1325 01:06:55,742 --> 01:06:58,450 Och det är OK om du behöver trycka Kör / Spara ett par gånger 1326 01:06:58,450 --> 01:07:01,190 att fixa något. 1327 01:07:01,190 --> 01:07:03,610 >> Och låt mig också zooma in på min kod så att du kan transkribera. 1328 01:07:03,610 --> 01:07:04,110 Bra. 1329 01:07:04,110 --> 01:07:08,720 Så jag ser Andrew har vad verkar vara ett misstag. 1330 01:07:08,720 --> 01:07:11,110 Han fick just en stor svart rektangel på sin skärm. 1331 01:07:11,110 --> 01:07:13,120 Har någon annan har en stor svart rektangel? 1332 01:07:13,120 --> 01:07:13,390 >> PUBLIK: Ja. 1333 01:07:13,390 --> 01:07:14,360 >> DAVID MALAN: Stor svart rektangel? 1334 01:07:14,360 --> 01:07:16,068 OK, så låt oss tänka om vad detta innebär. 1335 01:07:16,068 --> 01:07:20,560 Vi sade att noll, noll, noll, så ingen grön, ingen röd, ingen blå, 1336 01:07:20,560 --> 01:07:21,980 kommer att ge dig svart. 1337 01:07:21,980 --> 01:07:24,467 Och det visar sig att de flesta av våra bärbara datorer 1338 01:07:24,467 --> 01:07:25,800 bara inte har tillräckligt med trohet. 1339 01:07:25,800 --> 01:07:27,750 Du kan inte riktigt säga det är faktiskt något där. 1340 01:07:27,750 --> 01:07:30,340 Och om du typ av kanske luta skärmen framåt och bakåt, 1341 01:07:30,340 --> 01:07:32,850 Kanske ser du en liten sak där? 1342 01:07:32,850 --> 01:07:34,820 Kanske, typ av, typ av? 1343 01:07:34,820 --> 01:07:36,640 Det är inte helt svart. 1344 01:07:36,640 --> 01:07:38,050 >> PUBLIK: [OHÖRBART] 1345 01:07:38,050 --> 01:07:39,510 >> DAVID MALAN: spoiler! 1346 01:07:39,510 --> 01:07:42,610 Det finns vissa röda där, men minns från specifikationerna 1347 01:07:42,610 --> 01:07:44,940 av problemet, Nick tonas ner det. 1348 01:07:44,940 --> 01:07:47,860 Han desaturated det något, men inte hela vägen till noll. 1349 01:07:47,860 --> 01:07:51,670 Så om vi vill förstora det belopp rött, låt mig föreslå detta trick. 1350 01:07:51,670 --> 01:07:53,750 Låt mig zooma in på min skärm. 1351 01:07:53,750 --> 01:07:58,678 Och låt mig gå vidare och säga belopp lika im.getRed (x, y). 1352 01:07:58,678 --> 01:08:02,440 1353 01:08:02,440 --> 01:08:05,790 >> Denna kodrad ger mig något som kallas en variabel. 1354 01:08:05,790 --> 01:08:09,643 Jag har godtyckligt, men utan tvekan, rimligen ringde min variabel vad, 1355 01:08:09,643 --> 01:08:10,143 tydligen? 1356 01:08:10,143 --> 01:08:13,530 1357 01:08:13,530 --> 01:08:14,340 Belopp. 1358 01:08:14,340 --> 01:08:14,980 Bara belopp. 1359 01:08:14,980 --> 01:08:16,960 Jag kunde ha kallat det vad jag vill, men jag är 1360 01:08:16,960 --> 01:08:19,490 med hjälp av denna andra funktion som jag beskrev tidigare 1361 01:08:19,490 --> 01:08:25,359 att få mängden rött vid x komma y. 1362 01:08:25,359 --> 01:08:27,520 Varför gjorde jag det? 1363 01:08:27,520 --> 01:08:30,004 Vad vill du göra här? 1364 01:08:30,004 --> 01:08:32,910 1365 01:08:32,910 --> 01:08:33,619 Du behöver add-- 1366 01:08:33,619 --> 01:08:34,493 PUBLIK: [OHÖRBART] 1367 01:08:34,493 --> 01:08:36,279 DAVID MALAN: Ja, kanske multiplicera det med 10. 1368 01:08:36,279 --> 01:08:38,862 Och om du inte vet detta, jag är kommer att gå vidare och göra det. 1369 01:08:38,862 --> 01:08:42,060 Jag kommer att gå vidare och säg, vill jag mängden rött 1370 01:08:42,060 --> 01:08:46,550 Jag vill vara vad som helst är den röda, gånger 10, 1371 01:08:46,550 --> 01:08:50,330 och stjärnan, asterisken på tangentbord är the-- inte använder x. 1372 01:08:50,330 --> 01:08:51,569 Använd stjärnan. 1373 01:08:51,569 --> 01:08:55,350 Det är hur du multiplicerar saker i de flesta programmeringsspråk. 1374 01:08:55,350 --> 01:08:59,790 >> Så enligt Kareem intuition, lagras i denna variabel kallad belopp, 1375 01:08:59,790 --> 01:09:03,649 är hur mycket rött jag vill på plats xy. 1376 01:09:03,649 --> 01:09:11,500 Hur nu, gör jag det Pixel har det numret? 1377 01:09:11,500 --> 01:09:12,859 Du har redan gjort det här förut. 1378 01:09:12,859 --> 01:09:17,666 Du anger den gröna och den blått till något värde, till noll. 1379 01:09:17,666 --> 01:09:18,540 PUBLIK: [OHÖRBART] 1380 01:09:18,540 --> 01:09:20,040 DAVID MALAN: Ja, väl du inte vill att det ska 10. 1381 01:09:20,040 --> 01:09:21,460 Du har redan gjort matten här. 1382 01:09:21,460 --> 01:09:24,779 Så vi får värdet av rött, vilket är en låg siffra, förmodligen. 1383 01:09:24,779 --> 01:09:26,180 Vi multiplicera med 10. 1384 01:09:26,180 --> 01:09:29,139 Vad du vill göra med det rörliga beloppet nu? 1385 01:09:29,139 --> 01:09:30,130 >> PUBLIK: [OHÖRBART] 1386 01:09:30,130 --> 01:09:30,880 >> DAVID MALAN: Nice. 1387 01:09:30,880 --> 01:09:34,616 Så im.set-- vad? 1388 01:09:34,616 --> 01:09:35,640 >> PUBLIK: setRed. 1389 01:09:35,640 --> 01:09:39,760 >> DAVID MALAN: setRed, vid läget xy. 1390 01:09:39,760 --> 01:09:40,260 Ja. 1391 01:09:40,260 --> 01:09:41,200 Och bara belopp. 1392 01:09:41,200 --> 01:09:44,257 Med andra ord, en variabel är en tillfällig platshållare 1393 01:09:44,257 --> 01:09:45,840 att du kan sätta vad du vill i. 1394 01:09:45,840 --> 01:09:48,680 Vi råkar vara att sätta en Antalet i det, för tillfället. 1395 01:09:48,680 --> 01:09:51,569 Vi har multiplicerat det med 10 för att göra den större. 1396 01:09:51,569 --> 01:09:56,480 Och nu är jag ersätta den variabeln som tredje argument, eller ingång 1397 01:09:56,480 --> 01:09:57,810 för att ställa in rött. 1398 01:09:57,810 --> 01:10:00,440 Och så att när du avsluta det, och notera 1399 01:10:00,440 --> 01:10:02,330 av semikolon och parenteser. 1400 01:10:02,330 --> 01:10:06,290 >> Gå vidare och klicka kör / spara igen, och du 1401 01:10:06,290 --> 01:10:10,690 bör se, magiskt, vad som faktiskt det. [? Arwa,?] Vad som finns där? 1402 01:10:10,690 --> 01:10:16,412 Eiffeltornet i fullfjädrad röd, inte helt mörkt. 1403 01:10:16,412 --> 01:10:17,870 det borde vara mer uppenbart nu, ja? 1404 01:10:17,870 --> 01:10:18,840 OK. 1405 01:10:18,840 --> 01:10:20,215 Och Andrew, inte mer svart låda? 1406 01:10:20,215 --> 01:10:21,090 PUBLIK: [OHÖRBART] 1407 01:10:21,090 --> 01:10:22,180 DAVID MALAN: Okej. 1408 01:10:22,180 --> 01:10:23,610 Så jag ska hålla detta på skärmen. 1409 01:10:23,610 --> 01:10:27,010 Om du vill spela med senare, jag återskapa detta för dig. 1410 01:10:27,010 --> 01:10:29,140 Men den här koden här gjorde just detta. 1411 01:10:29,140 --> 01:10:31,460 Varför gör vi inte en annan. 1412 01:10:31,460 --> 01:10:33,880 Låt mig rulla ned något. 1413 01:10:33,880 --> 01:10:36,760 >> Så i detta fall, projektorn egentligen inte göra det rättvisa. 1414 01:10:36,760 --> 01:10:40,486 Men på din skärm, du förmodligen har en mycket röd och mycket svart låda. 1415 01:10:40,486 --> 01:10:42,610 Även detta är ett pussel som visar något känt. 1416 01:10:42,610 --> 01:10:44,193 Dock har bilden blivit förvrängd. 1417 01:10:44,193 --> 01:10:47,740 Den sanna bilden, den här gången, är i de blå och gröna värden. 1418 01:10:47,740 --> 01:10:51,820 Men de har alla delats genom 20 så är värdena mycket små. 1419 01:10:51,820 --> 01:10:54,660 De röda värdena är bara slumptal, buller. 1420 01:10:54,660 --> 01:10:57,190 Ångra dessa störningar för att avslöja den sanna bilden. 1421 01:10:57,190 --> 01:10:59,200 >> Så Nick berättar sedan vad du ska göra. 1422 01:10:59,200 --> 01:11:04,290 Ställa de röda värdena till noll, och då inte förstöra vad det är. 1423 01:11:04,290 --> 01:11:07,110 sedan multiplicera blå och gröna värden med 20. 1424 01:11:07,110 --> 01:11:09,820 Så det är nästan samma program som tidigare, 1425 01:11:09,820 --> 01:11:11,380 men du att vända processen. 1426 01:11:11,380 --> 01:11:13,780 Och jag kommer att sätta min kod från tidigare på skärmen vid 1427 01:11:13,780 --> 01:11:16,650 du vill gå tillbaka till det eller spela vidare med den. 1428 01:11:16,650 --> 01:11:18,100 Låt mig in i det. 1429 01:11:18,100 --> 01:11:21,450 Men lösa kopparbild pussel, nummer två. 1430 01:11:21,450 --> 01:11:37,623 1431 01:11:37,623 --> 01:11:40,580 >> PUBLIK: [OHÖRBART] 1432 01:11:40,580 --> 01:11:44,010 >> DAVID MALAN: OK, så här är jag kommer inte att ge så många tips. 1433 01:11:44,010 --> 01:11:47,220 Så jag would-- oh, låt oss se, du har ett stavfel här. 1434 01:11:47,220 --> 01:11:49,621 Så kom ihåg, detta här faktiskt måste gå dit. 1435 01:11:49,621 --> 01:11:52,870 Så vad jag skulle föreslå, om du vill fokusera på den här, det är svaret. 1436 01:11:52,870 --> 01:11:57,060 Om du vill transkribera det att bör få den första arbetsdagen. 1437 01:11:57,060 --> 01:11:59,910 Och sedan kan du använda det som inspiration för andra. 1438 01:11:59,910 --> 01:12:02,230 Trevlig. 1439 01:12:02,230 --> 01:12:02,730 Bra. 1440 01:12:02,730 --> 01:12:05,430 1441 01:12:05,430 --> 01:12:08,180 >> Och för den nyfikne, Detta är ett enkelt exempel 1442 01:12:08,180 --> 01:12:11,080 av en vetenskap eller en konst kallas steganography, 1443 01:12:11,080 --> 01:12:14,100 konsten att dölja information på bilderna. 1444 01:12:14,100 --> 01:12:16,890 Vanligtvis kan bilderna vara vattenmärkt mycket uppenbart 1445 01:12:16,890 --> 01:12:19,500 med en logotyp i botten hörn, men klart, du 1446 01:12:19,500 --> 01:12:22,070 kan vara mycket mer sofistikerade om det och faktiskt 1447 01:12:22,070 --> 01:12:25,050 dölja andra bilder i bilder på något sätt med denna teknik. 1448 01:12:25,050 --> 01:12:59,890 1449 01:12:59,890 --> 01:13:05,770 >> Ta ytterligare 30 sekunder, och sedan ska vi åtminstone meddela vad du bör se. 1450 01:13:05,770 --> 01:13:08,330 Och jag lämnar den tredje en som en at-home träning, 1451 01:13:08,330 --> 01:13:11,353 om du vill ha mer av en utmana denna helg. 1452 01:13:11,353 --> 01:13:18,240 1453 01:13:18,240 --> 01:13:20,390 Och jag tror Andrew kanske har fått det första. 1454 01:13:20,390 --> 01:13:22,645 Vad är den andra bilden, Andrew? 1455 01:13:22,645 --> 01:13:23,920 >> PUBLIK: Frihetsgudinnan. 1456 01:13:23,920 --> 01:13:28,500 >> DAVID MALAN: Frihetsgudinnan kommer vara svaret här gången. 1457 01:13:28,500 --> 01:13:31,140 Så återigen, bara några enkla exempel, vars mål 1458 01:13:31,140 --> 01:13:35,040 är att ge dig en känsla av hur Vi har översatt bild Scratch 1459 01:13:35,040 --> 01:13:40,410 block till mer irriterande och mer komplicerad kod, men alla de idéer 1460 01:13:40,410 --> 01:13:42,980 är fortfarande exakt samma, om än med införandet 1461 01:13:42,980 --> 01:13:48,380 nu av begreppet en variabel som kunna lagra något tillfälligt. 1462 01:13:48,380 --> 01:13:51,750 >> Låt oss göra en mer hands-on, bara för att nu ansluta prickar 1463 01:13:51,750 --> 01:13:53,880 till något lite mer verkliga världen. 1464 01:13:53,880 --> 01:13:56,610 När du är klar, om du kunde gå till denna URL på skärmen. 1465 01:13:56,610 --> 01:14:00,610 Det är också i din kopia av diabilder, developers.google.com/maps~~V. 1466 01:14:00,610 --> 01:14:03,660 Låt oss faktiskt göra något verkliga, så att säga, på webben 1467 01:14:03,660 --> 01:14:07,600 med hjälp av Google Maps API, eller application programming interface, 1468 01:14:07,600 --> 01:14:08,940 på följande sätt. 1469 01:14:08,940 --> 01:14:12,341 >> Google, som många företag, ger en hel del gratis funktionalitet 1470 01:14:12,341 --> 01:14:14,840 som du kan använda för att bygga din egna intressanta applikationer. 1471 01:14:14,840 --> 01:14:18,890 I själva verket, om du någonsin använt Uber att få en cab eller en bil, 1472 01:14:18,890 --> 01:14:21,640 du förmodligen vet att Uber har en karta och det visar bilar på den. 1473 01:14:21,640 --> 01:14:24,870 Det vill säga så gott som jag kan berätta, Google Maps API. 1474 01:14:24,870 --> 01:14:28,884 De är faktiskt använder Googles kartor, men Uber är inte en kartläggning företag, 1475 01:14:28,884 --> 01:14:31,050 inte heller skulle det vara en särskilt intressant problem 1476 01:14:31,050 --> 01:14:33,510 att lösa på toppen av sin bilservice problem. 1477 01:14:33,510 --> 01:14:35,510 Och så de står, igen, på axlarna 1478 01:14:35,510 --> 01:14:37,520 andra, Google i det här fallet. 1479 01:14:37,520 --> 01:14:42,850 Så de använder Googles kartor men deras egen bil tjänster och andra sådana funktioner. 1480 01:14:42,850 --> 01:14:47,770 >> Så vi kommer att dra nytta detta för att göra följande. 1481 01:14:47,770 --> 01:14:50,230 Och om jag har gått för fort, ring mig över på ett ögonblick. 1482 01:14:50,230 --> 01:14:53,500 Glad att sammanfatta några av bild saker. 1483 01:14:53,500 --> 01:14:56,290 Du bör se själv på en sida som denna. 1484 01:14:56,290 --> 01:14:58,230 Så Googles trevligt, och de är bland de bästa 1485 01:14:58,230 --> 01:15:01,364 att tillhandahålla inte bara API, men gratis API: er som du 1486 01:15:01,364 --> 01:15:02,780 kan spela med eller använda kommersiellt. 1487 01:15:02,780 --> 01:15:06,450 De gör börja debitera dig om din användning är hög, men jag gick framåt i förväg 1488 01:15:06,450 --> 01:15:10,490 och undertecknat oss upp för ett gratis konto att förhoppningsvis 10 datorer 1489 01:15:10,490 --> 01:15:12,480 kommer inte diskvalificera oss för plötsligt. 1490 01:15:12,480 --> 01:15:14,320 Så förhoppningsvis demonstration kommer att fungera. 1491 01:15:14,320 --> 01:15:18,840 >> Och märker att de har API: er för Android, iOS, webb och webbtjänster, 1492 01:15:18,840 --> 01:15:19,620 vad det är. 1493 01:15:19,620 --> 01:15:20,700 Låt oss fokusera på webben. 1494 01:15:20,700 --> 01:15:26,560 Så klicka på rosa ruta, webb och att kommer att leda dig, förhoppningsvis till en sida 1495 01:15:26,560 --> 01:15:27,630 här. 1496 01:15:27,630 --> 01:15:29,335 Och de har en massa API. 1497 01:15:29,335 --> 01:15:31,210 Och det kan vara lite överväldigande vid första, 1498 01:15:31,210 --> 01:15:33,000 men jag ska styra oss genom vad vi vill. 1499 01:15:33,000 --> 01:15:38,500 >> Längst upp till vänster är Google Maps JavaScript API JavaScript API. 1500 01:15:38,500 --> 01:15:40,380 Så gå vidare och klickar på en. 1501 01:15:40,380 --> 01:15:49,360 Och det kommer att leda dig nu till följande sida, demos och exempelkod. 1502 01:15:49,360 --> 01:15:51,190 Låt mig in här. 1503 01:15:51,190 --> 01:15:56,300 Och låt mig få oss att-- rulla ner där det står snabba start steg. 1504 01:15:56,300 --> 01:15:57,970 Skärmen bör se ut mitt. 1505 01:15:57,970 --> 01:16:01,130 >> Och det finns två steg, får en nyckel och börja utveckla. 1506 01:16:01,130 --> 01:16:04,190 Jag gjorde redan steg ett för oss, att få en så kallad nyckel. 1507 01:16:04,190 --> 01:16:05,320 Och detta är en gemensam idé. 1508 01:16:05,320 --> 01:16:09,210 En API-nyckel är i allmänhet bara ett stort slumptal eller sträng 1509 01:16:09,210 --> 01:16:11,130 att du ska klistra in din kod, 1510 01:16:11,130 --> 01:16:15,280 så att Google vet vem du är när du använder deras tjänst, deras API. 1511 01:16:15,280 --> 01:16:17,370 Betyder inte att vi är laddas någonting. 1512 01:16:17,370 --> 01:16:21,030 Och nu, klicka, i stället för en klickar börja utveckla. 1513 01:16:21,030 --> 01:16:25,990 Om du bara kunde vinka mig över om inte säker på var vi är. 1514 01:16:25,990 --> 01:16:28,040 >> Så vi ska bara repa yta, här men vad 1515 01:16:28,040 --> 01:16:31,000 Jag trodde skulle vara tvingande är att faktiskt ha oss alla, 1516 01:16:31,000 --> 01:16:34,240 med hjälp av Cloud9 i ett fönster och denna handledning i ett annat fönster 1517 01:16:34,240 --> 01:16:37,120 låter faktiskt få våra egna applikation igång 1518 01:16:37,120 --> 01:16:40,920 som bäddar in en anpassad Google I vår egen hemsida, 1519 01:16:40,920 --> 01:16:43,010 och sedan lägger till en eller två funktioner. 1520 01:16:43,010 --> 01:16:45,520 Men vi ska bara repa ytan av vad vi kan göra. 1521 01:16:45,520 --> 01:16:47,020 >> Så bara en snabb kontroll förstånd. 1522 01:16:47,020 --> 01:16:49,740 Är alla på denna sida, Google Maps JavaScript API? 1523 01:16:49,740 --> 01:16:50,872 Skulle säga att komma igång. 1524 01:16:50,872 --> 01:16:53,330 Vi kommer inte att gå igenom det hela på något sätt. 1525 01:16:53,330 --> 01:16:58,090 OK, i en annan flik, om du inte har det öppet, går in Cloud9 1526 01:16:58,090 --> 01:17:03,500 och skaffa dig bara en ny flik i slutändan. 1527 01:17:03,500 --> 01:17:11,070 Så återigen, c9.io från igår, c9.io, och bara skapa en ny fil. 1528 01:17:11,070 --> 01:17:13,500 Och gå vidare och samtal det vad du vill. 1529 01:17:13,500 --> 01:17:16,495 Jag ringde min map.html. 1530 01:17:16,495 --> 01:17:17,870 Kalla det något som slutar med .html. 1531 01:17:17,870 --> 01:17:23,930 1532 01:17:23,930 --> 01:17:26,580 Och du bör vara ungefär där jag är i denna process 1533 01:17:26,580 --> 01:17:31,470 med bara en blinkande prompt i en tom flik som heter något i stil med map.html. 1534 01:17:31,470 --> 01:17:35,808 1535 01:17:35,808 --> 01:17:38,148 Eller fil, ny fil här gången. 1536 01:17:38,148 --> 01:17:41,960 1537 01:17:41,960 --> 01:17:48,000 >> Och nu, över på Google Maps JavaScript API, 1538 01:17:48,000 --> 01:17:50,010 vi ska hoppa läsning genom hela denna text. 1539 01:17:50,010 --> 01:17:53,760 Men märker att hallå världen är verkligen överallt, ser du det nu. 1540 01:17:53,760 --> 01:17:58,020 Hej världen har denna stora färgrika exempel på en hel del HTML. 1541 01:17:58,020 --> 01:18:03,590 Gå vidare och kopiera bara att klistra in HTML, så från doc typ upptill 1542 01:18:03,590 --> 01:18:08,810 hela vägen till slutet HTML-tagg, gå framåt och kopiera alla that-- igen, 1543 01:18:08,810 --> 01:18:14,430 det är under hello world example-- och klistra in det i fliken Cloud9, 1544 01:18:14,430 --> 01:18:17,996 så att nu skärmen ska se ungefär som mitt. 1545 01:18:17,996 --> 01:18:22,280 1546 01:18:22,280 --> 01:18:24,520 >> Och du kan spara det, men inte läsa in den ännu. 1547 01:18:24,520 --> 01:18:26,290 Låt oss först titta på koden och se om vi 1548 01:18:26,290 --> 01:18:29,110 kan inte sluta eller lära från vad det är Google 1549 01:18:29,110 --> 01:18:30,860 har haft oss blint kopiera och klistra in. 1550 01:18:30,860 --> 01:18:33,334 De vill bara hjälpa, bokstavligen, komma igång, 1551 01:18:33,334 --> 01:18:35,500 men det finns inte så mycket komplexitet faktiskt där. 1552 01:18:35,500 --> 01:18:40,100 1553 01:18:40,100 --> 01:18:42,210 Eventuella frågor ännu? 1554 01:18:42,210 --> 01:18:43,790 Vi är säkra att gå framåt? 1555 01:18:43,790 --> 01:18:44,330 OK. 1556 01:18:44,330 --> 01:18:46,800 >> Så snabbt, låt oss bara göra några snabba rimlighetskontroller. 1557 01:18:46,800 --> 01:18:48,800 Linje ett av vad jag se, och förhoppningsvis, du 1558 01:18:48,800 --> 01:18:51,710 Se vad betyder det, doctype HTML? 1559 01:18:51,710 --> 01:18:52,385 Kareem, minns? 1560 01:18:52,385 --> 01:18:53,260 PUBLIK: [OHÖRBART] 1561 01:18:53,260 --> 01:18:53,968 DAVID MALAN: Ja. 1562 01:18:53,968 --> 01:18:54,870 Här kommer HTML 5. 1563 01:18:54,870 --> 01:18:57,950 Samtidigt linje två på skärm här betyder hej webbläsare, 1564 01:18:57,950 --> 01:18:59,482 här kommer den verkliga HTML. 1565 01:18:59,482 --> 01:19:01,440 Linje tre är hey webbläsare, här kommer huvudet. 1566 01:19:01,440 --> 01:19:04,260 Linje fyra är, naturligtvis, hej webbläsare, här kommer titeln. 1567 01:19:04,260 --> 01:19:07,780 Vad gör linje fem? 1568 01:19:07,780 --> 01:19:09,930 Egentligen gör det inte verkligen något för oss. 1569 01:19:09,930 --> 01:19:13,340 I detta fall, precis ändrar storlek det sidan till en standard. Linje sex, 1570 01:19:13,340 --> 01:19:16,140 Vi har inte pratat om, men det anger teckenkodning. 1571 01:19:16,140 --> 01:19:19,181 Det finns olika sätt att koda filer, särskilt för främmande språk. 1572 01:19:19,181 --> 01:19:21,100 UTF-8 tenderar bara att vara standard. 1573 01:19:21,100 --> 01:19:26,580 >> Så nu ska vi se i linje sju till 16, en del CSS. 1574 01:19:26,580 --> 01:19:29,260 Och även om vi inte har sett alla dessa saker innan, 1575 01:19:29,260 --> 01:19:30,810 vi kan slags sluta. 1576 01:19:30,810 --> 01:19:37,075 Så linje åtta medel, hej webbläsare, tillämpa alla följande till vilka två taggar, 1577 01:19:37,075 --> 01:19:37,575 tydligen? 1578 01:19:37,575 --> 01:19:40,650 1579 01:19:40,650 --> 01:19:41,701 HTML och brödtext. 1580 01:19:41,701 --> 01:19:43,200 Så kommatecknet är den nya sak där. 1581 01:19:43,200 --> 01:19:46,140 Och det är bara ett sätt att ange flera taggar samtidigt. 1582 01:19:46,140 --> 01:19:47,640 >> Då har vi klammerparenteserna. 1583 01:19:47,640 --> 01:19:51,170 Så uppenbarligen, berättar denna webbläsaren, göra höjden på sidan 100%. 1584 01:19:51,170 --> 01:19:54,170 Så även om det finns mycket lite innehåll, göra hela sidan, 1585 01:19:54,170 --> 01:19:55,530 göra saken fyller sidan. 1586 01:19:55,530 --> 01:19:57,524 Gör kartan slutligen fylla sidan. 1587 01:19:57,524 --> 01:19:58,690 Marginal, vad betyder det? 1588 01:19:58,690 --> 01:20:01,559 Det är oftast som godtycklig vitt område runt kanterna 1589 01:20:01,559 --> 01:20:04,350 att vissa webbläsare designer bara beslutat borde vara där, eftersom det 1590 01:20:04,350 --> 01:20:05,540 typ av gör det ser renare. 1591 01:20:05,540 --> 01:20:06,498 Men vi vill inte ha det. 1592 01:20:06,498 --> 01:20:08,710 Vi vill att kartan ska hela vägen till kanterna. 1593 01:20:08,710 --> 01:20:10,930 Stoppning, i samma anda som marginaler. 1594 01:20:10,930 --> 01:20:14,980 Marginalerna betyder utanför, stoppning medel inuti, men det är samma typ av affär. 1595 01:20:14,980 --> 01:20:17,520 Det är lite av en buffert mellan dig och kanterna. 1596 01:20:17,520 --> 01:20:21,170 >> Och sedan linje 13 är en bra chans för en snabb genomgång. 1597 01:20:21,170 --> 01:20:26,440 Vad gör korsförtecken karta menar, eller hashtag karta detta? 1598 01:20:26,440 --> 01:20:29,650 Vad betyder det hänvisas till i princip? 1599 01:20:29,650 --> 01:20:31,485 >> PUBLIK: [OHÖRBART] 1600 01:20:31,485 --> 01:20:32,360 DAVID MALAN: Exakt. 1601 01:20:32,360 --> 01:20:36,900 Den här fastigheten, detta CSS-egenskap gäller bara en sak, HTML-taggen 1602 01:20:36,900 --> 01:20:41,180 som har ett ID citat, unquote "karta". 1603 01:20:41,180 --> 01:20:44,460 Och nu ska vi snabbt framåt, bläddra ner till botten av filen, som 1604 01:20:44,460 --> 01:20:49,860 är inte alltför långt borta, och meddelande på nätet 19, om du klistra in den precis som jag gjorde, 1605 01:20:49,860 --> 01:20:53,405 linje 19 har bara en div, som är en uppdelning av sidan, vilket går jag 1606 01:20:53,405 --> 01:20:54,820 kallas ett rektangulärt område. 1607 01:20:54,820 --> 01:20:55,820 Det har ingenting i det. 1608 01:20:55,820 --> 01:20:57,550 Det är en öppen tagg, tagg. 1609 01:20:57,550 --> 01:20:59,490 Men det har ett unikt ID. 1610 01:20:59,490 --> 01:21:02,090 >> Så vad som verkar vara händer här är Google 1611 01:21:02,090 --> 01:21:05,880 är iordningställande vår webbsida för att har en komplett 100% höjd, 1612 01:21:05,880 --> 01:21:09,680 och ingen utfyllnad, utan marginaler, eftersom vad vi ska sätta in 1613 01:21:09,680 --> 01:21:13,647 av denna div, vars unika ID är karta, är en verklig inbäddad karta. 1614 01:21:13,647 --> 01:21:15,480 Och vi vill att det ska fylla sidan och inte bara 1615 01:21:15,480 --> 01:21:17,560 vara någon liten rektangel i mitten. 1616 01:21:17,560 --> 01:21:24,220 Så linje 14 betonar på samma sätt, det map sig bör ha en höjd av 100%. 1617 01:21:24,220 --> 01:21:29,220 >> Så nu märker mellan linjerna 20 och 28, detta är JavaScript-kod. 1618 01:21:29,220 --> 01:21:33,020 Och detta är, även om det är syntaktiskt lite konstigt, 1619 01:21:33,020 --> 01:21:34,730 Det finns inte så mycket händer här. 1620 01:21:34,730 --> 01:21:39,310 I linje 21, är detta att förklara något som kallas en variabel. 1621 01:21:39,310 --> 01:21:42,030 Istället för att ringa det belopp, som vi gjorde tidigare, 1622 01:21:42,030 --> 01:21:44,500 vi mer exakt att säga var, vilket betyder bara variabel. 1623 01:21:44,500 --> 01:21:46,520 Vi kunde ha använt det i Nick kod, men det gjorde han inte, så jag 1624 01:21:46,520 --> 01:21:48,190 brydde sig inte att göra det heller. 1625 01:21:48,190 --> 01:21:50,240 Det är en variabel som heter karta, och sedan finns det 1626 01:21:50,240 --> 01:21:53,360 en funktion som är tydligen kallas initMap. 1627 01:21:53,360 --> 01:21:55,780 >> Så det här är som vår egna pusselbit i Scratch. 1628 01:21:55,780 --> 01:21:58,830 Vi har skapat en bit av funktionalitet kallas initMap, 1629 01:21:58,830 --> 01:22:00,980 och du kan sorts sluta vad händer här. 1630 01:22:00,980 --> 01:22:02,930 På den vänstra sidan, vi har en variabel, 1631 01:22:02,930 --> 01:22:06,000 så vi kommer att sätta följande sak i den variabeln, 1632 01:22:06,000 --> 01:22:07,362 från höger till vänster. 1633 01:22:07,362 --> 01:22:11,940 Den högra sidan säger, hej webbläsare, ge mig en ny Google-karta. 1634 01:22:11,940 --> 01:22:16,490 Och google.maps.map är bara en funky sätt att specificera att denna funktion 1635 01:22:16,490 --> 01:22:19,790 tillhör Google Maps. 1636 01:22:19,790 --> 01:22:23,010 >> Efter parenteserna, har vi sett det här förut, hej webbläsare, få 1637 01:22:23,010 --> 01:22:29,210 mig elementen i sidan, den tagg i sidan vars unika ID är-- 1638 01:22:29,210 --> 01:22:30,710 >> PUBLIK: [OHÖRBART] 1639 01:22:30,710 --> 01:22:31,790 >> DAVID MALAN: --map. 1640 01:22:31,790 --> 01:22:35,770 Och vad som händer, ja, denna linje tillsammans, linje 23, 1641 01:22:35,770 --> 01:22:38,630 i huvudsak säger, hej webbläsare, gå och hämta mig 1642 01:22:38,630 --> 01:22:42,800 det tomma div på sidan vars unika ID är kartan, 1643 01:22:42,800 --> 01:22:45,600 eftersom jag vill infoga i det-- injicera i det, 1644 01:22:45,600 --> 01:22:49,520 om du will-- en massa innehåll som råkar komma från webben 1645 01:22:49,520 --> 01:22:50,427 senare. 1646 01:22:50,427 --> 01:22:52,010 Och Googles gör allt detta för oss. 1647 01:22:52,010 --> 01:22:55,350 >> Så återigen, i slutet av dagen, vi har detta exempel på abstraktion. 1648 01:22:55,350 --> 01:22:58,610 Jag har ingen aning om vad en karta är eller hur man ska genomföra en karta API. 1649 01:22:58,610 --> 01:22:59,460 Vi behöver inte göra det. 1650 01:22:59,460 --> 01:23:02,740 Vi behöver bara berätta kartan var att sätta sig och lämna 1651 01:23:02,740 --> 01:23:04,880 de som ligger till grund för genomförandet uppgifter till Google. 1652 01:23:04,880 --> 01:23:08,190 Nu finns det tydligen två datadelar 1653 01:23:08,190 --> 01:23:11,940 att detta exempel är förse Googles API. 1654 01:23:11,940 --> 01:23:16,450 Tydligen mitten av kartan, och zoomnivå, så att säga. 1655 01:23:16,450 --> 01:23:21,390 >> Och är det någon som känner igen dessa koordinater, latitud och longitud? 1656 01:23:21,390 --> 01:23:24,364 Förmodligen inte, men vi kan gå tillbaka till handledningen, bokstavligen se. 1657 01:23:24,364 --> 01:23:25,780 Men vi får se det på bara ett ögonblick. 1658 01:23:25,780 --> 01:23:29,880 Zoomnivå är ett värde mellan, det gör jag inte vet, en i 13 eller något liknande. 1659 01:23:29,880 --> 01:23:32,880 Det har bara att göra med hur långt du är zoomas in eller ut, och det är det. 1660 01:23:32,880 --> 01:23:35,690 Och nu i slutet av sidan, meddelande linje 29-- 1661 01:23:35,690 --> 01:23:39,960 det är lite fult eftersom det wraps-- här kodraden 1662 01:23:39,960 --> 01:23:44,570 är vad hämtar till webbläsaren Google faktiska API. 1663 01:23:44,570 --> 01:23:47,500 All kod som Googles ingenjörer har skrivit att genomföra 1664 01:23:47,500 --> 01:23:50,000 Hela den här funktionen av inbäddningsbara kartor. 1665 01:23:50,000 --> 01:23:51,470 >> Nu ska vi inte ändra någonting. 1666 01:23:51,470 --> 01:23:54,761 Om du följer med, gå vidare och bara spara filen, om du verkligen har 1667 01:23:54,761 --> 01:23:55,760 vad jag har. 1668 01:23:55,760 --> 01:23:57,370 Gå till webbadressen. 1669 01:23:57,370 --> 01:23:59,820 Du kan klicka på knappen Kör där uppe och som kommer att berätta 1670 01:23:59,820 --> 01:24:03,050 du adressen till din webbserver igen. 1671 01:24:03,050 --> 01:24:06,010 Och det kommer att leda dig till en ny flik. 1672 01:24:06,010 --> 01:24:11,910 Om du klickar på Öppna för map.html, och oddsen är att du är 1673 01:24:11,910 --> 01:24:15,520 kommer att få en varning, ett felmeddelande, ja? 1674 01:24:15,520 --> 01:24:18,570 Felmeddelande felmeddelande? 1675 01:24:18,570 --> 01:24:21,170 >> Så tyvärr, fel meddelande är inte att upplysande 1676 01:24:21,170 --> 01:24:23,890 om du faktiskt öppnar konsol, som fliken vi 1677 01:24:23,890 --> 01:24:27,110 hålls öppna igår och lite tidigare idag. 1678 01:24:27,110 --> 01:24:29,445 Men jag snubblat över detta tidigare, så jag redan 1679 01:24:29,445 --> 01:24:30,820 listat ut vad lösningen är. 1680 01:24:30,820 --> 01:24:34,440 I dagens diabilder, eller snarare, i Cloud9, tillkännagivande 1681 01:24:34,440 --> 01:24:36,430 att vi inte gjorde något avsiktligt. 1682 01:24:36,430 --> 01:24:40,690 Lägg märke till att denna skripttagg i linje 29, om du läser igenom det, 1683 01:24:40,690 --> 01:24:44,440 det är som maps.googleapis.com/ något, något, något, 1684 01:24:44,440 --> 01:24:46,430 då märker någon, en av utvecklarna, 1685 01:24:46,430 --> 01:24:50,040 skrev i allt kapital bokstäver, din API-nyckel. 1686 01:24:50,040 --> 01:24:51,700 >> Vi måste klistra något där. 1687 01:24:51,700 --> 01:24:53,450 Och detta var steget Jag gjorde för oss innan, 1688 01:24:53,450 --> 01:24:57,190 och återigen de kan svartlista oss om plötsligt, 12 eller fler av oss 1689 01:24:57,190 --> 01:24:59,470 börja använda samma nyckel, men låt oss se vad som händer. 1690 01:24:59,470 --> 01:25:03,030 Så om du går in i dagens diabilder, en bild senare, finns det 1691 01:25:03,030 --> 01:25:07,070 Detta mycket funky-ser textsträng. 1692 01:25:07,070 --> 01:25:12,230 Gå vidare och bara kopiera den och klistra in den där det står din API-nyckel. 1693 01:25:12,230 --> 01:25:15,120 Det är den jag skrev upp för. 1694 01:25:15,120 --> 01:25:17,700 >> Och definitivt inte försöka skriva ut manuellt 1695 01:25:17,700 --> 01:25:21,210 eftersom det känns fylld med stavfel, potentiellt. 1696 01:25:21,210 --> 01:25:23,260 Så bara kopiera och klistra in den. 1697 01:25:23,260 --> 01:25:26,090 Och det kommer att göra linjen längre, men nu, bara för att vara tydlig, 1698 01:25:26,090 --> 01:25:29,540 det ska se lite mer så här, där nyckeln är lika inte 1699 01:25:29,540 --> 01:25:32,200 aktiverade skriker på dig. 1700 01:25:32,200 --> 01:25:34,810 Spara din sida, gå tillbaka till den andra fliken, ladda, 1701 01:25:34,810 --> 01:25:36,770 och hoppas att se en karta över var? 1702 01:25:36,770 --> 01:25:37,790 >> PUBLIK: Australien. 1703 01:25:37,790 --> 01:25:38,748 >> DAVID MALAN: Australien. 1704 01:25:38,748 --> 01:25:41,200 Så uppenbarligen de som är de GPS-koordinater i Australien. 1705 01:25:41,200 --> 01:25:44,491 Och låt mig gå runt för bara en stund och hjälpa någon som inte är riktigt där, 1706 01:25:44,491 --> 01:25:47,729 men låt mig föreslå via Google, hitta GPS-koordinater för din egen hemstad 1707 01:25:47,729 --> 01:25:48,770 eller ditt eget hemland. 1708 01:25:48,770 --> 01:25:51,436 Och förmodligen Google kan stänga av denna upp eller Wikipedia kan berätta. 1709 01:25:51,436 --> 01:25:54,410 Men välja två olika värden för latitud och longitud, 1710 01:25:54,410 --> 01:25:57,530 gå tillbaka in och klistra in dem, och sedan ladda om sidan efter att ha sparat 1711 01:25:57,530 --> 01:26:00,718 och se om du kan ha en karta för din egen hemstad. 1712 01:26:00,718 --> 01:26:04,500 1713 01:26:04,500 --> 01:26:08,042 >> Och när du är klar med att uppföljningen challenge-- 1714 01:26:08,042 --> 01:26:11,250 och jag ska ge lite mindre riktning, avsiktligt, så att du medvetet 1715 01:26:11,250 --> 01:26:13,791 måste kämpa för ett par minuter med dokumentation, 1716 01:26:13,791 --> 01:26:18,740 ändra kartan för att inte vara här cartoonish standard, men en satellit karta. 1717 01:26:18,740 --> 01:26:24,600 Så att du faktiskt se satellit bilder i stället för de vackra färgerna. 1718 01:26:24,600 --> 01:26:29,710 >> Och tipset jag ska ge dig är att ändra kartans typ. 1719 01:26:29,710 --> 01:26:33,084 Gå tillbaka till det som får startade sida för inspiration. 1720 01:26:33,084 --> 01:26:40,599 1721 01:26:40,599 --> 01:26:42,390 Som du kanske har samlat, om du letar efter, 1722 01:26:42,390 --> 01:26:44,250 det finns så många fler saker du kan göra. 1723 01:26:44,250 --> 01:26:46,380 Några av er har redan förändrat kartan typ. 1724 01:26:46,380 --> 01:26:49,890 Men du kan do-- till exempel, låt mig gå till något som vi gjorde för kursen 1725 01:26:49,890 --> 01:26:52,050 Jag teach-- maps.cs50.net. 1726 01:26:52,050 --> 01:26:53,470 En av våra undergrads gjorde detta. 1727 01:26:53,470 --> 01:26:58,890 Vi centrera vår karta över Harvard Yard och överlagra alla dessa bygg namn, 1728 01:26:58,890 --> 01:27:01,070 och vi hade honom lägga till den här. 1729 01:27:01,070 --> 01:27:04,270 Så om jag vill söka efter, till exempel Matthews Hall, 1730 01:27:04,270 --> 01:27:05,730 Vi har en liten rullgardinsmenyn. 1731 01:27:05,730 --> 01:27:09,080 Och jag tror att han använder Bootstrap, den bibliotek vi diskuterat tidigare för detta. 1732 01:27:09,080 --> 01:27:12,190 Och om du klickar på Matthews Hall, det omedelbart 1733 01:27:12,190 --> 01:27:14,790 hoppar kartan till en viss plats, och det visar 1734 01:27:14,790 --> 01:27:16,440 du en bild på denna lilla pop-up. 1735 01:27:16,440 --> 01:27:18,670 >> Men även denna lilla pop-up, vi inte genomföra. 1736 01:27:18,670 --> 01:27:27,521 Om jag bläddra ner på vår få började sida och leta efter informationsfönster, 1737 01:27:27,521 --> 01:27:29,770 du ser att en del av den funktioner du själv 1738 01:27:29,770 --> 01:27:31,561 kan lägga till, om än med lite mer komplexitet, 1739 01:27:31,561 --> 01:27:33,970 är något som kallas ett informationsfönster. 1740 01:27:33,970 --> 01:27:37,190 Och om jag klickar ett exempel här, och det är det som är roligt, 1741 01:27:37,190 --> 01:27:40,530 Du kan göra saker som detta, klicka på en markör och sedan voila, 1742 01:27:40,530 --> 01:27:42,400 Information dyker upp. 1743 01:27:42,400 --> 01:27:45,874 >> Så har vi inte riktigt infört tillräckligt med funktioner för JavaScript 1744 01:27:45,874 --> 01:27:49,040 att måla en bild av exakt hur du kunde tråd allt det här tillsammans, 1745 01:27:49,040 --> 01:27:50,706 men vi har slags skrapat på ytan. 1746 01:27:50,706 --> 01:27:53,140 I själva verket, vad jag gjorde just när Jag klickade på den markör, 1747 01:27:53,140 --> 01:27:55,819 var att utlösa en händelse, en så kallad på click-händelse. 1748 01:27:55,819 --> 01:27:57,610 Och vi faktiskt såg en händelse tidigare i dag, 1749 01:27:57,610 --> 01:28:00,670 den så kallade lämna händelse, när vi hindrade 1750 01:28:00,670 --> 01:28:02,490 användaren från att söka efter katter. 1751 01:28:02,490 --> 01:28:06,560 Så vi har typ av plockas och valde bland alla dessa olika funktioner, 1752 01:28:06,560 --> 01:28:08,990 att ge dig en känsla, förhoppningsvis, av vad du kan faktiskt 1753 01:28:08,990 --> 01:28:11,000 göra med lite mer komfort i programmering, 1754 01:28:11,000 --> 01:28:12,587 och helt fria resurser. 1755 01:28:12,587 --> 01:28:15,856 1756 01:28:15,856 --> 01:28:18,770 >> Några frågor? 1757 01:28:18,770 --> 01:28:19,790 Nej? 1758 01:28:19,790 --> 01:28:22,542 Detta är din sista chans, åtminstone i dag, på en fredag, 1759 01:28:22,542 --> 01:28:25,000 att få något från bröstet så att du går ut härifrån 1760 01:28:25,000 --> 01:28:27,067 känner dig säker och bekväm. 1761 01:28:27,067 --> 01:28:27,566 Ja. 1762 01:28:27,566 --> 01:28:29,740 >> PUBLIK: Varför inte du lägga till ytterligare en sak? 1763 01:28:29,740 --> 01:28:32,720 >> DAVID MALAN: Åh herregud. 1764 01:28:32,720 --> 01:28:35,260 Jag behöver vila i helgen, tror jag. 1765 01:28:35,260 --> 01:28:36,180 Andra frågor? 1766 01:28:36,180 --> 01:28:37,055 >> PUBLIK: [OHÖRBART] 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, vila i frid, 1769 01:28:46,810 --> 01:28:49,310 du använde för att kunna sätta VB script, virtuell grundläggande manus, 1770 01:28:49,310 --> 01:28:50,643 men som egentligen aldrig fångats på. 1771 01:28:50,643 --> 01:28:52,490 Så det korta svaret är bara JavaScript. 1772 01:28:52,490 --> 01:28:55,144 1773 01:28:55,144 --> 01:28:55,810 Andra frågor? 1774 01:28:55,810 --> 01:28:58,427 1775 01:28:58,427 --> 01:28:59,760 Okej, låt mig göra detta. 1776 01:28:59,760 --> 01:29:02,070 Låt mig ta våra kollegor utanför. 1777 01:29:02,070 --> 01:29:04,500 De har en utvärdering formulär som de vill alla 1778 01:29:04,500 --> 01:29:06,310 att tillbringa några minuter att fylla i. 1779 01:29:06,310 --> 01:29:08,775 De vill samla denna form och alla undantag som du kan ha utanför. 1780 01:29:08,775 --> 01:29:10,240 De kommer också att ha certifikat. 1781 01:29:10,240 --> 01:29:12,380 Jag gissar att det finns fortfarande några mellanmål utanför. 1782 01:29:12,380 --> 01:29:14,360 Låt mig passera dessa ut, och om du har några frågor under tiden, 1783 01:29:14,360 --> 01:29:17,120 Jag ska gå runt mer individuellt och vi kan komma igång. 1784 01:29:17,120 --> 01:29:17,879 Ja självklart. 1785 01:29:17,879 --> 01:29:18,754 PUBLIK: [OHÖRBART] 1786 01:29:18,754 --> 01:29:26,737 1787 01:29:26,737 --> 01:29:28,570 DAVID MALAN: Det är vanligtvis sant i dessa dagar. 1788 01:29:28,570 --> 01:29:30,730 Visst med webb programvara, du lutar 1789 01:29:30,730 --> 01:29:32,901 på andra du antingen estetiskt använder saker 1790 01:29:32,901 --> 01:29:35,400 som Bootstrap, så att du inte måste genomföra den låga nivån 1791 01:29:35,400 --> 01:29:37,169 information om menyer och knappar och allt det där. 1792 01:29:37,169 --> 01:29:39,210 Du lutar sig på någon som Google så att du 1793 01:29:39,210 --> 01:29:42,050 behöver inte bygga en Uber företag och en kartläggning företag, 1794 01:29:42,050 --> 01:29:44,850 och vilket som helst antal liknande applikationer. 1795 01:29:44,850 --> 01:29:46,350 >> I själva verket, inloggningar är populära också. 1796 01:29:46,350 --> 01:29:48,500 Om du har använt Spotify eller valfritt antal webbplatser, 1797 01:29:48,500 --> 01:29:51,210 du logga in på några webbplatser som använder Facebook. 1798 01:29:51,210 --> 01:29:53,350 Så vad är trevligt, det är API: er för inloggningar 1799 01:29:53,350 --> 01:29:56,570 nuförtiden, så att du inte har att ha en egen användare tabellen 1800 01:29:56,570 --> 01:29:59,440 och alla dina egen databas nödvändigtvis i samma utsträckning. 1801 01:29:59,440 --> 01:30:01,795 Du kan låta Facebook göra allt av denna komplexitet för dig. 1802 01:30:01,795 --> 01:30:03,920 Så det är en spännande tid, ärligt, i programmering, 1803 01:30:03,920 --> 01:30:07,200 eftersom det finns så många tredje part tjänster som du kan bygga ovanpå. 1804 01:30:07,200 --> 01:30:10,890 >> Och återigen, är det pris du betalar antingen finansiell eller driftstopp. 1805 01:30:10,890 --> 01:30:13,750 Om Google går ner, så gör Uber, utan tvekan, 1806 01:30:13,750 --> 01:30:15,690 men kanske det är en rimlig avvägning. 1807 01:30:15,690 --> 01:30:18,040 Och återigen, det var ett av de teman, förhoppningsvis, under de senaste dagarna, 1808 01:30:18,040 --> 01:30:18,780 är dessa kompromisser. 1809 01:30:18,780 --> 01:30:20,738 Och sällan är det att gå att vara ett rätt svar. 1810 01:30:20,738 --> 01:30:25,700 Det är verkligen bättre av två eller flera svar. 1811 01:30:25,700 --> 01:30:26,682 >> Passera dessa runt. 1812 01:30:26,682 --> 01:30:36,830 1813 01:30:36,830 --> 01:30:41,110 >> Och dessa Cloud9 konton kommer att fortsätta att arbeta, i teorin, för all framtid. 1814 01:30:41,110 --> 01:30:45,000 Du kan hitta om du väntar några dagar eller en vecka eller mer för att logga in på dem, 1815 01:30:45,000 --> 01:30:49,170 det kan ta som en eller fem minuter att öppna upp igen, 1816 01:30:49,170 --> 01:30:54,090 men det är bara för att de sätter det att sova för att spara på resurser. 1817 01:30:54,090 --> 01:31:10,527