David Malan: Alle reg, ons is terug. So vir die opwindende gevolgtrekking, ons laaste artikel op web ontwikkeling, wat ek gedink ons ​​wil gebruik as 'n algemene term om 'n paar oorblywende onderwerpe te vang. So aan die einde van die dag, sal ons eintlik doen 'n bietjie van hands-on web ontwikkeling met 'n taal JavaScript genoem. En ek dink ons ​​sal 'n blik iets wat verband hou met beelde en iets ontdek geheim versteek in 'n beeld, en ook 'n blik op die Google Maps API, aansoek ontwikkeling koppelvlak, as iets verteenwoordiger van die tipe van sagteware dit is al hoe meer en vrylik beskikbaar vandag. Maar hoekom doen ons nie 'n blik op 'n bestanddeel van hierdie wêreld dat ons soort gewees het neem as vanselfsprekend aanvaar bestaan vir 'n geruime tyd, 'n databasis. Vir die afgelope dag en 'n half het ons aanvaar dat ons toegang tot 'n databasis, maar Watter probleem het 'n databasis op te los? Wat beteken dit vir ons? Wat is dit? Gehoor: [onhoorbaar] David Malan: Hou al die inligting, OK, en watter soort inligting kan jy sit in dit? Gehoor: [onhoorbaar] David Malan: Enige inligting jy sit in dit, sal jy terug te kry. Dit is waar. En op 'n tipiese web-gebaseerde webwerf of web aansoek, watter soort inligting, spesifiek, kan jy sit in? Gehoor: [onhoorbaar] David Malan: Gebruikers. So, wat is 'n gebruiker? Gehoor: [onhoorbaar] David Malan: OK, geregistreer gebruiker van die webwerf. En wat beteken dit om inligting gebruikers winkel? Wat komponeer 'n gebruiker? 'N gebruiker wat? Gehoor: [onhoorbaar] David Malan: Ja, persoonlike data, en ek hou daarvan. Kom ons wees meer akkurate. So 'n gebruiker het tipies 'n naam, Wat anders kan 'n gebruiker te hê? Gehoor: [onhoorbaar] David Malan: 'n addr-- OK, sodat die eerste naam, laaste naam. Dis goed. Eintlik, laat ons los dat, omdat dit gaan om oop te maak 'n geleentheid vir bespreking, nog verder. Eerste naam, laaste naam, geslag. 'N ID van een of ander aard. Wat nog? Ek het gehoor iets anders voor, ook. 'N e-pos, posadres. So laat ons daar breek en nou oorweeg nie wat ons stoor in die databasis, but-- en nie hoekom nie, want dit is dalk voor die hand liggend dat wanneer jy 'n gebruiker registreer, jy wil hê hulle moet onthou vir 'n geruime tyd. Jy wil dit nie te net gestoor in die geheue en so word forgotten-- Kom ons fokus op die hoe. Dit blyk dat in die wêreld van databasisse, daar is ten minste twee tipes deesdae. Iets genaamd 'n SQL databasis, Structured Query Language, of, cutely genoem, noSQL, wat nie SQL. En laasgenoemde is 'n voorbeeld van wat kan word 'n objek-georiënteerde genoem, of 'n voorwerp te slaan, 'n databasis dat voorwerpe slaan, en nie, verskoning my, soos ons sal binnekort sien, rye. So ons sal fokus vir 'n oomblik op Die eerste van hierdie, naamlik, 'n SQL databasis, al is dit net omdat dit so bekend reeds aan enigiemand wat gebruik Excel of Google Blaaie of Apple Nommers of enige standaard sigbladprogram, of, anders gestel, of meer geraffineerd, iets soos Microsoft Toegang of Oracle of MySQL of PostgreSQL, wat almal is die produk name vir implementering van die volgende idee. 'N relasionele databasis is bloot iets wat rye en kolomme het. En deur rye en kolomme, Ek het letterlik beteken iets soos hierdie, so waar ons dalk die naam van 'n stuk grond en sy soort hier. En eintlik, laat my nou begin om hierdie kaart. So eintlik, weet ek nie Daarom het ek het 'n aparte grafiek. Kom ons hierdie eenvoudige hou. Ons het hier die begin van ons tafel, waar dit is die naam van die veld en dit is die tipe data, en deur die tipe bedoel ek die volgende. Is dit 'n aantal, is dit 'n string, 'n kort tou soos 'n woord, is dit 'n paragraaf, is dit binêre data, soos 'n beeld? En laat ons dit net terg afgesien vir net 'n oomblik. So eerste naam, nommer, string, 'n groot deel van text-- Gehoor: [onhoorbaar] David Malan: Ja, so string. En in 'n databasis konteks, sal ons tipies noem hierdie gebied kar. Ek sal net sê kar vir nou, maar ons is gaan hierdie verfyn in 'n oomblik. Karakter veld. Laaste naam is waarskynlik dieselfde. Geslag? Man of vrou, so dit 'n kar in die veld kan wees. Dit kan óf quote wees, unquote "Manlike" of kwotasie, unquote "vroulike" of dit kan wees m of f. As jy wil meer inklusiewe te wees, jy dalk 'n derde waarde moet of 'n soort van 'n ander land geheel en al. En so kan jy ware valse gebruik. Die veld kan manlike genoem, en dan kan jy sê waar of onwaar is. Maar dit beteken nie noodwendig vang al die inligting wat jy dalk wil. So dit blyk daar is 'n ander soort van die veld wat dalk hier nuttig wees in 'n tipiese databasis, genoem 'n enum, waar dit 'n karakter in die veld, maar jy, die ontwerper, leer ken opnoemen die moontlike waardes, soos kwotasie, unquote "manlike", kwotasie, unquote "vroulike" en dies meer. Sodat alles wat waarde is in jou databasis, inderdaad-karakter gebaseer, maar Dit moet een van daardie waardes wees. Ons sal waarskynlik nie wil hê 'n enum vir die eerste naam of laaste naam. Anders sou ons om te noem, soos die naam afgelei van letterlik elke moontlike eerste naam en laaste naam. OK, so ID wat moet 'n ID te wees? Ja, so miskien 'n aantal. So laat ons vashou aan dat vir nou, nommer. En volgens die getal, se nommer 'n bietjie te breed nou. Vir die einde van die tweede dag, ek voel soos ons moet 'n bietjie meer presies te wees. Nommer kan beteken soos dit kon so iets 1,236 wees. En dit is waarskynlik nie wat ons bedoel met 'n ID. Wat doen ons waarskynlik bedoel met 'n ID? Gehoor: [onhoorbaar] David Malan: Ag, OK, so miskien is dit nie eens 'n aantal. Miskien is dit eintlik 'n unieke identifiseerder dit is 'n string, soos 'n gebruiker naam. So absoluut, kan wees nie. Ek dink dat iemand waarskynlik bedoel numeriese, al is. So laat ons bly met dit. Watter soort getal? Wat is 'n meer precise-- 'n heelgetal. So 'n paar soos 0, 1, 2, 3, so ons sal dit 'n heelgetal te bel. En selfs dan, ek kon word nitpicking, dis nie regtig net 'n algemene heelgetal wat jy wil. Jy het waarskynlik nie wil hê negatiewe waardes, net omdat dit net voel vreemd. Jy wil seker positiewe heelgetalle. So jy kan ook druk wat in 'n databasis, maar vir nou, sal ons sê heelgetal. E-pos? Dit is waarskynlik just-- n wat? Gehoor: [onhoorbaar] David Malan: Dit is 'n e-pos, maar dit is karakters, reg? Dit het net 'n funky karakter soos 'n "op" simbool of iets anders, maar dit is nog steeds 'n karakter in die veld. En posadres? Karakter veld. So dit is 'n mooi begin, maar Kom ons wees 'n bietjie meer akkurate. So dit blyk dat in 'n databasis, wat jy dikwels 'n keuse oor meer verfynde weergawes van hierdie dinge. Trouens, in 'n tipiese SQL databasis, SQL, of meer algemeen, relasionele databasis, databasisse met rye en kolomme, jy dikwels kry om nie net die tipe van die spesifiseer field-- laat my toe om 'n paar kamer here-- maar ook die lengte. So hoe lank is 'n eerste naam? Ek dink, D-A-V-ek-D. Goed, het dit ek waarskynlik net aanstoot soos die helfte van die mense in die kamer, reg, aangesien julle name is langer as vyf briewe, so vyf lyk 'n bietjie selfsugtig en naïef, so wat is 'n beter waarde? 10, alles reg, en ek dink ons is OK in die kamer. 13? 30? Hoekom weet ek nie neem die benadering van vroeër toe ons praat oor skikkings en geheue? Hoekom moet ek nie sê net soos 1000? Niemand se naam gaan om meer as 1000 wees. Druk terug. Gehoor: [onhoorbaar] David Malan: Ja, dis verkwistende, reg, veral As die meeste name is net vyf of 10 of 15 karakters, dis baie verkwistende. So jy weet wat? Dit is 'n soort van 'n harde vraag. Nou, ons kan seker analiseer Engels en name enige ander taal se en uit te vind, wel, wat is die average-- gemiddelde nie regtig help us-- wat die maksimum is waarskynlik wat ons regtig wil. Maar dit blyk ons ​​eens sommige keuse oor die tipe hier. In 'n tipiese SQL databasis, jy 'n kar in die veld het iets genoem en ook 'n varchar, V-A-R, vir veranderlike kar veld. En die verskil is hierdie. A kar veld, jy die ontwerper, moet spesifiseer vooraf die presiese lengte van die veld. So miskien is die eerste naam soos 20 voel soort van 'n veilige. Dalk 'n paar googlen doen om kyk of dit is eintlik veilig genoeg. Daar is waarskynlik 'n naam met 21 karakters, maar vir nou, dink 20 veilig. A kar veld sou impliseer in 'n databasis wat jy gebruik 20 en altyd 20 karakters. Nou is dit net D-A-V-ek-D, 15 van dié is net gaan leeg karakters wees, maar jy nog steeds met behulp van al 20 grepe. A varchar veld, daarenteen, beteken die string moet wees tot 20 karakters maar as dit is net vyf, jy net gaan gebruik vyf, of miskien ses vir 'n spesiale waarde aan die einde, soos wat 0 ons bespreek wat dui op die einde van 'n karakter volgorde in die geheue. So wanneer dink jy jy dalk kies kar versus varchar, gegee dat kompromis? Char gebruik wat baie karakters, varchar gebruik nie meer as wat baie karakters. Gehoor: [onhoorbaar] David Malan: OK, as jy weet wat die lengte van die string mooi dwingende om net te gebruik kar, want as jy weet dit, net sit dit af. En miskien is dit waar vir 'n rits kode, in die VSA, ten minste, 02138, Dit was nog altyd gaan wees vyf karakters totdat jy voeg die streep vier. Maar jy kan 'n paar waardes vir het wat jy altyd weet wat die lengte. Of miskien staat simbole, soos NY vir New York, en MA vir Massachusetts in die VSA. Miskien wil jy 'n paar situasies waar dit is heeltemal redelike, maar teen daardie logika, hoekom is ons selfs overthinking hierdie? Hoekom het ons nie gebruik net varchar en dan sal ons net gebruik altyd twee karakters in elk geval, of gebruik altyd vyf karakters in elk geval? Waarom nie net red varchar vir alles, deur daardie logika? Daar moet 'n vangs wees. Gehoor: [onhoorbaar] David Malan: Kan skryf iets verkeerd. So dit is waar. Maar selfs dan kan hulle nie gebruik meer geheue as wat ek ken. Ek het nog steeds die finale sê oor die lengte, sodat hulle kan nie per ongeluk maak wat fout, maar 'n goeie gedagte. Dit is meer subtiel, maar dit is baie verwante om ons gesprek, eintlik, van skikkings en geskakelde lyste vroeër. Dit blyk dat 'n databasis, indien dit weet dat al die waardes is van 'n vaste lengte, selfs al sommige van hierdie waardes is leeg, soort estetiese leeg, D-A-V-ek-D en dan 15 spasies, Dit blyk dat indien elke veld is ewe lank, baie soos 'n skikking moes al sy dinge rug aan rug aan rug aan rug, sodat jy kan net plus 1 tot na die volgende te kry waarde, dieselfde idee in 'n databasistabel. As al jou karakter snare is dieselfde lengte, jy wat ewetoeganklike genoem. As al die snare is van lengte 20, doen jy nie net doen plus 1 wat jy net doen plus 20, plus 20, plus 20, plus 20, en jy kan baie vinnig blaai deur of soek deur al jou data. 'N Veranderlike kar veld, daarenteen, hoef nie altyd 20 karakters. Dit mag hê 20 en dan 15 en dan 19 en dan 10, en dus as jy wil soek deur dit, kan jy nie net blindelings voeg 20 grepe na die volgende een te kry. Jy het letterlik om te soek deur omdat die rand van die datastruktuur, as jy wil, is verskeurde. Dit gaan soort van in en uit gebaseer op die werklike lengte van die string. So as jy weet die lengte, soos Kareem sê, gebruik 'n kar in die veld, omdat jy kry wat doeltreffendheid daarvan om staat om te soek deur dit vinniger wanneer jy soek vir data, anders 'n veranderlike te gebruik. Ongelukkig het ek nie 'n goeie antwoord hoe lank die naam moet wees, maar vir iets soos 'n naam, sou ek sê 'n varchar is algemeen want dit gaan nie om 'n vaste lengte vir almal wees. 20, weet ek nie, 20 voel 'n bietjie styf. Kom ons sê maar 50, 50. Dit maak nie regtig kos wat veel meer om te sê 50 in plaas van 40, maar op 'n sekere punt, moet jy om te oordeel. Baie algemeen, eerlik, vir [? historiese?] redes, selfs al is dit buitensporig, dit wil sê 255, omdat 'n geruime tyd gelede, in die populêre databasis stelsels, soos MySQL, 'n gratis open source instrument wat 'n baie maatskappye soos selfs Facebook gebruik, dit was die maksimum standaard sodat mense net saam met dit. So nie onredelik nie, maar ons sal gebruik 'n bietjie meer intuïsie en sê: seker 50, dis waarskynlik 'n bietjie oordrewe. Gender, ek doen soos enum, en so kan ons dus opsom man of vrou, of dalk meer doeltreffend, m of f of 'n ander simboliek nie, maar enum voel soos 'n goeie keuse is daar. Om duidelik te wees, geslag kon net 'n varchar wees, en ons kon net al eens so mooi mense, om altyd die dieselfde waardes daar. Man of vrou of iets anders. Maar die probleem is dus dat ons kon 'n fout maak, soos [onhoorbaar] voorgestel vroeër in 'n ander konteks. As ons 'n fout maak, kan ons kry foutiewe waardes in ons databasis. So, wat is lekker oor databasisse soos Oracle en MySQL en ander, is dat jy hierdie laaste laag verdediging waar jou DBA, databasis-administrateur, Wie is die ontwerp van die tabel soos ons is mondelings, kan sit in plek 'n enum wat beskerm teen daardie spesifisering manlike, vroulike en sodat niemand anders geen programmeerder kan per ongeluk voeg enige ander waarde. So sou dit 'n goeie ding wees. Dit is 'n kenmerk. So 'n ID, aanvaarding van 'n numeriese ID, dit waarskynlik moet 'n positiewe heelgetal wees. En ons soms doen het geleentheid om lengte te bespreek. Jy sal nie tipies spesifiseer 'n aantal hier, sou jy eerder spesifiseer dit is 'n int, of 'n groot int, as hulle is tipies genoem. Maar tipies, 'n heelgetal sou wees, kom ons sê, 4 grepe. En as dit is 4 grepe, dit is hoe baie stukkies? Gehoor: [onhoorbaar] David Malan: 32 stukkies. So hoeveel gebruikers kan ons in ons databasis of hulle al 'n ID en hierdie ID het om uniek te wees? 32 stukkies beteken dat ons patrone van een, twee, drie, vier, five-- so hoeveel verskillende patrone van nulle en kinders kan jy as daar 32? Dit is dieselfde as vra wat twee tot die 32? Dis 'n groot getal wat Ek kan nie heeltemal reg te kry, maar ek weet dit is min of meer 4 miljard. So dit beteken dat jou databasis kan het 4000000000 gebruikers en dit is dit. So dit is 'n interessante ontwerp implikasie. 'N ordentlike aantal maatskappye besluit het, miskien nie soseer vir hul gebruikers tafel, want met 4 miljard gebruikers is 'n seldsame probleem. Dit is 'n soort van 'n Facebook-styl probleem, nie 'n tipiese maatskappy probleem. Maar miskien as jy 'n transaksie logs of 'n soort van data wat voortdurend kry geskryf in jou databasis wat absoluut miljarde kan hê en miljarde rye, en jy 'n heelgetal vir dit, wat gaan sodra gebeur jy rijnummer 4000000000 en dan probeer jy om die plaas 4000000000 en 1, om so te praat? Ek is die vereenvoudiging van die getalle 'n bietjie. Jy kan sny, ek bedoel jy moet dit een of ander manier te hanteer. En wat 'n rekenaar tipies sou doen, daaroor dink selfs van vanoggend, as jy 'n 4-bit waarde soos 1, 1, 1, 1, wat, net om die oggend te bind saam met die middag, wat beteken hierdie getal verteenwoordig in binêre? OK, ons sal dit makliker te maak. Wat beteken hierdie getal verteenwoordig in binêre? OK, ons sal dit makliker te maak, wat beteken dit verteenwoordig in binêre? Publiek: Drie. David Malan: Drie, omdat Ons het die kinders column-- [Gelag] Sjoe! Ons het die kolom kinders en die twee-twee kolom. So veronderstel dat, wel, ons [? binneveld?] was nie 32 stukkies, maar dit was twee stukkies, ons kan tel van gebruiker getal 0, 1, 2, 3, en dan is ons soort terug na die gebruiker 00 weer. So dit is wat gewoonlik gebeur. As jy al ooit die expression-- het gehoor waarskynlik nie, maar as jy have-- heelgetal oorloop, waar jy hou daarby al jou stukkies om die grootste moontlike waardes wees, en dan is jy uit stukkies, wat sou tipies gebeur? Hoekom moet ek sê 00? Wel, dit is drie. Hoe kan ek 4 verteenwoordig? Hoe kan ek verteenwoordig die vir nommer 4 in binêre? Gehoor: [onhoorbaar] David Malan: One-- ja, moenie sê 100 per se nie, want dit het die verkeerde konnotasie, maar 1-0-0. So dat die getal 1-0-0 is inderdaad korrek is, maar as jy net twee stukkies, Wat het jy regtig gedoen? Jy het na 00 gerol. En inderdaad, dit is wat gaan gebeur. Eintlik, kan jy dink hieroor meer vertroulik. As jy onthou, wat, 16 jaar gelede het die wêreld was veronderstel om die einde toe die J2K probleem gebeur. Hoekom was dit? Wel, die meeste rekenaars, vir redelike besluite, is die stoor nommers soos die jaar 1975 of die jaar 1999 deur net die gebruik van twee syfers in die geheue van die rekenaar. So natuurlik, wat gebeur wanneer jy die jaar 2000, jy gaan om dit, of liewer, ja. So gaan jy na die jaar 2000, maar as jy net met behulp van twee syfers lyk dit soos die jaar 00 en sodat jy het oor gerol. En dit is die rede waarom 'n klomp stelsels wat nodig is om opgedateer op daardie tydstip. So met dit gesê, maatskappye soos Facebook aanloop teen hierdie. Dus is die enigste manier om die te hanteer situasie, eerlik, is om dit te verwag. Of die skoonste manier om hanteer hierdie situasie is om dit te verwag, sodat jy dit nie doen nie moet veranderinge later te maak. So in plaas van 8 grepe, jy weet wat? Ek gaan vooruit dink nie hier, selfs al is dit 'n bietjie optimisties dat ons gaan hê 4000000000 en 1 gebruikers op ons webwerf. Maar laat ons net gebruik 8 grepe, of 64 stukkies, wat oor die algemeen sou wees bekend as 'n groot heelgetal, baie tegnies van aard. En dit beteken net jy kan hê selfs meer syfers in jou nommer. Maar dit is 'n belangrike ontwerp besluit, want as jy 'n aantal kies wat het te min stukkies uitdrukking jy kan eintlik maak 'n fout in jou sagteware. Goed, so laat ons draai met e-pos en posadres. So e-pos, hoe lank moet 'n e-pos adres? 50. Ek het regtig geen idee nie, maar dit is waarskynlik iets soos dit, want anders niemand gaan skryf jy as dit te lank raak, so 50, Kom ons gaan met dit vir nou. Posadres, hoe lank moet dit wees? Gehoor: [onhoorbaar] David Malan: Dit is nie net 'n kode, al is. Posadres, hoor ek. So dit is soos 1 Brattle Square, komma, Cambridge Mass., komma, 02138. En in werklikheid, laat my net trek 'n bietjie werkblad hier. Dit voel soos dit is 'n gemiste kans. As ons 1 Brattle Square, komma, Cambridge MA 02138, Ek voel soos ons beter kan doen as net posadres. Hoekom het ons nie ontplof dit 'n bietjie? Wat kry ek by? Wat moet ons 'plaas vir ons rye hier, miskien? Gehoor: [onhoorbaar] David Malan: Ja, so laat ons noem dit street_number, en 'n onderstreep is net 'n gewone manier van met wat lyk soos 'n ruimte, maar dit is nie, eintlik. Street, en dan city-- jammer? Gehoor: [onhoorbaar] David Malan: Ons kan dit doen. Line een, lyn twee. Hoekom nie sal ons hou dit eenvoudig vir nou, maar dit is absoluut 'n aanvaarbare besluit. En dan staat, en dan kom ons 'n bietjie VSA-sentriese vir nou en net doen poskode, net omdat Dit sal lei tot 'n interessante fout of probleem hier. So dink dis nou ons adres. Dit is 'n bietjie meer irriterende dat Ons het al hierdie meer velde, maar nou kan ons merk dinge 'n bietjie beter. So nou straatnommer waarskynlik behoort nie 'n kar te wees, moet dit? Wat moet dit wees? Gehoor: [onhoorbaar] David Malan: Miskien, 'n aantal soos 'n heelgetal weer? 'N Groot heelgetal? Jy het waarskynlik nie leef by 4000000000 Hoofstraat of enigiets gek soos dit. So heelgetal is waarskynlik fyn, maar het enigiemand ooit geleef op 'n adres soos 1A Brattle Square, of 1 en 1/2? Hierdie dinge bestaan ​​ongelukkig selfs al is jy nie daar gewoon het, Daar is hierdie afwykings soos woonstel 1A, 1B, 1C. So jy weet wat ons waarskynlik moet nie saam met heelgetal, anders gaan ons 'n paar verkope te verloor. Char veld, miskien? Ek weet nie hoe lank ken. Dit is waarskynlik nie van plan om te wees so lank, so 10 of iets. Niemand gaan skryf 'n langer nommer, miskien. Maar weereens, moet ons waarskynlik gee meer gedink aan daardie. Miskien Google doen 'n bietjie navorsing, maar ons sal saam met ons guts vir nou. Strate, kar, 50, ek weet nie. Op 'n sekere punt, is niemand gaan om dit te skryf op 'n koevert, Ook, daar is waarskynlik sommige bogrense daar. Plaas, dieselfde, seker, so char 50. State, kan VSA-sentriese vir nou. So kan dit 'n lys wees, so vriendelik van 'n vonnis oproep, meld. Dit kan wees soos twee karakters. So eintlik, miskien, ek bly sê kar. Ek bedoel waarskynlik varchar, net vir 'n paar doeltreffendheid, maar ons sal terug te kom na daardie besluit in 'n oomblik. Kan 'n kar van lengte 2 vir die staat wees. As in die VSA hulle, soos MA, Massachusetts, NY, New York, New Jersey, New Jersey, ensovoorts. So dit kan vasgestel word op daardie. DC vir Washington DC. Maar ek dink, Olivier, jy voorgestelde ander benadering. Gehoor: [onhoorbaar] David Malan: Ja, so dit is 'n klein irriterende om te tik in, maar 'n enum dalk meer sin maak, want op hierdie manier, ten minste in die VSA, jy kan opsom as tediously, maar jy doen dit net een keer in jou databasis en nooit weer hoef te dink oor dit, al 50 twee-karakter kodes. So ek wil enum. Kom ons vashou aan dat daar, as gevolg dit soort van dwing meer strengheid. En dan kode rits? Ek dink Andrew het 'n gedagte oor wat Gehoor: [onhoorbaar] David Malan: Ja, vyf of nege. Kom ons hou dit net eenvoudig nie. Doen vyf vir nou. Maar miskien kan ek net doen 'n heelgetal, reg? Ek kon, maar jy weet wat ek gemaak hierdie fout keer, in 'n sekere sin. Jare gelede, was ek migreer vanaf Microsoft Outlook na Gmail, en Outlook het 'n manier om die uitvoer al jou kontakte as 'n Excel-lêer, 'n CSV-lêer, komma waardes lêer geskei. En ek het die fout gemaak het, het ek dink, dubbele te klik, nadat ek afgelaai die uitvoer, te maak seker dat dit lyk soos ek verwag het. Ek moet getref Slaan of laat Auto-red skop in of iets. Want as ek dan ingevoer dit in Gmail, dit alles saam. Maar vir die jaar, tot vandag toe, en Ek het dit vyf, 10 jaar gelede, Ek is nog steeds die vind van vriende wat adresse wat lyk soos hierdie. Hoekom? Gehoor: [onhoorbaar] David Malan: Dit het die 0, goed, maar eerder, dit het die hele poskode as 'n nommer, en daarom is dit 'n leidende 0 wat beteken dit het geen betekenis. En so 2138 lyk my poskode wees. En dit is die waarheid te sê, 'n irriterende Excel funksie waardeur ek dink by verstek, selfs al is dit bedoel om net wees teks, Microsoft Excel besluit, laat my nuttig wees, en O, ek sien net nommers. Kom ons hanteer dit as nommers. En dit truncates die voorste nulle. Ek sweer aan God, elke paar maande Ek vind 'n adres, en uit 'n soort van OCD, gaan ek terug in en voeg die 0, selfs al het ek nog nooit stuur mense briewe of iets. Maar ek is nog steeds vind oorblyfsels van hierdie. So dit is om te sê, is dit 'n goeie idee? OK, nee, want niemand in Massachusetts, op hierdie gebied, gaan 'n o voorste hulle het. So laat ons gaan met soos kar, waarskynlik, vyf. En hier, besef ons kon 'n enum en ons gebruik kon opsom 10000 moontlik zipkodes maar wat voel soos dit is waarskynlik kruising van 'n lyn van, soos, voordele. As jy op die insette wat veel data in jou databasis te beskerm teen iets. So kar besef jy kan tik in H-E-L-L-O as jou poskode, wat is nie, natuurlik, numeriese. Daar is dus geen manier, in 'n tipiese databasis, slegs numeriese spesifiseer en slegs vyf karakters lank, so ons gaan hê om dit te doen in die kode. Ons gaan om dit te doen in PHP of Java of wat ook al taal wat ons is gebruik van die bediener af te dwing daardie soort dwang. Whoo! Goed, so enige vrae nog net? Kom ons maak 'n ander ontwerp besluit. Dit blyk dat jy ook om van te kies, by die ontwerp van 'n SQL databasis, of tipiese relasionele database-- waar weer, relasionele net beteken rye en kolomme, dit is hoe jy jou data-- organiseer en besef dat wat dit beteken is, Ek het al misleidend in wat, ek is drawing-- hierdie is wat is bekend as die skedule vir 'n databasistabel. Dit is soos die spesifikasies vir die table-- maar wanneer dit tyd aanbreek om werklik te stoor, en ons sal dit doen net deur 'n voorbeeld hier. Ek gaan om oop te maak Excel, omdat Excel sal my rye en kolomme gee. En dit is presies wat Oracle en MySQL en ander instrumente sal my gee. So ek gaan net om te gebruik dit ter wille van bespreking nie. Laat my gaan voort en maak 'n verteenwoordiger dokument hier, in 'n bietjie te vergroot. So byvoorbeeld, ons kop is nou eerste naam, laaste naam, geslag, ID, e-pos, straatnommer, straat, Oeps. Street, stad, staat, net oor pas op die skerm. So, wat dit beteken is dat wanneer 'n gebruiker eerste registreer vir my webwerf, dit gaan iets soos Dawid Malan, m, kom ons sê 1, malan@harvard.edu, straatnommer sal soos 1 Brattle Square, Cambridge, MA, 02138, en dan so meer. So as ek sê dat 'n relasionele databasis of SQL databasis is rye en kolomme, Ek bedoel dit. Dit werklike data gestoor in rye en kolomme. Dit is net 'n toeval, wat ons praat, en ek was net teken dit in rye en kolomme. Dit is net die skema, die oorkoepelende definisie. So van hierdie velde hier, Of anders gestel, is daar, wat die velde wat jy dink is Ek is geneig om te soek op as ek 'n gebruiker of as ek die databasis administrateur? Soos wat velde is ek eintlik gaan soek op? Gehoor: [onhoorbaar] David Malan: Die naam, ja so Ek hou van die feit that-- ja, e-pos kan redelik algemeen wees. Jammer, jy het gesê naam. So maybe-- en weer, ons is soort praat in die abstrakte. Ek weet nie hoekom jy wil word op soek na 'n naam, maar wat voel redelik as jy soek vir 'n gebruiker. Miskien stel, seker, ID. En dit is 'n glibberige helling, want ek kon bedink 'n scenario waar Miskien is my baas het my gevra, hoeveel mense het ons op ons webwerf? Hoeveel vroue het ons op ons webwerf? En so op daardie stadium, wil jy dalk Soek op die veld geslag ook en niks anders nie. Daar is dus hier 'n trade-off. Weereens, daar is geen regte antwoord, maar daar is 'n funksie in die meeste SQL databasis bekend as kruip, waardeur jy, die ontwerper, die databasis administrateur, kry om te besluit vooraf watter velde van die databasis moet optimaliseer vir soektogte op. Jy kan baie naïef sê, te optimaliseer hierdie, optimaliseer dat optimaliseer hierdie, optimaliseer dat en hierdie, en die databasis sal doen 'n paar magiese ding onder die kap, en iets te doen in so 'n manier dat die volgende keer wat jy soek op enige van hierdie velde, Dit sal inderdaad vinniger. Dit is moontlik. Dit maak hom nie kanselleer. Maar daar moet 'n prys betaal word. As jy naïef, of oor-entoesiasties Sê indeks al hierdie velde, so te sê, maak hulle almal doeltreffend gesoek, watter prys jy waarskynlik betaal? Gehoor: [onhoorbaar] David Malan: Prestasie. Wat bedoel jy? Wel prestasie, ten minste in die konteks Ek bespreek, is nou beter. Dit is die definisie van kruip. Dit sal soektogte vinniger te maak. So tyd afneem, om so te praat. Gehoor: [onhoorbaar] David Malan: Space. So weer, dit is 'n algemene handel. Ek kan bespoedig jou soektogte, maar dit is gaan jy meer kos grepe van ruimte. Hoekom? Wel, by verstek, as ons nie een van hierdie rooi sterre, geeneen van hierdie indekse, soos ek sê, hoe kan jy soek vir 'n naam in die databasis? So laat ons trek ons aandag aan hierdie voorbeeld. As ons Dawid en Scully en Kareem en Arwa en ander in hierdie rye, byvoorbeeld. So laat ons doen presies dit. Scully is hier, en dan Ons het Kareem, en Arwa, en al die ander, as jy dit nie doen nie 'n indeks gedefinieer, om so te praat, die beste wat jy kan doen is om lineêre soek. As jy soek vir Arwa, ons is nie gaan in staat wees om reg te spring om haar vinnig. Ons gaan na bo begin en gaan al die pad na die bodem, nie in teenstelling met ons oorspronklike Mike Smith voorbeeld. As jy egter sê ek, hey, databasis, indeks die eerste naam veld, dan is dit gaan om iets te doen liefhebber en iets te ondersteun soos binêre soek. Dit is waarskynlik nie binêre soek per se. Databasisse is geneig om 'n ander te gebruik datastruktuur genoem b-bome, moet nie verwar word met binêre bome, wat net maak dit vinniger te soek iets logaritmiese in die natuur. Maar die prys wat jy betaal om op te bou wat funksie, wat datastruktuur in die geheue, meer grepe. So kan dit 'n paar megagrepe neem, sommige GB, wie weet? Dit hang af van die data. So op 'n sekere punt, jy moet besluit, dit is waarskynlik nie 'n gemeenskaplike saak. So, wat is die werklike algemene gevalle, as jy regtig moes kies, wat kan jou gunsteling velde wees? E-pos. En ek wil e-pos, want e-pos, in teorie, moet uniek wees. En so tipies, wanneer jy weet by voorbaat dat een van julle lande is of sal uniek wees, wat geneig is om 'n goeie veld Soek op, want op die manier, wanneer jy soek na iets, jy gaan om terug te kry een of nul antwoorde en dan is jy klaar is. Jy hoef nie te hou op soek na nog ander. En so in hierdie geval hier, e-pos, so lank as wat jy nie twee keer kan registreer met dieselfde e-pos, is 'n goeie een. ID per definisie, in die rekenaarwetenskap wêreld, As jy praat oor 'n ID, wat beter unieke het nie. Dit is soort van die konnotasie van ID of identifikasie. En die res van hierdie kan wees, Kom ons noem dit lekker om haves, maar nie regtig nodig is. En so in 'n databasis, jy indekse spesifiseer, maar jy kan nog meer presies te wees. Jy kan sê, hey, databasis, maak seker dat elke ID in hierdie tabel is uniek. Moet nie eers toelaat dat 'n programmeerder per ongeluk in 'n dubbele e-pos of dupliseer ID-nommer. Soveel soos enums beskerm ons insgelyks, jy kan diegene laer-vlak verdediging het. En so databasisontwerp, in 'n sekere sin, is 'n soort van pret, omdat jy dit defensief te doen. Jy soort van aanvaar dat jy werk met aaklige, aaklige programmeerders en jy wil soveel verdediging in te sit as wat jy kan om jou data te beskerm, maar terselfdertyd jy wil om hulle te help beter te presteer deur te kies watter velde te optimaliseer vir. Maar jy kan nie noodwendig in 'n vakuum soos ons soort is hier. Jy het om te weet wat is diegene algemene gevalle word. As die ontwikkelaars is implementering van 'n adres boek, jy dalk baie goed wil in staat wees Soek op byna elke gebied, net deur die natuur van die aansoek. So miskien spandeer jy dat bykomende ruimte. Reg, enige vrae? Ja. Gehoor: [onhoorbaar] David Malan: No. Gehoor: [onhoorbaar] David Malan: OK. Gehoor: [onhoorbaar] David Malan: Ag, sodat ons praat op 'n manier nou dit is heeltemal taal agnostikus. So ons is nou praat relasionele databasisse meer algemeen, of SQL databases meer algemeen. Gehoor: [onhoorbaar] David Malan: 'n beter woord om te gebruik is, kan gebruik word deur enige taal. So kan ek JavaScript-kode skryf, C kode, C ++ kode, Java-kode, Ruby kode, wat almal praat met 'n databasis en uit te voer navrae. Trouens, dit is nie 'n slegte segue om 'n voorbeeld navraag. En weer, ons gaan nie in te gaan Java of C ++ of enige van daardie nie, maar in SQL, die taal waarin ek hou verwys, Structured Query Language, hierdie self is 'n programmeertaal, maar dit is bedoel om gebruik te word vir geen verrassing, gestruktureerde navraag navrae. Daarmee bedoel ek dit. Die manier waarop jy data kies uit 'n MySQL databasis is jy letterlik tik in jou program iets soos kies ster van die gebruikers. Ek neem aan dat hierdie tabel, voortaan word gebruikers genoem. Ek kon dit noem enigiets wat ons wil, maar dat die soort van sin maak. En so kies 'n baie algemene werkwoord, as jy sal, in SQL, wat letterlik beteken dat. Wat dink jy ster beteken in hierdie konteks? Gehoor: [onhoorbaar] David Malan: Ek is jammer? Gehoor: [onhoorbaar] David Malan: nie nodig nie, dis meer inklusiewe as dit, eintlik. Dit is die wild card karakter. Ster byna altyd beteken niks, so dit beteken, in hierdie geval, Kies alles van die databasis. En toe ek dit sê, ek bedoel gee my terug elke kolom uit my tafel geroep gebruikers. So gee my 'n resultaat stel, soos dit genoem word. Met ander woorde, gee my 'n afskrif van die sigblad, is wat ek kry by. Maar as ek sê kies ster van die gebruikers waar ID gelyk 1, hoe groot moet my gevolg stel dan? Of anders gestel, hoeveel rye moet Ek teruggegee word van die databasis? Waarskynlik net een, as ek wel behandel ID as unieke identifikasie, en as Dawid het daardie unieke ID, ek moet terug te kry een en slegs een ry wat al inligting van Dawid. As ek sê dit waar ID gelyk 99, moet ek terug te kry, In hierdie konteks, nul rye, ten minste op die oomblik. Maar as ek nie regtig omgee oor al daardie inligting, Ek kon net sê, waar kom Dawid leef? Kies poskode van gebruikers waar ID is 1. Dit sal kies om my net David se ritssluiter kode en nie die hele inhoud van die ry. Hoekom kan ek dit in plaas van doen die ster navraag, die wild card? Gehoor: [onhoorbaar] David Malan: Ja, ek kan net nodig het. So prestasie is weer die antwoord hier. Hoekom vra vir meer inligting as wat jy nodig het, want selfs al is dit alles reg saam, jy moet nog daardie data kopieer, Dit wil voorkom, uit die databasis in jou program of ander manier, en dit is net dom as jy net nodig vyf van dié syfers, nie die geheel van die ry. So, hoe kan ek 'n gebruiker te voeg? Veronderstel 'n gebruiker het net geregistreer vir die eerste keer. Die sintaksis sal gewoonlik soos volg lyk. Voeg in gebruikers, en dan sal ons waardes sê, en dan sal ons waardes sê soos, kom ons sê, Lauren Scully, ons videograaf hier. En die volgende veld is geslag. So ons sal sê quote, unquote "F", dan het ons 'n ID en ek gaan say-- laat voorgee sy is nie eintlik hier, so ons sal terugdraai in die storie. So 2 sal haar ID te wees. En dan is die volgende veld hier is haar e-pos. So dit gaan wees soos Lauren Scully en dies meer, en ons sal net dot dot dot dit weg van hier op. Nou sal dit 'n bietjie te kry vervelige, maar die insetsel navraag sou uiteindelik lyk dit. As ek wil om ontslae te raak van Scully, uh-oh, kom ons deregistreer haar, verwyder sy haar rekening, verwyder van gebruikers waar ID gelyk 2, sal ontslae te raak van Scully. Of ek kan sê update gebruikers stel, kom ons sê, wat kan ons verander? Veronderstel sy beweeg. Stel zip gelyk 021-- nope, dit is haar huidige zip. 90210. Die enigste ander poskode Ek weet in die wêreld. Sodat sal verander haar zip code-- eintlik, wat sou haar Poskode nie verander nie. Wat het ek net doen? Selfs al is die sintaksis is waarskynlik nuwe. Gehoor: [onhoorbaar] David Malan: Ja, ek het almal om Beverly Hills, Kalifornië. So sou ek eintlik sê waar ID gelyk 2. En dies meer. So SQL is alles oor hierdie soorte instruksies. Kies, voeg, te verwyder, te verander, met hierdie predicaten aan die einde hierdie waar klousules, om so te praat. En daar is 'n baie meer wat jy kan doen nie, maar dit is werklik net daarop neer om eenvoudig, as arcanely, uitdrukking wat jy wil hê die databasis te doen. En dan die databasis sal uitvind, wanneer jy voeg Lauren Scully in die databasis, waar haar in die geheue sit sodat ons baie vinnig kan kry haar op grond van haar e-pos adres of op grond van haar ID-nommer of dies meer. Ja, Dan. Gehoor: [onhoorbaar] David Malan: Regtig 'n goeie vraag. Sal hierdie skrifte verander van Microsoft Access te Oracle MySQL te PostgreSQL? Die kort antwoord is dit hang af. In teorie, daar is 'n baie beduidende algemene subset van SQL dit is verdeeld oor die hele van hierdie implementasies. Maar verskeie vervaardigers het meer funksies om hul databasisse aan sekere dinge te doen buite die bestek van hierdie eienskappe, wat kan, in werklikheid, breek. So het die manier ontwikkelaars verskans teen hierdie, is dat in plaas van die skryf van rou SQL-kode soos ek hier skryf, hulle plaas gebruik 'n biblioteek, 'n gemeenskaplike biblioteek wat homself is 'n soort van 'n hoër vlak en abstrakte weg wat die produk wat jy gebruik. En dit gee jou funksies en prosedures om sodat jy nooit bel eintlik skryf rou SQL. In teorie, dan kan jy verander produkte van Oracle Microsoft of andersom of enigiets anders, en jy letterlik niks oor jou kode te verander. Die werklikheid is egter, jy soms opgee funksies as 'n resultaat. Jy kan 'n produk as gevolg gekies dit het hierdie eienskappe op toegevoegde waarde, en jy is nou net nie die gebruik van hulle doelbewus. En anecdotally, die meeste maatskappye is geneig nooit weg van hul databasis te skuif. Dus, terwyl dit 'n lekker wees om het funksie, die werklikheid is, as jy opknapping jou databasis, jy waarskynlik maak trosse van ander veranderinge In elk geval, wat jy nie noodwendig moet verwag dat. Dit is dus waarskynlik oor-Engineering die probleem, maar dit hang af van die konteks. Maar in teorie, SQL gedeel oor die verskillende produkte. Regtig 'n goeie vrae. Ja. Gehoor: [onhoorbaar] David Malan: Ja, so jy kan 'n databasis dink is net 'n bediener, aan die einde van die dag, en binnekant van die bediener is 'n hele klomp van die tafels, rye en kolomme. En wanneer jy 'n navraag te stuur soos hierdie uit jou program, jou webwerf, geskryf in Java, Ruby, Python, wat ook al, die bediener ontvang hierdie opdrag en die interpretasie van dit in letterlik op dieselfde manier ons vroeër bespreek met geïnterpreteer tale, en dan die uitvoering van 'n aksie op nul of meer rye in nul of meer tabelle. Gehoor: [onhoorbaar] David Malan: Presies, presies. So het die pseudokode na iets so kan dit wees. In jou PHP lêer of jou Python lêer of jou Java lêer, jy sou pseudokode-kode het, of Kras soos blokke as, indien die gebruiker besoeke acme.com/register~~V vir die eerste keer, voeg dan in gebruikers en dies meer. En ons sou dit vertaal na meer konkrete kode op die ou end. Maar regtig, ons het al die boustene hier, selfs al is ons draai 'n paar van die stappe implementering. So laat my fout vind met wat ons wonderlik gedoen net 'n oomblik gelede. Jy het 'n mooi geskep volledige tabel vir gebruikers. Toegegee, kan ons implementeer dit in 'n paar verskillende maniere, maar jy het eintlik het ons af die path-- en sê ek jou, maar dit is waarskynlik my fault-- van 'n redelik ondoeltreffende databasis implementering. Dit is nie genormaliseer. En deur genormaliseer ek bedoel daar gaan wees, met verloop van tyd, 'n beduidende ontslag, en dus ondoeltreffendheid, dit is n vermorsing van ruimte. Op grond van net wat jy hier sien, kan jy sien 'waar hierdie vermorsing van ruimte gaan uit, om te kom met verloop van tyd, aangesien meer en meer gebruikers te registreer vir jou webwerf? Watter data kan oorbodig geword? Gehoor: [onhoorbaar] David Malan: Hoekom dink jy beteken dit? Gehoor: [onhoorbaar] David Malan: Ja. En laat ons veronderstel vir die doeleindes van vandag dat dit waar is. Turns out, en ons het hierdie leer op die harde manier, dit is nie waar nie. Een of ander manier verskeie stede het, een of ander manier, dieselfde poskode, wat breek hierdie wonderlike intuïsie. Maar laat ons veronderstel dit is waar, want dit is byna altyd waar nie. So veronderstel dat 'n kode is altyd verband hou met dieselfde stad en die staat, wat is 'n soort van redelike aanname, maar verkeerd is, dit blyk. Maar 'n redelike aanname vir doeleindes van vandag. Dan dink dat Ek woon in Cambridge, MA, volgens tabel se gebruiker, en veronderstel dat Lauren Scully woon in Cambridge, MA, en veronderstel dat Kareem woon in Cambridge, MA, en Arwa woon in Cambridge, MA, almal van ons in 02.138. Hoekom is ons onthou Cambridge, MA, 02138 vir al vier van ons? Wat moet volstaan ​​om te onthou? Gehoor: [onhoorbaar] David Malan: Net die poskode. Net dat 02.138 bestaan, omdat jy weet wat ons kan doen? Ons kan 'n bietjie fancy hier te kry en hier, definieer 'n ander tafel waar dit gaan om die wees naam, dit gaan na die tipe wees, dit gaan die wees lengte, en van nou af, ek is gaan hierdie skakel my stede tafel. Dit was bekend as, van Natuurlik, my gebruikers tafel. En so wat moet ek sit hier vir my stede tafel, dink jy? Gehoor: [onhoorbaar] David Malan: Ja. So rits en staat en die stad. En so het die tipe hier, sal ons sê dit gaan weer 'n kar 5 wees, onderhewig aan die debat van vroeër. Dit sal 'n enum wees, dalk soos voor, sal en stad 'n varchar 50 wees. En so nou wat kry ek om vee uit hierdie tabel om dat ondoeltreffendheid uit te skakel? Gehoor: [onhoorbaar] David Malan: Nice. Staat en die stad weggaan, so ek het nou uitgeskakel die potensiaal ondoeltreffendheid vir verskeie kere onthou, Cambridge, MA, Cambridge, MA, Cambridge, MA, Cambridge, MA, wat hopelik is nooit gaan verander. En selfs al is dit die geval is, is dit minorly irriterende, nou dat ek moet verander dit in verskeie rye, terwyl hier, ek kon net verander dit in 'n plek. Nou wat is die trade-off, miskien? Dit was super gerieflik. Het al my data mooi saam. Maar wat duidelik die geval nou? Gehoor: [onhoorbaar] David Malan: Presies, en ek is bly jy gebruik die woord aan te sluit, want dit is eintlik die navraag, in die wêreld van relasionele databasisse in SQL, dit is 'n werklike woord wat jy kan tik of ten minste oor te dra. En in werklikheid, wat ons nou te doen kies volledige inligting van Dawid is iets soos kies ster van gebruikers, sluit stede, is-- en nou Ek gaan net skuif na 'n tweede lyn sodat hierdie fits-- users.zip gelyk cities.zip, waar users.ID gelyk 1. So wat gaan aan? Dit is lelik op soek, maar jy kan soort lees dit van links na regs, bo na onder. Kies ster van die gebruikers is dieselfde as voorheen, maar dit is nie van die gebruikers, per se. Dit is van die gebruikers aan te sluit stede. Wat kan ek by die twee tafels aan? Wel, blykbaar, die gebruikers tafels rits veld, en hierdie tydperk is net spesiale sintaksis om die idee uit te druk, en dit is die stede tafels rits gebied. Ek wil dié twee gelyke wees, maar ek wil uiteindelik kies slegs diegene rye waar ID in die gebruikers tafel gelyk 1, wat gebeur het om myne te wees. En net om duidelik te wees, 'n programmeerder, tipies wanneer hardcode iets soos die aantal 1, want anders net die webwerf ondersteun Dawid of die heel eerste gebruiker, jy sou plaas nie iets soos ID, waar Dit verteenwoordig 'n veranderlike, iets wat kan oorskakel tyd, soortgelyk in die gees van wat ek vroeër gesê het met hierdie soort van plekhouers. Maar vir nou sal ons net hardcode dit as 1. En so wat beteken dit? Wel, 'n mooi manier om dit te visualiseer is dat indien hierdie kant is die gebruikers tafel, en hierdie kant is die Poskodes tafel, ons is soort van finding-- en die punte van my vingers is ritssluiter hier, en die punte van my vingers hier is zip, jy soort ineen dit sodat jy terug die gevolglike oorspronklike tabel deur werklik by die twee tafels aan die gemeenskaplike gebied. En dit hoef nie te rits wees. Dit kan die meeste enigiets anders wees, maar ritssluiter is lekker, want 'n mens, is dit kort, twee, dit is altyd die ewe lank, dus is daar 'n ware doeltreffendheid in watter Olivier voorgestelde hier met factoring uit die zip en [Onhoorbaar] stel dat ons ontslae te raak van die stad en state. Dit is dus die proses bekend as normalisering. Enige vrae oor wat? Wel laat ek uitwys dit is die soort dinge, selfs al is dit redelik lae-vlak, hierdie bespreking, wat jy sou dink jy soort van kry verlore in die onkruid, dit is 'n manifestasie van genoegsame geleentheid vir ontwikkelaars om sleg wees. En in werklikheid, selfs wanneer ons in kursusse Ek het geleer, wanneer ons gehad het, byvoorbeeld, onervare voorgraadse programmeerders bou webwerwe, met die eerste oogopslag, die webwerwe kan kyk geweldig. En hulle het al die funksionaliteit ons versoek, die ontwikkelaars het 'n goeie werk. Maar hulle het nie noodwendig weet genoeg oor databasisontwerp of hulle nie hard dink genoeg oor die tipes data en die tipes gebruikers die webwerf gaan hê, en ons vind dan ses maande later, nadat hulle gegradueer het of aanbeweeg, dat damn dit, ons webwerf werklik, werklik stadig. En ek is nie eens praat oor wat miljoene of duisende gebruikers. Ek bedoel 'n paar honderd gebruikers op kampus, wat almal graag, byvoorbeeld, shop vir kursusse by Terselfdertyd, hulle is die gebruik van daardie kursus katalogus aansoek ek genoem en die ding is regtig stadig, want daar was geen indekse. Daar was geen rooi sterre, om so te praat, of ons het nie noodwendig ingereken uit algemene data te kry 'n paar spaar ruimte. En so wanneer gekeur n ontwikkelaar of databasis persoon of dies meer, die soort vrae te deurdink selfs wanneer die hersiening van iemand se kode, om te sê, nie noodwendig kyk deur al hulle kode, maar sê: Kom ons kyk deur die databasis tabelle. Wat doen jy stoor? En dan sê, goed, wag 'n minuut, waarom gebruik jy 'n heelgetal? Wat gebeur as ons het 4 miljard en 1 van hierdie rye? En hierdie soort vrae is 'n geleentheid soort stoot terug en kry 'n gevoel van waar As jy nie gemaklik doen dit, met iemand wat meer tegniese vra hierdie vrae, van of die persoon weet regtig hul dinge. En dit is die soort dinge ook dat mense op die internet wat is self geleer, miskien leer minder gereeld, want jy nie noodwendig kom oor dit soveel, want jy kan kry die databasis aan die gang, maar tensy jy gelees op tutoriale of nie vertel databasis normalisering en kruip en prestasie, Dit is die soort van dinge wat gaan jy seerkry. En jy dink, of 'n slegte ingenieur kan sê, O, goed, ons beter betaal vir 'n groter databasis of 'n vinniger databasis of net gooi geld op hierdie, vertikaal skaal, nie noodwendig so nie. As jy gaan in-- en jy kan gaan in nadat die fact-- en voeg indekse, en dit kan 'n paar uur vir die neem databasis op te bou wat nuwe data struktuur wat ek verwys na vroeër, jy kan dit nog steeds los nadat die waarheid te sê, dat dit is waar jy begin om te onderskei goeie ontwerpers van slegte ontwerpers, nie net esteties, maar prestasie-wyse sowel. Enige vrae? Geen? So vir NoSQL, wat die ander soort was van databasis waaraan ek verwys vroeër, jy nie rye en kolomme te hê. In plaas daarvan, sal jy iets hê wat lyk 'n bietjie meer soos hierdie. Ek gaan om gemeenskaplike sintaksis gebruik. Krulhakies gebeur hier gebruik word heelwat. Jy kan iets het soos die eerste naam is Dawid, jy dalk laaste het naam is Malan, aanhalings, jy dalk ID het is-- verskoon my, whoops-- ID is 1, e-pos is malan@harvard.edu, en ek sal nie pla tik aan die res, en dan n paar ander dinge. Met ander woorde, dit is 'n tekstuele voorstelling van wat ons in die algemeen sou noem 'n voorwerp in 'n rekenaarprogram. En 'n voorwerp is oor die algemeen net 'n versameling van die belangrikste waarde pare. So weer, hierdie herhalende tema. Ons het die sleutel waarde pare in HTML, Ons het nou die sleutel waarde pare in die konteks van 'n databasis, en ons sien sleutel waarde pare in die konteks van, dink ek, 'n taal wat vroeër vandag. Hou kom. En inderdaad, dit is regtig wat data kom neer op, data en metadata, of waardes en sleutels, onderskeidelik. So 'n nie-relasionele databasis, iets wat gebaseer is op voorwerpe, waar jy net klont alles saam en sit dit in die geheue, sal oor die algemeen wees uitgebeeld as, of gedink, want dit. En Ek sal nou laat dit as 'n soort van alternatiewe benadering. En een is nie noodwendig beter as die ander. Trouens, baie in die mode deesdae is databasisstelsels soos MongoDB en Redis en 'n paar ander sulke instrumente, vrylik beskikbaar, maar hulle is steeds af mode. Deels omdat hulle bied addisionele funksies oor hierdie tabel benaderings, maar ook omdat dit 'n bietjie makliker om te gebruik, want jy hoef nie so hard te dink oor 'n groot deel van hierdie ontwerp besluite te neem. So plus punte en minuses. So besef daar is opsies as wat ons net tyd spandeer op. So laat ons dit doen. Kom ons oorgang 'n bietjie terug nou op die web ontwikkeling, sodat ons soort afsluiting vandag met iets dit is 'n bietjie hande-op, te vul in sommige leemtes van gister. Laat my gaan na die eerste. So onthou dat gister Ons het 'n paar kanoniese HTML bladsye wat aanvanklik slegs HTML, en dan sekondêr gehad CSS, Cascading Style Sheets. Dit is 'n nuwe etiket dat ons nie gedoen sien gister of bewoners van, sogenaamde script tag. Turns out jy kan eintlik embed 'n taal genoem JavaScript in jou web bladsy en maak jou web bladsye doen iets. So, wat kan ek daarmee? Wel, laat ek gaan voort en net leen hierdie kode vir 'n oomblik. Ek gaan in Cloud9 te gaan, nie nodig om te gaan daar self nog net, en ek gaan dit alert.HTML noem. Ek gaan plak in my lêer hier. En net om te verduidelik wat ek gedoen het, laat my gaan na hierdie adres en gaan na waarsku, en jy sien die Hello World. Maar dit is 'n soort van underwhelming. Ek wil iets doen 'n bietjie anders. So ek gaan dit werklik doen. Ek gaan om te gaan in hier e, en tussen my skripmerkers, sê waarskuwing ( 'hallo, wêreld); sodat kennisgewing dit is 'n bietjie slordig, maar ek het HTML, binnekant van wat 'n taal JavaScript genoem, en dit is wat 'n sogenaamde funksie oproep of prosedure oproep. Dit is 'n werkwoord, letterlik, in hierdie geval, en ek beroep kode funksionaliteit dat iemand anders geskryf. Sodat funksie is 'n waarskuwing, so laat ons gaan na hierdie bladsy nou en klik herlaai, en nou is jy sien 'n bietjie van interaktiwiteit. Dit is soort van die ou skool en lelik. Hierdie soort herinner u van die pop-ups, miskien, van weleer maar dit het iets te doen 'n bietjie meer programmatiese. So meer as dit, kom ons doen iets meer interessant. Laat my hier inkom en ontslae te raak van hierdie. En ek gaan om voort te gaan en Skep 'n vorm soos ons gister gedoen. Eintlik, weet jy wat? Ek gaan in om te gaan google.html, wat ons begin op gister, wat lyk soos hierdie, via wat ons gesoek vir kat Maar let op daar is soort van 'n fout in die huidige weergawe. Dit werk vir katte, maar veronderstel dat Ek het nie saam te werk en ek tik niks, en ek kliek voor te lê. Dit is soort van vreemde gedrag. Het my na die werklike Google, het nie vir my 'n fout boodskap. Ek wil graag die gebruiker vertel wat jy nodig het om vir ons 'n waarde gee. So, hoe kan ons dit doen? Wel laat ek teruggaan na Cloud9 en dat ek kan gaan na die top van my bladsy en voeg 'n script tag soos hierdie, waar Ek gaan 'n paar JavaScript-kode tik. En ek gaan die volgende te doen. As (document.getelementByID-- en herroeping dat ons het gepraat oor wat vroeër, daardie funksie. Wat ID wil ek kry? Ek wil Q kry, en ek gaan sê gelyk niks, soos this-- eintlik laat my dubbele aanhalingstekens gebruik net vir consistency-- gelyk niks, dan waarskuwing ( "Tik asseblief 'n navraag") hier. So ek het wat blyk te wees, iets soos 'n toestand. Ons het hierdie algemene idee in Scratch gesien. Dit is soos een van daardie legkaart stukke wat lyk soos hierdie. En wat sê ek? Wel, hier neer, sien ek is gaan die volgende te doen. Ek gaan hierdie vorm te gee gebied nie net 'n naam van Q, wat is wat kry geslaag om Google, maar ek is gaan dit 'n plaaslike identifiseerder gee, ook bekend as Q. Maar ek kan dit enigiets noem ek wil, is ek net gaan om dit eenvoudig te hou en ook 'n beroep dit Q, net vir eenvoud. En nou is ek gaan doen iets wat 'n bietjie meer. Op die vorm velde hier, ek gaan voeg wat 'n event handler genoem. Op voorlê, ek wil 'n beroep 'n funksie genoem valideer. Dit bestaan ​​nie, dit woord, of hierdie werkwoord te staaf, want wat ek gaan doen hier is nou 'n bietjie kode. Ek gaan om te sê funksie te valideer. Ek gaan hierdie keep en voeg 'n ander krullerige brace hier en 'n ander een hier. Dink na oor wat dit nou doen. Ek het now-- dink aan dit as geskape my eie legkaart stuk wat nie voorheen bestaan, en ek het hierdie legkaart genoem stuk die Bevestig legkaart stuk. Sy doel in die lewe is om uit te voer die vier reëls van die kode binnekant van dit. As document.getElementByID sodat konseptueel, wat gaan in die element om te gaan, die HTML element waarvan die unieke idee is net Q, en dan selfs al die sintaksis lyk 'n bietjie vreemd, wat gelyk is gelyk aan net beteken gelykes. So dit beteken dat indien die element met die unieke identifiseerder van Q, toe gekry, geen waarde, is dit net gelyk kwotasie unquote, niks daar, dan wat doen wat ek wil doen? Ek wil skree die gebruiker. En ons sal groot detail nie hier gaan. Ek gaan terug vals. Dit is 'n fout. Anders, ek gaan om terug te keer waar. So óf dit het gewerk of dit gedoen het nie. Vals of waar nie. En nou as ek nie enige foute gemaak het nie, laat my dit te red en laai dit. En laat my net dubbel seker dat Ek het nie eintlik enige spelfoute, sodat ek myself nie in die verleentheid. Kom ons kyk of dit werk. So nou gaan ek katte tik. Dit werk nog steeds, of 'n halwe werk, ten minste. Nou kan ek herlaai nie, en nou laat ek probeer indiening sonder tik anything-- verdoem het, het dit uitgebreek. Een oomblik. Laat my die konsole te open, [Onhoorbaar] aanteken, herlaai die bladsy. Laat my dit weer te probeer. Ag, damn dit. Ek het vergeet. Ek het 'n tikfout. Ek onthou hoe dit is. .value. Ek bedoel om te sê as die waarde van die element waarvan die ID is Q gelyk dat, dan skree die gebruiker. So nou laat ek weer hou my asem. Hier gaan ons. Daar gaan ons. Tik asseblief 'n navraag. So dit is nie te laat my deur. Ek kan soort speelse wees met hierdie, en in plaas van die monitor vir geen waarde, Ek kan iets sê soos, nie meer op soek na katte, en nou kan ons net meer speels laat die gebruiker soek vir honde indien hy of sy wil, of as Ek gegaan hier en soek vir katte, nou kan ek nie. So, wat is die afhaal hier? So een, het ons in bekendgestel ons wêreld van HTML en CSS, programmering funksies. Ek kan eintlik nou besluite te neem in die kode. Voorheen, al wat ek kon doen, is merk op tekstuele inhoud of grafiese inhoud en vertel dit wat om te kyk soos en waar om te vertoon. Nou kan ek eintlik vra vrae van die webblad en om besluite te neem op grond daarop, en gevra die gebruiker As ek moet skree hom of haar. So kom ons probeer iets op ons eie met hierdie. Gaan voort, laat my oop te stel die volgende skyfie hier, en net wys een ding. Net soos met CSS, kan ons faktor uit ons JavaScript-kode 'n aparte lêer, jy kan dieselfde ding doen met JavaScript soos met CSS. En jy gebruik dit met behulp van 'n bron kenmerk van die script tag. Maar ons sal nie dinge bemoeilik vir nou. In plaas daarvan, as jy kon gaan na hierdie bladsy, but-- laat my rond te beweeg in order-- gaan na, as jy kon, hierdie bladsy hier. Hierdie URL hier. Dit is in skyfies vandag. Jy kan hê om te herlaai, want Ek het 'n paar ding bygevoeg. Maar gaan daar waar 'n paar raaisels wag. En dit sal ons 'n kans te gee, in 'n bietjie meer pret konteks, om ploeteraars met 'n paar JavaScript. En wanneer jy daar kom, Ek sal verduidelik wat wag. Kry groen. Stel blou. Stel groen, stel rooi. Oeps. Jammer. Dit is die omvang van ons dokumentasie vir hierdie uitdaging. En dit gaan soos volg te werk. So, wat jy op hierdie bladsy is 'n hele klomp beeld legkaarte deur 'n makker aan die Stanford Universiteit. So, wat jy hier nou sien is byna soort een van daardie magic eye legkaarte, maar as jy net kyk na dit, niks gaan pop by jou. Inteendeel, daar iets versteek in hierdie beeld. En dit is versteek in die volgende manier. Beelde, soos jy dalk weet, kan wees bestaan ​​uit net drie kleure. Sommige rooi, 'n paar blou, en 'n paar groen. En ons kan al die maak kleure in die reënboog deur die vermenging van die drie kleure op 'n manier. So dit lyk meestal groen en blou, maar as Nick hier sê, hierdie beeld yster legkaart is 'n legkaart. Dit bevat 'n beeld van iets beroemde egter die beeld is verwring. Die bekende voorwerp in die rooi waardes. Maar die rooi waardes is almal gedeel deur 10. So hulle is te klein met 'n faktor van 10. So met ander woorde, Nick het 'n oorspronklike beeld, en hy gedesatureer al van die rooi daaruit, verlaging van die bedrag van die rooi ink, as jy wil, in dit. Die blou en groen waardes is almal net betekenisloos, ewekansige waardes, aka geraas ontwerp om te verduister die werklike beeld. So, wat Nick gedoen het, was hy zwakt die rooi en dan hy het net gegooi ewekansige bedrae van blou en groen op die foto om te soort duister Wat is daar nog eintlik. Jy moet hierdie verdraaiings ongedaan openbaar die beeld. Stel eers al die blou en groen waardes nul om hulle uit die weg te ruim, en kyk na die resultaat. Toe vermenigvuldig elke rooi waarde met 10, skalering terug tot ongeveer sy finale waarde. Wat is die beroemde voorwerp? So julle almal het hierdie reghoek in jou leser nou. En sien dat daar 'n paar voorgereg kode, om so te praat. Dit is JavaScript-kode wat Nick het geskryf vir jou. En sien dat daar ' 'n lyn in die middel wat begin met 'n streep streep, dis wat oor die algemeen bekend as 'n kommentaar. Dit beteken dit is 'n frase aan die programmeerder dat geen funksionele betekenis. Dis net 'n visuele cue om die menslike. Sodat jy kan voortgaan en verwyder net daardie lyn, en wees super versigtig wees om nie te verwyder of enigiets anders te verander. En laat my net loop jy deur middel van wat hierdie kode nie en ek sal dit laat aan jou om uit te vind die geheime beeld. Die eerste lyn hier dat ek net gemerkte gee jou die volgende. Op die linkerkant, jy wat genoem 'n veranderlike wat Nick het arbitrêr, maar redelik genoem im vir beeld. Op die regterkant van daardie gelykaanteken, hy sê vir my 'n nuwe quote, unquote "eenvoudige beeld". Eenvoudige beeld, in hierdie konteks is wat bekend as 'n klas, wel, Dit is soort van soos 'n class-- tegnies 'n prototype-- maar regtig, dit gee my 'n nuwe voorwerp, die inhoud waarvan die lêer, yster-puzzle.png. Met ander woorde, het Nick geskep hierdie idee van 'n eenvoudige beeld sodat ons kan, na pedagogiese doeleindes, speel met die beeld en verander sy rooi, groen en blou waardes. En hoe gaan ons dit doen? Dit ietwat kripties sintaksis hier is soort van soos die herhaling blok dat sommige van julle het in Scratch vroeër vandag, waar jy 10 keer kan herhaal. In hierdie geval, Nick het nie hardcoded n aantal soos 10. In plaas hy gesê inisialiseer 'n veranderlike genoem x om 0, kyk of x minder as is die breedte van die beeld. En so meer gepas wees, beeld is die veranderlike, dot beteken gaan binnekant van dit en kry sy breedte, en dan oop hakie, gesluit hakie is net 'n programmeerder se manier om te sê dit is 'n funksie. Dit is 'n proses. Dit is funksies iemand anders geskryf. Gebruik dit en gee my terug 'n antwoord. En dan x ++ is 'n fancy manier gesê nadat jy hierdie keer gedoen het, inkrementeer x met 1. Met ander woorde, hierdie is 'n programmeerder se manier van beïnvloeding van 'n lus wat gaan oor Itereer al die kolomme in 'n beeld. 'N beeld is net 'n rooster van kolle, rye en kolomme van kolletjies. Dit is 'n manier van iterating oor al daardie kolomme. En aan die binnekant, Intussen, ons iterating oor die hoogtes, hier en hier en hier. So dit is net 'n manier van traipsing, amper soos 'n ou skool tikmasjien, om net te gaan oor die geheelbeeld iteratief. Selfs dit is nie heeltemal volledig duidelik, net op geloof vir nou, dat die drie lyne van die kode saam is gaan toelaat om iteratief kyk by elke pixel, elke dot in die beeld. Wat is 'n pixel? Wel, om duidelik te wees, as ons kyk by die oorspronklike en zoom in, as jy regtig sit jou oë om die rekenaar skerm, dit is net 'n hele klomp van die kolle, 'n paar duisend punte gepak daar saam. En ja, wat jy oor om te doen? Elkeen van dié punte, 'n finale definisie, is die gevolg van wat algemeen genoem RGB, rooi, groen, blou, wat weer, kan gekombineer word om gee jou 'n aantal van kleure. In werklikheid, as jy onthou uit baie, baie jare gelede, projektor skerms soos hierdie dinge gebruik om nie 'n lens, maar drie het. Een van hulle spoeg uit rooi lig, een van hulle spoeg uit groen lig, een van hulle spoeg uit blou lig. En as jy in 'n middel van die skool soos ek was, waar hulle nooit was behoorlik in lyn, jy was altyd kyk geskiedenis films wat was effens verwring, omdat die drie kleure is nie behoorlik te kombineer. Maar dit blyk dat elkeen van hierdie waardes rooi, groen en blou, kan 'n aantal wat verband hou met hulle. Byvoorbeeld, 0 vir rooi beteken nie rooi, 0 vir groen beteken dat geen groen, en 0 vir blou beteken nie blou. So as jy het geen rooi, geen groen, en geen blou, watter kleur het jy? Gehoor: [onhoorbaar] David Malan: Jy sal hoop so, dis wit. Ongelukkig is dit operates-- jammer? Gehoor: [onhoorbaar] David Malan: So jy eintlik swart, in hierdie geval. So as jy nie een van hierdie kleure aangeskakel, jou swart het. Maar as jy, kom ons sê 'n baie van hulle, soos 'n baie rooi, 255 daarvan, 'n baie groen, en 'n baie blou, dit is wit. So dit is die twee uiterstes. So deur hierdie logika, as ek 'n baie rooi en geen groen en geen blou, Watter kleur is dit? Gehoor: [onhoorbaar] David Malan: Right, natuurlik. En dan nie rooi, baie groen, nie blou, en dan As jy goed have--, sal ons net klaar dit, net omdat, maar dit is natuurlik nou, is blou. En nou kan jy hierdie kleure te kombineer. Nou as 'n eenkant, indien enige van u ooit gedoen 'n paar werklike website design, jy kan eintlik sien simbole soos hierdie. FFF-- en eintlik, dis waarskynlik nie eens dat. Dis FFFFFF. Enigiemand ooit F en E se gesien en 'n through-- so dit blyk, ons gepraat gister oor desimale, en vandag, soort van ongeveer desimale. Vandag het ons gepraat oor binêre. Turns out, heksadesimale is 'n baie gemeenskaplike basis stelsel om te gebruik in rekenaar. Binary is twee, desimale, is 10, Hex is 16. En dit blyk dat hoe doen jy reken in heksadesimaal? Zero, een, twee, drie, vier, vyf, ses, sewe, agt, nege, wat gebruik jy ná nege? Wat is die volgende getal? Ons het reeds gebruik nul. Ek moet 16 van hulle nie. Zero, een, twee, drie, vier, vyf, ses, sewe, agt, nege, wat jy nodig het 'n paar arbitrêre konvensie. En wat die mensdom besluit 'n geruime tyd gelede dat ná nege kom die brief A en dan B en dan C. So het die manier waarop jy reken in heksadesimaal nul, een, twee, drie, vier, vyf, ses, sewe, agt, nege, A, B, C, D, E, F, en wat sal tel jy al die pad, dit blyk dat tot 15. So nul tot 15 is nul deur F. Nou hoekom is dit belangrik? Wel, as jy twee F se dit is hoe jy 255 te druk. So lang storie kort, in die wêreld van Photoshop, dat grafiese ontwerp sagteware, in die wêreld van die web-ontwikkeling, waar jy baie kleure, natuurlik, om mee te speel, dikwels programmeerders sal uit te druk wat in heksadesimaal, net omdat dit geneig is om 'n bietjie makliker. Selfs al met die eerste oogopslag dit is baie meer kompleks. So in elk geval, dit is belangrik omdat Nick aan die Stanford het ons ses stukke van funksies gegee dat jy, die ontluikende programmeerders, sal nou die vermoë om te gebruik. Gebou in hierdie web bladsy is ses funksies, ses prosedures wat Nick geskryf. Drie van hulle sal jy kry 'n nommer, 'n rooi, groen, of 'n blou waarde. Drie van hulle sal daardie waarde te stel. En dit onderstreping is net plekhouers, sodat jy nodig het om te weet wat dit is. So met hierdie drie funksies, Die eerste van hierdie dinge gaan wees 'n x-koördinaat, en die tweede van hierdie dinge gaan 'n y-koördinaat. Met ander woorde, wat dot, wat pixel wil jy die groen te kry, kry die blou van, kry die rooi van. En dan hier, dit gaan wees x, dit gaan 'n y-waarde wees, en dit gaan 'n aantal wees. So laat ons doen die eerste lyn van hierdie saam en dan sal ek dit laat jou om te probeer om die res af te lei. So per die instruksies Op hierdie bladsy vind, moet ons om die rooi te verhoog met 'n faktor van 10, en ons moet die groen verwyder en verwyder die blou. Kom ons begin met die laasgenoemde scenario. So as ek wil, en ek gaan om in te keep deur die gebruik van 'n paar spasies, As ek wil die rooi stel, die groen, of die blou waarde, Ek gaan die volgende te doen. Image, im.setBlue, en dan gebaseer op my instruksies hier, Watter drie dinge moet ek tik binnekant van hakies nou? Ek moet die x-waarde, die y waarde, en watter getal moet ek hier as ek wil ontslae te raak die bloute, gebaseer op hierdie storie hier? Net nul. As ek wil nie blou, ek is net gaan om dit te verander na nul. Nou laat ons net saam te vat wat dit doen. Ek het hier op hierdie top tweede en derde lyne, Ek beweer twee sirkelroetes, geneste lusse, as jy sal, wat gaan die effek van vordering van links na regs, bo na onder oor al die x waardes en al die y-waardes. Omdat weer 'n prentjie is net 'n rooster van rye en kolomme. So dit gaan kry ontslae te raak van al die blou. Laat my laat in die volgende lyn na jou toe. Hoe kan ek ontslae raak van al die groen? Gehoor: [onhoorbaar] David Malan: Nice. Gehoor: [onhoorbaar] David Malan: Nice. En ek gaan om te vergroot, en net neem sorg van dat jy nie enige spelfoute gedoen het. En as jy gemaklik is met wat jy gedoen het, gaan voort en klik op die knoppie Begin / Save en kyk wat jy kry. En weer, wat ons gemaak het net drie veranderings. Ons verwyder dat eerste kommentaar en vervang dit Met hierdie twee reëls van die kode. En dit is OK as jy nodig het om te tref die knoppie Run / Save 'n paar keer om iets op te los. En laat ek ook in zoom op my -kode, sodat jy kan skryf. Goeie. So ek sien Andrew het wat lyk na 'n fout wees. Hy is net 'n groot swart reghoek op sy skerm. Is daar iemand anders het n groot swart reghoek? Gehoor: Ja. David Malan: Groot swart reghoek? OK, so laat ons dink oor wat dit beteken. Ons het gesê dat nul, zero, zero, sodat daar geen groen, nie rooi nie, geen blou, gaan jy swart gee. En dit blyk dat die meeste van ons skootrekenaars net nie genoeg trou. Jy kan nie heeltemal vertel daar is eintlik iets daar. En as jy soort miskien leun jou skerm vorentoe en agtertoe, Miskien sien jy 'n ietsie daar? Miskien, soort, soort? Dit is nie heeltemal swart. Gehoor: [onhoorbaar] David Malan: Spoiler! Daar is 'n paar rooi daar, maar onthou van die spesifikasies van die probleem, Nick getinte dit af. Hy gedesatureer dit 'n bietjie, maar nie al die pad na nul. So as ons wil hê dat die bedrag vergroot rooi, laat my stel hierdie truuk. Laat my zoom in op my skerm. En laat ek gaan voort en sê bedrag gelyk im.getRed (x, y). Hierdie lyn van kode gee my iets genaamd 'n veranderlike. Ek het na willekeur, maar waarskynlik, redelik roep my veranderlike wat, blykbaar? Bedrag. Net bedrag. Ek kon het dit genoem enigiets wat ek wil, maar ek is die gebruik van hierdie ander funksie dat ek vroeër beskryf om die hoeveelheid rooi kry by x komma y. Hoekom het ek dit gedoen? Wat wil jy hier doen? Jy moet add-- Gehoor: [onhoorbaar] David Malan: Ja, miskien vermenigvuldig dit met 10. En as jy nie weet nie, ek is gaan om voort te gaan en dit te doen. Ek gaan om voort te gaan en sê, ek wil die bedrag van rooi Ek wil alles wees is by die rooi, tye 10, en die sterre, die sterretjie op jou sleutelbord is the-- nie gebruik x. Gebruik die ster. Dit is hoe jy dinge vermeerder in die meeste programmeertale. So volgens intuïsie Kareem se gestoor in hierdie veranderlike genoem bedrag, is hoeveel rooi Ek wil by plek xy. Hoe nou, maak ek dit pixel dat die getal het? Jy het alreeds hierdie voorheen gedoen. Jy stel die groen en die blou geen waarde aan nul. Gehoor: [onhoorbaar] David Malan: Ja, goed jy nie wil hê om dit te 10. Jy het reeds die wiskunde hier. So kry ons die waarde van rooi, wat 'n lae aantal, vermoedelik. Ons vermenigvuldig met 10. Wat jy wil doen met die veranderlike bedrag nou? Gehoor: [onhoorbaar] David Malan: Nice. So im.set-- wat? Publiek: setRed. David Malan: setRed, op plek xy. Ja. En net bedrag. Met ander woorde, 'n veranderlike is 'n tydelike plekhouer dat jy enigiets wat jy wil in kan sit. Ons toevallig te wees om 'n aantal daarin, op die oomblik. Ons het dit vermenigvuldig met 10 om dit groter te maak. En nou is ek vervang wat veranderlike as daardie derde argument, of insette rooi te stel. En so dat wanneer jy voltooi nie, en neem kennis van die semi-dubbelpunte en die hakies. Gaan voort en klik hardloop / weer te red, en jy moet sien, mettertyd, wat eintlik daar. [? Arwa,?] Wat daar? Die Eiffeltoring in volwaardige rooi, nie heeltemal donker. dit moet nou meer voor die hand liggend te wees, ja? OK. En Andrew, geen meer swart boks? Gehoor: [onhoorbaar] David Malan: Alle reg. So ek sal dit hou op die skerm. As jy wil om te speel met hierdie later, sal ek dit herskep vir jou. Maar hierdie kode hier het presies dit. Hoekom het ons nie te doen een ander. Laat my rol af effens. So in hierdie geval, die projektor nie regtig doen dit reg. Maar op jou skerms, het jy waarskynlik het 'n baie rooi en baie black box. Dit is ook 'n legkaart wat toon iets bekend. Tog het die beeld verwring. Die ware beeld, dié keer, is in die blou en groen waardes. Maar het hulle almal verdeel 20 sodat die waardes is baie klein. Die rooi waardes is net ewekansige getalle, geraas. Ongedaan hierdie verdraaiings om die ware beeld te openbaar. So Nick vertel jou dan wat om te doen. Stel die rooi waardes aan nul, en dan nie bederf wat dit is. vermenigvuldig dan die blou en groen waardes met 20. So dit is amper die Dieselfde program soos voorheen, maar jy omkeer van die proses. En Ek sal my kode sit uit voor op die skerm in die geval jy wil terugverwys na dit of speel verder met daardie een. Laat my zoom in op daardie. Maar los beeld koper legkaart, nommer twee. Gehoor: [onhoorbaar] David Malan: OK, so hierdie een Ek is nie van plan om soveel wenke gee. So ek would-- O, laat ons sien, jy 'n tikfout hier. So onthou, hierdie hier eintlik nodig om daarheen te gaan. So, wat ek wil voorstel, as jy wil fokus op hierdie een, daar is die antwoord. As jy wil op skrif te stel dat dit moet die eerste een werk te kry. En dan kan jy gebruik wat as inspirasie vir die tweede een. Lekker. Goeie. En vir die nuuskierige, dit is 'n eenvoudige voorbeeld van 'n wetenskap of 'n kuns genoem steganografie, die kuns van wegkruip inligting in beelde. Tipies, kan beelde watermerk baie blatant met 'n logo in die onderste hoek, maar dit is duidelik, jy kan baie meer gesofistikeerd wees daaroor en eintlik verberg ander beelde in die beelde een of ander manier met hierdie tegniek. Neem 'n ander 30 sekondes, en dan sal ons ten minste kondig wat jy moet sien. En Ek sal die derde verlaat een as 'n by-huis oefening, As jy meer van 'n wil daag die naweek. En ek dink Andrew mag het dit die eerste keer gekry. Wat is die tweede beeld, Andrew? Publiek: Statue of Liberty. David Malan: Statue of Liberty sal die antwoord hierdie tyd. So weer, net 'n paar eenvoudige voorbeelde, waarvan die doel is om jou 'n gevoel van hoe gee Ons het geïllustreerde Scratch vertaal blokke om meer irriterende en meer ingewikkelde kode, maar al die idees nog presies dieselfde, al is dit met die bekendstelling nou van die idee van 'n veranderlike, omdat in staat om iets tydelik te stoor. Kom ons doen 'n meer hands-on, net nou verbind die kolletjies om iets 'n bietjie meer werklike wêreld. Wanneer jy klaar is, as jy kon gaan na hierdie URL op die skerm. Dit is ook in jou kopie van die skyfies, developers.google.com/maps~~V. Kom ons eintlik iets te doen ware, so te sê, op die web die gebruik van die Google Maps API, of Application Programming Interface, op die volgende manier. Google, soos baie maatskappye, bied 'n baie vrye funksies wat jy kan gebruik om te bou jou eie interessante programme. In werklikheid, as jy al ooit gebruik Uber om 'n taxi of 'n motor te kry, jy waarskynlik weet dat uber het 'n Kaart en dit wys motors op dit. Dit is, so goed as wat ek kan vertel, Google Maps API. Hulle is eintlik die gebruik van Google se kaarte, maar uber is nie 'n kartering maatskappy, of sal dit wees 'n veral interessant probleem om op te los op die top van hul motor diens probleem. En so hulle staan, weer, op die skouers van ander, Google in hierdie geval. Sodat hulle gebruik Google se kaarte, maar hul eie motor dienste en ander sulke eienskappe. So ons gaan om voordeel te trek van hierdie om die volgende te doen. En as ek te vinnig gegaan, bel my oor in 'n oomblik. Gelukkig om 'n paar van die beeld goed saam te vat. Jy moet jouself sien teen 'n bladsy soos hierdie. So Google se mooi, en hulle is een van die beste van die verskaffing van nie net API, maar gratis API's wat jy kan speel met of gebruik kommersieel. Hulle het begin hef jou as jou verbruik hoog, maar ek voortgegaan vooruit en onderteken ons aan vir 'n gratis rekening wat hopelik 10 rekenaars sal ons nie diskwalifiseer vir skielik. So hopelik hierdie demonstrasie sal werk. En agterkom dat hulle APIs vir Android, IOS, web, en web dienste, wat dit ook al is. Kom ons fokus op die web. So op die pienk boks, web, en dat sal jou lei, hopelik, 'n bladsy hier. En hulle het 'n hele klomp van die API's het. En dit kan 'n bietjie wees oorweldigend op die eerste, maar ek sal ons stuur deur middel van wat ons wil hê. Op die boonste linkerkantste is die Google Maps JavaScript API, die JavaScript API. So gaan voort en klik dat 'n mens. En dit sal jy nou lei tot die volgende bladsy, demonstrasies en voorbeeld kode. Laat my uit zoom hier. En laat my sommer ons aan- en af ​​te beweeg na die plek waar dit sê vinnig begin stappe. Jou skerm behoort te lyk myn. En daar is twee stappe, kry 'n sleutel en begin met die ontwikkeling. Ek het reeds stap een vir ons, om 'n sogenaamde sleutel. En dit is 'n algemene idee. 'N API sleutel is oor die algemeen net 'n groot ewekansige getal of reeks wat jy veronderstel is om te plak in jou kode, sodat Google weet wie jy is wanneer jy gebruik hul diens, hul API. Dit beteken nie dat ons aangekla enigiets. En nou, kliek, in plaas van een, klik begin ontwikkel. As jy net kon waai my oor indien nie seker waar ons is. So sal ons net krap die oppervlak, hier, maar wat Ek het gedink dwingende sou wees is om werklik ons ​​almal het, gebruik van Cloud9 in 'n venster en hierdie handleiding in 'n ander venster, Kom ons kry eintlik ons ​​eie aansoek aan die gang wat ingesluit 'n persoonlike Google karteer in ons eie webblad, en voeg dan een of twee funksies. Maar ons sal net krap die oppervlak van wat ons kan doen. Dus net 'n vinnige gesonde verstand tjek. Is almal op hierdie bladsy, Google Maps JavaScript API? Indien sê die slag. Ons gaan nie om te gaan deur die hele ding op enige manier. OK, in 'n ander blad, as jy dit nie doen nie het dit oop, moenie ingaan Cloud9 en kry jouself net 'n nuwe blad, uiteindelik. So weer, c9.io van gister, c9.io, en net 'n nuwe lêer te skep. En gaan voort en roep dit alles wat jy wil. Ek het my map.html. Noem dit enigiets wat eindig in Html. En jy moet rofweg waar ek in hierdie proses met net 'n flikkerende vinnige in 'n leë blad genoem iets soos map.html. Of lêer, nuwe lêer hierdie tyd. En nou, meer as op die Google Maps JavaScript API, ons sal lees oorslaan deur al hierdie teks. Maar let op dat hello world is inderdaad oral, nou sien jy. Hello world het hierdie groot kleurvolle Voorbeeld van 'n hele klomp van HTML. Gaan voort en kopieer en net dit plak HTML, so uit die aard doc aan die bokant al die pad na die einde HTML tag, gaan voor en kopieer al that-- weer, dit is onder die Hello World voorbeeld-- en plak dit in jou blad Cloud9, sodat nou jou skerm moet kyk rofweg soos myne. En jy kan dit te verlos, maar doen dit net nog nie laai nie. Kom ons kyk eers na die kode en kyk of ons kan nie aflei of leer uit wat dit is Google gehad het ons blindelings kopieer en plak. Hulle wil net om te help, letterlik, kry ons begin, maar daar is nie veel kompleksiteit eintlik daar. Enige vrae nog net? Ons is veilig om vooruit? OK. So vinnig, laat ons net doen 'n paar vinnige gesonde verstand tjeks. Line een van wat ek sien, en hopelik, jy sien, wat beteken dit, DOCTYPE HTML? Kareem, onthou? Gehoor: [onhoorbaar] David Malan: Ja. Hier kom HTML 5. Intussen, reël twee op die skerm beteken hier hey leser, hier kom die werklike HTML. Line drie is hey leser, hier kom die kop. Line vier is, natuurlik, hey leser, hier kom die titel. Wat beteken lyn Vyf doen? Eintlik is dit nie regtig iets vir ons te doen. In hierdie geval, is dit net die grootte die bladsy aan 'n verstek. Line ses, Ons het nie gepraat oor, maar dit spesifiseer die karakter enkodering. Daar is verskillende maniere om lêers te enkodeer, veral vir buitelandse tale. UTF-8 is geneig om net die standaard wees. So nou sal ons sien in lyn sewe deur 16, 'n CSS. En selfs al het ons nie gesien al hierdie dinge voor, Ons kan soort aflei. So reël agt middel, hey leser, aansoek doen al die volgende waaraan twee etikette, blykbaar? Die teks HTML en liggaam. So het die komma is die nuwe ding daar. En dit is net 'n manier om spesifiseer verskeie etikette in 'n keer. Toe het ons die krullerige draadjies. So glo, dit vertel die leser, maak die hoogte van die bladsy 100%. So selfs al is daar baie min inhoud, maak die hele bladsy, maak die ding vul die bladsy. Maak die kaart uiteindelik die bladsy in te vul. Marge, wat beteken dit? Dit is gewoonlik soos arbitrêre wit ruimte rondom die kante dat sommige leser ontwerper net besluit moet daar wees, want dit soort maak dinge lyk skoner. Maar ons wil nie dat. Ons wil hê dat die kaart gaan al die pad na die kante. Padding, soortgelyk in gees om marges. Marges beteken buite, padding middel binne, maar dit is dieselfde soort transaksie. Dit is 'n bietjie van 'n buffer tussen jou en die kante. En dan is 'n goeie lyn 13 kans vir 'n vinnige oorsig. Wat beteken skerp teken kaart bedoel, of hashtag kaart beteken? Wat beteken dat verwys na in beginsel? Gehoor: [onhoorbaar] David Malan: Presies. Hierdie eiendom is dit CSS eiendom geld vir net een ding, die HTML tag wat beskik oor 'n ID van aanhaling, unquote "kaart". En nou, laat ons vinnig vorentoe, boek af na die onderkant van die lêer, wat is nie te ver weg, en kennis op die lyn 19 As jy dit plak presies soos ek gedoen het, lyn 19 het net 'n div, wat 'n afdeling van die bladsy, wat gister het ek bekend as 'n reghoekige gebied. Dit het niks daarin. Dit is 'n oop tag, naby tag. Maar dit het nie 'n unieke ID. So, wat blyk te wees hier gebeur is Google is readying ons webblad te het 'n volledige 100% hoogte, en geen padding, geen grense nie, want wat ons gaan binne sit van hierdie div, wie se unieke ID is kaart, is 'n werklike ingeboude kaart. En ons wil dit in te vul die bladsy en nie net 'n paar klein reghoek in die middel. So lyn 14 insgelyks beklemtoon, die karteer self moet 'n hoogte van 100% behaal. So nou sien tussen lyne 20 en 28, dit is JavaScript-kode. En dit is nie, selfs al is dit sintakties 'n bietjie vreemd, daar nie veel aan die gang hier. In lyn 21, dit verklaar iets genaamd 'n veranderlike. In plaas van 'n beroep dit beloop, soos ons vroeër gewaarsku het: ons meer presies te sê var, wat net beteken veranderlike. Ons kon gebruik wat in Nick se kode, maar hy het nie, so ek het nie die moeite om dit te doen nie. Dit is 'n veranderlike genoem karteer, en dan is daar 'n funksie wat blykbaar genoem initMap. So dit is soos ons eie persoonlike legkaart stuk in Scratch. Ons het 'n stuk geskep funksie genoem initMap, en jy kan soort aflei wat gaan hier aan. Op die linkerkant, Ons het 'n veranderlike het, so ons gaan die volgende plaas ding in daardie veranderlike, van links na regs. Die regterhand sê, hey leser, gee my 'n nuwe Google kaart. En google.maps.map is net 'n funky manier spesifiseer dat hierdie funksie behoort aan Google Maps. Na afloop van die hakies, het ons gesien hierdie voor, hey leser, kry my die elemente in die bladsy, die merker in die bladsy se unieke ID is-- Gehoor: [onhoorbaar] David Malan: --map. En wat aangaan, wel, hierdie lyn saam, lyn 23, is in wese sê: hey leser, gaan kry my dat leë div op die bladsy wie se unieke ID is kaart, want ek wil voeg in it-- spuit in dit, As jy will-- 'n hele klomp van die inhoud dit gebeur te kom van die web, daarna. En Google se dit alles vir ons doen. So weer, aan die einde van die dag, Ons het hierdie voorbeeld van abstraksie. Ek het geen idee wat 'n kaart is of hoe om 'n kaart API te implementeer. Ons hoef nie te. Ons het net nodig om die kaart te vertel waar om homself te sit, en laat diegene onderliggende implementering besonderhede na Google. Nou is daar blykbaar twee stukke data dat dit 'n voorbeeld is verskaffing aan API van Google. Blykbaar was die middelpunt van die kaart, en die zoom vlak, om so te praat. En nie almal erken hierdie koördinate, lengte-en breedtegraad? Waarskynlik nie, maar ons kan terug gaan om die handleiding, letterlik sien. Maar ons sal dit sien in net 'n oomblik. Klik op die vlak is nie 'n waarde tussen, ek doen nie weet, een uit elke 13 of so iets. Dit het net te doen met hoe ver jy ingezoomd of uit, en dit is dit. En nou heel aan die einde van die bladsy, kennisgewing lyn 29-- dit is 'n bietjie lelik omdat dit wraps-- hierdie reël van die kode is wat afgelaai om die leser werklike API van Google. Al die kode wat Google se ingenieurs het geskryf dat implementeer hierdie hele aspek van Inlegbare kaarte. Nou laat ons niks verander nie. As jy volgende saam, gaan voort en net red wat lêer, as jy inderdaad wat ek het. Gaan na die URL. Jy kan kliek op die knoppie Run op die top en dit sal vertel jy die URL van jou webbediener weer. En dit sal jou lei tot 'n nuwe blad. As jy klik op Open vir map.html, en die kans is jy gaan 'n waarskuwing kry, 'n fout boodskap, ja? Fout boodskap, fout boodskap? So ongelukkig die fout boodskap is nie dat insiggewend tensy jy eintlik maak die konsole, wat spesiale blad ons gehou opening gister en 'n bietjie vroeër vandag. Maar ek het gestruikel oor hierdie vroeër, so ek reeds uitgepluis het wat die oplossing is. In skyfies vandag, of eerder, in Cloud9, kennisgewing dat ons nie gedoen het nie iets doelbewus. Let daarop dat hierdie script tag in lyn 29, as jy lees dit, dit is soos maps.googleapis.com/ iets, iets, iets, dan sien iemand, een van die ontwikkelaars, geskryf in alle kapitaal briewe, jou API sleutel. Ons moet iets plak daar. En dit was die stap Ek het vir ons voor, en weer hulle kan swartlys indien skielik, 12 of meer van ons begin met behulp van dieselfde sleutel, maar laat ons kyk wat gebeur. So as jy gaan in vandag se skyfies, een skyfie later, is daar ' hierdie baie funky-soek string teks. Gaan voort en net kopieer dit en plak dit waar dit jou API sleutel sê. Dit is die een wat ek ingeskryf vir. En beslis nie probeer uit die hand tik dit, want dit voel belaai met spelfoute, potensieel. Dus net kopieer en plak dit. En dit gaan die lyn te maak langer, maar nou, net om duidelik te wees, Dit moet 'n bietjie meer kyk soos hierdie, waar die sleutel is gelyk nie gekapitaliseer skree op jou. Slaan jou bladsy, gaan terug om die ander blad, herlaai, en hoop om 'n kaart van waar sien? Publiek: Australië. David Malan: Australië. So glo dit is die GPS-koördinate van Australië. En laat my rond te loop vir 'n oomblik en help iemand wat nogal daar nie, maar laat my stel, via Google, vind die GPS-koördinate van jou eie tuisdorp of jou eie tuisland. En waarskynlik Google kan hierdie draai up, of Wikipedia kan jou vertel. Maar kies twee verskillende waardes vir lengte-en breedtegraad, gaan terug in en plak dit, en dan herlaai die bladsy na die redding en sien as jy 'n kan hê Kaart vir jou eie tuisdorp. En as jy klaar is met dat die opvolg challenge-- en Ek sal 'n bietjie minder rigting te gee, doelbewus, sodat jy doelbewus moet sukkel vir 'n paar minute met die dokumentasie, verander die kaart om nie hierdie word strokiesverhaalagtige verstek, maar 'n satelliet kaart. So jy eintlik sien satelliet beelde in plaas van die mooi kleure. En die wenk ek sal jou gee is verander die kaart se tipe. Gaan terug na dat om begin bladsy vir inspirasie. Soos jy dalk opgetel het, As jy op soek is na, daar is so baie meer dinge wat jy kan doen. Sommige van julle het reeds verander die kaart tipe. Maar jy kan do-- byvoorbeeld, laat my gaan na iets wat ons gedoen het vir die kursus Ek teach-- maps.cs50.net. Een van ons voorgraadse studente het dit. Ons sentrum ons kaart oor Harvard Yard en trek al hierdie gebou name, en ons het hom dié byvoeging. So as ek wil om te soek na, byvoorbeeld, Matthews-saal, ons het 'n bietjie drop-down menu. En ek dink hy met behulp van Skoenlus, die biblioteek ons ​​vroeër vir hierdie bespreek. En as jy op Matthews Hall, dit onmiddellik spring die kaart om 'n sekere plek, en dit wys jy 'n prentjie in hierdie klein pop-up. Maar selfs hierdie klein pop-up, het ons nie te implementeer. As ek scroll down op ons kry begin bladsy en kyk vir inligting vensters, sal jy sien dat sommige van die funksies wat jy jouself kan byvoeg, al is dit met 'n bietjie meer ingewikkeld, is iets genaamd 'n inligting venster. En as ek klik 'n voorbeeld hier, en dit is wat is pret, jy kan dinge doen soos hierdie, kliek op 'n merker en dan voila, inligting verskyn. So ons het nie heeltemal ingestel genoeg kenmerke van JavaScript om 'n foto van presies wat jy verf hoe kon al hierdie dinge saam te bedraad, maar ons het soort van die oppervlak krap. Trouens, wat ek gedoen het net toe Ek het op daardie merker, was verwek 'n gebeurtenis, 'n sogenaamde op kliek gebeurtenis. En ons eintlik sien 'n geval vroeër vandag, die sogenaamde voorlê gebeurtenis, toe ons die voorkoming die gebruiker van soek vir katte. So het ons soort opgetel en koos uit al die verskillende funksies, om jou 'n gevoel te gee, hopelik, van wat jy kan eintlik doen met 'n bietjie meer troos in programmering, en heeltemal gratis hulpbronne. Enige vrae? Geen? Dit is jou laaste kans, ten minste vandag, op 'n Vrydag, om iets te kry uit jou bors sodat jy loop uit hier voel vol vertroue en gemaklik. Ja. Publiek: Hoekom doen nie jy nog een ding byvoeg? David Malan: Ag, my goedheid. Ek nodig het om hierdie naweek rus, ek dink. Ander vrae? Gehoor: [onhoorbaar] David Malan: Jy can-- in Internet Explorer, rus in vrede, jy gebruik om in staat wees om VB sit script, virtuele basiese script, maar wat werklik nooit gevang op. So die kort antwoord is net JavaScript. Ander vrae? Goed, goed, laat ek dit doen. Laat my buite gryp ons kollegas. Hulle het 'n paar evaluasie vorms wat hulle wil hê dat almal om 'n paar minute te spandeer vul. Hulle wil hê dat die vorm in te samel en enige kwytskeldings dat jy buite kan hê. Hulle sal ook sertifikate. Ek vermoed daar is nog 'n paar snacks buite. Laat my trek dit uit, en as jy enige vrae in die tussentyd, Ek sal rondom meer individueel loop en ons kan kry wat jy begin het. Ja natuurlik. Gehoor: [onhoorbaar] David Malan: Dis gewoonlik ware deesdae. Sekerlik met web sagteware, jy leun op ander jy óf esteties met behulp van dinge soos Skoenlus, so jy hoef nie moet die lae vlak te implementeer besonderhede van spyskaarte en knoppies en alles wat. Jy leun op iemand soos Google, sodat jy hoef nie te 'n uber bou besigheid en 'n kartering besigheid, en 'n aantal soortgelyke aansoeke sowel. Trouens, logins is gewild, ook. As jy gebruik Spotify of enige aantal webwerwe, jy inteken op 'n paar webwerwe met behulp van Facebook. So, wat is lekker, daar is APIs vir logins deesdae, sodat jy nie hoef om jou eie gebruikers tafel en al jou eie databasis noodwendig in dieselfde mate. Jy kan laat Facebook almal doen van daardie kompleksiteit vir jou. Dit is dus 'n opwindende tyd, eerlik, in programmering, want daar is so baie derde party dienste wat jy kan bou op die top van. En weer, die prys wat jy betaal is óf finansiële of stilstand. As Google sak, so ook uber, waarskynlik, maar miskien is dit 'n redelike kompromis. En weer, dit was een van die temas, Hopelik vir die afgelope paar dae, is hierdie kompromieë. En selde is daar gaan 'n regte antwoord wees. Dit is regtig die beter van twee of meer antwoorde. Slaag hierdie rond. En dit Cloud9 rekeninge sal voortgaan om te werk, in teorie, vir altyd. Jy kan vind as jy wag 'n paar dae of 'n week of meer om terug te meld by hulle dit aan te gryp soos een of vyf minute om terug te oop te maak, maar dit is net omdat hulle dit aan die slaap te bespaar op hulpbronne.