DAVID Malan: Molt bé, estem de tornada. Així que pel apassionant Per concloure, l'última secció en la programació web, que em Pensem que el fem servir com un terme general per capturar alguns dels temes restants. Així que al final de la dia, farem realitat una mica de pràctica en la programació web amb un llenguatge anomenat JavaScript. I crec que anem a fer una ullada en alguna cosa relacionada amb imatges i el descobriment d'alguna cosa secret ocult en una imatge, i també fer una ullada a la Google Maps API, programació d'aplicacions interfície, com una cosa representatiu del tipus de programari això és cada vegada més i lliurement disponibles en l'actualitat. Però, per què no fer una ullada en un ingredient a aquest món que hem tipus d'estat amb el benentès que existeix durant algun temps, una base de dades. Durant l'últim dia i mig hem assumit que tenim accés a una base de dades, però Quin problema es resol d'una base de dades? Què fa per nosaltres? Que és aixo? AUDIÈNCIA: [inaudible] DAVID Malan: pot contenir tota la informació, OK, i quin tipus d'informació podries posar-hi? AUDIÈNCIA: [inaudible] DAVID Malan: Qualsevol informació es posa en ella, que posarem en contacte. Això és cert. I en un lloc basat en la web o al web típica aplicació, quin tipus d'informació, En concret, pot ser que li posarà en? AUDIÈNCIA: [inaudible] DAVID Malan: Usuaris. Llavors, què és un usuari? AUDIÈNCIA: [inaudible] DAVID Malan: OK, registrat usuari del lloc. I el que vol dir la informació del magatzem dels usuaris? El compon un usuari? Un usuari té què? AUDIÈNCIA: [inaudible] DAVID Malan: Sí, personals dades, i això m'agrada. Anem a ser més precís. Així, un usuari típicament té un nom, ¿Què més que un usuari podria tenir? AUDIÈNCIA: [inaudible] DAVID Malan: Un Acceptar addr--, per la qual cosa el nom, cognom. Això està bé. En realitat, arreglarem que, a causa que va per obrir una oportunitat per discussió, tot i així, encara més. En primer nom, cognom, sexe. Un ID d'algun tipus. Què més? Vaig sentir una altra cosa abans, també. Un correu electrònic, adreça postal. Així que farem una pausa allà i ara consideren no el que estem emmagatzemant a la base de dades, Pero-- i per què no, ja que és potser obvi que una vegada que es registra un usuari, vols recordar que des de fa algun temps. No vol que es simplement ser emmagatzemats en la memòria RAM i ser així forgotten-- ens centrarem en el com. Resulta que en el món de les bases de dades, hi ha almenys dos tipus d'aquests dies. Una cosa que es diu una base de dades SQL, Structured Query Language, o, cutely anomenat, NoSQL, que no és SQL. I l'últim és una exemple del que podria ser anomenat un objecte-orientat, o un magatzem d'objectes, una base de dades que emmagatzema objectes, i no, excusa jo, com aviat veurem, files. Per tant ens centrarem en un moment en el primer d'aquests, a saber, una SQL base de dades, si més no perquè és ja tan familiar, a qualsevol que ha utilitzat o Excel Fulles de Google o Apple Números o qualsevol norma programa de full de càlcul, o, de manera equivalent, o més sofisticat, una mena de Microsoft L'accés o Oracle o MySQL o PostgreSQL, tots els quals són els noms de productes per a les implementacions de la següent idea. Una base de dades relacional és simplement cosa que té files i columnes. I per files i columnes, Em refereixo a alguna cosa, literalment, d'aquesta manera, així que on podríem tenir la nom d'un camp i el seu tipus per aquí. I, de fet, em va deixar Ara començar a mapejar aquests. Així que en realitat, no sé Per això vaig fer un gràfic separat. Anem a mantenir aquest senzill. Tenim aquí la inicis de la nostra taula, on aquest és el nom del camp i aquest és el tipus de dades, i per tipus em refereixo al següent. És un nombre, que és una cadena, una cadena curta com una paraula, es tracta d'un paràgraf, que és dades binàries, com una imatge? I anem a burlen d'aquesta separats només per un moment. Així que, primer nom, número, cadena, gran part de text-- AUDIÈNCIA: [inaudible] DAVID Malan: Sí, així cadena. I en un context de base de dades, anem a solen anomenar a aquest camp carbó. Només diré Char per ara, però estem va a perfeccionar això en un moment. camp de caràcters. Cognom probablement la mateixa. Gènere? Home o dona, per la qual cosa podria ser un camp Char. Podria ser qualsevol cita, cap de la cita "Mascle" o una cita, cap de la cita "femella" o podria ser m o f. Si vols ser més inclusiva, és possible que necessiti un tercer valor o algun altre tipus de camp complet. I el que podria utilitzar veritable fals. El camp podria ser anomenat mascle, i llavors es podria dir veritable o fals. Però això no vol dir necessàriament captura tota la informació que desitgi. Així que resulta que hi ha un altre tipus de de camp que podria ser útil aquí en una base de dades típica, anomenada enum, on és un camp de caràcters, però, el dissenyador, per obtenir enumerar els possibles valors, com van dir ells "mascle", cita, Fi de la cita "femella" i així successivament. Així que qualsevol que sigui el valor està a la base de dades, és de fet basada en caràcters, però ha de ser un d'aquests valors. És probable que no volen una enumeració per al nom o el cognom. Altrament hauríem enumerar, com el seu nom es deriva de, literalment, cada possible primer nom i cognom. OK, així ID quin ha de ser una identificació? Sí, així que potser un número. Així que seguirem amb que, per ara, el nombre. I per nombre, el nombre és una mica massa àmplia ara. Per al final de la segona dia, em sento com si hauria de ser una mica més precís. Nombre podria significar similars, podria ser alguna cosa així com 1.236. I això no és probable el que entenem per una identificació. Què és probable que entenem per una identificació? AUDIÈNCIA: [inaudible] DAVID Malan: Oh, està bé, per la potser ni tan sols és un nombre. Potser en realitat és un identificador únic això és una cadena, com un nom d'usuari. Tan absolutament, que podria ser. Crec que algú probablement significat numèric, però. Així que anem a quedar-nos amb això. Quin tipus de nombre? Què és un nombre enter més precise-- un. Així un nombre com 0, 1, 2, 3, pel que anem a trucar a aquest un nombre sencer. I tot i així, vaig poder s'acaba avorrint, és No realment només una sencer en general que desitgi. És probable que no desitja que els valors negatius, només perquè, només se sent estrany. És possible que vulgueu enters positius. Així també es pot expressar que, en una base de dades, però per ara, direm sencer. Correu electrònic? Aquesta és probablement una sol-- què? AUDIÈNCIA: [inaudible] DAVID Malan: És un correu electrònic, però això és caràcters, oi? Només té un caràcter modern com un símbol "a" o alguna altra cosa, però segueix sent un camp de caràcters. I l'adreça postal? camp de caràcters. Així que això és un bon començament, però serem una mica més precís moment. Així resulta que en una base de dades, sovint tenen dret a triar la més refinada versions d'aquestes coses. De fet, en una base de dades típica de SQL, SQL, o més en general, bases de dades relacionals, bases de dades amb files i columnes, que sovint arribar a especificar no només el tipus de la field-- permetin-me fer algunes aquí-- habitació sinó també la longitud. Quant de temps és un nom de pila? Crec, D-A-V-em-D. OK, ho tinc jo Probablement només ofès com la meitat de les persones a la sala, a la dreta, ja que els seus noms són més de cinc cartes, pel que 5 sembla una mica egoista i ingenu, així que quin és un millor valor? 10, d'acord, i crec estem bé a l'habitació. 13? 30? Per què no em prenc la enfocament d'abans, quan ens estaven parlant sobre les matrius i de la memòria? Per què no m'acaba de dir com 1.000? El nom de ningú va per a ser més llarg que 1000. Fer retrocedir. AUDIÈNCIA: [inaudible] DAVID Malan: Sí, és malbaratament, a la dreta, sobretot Només cinc o 10 si la majoria dels noms són o 15 caràcters, això és un gran desaprofitament. Així que ja saben què? Aquesta és una pregunta una mica difícil. Ara, sens dubte podem analitzar Anglès i els noms de qualsevol altre idioma i esbrinar, així, quin és la average-- mitjana en realitat no ajudar a nosaltres-- el que és el màxim és Probablement el que realment volem. Però resulta que fins i tot tenim alguna opció sobre el tipus aquí. En una base de dades típica de SQL, haver alguna cosa que es diu un camp Char i també un varchar, V-A-R, per al camp carbó variable. I la diferència és la següent. Un camp char, que el dissenyador, ha d'especificar per avançat la longitud exacta del camp. Així que potser el primer nom igual que 20 se sent tipus d'assegurança. Podria haver de fer algunes google per veure si això és suficient realment segura. Probablement hi ha un nom amb 21 personatges, però per ara, suposem 20 és segur. Un camp Char implicaria en una base de dades que estan usant els 20 i els 20 caràcters sempre. Ara si és només D-A-V-em-D, 15 dels són només serà caràcters en blanc, però vostè encara està utilitzant els 20 bytes. Un camp varchar, per contra, els mitjans de cadena ha de ser de fins a 20 caràcters però si és només cinc, només es va a utilitzar cinc, sis o potser per a una valor especial al final, igual que 0 que discutim significa el final d'un caràcter seqüència en la memòria. Així que quan creu vostè pot optar per Char front varchar, atès que el comerç-off? Char utilitza aquest nombre de caràcters, VARCHAR utilitza no més d'aquest número de caràcters. AUDIÈNCIA: [inaudible] DAVID Malan: OK, quan es coneix el longitud de la cadena bastant convincent utilitzar només carbó de llenya, perquè si vostè ho sàpiga, només cal posar sota. I potser això és cert per a un tancament de cremallera codi, als EUA, almenys, 02138, que sempre serà de cinc caràcters fins que s'agrega el tauler 04:00. No obstant això, és possible que tingui alguns valors per que sempre coneix la longitud. O potser els símbols de l'Estat, de la mateixa manera que Nova York a Nova York, i MA de Massachusetts als EUA .. Potser vostè té algunes situacions quan això és totalment raonable, sinó per aquesta lògica, per què fins i tot overthinking això? Per què no només ha d'utilitzar varchar i després només haurem sempre a dos personatges de totes maneres, o utilitzeu sempre 5 caràcters de totes maneres? Per què no només estalviar per varchar tot, per aquesta lògica? Hi ha d'haver un parany. AUDIÈNCIA: [inaudible] DAVID Malan: Could escriure alguna cosa malament. Així que això és cert. Però fins i tot llavors, no poden utilitzar més memòria que assigno. Encara tinc la final dir sobre la longitud, el que no poden fer per accident aquest error, però és un bon pensament. És més subtil, però és molt relacionada a la nostra discussió, en realitat, de les matrius i llistes enllaçades anterior. Resulta que una base de dades, si se sap que tots els valors són d'una longitud fixa, fins i tot si alguns d'aquests valors estan en blanc, tipus d'estètica en blanc, D-A-V-I-D i després 15 espais en blanc, resulta que si cada camp és la mateixa longitud, de la mateixa manera que una sèrie tenien totes les seves coses esquena amb esquena amb esquena amb esquena de manera que vostè podria penes més 1 per a arribar a la següent valor, la mateixa idea en una taula de base de dades. Si la totalitat del seu caràcter cordes tenen la mateixa longitud, vostè té el que es diu accés aleatori. Si totes les cadenes són de longitud 20, no ho fa només veure més 1, que acaba de fer més 20, més 20, més 20, més 20, i pot desplaçar-se molt ràpidament a través o cercar a través de totes les seves dades. Un camp Char variables, per contra, no sempre té 20 caràcters. Podria tenir 20 i després 15 i després 19 i després 10, i pel que si voleu cercar a través d'ell, no es pot simplement cegament afegir 20 bytes per arribar a la següent. Vostè, literalment, ha de buscar a través de a causa de que la vora de l'estructura de dades, si es vol, és desigual. En certa manera s'entra i es basa fora de la longitud real de la cadena. Així que quan es coneix la longitud, com es Kareem diu, utilitzeu un camp char, perquè ganes aquesta eficiència d'estar capaç de buscar a través d'ella més ràpid quan vostè està buscant per a les dades, en cas contrari utilitzar una variable. Per desgràcia, no tinc bona resposta alhora que el nom hauria de ser, però per a alguna cosa com un nom, diria 1 varchar és comú perquè no va ser una longitud fixa per a tothom. 20, no sé, 20 se sent una mica atapeït. Diguem 50, 50. En realitat, no li costarà que molt més a dir 50 en lloc de 40, però en algun punt, cal per fer una trucada de judici. Molt comú, francament, per [? històric?] raons, encara que és excessiva, és a dir 255, perquè fa algun temps, en els sistemes de bases de dades populars, com MySQL, una eina de codi obert que una gran quantitat d'empreses fins i tot com Facebook s'utilitza, aquest va ser el màxim predeterminat així que la gent se'n va anar amb ell. Per tant, no és desgavellat, però anem a utilitzar una mica més de la intuïció i diuen, segur 50, que és probablement una mica excessiu. Gènere, m'agrada enumeració, de manera que, per tant, pot enumerar home o dona, o potser de manera més eficient, M o F o alguna altra simbologia, però enumeració se sent com una bona elecció allà. Per ser clars, el gènere podria ser simplement un varchar I podríem simplement tot acordar la gent és tan bonic, posar sempre els mateixos valors allà. Home o dona o el que sigui. Però el problema, llavors, és que podríem cometre un error, ja que [inaudible] proposta anteriorment en un context diferent. Si fem un error, podríem obtenir valors incorrectes a la nostra base de dades. Així que el bo de les bases de dades com Oracle i MySQL i altres, és que vostè té aquesta última capa de defensa, on l'administrador del DBA, bases de dades, qui és el disseny d'aquesta taula com si són verbalment, podria posar en el seu lloc una enumeració que protegeix contra la qual especificant homes, dones, i perquè ningú la resta cap programador pot accidentalment inserir qualsevol altre valor. Pel que aquesta seria una bona cosa. Aquesta és una característica. Per tant una identificació, suposant un ID numèric, probablement hauria de ser un nombre enter positiu. I de vegades tenen oportunitat de discutir longitud. No ho faria normalment especifiqui un nombre aquí, ha en el seu lloc especifiqui aquest és un int, o una gran int, ja que són normalment trucada. Però en general, un nombre sencer seria, diguem, 4 bytes. I si es tracta de 4 bytes, aquesta és la quantitat de bits? AUDIÈNCIA: [inaudible] DAVID Malan: 32 bits. Llavors, quants usuaris podem tenir en la nostra base de dades si tots ells tenen un ID i aquesta identificació ha de ser únic? 32 bits vol dir que tenim patrons d'un, dos, tres, quatre, five-- per la qual cosa el nombre de patrons diferents de zeros i els que s'han si hi ha 32? Això és el mateix que demanant el que és dues a la 32? És un nombre gran que Jo no puc fer-ho bé, però sé que és més o menys 4 mil milions. Així que això significa que la seva taula de base de dades pot tenir-ne quatre mil milions d'usuaris i això és tot. Així que aquesta és una interessant implicació de disseny. Un bon nombre d'empreses han decidit, potser no tant per a la seva taula d'usuaris, ja que tenir 4000000000 d'usuaris és un problema poc freqüent. Aquesta és una espècie d'estil Facebook problema, no és un problema típic empresa. Però potser si té registres de transaccions o algun tipus de dades que constantment que s'escriu a la base de dades absolutament que podria tenir milers de milions i milers de milions de files, i utilitza un sencer per a ella, el que va a ocórrer tan aviat com sigui s'arriba a la fila número 4000000000 i després intenta inserir el 4000000000 i 1, per dir-ho? Estic simplificant els números d'un bit. Es pot retallar, vull dir que de manejar d'alguna manera. I el que és un equip típicament fer, pensar-hi, fins i tot des d'aquest matí, si té un valor de 4 bits com 1, 1, 1, 1, que, només per lligar matí al costat de la tarda, el Què representa aquest nombre en binari? OK, farem que sigui més fàcil. Què significa aquest número representar en binari? OK, farem que sigui més fàcil, el això representa en binari? AUDIÈNCIA: Tres. DAVID Malan: Tres, perquè tenim els column-- [El] Sort! Vam tenir columna de les unitats i la columna de dos en dos. Així que suposem que, en efecte, la nostra [? dins el quadre?] no eren de 32 bits, però eren dos bits, podem comptar des del número 0, 1, 2, 3 d'usuari, i llavors estem tipus de tornar a l'usuari 00 de nou. Així que això és el que passa normalment. Si alguna vegada has escoltat la expressió-- probablement no tindrà, però si tener-- desbordament de sencer, on mantenir a moure d'una tirada tot de les broques sent els majors valors possibles, i després estàs fora de bits, el que sol succeir? Per què dic 00? Bé, això és tres. Com represento a 4? Com represento la per al número 4 en binari? AUDIÈNCIA: [inaudible] DAVID Malan: One-- si, no diuen 100 per se, perquè té el mal connotació, però 1-0-0. De manera que el nombre 1-0-0 és de fet correcta, però si només té dos bits, el que realment han fet? Vostè ha bolcat a 00. I de fet, això és el que succeiria. En realitat, es pot pensar d'això més familiarment. Si recorden, el que, Fa 16 anys, el món se suposava que acabarà quan el problema Y2K va succeir. Per què? Així, la majoria de les computadores per decisions raonables, van ser l'emmagatzematge de nombres com el l'any 1975 o l'any 1999 només per l'ús de dos dígits en la memòria de l'ordinador. Així que, per descomptat, el que passa quan arribi a l'any 2000, vas a aquest, o millor dit, sí. Així que anar fins a l'any 2000, però si només està utilitzant dos dígits que sembla de la mateixa manera que l'any 00 i pel que ha bolcat. I aquesta és la raó per un munt de sistemes calia actualitzar en el moment. Així que un cop dit això, companyies com Facebook ensopegat amb això. Així que l'única manera de gestionar la situació, francament, és anticipar-se a ell. O la forma més neta de manejar aquesta situació és de preveure que pel que no ho fa haver de fer canvis més endavant. Així que en lloc de 8 bytes, saps què? Vaig a estar orientada cap al pensament aquí, tot i que és una mica més optimista que tindrem 4000000000 i 1 usuaris al nostre lloc web. Però utilitzarem 8 bytes, o 64 bits, el que seria en general diu un sencer gran, molt tècnic. I això vol dir que pot tenir fins i tot més dígits en el seu número. Però aquest és un important decisió de disseny, perquè si es tria un nombre que té molt pocs bits d'expressivitat en realitat es podria crear un error en el programari. Molt bé, així que anem a embolicar fins amb el correu electrònic i adreça postal. Així correu electrònic, quant de temps ha de una adreça de correu electrònic sigui? 50. Realment, no tinc ni idea, però és Probablement alguna cosa per l'estil, perquè en cas contrari ningú va a escriure si fa massa llarg, per la 50, anirem amb tot per ara. adreça postal, quant de temps es deu? AUDIÈNCIA: [inaudible] DAVID Malan: No és només un codi postal, però. adreça postal, vaig sentir. Així que això és com 1 Brattle Square, coma, Cambridge Mass., coma, 02138. I, de fet, em van deixar de tirar una mica de full de càlcul aquí. Això se sent com si fos una oportunitat perduda. Si tenim 1 Brattle Square, coma, Cambridge, MA 02138, Sento que podem fer-ho millor que només l'adreça postal. Per què no exploten això una mica? Què si a? Què hem de tenir lloc per a les nostres files aquí, potser? AUDIÈNCIA: [inaudible] DAVID Malan: Sí, així que anem a cridar street_number, i un guió és només una comuna manera de tenir el que sembla ser un espai, però no és, en realitat. Carrer i, a continuació, ciutat-- ho sento? AUDIÈNCIA: [inaudible] DAVID Malan: Podríem fer això. Una línia, la línia dos. Per què no seguirem simple per ara, però això és absolutament una decisió acceptable. I en l'estat, i després deixar de ser una mica centrat en Estats Units per ara i només fer codi postal, només perquè que va a donar lloc a un error interessant o problema aquí. Així que suposo que és ara la nostra direcció. És una mica més molest que tenim totes aquestes més camps, però ara podem etiquetar les coses una mica millor. Així que ara el número del carrer, probablement, no ha de ser un char, hauria de fer-ho? El que hauria de ser? AUDIÈNCIA: [inaudible] DAVID Malan: Potser, una sèrie com un nombre enter de nou? Un gran nombre enter? És probable que no viu a 4 mil milions d'Main Street o alguna cosa així de boig. Així sencer és probablement molt bé, però no té ningú Ha viscut alguna vegada en una direcció com 1A Brattle Square, o 1 i 1/2? Aquestes coses existeixen, per desgràcia, encara que no ha viscut allà, existeixen aquestes anomalies com 1A apartament, 1B, 1C. Així que ja saps el que, probablement no ha d'anar amb número sencer, en cas contrari anem perdre algunes vendes. Char camp, potser? No sé quant de temps. És probable que no serà tant de temps, pel que 10 o alguna cosa així. Ningú va a escriure un nombre més llarg, potser. Però, de nou, probablement hauríem pensar més en això. Potser google, fer algunes investigacions, però anirem amb les nostres entranyes per ara. Carrers, char, 50, no sé. En algun moment, ningú va escriure-ho en un sobre, també, així que és probable que hi hagi alguns límits superiors allà. Ciutat, mateix, segur, pel que la xerrada 50. Estat, pot ser centrat en Estats Units per ara. Pel que podria ser una llista, tan amable d'una qüestió de criteri, estat. Podria ser com dos caràcters. Així que en realitat, potser, jo deia carbó. Probablement dir varchar només per a alguns eficiència, però anem a tornar a aquesta decisió en un moment. Podria ser un char de longitud 2 per a l'estat. Si en els EUA tenen, com a MA, Massachusetts, Nova York, Nova York, Nova Jersey, Nova Jersey, i així successivament. Per tant, podria ser fixat en això. DC per a Washington DC. Però crec que, Olivier, que proposat un altre enfocament. AUDIÈNCIA: [inaudible] DAVID Malan: Sí, el que és una mica molest per escriure, però una enumeració podria tenir més sentit, perquè d'aquesta manera, almenys als EUA, vostè podria enumerar, si tediosa, però ho fa només un cop a la base de dades i mai més haurà de pensar que, els 50 codis de dos caràcters. Per això m'agrada enumeració. Quedem-nos amb que hi ha, perquè quin tipus de fa complir més rigor. I després zip codi? Crec que Andrew tenia un pensament en aquest AUDIÈNCIA: [inaudible] DAVID Malan: Sí, cinc o nou. Anem a mantenir simple. Només fer cinc per ara. Però potser només podia fer un nombre sencer, oi? Podria, però saps què, em va fer aquest error una vegada, en algun sentit. Fa anys, jo estava migrant des Microsoft Outlook a Gmail, i Outlook té una manera d'exportar tots els contactes com un arxiu d'Excel, un arxiu CSV, separats per comes arxiu de valors. I vaig cometre l'error, em pensar, de doble clic, una vegada que he descarregat l'exportació, a assegureu-vos que semblava que jo esperava. He haver colpejat Desar o deixi guardat automàtic puntada o alguna cosa així. Perquè quan després importats a Gmail, tot va funcionar. Però durant anys, fins als nostres dies, i Ho vaig fer fa cinc o 10 anys, Encara estic trobant amics que tenen direccions que semblen això. Per què? AUDIÈNCIA: [inaudible] DAVID Malan: Va prendre el 0, bé, més aviat, va prendre tot el codi postal com un nombre, i per tant és un 0 que significa no té cap significat. I així, 2138 sembla ser el meu codi postal. I això és, francament, un molest Excel possibilitat per la qual crec que per defecte, fins i tot si se suposa que només ser text, Microsoft Excel decideix, vull ser útil, i oh, veig només nombres. Tractarem a aquests números. I es trunca els zeros a l'esquerra. Juro per Déu, cada parella de mesos em sembla una direcció, i fora d'un tipus de TOC, torno i posar el 0, tot i que mai enviar cartes de la gent ni res. Però encara estic trobant restes d'aquesta. Així que això és a dir, és una bona idea? OK, no, perquè ningú en Massachusetts, en aquesta àrea, va a tenir una o portant-los. Així que anirem amb la mateixa char, probablement, de cinc. I aquí, adonar-nos que podria utilitzar una enumeració i nosaltres podria enumerar 10.000 possibles codis postals, però que se sent com que és probablement creuant una línia de, com a, beneficis. Si vostè té a l'entrada que moltes dades a la base de dades per protegir contra alguna cosa. Així carbó es va adonar que podria escriure en H-I-L-L-O ara el codi postal, el que no és, òbviament, numèric. Així que no hi ha manera, en una base de dades típica, especificar només numèric i només cinc caràcters de longitud, així que tindrem fer això en el codi. Farem que en PHP o Java o qualsevol altre idioma que estem utilitzant en el servidor per fer complir aquest tipus de restricció. Whoo! Molt bé, així que qualsevol pregunta de moment? Anem a fer una altra decisió de disseny. Resulta que es També arriba a escollir, en el disseny d'una base de dades SQL o database-- típics on relacionals de nou, simplement relacional significa files i columnes, és així com a organitzar els seus Data-- i adonar-se que el que això significa és, He estat enganyosa en que, estic drawing-- aquest és el que s'anomena l'esquema per a una taula de base de dades. Això és com el especificacions per al table-- però quan arriba el moment que en realitat emmagatzemar dades, i que farem això només amb l'exemple aquí. Vaig a obrir Excel, perquè Excel em donarà files i columnes. I això és exactament el que Oracle i MySQL i altres eines em donaran. Així que només utilitzaré pel bé de la discussió. Déjame anar per davant i obrir una document representatiu aquí, engrandir una mica. Així, per exemple, les nostres capçaleres són ara nom, cognom, sexe, ID, correu electrònic, número del carrer, carrer, crits. Carrer, ciutat, estat, just sobre encaixa a la pantalla. Així que el que això significa és que quan una usuari es registra per primera vegada per al meu lloc web, que serà una cosa així com David, Malan, m, diguem 1, malan@harvard.edu, número del carrer es ser com 1 Brattle Square, Cambridge, MA, 02138 i, a continuació, etcètera. Així que quan dic que una base de dades relacional o base de dades SQL és files i columnes, Em refereixo a això. Que les dades reals s'emmagatzema en files i columnes. Aquesta és només una coincidència, que estàvem parlant, i jo estava dibuixant el en files i columnes. Això és només l'esquema, la definició general. Així que aquí un d'aquests camps, o de manera equivalent, allà, els quals són els camps que vostè pensa Estic probable que buscar a si sóc un usuari o si sóc l'administrador de base de dades? Com, què sóc jo camps en realitat va a buscar a? AUDIÈNCIA: [inaudible] DAVID Malan: El nom, si per la qual M'agrada el fet que- si, mail pot ser bastant comú. Malauradament, vostè ha dit nom. Així maybe-- i una altra, estem classe de parlar en abstracte. No sé per què t'agradaria ser la recerca d'un nom, però que se sent raonable si estàs a la recerca d'un usuari. Potser estats, segur, ID. I és una relliscosa pendent, perquè podia idear un escenari on potser el meu cap m'ha demanat, Quants homes tenim al nostre lloc? Quantes dones tenim al nostre lloc? I així, en aquest moment, és possible que vulgueu cercar al camp de gènere, també, i res més. Així que hi ha una compensació aquí. Un cop més, no hi ha resposta correcta, però hi ha és una característica en la majoria de bases de dades SQL coneguda com indexació, per la qual vostè, el dissenyador, l' administrador de la base de dades, arribar a decidir per endavant quin Camps La base de dades d'optimitzar per a les recerques en. Es podria dir molt ingènuament, optimitzar això, que optimitzar, optimitzar aquesta, optimitzar que i això, i la base de dades fer alguna cosa per sota de la màgica caputxa, i fer alguna cosa de tal manera que la propera vegada que vostè busca en qualsevol d'aquests camps, serà, de fet, ser més ràpid. Això és possible. No cancel·la a si mateixa. Però hi ha d'haver un preu pagat. Si ingènuament, o un excés d'entusiasme per exemple, l'índex de tots aquests camps, per així dir-ho, fer que tots eficientment recerques, quin preu està probablement pagant? AUDIÈNCIA: [inaudible] DAVID Malan: Rendiment. Que vols dir? Bé rendiment, almenys en el context que estic discutint, és millor ara. Aquesta és la definició de la indexació. Farà cerques més ràpides. Així que el temps disminueix, per dir-ho. AUDIÈNCIA: [inaudible] DAVID Malan: Espai. Així que de nou, es tracta d'un comerç comú. Puc accelerar les recerques, però és costarà més bytes d'espai. Per què? Així, per defecte, si no tenim cap aquestes estrelles vermelles, cap d'aquests índexs, com que estic dient, com buscar d'un nom en aquesta base de dades? Així que anem a dibuixar la nostra atenció a aquest exemple. Si tenim David i Scully i Kareem i Arwa i altres en aquestes files, per exemple. Així que farem exactament això. Scully és aquí dins, i després tenim Kareem, i Arwa, i tots els altres, si no ho fa té un índex definit, per així dir-ho, el millor que pot fer és buscar lineal. Si busca Arwa, no estem serà capaç d'entrar de ple a la seva ràpidament. Anem a començar la part superior i recórrer tot el camí fins al fons, no molt diferent de la nostra original exemple, Mike Smith. Si, però, dic, hey, base de dades, indexar el camp de nom, a continuació, es va a fer alguna cosa més elegant i donar suport alguna cosa de la mateixa manera que la recerca binària. No és probable que la recerca binària per se. Bases de dades tendeixen a utilitzar un altre estructura de dades anomenada b-arbres, No s'ha de confondre amb els arbres binaris, que acaba de fer-lo més ràpid per buscar alguna cosa en la naturalesa logarítmica. Però el preu de pagar per construir aquesta característica, que l'estructura de dades en la memòria, és més bytes. El que podria prendre alguns megabytes, alguns gigabytes, qui sap? Depèn de les dades. Per tant, en algun moment, vostè ha de decidir, probablement no és un cas comú. Quins són els comuns real casos, si realment hagués de triar, quins podrien ser els seus camps preferits? De correu electrònic. I m'agrada perquè el correu electrònic de correu electrònic, en teoria, hauria de ser únic. I així, en general, quan se sap per endavant que un dels seus camps és o serà únic, que tendeix a ser un bon camp buscar a, perquè d'aquesta manera, quan es busca alguna cosa, vas a tornar un o les respostes zero i després ja està. No ha de mantenir a la recerca d'altres més. I així, en aquest cas aquí, correu electrònic, sempre que no es pot registrar dues vegades amb el mateix email, és una bona idea. ID per definició, en el món de la informàtica, si vostè està parlant d'una Identificació, que millor que sigui únic. En certa manera és la connotació de ID o identificador. I la resta d'elles podria ser, diguem-ne bo que tenen, però no és realment necessari. I així, en una base de dades, especifica els índexs, però pot ser encara més precís. Es pot dir, bé, la base de dades, assegureu-vos que cada ID en aquesta taula és única. Ni tan sols deixar que un programador accidentalment posar en un correu electrònic duplicat o duplicar el nombre d'identificació. Tant com les enumeracions protegir-nos de manera similar, es pot tenir aquestes defenses de nivell inferior. I així el disseny de base de dades, en cert sentit, és una mena de diversió, perquè ho fas a la defensiva. Vostè espècie d'assumir que es treballa amb horribles, horribles programadors i que desitja posar en tantes defenses com sigui possible per protegir les seves dades, però al mateix temps vol per ajudar a obtenir millors resultats triant quin camps per optimitzar per. Però no es pot necessàriament fer-ho en un buit com quin tipus d'ací. Un ha de saber quins són aquells casos comuns són. Si els desenvolupadors estan la implementació d'una llibreta d'adreces, És molt possible que desitja poder buscar a gairebé tots els camps, simplement per la naturalesa de l'aplicació. Així que potser passes que l'espai addicional. Dret, alguna pregunta? Sí. AUDIÈNCIA: [inaudible] DAVID Malan: No. AUDIÈNCIA: [inaudible] DAVID Malan: OK. AUDIÈNCIA: [inaudible] DAVID Malan: Ah, pel que estem parlant d'una manera ara que és completament independent del llenguatge. Així que estem parlant ara sobre bases de dades relacionals, més en general, o bases de dades SQL de forma més general. AUDIÈNCIA: [inaudible] DAVID Malan: Una millor paraula per utilitzar es, pot ser utilitzat per qualsevol idioma. Així que es pot escriure codi JavaScript, C codi de codi, C ++, codi Java, codi Ruby, tots els quals parlar amb un base de dades i executar consultes. De fet, això no és una mala segue a una consulta d'exemple. I de nou, no entrarem en Java o C ++ o res d'això mai més, però en SQL, el llenguatge al que segueixo referint-se, Structured Query Language, aquest sí que és un llenguatge de programació, sinó que està destinat a ser utilitzat, sense sorpresa, estructurat de consultes de consulta. Amb això vull dir això. La forma de selecció de les dades a partir d'una base de dades MySQL està literalment escriu en el seu programa una mena de l'estrella de selecció dels usuaris. Estic suposant que aquesta taula, a partir d'ara es diu als usuaris. Podria dir-qualsevol cosa que vulguem, però aquest tipus de té sentit. I així Select és un molt verb comú, si vostè farà, en SQL, que, literalment, ho fa. Què opines estrelles significa en aquest context? AUDIÈNCIA: [inaudible] DAVID Malan: Ho sento? AUDIÈNCIA: [inaudible] DAVID Malan: No cal, és més inclusiva que això, en realitat. És el caràcter comodí. Estrella gairebé sempre vol dir res, el que això significa, en aquest cas, seleccionar tot, des de la base de dades. Així que quan dic això, vull dir Torneu-me cada columna des del meu taula anomenada usuaris. Així que fes-me un conjunt de resultats, com se l'anomena. En altres paraules, dóna'm una còpia de la full de càlcul, és el que vull arribar. Però si digués seleccioneu l'estrella dels usuaris on ID és igual a 1, el gran que ha de el meu conjunt de resultats sigui llavors? O equivalentment, el nombre de files ha de Jo ser lliurat de tornada de la base de dades? Probablement només un, si tinc de fet tractat ID com un identificador únic, i si David ha de ID únic, I ha de tornar una i només una fila que conté tota la informació de David. Si ho vaig dir on ID és igual a 99, hauria de tornar, en aquest context, zero files, almenys en el moment. No obstant això, si no m'importa sobre tota aquesta informació, Jo només vaig poder dir, on viu David? Seleccionar el codi postal d' usuaris on ID és 1. Això seleccionarà només a mi postal de David codi i no la totalitat d'aquesta fila. Per què podria fer això en lloc de la consulta de l'estrella, el comodí? AUDIÈNCIA: [inaudible] DAVID Malan: Sí, jo només ho pugui necessitar. El que el rendiment és de nou la resposta aquí. Per què demanar més la informació que necessita, perquè fins i tot si tot està bé junts, vostè encara ha de copiar les dades, segons sembla, a partir de la base de dades en el seu programa d'alguna manera, i això és una ximpleria si només necessita cinc d'aquests dígits, no la totalitat de la fila. Llavors, com puc inserir un usuari? Suposem que un usuari té sol registrat per primera vegada. La sintaxi seria en general tenir aquest aspecte. Inserir en els usuaris, i llavors podríem dir que els valors, i llavors podríem dir que els valors com, diguem, Lauren Scully, nostre càmera aquí. I el següent camp és el gènere. Així que anem a dir cita, cap de la cita "F", llavors tenim un ID i vaig a deixar que dir-- de fer veure que no és en realitat aquí, així que anem a rebobinar en la història. Així que 2 serà la seva identificació. I llavors el següent camp Aquí està la seva correu electrònic. Així que va a ser com Lauren Scully i així successivament, i només haurem de punt punt dot lluny d'aquí en endavant. Ara va a ser una mica tediós, però la consulta d'inserció en última instància, tenir aquest aspecte. Si vull per desfer- Scully, uh-oh, donarem de baixa ella, s'elimina seu compte, eliminar dels usuaris on ID és igual a 2, es lliurarà de Scully. O el que puc dir estableixen els usuaris d'actualització, diguem, què podem canviar? I si es mou. Conjunt postal és igual a 021-- doncs no, aquest és el seu postal actual. 90210. L'únic altre codi postal Sé que al món. Així que canviaria la seva postal code-- realitat, això no canviaria el seu codi postal. Què acabo de fer? Tot i que la sintaxi és probablement nova. AUDIÈNCIA: [inaudible] DAVID Malan: Sí, el va traslladar tot el món a Beverly Hills, Califòrnia. Així que en realitat hauria dir on ID és igual a 2. I així successivament. Pel que SQL és tot sobre aquests tipus d'instruccions. Seleccionar, inserir, eliminar, actualitzar, amb aquests predicats a l'extrem aquestes clàusules en què, per dir-ho. I hi ha molt més que pugui fer, però en realitat només es redueix simplement, si arcanamente, expressant el que vol la base de dades cal fer. I a continuació, la base de dades es donaran compte, quan Lauren s'insereix en el Scully base de dades, on la va posar en la memòria pel que podem obtenir molt ràpidament la seva base a la seva adreça de correu electrònic o en base al seu número d'identificació o similar. Sí, Dan. AUDIÈNCIA: [inaudible] DAVID Malan: Molt bona pregunta. ¿Aquests scripts de canviar de Microsoft Access a Oracle a MySQL a PostgreSQL? La resposta curta és que depèn. En teoria, hi ha una molt subconjunt comú significativa de SQL que es comparteix a través de tots d'aquestes implementacions. No obstant això, diversos fabricants tenen característiques afegides a les seves bases de dades per fer certes coses més enllà de l'abast d'aquestes característiques, que podria, de fet, trencar. Així que la forma en què els desenvolupadors protegir-se contra això, és que en lloc d'escriure en brut codi SQL com que estic escrivint aquí, que en lloc d'utilitzar una biblioteca, una biblioteca comuna que la pròpia és una espècie d'alt nivell i resums de distància, que el producte que utilitzeu. I li dóna funcions i procediments trucar perquè mai En realitat escriure SQL primera. En teoria, llavors, pot canviar productes d'Oracle a Microsoft o viceversa, o gens una altra cosa, i que, literalment, canviar res sobre el seu codi. La realitat, però, és que de vegades renunciar a característiques com a conseqüència d'això. És possible que hagi triat un producte, ja que té aquestes característiques de valor afegit, i no ets més que ara usar-los conscientment. I anecdòticament, la majoria de les empreses tendeixen Mai allunyar-se de la seva base de dades. Així, mentre que aquest és un agradable tenen funció, la realitat És a dir, si vostè està recondicionament la seva base de dades, que està probablement fent manats d'altres canvis de totes maneres, que no necessàriament de preveure això. Pel que és discutible sobre-enginyeria del problema, però en realitat dependrà del context. Però en teoria, SQL és compartida a través d'aquests diversos productes. Molt bones preguntes. Sí. AUDIÈNCIA: [inaudible] DAVID Malan: Sí, per la qual es pot pensar en una base de dades és només un servidor, al final de el dia, ia l'interior d'aquest servidor és un munt de taules, files i columnes. I quan s'envia una consulta com aquesta des del seu programa, el seu lloc web, escrit en Java, Ruby, Python, el que sigui, el servidor està rebent aquesta comanda i interpretar-la en literalment, de la mateixa manera hem comentat anteriorment amb llenguatges interpretats, i després realitzar alguna acció en zero o més files en zero o més taules. AUDIÈNCIA: [inaudible] DAVID Malan: Exactament, exactament. Així que el pseudocodi per a alguna cosa de la mateixa manera que podria ser això. En el seu arxiu PHP o el seu arxiu de Python o el seu arxiu de Java, que tindria codi de pseudocodi, o bloqueja les ratllades com també, si les visites dels usuaris acme.com/register~~V per primera vegada, a continuació, inserir en els usuaris i així successivament. I ens agradaria traduir això a més codi concret en el final. Però, en realitat, tenim tot els blocs de construcció aquí, tot i que estem ometent alguns dels passos d'implementació. Així que permetin-me trobar cap error amb el que meravellosament va fer fa un moment. S'ha creat una bonica taula completa per als usuaris. És cert que podríem aplicar en algunes maneres diferents, però has fet ens va portar per la path-- i us dic, però és probablement la meva fault-- d'una justa aplicació de base de dades ineficient. No és normalitzar. I per normalitzada que vull dir que serà, amb el temps, una redundància significativa, i per tant la ineficiència, que és malbaratament d'espai. Sobre la base de només el que es veu aquí, pot on se li ha ocorregut aquesta pèrdua d'espai es vindrà, amb el temps, com es registren cada vegada més usuaris per al seu lloc web? Quines dades podrien ser redundant? AUDIÈNCIA: [inaudible] DAVID Malan: Per què vol dir això? AUDIÈNCIA: [inaudible] DAVID Malan: Sí. I anem a suposar per als fins d'avui que això és cert. Resulta que, i hem après aquesta de la manera difícil, que no és cert. D'alguna manera els múltiples ciutats tenen, D'alguna manera, el mateix codi postal, que trenca aquesta meravellosa intuïció. Però suposem que és cert, perquè és gairebé sempre cert. Així que suposem que un codi postal és sempre associada a la mateixa ciutat i l'Estat, que és una espècie de la suposició raonable, però incorrecte, resulta. No obstant això, una suposició raonable per als propòsits de l'actualitat. Llavors suposo que visc a Cambridge, MA, d'acord amb la taula d'aquest usuari, i suposem que Lauren Scully viu a Cambridge, MA, i suposem que Kareem viu a Cambridge, MA, Arwa i viu a Cambridge, MA, tots nosaltres en 02138. Per què estem recordant Cambridge, MA, 02138 per als quatre de nosaltres? El que hauria de ser suficient per recordar? AUDIÈNCIA: [inaudible] DAVID Malan: Només el codi postal. Igual que 02138 existeix, perquè saps el que podríem fer? Podríem aconseguir una mica de luxes i per aquí, defineixi una altra taula on això serà el nom, això va a ser el tipus, això va a ser el de longitud, i d'ara en endavant, estic va a cridar a aquest la meva taula ciutats. Això va ser cridat, de Evidentment, la meva taula d'usuaris. I així ho he de posar aquí per a la meva taula ciutats, què et sembla? AUDIÈNCIA: [inaudible] DAVID Malan: Sí. Així comprimir i estat i la ciutat. I pel que el tipus d'aquí, ens dirà això va a ser un char 5 de nou, subjecte al debat de l'anterior. Aquesta serà una enumeració, potser com abans, i la ciutat serà un varchar 50. I per això ara què amb si esborrar d'aquesta taula per eliminar aquesta ineficiència? AUDIÈNCIA: [inaudible] DAVID Malan: Niça. Estat i la ciutat desapareixen, pel que he ara eliminat la ineficiència potencial per recordar de manera redundant, Cambridge, MA, Cambridge, MA, Cambridge, MA, Cambridge, MA, el qual, és d'esperar mai canviarà. I fins i tot si ho fa, és minorly molest, ara que he de canviar en diverses files, mentre que aquí, només podia canviar-lo en un sol lloc. Ara quin és l'equilibri, potser? Això era molt pràctic. Tenia totes les meves dades molt bé junts. Però el que és clarament el cas ara? AUDIÈNCIA: [inaudible] DAVID Malan: Exactament, i estic content que va utilitzar la paraula s'uneixen, perquè això és en realitat la paraula clau, en el món de les bases de dades relacionals en SQL, que és una paraula real que podria escriure o almenys transmetre. I de fet, el que hem de fer ara per seleccionar la informació completa de David és una mena de selecció d'estrelles usuaris, s'uneixen a les ciutats, i ara en-- Vaig a moure simplement a una segona línia de manera que aquest és igual users.zip fits-- cities.zip, on users.ID és igual a 1. Llavors, què està passant? És lleig que mira, però es pot tipus de llegir d'esquerra a dreta i de dalt a baix. Seleccioneu l'estrella dels usuaris és el mateix que abans, però no és part dels usuaris, per se. És d'usuaris s'uneixen a les ciutats. Què estic unint aquests dos taules en? Bé, pel que sembla, la taules usuaris zip camp, i aquest període és simplement especial la sintaxi per expressar aquesta idea, i això és les taules ciutats zip camp. Vull els dos a ser iguals, però vull seleccioneu en última instància, només les files on ID a la taula d'usuaris és igual a 1, que va passar a ser la meva. I per ser clars, un programador, generalment quan codificar cosa així com el nombre 1, perquè altrament només el lloc web dóna suport David o la primer usuari, En comptes d'això fer alguna cosa així com la identificació, on això representa una variables, cosa que pot canviar amb el temps, similar en esperit al que vaig dir abans amb aquest tipus de marcadors de posició. Però per ara només haurem de codificar com 1. I així, què vol dir això? Doncs bé, una bona manera de visualitzar això és que si aquesta mà és la taula d'usuaris, i això és part de les cremalleres taula, estem espècie de finding-- i les puntes dels dits són postal aquí, i les puntes dels dits aquí estan postal, ets tipus d'enclavament es de manera que obté novament el resultant taula original, per veritablement unir-se les dues taules en el camp comú. I no té per què ser postal. Podria ser qualsevol altra cosa més, però zip és bo, perquè un, és curta, dos, que sempre és la mateixa longitud, de manera que cal una veritable eficàcia al Olivier proposa aquí amb la factorització de la cremallera, i [Inaudible] proposant que ens desfem de la ciutat i estats. Així que aquest és el procés coneguda com la normalització. Per a qualsevol dubte sobre això? Bé permetin-me assenyalar aquest és el tipus de coses, tot i que és força baix nivell, aquesta discussió, que es podria pensar estàs espècie d'aconseguir perdut en la mala herba, aquesta és una manifestació d'un ampli oportunitat per als desenvolupadors a ser dolent. I de fet, tot i que, en cursos que he impartit, quan hem tingut, per exemple, sense experiència programadors de grau construir llocs web, a primera vista, els llocs web pot tenir un aspecte fantàstic. I tenen tota la funcionalitat que havíem demanat, els desenvolupadors van fer una bona feina. Però no necessàriament saben prou sobre el disseny de bases de dades o que no van pensar dur prou sobre els tipus de dades i els tipus d'usuaris de les pàgina web anava a tenir, i ens trobem, llavors, sis mesos més tard, després que s'han graduat o es mouen en, que maleïda sigui, el nostre lloc web és realment, realment lent. I ni tan sols estic parlant de tenir milions o milers d'usuaris. Em refereixo a uns pocs centenars d'usuaris al campus, tots els quals els agrada, per exemple, compres per als cursos de al mateix temps, són usant aquest catàleg de cursos aplicació Vaig esmentar i la cosa s'està posant molt reduir la velocitat perquè no hi havia índexs. No hi havia estrelles vermelles, per la qual cosa parlar, o que no tenien necessàriament un factor fora de dades comuns a obtenir alguns estalvis d'espai. I així, quan un desenvolupador de procedir a la instrucció o persona base de dades o similars, el tipus de preguntes que pensar a través és parell, en revisar el codi d'una altra, a dir, no necessàriament mirar a través de la totalitat del seu codi, però dir, anem a veure a través de les taules de base de dades. Què estàs emmagatzemant? I després dir, bé, s'espera un minut, Per què utilitza un nombre enter? Què passa si tenim 4000000000 i 1 de les files? I aquest tipus de preguntes és una oportunitat al tipus d'empènyer cap enrere i tenir una idea d'on si no se sent còmode fent que, tenir algú més tècnic fer aquestes preguntes, de si és o no la persona que realment sap les seves coses. I aquest és el tipus de coses, també, que les persones a l'Internet que són autodidactes, potser aprendre amb menys freqüència, perquè no tenen necessàriament que procedir a través d'ella com a molt, ja que es pot aconseguir la base de dades en funcionament, però a menys que hi hagi llegit dalt a tutorials o estat comptat sobre la normalització de bases de dades i la indexació i el rendiment, aquests són el tipus de coses que van a fer mal. I es podria pensar, o un mal enginyer podria dir, oh, bé, millor salari per a una base de dades més gran o una base de dades més ràpid o simplement llençar els diners en això, l'escala vertical, no és necessàriament així. Si vas en-- i es pot anar a després que els índexs fact-- i afegir, i pot ser que prengui un parell d'hores per al base de dades per construir que les noves dades estructura que he al·ludit abans, encara es pot solucionar aquest problema després del fet, que aquí és on es començar a distingir bons dissenyadors de mala dissenyadors, no només estèticament, però pel que fa al rendiment també. Qualsevol pregunta? No? Així que per NoSQL, que era l'altre tipus de la base de dades a la qual he al·ludit abans, vostè no té files i columnes. En el seu lloc, vostè hauria alguna cosa que es veu una mica de la mateixa família. Vaig a utilitzar la sintaxi comuna. Les claus resulten ser utilitzat aquí molt. És possible que tingui alguna cosa com a primer nom és David, és possible que tingui l'última nom és Malan, cites, és possible que tingui ID és-- perdó, whoops-- ID és 1, El correu electrònic és malan@harvard.edu, i no ho faré molesti a escriure la resta, i després algunes altres coses. En altres paraules, això és una representació textual del que anomenaríem general un objecte en un programa d'ordinador. I és un objecte general, només una col·lecció de parells de valors clau. Així que de nou, aquest tema recurrent. Vam veure parells de valors clau en HTML, vam veure parells de valors clau ara en el context de les bases de dades, i va veure parells de valors clau en el context de, crec, una llengua el dia d'avui. Es presenta de nou. I de fet, això és realment quines dades es redueix a, dades i metadades, o valors i claus, respectivament. Pel que una no relacional base de dades, basat alguna cosa en els objectes, en el qual només s'aglutinen tot junt i posar-lo en la memòria, generalment es representat com, o pensat, ja que això. I ho deixo ara com una tipus d'enfocament alternatiu. I un no és necessàriament millor que l'altre. De fet, molt en voga en aquests dies són els sistemes de bases de dades com MongoDB i Redis i uns pocs altres eines similars, de lliure disposició, però són cada vegada més de moda. En part a causa de que ofereixen addicional compta amb més d'aquests enfocaments tabulars, sinó també perquè són una mica més fàcil d'usar, perquè vostè no ha de pensar tan dur sobre moltes d'aquestes decisions de disseny. Així que més i menys. Així adonar que hi ha opcions més enllà del que acaba de passar temps en. Així que anem a fer això. Anem transició una mica més tornar ara a la programació web, de manera que la classe de la conclusió avui amb una mica Això és una mica pràctic, omplint en algunes llacunes d'ahir. Déjame anar a aquesta primera. Així recordar que ahir teníem una mica d'HTML canònica pàgines que tenien inicialment, només es HTML i CSS tingut secundàriament, els fulls d'estil en cascada. Aquesta és una etiqueta que no ho vam fer veure ahir, o aturar-se en, anomenada etiqueta de script. Resulta que en realitat es pot incrustar una llenguatge anomenat Javascript al seu web pàgina i fer que la seva web pàgines fan alguna cosa. Llavors, què vull dir amb això? Bé, deixa anar endavant i només prestat aquest codi per un moment. Vaig a entrar a Cloud9, sense necessitat anar-hi a si mateixos de moment, i jo vaig a trucar a aquest alert.HTML. Vaig a pegar al meu arxiu aquí. I només per aclarir el que he fet, i molt em vagi a aquesta direcció i vaig a alertar, i es veu el món Hola. Però això és una mica decebedor. Vull fer alguna cosa una mica diferent. Així que vaig a fer això realitat. Vaig a entrar aquí i, i enmig de les meves etiquetes de script, dir alert ( 'hola, món'); de manera previ avís que és una mica descuidat, però tinc HTML, dins dels quals és una llenguatge anomenat JavaScript, i això és el que s'anomena una crida a la funció o crida a procediment. Aquest és un verb, literalment, en aquest cas, i jo estic invocant la funcionalitat de codi que una altra persona va escriure. Així que la funcionalitat és una alerta, així que anem a aquesta pàgina ara i feu clic a Torna a carregar, i ara veure una mica d'interactivitat. És una espècie de vella escola i lleig. Aquest tipus de li recorda el finestres emergents, potser, d'abans però sí fer alguna cosa una poc més programàtic. Així que més que això, farem una mica més interessant. Déjame anar aquí i desfer d'aquest. I vaig a seguir endavant i crear una forma com ho vam fer ahir. En realitat, saps què? Vaig a entrar a google.html, que ens començar el dia d'ahir, que semblava això, a través de la qual es van realitzar cerques de gat Però Recordeu que hi ha una mena de error en la versió actual. Funciona per als gats, però suposem que Jo no coopero i escric res, i jo simplement feu clic a enviar. Això és una mica estrany comportament. Em va portar a la veritable Google, no em va donar un missatge d'error. M'agradaria dir-li a l'usuari cal que ens donarà un valor. Així que, com podem fer això? Així em va deixar anar de nou a Cloud9 i em va deixar anar a la part superior de la meva pàgina i afegir una etiqueta de script com aquest, on Vaig a escriure una mica de codi JavaScript. I vaig a fer el següent. Si (document.getelementByID-- i el record que hem parlat anteriorment que, aquesta funció. El ID Què vull aconseguir? Vull aconseguir q, i vaig a per exemple és igual a res, així- En realitat em deixa utilitzar cometes dobles només per consistency-- és igual a res, a continuació, alert ( "Si us plau, escriviu una consulta") aquí. Així que tinc el que sembla ser una mena de condició. Hem vist aquesta idea general en Scratch. És com un dels trencaclosques peces que s'assemblava a aquest. I ¿què estic dient? Bé, aquí baix, noto que estic farem el següent. Vaig a donar aquest formulari camp no només un nom de q, que és el que es transmet a Google, però estic va a donar un identificador local, també anomenat q. Però podria cridar a això tot el que vulgui, jo només vaig a mantenir la senzillesa i també dir-q, només per simplicitat. I ara em faré cosa una mica més. En els camps de formulari aquí, vaig a afegir el que es diu un controlador d'esdeveniments. En presentin, vull cridar una funció anomenada de validació. Això no existeix, però, aquesta paraula, o aquest verb de validació, perquè el que faré aquí ara és afegir una mica de codi. Vaig a dir validar la funció. Vaig a sagnar això i afegir un altre clau d'aquí i un altre aquí. Considerem el que això està fent ara. Tinc ara-- pensar en això com el meu creat pròpia peça del trencaclosques que no ho van fer amb anterioritat existeixo, i jo he trucat a aquest trencaclosques piece la peça del trencaclosques de validació. El seu propòsit a la vida és executar les quatre línies de codi dins d'ella. si document.getElementById així conceptualment, que entrarà en l'element, l'element HTML l'única idea és simplement q ia continuació, tot i que la sintaxi és una mica estrany, que és igual a igual només significa iguals. Això vol dir que si l'element amb el identificador únic de q, quan es va incorporar, no té cap valor, només és igual entre cometes, res allà, llavors, què és el que vull fer? Vull cridar l'usuari. I no entrarem aquí amb gran detall. Vaig a tornar falsa. Això és un error. Si no, vaig a tornar realitat. Així que, o funcionava o no ho va fer. Falsa o veritable. I ara, si jo no he comès cap error, em deixa guardar això i torneu a carregar aquesta. I permetin-me que torni a comprovar Jo no, de fet, faig cap errada, pel que no avergonyir-me. Ja veurem si això funciona. Així que ara vaig a escriure gats. Encara funciona, o funciona la meitat, almenys. Ara vaig a tornar a carregar, i ara deixo a tractar de presentar sense escriure qualsevol cosa-- maleïda sigui, que es va trencar. Un moment. Permetin-me obrir la consola, [Inaudible] iniciar la sessió, torneu a carregar la pàgina. Déjame intentar-ho de nou. Oh, maledicció. M'he oblidat. Vaig fer un error tipogràfic. Recordo el que és. .value. Vaig voler dir si el valor l'element el ID és q és igual que, a continuació, cridar a l'usuari. Així que ara que em tenen l'alè de nou. Aquí anem. Allà anem. Si us plau, escriviu una consulta. Així que no m'està deixant passar. Puc ser una mica juganer amb això, i en lloc de la comprovació de cap valor, Puc dir alguna cosa com: No més recerca dels gats, i ara ens podem deixar més juguetonamente la recerca d'usuaris per als gossos si ell o ella vol, o si entro aquí i buscar gats, ara no puc. Quina és el menjar per emportar en aquesta llista? Així que un, hem introduït en nostre món d'HTML i CSS, funcionalitat de programació. Jo en realitat pot ara prendre decisions en el codi. Anteriorment, tot el que vaig poder fer és marcar el contingut textual o contingut gràfic i dir-li el que ha de buscar com i on s'ha de mostrar. Ara realment puc demanar preguntes de la pàgina web i prendre decisions basades en ella, i demanar a l'usuari si he de cridar a ell o ella. Així que intentarem alguna cosa pel nostre compte amb aquest. Vagi per davant, anem a obrir fins a la següent diapositiva aquí, i simplement assenyalar una cosa. Igual que amb CSS, podem factoritzar nostre codi JavaScript en un arxiu separat, es pot fer la mateixa cosa amb JavaScript com amb CSS. I s'utilitza que l'ús d'una font atribut de l'etiqueta de script. Però no anem a complicar les coses per ara. En canvi, si pogués No vagi a aquesta pàgina, però- m'ho dius a mi passar això al voltant de order-- anar a, si es pogués, aquesta pàgina aquí. Aquesta URL aquí. Està en les diapositives d'avui dia. Podria ser necessari recarregar perquè He afegit un parell de coses. Però anar allà on esperen alguns trencaclosques. I això ens donarà una oportunitat, en un context una mica més divertit, a incursionar amb una mica de JavaScript. I quan arribi allà, Vaig a explicar el que li espera. Obtenir verd. Conjunt blau. Estableix verd, vermell fix. Vaya. Ho sento. Aquesta és la mesura de la nostra documentació per a aquest desafiament. I això funcionarà de la següent manera. Així que el que tens en aquest la pàgina és un manat sencer trencaclosques d'imatge per un company a la Universitat de Stanford. Així que el que estem veient aquí és gairebé tipus d'un d'aquests trencaclosques d'ull màgic, però si només mira fixament ell, res va a esclatar cap a fora en vostè. Més aviat, una cosa és amagat en aquesta imatge. I que està amagat de la següent manera. Imatges, com vostès saben, poden ser composta de només tres colors. Alguns vermella, una mica de blau, i una mica de verd. I podem fer tota la colors de l'arc de Sant Martí mitjançant la barreja dels tres colors d'alguna manera. Així que això es veu sobretot verd i blau, però com diu Nick aquí, aquesta imatge Trencaclosques de ferro és un trencaclosques. Conté una imatge de alguna cosa famós, però, la imatge ha estat distorsionada. L'objecte és famós en els valors de vermell. valors No obstant això, el vermell Tots hem estat dividit per 10. Pel que són massa petits en un factor de 10. Així, en altres paraules, Nick va prendre una imatge original, i ell desaturado tot del vermell d'ella, la reducció de la quantitat de vermell tinta, si es vol, en el mateix. Els valors de color blau i verd són a manca de sentit, valors aleatoris, àlies dissenyats soroll per enfosquir la imatge real. Així que el que Nick va fer va ser baixar el to del vermell i després que acaba de llançar a l'atzar quantitats de blau i verd a la imatge per tipus de fosca el que és en realitat encara existeix. Ha de desfer aquestes distorsions per revelar la imatge. En primer lloc, establir tots els valors de color blau i verd a zero per treure'ls del camí, i veure el resultat. llavors multiplicar cada valor de vermell per 10, escalar de nou fins aproximadament igual al seu valor final. Quin és l'objecte famosa? Així que tots vostès tenen aquest rectangle en el seu navegador a aquest moment. I observi que hi ha una certa codi d'arrencada, per dir-ho. Aquest és el codi JavaScript que Nick ha escrit per a vostè. I l'avís que hi ha una línia en el medi que comença amb una barra barra, això és el que generalment s'anomena un comentari. Vol dir que és una frase per al programador que no té cap significat funcional. És només un senyal visual per a l'ésser humà. Perquè pugui seguir endavant i eliminar només aquesta línia, i ser super cura de no esborrar o canviar qualsevol altra cosa. I em van deixar de caminar a través d' el que fa aquest codi i ho deixaré a vostè per esbrinar la imatge secreta. Aquesta primera línia aquí que acabo de ressaltada li dóna la següent. Pel costat de la mà esquerra, vostè té el que es diu una variable que té Nick arbitràriament, però raonablement crida per una imatge im. Pel costat de la mà dreta d'aquest signe igual, que diu dóna'm un nou Ho van dir ells "imatge simple". Imatge simple, en aquest context és el que s'anomena una classe, així, que és com una mena de class-- tècnicament un prototype-- però en realitat, això m'està donant un nou objecte, els continguts de les quals són l'arxiu, ferro-puzzle.png. En altres paraules, Nick ha creat aquesta noció d'una simple imatge de manera que puguem, per pedagògica propòsits, juguen amb la imatge i canviar el seu color vermell, valors de verd, i blau. I com ens va això? Aquesta sintaxi tant críptica aquí és una cosa així com el bloc de repetició que alguns de vostès van veure en Scratch anteriorment avui en dia, on es pot repetir 10 vegades. En aquest cas, Nick no té hardcodear un nombre com 10. En el seu lloc, està dient, inicialitzar una variable anomenada x a 0, comprovar si x és menor que l'amplada de la imatge. I així, per ser més adequada, la imatge és variables, punt vol dir anar dins d'ella i obtenir la seva amplada, i després parèntesi d'obertura, tancat parin és només la forma d'un programador de dir això és una funció. Aquest és un procediment. Aquesta és la funcionalitat algú va escriure. Usar-lo i em retorni una resposta. I llavors x ++ és una forma elegant de dient, després d'haver fet un cop i incrementar x per 1. En altres paraules, aquest és la forma d'un programador d'induir un bucle que és anar per repetir totes les columnes d'una imatge. Una imatge és només una reixeta de punts, files i columnes de punts. Aquesta és una forma de la iteració sobretot d'aquelles columnes. I a l'interior, Mentrestant, estem iterant sobre les altures, aquí i aquí i aquí. Així que això és només una forma de Traipsing, gairebé com una màquina d'escriure de l'escola, que només ha d'anar sobre el imatge completa de manera iterativa. Fins i tot això no és del tot completament clar, acaba de prendre en la fe, per ara, que aquestes tres línies de codi junts són va a permetre que vostè miri de forma iterativa en cada píxel, cada punt en la imatge. Què és un píxel? Bé, per ser clars, si mirem en l'original i fer un zoom, si realment posa els seus ulls a la pantalla de l'ordinador, això és Només un munt de punts, diversos mil punts empacats junts allà. I a què estàs a punt de fer? Cada un d'aquests punts, una definició final, és el resultat del que és en general denominat RGB, vermell, verd, blau, que de nou, es poden combinar per donar-li qualsevol nombre de colors. De fet, si vostè recorda des de fa molts, molts anys, pantalles de projecció, com aquestes coses solia tenir no un sinó tres lents. Un d'ells escopir llum vermella, una de ells escupen llum verda, una d'elles escopir llum blava. I si estigués en una escola mitjana com si estigués en el qual mai havia alineada correctament, eres Sempre veient pel·lícules d'història que eren lleugerament distorsionada, perquè els tres colors no eren combinant correctament. Però resulta que cada un aquests valors de vermell, verd i blau, pot tenir un nombre associat amb ells. Per exemple, 0 per al vermell vol dir que no hi ha vermell, 0 per al verd vol dir que no hi ha verd, i 0 per al blau vol dir que no hi ha blau. Així que si vostè no té color vermell, sense verd, i no hi ha blau, de quin color té? AUDIÈNCIA: [inaudible] DAVID Malan: Si us plau Esperem que sí, que és blanc. Malauradament, aquest operates-- ho sento? AUDIÈNCIA: [inaudible] DAVID Malan: ¿Així que en realitat tenen negre, en aquest cas. Així que si vostè no té cap d'aquests colors encesos, té negre. No obstant això, si vostè té, diguem que molt d'ells, de la mateixa manera que una gran quantitat de vermell, 255 de la mateixa, molt verd, i molt de blau, que és de color blanc. Així que aquests són els dos extrems. Esta és la lògica, si tinc molt de vermell i verd i no hi ha blau, de quin color és? AUDIÈNCIA: [inaudible] DAVID Malan: Dreta, òbviament. I llavors no vermell, molt verd, no blau, i després si tener-- així, només haurem d'acabar ella, perquè sí, però això, per descomptat, Ara, és de color blau. I ara es pot combinar aquests colors. Ara com un a part, si algun de vostès té Alguna vegada has fet alguna cosa de disseny real lloc web, En realitat, pot veure símbols com aquest. FFF-- i, de fet, és Probablement ni tan sols això. És FFFFFF. Qualsevol que he vist de F i E de i A through-- pel que resulta, Ahir vam parlar de decimals, i avui en dia, sobre tipus de decimal. Avui parlem sobre binari. Resulta que, hexadecimal és una molt sistema de base comuna per a ús en productes informàtics. Binària és de dos, decimal és 10, hexadecimal és 16. I resulta que, com fer s'explica en hexadecimal? Zero, un, dos, tres, quatre, cinc, sis, set, vuit, 09:00, quin ús després de les nou? Quin és el següent nombre? Ja hem utilitzat zero. Necessito 16 d'ells. Zero, un, dos, tres, quatre, cinc, sis, set, vuit, nou, necessita alguna convenció arbitrària. I el que la humanitat va decidir algun temps Fa que ve després de les nou de la lletra A i després B i després C. Així que la manera s'explica en hexadecimal és zero, un, dos, tres, quatre, cinc, sis, set, vuit, nou, A, B, C, D, E, F, i que comptarà vostè fins al final, resulta que, a 15. Així zero a 15 és zero a través de F. Ara per què és tan significatiu? Doncs bé, quan es té dos F, així és com t'expresses 255. Així el conte llarg, en el món de Photoshop, que el programari de disseny gràfic, en el món del desenvolupament web, on vostè té un munt de colors, per descomptat, per jugar, sovint els programadors expressar els que estan en hexadecimal, simplement perquè tendeix a ser una mica més simple. Tot i que a primera vista és molt més complexa. Així, en qualsevol cas, això és important perquè Nick at Stanford ens ha donat sis peces de funcionalitat que, els programadors en potència, ara tindrà la capacitat d'utilitzar. Incorporat en aquesta web La pàgina és de sis funcions, 6 procediments que Nick va escriure. Tres d'ells li aconseguirà un nombre, un vermell, un verd, o un valor de blau. Tres d'ells establir aquest valor. I aquests guions són marcadors de posició, per la qual cosa necessita saber quins són. Així, amb aquestes tres funcions, la primera d'aquestes coses serà una coordenada x, i la segona d'aquestes coses serà una coordenada. En altres paraules, que esquitxen, els quals píxel és el que vols aconseguir el verd de, aconseguir el blau, el vermell d'aconseguir. I llavors aquí, això serà x, això serà un valor i, i això va a ser un nombre. Així que anem a fer la primera línia d'aquest conjunt i després ho deixo a vostè per intentar deduir la resta. Així per les instruccions en aquesta pàgina, necessitem per augmentar la vermell per un factor de 10, i hem de treure el verd i retiri el blau. Anem a començar amb els últims escenaris. Així que si vull, i vaig aplicar una sagnia mitjançant l'ús d'alguns espais, si vull establir el vermell, el verd, o el valor de blau, Vaig a fer el següent. Imatge, im.setBlue, i després basat en les meves instruccions aquí, Quines tres coses hauria de fer-ho escriu dins de parèntesis ara? Necessito el valor de x, la i valor, i quin nombre hauria de posar aquí si vull desfer-me Del no-res, sobre la base d'aquesta història aquí? Només zero. Si no vull blau, només sóc canviarà a zero. Ara anem a recapitular el que això està fent. Tinc aquí i TOP línies segona i tercera, Vaig reclamar dos bucles, bucles niats, si Will, que tindran l'efecte de progressar des de l'esquerra a la dreta, de dalt a baix sobre la totalitat de la x els valors i tots els valors de i. Perquè, de nou, una imatge només una quadrícula de files i columnes. Així que això es posarà desfer-se de tot el blau. Permetin-me deixo a la següent línia si s'escau. Com em desfaig de tot el verd? AUDIÈNCIA: [inaudible] DAVID Malan: Niça. AUDIÈNCIA: [inaudible] DAVID Malan: Niça. I vaig a allunyar, i acaba de prendre compte que no s'ha fet cap errada. I si se sent còmode amb el que has fet, seguir endavant i feu clic al botó RUN / Desar i veure el que hi ha. I de nou, hem fet només tres canvis. Hem suprimit la primera comentar i ho va reemplaçar amb aquestes dues línies de codi. I està bé si vostè necessita per colpejar el botó Run / Desar un parell de vegades per arreglar alguna cosa. I permetin-me també el zoom en el meu codi perquè pugui transcriure. Bé. Així que veure a Andrew té el sembla ser un error. Ell només té un gran negre rectangle a la pantalla. Algú més té un gran rectangle negre? AUDIÈNCIA: Sí. DAVID Malan: Gran rectangle negre? OK, així que pensarem sobre el que això significa. Hem dit que zero, zero, zero, pel que no verd, no vermell, no blau, es va a donar negre. I resulta que la major part dels nostres ordinadors portàtils simplement no tenen prou fidelitat. No es pot dir que hi ha força és en realitat alguna cosa allà. I si tal tipus d'inclinar la pantalla cap endavant i cap enrere, Què tal es veu una alguna cosa allà? Potser, una mena de, més o menys? No és perfectament negre. AUDIÈNCIA: [inaudible] DAVID Malan: Spoiler! Hi ha una mica de vermell, però recordar de les especificacions del problema, Nick entonat cap avall. Ell desaturado que alguna cosa, però no tot el camí a zero. Així que si volem ampliar la quantitat de vermell, permetin-me proposar aquest truc. Déjame el zoom en la meva pantalla. I em va deixar anar endavant i dic quantitat és igual a im.getRed (x, i). Aquesta línia de codi m'està donant cosa que es diu una variable. Tinc arbitrària, però, sens dubte, raonablement anomenat al meu variable del que, semblar? Quantitat. quantitat justa. Podria haver anomenat el que vulgui, però jo sóc l'ús d'aquesta altra funció que he descrit anteriorment per obtenir la quantitat de vermell en x coma i. Per què vaig fer això? Què és el que vol fer aquí? Vostè necessita add-- AUDIÈNCIA: [inaudible] DAVID Malan: Sí, potser es multiplica per 10. I si vostè no sap això, estic seguirà endavant i fer això. Vaig a seguir endavant i per exemple, vull que la quantitat de vermell Vull ser el està en el vermell, els temps de 10, i l'estrella, l'asterisc en la seva teclat és ell-- no utilitzen x. Utilitzeu l'estrella. Així és com les coses es multiplica en la majoria dels llenguatges de programació. Així que d'acord a la intuïció de Kareem, emmagatzemat en aquesta variable anomenada quantitat, és la quantitat de vermell que vull en la posició xi. Com, ara, com puc fer que Pixel tenir aquest nombre? Ja ha fet això abans. S'estableix el verd i el blau o cap valor, a zero. AUDIÈNCIA: [inaudible] DAVID Malan: Sí, així vostè no vol que 10. Ja ho va fer la matemàtiques aquí. Així que estem aconseguint el valor de vermell, que és un nombre baix, és de suposar. Estem multiplicant per 10. El que es vol fer amb la quantitat variable d'ara? AUDIÈNCIA: [inaudible] DAVID Malan: Niça. Així im.set-- què? AUDIÈNCIA: setRed. DAVID Malan: setRed, en la posició xi. Sí. I de la mateixa quantitat. En altres paraules, una variable és un marcador de posició temporal que es pot posar el que vulguis a. Ens va passar a estar posant 1 nombre en ella, en el moment. Ens hem multiplicat per 10 per a fer-lo més gran. I ara estic substituint aquesta variable com el tercer argument, o l'entrada per establir vermell. I pel que una vegada que acabar això, i prendre nota dels punts i comes i entre parèntesis. Vagi per davant i feu clic córrer / guardar de nou, i es vegin, màgicament, el que era en realitat allà. [? Arwa ,?] El que està allà? La Torre Eiffel a-feta i dreta vermell, no bastant fosc. hauria de ser més obvi ara, oi? D'ACORD. I Andrew, caixa de no més negre? AUDIÈNCIA: [inaudible] DAVID Malan: Està bé. Així que vaig a mantenir això a la pantalla. Si vols jugar amb aquest més endavant, vaig a tornar a crear això per a vostè. Però aquest codi aquí va fer exactament això. Per què no fem una altra. Permetin-me desplaço cap avall lleugerament. Així doncs, en aquest cas, el projector en realitat no li fa justícia. Però en les seves pantalles, és probable tenir un quadre molt vermella i molt negre. Això, també, és un trencaclosques que mostra alguna cosa famós. No obstant això, la imatge ha estat distorsionada. La imatge veritable, aquest cop, és en els valors de blau i verd. No obstant això, tots ells han estat dividits per 20 el que els valors són molt petites. Els valors de vermell són només nombres aleatoris, soroll. Desfer aquestes distorsions per revelar la veritable imatge. Així que Nick li diu llavors què fer. Establir els valors de vermell a zero, i llavors no espatllar el que és. Llavors multiplicar el blau i els valors verds per 20. Pel que és gairebé el mateix programa com abans, però estàs invertint el procés. I posaré el meu codi de abans a la pantalla en cas que desitja fer referència de nou a ell o jugar amb més que un. Permetin-me apropar dit. Però resoldre imatge Coure trencaclosques, número dos. AUDIÈNCIA: [inaudible] DAVID Malan: OK, així que aquest punt estic No va a donar tants consells. Així que would-- oh, anem a veure, vostè té un error tipogràfic aquí. Així que recordi, això aquí en realitat ha d'anar-hi. Llavors, què proposaria, si desitja se centren en aquest cas, no és la resposta. Si vol transcriure això, que ha de rebre el primer de treball. I llavors vostè pot utilitzar això com inspiració per al segon. Niça. Bé. I per als curiosos, això és un exemple senzill d'una ciència o un art anomenada esteganografia, l'art d'ocultar informació en imatges. En general, les imatges podrien ser marcat per l'aigua molt descaradament amb un logotip a la part inferior cantonada, però amb claredat, pot ser molt més sofisticat referent a això i, de fet ocultar altres imatges en les Imatges d'alguna manera amb aquesta tècnica. Prendre altres 30 segons, i després anem a almenys anunciar el que hauria de veure. I deixaré la tercera un com un exercici a la llar, Si desitja més d'un desafiar aquest cap de setmana. I crec que Andrew podria han aconseguit per primera vegada. Quina és la segona imatge, Andrew? AUDIÈNCIA: estàtua de la llibertat. DAVID Malan: estàtua de la llibertat serà la resposta aquesta vegada. Així que de nou, només algunes simples exemples, l'objectiu dels quals és per donar-li una idea de com hem traduït esgarrapades pictòrica quadres més molest i més codi complicat, però totes les idees encara són exactament el mateix, encara que amb la introducció ara de la noció d'una variable, sent capaç d'emmagatzemar una cosa temporal. Farem un més pràctic, acaba de connectar ara els punts a alguna cosa una mica més en el món real. Quan estigui llest, si pogués aneu a aquesta adreça URL a la pantalla. Això és també en la seva còpia de la diapositives, developers.google.com/maps~~V~~singular~~3rd. Anem a fer alguna cosa realment real, per dir-ho, al web l'ús de l'API de Google Maps, o interfície de programació d'aplicacions, de la següent manera. Google, igual que moltes empreses, proporciona una gran quantitat de funcionalitat gratuïta que es pot utilitzar per construir la seva pròpies aplicacions interessants. De fet, si alguna vegada has fet servir Uber per aconseguir un taxi o un cotxe, Vostè probablement sap que té Uber Un mapa que mostra els cotxes i sobre el mateix. És a dir, el millor que pot a dir, l'API de Google Maps. Ells en realitat estan utilitzant els mapes de Google, però Uber no és una empresa de mapes, ni hauria de ser una problema particularment interessant per resoldre a la part superior de la seva problema del servei de cotxe. I pel que estan dempeus, de nou, a les espatlles dels altres, en aquest cas Google. Així que utilitzen els mapes de Google, però el seu propi serveis d'automòbils i altres característiques. Així que aprofitarem d'això per fer el següent. I si he anat massa ràpid, m'acaba de trucar una altra vegada en un moment. Feliç per recapitular algunes de les coses de la imatge. Ha de veure a si mateix en una pàgina com aquesta. Tan agradable de Google, i que estan entre els millors de proporcionar no només APIs, però APIs lliures que es pot jugar amb o utilitzar comercialment. Ells comencen a cobrar si el seu ús és alta, però em vaig anar per davant per endavant i ens signat per obtenir un compte gratuït que, amb sort, 10 ordinadors no ens desqualifica per de sobte. Així que espero que aquest demostració funcionarà. I noten que tenen APIs per Android, iOS, serveis web i web, sigui el que sigui. Anem a centrar-nos en la web. Així que feu clic al quadre de color rosa, tela, i que el portarà, amb sort, a una pàgina aquí. I tenen un munt d'APIs. I pot ser una mica aclaparador al principi, però ens van a seguir a través del que volem. A la part superior esquerra és el Google Maps JavaScript API, l'API de JavaScript. Així que endavant i feu clic a que un. I que el portarà ara a la següent pàgina, donem i codi d'exemple. Permetin-me Allunyar aquí. I m'ho dius a mi que ens desplacem cap avall A-- a on diu passos d'inici ràpid. La seva pantalla ha de semblar-se a la meva. I hi ha dos passos, aconseguir 1 clau i començar a desenvolupar. Ja ho vaig fer el primer pas per nosaltres, aconseguir una clau trucada. I aquesta és una idea comuna. Una clau d'API és generalment només un nombre aleatori gran o cadena que se suposa per enganxar al seu codi, de manera que Google sap qui és vostè quan està utilitzant el seu servei, la seva API. No vol dir que estem ser acusat de res. I ara, feu clic a, en lloc de un, feu clic a començar a desenvolupar. Si només jo pogués agitar més si no sap on som. Així que tot just esgarrapen la superfície, però el que aquí Vaig pensar que seria convincent és tenir en realitat tots nosaltres, utilitzant Cloud9 en una finestra i aquest tutorial a part, deixa per aconseguir realment la nostra pròpia l'aplicació en funcionament que incorpora un costum Google mapejar en la nostra pròpia pàgina web, i després afegeix una o dues característiques. Però només haurem de gratar la superfície del que podem fer. Pel que només una comprovació de validesa ràpida. És tot el món en aquesta pàgina, API de JavaScript de Google Maps? Ha de dir com començar. No anirem a través de tot això de cap manera. Acceptar, en una altra pestanya, si no ho fa que s'obri, no entrar en Cloud9 i s'aconsegueix només una nova pestanya, en última instància. Així que de nou, c9.io d'ahir, c9.io, i acaba de crear un nou arxiu. I seguir endavant i crida ell el que volgués. Vaig trucar a la mina map.html. Anomenar-res que acaben en .html. I que ha d'estar més o menys on estic en aquest procés amb només un símbol parpellejant en un buit pestanya diu alguna cosa així com map.html. O arxiu, arxiu nou aquesta vegada. I ara, al llarg de la API de JavaScript de Google Maps, deixarem de llegir a través de tot aquest text. Però cal notar que és hola món de fet, a tot arreu, ho veus ara. Hola món té aquesta gran colorit exemple d'un munt d'HTML. Vagi per davant i copiar i enganxar només això HTML, de manera que des del tipus de document a la part superior tot el camí a l'etiqueta HTML de tancament, aneu endavant i copiar tots els que- de nou, això és sota el hola món exemple-- i enganxar això a la pestanya Cloud9, de manera que ara la pantalla s'ha de veure més o menys com la meva. I es pot guardar, però no carregar de moment. Vegem primer a el codi i veure si no es pot inferir o aprendre del que és Google ens ha tingut cegament copiar i enganxar. Ells només volen ajudar, literalment, que puguem començar, però no hi ha molt complexitat realment allà. Qualsevol pregunta de moment? Estem fora de perill per seguir endavant? D'ACORD. Tan ràpidament, farem algunes comprovacions ràpides. Línia 1 del que jo veure, i és d'esperar, es Vegeu, què vol dir això, HTML tipus de document? Kareem, recordar? AUDIÈNCIA: [inaudible] DAVID Malan: Sí. Aquí ve HTML 5. Mentrestant, la línia de dos al pantalla aquí vol dir escolta navegador, aquí ve l'HTML real. Línia de tres és eh navegador, aquí ve el cap. Línia de quatre és, per descomptat, hey navegador, aquí ve el títol. Quina línia de cinc do? En realitat, això no fa realment fer res per a nosaltres. En aquest cas, només es canvia la mida la pàgina a un defecte. Línia de sis, no hem parlat, però especifica la codificació de caràcters. Hi ha diferents maneres de codificar arxius, especialment per a les llengües estrangeres. UTF-8 només tendeix a ser el valor per defecte. Així que ara anem a veure en línia set a 16, una mica de CSS. I tot i que no hem vist totes aquestes coses abans, que tipus de es pot inferir. Així que en vuit mitjans, hey navegador, aplicar tot el següent a la qual dues etiquetes, semblar? L'HTML i el cos de text. Així que la coma és el nou allà. I això és només una forma de especificar diverses etiquetes alhora. Llavors tenim les claus. Així que pel que sembla, això li diu al navegador, fer que l'alçada de la pàgina 100%. Així que fins i tot si hi ha molt poc contingut, fer tota la pàgina, fer l'ompli la pàgina. Fer el mapa en última instància a omplir la pàgina. Marge, què vol dir això? Això és en general com arbitrària espai en blanc al voltant de les vores que algun dissenyador browser decidir que hauria d'estar allà, perquè tipus de coses fa aspecte més net. Però no volem això. Volem anar el mapa tot el camí fins a les vores. Farciment, similar en esperit als marges. Marges signifiquen, mitjans de farciment fos a l'interior, però és el mateix tipus de tracte. És una mica d'un tampó entre l'usuari i les vores. I després la línia 13 és un bon oportunitat per a una revisió ràpida. El que fa mostra de la correspondència aguda significa, o mapa hashtag vol dir? El què es refereix, en principi? AUDIÈNCIA: [inaudible] DAVID Malan: Exactament. Aquesta propietat, aquest propietat CSS s'aplica a una sola cosa, l'etiqueta HTML que té un diàmetre interior de cotització, cap de la cita "mapa". I ara anem a avançar ràpidament, de desplaçament fins a la part inferior de l'arxiu, el qual No està massa lluny, i avís en línia 19, si escau exactament com ho vaig fer, la línia 19 té només un div, que és una divisió de la pàgina, que ahir anomenat una regió rectangular. No té res en ella. És una etiqueta oberta, el codi de tancament. Però té un identificador únic. Així que el que sembla ser passant aquí és Google s'està preparant la nostra pàgina web per té una alçada total de 100%, i sense farciment, sense marges, perquè el que anem a posar a l'interior d'aquest div, amb el ID és únic mapa, és un mapa incrustat real. I volem que s'ompli la pàgina i no només haver algun petit rectangle en el medi. Així que posa l'accent en la línia 14 de la mateixa manera, la mapa mateix ha de tenir una alçada de 100%. Així que ara compta entre les línies 20 i 28, això és codi JavaScript. I això és, tot i que és sintàcticament una mica estrany, No hi ha gairebé res a fer aquí. En la línia 21, això és declarar cosa que es diu una variable. En lloc de dir- quantitats, com ho vam fer abans, que estem dient amb major precisió var, que només significa variable. Podríem haver utilitzat que, en codi de Nick, però no ho va fer, per la qual cosa no es va molestar a fer-ho bé. És una variable anomenada mapa, i després hi una funció que és aparentment anomenat initMap. Així que això és com la nostra pròpia personalitzada peça del trencaclosques en Scratch. Hem creat una peça de funcionalitat anomenada initMap, i es pot inferir tipus de que està passant aquí. Pel costat de la mà esquerra, tenim una variable, per la qual cosa posarem el següent cosa dins d'aquesta variable, de dreta a esquerra. El costat dret diu, escolta navegador, dóna'm un nou mapa de Google. I google.maps.Map és només una manera covarda d'especificar que aquesta funcionalitat pertany a Google Maps. Després del parèntesi, que hem vist això abans, hey navegador, aconseguir me'ls elements de la pàgina, el etiqueta de la pàgina amb identificador únic és-- AUDIÈNCIA: [inaudible] DAVID Malan: --map. I el que està passant, així, aquesta línia junts, línia 23, està essencialment dient: Hey navegador, anar a buscar-me que div buit a la pàgina amb identificador únic és el mapa, perquè vull inserir it-- a injectar en ella, si voluntat-- un munt de contingut que passa a estar venint del web, posteriorment. I Google està fent tot això per a nosaltres. Així que de nou, al final del dia, tenim aquest exemple d'abstracció. No tinc idea de què és un mapa o com implementar un API mapa. Nosaltres no necessitem. Només hem de comptar el mapa on posar en si, i deixar aquells implementació subjacent detalls Google. Ara hi ha pel que sembla dues peces de dades que aquest exemple és proporcionar a l'API de Google. Pel que sembla, el centre del mapa, i el nivell de zoom, per dir-ho. ¿I algú que reconeguin aquests coordenades, latitud i longitud? Probablement no, però podem tornar al tutorial, veure literalment. Però el veurem en un moment. nivell de zoom és un valor entre, no ho crec saber, un de cada 13 o alguna cosa per l'estil. Simplement té a veure amb el lluny que està amplia o es redueix, i això és tot. I ara al final de la pàgina, línia d'avís 29-- que és una mica lletja, perquè wraps-- que aquesta línia de codi és el que es descarrega a la API actual navegador de Google. Tot el codi que Google de Els enginyers han escrit que implementen tota aquesta opció de mapes integrables. Ara anem a no canviar res. Si estàs seguint, seguir endavant i només has de guardar aquest arxiu, si de fet té el que tinc. Anar a la seva adreça URL. Podeu fer clic al botó Executar sobre de la tapa i que li dirà que l'URL del seu servidor web de nou. I és que donarà lloc a una nova pestanya. Si fa clic a Obre per map.html, i les probabilitats són que ets aconseguirà un avís, un missatge d'error, oi? missatge d'error, el missatge d'error? Així que, lamentablement, l'error missatge no és que aclaridor a menys que realment obre la consola, que fitxa especial que manté l'obertura d'ahir i una mica el dia d'avui. Però em vaig trobar amb això abans, així que ja esbrinat quina és la solució. A les diapositives d'avui en dia, o més aviat, en Cloud9, previ avís que no vam fer alguna cosa deliberadament. Cal notar que aquesta etiqueta script en línia 29, si es llegeix a través d'ella, és com maps.googleapis.com/ alguna cosa, alguna cosa, alguna cosa, a continuació, observi a algú, un dels desenvolupadors, va escriure en el total de capital cartes, la seva clau d'API. Cal enganxar alguna cosa allà. I aquest va ser el pas Ho vaig fer per nosaltres abans, i de nou pot ser que la llista negra con si de cop i volta, 12 o més de nosaltres començar a utilitzar la mateixa clau, però veurem què passa. Així que si vas a l'actualitat de diapositives, una diapositiva més endavant, hi ha aquesta cadena molt covard que busquen de text. Vagi per davant i simplement copiar i que enganxar-lo on posa la seva clau API. Aquesta és la que em vaig inscriure. I definitivament no tracti escriure de forma manual, perquè se sent ple amb errors ortogràfics, potencialment. Així que només has de copiar i enganxar això. I que va a fer que la línia més temps, però ara, només per ser clars, que ha de ser una mica més com aquest, on la clau no és igual capitalitzat cridant a vostè. Deseu la pàgina, tornar a l'altra pestanya, torneu a carregar, i l'esperança de veure un mapa d'on? AUDIÈNCIA: Austràlia. DAVID Malan: Austràlia. Així que pel que sembla aquests són els Coordenades GPS Austràlia. I m'ho dius a mi caminar al voltant per un moment i ajudar a qualsevol persona que no és molt allà, però permetin-me proposar, a través de Google, trobar les coordenades del GPS de la seva pròpia ciutat natal o en el seu propi país d'origen. I, probablement, Google pot convertir això amunt, o la Wikipedia li pot dir. Però triar dos valors diferents de latitud i longitud, tornar i enganxar-los, i torni a carregar la pàgina després de guardar i veure si es pot tenir una dels mapes per a la seva pròpia ciutat natal. I quan hagi acabat amb que, el seguiment challenge-- i vaig a donar una mica menys sentit, deliberadament, de manera que vostè deliberadament han de lluitar per un parell minuts amb la documentació, canviar el mapa per ésser no aquesta predeterminat de dibuixos animats, però un mapa de satèl·lit. Així que en realitat es veu per satèl·lit les imatges en lloc dels colors bonics. I la pista et donaré és canviar el tipus de mapa. Tornar als quals aconseguir començat la pàgina a la recerca d'inspiració. Com és possible que hi hagi recollit, si vostè està buscant, hi ha molts més coses que pot fer. Alguns de vostès ja tenen canviat el tipus de mapa. Però es pot fer-- per exemple, em va deixar anar a alguna cosa que vam fer per al curs Em teach-- maps.cs50.net. Un dels nostres estudiants de llicenciatura van fer això. Ens centrem el nostre full sobre Harvard Yard i superposar tots aquests noms d'edificis, i vam tenir que afegeixi això. Així que si vull cercar, per exemple, Matthews Hall, tenim un petit menú desplegable. I crec que ell està usant Bootstrap, el biblioteca hem comentat anteriorment per això. I si es fa clic a Matthews Hall, immediatament salta el mapa per a un cert ubicació, i es nota que una imatge en aquesta petita finestra emergent. Però fins i tot aquesta petita pop-up, que no va posar en pràctica. Si em desplaço cap avall en la nostra aconseguir començat la pàgina i buscar finestres d'informació, veurà que algunes de les funcionalitat que vostè mateix pot sumar, encara que amb una mica més la complexitat, és una cosa que es diu una finestra d'informació. I si faig clic a un exemple aquí, i això és el que és divertit, es poden fer coses com aquesta, en fer clic a un marcador i després voila, la informació apareix. Així que encara no hem introduït suficients característiques de JavaScript per pintar un quadre de exactament com es podrien cablejar totes aquestes coses juntes, però hem tipus de esgarrapat la superfície. De fet, el que he fet quan He fet clic en aquest marcador, va ser d'activar un esdeveniment, un anomenada en l'esdeveniment clic. I que de fet vam veure una esdeveniment el dia d'avui, l'anomenat presentar esdeveniment, quan estàvem prevenint l'usuari des de la recerca dels gats. Per a això hem tipus de recollir i ho vam triar d'entre totes aquestes diverses característiques, per donar-li un sentit, és d'esperar, del que en realitat es pot fer amb una mica més comoditat en la programació, i recursos completament gratis. Qualsevol pregunta? No? Aquesta és la seva última oportunitat, almenys avui en dia, un divendres, per aconseguir alguna cosa del seu pit perquè al sortir d'aquí sentir-se segur i còmode. Sí. AUDIÈNCIA: Per què no fer s'agrega una cosa més? DAVID Malan: Oh el meu Déu. Necessito descansar aquest cap de setmana, crec. Altres preguntes? AUDIÈNCIA: [inaudible] DAVID Malan: Vostè can-- en Internet Explorer, que en pau descansi, que solia ser capaç de posar VB guió, guió bàsic virtual, però que en realitat mai es va posar de moda. Així que la resposta curta és simplement JavaScript. Altres preguntes? D'acord, bé, deixa fer això. Déjame agafar els nostres col·legues exterior. Tenen algun tipus d'avaluació formes que ells voldrien que cadascun per passar uns minuts per omplir. Ells volen cobrar aquesta forma i qualsevol renúncies que tingui a l'exterior. També tindran certificats. Suposo que hi ha encara alguns aperitius fora. Déjame passar aquests cap a fora, i si té alguna pregunta, mentrestant, Vaig a caminar al voltant de més de forma individual i podem començar. Sí, per suposat. AUDIÈNCIA: [inaudible] DAVID Malan: Això és sol ser cert en aquests dies. Certament, amb la web programari, vostè s'inclina en els altres o ets estèticament usant coses com Bootstrap, pel que no ho fa han de posar en pràctica el baix nivell detalls dels menús i botons i tot això. Vostè està recolzat en una persona com Google perquè no han de construir un Uber negoci i un negoci de mapeig, i qualsevol nombre de semblant aplicacions. De fet, els inicis de sessió són molt populars, també. Si ha utilitzat Spotify o qualsevol nombre de llocs web, podràs iniciar sessió en alguns llocs web que utilitzen Facebook. Quin és tan agradable, hi ha són APIs per als inicis de sessió avui en dia, de manera que vostè no ha tenir la seva pròpia taula d'usuaris i tots els de la seva pròpia base de dades necessàriament en la mateixa mesura. Pot deixar que Facebook faci tot que la complexitat per a vostè. Així que és un moment emocionant, honestament, en la programació, perquè hi ha tants tercers serveis que es poden construir a la part superior de. I de nou, el preu que es paga és ja sigui financera o el temps d'inactivitat. Si Google es cau, el mateix passa amb Uber, sens dubte, però potser això és una raonable equilibri. I de nou, que era un dels temes, amb sort, durant l'últim parell de dies, Són aquestes compensacions. I poques vegades és allà va sent una resposta correcta. Realment és el millor de dos o més respostes. Passada aquests voltant. I aquests comptes Cloud9 continuaran per treballar, en teoria, a perpetuïtat. És possible trobar si esperes uns dies o una setmana o més per tornar a entrar-hi, que podria prendre com una o cinc minuts per obrir una còpia de seguretat, però això és només perquè posen en estat de repòs per estalviar en recursos.