DAVID MALAN: Oké, we zijn terug. Dus voor de spannende Kortom, onze laatste deel on web programmeren, die ik dachten dat we zouden gebruiken als een algemene term een paar resterende onderwerpen vastleggen. Dus aan het einde van de dag, zullen we eigenlijk doen een beetje hands-on web programmeren met een taal JavaScript genoemd. En ik denk dat we een kijkje te nemen naar iets met betrekking tot afbeeldingen en iets te ontdekken in het geheim verborgen in een beeld, en ook een kijkje nemen op de Google Maps API, application programming interface, wat representatief is voor het type software dat is in toenemende mate en vrij beschikbaar vandaag. Maar waarom doen we niet een kijkje nemen bij een ingrediënt aan deze wereld dat we soort geweest neemt voor verleend bestaat enige tijd een database. In de afgelopen dag en een half we hebben aangenomen dat hebben we toegang tot een database, maar welk probleem heeft een database op te lossen? Wat doet het voor ons? Wat is het? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Houdt alle informatie, OK, en wat voor soort informatie zou je in het? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Alle informatie je in, zult u terug te krijgen. Dat is waar. En op een typische web-gebaseerde site of web toepassing, welke soorten informatie, in het bijzonder, zou je in? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: gebruikers. Dus wat is een gebruiker? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: OK, geregistreerd gebruiker van de site. En wat betekent het om informatie van gebruikers op te slaan? Wat stelt een gebruiker? Een gebruiker heeft wat? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Ja, personal data, en dat vind ik leuk. Laten we nauwkeuriger. Zodat een gebruiker typisch een naam, wat anders kan een gebruiker te hebben? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: An addr-- OK, zo voornaam, achternaam. Dat is goed. Eigenlijk, laten we fix dat, omdat het gaat open te stellen een kans voor discussie, nog verder. Voornaam, achternaam, geslacht. Een ID van een soort. Wat nog meer? Ik hoorde iets anders voor, ook. Een e-mail, postadres. Dus laten we daar te pauzeren en nu overwegen niet wat we opslaan in de database, maar-- en niet waarom, want het is misschien duidelijk dat als je eenmaal een gebruiker registreert, je ze wilt onthouden voor bepaalde tijd. Je wilt niet dat het alleen worden opgeslagen in het RAM en zo worden forgotten-- Laten we focussen op de manier waarop. Het blijkt dat in de wereld van databanken, er ten minste twee typen van deze dagen. Zoiets als een SQL-database, Structured Query Language, of, cutely genoemd, NoSQL, die niet is SQL. En dit orgaan een voorbeeld van wat zou kunnen worden een objectgeoriënteerde genoemd, of een object op te slaan, een database dat objecten opgeslagen, en niet, verontschuldiging me, zoals we zullen binnenkort te zien, rijen. Dus we zullen richten voor slechts een moment de eerste, namelijk een SQL gegevensbestand, alleen al omdat het zo vertrouwd al, voor iedereen die gebruikt Excel of Google Spreadsheets of Apple Getallen of een standaard spreadsheet-programma of, equivalent, of meer sophisticatedly, iets als Microsoft Access of Oracle of MySQL of PostgreSQL, die allemaal zijn productnamen voor implementaties van het volgende idee. Een relationele database is gewoon iets dat rijen en kolommen heeft. En door de rijen en kolommen, Ik letterlijk iets betekenen als dit, dus waar we zouden kunnen hebben van de de naam van een veld en het type hier. En eigenlijk, laat me nu beginnen om deze kaart te brengen. Dus eigenlijk, ik weet het niet Daarom heb ik trok een aparte grafiek. Laten we dit eenvoudig te houden. Wij hebben hier de begin van onze tafel, waar de dit is de naam van het veld en dit is het gegevenstype, en type bedoel ik het volgende. Is het een nummer, is het dan een string, een korte string als een woord, is het een paragraaf, is het ook binaire data, zoals een afbeelding? En laten we dit gewoon plagen apart voor slechts een moment. Dus voornaam, nummer, koord, groot deel van text-- PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Ja, zo string. En in een database context, zullen we meestal noemen dit gebied char. Ik zal enkel zeggen klusje voor nu, maar we zijn ga dit te verfijnen in een moment. Karakter veld. Achternaam is waarschijnlijk hetzelfde. Geslacht? Man of vrouw, dus het een char veld zou kunnen zijn. Het kan ofwel citaat zijn, unquote "Male" of offerte, unquote "female" of het kan m of F. Wilt u meer inclusief te zijn, je zou een derde waarde nodig of een soort van andere veld helemaal. En dus kon je trouw valse gebruiken. Het veld kon mannelijke worden genoemd, en dan zou je kunnen zeggen waar of onwaar. Maar dat betekent niet per se vast te leggen alle informatie die je zou willen. Dus het blijkt dat er een ander type van het veld die kunnen hier van pas komen in een typische databank genoemd enum, waar het een karakterveld, maar u, de ontwerper, krijgen opsomming gegeven van de mogelijke waarden, Like Quote, unquote "mannelijk", citaat, unquote "vrouwelijke", enzovoort. Zodat ongeacht waarde is in uw database, is inderdaad character-based, maar het één van die waarden. We zouden waarschijnlijk niet wilt dat een enum voor voornaam of achternaam. Anders zouden we hebben te noemen, zoals de naam vloeit voort uit, letterlijk elke mogelijk voornaam en achternaam. OK, dus ID wat moet een ID te zijn? Ja, dus misschien een nummer. Dus laten we stok met dat voor nu, nummer. En door, aantal is een beetje te breed nu. Voor het eind van de tweede dag, ik voel me alsof we zou iets preciezer. Nummer zou kunnen betekenen, zoals het kon iets als 1.236 zijn. En dat is waarschijnlijk niet wat we bedoelen met een ID. Wat doen we waarschijnlijk bedoelen met een ID? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Oh, OK, dus misschien is het niet eens een nummer. Misschien is het eigenlijk een unieke identificatiecode dat is een string, zoals een gebruikersnaam. Dus absoluut, zou kunnen zijn. Ik denk dat iemand waarschijnlijk betekende numerieke, dat wel. Dus laten we blijven dat. Wat voor soort nummer? Wat is een precise-- een integer. Dus een getal zoals 0, 1, 2, 3, dus we zullen dit een integer noemen. En zelfs dan, ik kon worden muggenziften, het is niet eigenlijk gewoon een algemene integer je wilt. U waarschijnlijk niet wilt negatieve waarden, gewoon omdat het voelt gewoon raar. Wilt u waarschijnlijk positieve gehele getallen. Zo kunt u ook uitdrukken dat in een databank maar voor nu, zullen we zeggen integer. E-mail? Dit is waarschijnlijk gewoon-- een wat? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Het is een e-mail, maar dat is karakters, toch? Het heeft slechts een funky karakter als een "at" symbool of iets anders, maar het is nog steeds een teken veld. En postadres? Karakter veld. Dus dat is een mooi begin, maar laten we nu een beetje nauwkeuriger. Zo blijkt dat in een database, je vaak een keuze hebben dan meer verfijnde versies van deze dingen. In feite, in een typisch SQL-database, SQL, of algemener, relationele database, databases met rijen en kolommen, je vaak naar niet alleen het type opgeven field-- laat me wat ruimte hier-- maar ook de lengte. Hoe lang is een voornaam? Ik denk dat, D-A-V-I-D. OK, ik heb het waarschijnlijk net beledigd als de helft van de mensen in de kamer, rechts, omdat uw namen zijn langer dan vijf brieven, dus vijf lijkt een beetje egoïstisch en naïef, dus wat is een betere waarde? 10, al goed, en ik denk dat wij zijn OK in de kamer. 13? 30? Waarom weet ik niet nemen aanpak eerder toen we hadden het over arrays en geheugen? Waarom heb ik niet zeggen, net als 1000? Niemand naam gaat langer dan 1000 zijn. Terugduwen. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Ja, het is verkwistend, rechts, in het bijzonder als de meeste namen slechts vijf of 10 of 15 tekens, dat is heel verspilling. Dus weet je wat? Dit is een soort van een moeilijke vraag. Nu, we kunnen zeker analyseren Engels en namen een andere taal's en erachter te komen, nou ja, wat is de average-- gemiddelde niet echt helpen ons-- wat is de max waarschijnlijk wat we echt willen. Maar het blijkt dat we nog hebben enkele keuze over het type hier. In een typisch SQL-database, je een char veld hebben iets genaamd en ook een varchar, V-A-R, variabele char veld. En het verschil is dit. Een char veld, de ontwerper, moeten aangeven op voorhand de exacte lengte van het veld. Dus misschien de eerste naam als 20 voelt soort veilig. Zou kunnen hebben om wat googlen doen te zien of dat is eigenlijk veilig genoeg. Er is waarschijnlijk een naam met 21 karakters, maar voor nu, veronderstel 20 is veilig. Een char veld zou impliceren in een database die u zijn met behulp van 20 en altijd 20 tekens. Nu al is het maar de D-A-V-I-D, 15 van die zijn gewoon gaan blanco karakters, maar je bent nog steeds met behulp van alle 20 bytes. Een varchar veld daarentegen betekent de snaar moet maximaal 20 tekens maar als het is slechts vijf, je alleen gaat gebruiken vijf, zes of misschien een bijzondere waarde aan het einde, als dat 0 bespraken we dat betekent het einde van een teken sequentie in het geheugen. Dus als je denkt u zou kunnen kiezen char versus varchar, gezien het feit dat trade-off? Char maakt dat veel karakters, varchar gebruikt niet meer dan dat aantal tekens. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: OK, als je weet dat de lengte van de string mooie dwingende om gewoon gebruik maken char, want als je weet het, zet het neer. En misschien is dat het geval voor een zip code, in de VS, in ieder geval, 02138, Het gaat altijd om vijf tekens totdat u toevoegt het dashboard vier. Maar je zou kunnen sommige waarden te hebben waar je altijd weet de lengte. Of misschien staat symbolen, zoals New York voor New York, en MA voor Massachusetts in de Verenigde Staten. Misschien hebben jullie sommige situaties wanneer dat is volstrekt redelijk, maar tegen die logica, waarom zijn we zelfs overthinking dit? Waarom gaan we niet gewoon gebruik maken van varchar en dan zullen we gewoon Gebruik altijd twee karakters hoe dan ook, of altijd gebruik maken van vijf tekens eigenlijk? Waarom niet gewoon sparen voor varchar alles, door die logica? Er moet een addertje onder het gras. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Kon schrijf iets mis. Dus dat is waar. Maar zelfs dan kunnen ze niet gebruiken meer geheugen dan ik toe te wijzen. Ik heb nog steeds de finale zeggen over de lengte, zodat ze niet per ongeluk te maken die fout, maar een goede gedachte. Het is meer subtiel, maar het is zeer verwante onze discussie, in feite, van arrays en gelinkte lijsten eerder. Het blijkt dat een databank als weet dat alle waarden een vaste lengte, ook al sommige van deze waarden zijn leeg, soort van esthetisch leeg, D-A-V-I-D en vervolgens 15 blanks, Het blijkt dat als elke veld dezelfde lengte, net als een reeks had al haar spullen rug aan rug aan rug aan rug, zodat je kon gewoon plus 1 aan om de volgende te krijgen waarde, hetzelfde idee in een database tabel. Als al je karakter strings dezelfde lengte, je hebt wat random access genoemd. Als alle snaren zijn van lengte 20, doe je niet zomaar do plus 1 je gewoon plus 20, plus 20, plus 20, plus 20, en je kunt heel snel scrollen door of zoeken door al uw gegevens. Een variabele char veld daarentegen hoeft niet altijd 20 tekens. Het zou kunnen hebben 20 en vervolgens 15 en daarna 19 en vervolgens 10, en dus als je wilt zoeken doorheen, kun je niet zomaar blindelings voeg 20 bytes naar de volgende te gaan. Je hebt letterlijk te zoeken door middel omdat de rand van de datastructuur, als je wil, is slecht geklede. Het gaat soort in en uit op basis van de lengte van de snaar. Dus als je weet dat de lengte, zoals Kareem zegt, gebruik dan een char veld, want je krijgt dat efficiency van zijn in staat om door middel van het sneller als u op zoek bent naar data, anders wordt een variabele gebruiken. Helaas, ik heb geen goed antwoord hoelang de naam moet, maar voor iets als een naam, zou ik zeggen een varchar is gebruikelijk want het gaat niet een vaste lengte voor iedereen. 20, ik weet het niet, 20 voelt een beetje krap. Laten we zeggen 50, 50. Het maakt eigenlijk niet kost je dat veel meer te zeggen 50 in plaats van 40, maar op een gegeven moment moet je om een ​​oordeel te bellen. Zeer vaak, eerlijk gezegd, voor [? historische?] redenen, ook al is het overdreven, wil zeggen 255, want enige tijd geleden, in populaire database systemen, zoals MySQL, een gratis open source tool dat veel bedrijven zoals zelfs Facebook gebruikt, dit was het maximale standaard dus mensen gewoon met het ging. Dus niet onredelijk, maar we zullen Gebruik een beetje meer intuïtie en zeggen: zeker 50, dat is waarschijnlijk een beetje overdreven. Gender, ik hou enum, en zo kunnen we dus opsommen mannelijk of vrouwelijk, of misschien efficiënter, m of F of een andere symboliek, maar enum voelt als een goede keuze daar. Voor alle duidelijkheid, gender kon gewoon een varchar zijn, en we konden gewoon allemaal eens zijn aardige mensen, om altijd op dezelfde waarden zijn. Man of vrouw of zo. Maar het probleem is dus dat we konden een fout maakt, zoals [ONVERSTAANBAAR] voorgesteld eerder in een andere context. Als we een fout maken, konden we krijgen onjuiste waarden in onze database. Dus wat is leuk over databases zoals Oracle en MySQL en anderen, is dat je deze laatste laag van de defensie, waar uw DBA, database administrator, wie is het ontwerpen van deze tabel als we zijn verbaal, kon zetten in plaats van een enum dat dat beschermt tegen door vermelding man, vrouw, en dus niemand anders geen programmeur kan per ongeluk Steek een andere waarde. Dus dit zou een goede zaak zijn. Dit is een functie. Dus een ID, uitgaande van een numerieke ID, is Waarschijnlijk moet een positief geheel getal zijn. En we soms wel kans op lengte te bespreken. Je zou het niet meestal geeft u een nummer hier zou u in plaats daarvan opgeven dit is een int, of een grote int, zoals ze meestal genoemd. Maar meestal een integer zou zijn, laten we zeggen, 4 bytes. En als het 4 bytes, dat is hoeveel bits? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: 32 bits. Dus hoeveel gebruikers kunnen we in onze database als ze hebben allemaal een ID en deze ID moet uniek zijn? 32 bits betekent dat we patronen één, twee, drie, vier, five-- dus hoe veel verschillende patronen van nullen en die kun je hebben als er 32? Dat is hetzelfde als vragen wat zijn twee van de 32? Het is een groot getal dat Ik kan niet helemaal goed te krijgen, maar ik weet dat het ongeveer 4 miljard. Dus dit betekent dat uw database tabel kan hebben 4000000000 gebruikers en dat is het. Dus dit is een interessante ontwerp implicatie. Een behoorlijk aantal bedrijven hebben besloten, misschien niet zo veel voor de gebruikers tafel, omdat het hebben van 4 miljard leden is een zeldzaam probleem. Dit is een soort van een Facebook-stijl probleem, niet een typisch bedrijf probleem. Maar misschien als je transactielogboeken of een soort van data die voortdurend wordt geschreven in uw database die absoluut miljarden zou kunnen hebben en miljarden rijen, en u een integer gebruikt voor, wat er gaat zo snel gebeuren krijg je te roeien nummer 4000000000 en dan probeer je het invoegen 4000000000 en 1, bij wijze van spreken? Ik ben het vereenvoudigen van de nummers een beetje. U kunt bezuinigen, ik bedoel je moet het een of andere manier af te handelen. En wat een computer gewoonlijk zou doen, denken zelfs van vanmorgen, als je een 4-bits waarde zoals 1, 1, 1, 1, die alleen maar om 's ochtends te binden samen om de middag, wat betekent dit nummer te vertegenwoordigen in binaire? Oké, we zullen het gemakkelijker maken. Wat betekent dit nummer vertegenwoordigen in binaire? Oké, we zullen het makkelijker te maken, wat betekent dit vertegenwoordigen in binaire? PUBLIEK: Drie. DAVID MALAN: Three, omdat we hebben degenen column-- [GELACH] Oef! We hadden de kolom degenen en de tweeën kolom. Dus stel dat, inderdaad, onze [? infield?] waren niet 32 ​​bits, maar het waren twee bits, kunnen wij tellen vanaf gebruikersnummer 0, 1, 2, 3, en dan zijn we soort terug naar de gebruiker 00 opnieuw. Dus dit is wat meestal gebeurt. Als je ooit de expression-- heb gehoord waarschijnlijk niet, maar als je have-- integer overflow, waar u houden flipping al uw beetjes de grootste mogelijke waarden, en dan ben je uit bits, wat zou typisch gebeuren? Waarom zeg ik 00? Nou, dit is drie. Hoe kan ik 4 vertegenwoordigen? Hoe kan ik vertegenwoordig de voor nummer 4 in binaire? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: een-- ja, zeg niet 100 per se, omdat het de verkeerde connotatie, maar 1-0-0. Zodat getal 1-0-0 inderdaad correct, maar als je slechts twee bits, wat heb je eigenlijk gedaan? Je hebt dan tot 00 gerold. En inderdaad, dat is wat er zou gebeuren. Eigenlijk kun je denkt over dit meer vertrouwelijk. Misschien herinner je je, wat, 16 jaar geleden, de wereld werd verondersteld om te eindigen als de Y2K-probleem is gebeurd. Waarom was dat? Nou de meeste computers, voor redelijke beslissingen, waren het opslaan van nummers, zoals de jaar 1975 of het jaar 1999 door gewoon met behulp van twee cijfers in het geheugen van de computer. Dus natuurlijk, wat er gebeurt als je naar het jaar 2000, je naar dit, of liever gezegd, ja. Dus ga je naar het jaar 2000, maar als je bent alleen met behulp van twee cijfers ziet het er net als het jaar 00 en dus je hebt rolde. En daarom veel systemen moest worden bijgewerkt op het moment. Dus met dat gezegd, bedrijven als Facebook stuiten dit. De enige manier om de handgreep situatie, eerlijk gezegd, is om het te anticiperen. Of de schoonste manier om behandelen deze situatie is om het te anticiperen, zodat je dat niet doet moeten later wijzigingen aanbrengen. Dus in plaats van 8 bytes, weet je wat? Ik ga forward-thinking Hier, hoewel het een beetje optimistisch dat we gaan hebben 4 miljard en 1 gebruikers op onze website. Maar laten we gewoon gebruik maken van 8 bytes, of 64 bits, die in het algemeen zou riep een grote integer, heel technisch. En dat betekent gewoon je kunt hebben nog meer cijfers in uw nummer. Dit is echter een belangrijke ontwerpbeslissing, want als je een nummer te kiezen dat heeft te weinig stukjes van expressiviteit je kon eigenlijk maken een bug in de software. Oké, dus laten we wrap up met e-mail en postadres. Dus e-mail, hoe lang moet een e-mailadres te zijn? 50. Ik heb echt geen idee, maar het is waarschijnlijk iets dergelijks, omdat anders niemand gaat schrijf je als het te lang wordt, dus 50, laten we gaan met het voor nu. Postadres, hoe lang moet dat zijn? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Het is niet gewoon een postcode, dat wel. Postadres, hoorde ik. Dus dit is als 1 Brattle Square, komma, Cambridge Mass., komma, 02138. En in feite, laat me gewoon trek een beetje werkblad hier. Dit voelt als het is een gemiste kans. Als we 1 Brattle Square, komma, Cambridge MA 02138, Ik voel me alsof we beter kunnen doen dan alleen postadres. Waarom gaan we niet ontploffen dit een beetje? Wat krijg ik bij? Wat moeten we in plaats daarvan hebben voor onze rijen hier, misschien? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Ja, dus laten we noem het street_number, en een underscore is gewoon een gemeenschappelijk manier van het hebben van wat lijkt op een ruimte, maar het is niet, eigenlijk. Street, en vervolgens stad-- spijt? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: We kunnen dat doen. Lijn één, lijn twee. Waarom niet houden we het eenvoudig voor nu, maar dat is absoluut een acceptabele beslissing. En dan staat, en dan laten we een beetje US-centric voor nu en gewoon doen postcode, enkel omdat het zal leiden tot een interessante fout of probleem hier. Dus stel dat is nu ons adres. Het is een beetje vervelend dat we hebben al deze meer velden, maar nu kunnen we taggen dingen een beetje beter. Dus nu straat nummer waarschijnlijk moet niet een char zijn, zou het? Wat zou het zijn? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Misschien een aantal als een integer weer? Een grote integer? U heeft waarschijnlijk niet leven op 4 miljard Main Street of iets gek als dat. Dus integer is waarschijnlijk prima, maar heeft iemand ooit heeft geleefd op een adres als 1A Brattle Square, of 1 en 1/2? Deze dingen bestaan, helaas, zelfs als u er niet gewoond, er zijn deze anomalieën achtige appartement 1A, 1B, 1C. Dus weet je wat, we waarschijnlijk moet niet gaan met integer, anders gaan we om wat omzet verliezen. Char veld, misschien? Ik weet niet hoe lang weet. Het is waarschijnlijk niet van plan om dat lang, dus 10 of iets dergelijks. Niemand gaat schrijven een langere nummer, misschien. Maar nogmaals, moeten we waarschijnlijk geven meer aandacht aan dat. Misschien google, doe wat onderzoek, maar we zullen gaan met onze lef voor nu. Straten, char, 50, ik weet het niet. Op een gegeven moment, is niemand gaat te schrijven op een envelop, ook, dus er is waarschijnlijk sommige bovengrenzen daar. Stad, zelfde, zeker, dus char 50. Staat, kan de VS-centric voor nu. Dus zou het een lijst te zijn, zo vriendelijk van een beslissing te nemen, staat. Het zou kunnen zijn als twee personages. Dus eigenlijk, misschien, ik bleef maar zeggen char. Ik bedoel waarschijnlijk varchar, voor sommige efficiency, maar we zullen terug te komen die beslissing in een moment. Kan een char lengte 2 voor staat. Als in de VS hebben ze, zoals MA, Massachusetts, NY, New York, NJ, New Jersey, enzovoort. Dus het zou kunnen worden vastgesteld op dat. DC Washington DC. Maar ik denk dat, Olivier, je voorgesteld een andere benadering. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Ja, dus het is een beetje vervelend in te typen, maar een enum misschien meer zin te maken, want zo, althans in de Verenigde Staten, je zou kunnen opsommen, zo moeizaam, maar je het maar één keer in uw database en nooit meer na te denken over het, alle 50 twee-tekencodes. Dus ik hou enum. Laten we vasthouden aan dat er, omdat Het soort dwingt meer strengheid. En dan code zip? Ik denk dat Andrew had een gedachte op dat PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Ja, vijf of negen. Laten we het gewoon simpel. Gewoon doen vijf voor nu. Maar misschien kon ik gewoon doen een geheel getal, toch? Ik kon, maar weet je wat, ik heb gemaakt deze fout één keer, in zekere zin. Jaren geleden was ik migreren van Microsoft Outlook naar Gmail, en Outlook heeft een manier exporteren al je contacten als een Excel-bestand, een CSV-bestand, komma waarden bestand gescheiden. En ik maakte de fout, ik denken, of erop te dubbelklikken, zodra ik downloadde de export, tot zorg ervoor dat het leek als ik had verwacht. Ik moet hebben geraakt opslaan of laten auto-save trap of iets dergelijks. Want als ik dan geïmporteerd het in Gmail, alles werkte. Maar voor de komende jaren, tot op de dag, en Ik deed dit vijf, 10 jaar geleden, Ik ben nog steeds het vinden van vrienden die hebben adressen die er zo uitzien. Waarom? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Het duurde de 0, nou ja, eerder, nam de hele postcode als een getal, en daarom is het een toonaangevende 0, wat betekent het heeft geen betekenis. En dus 2138 lijkt mijn postcode zijn. En dit is, eerlijk gezegd, een vervelende Excel functie waarbij ik denk dat door gebrek, zelfs als het bedoeld is om gewoon zijn tekst, Microsoft Excel beslist, laat mij behulpzaam te zijn, en oh, zie ik alleen maar nummers. Laten we behandelen deze als getallen. En het kapt de nullen. Ik zweer bij God, om de paar maanden vind ik een adres, en uit een soort van OCD, ga ik terug in en voeg de 0, ook al heb ik nooit stuur mensen letters of iets dergelijks. Maar ik ben nog steeds het vinden van resten van deze. Dus dit is om te zeggen, is dit een goed idee? OK, nee, want iedereen in Massachusetts, in dit gebied, gaat een o leidende hen hebben. Dus laten we gaan met soortgelijke char, waarschijnlijk vijf. En hier, beseffen we zou een enum en we gebruiken kon opsommen 10.000 mogelijk postcodes, maar dat voelt alsof het is waarschijnlijk oversteken van een lijn van, zoals, voordelen. Als u in te voeren dat veel gegevens in uw database te beschermen tegen iets. Dus char gerealiseerd kon je typt in H-E-L-L-O als uw postcode, die uiteraard geen numeriek. Dus er is geen enkele manier, in een typische database alleen numerieke specificeren en slechts vijf tekens lang zijn, dus we gaan om te hebben om dat te doen in de code. We gaan dat doen in PHP of Java of welke taal we via de server te dwingen dat soort beperking. Whoo! Oké, dus vragen gewoon nog niet? Laten we een ander ontwerp beslissing. Het blijkt dat je Ook krijgt om te kiezen, Bij het ontwerpen van een SQL-database of typische relationele database-- waarbij nogmaals, relationele gewoon betekent rijen en kolommen, dat is hoe je je data-- organiseren en beseffen dat wat dit betekent is, Ik heb misleidend dat, ik ben drawing-- deze is wat heet de schema voor een database tabel. Dit is net als de specificaties voor de table-- maar wanneer het tijd komt om daadwerkelijk gegevens op te slaan, en we zullen dit doen door gewoon voorbeeld hier. Ik ga het openstellen van Excel, omdat Excel zal mij rijen en kolommen geven. En dat is precies wat Oracle en MySQL en andere hulpmiddelen zal mij geven. Dus ik ga gewoon te gebruiken dat omwille van de discussie's. Laat me ga je gang en open te stellen een representatief document hier, een beetje in te zoomen. Dus bijvoorbeeld, onze headers zijn nu voornaam, achternaam, geslacht, ID, e-mail, huisnummer, straat, whoops. Straat, stad, staat, net over op het scherm past. Wat dit betekent is dat wanneer een eerste gebruiker registreert voor mijn website, het gaat om iets als David Malan, m, laten we zeggen 1, malan@harvard.edu, straat nummer zal zijn als 1 Brattle Square, Cambridge, MA, 02138, en vervolgens enzovoort. Dus als ik zeg dat een relationele database of SQL-database is rijen en kolommen, Ik meen dit. Actuele gegevens opgeslagen in rijen en kolommen. Dit is slechts een toeval, dat we aan het praten waren, en ik was gewoon het tekenen in rijen en kolommen. Dit is slechts het schema, de overkoepelende definitie. Dus van deze velden hier, of equivalent, daar, waarin de velden die u denkt dat ze Ik ben waarschijnlijk te zoeken op als ik een gebruiker of als ik ben de database administrator? Zoals, wat velden ben ik werkelijk gaande is om te zoeken aan de hand? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: de naam, ja dus Ik hou van het feit dat-- ja, e-mail zou kunnen vrij normaal zijn. Sorry, je zei naam. Dus maybe-- en nogmaals, we zijn soort praten in het abstract. Ik weet niet waarom je zou op zoek gaan naar een naam, maar dat voelt redelijk als je bent op zoek naar een gebruiker. Misschien staten, zeker, ID. En het is een glad helling, want ik kon beramen een scenario waarin misschien mijn baas heeft mij gevraagd, hoeveel mannen hebben wij op onze site? Hoeveel vrouwen hebben we op onze site? En dus op dat punt, wil je misschien om te zoeken op het gebied van geslacht, ook, en niets anders. Dus er is hier een trade-off. Nogmaals, er is geen juiste antwoord, maar er is een functie in de meeste SQL-databases wel indexeren, waarbij u, de ontwerper, de database Administrator, krijgt om te beslissen op voorhand welke velden van de databank moeten optimaliseren voor zoekopdrachten op. Je zou heel naïef zeggen, optimaliseren Dit optimaliseren dat deze optimaliseren, optimaliseren en dat dit, en de database doe wat magische ding onder de kap, en iets te doen op een zodanige wijze dat de volgende keer dat u zoekt op een van deze gebieden, zal inderdaad sneller. Dit is mogelijk. De analyse blijft niet opheffen. Maar er moet een prijs betaald. Als je naïef, of over-enthousiast laten we zeggen, index al deze terreinen, bij wijze van spreken, maken ze allemaal efficiënt doorzoekbaar, welke prijs ben je waarschijnlijk te betalen? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Prestaties. Wat bedoelt u? Prestatiewaarden, althans in de context Ik ben bespreken, is nu beter. Dat is de omschrijving van de indexering. Het zal zoekopdrachten sneller te maken. Dus de tijd afneemt, om zo te zeggen. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Space. Dus nogmaals, deze zijn een gemeenschappelijk handelsbeleid. Ik kan de snelheid van uw zoekopdrachten, maar het is gaat kosten u meer bytes van de ruimte. Waarom? Nou, bij verstek, als we geen van deze rode sterren, geen van deze indexen, als ik zeg, hoe doe je zoeken naar een naam in deze database? Dus laten we trekken ons aandacht dit voorbeeld. Als we David en Scully en Kareem en Arwa en anderen in deze rijen, bijvoorbeeld. Dus laten we het doen precies dat. Scully is hier, en dan we hebben Kareem, en Arwa, en iedereen, als je niet een index gedefinieerd als het ware, het beste wat je kunt doen is lineair zoeken. Als u zoekt naar Arwa, we zijn niet zal in staat zijn om recht te springen om haar te snel. We gaan naar boven te beginnen en ga heel de weg naar de bodem, niet in tegenstelling tot onze oorspronkelijke Mike Smith voorbeeld. Maar als ik zeg, hey, database, de index van de eerste naam van het veld, dan dat het gaat om iets te doen liefhebber en iets te ondersteunen zoals binary search. Het is waarschijnlijk niet binary search per se. Databases hebben de neiging om een ​​ander te gebruiken datastructuur zogenaamde b-bomen, niet te verwarren met binaire bomen, die net het sneller om te zoeken iets logaritmisch karakter. Maar de prijs die u betaalt op te bouwen dat kenmerk, dat de datastructuur in het geheugen, meer bytes. Zo kan het aantal megabytes te nemen, enkele gigabytes, wie weet? Het hangt van de data. Dus op een gegeven moment moet je beslissen, het is waarschijnlijk niet een gemeenschappelijke zaak. Dus wat zijn de werkelijke gezond gevallen, als je echt moest kiezen, wat zou uw favoriete velden zijn? E-mail. En ik hou van e-mail, omdat e-mail, in theorie zou uniek zijn. En zo typisch, als je weet op voorhand dat een van uw velden is of zal uniek zijn, dat de neiging om een ​​goede veld om te zoeken op, want op die manier, wanneer u zoekt naar iets, je gaat terug te krijgen één of nul reacties en dan ben je klaar. Je hoeft niet te houden zoekt nog anderen. En dus in dit geval is, email, zolang je niet twee keer kunt inschrijven met hetzelfde e-mail, is een goede. ID per definitie in de informatica wereld, Als je het over een ID, die beter unieke had zijn. Dat is een soort van de connotatie van ID of id. En de rest van deze zou kunnen zijn, laten we noemen ze leuk om haves, maar niet echt nodig. En zo in een database, u indexen opgeven, maar je kunt nog meer precies te zijn. Je kunt zeggen, hey, database, zorg ervoor dat dat elke ID in deze tabel is uniek. Zelfs niet toestaan ​​dat een programmeur per ongeluk in een duplicaat e-mail of dubbele ID-nummer. Zoveel als opsommingen bescherm ons op dezelfde manier, je kunnen die lager niveau afweer hebben. En dus database-ontwerp, in zekere zin, is een soort van plezier, omdat je het verdedigend werk doen. Je soort van uitgaan dat je werkt met verschrikkelijk, verschrikkelijk programmeurs en je wilt zo veel verdediging in te zetten als je kunt om uw gegevens te beschermen, maar tegelijkertijd je wilt om hen te helpen beter te presteren door te kiezen welke gebieden te optimaliseren voor. Maar je kunt niet per se doen in een vacuüm als we soort zijn hier. Je moet weten wat zijn deze gemeenschappelijke zaken zijn. Als de ontwikkelaars zijn implementatie van een adresboek, je zou heel goed willen kunnen om te zoeken op bijna elk gebied, alleen door de aard van de toepassing. Dus misschien brengen u dat extra ruimte. Rechts, vragen? Ja. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: No. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: OK. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Oh, dus we praten op een manier nu is dat helemaal taal agnost. Dus we hebben het nu over relationele databases algemeen, of SQL-databases meer in het algemeen. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Een beter woord te gebruiken wordt, kan gebruikt worden door elke taal. Dus kan ik JavaScript-code te schrijven, C code, C ++ code, Java-code, Ruby code, allemaal praten met een database en uitvoeren van queries. In feite, dat is niet een slechte segue een voorbeeldquery. En nogmaals, we zijn niet van plan in te gaan Java of C ++ of een van die meer, maar in SQL, de taal waarin ik blijf verwijzend, Structured Query Language, Dit zelf is een programmeertaal, maar het is bedoeld om te worden gebruikt, zonder verrassing, gestructureerde vraag queries. Door dat ik bedoel dit. De manier waarop je gegevens te selecteren uit een MySQL database wordt je letterlijk type in uw programma iets als select ster van gebruikers. Ik ga ervan uit dat deze tabel, voortaan wordt gebruikers genoemd. Ik zou kunnen noemen wat we willen, maar dat soort zinvol. En dus select is een zeer gemeenschappelijke werkwoord, als je zal, in SQL, dat letterlijk doet dat. Wat denk je ster betekent in deze context? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Het spijt me? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Niet nodig, het is meer inclusieve dan dat, eigenlijk. Het is de wild card karakter. Star bijna altijd iets betekent, dat betekent dus, in dit geval, alles selecteren uit de database. Dus toen ik dit zeggen, ik bedoel geef me terug elke kolom uit mijn tafel genaamd gebruikers. Dus geef me een resultaat geven, zoals dat heet. Met andere woorden, geef mij een kopie van de spreadsheet, dat is wat ik krijg bij. Maar als ik zei selecteer ster van gebruikers waar de ID gelijk is aan 1, hoe groot moet mijn resultaat set dan zijn? Of gelijkwaardig, hoeveel rijen moeten Ik terug worden overhandigd uit de database? Waarschijnlijk slechts één, als ik inderdaad ID behandeld als een unieke identifier, en als David heeft die unieke ID, I moet weer één en slechts één rij met daarin alle informatie David's. Als ik zei dat dit, waar ID is gelijk aan 99, moet ik terug ben, in dit verband nul rijen, althans op dit moment. Echter, als ik niet echt zorg over al die informatie, Ik kon alleen maar zeggen, waar David leven? Kies een postcode uit gebruikers waar de ID is 1. Dit zal kiezen om alleen mij Davids zip code en niet het geheel van die rij. Waarom zou ik dit in plaats van te doen de ster vraag, de wild card? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Ja, ik kan alleen maar nodig hebben. Zodat de prestaties is weer hier het antwoord. Waarom vragen om meer informatie dan je nodig hebt, want zelfs als het is al goed samen, je moet nog steeds dat de gegevens te kopiëren, lijkt, uit de database in het programma een of andere manier, en dat is gewoon dom als je hoeft alleen maar vijf van die cijfers, niet het geheel van de rij. Dus hoe kan ik een gebruiker in te voegen? Stel dat een gebruiker heeft alleen maar ingeschreven voor de eerste keer. De syntaxis meestal zou er zo uitzien. Invoegen in gebruikers, en dan zouden we waarden zeggen: en dan zouden we waarden zeggen als, laten we zeggen, Lauren Scully, onze videograaf hier. En het volgende veld is geslacht. Dus we zullen zeggen citaat, unquote "F", dan hebben we een ID en ik ga say-- laten doen alsof ze is niet echt hier, dus we zullen terug te spoelen in het verhaal. Dus 2 zal haar ID zijn. En dan de volgende veld hier is haar e-mail. Dus het gaat worden als Lauren Scully enzovoort, en we zullen gewoon dot dot dot uit de buurt van hier op. Nu zal het een beetje te krijgen vervelend, maar de insert-query uiteindelijk zou uitzien dat. Als ik wil om zich te ontdoen van Scully, uh-oh, laten uitschrijven haar, wist ze haar account, verwijderen van gebruikers, waar ID gelijk is aan 2, zal zich te ontdoen van Scully. Of ik kan zeggen updaten gebruikers instellen, laten we zeggen, wat kunnen we veranderen? Stel dat ze beweegt. Set zip gelijk 021-- nope, dat is haar huidige zip. 90210. De enige andere postcode Ik weet ter wereld. Zodat zou veranderen haar zip code-- eigenlijk, dat zou haar postcode niet veranderen. Wat heb ik gewoon doen? Hoewel de syntax is waarschijnlijk nieuw. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Ja, ik bewoog iedereen naar Beverly Hills, Californië. Dus moet ik eigenlijk zeggen waar de ID gelijk is aan 2. Enzovoorts. Dus SQL is alles over deze soorten instructies. Selecteer, invoegen, verwijderen, bijwerken, deze predikaten eind deze clausules waarin, bij wijze van spreken. En er is nog veel meer kunt u doen, maar het eigenlijk gewoon neer gewoon, als arcanely, uitdrukken wat je wilt de database te doen. En dan is de database zal uitzoeken, wanneer U plaatst Lauren Scully in de databank, waar ze haar in het geheugen te zetten zodat we heel snel kunnen krijgen haar gebaseerd op haar e-mailadres of op basis van haar identificatienummer of dergelijke. Ja, Dan. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Echt goede vraag. Zullen deze scripts te veranderen van Microsoft Access naar Oracle MySQL PostgreSQL? Het korte antwoord is het hangt. In theorie is er een zeer significant gemeenschappelijke subset van SQL dat wordt gedeeld door alle van deze implementaties. Echter, verschillende fabrikanten hebben extra functies om hun databases om bepaalde dingen te doen buiten het bestek van deze functies, die kunnen in feite breken. Dus de manier waarop ontwikkelaars dekken tegen deze, is dat in plaats van het schrijven van ruwe SQL-code alsof ik hier schrijven, ze in plaats daarvan gebruik maken van een bibliotheek, een gemeenschappelijke bibliotheek die zelf is een soort van hoger niveau en abstracts weg welk product u gebruikt. En het geeft je functies en procedures zo dat je nooit te bellen eigenlijk schrijven ruwe SQL. In theorie, dan kunt u veranderen producten van Oracle naar Microsoft of vice versa of iets anders, en je letterlijk niets over uw code te wijzigen. De realiteit is echter, je soms geven functies als gevolg. Je zou een product omdat hebben gekozen het heeft deze functies met toegevoegde waarde, en je bent nu gewoon niet het gebruik ervan bewust. En anekdotische, de meeste bedrijven hebben de neiging nooit uit de buurt van hun database te verplaatsen. Dus terwijl dit is een leuk om hebben functie, de realiteit is, als je reviseren uw database, je bent waarschijnlijk het maken van trossen van andere wijzigingen hoe dan ook, dat je niet per se moet verwachten dat. Dus het is misschien wel over-techniek het probleem, maar het is echt afhankelijk van de context. Maar in theorie, SQL wordt gedeeld over deze verschillende producten. Echt goede vragen. Ja. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Ja, dus U kunt een database denken slechts een server, eind de dag, en de binnenkant van die server is een hele hoop tabellen, rijen en kolommen. En wanneer u een query te sturen, zoals dit uit uw programma, uw website, geschreven in Java, Ruby, Python, wat dan ook, de server ontvangt deze opdracht en interpreteren in letterlijk op dezelfde manier we eerder besproken met geïnterpreteerde talen, en dan het uitvoeren van een actie op nul of meer rijen nul of meer tafels. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Precies, precies. Zodat de pseudocode iets als dat kan dit zijn. In uw PHP-bestand of uw Python-bestand of uw Java-bestand, je zou pseudo-code hebt, of Scratch-achtige blokken als, als de gebruiker bezoekt acme.com/register~~V voor de eerste keer, steek naar gebruikers enzovoort. En we zouden dit vertalen naar concreter code uiteindelijk. Maar echt, we hebben allemaal de bouwstenen hier, ook al zijn we het overslaan van een aantal van de stappen die de uitvoering. Dus laat me klagen over wat we heerlijk deed slechts een moment geleden. Je hebt een mooi gemaakt volledige tabel voor de gebruikers. Toegegeven, we konden implementeren het in een paar verschillende manieren, maar je hebt eigenlijk leidde ons onderaan de path-- en ik zeg je, maar het is waarschijnlijk mijn fault-- van een vrij inefficiënte database-implementatie. Het is niet genormaliseerd. En door genormaliseerde ik bedoel er zal zijn, tijd, een aanzienlijke redundantie, en daarom inefficiëntie, dat is verspilling van ruimte. Op basis van alleen wat je hier ziet, kan u voor ogen waar verspilling van ruimte vandaan, komen in de tijd, als meer en meer gebruikers registreren voor uw website? Welke gegevens kunnen overbodig geworden? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Waarom denk je dat? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Yeah. En laten we aannemen met het oog op van vandaag dat dat waar is. Blijkt dat, en we hebben dit geleerd de harde manier, dat is niet waar. Een of andere manier meerdere steden hebben, een of andere manier, dezelfde postcode, die breekt deze prachtige intuïtie. Maar laten we aannemen dat het waar is, want het is bijna altijd waar. Dus stel dat een postcode is altijd geassocieerd met dezelfde stad en staat, dat is een soort redelijke aanname, maar onjuist, zo blijkt. Maar een redelijke aanname voor doeleinden van vandaag. Dan stel dat ik woon in Cambridge, MA, volgens tabel van deze gebruiker, en veronderstellen dat Lauren Scully woont in Cambridge, MA, en veronderstellen dat Kareem woont in Cambridge, MA, en Arwa woont in Cambridge, MA, ons allen in 02138. Waarom zijn we herinneren Cambridge, MA, 02138 voor alle vier van ons? Wat zou voldoende moeten zijn om te onthouden? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: gewoon de postcode. Alleen dat 02138 bestaat, omdat weet je wat we kunnen doen? We kunnen een beetje luxe hier te komen en hier, te definiëren een andere tafel waar dit naartoe gaat om het te zijn naam, dit gaat om het type te zijn, dit gaat het worden lengte, en voortaan, ik ben ga dit noem mijn steden tafel. Dit werd genoemd, van Natuurlijk, mijn gebruikers tafel. En ja, wat moet ik hier voor mijn steden tafel, denk je? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Yeah. Dus zip en staat en de stad. En dus is de soort hier, zullen we zeggen dit gaat opnieuw om een ​​char 5 zijn, onderworpen aan het debat eerder. Dit zal een opsomming zijn, misschien net voorheen, zal de stad en een varchar 50 zijn. En dus nu wat krijg ik wissen uit deze tabel dat inefficiëntie? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Nice. Staat en de stad weg te gaan, dus ik heb nu elimineerde de mogelijke inefficiëntie voor redundant herinneren, Cambridge, MA, Cambridge, MA, Cambridge, MA, Cambridge, MA, die hopelijk zal nooit veranderen. En zelfs als dat zo is, is het minorly vervelend, nu dat ik moet veranderen in meerdere rijen, terwijl hier, ik kon het gewoon veranderen op een plaats. Nu, wat is de trade-off, misschien? Dit was super handig. Had al mijn gegevens netjes bij elkaar. Maar wat is duidelijk het geval is? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Precies, en ik ben blij dat je het woord te voegen, want dat is eigenlijk het sleutelwoord, in de wereld van relationele databases in SQL, het is een echte woord dat je typen om althans te brengen. En in feite, wat we nu moeten doen om te selecteren volledige informatie David's is iets als select ster uit gebruikers, deelnemen aan steden, on-- en nu Ik ga gewoon naar een tweede lijn zodat deze fits-- users.zip gelijk cities.zip, waarbij users.ID gelijk is aan 1. Dus wat is er aan de hand? Het is lelijk uit, maar je kunt soort lees het van links naar rechts, van boven naar beneden. Selecteer ster van gebruikers is hetzelfde als voorheen, maar het is niet van de gebruikers, per se. Het is van gebruikers te sluiten steden. Wat ben ik mee die twee tafels aan de hand? Nou, blijkbaar, de gebruikers tafels zip veld, en deze periode is gewoon bijzonder syntax om dat idee uit te drukken, en dit is de steden tabellen zip veld. Ik wil die twee gelijk zijn, maar ik wil uiteindelijk selecteren alleen die rijen waarin ID in de gebruikers tabel gelijk aan 1, die is er gebeurd met de mijne. En alleen maar om duidelijk te zijn, een programmeerapparaat, meestal wanneer hardcode iets als het aantal 1, omdat anders alleen de website steunt David of de allereerste gebruiker bent zou in plaats daarvan doen zoiets als ID, waarbij Dit vertegenwoordigt een variabele, iets wat kunnen overstappen tijd, vergelijkbaar in de geest van wat ik al eerder zei met dit soort placeholders. Maar voor nu we gewoon hardcode het als 1. En ja, wat betekent dit? Nou ja, een mooie manier om dit te visualiseren is dat als deze hand is de gebruikers tafel, en dit is de hand van de ritssluitingen tafel, we zijn soort finding-- en de toppen van mijn vingers zijn zip hier, en de toppen van mijn vingers hier zijn zip, je bent soort van in elkaar grijpende is zodat je terug de resulterende glasplaat, door echt verbinden de twee tafels op het gemeenschappelijk veld. En het hoeft niet te worden zip. Het kan bijna alles anders, maar zip is mooi, omdat men, het is kort, twee, het is altijd de dezelfde lengte, dus er is echt efficiëntie wat Olivier hier voorgestelde met factoring uit de zip, en [Onhoorbaar] stelt voor dat we te ontdoen van de stad en staten. Dit is dus het proces bekend als normalisatie. Heeft u vragen over zeggen? Nou wil ik erop wijzen dit is het soort dingen, ook al is het vrij laag niveau, deze discussie, dat je zou denken je soort van krijgen verloren in het onkruid, Dit is een manifestatie van voldoende mogelijkheid voor ontwikkelaars om slecht te zijn. En inderdaad, ook als we, in cursussen die ik heb geleerd, toen we hebben gehad, bijvoorbeeld onervaren undergraduate programmeurs bouwen websites, op het eerste gezicht, de websites kunnen ziet er fantastisch uit. En ze hebben allemaal van de functionaliteit die we gevraagd, de ontwikkelaars heeft een goede baan. Maar ze niet per se weten genoeg over database-ontwerp of ze niet goed na te denken genoeg over de soorten gegevens en de typen gebruikers de website zou hebben, en vinden we dan een half jaar later, nadat ze zijn afgestudeerd of verplaatst op, dat verdomme, onze website is echt, echt traag. En dan heb ik het nog niet eens over het hebben van miljoenen of duizenden gebruikers. Ik bedoel, een paar honderd gebruikers op de campus, allen willen bijvoorbeeld winkelen voor cursussen op Tegelijkertijd zijn ze met behulp van dat studiegids applicatie Ik noemde en het ding wordt steeds echt traag omdat er geen indexen. Er waren geen rode sterren, zo te spreken, of we hadden niet per se ingecalculeerd gemeenschappelijke gegevens krijg wat een besparing van ruimte. En dus wanneer doorlichten een ontwikkelaar of database persoon of dergelijke, het soort vragen na te denken over is ook bij de herziening van iemands code, om te zeggen, niet per se kijken door al hun code, maar zeg, laten we eens kijken via de database tabellen. Wat ben je aan het opslaan? En dan te zeggen, nou ja, wacht minuut, waarom bent u met behulp van een integer? Wat als we 4 miljard en 1 van deze rijen? En dit soort vragen is een kans van de soort terug te duwen en krijgen een gevoel van waar als je niet comfortabel te doen het, dat iemand meer technische deze vragen, of er al dan niet de persoon die weet echt hun spullen. En dit is het soort dingen, ook, dat mensen op internet die zijn autodidact, misschien leren minder vaak, omdat je niet per se tegenkomen zo veel, want je kunt krijgen de database up and running, maar tenzij je hebt gelezen up op tutorials of geweest verteld over databasenormalisatie en indexeren en prestaties, Dit zijn het soort dingen die gaan je geen pijn doen. En je zou denken, of een slechte ingenieur zou kunnen zeggen, oh, nou ja, we beter betalen voor een grotere databank of een snellere databank of gewoon gooien van geld in deze, verticaal schaal, niet noodzakelijk zo. Als je gaat in-- en je kunt gaan in na de fact-- en voeg indexen, en het zou een paar uur voor het nemen databank op te bouwen dat nieuwe gegevens structuur die ik eerder gezinspeeld, u kunt dit nog steeds op te lossen na het feit, dat dit is waar je beginnen te onderscheiden goede ontwerpers van kwaad ontwerpers, niet alleen esthetisch, maar de prestaties-wise ook. Nog vragen? Nee? Dus voor NoSQL, die het andere type was van de database waarop ik zinspeelde eerder, je geen rijen en kolommen. In plaats daarvan zou je iets hebt dat ziet er een beetje meer als dit. Ik ga gemeenschappelijke syntaxis. Accolades overkomen Hier worden gebruikt heel veel. Je zou iets hebben als eerste naam is David, je zou het laatst hebt naam is Malan, citaten, je zou ID hebt is-- neem me niet kwalijk, whoops-- ID is 1, e-mail is malan@harvard.edu, en ik zal niet in te vullen de rest, en dan een aantal andere dingen. Met andere woorden, dit een tekstuele representatie van wat wij over het algemeen zouden noemen een object in een computerprogramma. En een object meestal gewoon een verzameling van de belangrijkste waarde paren. Dus nogmaals, dit terugkerend thema. We zagen de belangrijkste waarde paren in HTML, we zagen nu key waarde paren in de context van databanken, en we zag key waarde paren in het kader van, denk ik, een taal die eerder vandaag. Houdt coming up. En inderdaad, dat is echt welke gegevens op neer komt, data en metadata, of waarden en sleutels, respectievelijk. Dus een niet-relationele databank, wat gebaseerd op objecten, waar je gewoon klonteren alles bij elkaar en zet het in het geheugen, zal in het algemeen voorgesteld als of gedacht, zoals deze. En ik zal nu weg dat je als soort van alternatieve aanpak. En men is niet per se beter dan de andere. In feite, erg in de mode deze dagen zijn database-systemen zoals MongoDB en Redis en een paar andere dergelijke hulpmiddelen, vrij beschikbaar, maar ze zijn steeds meer en vogue. Mede omdat ze bieden extra beschikt over meer dan deze tabel benaderingen, maar ook omdat ze een beetje gemakkelijker te gebruiken, omdat je niet zo hard te denken over veel van deze ontwerpbeslissingen. Dus plussen en minnen. Dus beseffen dat er zijn opties dan wat we gewoon tijd besteed aan. Dus laten we dit doen. Laten we de overgang een beetje nu terug naar web programmeren, zodat we soort concluderen vandaag met iets dat is een beetje hands-on, het vullen in een aantal lacunes van gisteren. Laat me naar dit eerste. Dus herinneren dat gisteren we hadden een aantal canonieke HTML 's die aanvankelijk alleen HTML, en vervolgens in tweede instantie had CSS, cascading style sheets. Dit is een nieuwe tag die Prateep'tdid zie gisteren, of stilstaan ​​bij, zogenaamde script tag. Blijkt dat je daadwerkelijk kunt insluiten een taal genaamd JavaScript in uw web pagina en maak uw web pagina's iets doen. Dus wat moet ik daarmee? Nou, laat me ga je gang en gewoon lenen deze code voor een moment. Ik ga in Cloud9 te gaan, geen behoefte gaan er zelf gewoon nog niet, en ik ga dit alert.HTML noemen. Ik ga om te plakken in mijn dossier hier. En alleen maar om duidelijk te maken wat ik heb gedaan, laat ik ga naar dit adres en ga om te waarschuwen, en je ziet de Hello World. Maar dit is een soort van underwhelming. ik wil iets doen een beetje anders. Dus ik ga dit ook daadwerkelijk te doen. Ik ga om te gaan hier e, en tussen mijn script-tags, zeggen alert ( 'hello, world'); zo bericht het is een beetje slordig, maar ik heb HTML, binnenzijde waarvan een taal JavaScript genoemd, en dit is wat heet een aanroep of procedure call. Dit is een werkwoord, letterlijk, in dit geval, en ik inroepen code functionaliteit dat iemand anders geschreven heeft. Dus dat is een functionaliteit alert, dus laten we gaan naar deze pagina nu en klik op reload, en nu zie een beetje van interactiviteit. Het is een soort van oude school en lelijk. Dit soort herinnert u aan de pop-ups, misschien, van weleer maar het deed iets een weinig meer programmatische. Dus meer dan dat, laten we het doen iets interessanter. Laat me hier te gaan en zich te ontdoen van deze. En ik ga om verder te gaan en het creëren van een vorm zoals wij gisteren deden. Eigenlijk, weet je wat? Ik ga naar om te gaan google.html, die we begon gisteren, die leek op dit, via welke we gezocht naar cat Maar let op er is een soort van een bug in de huidige versie. Het werkt voor katten, maar veronderstellen dat Ik wil niet meewerken en ik typ niets, en ik klik gewoon in te dienen. Dat is een beetje raar gedrag. Nam me mee naar de echte Google, gaf me een foutmelding. Ik wil graag de gebruiker te vertellen je nodig hebt om ons een waarde te geven. Dus hoe kunnen we dit doen? Nou laat me terug gaan in Cloud9 en laat me gaan in de top van mijn pagina en voeg een script-tag als deze, waarbij Ik ga wat JavaScript-code te typen. En ik ga het volgende doen. Als (document.getelementByID-- en recall dat hebben we gesproken over dat eerder, die functie. Wat ID wil ik krijgen? Ik wil q te krijgen, en ik ga zeg gelijk aan niets, zoals dit-- eigenlijk laat me dubbele aanhalingstekens alleen voor consistency-- gelijk aan niets, dan alert ( "Voer een vraag") hier. Dus ik heb wat lijkt te zijn zoiets als een voorwaarde. We hebben dit algemene idee in Scratch gezien. Het is als een van die puzzel stukken die eruit zag als dit. En wat zeg ik? Nou, hier beneden, zie ik ben gaan naar het volgende doen. Ik ga dit vorm te geven veld niet alleen een naam q, waarvan is wat wordt doorgegeven aan Google, maar ik ben ga het een lokale identifier te geven, ook wel q. Maar ik kon het iets noemen I wil, ik ben gewoon gaan om het simpel te houden en noemen het ook wel q, enkel voor eenvoud. En nu ga ik doen iets meer. Op het formulier velden hier, ga ik toevoegen Wat is een event handler genoemd. Op te dienen, ik wil bellen een functie genaamd valideren. Dit bestaat nog niet, dit woord, of dit werkwoord validate, want wat ik ga doen hier nu is het toevoegen van een code. Ik ga zeggen functie valideren. Ik ga dit inspringen en voeg een ander accolade hier en een ander hier. Bedenk wat het nu doet. Ik heb now-- denk aan dit als geschapen mijn eigen puzzelstukje dat niet eerder gedaan bestaan, en ik heb deze puzzel genaamd Stuk de validate puzzelstukje. Het doel in het leven is om uit te voeren de vier regels code erin. Als document.getElementById zo conceptueel, dat gaat in het element te gaan, de HTML-element waarvan unieke idee is gewoon q, en dan ook al de syntaxis ziet er een beetje raar, die gelijk is gelijk betekent gewoon gelijken. Dus dat betekent dat als het element met de unieke identificatiecode van q, wanneer gekregen, heeft geen waarde, het is gewoon gelijk aan citaat unquote, niets daar, wat doe ik wil doen? Ik wil schreeuwen tegen de gebruiker. En we zullen zeer gedetailleerd niet hier. Ik ga return false. Dat is een fout. Else, ga ik return true. Dus of het werkte of dat gebeurde niet. Onjuiste of waar. En nu als ik geen fouten heeft gemaakt, Laat me dit op te slaan en de pagina verversen. En laat me gewoon dubbel te controleren dat Ik niet, in feite, om het even welke typefouten, dus ik mezelf niet in verlegenheid te brengen. Laten we eens kijken of dit werkt. Dus nu ga ik voor katten typen. Het werkt nog steeds, of de helft van de werken, tenminste. Nu wil ik het opnieuw, en nu laat ik proberen het indienen zonder te typen anything-- verdomme, het brak. Een moment. Laat me de console te openen, [Onhoorbaar] in te loggen, de pagina geladen is. Laat mij dit opnieuw te proberen. Oh, verdomme. Ik ben het vergeten. Ik maakte een typo. Ik herinner me wat het is. .waarde. Ik bedoelde te zeggen als de waarde van het element waarvan de ID q gelijk aan dat, dan schreeuwen tegen de gebruiker. Dus laat me nu weer houd mijn adem. Daar gaan we. Daar gaan we. Voer een query. Dus het is niet laat me door. Ik kan soort speels met deze, maar het controleren op geen waarde, Ik kan iets zeggen als: Nooit meer zoeken naar katten, en nu kunnen we alleen maar meer speels laat de gebruiker zoeken naar honden als hij of zij wil, of als ik ga naar binnen en zoek voor katten, nu kan ik niet. Dus wat is het hier mee te nemen? Dus een, hebben we in geïntroduceerd onze wereld van HTML en CSS, programmering functionaliteit. Ik kan eigenlijk nu beslissingen te nemen in de code. Vroeger, alles wat ik kan doen is markeren tekstuele inhoud of grafische inhoud en vertellen wat te zoeken achtige en waar te tonen. Nu kan ik eigenlijk vragen vragen van de webpagina en beslissingen nemen op basis op, en vraagt ​​de gebruiker als ik moet schreeuwen tegen hem of haar. Dus laten we proberen iets op onze eigen met dit. Ga je gang, laat me het openstellen van de volgende dia hier, en net wijzen op één ding. Net als bij CSS, kunnen we factor out onze JavaScript-code om een ​​apart bestand, U kunt hetzelfde doen JavaScript en CSS. En u dat het gebruik van een bron attribuut van het script tag. Maar we zullen geen dingen compliceren voor nu. In plaats daarvan, als je zou kunnen ga naar deze pagina niet, maar-- laat me dit bewegen in order-- ga naar, als je kon, deze pagina hier. Deze URL hier. Het is in dia's van vandaag. Je zou kunnen hebben om te herladen omdat Ik heb een paar dingen toegevoegd. Maar ga er waar sommige puzzels af te wachten. En dit zal ons een kans te geven, in een iets pret context, te knoeien met wat JavaScript. En als je er bent, Ik zal uitleggen wat er te wachten staat. Krijg groen. Stel blauw. Sets groen, stelt rood. Oeps. Sorry. Dit is zover wij documentatie voor deze uitdaging. En dit gaat als volgt te werk. Dus wat je hebt op deze pagina is een hele hoop van het beeld puzzels door een buddy aan de Stanford University. Dus wat je hier ziet is bijna soort van één van die magische oog puzzels, maar als je gewoon staren, er gaat niets uit te knallen op je af. Liever iets verborgen in dit beeld. En het is verborgen in de volgende manier. Beelden, zoals u wellicht weet, kan zijn bestaande uit slechts drie kleuren. Sommige rode, wat blauw en wat groen. En we kunnen alle maken kleuren van de regenboog door het mengen van die drie kleuren of andere manier. Dus dit ziet er meestal groen en blauw, maar zoals Nick hier zegt: dit beeld Het ijzer puzzel is een puzzel. Het bevat een afbeelding van iets bekend, echter, het beeld is vervormd. De beroemde object is in de rode waarden. De roodwaarden alle gedeeld door 10. Zij zijn te klein voor een factor 10. Dus met andere woorden, Nick nam een ​​origineel beeld, en hij desaturated alle van de rode uit te trekken, verlagen van de hoeveelheid rode inkt, zo u wilt, in het. De blauwe en groene waarden zijn allemaal zinloos, willekeurige waarden, aka lawaai ontworpen te verdoezelen het werkelijke beeld. Dus wat Nick deed was hij afgezwakt de rode en vervolgens Hij gooide willekeurige hoeveelheden blauw en groen naar het beeld van de soort obscure Wat is er nog steeds eigenlijk. U moet deze verstoringen ongedaan te maken te onthullen het beeld. Stel eerst alle blauwe en groene waarden op nul om ze uit de weg te krijgen, en kijk naar het resultaat. Dan vermenigvuldig elke rode waarde van 10, terugschroeven tot ongeveer de eindwaarde. Wat is de beroemde object? Dus ieder van jullie hebben deze rechthoek in uw browser op dit moment. En merken dat er een aantal starter code, om zo te zeggen. Dit is JavaScript-code die Nick heeft geschreven voor jou. En merk op dat er een lijn in het midden die begint met een slash slash, dat is wat is het algemeen genoemd geplaatst. Het betekent dat het een zin voor de programmeur dat geen functionele betekenis. Het is gewoon een visuele hint naar de mens. Dus je kunt gaan en Schrap enkel die lijn, en zijn super voorzichtig niet te verwijderen of iets anders veranderen. En laat me gewoon lopen u door wat deze code doet en ik laat het om u te achterhalen van de geheime foto. Deze eerste regel hier dat ik heb zojuist gemarkeerde geeft u het volgende. Aan de linkerzijde, je hebt wat heet een variabele die Nick heeft willekeurig, maar redelijk riep im voor het. Aan de rechterkant van die gelijke teken, hij zegt geef me een nieuwe citaat, unquote "eenvoudig beeld". Eenvoudig beeld, in deze context is wat heet een klasse, nou ja, Het is net zoiets als een class-- technisch gezien een prototype-- maar echt, Dit geeft me een nieuw object, de inhoud waarvan het bestand, ijzer-puzzle.png. Met andere woorden, heeft Nick gecreëerd Deze notie van een eenvoudige afbeelding zodat we kunnen, voor pedagogische doeleinden, spelen met het beeld en verander de rode, groen en blauw waarden. En hoe gaan we dat doen? Deze enigszins cryptisch syntax hier is net zoiets als de herhaling blok dat sommigen van jullie zag in Scratch eerder vandaag de dag, waar u 10 keer kunt herhalen. In dit geval is niet Nick hardcoded een aantal als 10. In plaats daarvan zegt hij, initialiseren een variabele genaamd x naar 0, controleren of x kleiner dan is de breedte van het beeld. En zo meer gepast zijn, het is de variabele, dot betekent naar binnen gaan ervan en krijg de breedte, en open vervolgens paren, gesloten paren is gewoon een programmeur manier om dit te zeggen is een functie. Dit is een procedure. Dit is functionaliteit iemand anders schreef. Gebruik het en geef me terug een antwoord. En dan x ++ is een mooie manier om zeggen, nadat je dit eenmaal hebt gedaan, verhogen x per 1. Met andere woorden, dit is een programmeur manier induceren een lus die ga dan herhalen alle kolommen in een afbeelding. Een afbeelding is slechts een raster van stippen, rijen en kolommen stippen. Dit is een manier van iteratie over al deze kolommen. En op de binnenkant, Ondertussen, we itereren over de hoogten, hier en hier en hier. Dus dit is gewoon een manier van Traipsing, bijna als een oude school schrijfmachine, om gewoon te gaan over de gehele beeld iteratief. Zelfs dat is niet helemaal volledig duidelijk, neem dan gewoon op het geloof voor nu, dat deze drie lijnen van de code samen zal u toelaten om iteratief kijken bij elke pixel, elk punt in het beeld. Wat is een pixel? Nou, om duidelijk te zijn, als we kijken op het origineel en opnieuw in, als je echt zet je ogen op het computerscherm, dat is gewoon een hele hoop punten, een aantal duizend punten gepakt daar samen. En ja, wat zijn je gaat doen? Elk van deze punten, een laatste definitie is het resultaat van wat algemeen genoemd RGB, rood, groen, blauw, die opnieuw kunnen worden gecombineerd om geven u een aantal kleuren. In feite, als je nog van vele, vele jaren geleden, projectieschermen als deze dingen vroeger niet één lens maar drie hebben. Eén van hen te spugen rood licht, een van ze spugen groen licht, een van hen uitspugen blauw licht. En als je in een middelbare school zoals ik was, waar ze nooit waren goed uitgelijnd, je was altijd kijken naar de geschiedenis van films dat waren enigszins vervormd, omdat de drie kleuren niet naar behoren te combineren. Maar het blijkt dat elk van deze waarden rood, groen en blauw, kan een nummer in verband met hen. Bijvoorbeeld, 0 voor rood betekent dat er geen rood, 0 voor groen betekent geen groene, en 0 voor blue betekent geen blauw. Dus als je geen rood, geen groene, en geen blauwe, welke kleur heb je? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: U zou hoop het, het is wit. Helaas is dit operates-- spijt? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Dus je eigenlijk hebben zwart, in dit geval. Dus als je geen van deze kleuren ingeschakeld, kunt zwarte hebben. Echter, als je hebt, laten we zeggen een stuk van hen, net als een heleboel rode, 255 daarvan, veel groen, en een heleboel van blauw, dat is wit. Dus dit zijn de twee uitersten. Dus door deze logica, als ik een heleboel van rode en geen groene en geen blauwe, welke kleur is dat? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Rechts, uiteraard. En dan is er geen rood, veel groen, geen blauwe, en dan als je goed have--, zullen we gewoon afmaken het, omdat voor dit natuurlijk nu, is blauw. En nu kunt u deze kleuren te combineren. Nu als een terzijde, als iemand van jullie ooit gedaan aantal actuele website design, je zou eigenlijk Zie symbolen zoals dit. FFF-- en eigenlijk, het is waarschijnlijk niet eens dat. Het is FFFFFF. Iemand ooit F en E's gezien en A through-- zo blijkt, We spraken gisteren over decimaal, en vandaag de dag, een soort van ongeveer decimaal. Vandaag spraken we over binary. Blijkt, hexadecimaal is een zeer gemeenschappelijke basis-systeem te gebruiken in de informatica. Binary is twee, decimaal is 10, hex is 16. En het blijkt, hoe je rekenen in hexadecimaal? Nul, één, twee, drie, vier, vijf, zes, zeven, acht, negen, wat doe je gebruiken na negen? Wat is het volgende nummer? We hebben al gebruikt nul. Ik heb 16 van deze. Nul, één, twee, drie, vier, vijf, zes, zeven, acht, negen, u een aantal willekeurige conventie. En wat de mens besloot enige tijd geleden dat na negen komt de letter A en dan B en C. Dus de manier waarop je tellen in hexadecimaal nul, één, twee, drie, vier, vijf, zes, zeven, acht, negen, A, B, C, D, E, F, en telt u allen de weg, zo blijkt, tot 15. Dus nul tot 15 is nul tot F. Waarom is dat belangrijk? Nou, als je twee F's, dat is hoe je 255 uit te drukken. Zo lang verhaal kort te maken, in de wereld van Photoshop, dat grafisch ontwerp software, in de wereld van web development, waar je veel kleuren, natuurlijk, om mee te spelen, vaak programmeurs uitdrukken die in hexadecimale, gewoon omdat het de neiging een beetje eenvoudiger. Hoewel op het eerste gezicht het is veel complexer. Dus in elk geval, dit is belangrijk omdat Nick in Stanford ons zes stukken functionaliteit gegeven dat jij, de ontluikende programmeurs, zal nu de mogelijkheid te gebruiken. Ingebouwd in dit web pagina is zes functies, zes procedures die Nick schreef. Drie van hen krijgt u een nummer, een rode, een groene of een blauwe waarde. Drie van hen die waarde ingesteld. En deze underscores zijn slechts placeholders, dus je moet weten wat die zijn. Dus met deze drie functies, de eerste van deze dingen gaat worden een x-coördinaat, en de tweede van deze dingen gaat worden van een y-coördinaat. Met andere woorden, welke punt, die pixel wil je het groen van te krijgen, krijgt het blauw van, krijgt het rood van. En dan is hier, dit gaat worden x, dit gaat om een ​​y-waarde te zijn, en dit gaat om een ​​nummer te zijn. Dus laten we de eerste regel van dit samen en dan zal ik laat het aan u proberen om de rest af te leiden. Dus volgens de instructies Op deze pagina hebben we de rode verhogen met een factor 10, en we moeten de green te verwijderen en verwijder de blauwe. Laten we beginnen met de laatste scenario. Dus als ik wil, en ik ga laten inspringen door het gebruik van bepaalde ruimten, als ik wil de rode stellen, de groene of de blauwe waarde, Ik ga het volgende doen. Afbeelding, im.setBlue, en vervolgens op basis van mijn instructies, welke drie dingen moet ik typ binnen haakjes nu? Ik heb de x-waarde, de y-waarde, en welk nummer moet ik hier als ik wil om zich te ontdoen krijgen van de blauwe, op basis van dit verhaal hier? Gewoon nul. Als ik wil geen blauwe, ik ben gewoon gaan om het te veranderen naar nul. Laten we nu eens gewoon samen te vatten wat dit doet. Ik heb hier op deze top tweede en derde regel, Ik had twee lussen, geneste lussen, als je zullen, die zullen het effect hebben van vordert van links naar rechts, boven naar beneden over alle van de x waarden en alle y-waarden. Want nogmaals, een foto slechts een raster van rijen en kolommen. Dus dit gaat krijgen ontdoen van al het blauw. Laat me laten in de volgende regel aan u voor. Hoe kan ik te ontdoen van al het groen? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Nice. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Nice. En ik ga om uit te zoomen, en neem zorg voor dat u geen typefouten hebt gedaan. En als je tevreden bent met wat je hebt gedaan, ga je gang en klik op de knop Run / Opslaan en zie wat je krijgt. En nogmaals, we hebben gemaakt slechts drie wijzigingen. We schrappen die eerste commentaar en vervangen deze twee regels code. En het is OK als je nodig hebt om te slaan op de knop Run / Save een paar keer om iets te repareren. En laat me ook inzoomen op mijn code, zodat u kunt transcriberen. Goed. Dus ik zie Andrew heeft wat lijkt een vergissing zijn. Hij heeft net een grote zwarte rechthoek op zijn scherm. Heeft iemand anders hebben een grote zwarte rechthoek? Publiek: Ja. DAVID MALAN: Grote zwarte rechthoek? OK, dus laten we denken over wat dit betekent. We hebben gezegd dat nul, nul, nul, dus geen groen, geen rood, geen blauwe, zal je zwarte geven. En het blijkt dat de meeste van onze laptops gewoon niet genoeg trouw. Je kan niet helemaal vertellen dat er is eigenlijk iets daar. En als je soort misschien leunen je scherm vooruit en achteruit, Misschien zie je een iets daar? Misschien, soort, een soort? Het is niet perfect zwart. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Spoiler! Er is een aantal rode daar, maar herinner me uit de specificaties van het probleem, Nick afgezwakt naar beneden. Hij desaturated het enigszins, maar niet helemaal tot nul. Dus als we willen om de hoeveelheid te vergroten rood, laat me voorstellen deze truc. Laat me opnieuw in op mijn scherm. En laat me gaan en zeggen: bedrag gelijk aan im.getRed (x, y). Deze lijn van de code geeft me zoiets als een variabele. Ik heb willekeurig, maar, misschien wel, redelijk belde mijn variabele wat, blijkbaar? Bedrag. Gewoon bedrag. Ik kon heb het heet alles wat ik wil, maar ik ben het gebruik van deze andere functie dat ik eerder beschreef om de hoeveelheid rood te krijgen op x komma y. Waarom heb ik dat gedaan? Wat wil je dat hier doen? Je moet add-- PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Ja, misschien vermenigvuldigen met 10. En als je dit niet weet, ben ik gaan om verder te gaan en dit te doen. Ik ga om te gaan en laten we zeggen, ik wil de hoeveelheid rood Ik wil wat dan ook is de rode, 10 keer, en de ster, het sterretje op je toetsenbord is the-- geen gebruik maken van x. Gebruik de ster. Dat is hoe je dingen vermenigvuldigen in de meeste programmeertalen. Dus volgens intuïtie Kareem's, in deze variabele genoemd bedrag, is hoeveel rood wil ik op locatie xy. Hoe nu, maak ik dat pixel dat nummer hebben? Je hebt al eerder gedaan. U stelt de groene en de blauw geen waarde nul. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Ja, goed u niet wilt dat het 10. Je deed al de wiskunde hier. Dus we krijgen van de waarde van rood, die een klein aantal, vermoedelijk. We zijn te vermenigvuldigen met 10. Wat u wilt doen met het variabele bedrag nu? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Nice. Dus im.set-- wat? PUBLIEK: setRed. DAVID MALAN: setRed, op locatie xy. Ja. En net bedrag. Met andere woorden, een variabele is een tijdelijke placeholder dat je alles wat je wilt in kunt zetten. We toevallig te zetten een aantal daarin op dit moment. We hebben het vermenigvuldigd met 10 om het groter te maken. En nu ben ik het vervangen van die variabele als die derde argument, of ingang rode instellen. En zo dat als je eenmaal afwerking die, en kennis te nemen van de puntkomma en de haakjes. Ga je gang en klik op run / opnieuw op te slaan, en u zou moeten zien, magisch, wat was eigenlijk er. [? Arwa,?] Wat is er? De Eiffeltoren in volwaardige rood, niet helemaal donker. het moet nu meer voor de hand, ja? OK. En Andrew, niet meer black box? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Oké. Dus ik zal dit blijven op het scherm. Als je wilt spelen met deze later, zal ik dit opnieuw voor u. Maar deze code hier deed precies dat. Waarom gaan we niet doen een ander. Laat me scroll naar beneden een beetje. Dus in dit geval, de projector niet echt het justitie doen. Maar op uw schermen, heeft u waarschijnlijk hebben een zeer rood en zeer zwarte doos. Ook dit is een puzzel die laat iets bekend. Toch is het beeld vervormd. De ware beeld, ditmaal is in het blauwe en groene waarden. Echter, ze hebben allemaal verdeeld 20 zodat de waarden zijn erg klein. De rode waarden zijn slechts willekeurige getallen, lawaai. Ongedaan maken deze vervormingen om het ware beeld te onthullen. Dus Nick vertelt u dan wat te doen. Stel de rode waarden nul, en dan niet bederven wat het is. vermenigvuldig dan de blauwe en groene waarden met 20. Dus het is bijna hetzelfde programma als voorheen, maar je bent het omkeren van het proces. En ik zal mijn code uit te zetten voordat het scherm bij je terug wilt verwijzen naar het of speel verder met die ene. Laat me opnieuw in op dat. Maar het oplossen van het koper puzzel, nummer twee. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: OK, dus dit ben ik niet van plan om zo veel hints geven. Dus ik would-- oh, laten we zie je een typo hier hebben. Dus vergeet niet, dit hier eigenlijk moet er naartoe te gaan. Dus wat ik zou voorstellen, als je wilt richten op dit ene, is er het antwoord. Als u wilt transcriberen dat, dat moet de eerste werkend te krijgen. En dan kan je gebruiken als inspiratie voor de tweede. Nice. Goed. En voor de nieuwsgierigen, Dit is een eenvoudig voorbeeld van een wetenschap of een kunst genaamd steganografie, de kunst van het verbergen van informatie in beelden. Gewoonlijk kunnen beelden worden een watermerk zeer schaamteloos met een logo in de bodem hoek, maar het is duidelijk, je kan veel meer verfijnd erover en eigenlijk verbergen andere beelden in de Images ergens met deze techniek. Neem een ​​andere 30 seconden, en dan zullen we in ieder geval aan te kondigen wat je zou moeten zien. En ik zal de derde verlaten een als een at-home oefening, Als je meer van een graag uitdagen dit weekend. En ik denk dat Andrew zou hebben het eerste gekregen. Wat is het tweede beeld, Andrew? PUBLIEK: Statue of Liberty. DAVID MALAN: Statue of Liberty zal het antwoord deze keer. Dus nogmaals, slechts enkele eenvoudige voorbeelden, waarvan het doel is om u een gevoel van hoe te geven we hebben picturale Scratch vertaald blokken om meer vervelend en meer ingewikkelde code, maar alle ideeën blijven dezelfde, zij het met de introductie Nu het begrip variabele, waarbij staat iets tijdelijk op te slaan. Laten we nog een hands-on, alleen maar om nu verbind de stippen tot iets meer real-world. Wanneer u klaar bent, als je zou kunnen naar deze URL op het scherm. Dat is ook in uw exemplaar van de dia's, developers.google.com/maps~~V. Laten we daadwerkelijk iets te doen echte als het ware, op internet met behulp van de Google Maps API, of application programming interface, als volgt. Google, net als veel bedrijven, biedt een heleboel gratis functionaliteit die u kunt gebruiken om te bouwen uw eigen interessante toepassingen. In feite, als je ooit hebt gebruikt Uber om een ​​taxi of een auto te krijgen, weet je waarschijnlijk dat Uber heeft een kaart en het toont auto's op. Dat wil zeggen, zo goed als ik kan zeg, Google Maps API. Ze zijn eigenlijk met behulp van Google maps, maar Uber is geen mapping bedrijf, noch zou dat een bijzonder interessant probleem oplossen bovenop hun auto service probleem. En dus zijn ze nu staat, weer op de schouders van anderen, Google in dit geval. Zodat ze gebruik maken van Google maps, maar hun eigen auto en andere dergelijke functies. Dus we gaan om te profiteren dit het volgende doen. En als ik heb te snel gegaan, bel me dan in een moment. Gelukkig om een ​​deel van de afbeelding dingen samen te vatten. Je moet jezelf zien op een pagina als dit. Dus Google's mooi, en ze zijn een van de beste het verschaffen van niet alleen API, maar gratis API's die u kan spelen met of commercieel. Ze doen beginnen met het opladen u als uw verbruik is hoog, maar ik ging verder op voorhand en ondertekend ons voor een gratis account dat, hopelijk, 10 computers zal ons niet diskwalificeren voor plotseling. Dus hopelijk deze demonstratie zal werken. En merken dat ze hebben API's voor Android, iOS, web, en web services, wat dat ook is. Laten we focussen op het web. Dus klik op de roze doos, web, en dat zal u leiden, hopelijk, naar een pagina hier. En ze hebben een hele hoop van API's gekregen. En het kan een beetje zijn overweldigend op het eerste, maar ik zal sturen ons door wat we willen. Linksboven is de Google Maps JavaScript API, de JavaScript-API. Dus ga je gang en klik op die ene. En dat zal je nu leiden tot de volgende pagina, demo's en voorbeeldcode. Laat me hier uit te zoomen. En laat me ons to-- beneden scrollen naar de plaats waar het zegt snelle start stappen. Het scherm ziet er als de mijne. En er zijn twee stappen, krijgen een sleutel en gaan ontwikkelen. Ik heb al een stap voor ons, om een ​​zogenaamde key. En dit is een gemeenschappelijk idee. Een API sleutel is over het algemeen gewoon een grote willekeurig getal of tekenreeks dat je verondersteld te plakken in uw code, zodat Google weet wie je bent als je bent met behulp van hun service, hun API. Dat betekent niet dat we in rekening worden gebracht om het even wat. En nu, klik op, in plaats van , klikt beginnen met het ontwikkelen. Als je gewoon kon zwaaien me dan als niet zeker waar we zijn. Dus we gewoon krassen op de oppervlakte, hier, maar wat Ik dacht dat dwingend zou zijn is het eigenlijk allemaal van ons hebben, met behulp van Cloud9 in één venster en deze tutorial in een ander venster, laten we eigenlijk onze eigen applicatie up and running dat sluit een aangepaste Google kaart in onze eigen webpagina, en voegt vervolgens één of twee functies. Maar we zullen gewoon krassen op de oppervlak van wat we kunnen doen. Dus gewoon een snel sanity check. Is iedereen op deze pagina, Google Maps JavaScript API? Moet zeggen aan de slag. We gaan niet om te gaan door de hele zaak met alle middelen. OK, in een ander tabblad, als je niet hebben hem open, ga naar Cloud9 en krijg je gewoon een nieuw tabblad, uiteindelijk. Dus nogmaals, c9.io van gisteren, c9.io, en net een nieuw bestand te maken. En ga je gang en bellen het wat je wilt. Ik belde mijn map.html. Noem het iets eindigt in .html. En je moet ruwweg waar ik ben in dit proces met slechts een knipperende prompt in een lege tab heet zoiets map.html. Of bestand nieuw bestand deze tijd. En nu, over op de Google Maps JavaScript API, we zullen het lezen over te slaan door al deze tekst. Maar merken dat hello wereld inderdaad overal, het nu zie je. Hallo wereld heeft dit grote kleurrijke voorbeeld van een hele hoop van HTML. Ga je gang en kopiëren en alleen dat plakken HTML, dus van het type document aan de top de hele weg naar de nauwe HTML-tag, go vooruit en kopieer alle van dat-- weer, Dat is onder de hello wereld example-- en plak die in uw tabblad Cloud9, zodat nu uw scherm moeten kijken ruwweg als de mijne. En je kunt het op te slaan, maar doe het gewoon nog niet geladen. Laten we eerst kijken naar de code en kijken of we kan niet afleiden of te leren van wat het is Google heeft ons blind te kopiëren en plakken. Ze willen alleen maar helpen, letterlijk, ons begonnen, maar er is niet zo veel complexiteit er eigenlijk. Heeft u nog vragen gewoon nog niet? We zijn veilig om verder te gaan? OK. Zo snel, laten we gewoon doen een aantal snelle sanity controles. Line een van wat ik zien, en hopelijk, je Kijk, wat betekent dat, doctype HTML? Kareem, herinneren? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Ja. Hier komt HTML 5. Ondertussen, lijn twee op de screen betekent hier hey browser, hier komt de eigenlijke HTML. Line drie is hey browser, hier komt het hoofd. Lijn vier is, natuurlijk, he browser, hier komt de titel. Wat doet lijn vijf doen? Eigenlijk is dit niet echt iets voor ons doen. In dit geval is gewoon resizes de pagina om een ​​standaard. Line zes, we hebben niet over gesproken, maar het specificeert de tekencodering. Er zijn verschillende manieren om bestanden te coderen, vooral voor vreemde talen. UTF-8 heeft de neiging alleen maar om de standaard te zijn. Dus nu zien we wel in de lijn zeven tot en met 16, een aantal CSS. En hoewel we hebben niet gezien al deze dingen voor, we kunnen soort afleiden. Dus lijn acht middelen, hey browser, gelden alle onderstaande waaraan twee markeringen, blijkbaar? De tekst HTML en lichaam. Dus de komma is het nieuwe ding daar. En dat is gewoon een manier van vermelding van meerdere labels tegelijk. Dan hebben we de accolades. Dus blijkbaar, dit vertelt de browser, maken de hoogte van de pagina 100%. Dus zelfs als er zeer weinig inhoud, maken de hele pagina, maken het ding vullen de pagina. Maak de kaart uiteindelijk de pagina vult. Margin, wat betekent dat? Dat is meestal als arbitrair witte ruimte rond de randen dat sommige browser ontwerper gewoon besloten moet er zijn, want het soort maakt de dingen kijken schoner. Maar we willen dat niet. We willen dat de kaart gaan tot aan de randen. Padding, vergelijkbaar in de geest van de marges. Marges bedoel buiten, padding middelen binnen, maar het is het zelfde soort deal. Het is een beetje een buffer tussen u en de randen. En dan is een goede lijn 13 kans voor een snelle beoordeling. Wat doet scherpe teken kaart bedoel, of hashtag kaart betekenen? Wat heeft die verwijzen naar, in principe? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Precies. Dit object, deze CSS-eigenschap geldt voor een ding, de HTML-tag dat heeft een ID citaat, unquote "kaart". En laten we nu snel vooruit, scroll naar de bodem van de file, wat is niet te ver weg, en merk op de lijn 19, als je het plakken precies zoals ik deed, lijn 19 heeft gewoon een div, dat is een deling van de pagina, die ik gisteren genoemd rechthoekig gebied. Het heeft niets in. Het is een open-tag, in de buurt tag. Maar het heeft wel een unieke ID. Wat lijkt hier gebeurt is Google is klaarmaken onze webpagina hebben een volledige 100% van de hoogte, en geen beton, geen marges, omdat wat we gaan naar binnen zetten van deze div, waarvan de unieke ID is kaart, is een daadwerkelijk ingesloten kaart. En we willen dat het vullen de pagina en niet alleen enkele kleine rechthoek in het midden. Dus lijn 14 op dezelfde manier benadrukt de kaart zelf moet een hoogte van 100% hebben. Dus nu opmerken tussen de lijnen 20 en 28, dit is JavaScript-code. En dit is, hoewel het syntactisch een beetje vreemd, Er is niet zo heel veel aan de hand hier. In lijn 21, dit is te verklaren zoiets als een variabele. In plaats van de oproep te bedraagt, zoals we eerder deden, we meer precies te zeggen var, die net betekent variabel. We konden gebruiken dat in Nick's code, maar dat deed hij niet, dus ik nam niet de moeite doet het ook niet. Het is een variabele genaamd in kaart brengen, en dan is er een functie die blijkbaar genoemd initMap. Dus dit is zoals onze eigen aangepaste puzzelstukje in Scratch. We hebben een stuk van gemaakt functionaliteit genaamd initMap, en u kunt soort afleiden wat is hier aan de hand. Aan de linkerzijde, we hebben een variabele gekregen, dus we gaan naar de volgende te zetten ding in die variabele, van rechts naar links. De rechter zegt: hey browser, geef me een nieuwe Google map. En google.maps.map is gewoon een funky manier specificeren dat deze functionaliteit maakt deel uit van Google Maps. Na de haakjes, hebben we gezien dit al eerder, he browser, krijgen me de elementen in de pagina, tag in de pagina waarvan de unieke ID is-- PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: --map. En wat er gaande is, nou ja, deze lijn samen, lijn 23, in wezen te zeggen, hey browser, haal me die lege div op de pagina wiens unieke id kaart, want ik wil invoegen in het-- injecteren in het, als je will-- een hele hoop van de inhoud dat gebeurt te komen van het web, vervolgens. En Google's dat alles te doen voor ons. Nogmaals, aan het eind van de dag, we hebben dit voorbeeld van abstractie. Ik heb geen idee wat een kaart is of hoe je een kaart API te implementeren. We hoeven niet te. We hoeven alleen maar om de kaart te vertellen waar zich zetten en laat die ten grondslag liggen aan de uitvoering gegevens naar Google. Nu is er blijkbaar twee gegevens dat dit voorbeeld verschaffen tot API van Google. Blijkbaar het midden van de kaart, en het zoomniveau, om zo te zeggen. En heeft iemand herkent deze coördinaten, lengte- en breedtegraad? Waarschijnlijk niet, maar we kunnen teruggaan de tutorial, letterlijk te zien. Maar we zullen het zien in slechts een moment. Zoomniveau is een waarde tussen, dat doe ik niet weet, één in 13 of iets dergelijks. Het heeft gewoon te maken met hoe ver je bent in- of uitgezoomd, en dat is het. En nu aan het eind van de pagina, bericht lijn 29-- het is een beetje lelijk omdat Het wraps-- deze lijn van code is wat downloadt aan de browser werkelijke API van Google. Alle van de code die Google's ingenieurs hebben geschreven dat uit te voeren dit hele kenmerk van integreerbare kaarten. Laten we nu niets aan veranderen. Als je volgende mee, ga je gang en gewoon op te slaan dat bestand, als je inderdaad wat ik heb. Ga naar de URL. U kunt op de knop Run up top en dat zal vertellen u de URL van uw webserver opnieuw. En het zal u leiden tot een nieuw tabblad. Als u klikt op Open voor map.html, en de kans is dat je gaat om een ​​waarschuwing te krijgen, een foutmelding, ja? Foutmelding, foutmelding? Dus helaas, de fout Het bericht is niet zo verhelderend tenzij je eigenlijk opent de console, die speciale tab we hield de opening gisteren en een beetje eerder vandaag. Maar ik struikelde over dit eerder, dus ik al bedacht wat de oplossing is. In de slides van vandaag, of eerder, in Cloud9, bericht dat we niet doen iets met opzet. Merk op dat dit script tag in lijn 29, als je leest er doorheen, het is net als maps.googleapis.com/ iets iets iets, dan merken iemand, een van de ontwikkelaars, schreef in hoofdletters brieven, uw API-sleutel. We moeten iets te plakken in. En dit was de stap Ik deed voor ons vóór, en opnieuw ze misschien op de zwarte lijst met ons op als plotseling, 12 of meer van ons beginnen met dezelfde sleutel, maar laten we eens kijken wat er gebeurt. Dus als je in de hedendaagse dia's, één dia later, is er Deze zeer funky uitziende tekenreeks. Ga je gang en gewoon kopiëren dat en plakken wanneer dit uw API-sleutel zegt. Dat is degene die ik aangemeld voor. En zeker niet te proberen handmatig te typen, want het voelt beladen met typefouten, mogelijk. Dus gewoon kopiëren en plakken dat. En het gaat om de lijn te maken langer, maar nu, alleen maar om duidelijk te zijn, het moet een beetje meer kijken als dit, waar de sleutel is gelijk aan niet gekapitaliseerd schreeuwen tegen je. Sla uw pagina, ga terug aan de andere tab, herladen, en hopen op een kaart waar te zien? PUBLIEK: Australië. DAVID MALAN: Australië. Dus blijkbaar dat zijn de GPS-coördinaten van Australië. En laat me rond te lopen voor een ogenblik en helpen iedereen die helemaal er niet, maar laat me voor te stellen, via Google, vinden de GPS-coördinaten van je eigen woonplaats of uw eigen thuisland. En waarschijnlijk Google kan dit uitschakelen up, of Wikipedia kan je vertellen. Maar kiezen uit twee verschillende waarden voor de lengte- en breedtegraad, ga terug in en plakken, en herlaad vervolgens de pagina na het opslaan en te kijken of je kunt hebben kaart voor uw eigen woonplaats. En als je klaar bent met dat, de follow-up challenge-- en ik zal een beetje minder richting te geven, opzettelijk, zodat je bewust hebben om te strijden voor een paar minuten met de documentatie, verander de kaart om dit niet te zijn cartooneske standaard, maar een satelliet kaart. Dus je eigenlijk zien satelliet beeldspraak in plaats van de mooie kleuren. En de hint ik geef je is verandering van de kaart type. Ga terug naar die krijgen begonnen pagina voor inspiratie. Zoals je misschien hebt opgedaan, als u op zoek bent, er zijn zo veel meer dingen die je kunt doen. Sommigen van jullie hebben al veranderde de kaart type. Maar je kunt doen-- bijvoorbeeld, laat me ga dan naar iets wat we deden voor de cursus Ik teach-- maps.cs50.net. Een van onze undergrads deed dit. We centreren onze kaart over Harvard Yard en overlay al deze namen van gebouwen, en we hadden hem dit toe te voegen. Dus als ik wil zoeken, bijvoorbeeld Matthews Hall, we hebben een kleine drop-down menu. En ik denk dat hij het gebruik van Bootstrap, de bibliotheek we eerder voor dit besproken. En als u klikt op Matthews Hall, het onmiddellijk springt de kaart voor een bepaalde locatie, en het shows u een foto in dit kleine pop-up. Maar zelfs deze kleine pop-up, hebben we niet uit te voeren. Als ik scroll naar beneden op ons krijgen begon pagina en kijk voor info windows je zult zien dat sommige van de functionaliteit die u zelf kan toevoegen, zij het met een beetje meer complexiteit, is zoiets als een info-venster. En als ik klik op een voorbeeld hier, en dit is wat is leuk, Je kunt dingen doen als dit, te klikken op de marker en dan voila, informatie opduikt. Dus we hebben niet helemaal ingevoerd genoeg kenmerken van JavaScript om een ​​foto van u precies hoe te schilderen kunnen allemaal van dit spul samen draad, maar we hebben soort topje van de ijsberg. In feite, wat ik deed net op het moment Ik klikte op dat marker, werd triggering een evenement, een zogenaamde on gebeurtenis click. En we eigenlijk zag een gebeurtenis eerder vandaag, de zogenaamde dienen gebeurtenis, toen we voorkomen de gebruiker zoekt katten. Dus we hebben soort geplukt en koos uit al deze verschillende functies, om u een idee te geven, hopelijk, van wat je kunt eigenlijk doen met een beetje meer comfort in de programmering, en volledig gratis middelen. Nog vragen? Nee? Dit is je laatste kans, althans vandaag, op een vrijdag, om iets te krijgen van uw borst zodat u uit te lopen van hier een gerust gevoel en comfortabel. Ja. PUBLIEK: Waarom niet je nog een ding toe te voegen? DAVID MALAN: Oh mijn god. Ik moet dit weekend rust, denk ik. Andere vragen? PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Je can-- in Internet Explorer, rust in vrede, u heeft gebruikt om te kunnen zetten VB script, virtuele basic script, maar dat nooit echt aangeslagen. Dus het korte antwoord is gewoon JavaScript. Andere vragen? Oké, goed, laat mij dit te doen. Laat me buiten te grijpen onze collega's. Ze hebben een aantal evaluatie formulieren die zij willen dat iedereen om een ​​paar minuten te besteden invullen. Ze willen die vorm te verzamelen en de eventuele ontheffingen dat je naar buiten zou kunnen hebben. Ze zullen ook certificaten. Ik gok dat er nog enkele snacks buiten. Laat me gaan deze uit, en als je Voor vragen in de tussentijd, Ik zal rond meer individueel te lopen en wij kunnen u op weg helpen. Ja natuurlijk. PUBLIEK: [ONVERSTAANBAAR] DAVID MALAN: Dat is meestal waar deze dagen. Zeker met web software, ben je leunt van anderen ben je ofwel esthetisch gebruik van dingen als Bootstrap, zodat je niet moet het lage niveau uit te voeren Details van menu en knoppen en zo. Je leunend op iemand zoals Google, zodat u hoeft niet te worden een Uber bouwen het bedrijfsleven en een in kaart brengen van het bedrijfsleven, en een willekeurig aantal vergelijkbare toepassingen. In feite, logins zijn populair, ook. Als u hebt gebruikt Spotify of een aantal websites, zult u zich aanmeldt bij een aantal websites met behulp van Facebook. Dus wat is mooi, er zijn API's voor logins vandaag de dag, zodat u niet hoeft om uw eigen gebruikers tafel en al uw eigen database noodzakelijkerwijs in dezelfde mate. U kunt laten Facebook allemaal doen van die complexiteit voor u. Dus het is een spannende tijd, eerlijk gezegd, in de programmering, omdat er zo veel van derden diensten die u kunt bouwen op de top van. En nogmaals, de prijs die u betaalt is hetzij financieel of downtime. Als Google gaat naar beneden, dat doet Uber, misschien wel, maar misschien is dat een redelijke trade-off. En nogmaals, dat was een van de thema's, hopelijk voor de laatste paar dagen, is deze trade-offs. En zelden is er heen te gaan een juiste antwoord te zijn. Het is echt de betere van twee of meer antwoorden. Ga deze rond. En deze Cloud9 accounts zullen blijven om te werken, in theorie, in de eeuwigheid. Je zou kunnen vinden als je een paar dagen wachten of een week of meer om terug te loggen in hen, Het zou kunnen nemen als een of vijf minuten terug open te stellen, maar dat is alleen omdat ze zetten zij te slapen om te besparen op middelen.