DAVID MALAN: Bine, ne-am întors. Deci, pentru excitarea concluzie, ultima noastră secțiune pe programare web, pe care am crezut că ne-ar folosi ca un termen general pentru a captura câteva subiecte rămase. Deci, la sfârșitul fișierului zi, vom face de fapt un pic de hands-on de programare web cu o limbă numită JavaScript. Și cred că vom arunca o privire la ceva legat de imagini si de a descoperi ceva secret ascuns într-o imagine, și, de asemenea, să ia o privire la Google Hărți API, de programare a aplicațiilor interfață, ca ceva reprezentativ pentru tipul de software care este din ce în ce și disponibil gratuit astăzi. Dar de ce nu ne aruncăm o privire la un ingredient în această lume că am fost un fel de luând de la sine există de ceva timp, o bază de date. În ziua anterioară și o jumătate ne-am asumat că avem acces la o bază de date, dar Ce problemă se rezolvă o bază de date? Ce face pentru noi? Ce este? AUDIENTA: [inaudibil] DAVID MALAN: Susține toate informațiile, OK, și ce fel de informații te-ar putea pune în ea? AUDIENTA: [inaudibil] DAVID MALAN: Orice informație ai pus în ea, vei primi înapoi. Asta e adevarat. Iar pe un site tipic web-based sau web cerere, ce tipuri de informații, în mod specific, s-ar putea te pune? AUDIENTA: [inaudibil] DAVID MALAN: Utilizatori. Deci, ce este un utilizator? AUDIENTA: [inaudibil] DAVID MALAN: OK, înregistrat utilizator al site-ului. Și ce înseamnă să informațiile utilizatorilor magazin? Ce compune un utilizator? Un utilizator are ce? AUDIENTA: [inaudibil] DAVID MALAN: Da, personal date, și îmi place asta. Hai să fim mai precis. Deci, un utilizator are de obicei un nume, ce altceva s-ar putea să aibă un utilizator? AUDIENTA: [inaudibil] DAVID MALAN: Un OK addr--, astfel încât primul nume, prenume. Asta e bine. De fapt, să se stabilească că, pentru că se întâmplă pentru a deschide o oportunitate pentru discuție, încă, în continuare. Nume, prenume, sex. Un ID de un anumit fel. Ce altceva? Am auzit ceva mai înainte, de asemenea. Un e-mail, adresa poștală. Așa că hai să oprim acolo și acum ia în considerare nu ceea ce suntem stocarea în baza de date, dar-- și nu de ce, din moment ce este, probabil, evident că odată ce înregistrați un utilizator, pe care doriți să le amintească de ceva timp. Nu-l vreau să doar să fie stocate în memoria RAM și să fie forgotten-- asa să se concentreze asupra cum. Se pare că, în lumea bazelor de date, există cel puțin două tipuri de aceste zile. Ceva numit-o bază de date SQL, Limbaj de interogare structurat, sau, numit cutely, NoSQL, care nu este SQL. Iar aceasta din urmă este exemplu de ceea ce s-ar putea să fie numit un obiect orientat, sau un magazin de obiect, o bază de date care stochează obiecte, și nu, scuza mă, după cum vom vedea în curând, rânduri. Așa că ne vom concentra doar pentru un moment primul dintre acestea, și anume, un SQL bază de date, în cazul în care numai pentru că e atât de familiar deja, pentru oricine care a folosit Excel sau Foi de calcul Google sau Apple a Numere sau orice standard program de calcul tabelar, sau, echivalent, sau mai sofisticat, ceva de genul Microsoft Access sau Oracle sau MySQL sau PostgreSQL, toate acestea sunt nume de produse pentru implementări din următoarea idee. O bază de date relațională este pur și simplu ceva care are rânduri și coloane. Și, de rânduri și coloane, Eu literalmente spun ceva ca aceasta, așa că în cazul în care am poate avea numele unui câmp și tipul său aici. Și, de fapt, lasă-mă acum începe să hartă acestea. Așa că de fapt, eu nu știu de ce am desenat un grafic separat. Să păstrăm acest lucru simplu. Avem dreptul aici începuturile de masa noastră, în cazul în care acesta este numele câmpului iar acesta este tipul de date, și de tip I spun următoarele. Este un număr, este un șir de caractere, un scurt șir ca un cuvânt, este un paragraf, este date binare, cum ar fi o imagine? Și să șicana tocmai acest lucru în afară doar un moment. Așa că primul nume, număr, șir de caractere, bucată mare de text-- AUDIENTA: [inaudibil] DAVID MALAN: Da, așa șir. Și, într-un context de baze de date, vom în mod tipic numesc acest domeniu char. Voi spune doar char acum, dar suntem va rafina acest lucru într-un moment. câmp de caractere. Ultimul nume este, probabil, la fel. Gen? Bărbat sau femeie, deci ar putea fi un câmp char. Ar putea fi fie citat, unquote "Masculin" sau citat, unquote "femeie" sau ar putea fi m sau f. Dacă doriți ca să fie mai cuprinzătoare, aveți nevoie de o a treia valoare sau un fel de alt domeniu cu totul. Și așa ai putea folosi adevărat fals. Câmpul ar putea fi numit de sex masculin, și atunci ai putea spune adevărat sau fals. Dar asta nu surprinde în mod necesar toate informațiile pe care le-ar putea dori. Deci, se pare că există un alt tip de din domeniu care ar putea fi utile aici într-o bază de date tipică, numită enum, în cazul în care acesta este un câmp de tip caracter, dar tu, designer, ajunge la enumera valorile posibile, cum ar fi citat, unquote "de sex masculin", citat, unquote "feminin" și așa mai departe. Astfel că, indiferent de valoare este în baza de date, este într-adevăr, pe bază de caractere, dar trebuie să fie una dintre aceste valori. Probabil nu ne-ar dori-o enum pentru nume sau prenume. În caz contrar, ne-ar fi pentru a enumera, ca nume derivă din, literalmente fiecare posibil nume și prenume. OK, deci ID-ul ce ar trebui să fie un act de identitate? Da, deci poate că un număr. Așa că hai să rămânem cu că, pentru moment, numărul. Și, după numărul, numărul e un pic prea larg acum. Pentru sfârșitul celui de al doilea zi, mă simt ca și cum am ar trebui să fie un pic mai precis. Numărul ar putea să însemne cum ar fi, ea ar putea fi ceva de genul 1.236. Și asta nu e, probabil, ceea ce înțelegem printr-un act de identitate. Ce probabil înțelegem prin un act de identitate? AUDIENTA: [inaudibil] DAVID MALAN: Oh, OK, poate că nu e nici măcar un număr. Poate că este de fapt un identificator unic asta e un șir de caractere, cum ar fi un nume de utilizator. Așa că absolut, ar putea fi. Cred că cineva, probabil, a însemnat numeric, totuși. Așa că să stea cu asta. Ce fel de număr? Ce este mai precise-- un întreg. Deci, un număr similar cu 0, 1, 2, 3, așa că vom numi asta un întreg. Și chiar și atunci, am putut fie nitpicking, este într-adevăr nu doar întreg generale pe care doriți. Probabil că nu doriți valori negative, doar pentru că, pur și simplu se simte ciudat. Probabil că doriți numere întregi pozitive. Deci, vă puteți exprima, de asemenea, că într-o bază de date, dar acum, vom spune întreg. E-mail? Aceasta este, probabil, un doar-- ce? AUDIENTA: [inaudibil] DAVID MALAN: Este un e-mail, dar asta e de caractere, nu? Ea are doar un caracter funky, cum ar fi un simbol "la" sau altceva, dar este încă un câmp de tip caracter. Și adresa poștală? câmp de caractere. Deci, asta e un început frumos, dar să fie un pic mai precis acum. Deci, se pare că, în o bază de date, de multe ori au posibilitatea de a alege mai rafinat versiuni ale acestor lucruri. De fapt, într-o bază de date tipic SQL, SQL, sau, mai general, baze de date relaționale, baze de date cu rânduri și coloane, de multe ori ajunge pentru a specifica nu numai tipul de field-- lasa-mi face loc aici-- dar, de asemenea, lungimea. Deci, cât timp este un prim nume? Cred că, D-A-V-I-D. OK, am înțeles eu probabil, doar ofensat ca și jumătate a oamenilor din cameră, dreapta, dat fiind că numele voastre sunt mai lungi de cinci scrisori, deci cinci pare un pic egoist și naiv, astfel încât ceea ce este o valoare mai bună? 10, bine, și cred că suntem în regulă în cameră. 13? 30? De ce nu îmi iau Abordarea de mai devreme, când am au vorbit despre tablouri și memorie? De ce nu spun doar ca și 1000? Numele Nimeni nu se întâmplă să fie mai mare de 1.000. Împinge înapoi. AUDIENTA: [inaudibil] DAVID MALAN: Da, este risipitor, dreapta, în special în cazul în care cele mai multe nume sunt doar cinci sau 10 sau 15 caractere, care este foarte risipitor. Deci, tu ce știi? Aceasta este o întrebare grea. Acum, putem analiza cu siguranță engleză și numele de orice altă limbă a lui și dau seama, ei bine, ceea ce este medie average-- nu prea ajuta us-- ceea ce este maxim este probabil, ceea ce ne dorim cu adevărat. Dar se pare că avem chiar unele posibilitatea de a alege tipul de aici. Într-o bază de date SQL tipică, vă au ceva numit un câmp char și, de asemenea, un varchar, V-A-R, pentru câmpul char variabil. Iar diferența este aceasta. Un câmp char, tu proiectantul, trebuie să precizeze în prealabil lungimea exactă a câmpului. Deci, poate primul nume cum ar fi 20 se simte un fel de sigur. S-ar putea avea de a face unele Googling la a se vedea dacă asta e suficient de fapt, în condiții de siguranță. Probabil că un nume cu 21 de caractere, dar pentru moment, să presupunem că 20 este sigur. Un domeniu char ar implica într-o bază de date pe care sunt utilizați 20 și întotdeauna 20 de caractere. Acum, dacă e doar D-A-V-I-D, 15 dintre acestea sunt doar de gând să fie caractere goale, dar încă utilizați toți cei 20 bytes. Un câmp varchar, prin contrast, înseamnă string ar trebui să fie de până la 20 de caractere dar dacă este doar cinci, te doar de gând să utilizați cinci, sau poate șase pentru Valoarea specială la sfârșitul anului, așa 0 am discutat că semnifică sfârșitul unui caracter secvență în memorie. Deci, atunci când crezi s-ar putea alege char versus varchar, dat fiind faptul că comerțul-off? Char folosește ca multe caractere, varchar nu foloseste mai mult de atât de multe caractere. AUDIENTA: [inaudibil] DAVID MALAN: OK, atunci când știi Lungimea șirului destul de convingătoare de a folosi doar char, pentru că în cazul în care tu stii asta, pur și simplu pune-l jos. Și, poate că e adevărat pentru un fermoar cod, în Statele Unite, cel puțin, 02138, Întotdeauna o să fie de cinci caractere până când adăugați bord patru. Dar, s-ar putea avea unele valori pentru pe care le știi întotdeauna lungimea. Sau poate simbolurile de stat, cum ar fi NY pentru New York, și MA pentru Massachusetts, în Statele Unite. Poate ai aveți unele situații în cazul în care este total rezonabil, dar prin această logică, de ce noi chiar și acest lucru prea mult la? De ce nu folosim doar varchar apoi vom doar utilizați întotdeauna două caractere, oricum, sau utilizați întotdeauna cinci caractere, oricum? De ce nu a salva doar varchar pentru totul, de această logică? Trebuie să existe o captură. AUDIENTA: [inaudibil] DAVID MALAN: Ar putea scrie ceva greșit. Astfel că este adevărat. Dar chiar și atunci, ei nu pot folosi mai multă memorie decât am aloca. Eu încă mai au finală spun pe lungimea, astfel încât acestea să nu se pot face în mod accidental această greșeală, dar un gând bun. Este mai subtil, dar este foarte relevant la discuția noastră, de fapt, de tablouri și liste legate de mai devreme. Se pare că, o bază de date, în cazul în care știe că toate valorile sunt cu o lungime fixă, chiar dacă unele dintre aceste valori sunt goale, un fel de punct de vedere estetic gol, D-A-V-I-D și apoi 15 eboșe, se dovedește că, în cazul în care fiecare câmp este aceeași lungime, mult ca o matrice a avut toate lucrurile sale spate în spate la spate în spate, astfel încât ai putea pur și simplu, plus 1 pentru a ajunge la următorul valoare, aceeași idee într-un tabel de baze de date. Dacă toate caracterul tău șirurile sunt aceeași lungime, ai ceea ce se numește acces aleator. Dacă toate corzile sunt lungime 20, tu nu faci doar face plus 1 doar tu faci, plus 20, plus 20, plus 20, plus 20, și puteți derula foarte repede prin sau căutați prin toate datele. Un câmp caracter variabil, prin contrast, nu are întotdeauna 20 de caractere. S-ar putea avea 20 și apoi 15 și apoi 19, apoi 10, și așa mai departe, dacă doriți să căutați prin ea, nu poți pur și simplu orbește se adaugă 20 bytes pentru a ajunge la următoarea. Ai literalmente să caute prin deoarece marginea structurii de date, dacă vreți, este zdrențuită. Intr-un fel de merge în și pe bază de ieșire pe lungimea efectivă a șirului. Deci, atunci când știi lungimea, ca Kareem spune, folosește un câmp char, pentru că puteți câștiga acel eficiența de a fi capabil să caute prin ea mai repede atunci când căutați date, în caz contrar utilizați o variabilă. Din păcate, nu am nici un răspuns bun la cât timp numele ar trebui să fie, dar pentru ceva de genul un nume, aș spune un varchar este comun pentru că nu merge să fie o lungime fixă ​​pentru toată lumea. 20, eu nu știu, 20 se simte un pic mai bine. Să zicem doar 50, 50. Ea nu chiar te costa asta mult mai mult să spunem 50 în loc de 40, dar, la un moment dat, aveți nevoie pentru a efectua un apel hotărâre. Foarte frecvente, sincer, pentru [? istoric?] motive, chiar dacă este excesivă, este de a spune 255, pentru că ceva timp în urmă, în sistemele de baze de date populare, cum ar fi MySQL, un instrument gratuit open source că o mulțime de companii cum ar fi chiar Facebook folosit, acest lucru a fost maxim implicit astfel încât oamenii pur și simplu a mers cu ea. Deci, nu nerezonabile, dar vom utilizați un pic mai intuitie și spune, sigur 50, asta probabil, un pic excesiv. Gen, îmi place enum, și așa că, prin urmare, putem enumera bărbați sau femei, sau poate mai eficient, m sau f sau o altă simbolistică, dar enum se simte ca o alegere bună acolo. Pentru a fi clar, de gen ar putea fi doar un varchar, și am putea pur și simplu toți sunt de acord oameni la fel de frumos, pentru a pune mereu aceleași valori acolo. Masculine sau feminine sau fleacuri. Dar, atunci problema este că am putea fac o greșeală, după cum [inaudibil] propus mai devreme într-un context diferit. Dacă facem o greșeală, am putea obține valori incorecte în baza noastră de date. Deci, ce e frumos despre bazele de date cum ar fi Oracle și MySQL și altele, este că aveți această ultimă strat de apărare în cazul în care administratorul DBA, baze de date, oricine este proiectarea acestui tabel ca noi sunt verbal, ar putea pune într-un loc pe care enum protejează împotriva specificând de sex masculin, feminin, și așa mai departe nimeni altfel nici un programator poate accidental inserați orice altă valoare. Deci, acest lucru ar fi un lucru bun. Aceasta este o caracteristică. Asa ca un act de identitate, presupunând un ID numeric, probabil, ar trebui să fie un număr întreg pozitiv. Și, uneori, avem posibilitatea de a discuta lungime. Nu ar fi în mod obișnuit specificați un număr aici, v-ar specifica în schimb acesta este un int sau un int mare, așa cum sunt numite în mod obișnuit. Dar, de obicei, un număr întreg ar fi, să zicem, 4 octeți. Și dacă este de 4 octeți, asta-i cât de mulți biți? AUDIENTA: [inaudibil] DAVID MALAN: 32 biți. Deci, cât de mulți utilizatori pot avem în baza noastra de date în cazul în care toate au un ID iar acest ID trebuie să fie unic? 32 de biți înseamnă avem modele de unul, doi, trei, patru, five-- deci cât de multe modele diferite de zero-uri și cele puteți avea dacă sunt 32? E același lucru ca și întreba ce-i doi la cei 32? Este un număr mare, care Nu pot destul obține dreapta, dar eu știu că e de aproximativ 4 miliarde de euro. Deci, acest lucru înseamnă că tabelul bazei de date poate au patru miliarde de utilizatori și asta este. Deci, acest lucru este un interesant Design implicit. Un număr decent de companii au decis, poate că nu atât de mult pentru masa lor de utilizatori, deoarece având 4 miliarde de utilizatori este o problemă rară. Acesta este un fel de Facebook stil problemă, nu este o problemă tipică de companie. Dar poate că, dacă aveți busteni de tranzacție sau un fel de date pe care în mod constant se scrie în baza de date că absolut ar putea avea miliarde și miliarde de rânduri, și utilizați un număr întreg pentru ea, Ce se va întâmpla cât mai curând ajunge la rândul numărul de 4 miliarde și apoi încercați să inserați 4 miliarda și 1, ca să spunem așa? Sunt simplificarea numerele pe care un pic. Te poți tăia înapoi, eu vă spun trebuie să-l ocupe cumva. Și ce un calculator ar face în mod obișnuit, gândiți-vă chiar din această dimineață, dacă aveți o valoare de 4 biți cum ar fi 1, 1, 1, 1, care, doar pentru a lega dimineața împreună la după-amiaza, ce înseamnă acest număr reprezintă în binar? OK, vom face mai ușor. Ce înseamnă acest număr reprezintă în binar? OK, vom face mai ușor, ceea ce acest lucru nu reprezintă în binar? AUDIENTA: Trei. DAVID MALAN: Trei, pentru că avem cele column-- [RÂSETE] Uau! Am avut coloana altele și coloana câte doi. Așa că să presupunem că, într-adevăr, ne [? teren agricol?] nu au fost de 32 de biți, dar au fost doi biți, putem Numar de la numărul 0, 1, 2, 3 utilizator, și atunci suntem un fel de înapoi la utilizator 00 din nou. Deci, aceasta este ceea ce se întâmplă de obicei. Dacă v-ați auzit vreodată expression-- probabil, nu au, dar dacă have-- overflow număr întreg, în cazul în care vă să păstreze flipping toate biți dvs. pentru a fi cele mai mari valori posibile, și apoi nu mai ai biți, ce s-ar întâmpla de obicei? De ce să-i spun 00? Ei bine, acest lucru este de trei. Cum reprezint 4? Cum pot Reprezint pentru numărul 4 în binar? AUDIENTA: [inaudibil] DAVID MALAN: Da Unu, nu spun 100 per se, deoarece are greșit conotație, dar 1-0-0. Astfel că numărul de 1-0-0 este într-adevăr corectă, dar dacă aveți doar doi biți, Ce-ai făcut cu adevărat? Te-ai rostogolit la 00. Și într-adevăr, asta e ceea ce s-ar întâmpla. De fapt, vă puteți gândi despre acest lucru mai familiar. Dacă vă amintiți, ceea ce, în urmă cu 16 ani, lumea ar fi trebuit să se încheie atunci când problema Y2K sa întâmplat. De ce a fost asta? Ei bine, majoritatea calculatoarelor, pentru decizii rezonabile, au fost stocarea numerelor, cum ar fi anul 1975 sau anul 1999 doar prin utilizarea a două cifre în memoria calculatorului. Așa că, desigur, ceea ce se întâmplă atunci cand ajungi la anul 2000, te duci la acest lucru, sau mai degrabă, da. Deci, te duci la anul 2000, dar în cazul în care te doar cu ajutorul a două cifre arată cum ar fi anul 00 și așa că v-ați rostogolit. Și acest lucru este motivul pentru care o mulțime de sisteme este necesar să fie actualizate la momentul respectiv. Deci, cu care a spus, companii precum Facebook rula împotriva acestei. Astfel încât singura cale de a gestiona situație, sincer, este să-l anticipăm. Sau cel mai curat mod de a gestiona această situație este să-l anticipeze astfel încât să nu trebuie să facă modificări mai târziu. Deci, în loc de 8 octeți, știi ce? Voi fi transmite-gândire aici, chiar dacă este un pic optimist că vom avea 4 miliarde și 1 utilizatori pe site-ul nostru. Dar, hai să folosim doar 8 octeți, sau 64 de biți, care ar fi în general numit un număr întreg de mare, foarte tehnic. Și asta înseamnă că doar tu poti avea chiar și mai multe cifre din numărul. Dar acest lucru este un important decizie de design, pentru că dacă alegeți un număr care are prea puțini biți de expresivitate ai putea crea de fapt un bug în software-ul. Bine, așa că hai să-și încheie cu e-mail și adresa poștală. Asa ca e-mail, cât timp ar trebui să o adresă de e-mail să fie? 50. Eu chiar am nici o idee, dar este probabil, ceva de genul asta, pentru că altfel nimeni nu va scrieți dacă devine prea mult timp, asa ca 50, Să mergem cu ea acum. adresa poștală, cât timp ar trebui să fie asta? AUDIENTA: [inaudibil] DAVID MALAN: Nu doar un cod poștal, totuși. adresa poștală, am auzit. Deci, acest lucru este ca 1 Brattle Square, virgulă, Cambridge Mass., virgula, 02138. Și, de fapt, lasă-mă să trag un pic foaie de lucru aici. Acest lucru se simte ca este o oportunitate pierdută. Dacă avem 1 Brattle Square, virgulă, Cambridge MA 02138, Mă simt ca o putem face mai bine decât doar adresa poștală. De ce nu am exploda acest lucru un pic? Ce sunt eu să ajung? Ce ar trebui să avem în loc să avem pentru rândurile noastre aici, poate? AUDIENTA: [inaudibil] DAVID MALAN: Da, așa că hai numesc street_number, și o subliniere este doar o comună mod de a avea ceea ce arata ca un spațiu, dar nu este, de fapt. Stradă, și apoi city-- rău? AUDIENTA: [inaudibil] DAVID MALAN: Am putea face asta. O singură linie, linia doi. De ce nu vom păstra simplu de acum, dar asta e absolut o decizie acceptabilă. Și apoi de stat, și apoi să fie un pic SUA-centrice pentru acum și face doar codul poștal, pur și simplu pentru că aceasta va duce la o greșeală interesantă sau o problemă aici. Așa că să presupunem că acum adresa noastră. Este un pic mai enervant că avem toate aceste mai multe domenii, dar acum putem tag-ul lucrurile un pic mai bine. număr Deci, acum, probabil, din stradă nu ar trebui să fie un char, ar trebui să-l? Ce ar trebui să fie? AUDIENTA: [inaudibil] DAVID MALAN: Poate, un număr ca un întreg din nou? Un număr întreg de mare? Tu, probabil, nu trăiesc la 4 miliarde Main Street sau ceva nebunesc. Asa ca întreg este, probabil, bine, dar are cineva a trăit vreodată la o adresă cum ar fi 1A Brattle Square, sau 1 și 1/2? există aceste lucruri, din păcate, chiar dacă nu ați trăit acolo, există aceste anomalii cum ar fi 1A apartament, 1B, 1C. Deci, tu știi ce, probabil nu ar trebui să meargă cu număr întreg, în caz contrar vom merge să-și piardă unele vânzări. câmp Char, poate? Nu știu cât de mult timp. Probabil nu va fi atât de mult, deci 10 sau ceva. Nimeni nu va scrie un număr mai lung, poate. Dar, din nou, probabil că ar trebui da mai gândit la asta. Poate google, face unele de cercetare, dar vom merge cu intestinele noastre de acum. Străzi, char, 50, nu știu. La un moment dat, nimeni nu merge să-l scrie pe un plic, de asemenea, așa că, probabil, unele limite superioare acolo. Oraș, același, sigur, deci char 50. De stat, poate fi SUA-centrice pentru acum. Asa ca ar putea fi o listă, așa fel a unui apel hotărâre, de stat. Ar putea fi ca două personaje. Așa că, de fapt, poate, am tot zis char. Probabil vreau sa spun varchar, doar pentru o anumită eficiență, dar ne vom întoarce la această decizie într-un moment. Ar putea fi un char de lungime 2 pentru stat. Dacă în Statele Unite au, cum ar fi MA, Massachusetts, New York, New York, New Jersey, New Jersey, și așa mai departe. Așa că s-ar putea fi stabilită la asta. DC pentru Washington DC. Dar cred că, Olivier, tu a propus o altă abordare. AUDIENTA: [inaudibil] DAVID MALAN: Da, deci este un enervant puțin pentru a tasta, dar un enum s-ar putea face mai mult sens, pentru că în acest fel, cel puțin în Statele Unite la, ai putea enumera, dacă tediously, dar o faci doar o dată în baza de date și din nou, nu trebuie să se gândească aceasta, toate cele 50 de coduri de două caractere. Așa că îmi place enum. Hai să rămânem cu faptul că acolo, deoarece Este un fel de impune mai multă rigoare. Și apoi codul poștal? Cred că Andrew a avut un gând pe care AUDIENTA: [inaudibil] DAVID MALAN: Da, cinci sau nouă. Hai să-l păstrați simplu. Doar face cinci pentru acum. Dar poate aș putea doar face un întreg, nu? Aș putea, dar știi ce am făcut această greșeală o dată, într-un anumit sens. Cu ani în urmă, am fost migrarea de la Microsoft Outlook pentru Gmail, și Outlook are un mod de a exporta toate contactele dvs. ca un fișier Excel, un fișier CSV, separate prin virgula fișier cu valori. Și am făcut greșeala, am cred că, din ea făcând clic dublu, odată ce am descarcat de export, asigurați-vă că arăta cum mă așteptam. Trebuie să fi lovit Salvare sau lasa salvare automată lovi cu piciorul sau ceva. Pentru că atunci când am importat atunci in Gmail, totul a lucrat. Dar, de ani de zile, până în această zi, și Am făcut asta de cinci, acum 10 ani, Sunt încă mai găsesc prieteni care au adrese care arata ca acest lucru. De ce? AUDIENTA: [inaudibil] DAVID MALAN: A fost nevoie de 0, bine, mai degrabă, a luat întreg codul poștal ca un număr, și, prin urmare, este un lider de 0, ceea ce înseamnă nu are nici un sens. Și așa 2138 pare să fie codul meu poștal. Și acest lucru este, sincer, un Excel enervant facilitate prin care cred că în mod implicit, chiar dacă este menit să doar fi text, Microsoft Excel decide, permiteți-mi să fie de ajutor, și oh, eu văd doar numere. Hai să tratăm aceste ca numere. Și se trunchiază zerouri. Jur, fiecare cuplu de luni, am găsit o adresă, și dintr-un fel de TOC, mă duc înapoi în și se adaugă 0, chiar dacă eu niciodată trimite scrisori oamenilor sau ceva. Dar eu sunt încă mai găsesc rămășițe ale acestui. Deci, acest lucru este de a spune, este aceasta o idee bună? OK, nu, pentru că nimeni în Massachusetts, în acest domeniu, va avea o o ai conduce. Așa că hai să mergem cu cum ar fi char, probabil, cinci. Si aici, ne dăm seama ar putea folosi un enum și noi ar putea enumera 10.000 posibile coduri poștale, dar care se simte ca este, probabil, traversează o linie de, cum ar fi, beneficii. Dacă aveți pentru a introduce acea multe date în baza de date pentru a proteja împotriva ceva. Așa că char a dat seama ai putea introduce în H-E-L-L-O, după codul poștal, care nu este, în mod evident, numeric. Deci, nu există nici un fel, în o bază de date tipică, pentru a specifica doar numeric și doar cinci caractere, așa că vom avea pentru a face acest lucru în cod. Vom face asta în PHP sau Java sau orice limbaj suntem folosind pe server pentru a pune în aplicare acest tip de constrângere. Whoo! Bine, deci întrebări doar încă? Hai să facem o altă decizie de design. Se dovedește că De asemenea, de a alege, la proiectarea unei baze de date SQL, sau database-- tipice relaționale în cazul în care din nou, relațional doar înseamnă rânduri și coloane, asta e modul în care organizați data-- dvs. și dau seama că ceea ce înseamnă că acest lucru este, Am fost înșelătoare în că, eu sunt drawing-- acest lucru este ceea ce se numește schema pentru un tabel de baze de date. Aceasta este ca caietul de sarcini pentru table-- dar atunci când vine vorba de timp de fapt pentru a stoca date, și vom face acest lucru doar de exemplu aici. Am de gând să deschidă Excel, deoarece Excel-mi va da rânduri și coloane. Si asta este exact ceea ce Oracle și MySQL și alte instrumente mă va da. Așa că am de gând doar să folosească de dragul discuțiilor lui. Lasă-mă să merg mai departe și să deschidă documentul reprezentativ aici, mări un pic. Deci, de exemplu, antete noastre sunt acum nume, prenume, sex, ID-ul, e-mail, numărul străzii, strada, Hopa. Stradă, oraș, stat, doar despre încăpea pe ecran. Deci, ce înseamnă acest lucru este că, atunci când un utilizator se înregistrează în primul rând pentru site-ul meu, aceasta va fi ceva de genul David Malan, m, să zicem 1, malan@harvard.edu, numărul străzii va fie ca 1 Brattle Square, Cambridge, MA, 02138, și apoi așa mai departe. Așa că, atunci când spun că o bază de date relațională sau baze de date SQL este rânduri și coloane, Vreau să spun asta. Că datele reale sunt stocate în rânduri și coloane. Aceasta este doar o coincidență, că am vorbit, și am fost doar desen în rânduri și coloane. Acesta este doar schema, definiția globală. Așa că din aceste domenii de aici, sau echivalent, acolo, care sunt domeniile pe care le considerați Sunt probabil să caute pe dacă sunt un utilizator sau dacă sunt administratorul bazei de date? Cum ar fi, ce domenii sunt eu de fapt, va căuta pe? AUDIENTA: [inaudibil] DAVID MALAN: Numele, da asa Îmi place faptul that-- da, e-mail ar putea fi destul de frecvente. Ne pare rău, ai spus numele. Așa că maybe-- și din nou, suntem un fel de a vorbi în abstract. Nu știu de ce te-ai să fie în căutarea unui nume, dar care se simte rezonabil, în cazul în care sunteți în căutarea unui utilizator. Poate afirmă, sigur, ID-ul. Și este un alunecos pantă, pentru că am putut ticlui un scenariu în cazul în care poate că șeful meu mi-a cerut, câți oameni avem pe site-ul nostru? Câte femei avem pe site-ul nostru? Și așa în acel moment, s-ar putea dori pentru a căuta pe câmpul de gen, de asemenea, si nimic altceva. Asa ca exista un compromis aici. Din nou, nu există nici o răspuns corect, dar există este o caracteristică în cele mai multe baze de date SQL cunoscut sub numele de indexare, prin care tu, proiectant, administratorul bazei de date, ajunge să decidă în prealabil, care Câmpurile bazei de date ar trebui să optimizeze pentru căutări. Ai putea spune foarte naiv, pentru a optimiza acest lucru, pentru a optimiza că, pentru a optimiza acest lucru, optimiza că și acest lucru, iar baza de date va face ceva magic de sub hota, și de a face ceva în așa fel că data viitoare când căutați pe oricare dintre aceste domenii, ea va fi, de fapt, să fie mai rapid. Este posibil. Ea nu se anulează. Dar trebuie să existe un preț plătit. În cazul în care în mod naiv, sau supra-entuziasm să zicem, indicele pentru toate aceste domenii, ca să spunem așa, să le facă toate în mod eficient căutate, ce preț sunt, probabil, plătești? AUDIENTA: [inaudibil] DAVID MALAN: Performance. Ce vrei sa spui? Ei bine performanță, cel puțin în context, eu discut, e mai bine acum. Asta e definiția de indexare. Aceasta va face căutările mai repede. Astfel încât timpul scade, ca să spunem așa. AUDIENTA: [inaudibil] DAVID MALAN: Spațiu. Deci, din nou, acestea sunt un comerț comun. Pot accelera căutările, dar este va costa mai mulți octeți de spațiu. De ce? Ei bine, în mod implicit, dacă avem nici unul dintre aceste stele roșii, nici unul dintre acești indici, așa cum eu spun, cum de căutare pentru un nume în această colecție de date? Așa că hai să ne atragă atenția asupra acestui exemplu. Dacă avem pe David și Scully și Kareem și Arwa și altele în aceste rânduri, de exemplu. Așa că hai să facem exact asta. Scully este aici, și apoi avem Kareem, și Arwa, și toți ceilalți, dacă nu au un indice de definit, ca să spunem așa, cel mai bun poti face este de căutare liniară. În cazul în care căutați Arwa, noi nu suntem va fi capabil să sari direct la ea repede. Vom incepe de sus si du-te tot drumul spre partea de jos, nu spre deosebire de versiunea originală nostru de exemplu, Mike Smith. Dacă, totuși, spun eu, hei, baza de date, indicele primul câmp nume, atunci va face ceva crescatorului și să sprijine ceva cum ar fi căutarea binară. Probabil că nu e binar de căutare per se. Baze de date au tendința de a utiliza un alt structură de date denumită b-arbori, nu trebuie confundat cu arbori binari, că doar face mai rapid pentru a căuta ceva logaritmică în natură. Dar prețul pe care îl plătiți pentru a construi acel caracteristică, această structură de date în memorie, este mai mult octeți. Așa că s-ar putea lua unele megaocteți, unii gigaocteți, cine stie? Depinde de date. Deci, la un moment dat, va trebui să decidă, probabil că nu este un caz comun. Deci, care sunt reale comune cazuri, dacă ați avut într-adevăr să aleagă, ceea ce ar putea fi câmpurile tale preferate? E-mail. Și îmi place e-mail deoarece e-mail, în teorie, ar trebui să fie unic. Și așa de obicei, atunci când știi în prealabil, că unul dintre câmpurile este sau va fi unic, că tinde să fie un domeniu bun să caute mai departe, pentru că în acest fel, când căutați ceva, vei primi înapoi unul sau zero, răspunsurile și apoi ați terminat. Tu nu trebuie să țină în căutarea încă altele. Și astfel, în acest caz, de aici, e-mail, atâta timp cât nu se poate înregistra de două ori cu același e-mail, este unul bun. ID-ul prin definiție, în informatică mondială, daca vorbesti despre un ID-ul, ce a fost mai bine să fie unică. Asta e un fel de conotație de identitate sau identificator. Și restul dintre acestea ar putea fi, să le spunem frumos să avuți, dar nu într-adevăr necesar. Și așa mai departe într-o bază de date, specificați indexurile, dar poate fi chiar mai precis. Se poate spune, hei, baza de date, asigurați-vă că că fiecare ID-ul în acest tabel este unic. chiar nu lasa un programator a pus din greșeală într-un e-mail duplicat sau duplicate număr de identificare. Atât de mult ca enums ne protejează în mod similar, tu pot avea acele apărare de nivel inferior. Și astfel, proiectarea bazei de date, în un anumit sens, este un fel de distracție, pentru că ai făcut-defensiv. Tu un fel de presupun că cu programatori oribil și doriți să puneți în cât mai multe de apărare după cum puteți pentru a proteja datele, dar în același timp doriți pentru a le ajuta să funcționeze mai bine prin alegerea care câmpuri pentru a optimiza. Dar nu se poate face acest lucru în mod necesar în un vid ca și cum am cam aici. Trebuie să știi ce sunt aceste cazuri comune fiind. În cazul în care dezvoltatorii sunt punerea în aplicare a unei adrese de carte, s-ar putea foarte bine doriți să fie în măsură pentru a căuta pe aproape orice domeniu, doar prin natura cererii. Deci, poate că ai cheltui acel spațiu suplimentar. Corect, orice întrebări? Da. AUDIENTA: [inaudibil] DAVID MALAN: Nu. AUDIENTA: [inaudibil] DAVID MALAN: OK. AUDIENTA: [inaudibil] DAVID MALAN: Oh, deci noi vorbesc într-un mod acum e complet limba agnostic. Deci, noi vorbim acum despre baze de date relaționale mai general, sau SQL baze de date mai general. AUDIENTA: [inaudibil] David MALAN: Un cuvânt mai bun de a utiliza este, poate fi folosit de orice limbă. Deci, eu pot scrie cod JavaScript, C cod, cod C ++, cod Java, cod Ruby, toate care vorbesc cu un baza de date și executați interogări. De fapt, asta nu e un rău segue la un exemplu de interogare. Și din nou, nu vom intra în Java sau C ++ sau la oricare dintre care mai sunt, dar, în SQL, limba în care păstrez referindu-se, Limbaj de interogare structurat, acest lucru în sine este un limbaj de programare, dar este menit să fie utilizat pentru, nici surpriza, structurate interogări de interogare. Prin asta vreau să spun asta. Modul în care selectați date dintr-o bază de date MySQL este să tastați literalmente în programul tău ceva de genul select stele din utilizatori. Sunt presupunând că acest tabel, de acum înainte se numește utilizatori. Aș putea numi orice vrem, dar acest tip de sens. Și așa selectați este un foarte verb comun, dacă aveți va fi, în SQL, care literalmente face asta. Ce crezi stele înseamnă că, în acest context? AUDIENTA: [inaudibil] David MALAN: Îmi pare rău? AUDIENTA: [inaudibil] DAVID MALAN: Nu este necesar, este mai cuprinzătoare decât atât, de fapt. Este caracterul wild card. Stea aproape întotdeauna înseamnă ceva, astfel încât acest lucru înseamnă că, în acest caz, selectați totul din baza de date. Așa că, atunci când spun asta, mă refer Dă-mi înapoi în fiecare coloană de la masa mea a sunat de utilizatori. Deci, da-mi un set de rezultate, așa cum se numește. Cu alte cuvinte, da-mi o copie după foaie de calcul, este ceea ce am să ajung. Dar, dacă am spus selectați stele de la utilizatori în cazul în care ID-ul este egal cu 1, cât de mare ar trebui setul meu rezultat să fie atunci? Sau echivalent, cât de multe rânduri ar trebui să Am fi dat înapoi de la baza de date? Probabil doar unul, dacă am într-adevăr, tratat ID ca un identificator unic, iar dacă David are acel ID unic, am ar trebui să se întoarcă unul și numai un singur rând care conține toate informațiile lui David. În cazul în care am spus acest lucru în cazul în care ID-ul este egal cu 99, ar trebui să mă întorc, în acest context, zero rânduri, cel puțin în acest moment. Cu toate acestea, dacă nu-mi pasă cu adevărat despre toate aceste informații, Aș putea spune doar, unde locuieste David? Selectați codul poștal din în cazul în care utilizatorii ID-ul este 1. Acest lucru se va alege numai mie zip lui David cod și nu totalitatea acel rând. De ce s-ar putea face acest lucru în loc de interogarea stele, wild card? AUDIENTA: [inaudibil] DAVID MALAN: Da, am putea avea nevoie doar ea. Așa că performanța este din nou răspunsul aici. De ce să ceri mai mult informații decât aveți nevoie, pentru că, chiar dacă este bine împreună, încă mai trebuie să copiați datele respective, s-ar părea, din baza de date în programul tău într-un fel, și asta e doar o prostie dacă ai au nevoie doar cinci dintre aceste cifre, nu totalitatea rândului. Deci, cum pot insera un utilizator? Să presupunem că un utilizator are doar înregistrată pentru prima dată. Sintaxa ar arata de obicei asa. Se introduce în utilizatori și atunci am spune valori, și atunci vom putea spune valori cum ar fi, să zicem, Lauren Scully, Videographer nostru chiar aici. Iar câmpul următor este de gen. Deci, vom spune citat, unquote "F", atunci avem un act de identitate și am de gând să say-- să pretinde că ea nu e de fapt aici, deci vom derula în poveste. Așa că 2 va fi ID-ul ei. Și apoi câmpul următor aici este e-mail ei. Așa că va fi ca Lauren Scully și așa mai departe, și vom dot doar dot dot-l departe de aici. Acum, ea va primi un pic plictisitor, dar inserați interogarea ar arăta în cele din urmă ca asta. Dacă vreau să scap de Scully, uh-oh, să radieze ei, ea șterge contul ei, șterge de la utilizatori în cazul în care ID-ul este egal cu 2, va scăpa de Scully. Sau pot să spun utilizatorii de actualizare set, să zicem, ce am putea schimba? Să presupunem că ea se mișcă. Set zip este egal cu 021-- nope, asta e zip ei curent. 90210. Singurul alt cod postal Știu că în lume. Astfel că s-ar schimba zip ei code-- de fapt, care nu s-ar schimba codul ei poștal. Ce am făcut? Chiar dacă sintaxa este, probabil, nou. AUDIENTA: [inaudibil] DAVID MALAN: Da, m-am mutat toată lumea Beverly Hills, California. Deci ar trebui de fapt în cazul în care spun ID-ul este egal cu 2. Si asa mai departe. Așa că SQL este despre toate acestea tipuri de instrucțiuni. Selectați, insera, șterge, actualiza, cu aceste predicate la sfârșitul anului aceste clauze în cazul în care, ca să spunem așa. Și acolo e mult mai poți face, dar de fapt doar se reduce pur și simplu, în cazul în care arcanely, exprimând ceea ce doriți ca baza de date pentru a face. Apoi baza de date va da seama, atunci când inserați Lauren Scully în bază de date, în cazul în care să-i pună în memorie astfel încât să putem obține foarte repede ei pe baza adresei de e-mail ei sau în funcție de numărul ei de identitate sau altele asemenea. Da, Dan. AUDIENTA: [inaudibil] DAVID MALAN: întrebare foarte bună. Se va schimba aceste script-uri de la Microsoft Access la Oracle la MySQL la PostgreSQL? Răspunsul scurt este depinde. Teoretic, există o foarte subansamblu comun semnificativ de SQL care este distribuit în toate din aceste implementări. Cu toate acestea, diverși producători au adăugat caracteristici la bazele lor de date pentru a face anumite lucruri dincolo de domeniul de aplicare al acestor caracteristici, care ar putea, de fapt, pauza. Așa că modul în care dezvoltatorii speculative împotriva acestui fapt, este că, mai degrabă decât scris prime cod SQL am scris aici, ei folosesc în schimb o bibliotecă, o bibliotecă comună care se este un fel de mare de nivel și rezumate departe pe care produsul pe care îl utilizați. Și vă oferă Funcții și proceduri pentru a apela, astfel încât să nu de fapt, scrie SQL brut. În teorie, atunci, aveți posibilitatea să modificați produse de la Oracle către Microsoft sau invers sau orice altceva altfel, și tu literalmente schimba nimic despre codul. Realitatea, însă, este, uneori, tu renunțe la caracteristici ca rezultat. Este posibil să fi ales un produs, deoarece ea are aceste caracteristici cu valoare adăugată, și tu nu ești doar acum folosindu-le în mod conștient. Și anecdotic, cele mai multe companii au tendința niciodată să se mute departe de baza lor de date. Așa că în timp ce acest lucru este un frumos pentru a au caracteristica, realitatea este, dacă sunteți reparații capitale baza de date, ești ceea ce face, probabil, ciorchini de alte modificări oricum, că tu nu neapărat trebuie să anticipeze că. Deci, e fără îndoială supra-inginerie problema, dar într-adevăr depinde de context. Dar, în teorie, SQL este partajată peste aceste produse diverse. întrebări foarte bune. Da. AUDIENTA: [inaudibil] DAVID MALAN: Da, așa vă puteți gândi o bază de date este doar un server, la sfârșitul anului a doua zi, și în interiorul acelui server este un întreg buchet de tabele, rânduri și coloane. Iar atunci când trimiteți o interogare ca aceasta din program, site-ul dvs., scris în Java, Ruby, Python, oricare ar fi, serverul care primește această comandă și interpretarea în literalmente în același mod am discutat mai devreme, cu limbi interpretate, și apoi efectuarea unor anumite acțiuni de zero sau mai multe rânduri în zero sau mai multe tabele. AUDIENTA: [inaudibil] DAVID MALAN: Exact, exact. Asa ca pseudocod pentru ceva ca asta ar putea fi acest lucru. În fișierul PHP sau tău fișier Python sau fișierul Java, ai avea codul pseudocod, sau Zgârieturi, cum ar fi blocuri, în cazul în care vizitele utilizator acme.com/register~~V pentru prima dată, apoi se introduce în utilizatori și așa mai departe. Si ne-ar traduce asta cod mai concret, în cele din urmă. Dar, într-adevăr, avem toate blocurile de aici, chiar dacă suntem sărind peste unele din etapele de punere în aplicare. Deci să-mi găsesc vina cu ceea ce noi minunat a făcut doar acum un moment. Ați creat o destul tabel complet pentru utilizatori. Desigur, am putea pune în aplicare ea în câteva moduri diferite, dar ne-au condus, de fapt jos path-- și vă spun eu, dar este, probabil, fault-- mele de o destul implementarea bazelor de date ineficiente. Nu este normalizat. Și prin normalizat mă refer acolo va fi, a lungul timpului, o concediere semnificativă, și, prin urmare, ineficiența, că este risipă de spațiu. Bazat numai pe ceea ce vezi aici, poate întrevezi în cazul în care această risipă de spațiu va veni din, în timp, ca mai mulți utilizatori înregistrați pentru site-ul dvs.? Ce date ar putea deveni redundante? AUDIENTA: [inaudibil] DAVID MALAN: De ce vrei să spui asta? AUDIENTA: [inaudibil] DAVID MALAN: Da. Și să presupunem în scopurile de astăzi că acest lucru este adevărat. Se pare că, și am învățat acest lucru calea cea mai grea, care nu este adevărat. Cumva mai multe orașe au, într-un fel, același cod postal, care rupe această intuiție minunată. Dar, să presupunem că e adevărat, pentru că este aproape întotdeauna adevărat. Astfel încât să presupunem că un cod poștal este întotdeauna asociat cu același oraș și de stat, care este un fel de presupunere rezonabilă, dar incorect, se pare. Dar, o presupunere rezonabilă în scopuri de azi. Apoi să presupunem că eu locuiesc în Cambridge, MA, conform tabelului acestui utilizator, și să presupunem că Lauren Scully trăiește în Cambridge, MA, și să presupunem că Kareem locuiește în Cambridge, MA, și Arwa trăiește în Cambridge, MA, noi toți în 02138. De ce ne amintim Cambridge, MA, 02138 pentru toți cei patru dintre noi? Ce ar fi suficiente să-și amintească? AUDIENTA: [inaudibil] DAVID MALAN: Doar codul poștal. Doar că 02138 există, deoarece Știi ce am putea face? Am putea obține un pic de fantezie aici și aici, definiți un alt tabel în cazul în care acest lucru se va fi cel mai numele, acest lucru va fi tipul, acest lucru se va fi cel mai lungime, și de acum înainte, eu sunt O să sun tabelul meu de orașe. Acest lucru a fost numit, de Desigur, masa mea de utilizatori. Și ce ar trebui să pun aici pentru masa mea de orașe, nu crezi? AUDIENTA: [inaudibil] DAVID MALAN: Da. Așa că zip și de stat și oraș. Și așa tipul de aici, vom spune acest lucru va fi un char 5 din nou, sub rezerva dezbaterii anterioare. Acest lucru va fi un enum, probabil, cum ar fi înainte, și orașul va fi un varchar 50. Si acum ce pot obține să șteargă din acest tabel pentru a elimina această ineficiență? AUDIENTA: [inaudibil] DAVID MALAN: Nisa. Stat și oraș pleca, așa că am acum a eliminat potențial ineficiența pentru redundantă amintindu-și, Cambridge, MA, Cambridge, MA, Cambridge, MA, Cambridge, MA, care, sperăm nu va ieși niciodată să se schimbe. Și chiar dacă o face, este minorly enervant, acum că trebuie să se schimbe ea în mai multe rânduri, întrucât aici, aș putea doar schimba-l într-un singur loc. Acum, ce-trade-off, poate? Acest lucru a fost super convenabil. A avut toate datele mele frumos împreună. Dar ceea ce este în mod clar cazul acum? AUDIENTA: [inaudibil] DAVID MALAN: Exact, și eu sunt bucur că ai folosit cuvântul se alăture, pentru că este de fapt cuvântul cheie, în lumea bazelor de date relaționale în SQL, este un cuvânt real pe care îl s-ar putea introduce sau cel puțin să transmită. Și, de fapt, ceea ce avem acum să facem pentru a selecta informații complete a lui David este ceva de genul select stele din utilizatorii, se alăture orașe, on-- și acum Mă duc să se mute doar la o a doua linie astfel încât această users.zip fits-- este egală cities.zip, unde users.ID este egal cu 1. Deci ce se întâmplă? Este urât, dar vă puteți fel de citit la stânga la dreapta, de sus în jos. Selectați stele de la utilizatori este la fel ca înainte, dar nu e de la utilizatori, per se. Este de la utilizatori se alăture orașe. Ce sunt eu care unește aceste două mese? Ei bine, aparent, tabele de utilizatori domeniu zip, iar această perioadă este doar specială sintaxa pentru a exprima această idee, iar acest lucru este tabelele de orașe zip câmp. Vreau ca cei doi să fie egal, dar vreau să selectați în cele din urmă numai acele rânduri în cazul în care ID-ul în tabelul de utilizatori este egal cu 1, care sa întâmplat să fie a mea. Și ca să fie clar, o programator, de obicei, atunci când hardcode ceva de genul numărul 1, pentru că în caz contrar numai site-ul sprijină David sau primul utilizator, s-ar face în schimb ceva de genul ID-ul, în cazul în care aceasta reprezintă o variabile, ceva ce se poate modifica în timp, similare în spirit la ceea ce am spus mai devreme cu aceste tipuri de Substituenți. Dar pentru acum ne vom hardcodati la fel ca și 1. Și ce înseamnă asta? Ei bine, un mod frumos de a vizualiza acest lucru este că, dacă această mână este masa de utilizatori, iar această mână este fermoare masa, suntem un fel de finding-- și vârfurile degetelor mele sunt ZIP aici, iar vârfurile degetelor aici sunt zip, tu ești un fel de ea inter-blocare astfel încât să obțineți înapoi rezultați tabelul original, înscriindu-adevărat cele două mese pe teren comun. Și nu trebuie să fie zip. Ar putea fi mai nimic altceva, dar zip este frumos, pentru ca unul, este scurt, doi, este intotdeauna aceeași lungime, deci nu există o eficiență reală a ceea ce Olivier a propus aici cu factoring afară zip, și [Inaudibil] propune ca să scăpăm din oraș și state. Deci, acesta este procesul cunoscut sub numele de normalizare. Orice întrebări cu privire la asta? Ei bine, lasă-mă să subliniez acest lucru este genul de lucruri, chiar dacă este destul de nivel scăzut, această discuție, pe care le-ar crede tu esti un fel de a obține a pierdut în buruieni, aceasta este o manifestare de ample oportunitate pentru dezvoltatorii de a fi rău. Și, de fapt, chiar și atunci când, în cursurile pe care le-am învățat, când am avut, de exemplu, lipsit de experiență programatori de licență construi site-uri web, la prima vedere, site-urile ar putea arata grozav. Și ei au toate funcționalitate am solicitat, dezvoltatorii au făcut o treabă bună. Dar ei nu au știut neapărat suficient despre proiectarea bazelor de date sau ei nu cred greu suficient despre tipurile de date precum și tipurile de utilizatori finali site-ul a fost de gând să aibă, și vom găsi, apoi, șase luni mai târziu, după ce au absolvit sau mutat, că la naiba, site-ul nostru este într-adevăr, într-adevăr lent. Și eu nu sunt nici măcar vorbesc despre a avea milioane sau mii de utilizatori. Vreau să spun câțiva utilizatori sute în campus, toți aceștia ca, spre exemplu, magazin pentru cursuri la în același timp, ei sunt folosind acel catalog curs de cerere am menționat iar lucrul este cu adevărat obtinerea lent pentru că nu au existat indici. Nu au existat stele roșii, astfel încât să vorbesc, sau nu am avut în mod necesar luat în date comune obține unele economii de spațiu. Așa că atunci când un dezvoltator verificare sau o persoană bază de date sau altele asemenea, genul de întrebări să se gândească este chiar, atunci când revizuirea codului cuiva, să spun, nu arata neaparat prin toate codul lor, dar spun, să ne uităm prin tabelele bazei de date. La ce te stocarea? Și apoi să spun, bine, așteptați minut, de ce sunt utilizați un număr întreg? Ce se întâmplă dacă avem 4 miliarde și 1 din aceste rânduri? Și aceste tipuri de întrebări este o oportunitate la fel de a împinge înapoi și obține un sentiment de, în cazul în care dacă nu sunteți confortabil face aceasta, având în cineva mai tehnic pune aceste întrebări, dacă este sau nu persoana care stie cu adevarat lucrurile lor. Și acest lucru este genul de chestii, de asemenea, că oamenii pe internet, care sunt auto-didact, poate să învețe mai puțin frecvent, pentru că tu nu vin neapărat peste ea la fel de mult, pentru că puteți obține baza de date și să fie difuzate, dar cu excepția cazului în care le-ați citit pe tutoriale sau a fost a spus despre normalizarea bazei de date și indexare și performanță, acestea sunt tipurile de lucruri care sunt de gând să te rănesc. Si s-ar putea crede, sau un inginer prost s-ar putea spune, oh, bine, am un salariu mai bun pentru o bază de date mai mare sau o bază de date mai rapid sau pur si simplu arunca bani la asta, scara verticală, nu neapărat acest lucru. Dacă te duci in-- și puteți merge în după fact-- și adăugați indici, și poate dura câteva ore pentru bază de date pentru a construi date noi structura pe care am făcut aluzie la mai devreme, puteți rezolva în continuare acest lucru după fapt, că acest lucru este în cazul în care vă începe să distingă designeri bune de la rău designeri, nu doar estetic, dar performanță înțelept, de asemenea. Alte intrebari? Nu? Deci, pentru NoSQL, care era celălalt tip de baze de date la care am făcut aluzie mai devreme, nu aveți rânduri și coloane. In schimb, ai avea ceva care arată un pic mai mult ca asta. Am de gând să utilizeze sintaxa comună. acolade se întâmplă să fi folosit aici destul de mult. S-ar putea avea ceva cum ar fi primul nume este David, s-ar putea avea ultimul Numele este Malan, citate, s-ar putea avea ID este-- scuzați-mă, ID-ul whoops-- este 1, e-mail este malan@harvard.edu, iar eu nu voi deranja tastarea restul, și apoi unele alte lucruri. Cu alte cuvinte, acest lucru este o reprezentare textuală ceea ce noi numim în general un obiect într-un program de calculator. Si un obiect este, în general, doar o colecție de perechi de valori-cheie. Deci, din nou, această temă recurentă. Am văzut perechi de valori-cheie în HTML, am văzut perechile de valori-cheie acum în contextul bazelor de date, iar noi a văzut perechi de valori-cheie în contextul de, cred că, o limbă mai devreme. Păstrează vine. Și într-adevăr, asta e într-adevăr ce date se reduce la, date și metadate sau valori și chei, respectiv. Deci, un non-relațional bază de date, pe bază de ceva pe obiecte, în cazul în care doar se strange in grupuri totul împreună și puneți-l în memorie, ar fi în general imaginat ca, sau gândit, așa cum acest lucru. Și eu voi părăsi asta acum ca un fel de abordare alternativă. Și unul nu este în mod necesar mai bine decât celelalte. De fapt, foarte mult în vogă aceste zile sunt sisteme de baze de date cum ar fi MongoDB și Redis și câteva alte astfel de instrumente, disponibile în mod liber, dar ele sunt din ce în ce în vogă. În parte, deoarece acestea oferă suplimentare caracteristici peste aceste abordări tabelare, dar, de asemenea, pentru că acestea sunt un pic mai ușor de utilizat, pentru că nu trebuie să se gândească la fel de greu despre o mulțime de aceste decizii de proiectare. Așa că plusuri și minusuri. Așa că dați seama că există opțiuni dincolo de ceea ce tocmai ne-am petrecut timpul pe. Așa că hai să facem acest lucru. Hai să tranziția un pic înapoi acum la programare web, astfel încât să un fel de a încheia astazi cu ceva asta e un pic hands-on, de umplere în unele lacune de ieri. Lasă-mă să merg la această primă. Așa că amintesc că ieri am avut unele HTML canonice pagini care inițial au avut, numai HTML, iar apoi a avut CSS doilea rand, foi de stil în cascadă. Aceasta este o nouă etichetă pe care nu am făcut-o a se vedea ieri, sau locuiesc pe, așa-numitul script tag-ul. Se pare că de fapt puteți încorpora un limbaj numit JavaScript în aplicațiile web pagină și a face dvs. de web pagini de a face ceva. Deci ce vreau sa spun prin asta? Ei bine, lasă-mă să merg mai departe și doar împrumuta acest cod pentru un moment. Mă duc să intru în Cloud9, nu este nevoie pentru a merge acolo voi încă, și am de gând să sun acest alert.HTML. Am de gând să lipiți în dosarul meu aici. Și doar pentru a clarifica ceea ce am făcut, să mă să merg la această adresă și du-te pentru a alerta, și veți vedea lumea Bună ziua. Dar acest lucru este un fel de underwhelming. vreau sa fac ceva un pic diferit. Așa că am de gând să fac de fapt acest lucru. Mă duc să intru aici e, și între etichetele mele de script, spune de alertă ( "Bună ziua, lume"); astfel încât Notă este un pic neglijent, dar am HTML, în interiorul căreia este limbaj numit JavaScript, și aceasta este ceea ce se numește funcția de apel sau o procedură de apel. Acesta este un verb, literalmente, în acest caz, și am invoca funcționalitatea de cod că altcineva a scris. Astfel că funcționalitatea este un alertă, deci să mergem la această pagină acum și faceți clic pe reîncărcare, și acum a se vedea un pic de interactivitate. Este un fel de școală veche și urât. Acest tip de voi aduce aminte de pop-up-uri, probabil, de odinioară dar a făcut ceva un puțin mai programatic. Așa că mai mult decât atât, să facem ceva mai interesant. Lasă-mă să intru aici și a scăpa de acest lucru. Și mă duc să merg mai departe și a crea o formă așa cum am făcut-o ieri. De fapt, tu ce știi? Mă duc să intru în google.html, pe care noi a început ieri, care arata ca acest lucru, prin care am căutat pisica Dar, observa că există un fel de bug în versiunea curentă. Acesta funcționează pentru pisici, dar să presupunem că Eu nu cooperează și am nimic de tip, și pur și simplu fac clic pe submit. E cam de un comportament ciudat. Mi-a luat la Google reală, nu mi-a dat un mesaj de eroare. Aș vrea să le spun utilizatorului trebuie să ne dea o valoare. Deci, cum s-ar putea să facem asta? Ei bine, lasă-mă să mă întorc în Cloud9 și lasă-mă să intru în partea de sus a paginii mele și se adaugă o etichetă de script ca aceasta, în cazul în care Am de gând să scrie un cod JavaScript. Si eu voi face următoarele. În cazul în care (document.getelementByID-- și rechemare că am vorbit despre asta mai devreme, această funcție. Ce ID-ul nu vreau să ajung? Vreau să ajung q, și voi să zicem este egal cu nimic, cum ar fi astea-- de fapt, lasa-ma sa folosesc ghilimele duble doar pentru consistency-- este egal cu nimic, apoi alert ( "Vă rugăm să introduceți o interogare") aici. Așa că am ceea ce pare a fi ceva ca o condiție. Am mai văzut această idee generală în Scratch. Este ca unul dintre acele puzzle piese care arătau ca acest lucru. Și ce spun? Ei bine, aici jos, observați că sunt O să facă următoarele. Mă duc să dau acest formular câmp nu numai un nume de q, care este ceea ce devine trecut la Google, dar eu sunt O să-i dea un identificator local, De asemenea, numit q. Dar, aș putea numi asta am nimic doresc, mă duc să-l păstrați simplu și, de asemenea, numesc q, doar pentru simplitate. Și acum am de gând să fac ceva un pic mai mult. Pe câmpurile de formular aici, voi add ceea ce se numește o tratare a evenimentului. Pe submit, vreau să sun o funcție numită validați. Aceasta nu există încă, acest lucru cuvânt, sau acest verb Validați, pentru că ceea ce am de gând să fac aici este acum adăugați un cod. Am de gând să spun funcția validați. Voi indentare acest lucru și se adaugă un alt acoladă aici și altul aici. Luați în considerare ceea ce acest lucru se face acum. Am now-- gândesc la acest lucru ca a creat meu propria piesă de puzzle care nu a făcut anterior există, și l-am numit acest puzzle piesă piesa de puzzle valideaza. Scopul său în viață este de a executa cele patru linii de cod in interior. În cazul în care document.getElementById asa conceptual, care va intra în elementul, elementul HTML al cărui unic Ideea este doar q, iar apoi chiar dacă sintaxa arată un pic ciudat, că egal este egal înseamnă pur și simplu la egal la egal. Deci asta înseamnă că, dacă elementul respectiv cu identificatorul unic al q, atunci când ajuns, nu are nici o valoare, doar egal cu citat unquote, nimic acolo, atunci ce vreau să fac? Vreau să țipe la utilizator. Și nu vom merge detaliu aici. Mă duc să se întoarcă false. Aceasta este o eroare. Altfel, am de gând să se întoarcă adevărat. Deci, fie ea a lucrat sau nu a făcut-o. Fals sau adevărat. Și acum, dacă n-am făcut nici o greșeală, lasă-mă să salveze și reîncărcați asta. Și lasă-mă doar dublu control prin care Nu am, de fapt, a face orice greșeli de tipar, așa că nu ma fac de ras. Hai să vedem dacă asta funcționează. Așa că acum am de gând să tastați pisici. Încă mai funcționează, sau jumătate de lucrări, cel puțin. Acum, lasă-mă să-l reîncărcați, și acum să mă încercați să trimiteți fără a introduce anything-- la naiba, sa rupt. Un moment. Lasă-mă să deschid consola, [Inaudibil] jurnal, reîncărcați pagina. Lasă-mă să încerc acest lucru din nou. Oh, la naiba. Am uitat. Am făcut o greșeală de scriere. Îmi amintesc ce este. .valoare. Am vrut sa spun daca valoarea a elementului a cărui identitate este q este egal cu asta, apoi tipa la utilizator. Deci, acum lasă-mă din nou, țineți respirația. Începem. Acolo mergem. Vă rugăm să introduceți o interogare. Așa că nu mă lasă prin. Pot fi un fel de jucaus cu acest lucru, și în loc de verificare pentru nici o valoare, Pot să spun ceva de genul, nu mai căutați pentru pisici, iar acum putem lăsa mai jucăuș căutarea de utilizator pentru câini în cazul în care el sau ea vrea, sau dacă mă duc aici și caută pisici, acum nu mai pot. Deci, ce-i MENIUL aici? Așa că unul, am introdus în lumea noastră de HTML și CSS, funcționalitate de programare. Pot de fapt acum să ia decizii în cod. Anterior, tot ce am putut face este de a marca conținut text sau conținut grafic și spune ce să se uite cum ar fi și în cazul în care să fie afișate. Acum pot să întreb de fapt întrebări ale paginii web și să ia decizii bazate pe pe ea, și cere utilizatorului dacă am nevoie să țipe la el sau ea. Așa că hai să încercăm ceva pe cont propriu cu asta. Hai, lasă-mă să deschid următorul slide aici, și doar un singur lucru subliniez. La fel ca și cu CSS, putem lua în calcul afară codul nostru JavaScript într-un fișier separat, puteți face același lucru cu JavaScript ca și cu CSS. Și utilizați că utilizând o sursă atribut tag-ul script-ul. Dar nu vom complica lucrurile de acum. În schimb, dacă ai putea du-te la nu această pagină, dar-- lasă-mă să se deplaseze în jurul valorii de acest lucru în order-- du-te la, dacă ai putea, această pagină aici. Această adresă URL aici. Este în slide-uri de azi. S-ar putea să reîncărcați deoarece Am adăugat un cuplu de lucru. Dar du-te acolo în cazul în care unele puzzle-uri așteaptă. Și acest lucru ne va da o șansă, într-un context ușor mai distractiv, pentru a se ocupa cu unele JavaScript. Iar când ajungi acolo, Voi explica ce așteaptă. A lua verde. Set albastru. Seturi verde, seturi de culoare roșie. Oops. Scuze. Acesta este gradul nostru documentație pentru această provocare. Și acest lucru va funcționa după cum urmează. Deci, ce ai pe această pagină este un întreg buchet de puzzle-uri de imagini de către un amic la Universitatea Stanford. Așa că ceea ce vedeți aici este aproape un fel de una dintre acele puzzle-uri ochiul magic, dar dacă pur și simplu te uiți la ea, nimic nu va ieși la tine. Mai degrabă, este ceva ascunse în această imagine. Și, dacă este ascuns în felul următor. Imagini, după cum probabil știți, poate fi compusă din doar trei culori. Unele roșu, unele albastru, și unele verde. Si putem face toate culorile curcubeului prin amestecarea celor trei culori într-un fel. Deci, acest lucru arată în mare parte verde și albastru, dar, după cum spune Nick aici, această imagine puzzle de fier este un puzzle. Acesta conține o imagine ceva celebru, cu toate acestea, imaginea a fost distorsionată. Obiectul este celebru în valorile roșii. Valorile Cu toate acestea, de culoare roșie au fost toate împărțit la 10. Deci, ei sunt prea mici, cu un factor de 10. Cu alte cuvinte, Nick a luat o imagine originală, și el desaturated toate a roșu de la ea, scăderea cantității de roșu cerneală, dacă va fi, în ea. Valorile albastre și verzi sunt doar lipsite de sens, valori aleatoare, aka proiectat de zgomot să mascheze imaginea reală. Deci, ce Nick a făcut a fost el atenuat roșu și apoi el doar a aruncat la întâmplare cantități de albastru și verde la imaginea la fel de obscure ceea ce este de fapt încă acolo. Trebuie să anulați aceste distorsiuni pentru a descoperi imaginea. În primul rând, setați toate valorile albastru și verde la zero, pentru a le scoate din drum, si uita-te la rezultatul. Apoi multiplica fiecare valoare roșu de 10, scalarea înapoi până la aproximativ valoarea sa finală. Care este celebrul obiect? Așa că toți aveți acest dreptunghi în browser-ul dvs. chiar acum. Și observați că există unele Codul inițial, ca să spunem așa. Acesta este codul JavaScript care Nick a scris pentru tine. Și observați că există o linie în mijloc că începe cu o bară oblică slash, asta ceea ce se numește în general, un comentariu. Aceasta înseamnă că este o frază programator care nu are nici o semnificație funcțională. Este doar un reper vizual la om. Astfel încât să puteți merge mai departe și ștergeți doar acea linie, și fie super nu atent la șterge sau modifica orice altceva. Și lasă-mă să te plimbi prin ceea ce acest cod face și voi lăsa pentru a vă pentru a descoperi imaginea secretă. Această primă linie de aici că am doar vă oferă evidențiate următoarele. Pe partea stângă, ai ceea ce se numește o variabilă care Nick are în mod arbitrar, dar, în mod rezonabil numit im pentru imagine. Pe partea dreaptă a semnului egal, el spune da-mi o nouă citat, unquote "imagine simplu". simplă imagine, în acest context, este ceea ce se numește o clasă, ei bine, e ca un fel de class-- punct de vedere tehnic un prototype-- dar într-adevăr, acest lucru dă-mi un obiect nou, conținutul de care sunt fișierul, fier-puzzle.png. Cu alte cuvinte, Nick a creat această noțiune a unei simple imagini astfel încât să putem, pentru pedagogice scopuri, joaca cu imaginea și schimba roșu său, valori verde și albastru. Si cum facem asta? Această sintaxă oarecum criptic aici este un fel de bloc de repetare că unii dintre voi au văzut în Scratch mai devreme astăzi, în cazul în care vă puteți repeta de 10 ori. În acest caz, Nick nu are hardcoded un număr similar de 10. În schimb el spune, inițializat o variabilă numită x 0, verificați dacă x este mai mic lățimea imaginii. Și, ca să fie mai corectă, imaginea este cea variabilă, punct înseamnă du-te în interiorul acestuia și a obține lățimea sa, și apoi Paranteză deschis, închis Paranteză este doar modul de programator de a spune acest lucru este o funcție. Aceasta este o procedură. Aceasta este funcționalitatea altcineva a scris. Folosiți-l și dă-mi înapoi un răspuns. Și apoi x ++ este un mod de fantezie spunând: După ce ați făcut acest lucru o dată, incrementa x cu 1. Cu alte cuvinte, aceasta este modul un programator de a induce o buclă care este mergi la itera toate coloanele dintr-o imagine. O imagine este doar o grilă de puncte, rânduri și coloane de puncte. Aceasta este o modalitate de recapitularea peste toate aceste coloane. Și în interior, între timp, suntem iterarea peste înălțimile, aici și aici și aici. Deci, aceasta este doar o modalitate de traipsing, aproape ca o mașină de scris școală veche, pentru a merge puțin peste imagine de ansamblu iterativ. Chiar și asta nu e chiar în întregime clar, trebuie doar să ia pe credință pentru acum, că aceste trei linii de cod împreună sunt va permite sa arati iterativ la fiecare pixel, fiecare punct din imagine. Ce este un pixel? Ei bine, să fie clar, dacă ne uităm la original și mări, dacă ai pus într-adevăr ochii pe ecranul computerului, asta doar o grămadă de puncte, mai multe mii de puncte ambalate împreună acolo. Și ce sunt pe cale de a face? Fiecare dintre aceste puncte, o definiție finală, este rezultatul a ceea ce este în general numit RGB, roșu, verde, albastru, care din nou, pot fi combinate pentru a da orice număr de culori. De fapt, dacă vă amintiți de la mulți, acum mulți ani, ecrane de proiecție, cum ar fi aceste lucruri folosit pentru a avea nici un obiectiv, ci trei. Unul dintre ei a scuipat afară de lumină roșie, una dintre le-a scuipat afară de lumină verde, unul dintre ele scuipat afară de lumină albastră. Și, dacă ai fost într-o școală de mijloc ca și cum am fost în cazul în care acestea nu au fost niciodată aliniate în mod corespunzător, ați fost vizionarea de filme întotdeauna istorie care au fost ușor distorsionate, deoarece cele trei culori nu au fost care combină în mod corespunzător. Dar se pare că fiecare dintre aceste valori roșu, verde și albastru, poate avea un număr asociat cu ei. De exemplu, 0 pentru roșu înseamnă că nu roșu, 0 pentru verde nu înseamnă verde, și 0 pentru albastru înseamnă că nu albastru. Deci, dacă aveți nici un roșu, nici verde, și nici un albastru, ce culoare ai? AUDIENTA: [inaudibil] DAVID MALAN: Tu ar Sper, e alb. Din păcate, acest operates-- pare rău? AUDIENTA: [inaudibil] DAVID MALAN: Deci, de fapt, au negru, în acest caz. Deci, dacă aveți nici unul dintre acestea Culorile activate, aveți negru. Cu toate acestea, dacă aveți, să zicem o mulțime dintre ele, cum ar fi o mulțime de roșu, 255 din ea, o mulțime de verde, și o mulțime de albastru, care este de culoare albă. Deci, acestea sunt cele două extreme. Deci, prin această logică, dacă am o mulțime de roșu și verde, nu și nici un albastru, ce culoare este asta? AUDIENTA: [inaudibil] DAVID MALAN: Corect, evident. Și apoi nici roșu, mulți verde, nu albastru, și apoi dacă te have-- bine, vom termina doar ea, doar pentru că, dar acest lucru, desigur, acum, este albastru. Și acum puteți combina aceste culori. Acum, ca o parte, în cazul în care oricare dintre voi aveți făcut vreodată unele de design real site-ul, de fapt, s-ar putea vezi simboluri de genul asta. FFF-- și de fapt, este probabil, nici măcar asta. Este FFFFFF. Văzut cineva vreodată lui E F și și A through-- deci se pare, am vorbit ieri despre zecimal, și astăzi, un fel de aproximativ zecimal. Astăzi am vorbit despre binar. Se pare că, hexazecimal este un foarte Sistemul de bază comun pentru a utiliza în calcul. Binar este de două, zecimală este de 10, hex este de 16. Și se pare, cum puteți conta în hexazecimal? Zero, unu, doi, trei, patru, cinci, șase, șapte, opt, nouă, ce utilizați după nouă? Care este numărul următor? Am folosit deja la zero. Am nevoie de 16 dintre acestea. Zero, unu, doi, trei, patru, cinci, șase, șapte, opt, nouă, aveți nevoie de convenție arbitrară. Și ce omenirea a decis ceva timp în urmă că după nouă vine litera A și apoi B și apoi C. DECI ESTE POSIBIL modul în care conta în hexazecimal este zero, unu, doi, trei, patru, cinci, șase, șapte, opt, nouă, A, B, C, D, E, F, și că va conta tu tot drumul, se pare, la 15. Deci zero la 15 este zero, prin F. Acum, de ce este semnificativ faptul că? Ei bine, când ai două F, asta e modul în care exprima 255. Atât de mult timp poveste scurtă, în lumea Photoshop, că software-ul de design grafic, în lumea de dezvoltare web, în cazul în care aveți o mulțime de culori, desigur, să se joace cu, de multe ori programatori vor exprima cele în hexazecimal, doar pentru că ea tinde să fie un pic mai simplu. Chiar dacă la prima vedere este mult mai complexă. Deci, în orice caz, acest lucru este important pentru că Nick la Stanford ne-a dat șase bucăți de funcționalitate că, programatorii înmugurite, va avea acum posibilitatea de a utiliza. Construit în acest web pagină este șase funcții, șase proceduri pe care Nick le-a scris. Trei dintre ei veți primi un număr, un roșu, verde, sau o valoare albastră. Trei dintre ei vor stabili acea valoare. Și aceste subliniere sunt doar Substituenți, astfel încât trebuie să știi ce sunt alea. Deci, cu aceste trei funcții, prima dintre aceste lucruri va fi un x-coordonate, iar a doua dintre aceste lucruri va fi un y-coordonate. Cu alte cuvinte, care punctează, care pixel vrei să obțineți verdele, obține albastrul, pentru a primi roșu de. Și apoi aici, acest lucru va fi x, acest lucru va fi o valoare y, iar acest lucru va fi un număr. Așa că hai să facem primul line acestea împreună și apoi voi lăsa să vă pentru a încerca să deducă restul. Asa ca pe instrucțiunile Pe aceasta pagina, avem nevoie pentru a crește roșu cu un factor de 10, și avem nevoie pentru a elimina verde și scoateți albastru. Să începem cu acestea din urmă scenarii. Așa că, dacă vreau, și voi indentare prin utilizarea unor spații, dacă vreau să setați roșu, verde, sau valoarea albastră, Mă duc să fac următoarele. Imagine, im.setBlue, și apoi bazat pe instrucțiunile mele aici, ce trei lucruri ar trebui să tip în interiorul paranteze acum? Am nevoie de valoarea x ELE, valoare y, și ce număr ar trebui să pun aici dacă vreau să scap din senin, bazat pe această poveste aici? Doar zero. Dacă vreau nici un albastru, eu sunt doar O să-l schimbe la zero. Acum să recapitulăm ce acest lucru este de a face. Am aici pe aceste top liniile doilea și al treilea, Am susținut două bucle, bucle imbricate, dacă vă va, care vor avea ca efect de a progresa de la stânga la dreapta, de sus în jos peste tot x valorile și toate valorile y. Pentru că, din nou, o imagine este doar o grilă de rânduri și coloane. Deci, acest lucru se întâmplă pentru a obține scăpa de toate albastru. Lasă-mă să plece în următoarea linie pentru a tine. Cum pot să scap de toate verdele? AUDIENTA: [inaudibil] DAVID MALAN: Nisa. AUDIENTA: [inaudibil] DAVID MALAN: Nisa. Și voi depărta, și pur și simplu să ia de îngrijire de care nu ați făcut nici greșelile de scriere. Și dacă ești confortabil cu ceea ce ai făcut, mergeți mai departe și faceți clic pe butonul A alerga / Salvați și vedeți ce veți obține. Și din nou, ne-am făcut doar trei modificări. Am șters că mai întâi comentează și la înlocuit cu aceste două linii de cod. Și este în regulă, dacă aveți nevoie pentru a lovi butonul Run / Salvați câteva ori pentru a repara ceva. Și, de asemenea, permiteți-mi mări mea cod astfel încât să puteți transcrie. Bun. Văd că Andrew are ce pare a fi o greșeală. El tocmai a primit un mare negru dreptunghi pe ecranul său. Mai are cineva un dreptunghi negru mare? AUDIENTA: Da. DAVID MALAN: Big dreptunghi negru? OK, deci hai să ne gândim despre ce înseamnă asta. Noi am spus că la zero, zero, zero, astfel încât nici verde, nici roșu, nici albastru, este de gând să vă dau negru. Și se pare că de cele mai multe laptop-uri noastre pur și simplu nu au destulă fidelitate. Nu poți să spui acolo destul este de fapt ceva acolo. Și dacă ai un fel de poate apleca ecranul înainte și înapoi, Poate vezi o ceva acolo? Poate, un fel de, un fel de? Nu e perfect negru. AUDIENTA: [inaudibil] DAVID MALAN: spoilere! Există o anumită culoare roșie acolo, dar amintiți-vă de caietul de sarcini a problemei, Nick atenuat. El îl desaturated oarecum, dar nu tot drumul la zero. Deci, dacă vrem să mărească suma de culoare roșie, permiteți-mi propun acest truc. Permiteți-mi să măriți pe ecran. Și lasă-mă să merg mai departe și spun Suma este egală cu im.getRed (x, y). Această linie de cod dă-mi ceva numit o variabilă. Am arbitrar, dar, fără îndoială, în mod rezonabil numita variabila mea ceea ce, aparent? Cantitate. Suma doar. Aș fi putut să-l numit tot ce vreau, dar eu sunt folosind această altă funcție pe care am descris mai devreme pentru a obține cantitatea de culoare roșie la x virgulă y. De ce am făcut asta? Ce vrei să faci aici? Ai nevoie să add-- AUDIENTA: [inaudibil] DAVID MALAN: Da, poate se înmulțește cu 10. Și, dacă nu știi asta, sunt O să meargă mai departe și de a face acest lucru. Mă duc să merg mai departe și să zicem, vreau cantitatea de roșu Vreau să fiu orice este la roșu, ori 10, și steaua, asterisc dvs. pe Tastatura este the-- nu utilizați x. Utilizați steaua. Așa ai multiplica lucrurile în cele mai multe limbaje de programare. Așa că în conformitate cu intuiția lui Kareem, stocate în această variabilă numită sumă, este cât de mult roșu vreau la locația xy. Cum, acum, nu-i fac asta exprimate în pixeli au acel număr? Ați făcut deja acest lucru înainte. Ați setat verde și albastru la nici o valoare, la zero. AUDIENTA: [inaudibil] DAVID MALAN: Da, bine tu nu vrei să 10. Ai făcut deja calculele aici. Deci, suntem obtinerea de valoarea de roșu, care este un număr mic, probabil. Ne înmulțirea prin 10. Ce vrei să faci cu suma variabilă acum? AUDIENTA: [inaudibil] DAVID MALAN: Nisa. Deci, ce im.set--? AUDIENTA: setRed. DAVID MALAN: setRed, la locația xy. Da. Si doar suma. Cu alte cuvinte, o variabilă este un substituent temporar pe care le puteți pune orice vrei. Se întâmplă să fim o pune număr în ea, în acest moment. L-am înmulțit cu 10 pentru a face mai mare. Și acum înlocuind variabila ca și al treilea argument, sau de intrare pentru a stabili roșu. Și, astfel că, odată ce termin, și să ia notă din semi-colonul și paranteze. Mergeți mai departe și faceți clic rulați / salvați din nou, și tu ar trebui să vadă, în mod magic, ceea ce a fost de fapt Acolo. [? Arwa,?] Ce e acolo? Turnul Eiffel, cu drepturi depline roșu, nu destul de întuneric. ar trebui să fie mai evident acum, da? O.K. Andrew, caseta nu mai neagră? AUDIENTA: [inaudibil] DAVID MALAN: Bine. Așa că voi păstra acest lucru pe ecran. Dacă doriți ca să se joace cu acest mai târziu, voi recrea asta pentru tine. Dar, acest cod aici a făcut exact asta. De ce să nu facem o alta. Lasă-mă să defilați în jos ușor. Deci, în acest caz, proiectorul nu într-adevăr o fac justiție. Dar, pe ecranele, probabil au o cutie foarte roșu și foarte negru. Acest lucru, de asemenea, este un puzzle care arată ceva faimos. Cu toate acestea, imaginea a fost distorsionată. Adevărata imagine, de data aceasta, este în valorile albastre și verzi. Cu toate acestea, toate au fost împărțite cu 20 astfel încât valorile sunt foarte mici. Valorile roșii sunt doar numere aleatoare, zgomot. Anulați aceste distorsiuni pentru a descoperi imaginea adevărată. Așa că Nick atunci îți spune ce să faci. Setați valorile roșii la zero, și atunci nu strica ce este. Apoi se multiplica albastru și valori verzi cu 20. Așa că e aproape același program ca și mai înainte, dar tu esti o inversare a procesului. Și îmi voi pune codul meu de la înainte de pe ecran, în cazul pe care doriți să-l trimită la sau să se joace în continuare cu asta. Lasă-mă să mărești. Dar rezolva imagine de cupru puzzle, numărul doi. AUDIENTA: [inaudibil] DAVID MALAN: OK, deci asta sunt eu nu va da cat mai multe indicii. Așa că am would-- oh, hai a se vedea, ai o greșeală de scriere aici. Așa că ține minte, acest lucru aici de fapt, trebuie să meargă acolo. Deci, ce aș propune, dacă doriți să se concentreze pe asta, e răspunsul. Dacă doriți ca să transcrie asta, ar trebui să primească mai întâi o prelucrare. Și apoi puteți utiliza ca inspirație pentru al doilea. Frumos. Bun. Iar pentru curioși, acesta este un exemplu simplu o știință sau o artă numita steganografie, arta de a ascunde informații în imagini. De obicei, imaginile ar putea fi watermarked foarte ostentativ cu un logo în partea de jos colt, dar în mod clar, tu poate fi mult mai sofisticate cu privire la aceasta și de fapt ascunde alte imagini în imaginile într-un fel cu această tehnică. Dura încă 30 de secunde, iar apoi vom cel puțin anunțe ceea ce ar trebui să vedeți. Și eu voi părăsi a treia unul ca un exercițiu la domiciliu, dacă doriți mai mult de un provocare acest week-end. Și cred că Andrew s-ar putea au ajuns mai întâi. Care este a doua imagine, Andrew? Audiența: Statuia Libertății. DAVID MALAN: Statuia Libertății va fi răspunsul la această dată. Deci, din nou, doar câteva simplu exemple, al cărui scop este de a oferi un sentiment de modul în care le-am tradus Scratch în imagini blocuri pentru a mai enervant și mai mult cod complicat, dar toate ideile sunt în continuare exact la fel, deși cu introducerea acum a noțiunii de variabilă, fiind capabil de a stoca ceva temporar. Hai să facem mai mult de un hands-on, doar pentru a conecta puncte la ceva un pic mai mult lumea reală. Când sunteți pregătit, dacă ai putea du-te la această adresă URL de pe ecran. Asta e, de asemenea, în copie de către dvs. a slide-uri, developers.google.com/maps~~V. Hai să facem de fapt ceva reală, ca să spunem așa, pe web folosind Google Maps API, sau interfața de programare a aplicației, în felul următor. Google, la fel ca multe companii, oferă o mulțime de funcții gratuite pe care le puteți utiliza pentru a construi dvs. de aplicatii proprii interesante. De fapt, dacă v-ați folosit vreodată Uber pentru a obține un taxi sau o mașină, probabil știți că Uber are o hartă și arată mașinile pe ea. Aceasta este, la fel de cel mai bine ca pot spune, Google Maps API. Ele sunt, de fapt, folosind hărți Google, dar uber nu este o companie de cartografiere, și nici nu ar fi ca un problemă deosebit de interesant pentru a rezolva pe partea de sus a acestora problemă service auto. Și, astfel încât acestea sunt în picioare, din nou, pe umeri alții, Google în acest caz. Deci, ei folosesc hărți Google ci și propriul lor servicii de autoturisme și alte astfel de caracteristici. Așa că vom profita din aceasta pentru a face următoarele. Și, dacă am mers prea repede, sună-mă peste într-un moment. Fericit pentru a recapitula unele din lucrurile de imagine. Ar trebui să te vezi la o pagină ca aceasta. Așa că Google este frumos, și acestea sunt printre cele mai bune de a furniza nu numai API-uri, dar API-uri gratuite pe care le poate juca cu sau utilizați în comerț. Ele încep să vă taxăm în cazul în care utilizarea dvs. este mare, dar am mers înainte în avans și ne-a semnat pentru un cont gratuit că, sperăm, 10 calculatoare nu ne va descalifica dintr-o dată. Deci sperăm că acest lucru demonstrație va funcționa. Și observați că acestea au API-uri pentru Android, iOS, servicii web și aplicații web, oricare ar fi. Să ne concentrăm pe web. Așa că faceți clic pe roz caseta, web, și că vă va duce, sperăm, într-o pagină aici. Și au luat o grămadă de API-uri. Și poate fi un pic copleșitoare la început, dar voi ne conduce prin ceea ce ne dorim. În partea stângă sus este Google Maps JavaScript API, API-ul JavaScript. Deci, mergeți mai departe și faceți clic pe asta. Și asta te va duce acum la următoarea pagină, demo-uri și exemple de cod. Lasă-mă aici micșora. Și lasă-mă să ne sa-- defilați în jos unde se spune pași start rapid. Ecranul dvs. ar trebui să arate ca a mea. Și există doi pași, pentru a primi o cheie și să înceapă în curs de dezvoltare. Am făcut deja primul pas pentru ne, printr-o cheie așa-numitele. Și acest lucru este o idee comună. O cheie API este, în general, doar un număr aleatoriu mare sau un șir pe care se presupune pentru a lipi în codul, astfel că Google știe cine sunteți atunci când pe care îl utilizați serviciul lor, API-ul lor. Nu înseamnă că suntem fiind acuzat nimic. Și acum, faceți clic pe, în loc de unul, faceți clic a începe în curs de dezvoltare. Dacă ați putea să-mi val peste dacă nu sunt sigur în cazul în care ne aflăm. Deci, vom răzuibile doar suprafață, aici, dar ce Am crezut că ar fi convingătoare este de a avea de fapt noi toți, folosind Cloud9 într-o singură fereastră și acest tutorial într-o altă fereastră, vă permite să obțineți de fapt propria noastră aplicare și funcționare care conține un Google personalizat harta în propria noastră pagină web, și apoi se adaugă una sau două caracteristici. Dar vom răzuibile doar suprafață a ceea ce putem face. Deci, doar o verificare bun-simț rapid. Este toată lumea de la această pagină, Google Maps API JavaScript? Ar trebui să spun la început. Noi nu vom merge prin totul prin orice mijloace. OK, într-o altă filă, dacă nu au deschis, se duc în Cloud9 și du-te la doar o filă nouă, în cele din urmă. Deci, din nou, c9.io de ieri, c9.io, și pur și simplu a crea un nou fișier. Și mergeți mai departe și apel l oricum doriți. Am sunat map.html a mea. Sună-l ceva se termină în .html. Și ar trebui să fie aproximativ în cazul în care sunt în acest proces cu doar un prompt care clipește într-un gol tab-ul numit ceva de genul map.html. Sau fișier, nou fișier de această dată. Și acum, peste pe Google Maps API JavaScript, vom sări peste lectură prin toate acest text. Dar observați că lumea salut este într-adevăr, peste tot, tu-l vezi acum. Bună ziua lume are această mare colorat de exemplu, dintr-un întreg buchet de HTML. Mergeți mai departe și copiați și inserați numai că HTML, deci de tipul doc la partea de sus tot drumul la tag-ul HTML aproape, du-te înainte și copia toate that-- din nou, că e sub lumea salut example-- și inserați acest lucru în fila Cloud9, astfel încât acum ecranul ar trebui să arate cam ca a mea. Iar tu poți salva, dar nu-l încărcați încă. Hai să ne uităm mai întâi la codul și a vedea dacă am nu se poate deduce sau de a învăța de la ceea ce este Google a avut-ne copiați și lipiți orbește. Ei doresc doar pentru a ajuta, literalmente, să ne început, dar nu e atât de mult complexitate de fapt acolo. Orice întrebări cu încă? Suntem în siguranță pentru a merge înainte? O.K. Atât de repede, hai să facem unele verificări rapide. corectitudine Linie una din ceea ce am a se vedea, și, sperăm, vă a se vedea, ce înseamnă asta, DOCTYPE HTML? Kareem, amintesc? AUDIENTA: [inaudibil] DAVID MALAN: Da. Aici vine HTML 5. Între timp, linia doi pe ecran aici înseamnă browser-ul hei, aici vine HTML actuale. Linia trei este hei browser-ul, aici vine capul. Linia patru este, desigur, hei browser-ul, aici vine titlul. Ce face linia de cinci? De fapt, acest lucru nu într-adevăr face nimic pentru noi. În acest caz, doar redimensionează pagina unui implicit. Linia șase, nu am vorbit, dar specifică codificarea caracterelor. Există diferite moduri de a codifica fișiere, în special pentru limbi străine. UTF-8 doar tinde să fie implicit. Deci, acum vom vedea în linie șapte prin 16, unele CSS. Și chiar dacă nu ne-am mai văzut toate aceste lucruri, înainte, putem deduce un fel de. Așa că linia opt înseamnă, hei browser-ul, se aplică toate caracteristicile următoare la care două etichete, aparent? HTML si corpul textului. Astfel încât virgula este lucru nou acolo. Si asta e doar un mod de specificând mai multe tag-uri dintr-o dată. Apoi ne-am luat acolade. Așa că se pare că, acest lucru spune browser-ului, face înălțimea paginii 100%. Deci, chiar dacă există foarte puține conținut, face întreaga pagină, face lucrul umple pagina. Face harta în cele din urmă umple pagina. Marja de, ce înseamnă asta? Asta e, de obicei, cum ar fi arbitrar spațiu alb în jurul marginilor că unele designer de browser-ul doar a decis să fie acolo, deoarece un fel de face ca lucrurile arata mai curat. Dar noi nu vrem asta. Ne dorim ca harta merge tot drumul spre margini. Padding, similare în spirit marjelor. Marjele înseamnă exterior, mijloace de umplutură în interior, dar este același tip de afacere. Este un pic de un tampon între tine și marginile. Și apoi, linia 13 este un bun șansă pentru o scurtă trecere în revistă. Ce hartă semn ascuțit Adică, sau o hartă hashtag înseamnă? Ce înseamnă că se referă, în principiu? AUDIENTA: [inaudibil] DAVID MALAN: Exact. Această proprietate, această proprietate CSS se aplică doar un singur lucru, tag-ul HTML care are un ID de citat, unquote "harta". Iar acum să prezinte rapid, parcurgere până la partea de jos a fișierului, care nu este prea departe, și o notificare on-line 19, în cazul în care o lipiți exact cum am făcut-o, linia 19 are doar un div, care este diviziune a paginii, pe care ieri am numita o regiune dreptunghiulară. Nu are nimic în ea. Este o etichetă deschisă, aproape tag-ul. Dar are un ID unic. Deci, ce pare a fi se întâmplă aici este Google pregateste pagina noastra de web pentru a au o înălțime totală de 100%, și fără umplutură, fără margini, deoarece ceea ce vom pune înăuntru din acest div, a cărui ID unic este hartă, este o hartă încorporată actuale. Si vrem sa umple pagina și nu doar fie unele mic dreptunghi în mijloc. Așa că linia 14 subliniază, în mod similar, harta în sine ar trebui să aibă o înălțime de 100%. Deci, acum observați între liniile 20 și 28, acest lucru este codul JavaScript. Și acest lucru este, chiar dacă este sintactic un pic ciudat, acolo nu este tot atât de mult se întâmplă aici. În linia 21, acest lucru este de declarare ceva numit o variabilă. În loc de a numindu-l sume, așa cum am făcut-o mai înainte, noi spunem mai precis var, ceea ce înseamnă că doar variabilă. Am putea fi folosit ca in Codul lui Nick, dar el nu a făcut-o, așa că am nu sa deranjat să facă asta, fie. Este o variabilă numită hartă, și apoi există o funcție care este aparent numit initMap. Deci, acest lucru este ca propriul nostru personalizat puzzle piesă în Scratch. Am creat o bucată de functionalitate numita initMap, și puteți deduce un fel de ce se petrece aici. Pe partea stângă, avem o variabilă, așa că vom pune următoarele lucru în interiorul acelei variabile, de la dreapta la stânga. Pe partea dreaptă, spune, hei browser-ul, da-mi o nouă hartă Google. Si google.maps.map este doar un mod de funky de precizând că această funcționalitate face parte din Google Maps. După paranteze, le-am văzut acest lucru înainte, hei browser-ul, pentru a primi mi-elementele din pagina, tag-ul în pagină al cărei unic ID-ul este-- AUDIENTA: [inaudibil] DAVID MALAN: --map. Și ce se întâmplă, bine, această linie împreună, linia 23, este, în esență, spunând: hei browser-ul, du-te pe mine că div gol pe pagina a cărui ID unic este hartă, pentru că vreau să inserați în it-- injectați în ea, dacă ai will-- o grămadă de conținut care se întâmplă să vină de pe web, ulterior. Și Google face toate astea pentru noi. Deci, din nou, la sfârșitul zilei, avem acest exemplu de abstracție. Nu am nici o idee despre ce o hartă este sau cum să pună în aplicare un API hartă. Nu avem nevoie. Trebuie doar să spunem hartă în cazul în care să se pună, și se lasă cele care stau la baza punerii în aplicare Detalii la Google. Acum există aparent două bucăți de date că acest exemplu este oferind API Google. Se pare că centrul hărții, iar nivelul de zoom, ca să spunem așa. Si nimeni nu recunoaște aceste coordonate, latitudine și longitudine? Probabil că nu, dar putem merge înapoi la tutorial, literalmente a se vedea. Dar vom vedea în doar o clipă. Nivelul de zoom este o valoare între, eu nu fac știu, unul din 13 sau ceva de genul asta. Ea are doar de a face cu cât de departe ești mărire sau afară, și asta este. Și acum, la sfârșitul lui pagina, linia Notă 29-- este un pic urât, deoarece ea wraps-- această linie de cod este ceea ce le descarcă în browser-ul API-ul real al Google. Tot codul pe care la Google inginerii au scris că punerea în aplicare a toată această caracteristică a hărților incorporabile. Acum, să nu se schimbe nimic. În cazul în care sunteți în urma de-a lungul, mergeți mai departe și salvați doar acel fișier, dacă aveți într-adevăr, ceea ce am. Du-te la URL-ul său. Aveți posibilitatea să faceți clic pe butonul Executare în sus și de sus, care va spune vă adresa URL a serverului dvs. de web din nou. Și vă va duce la o nouă filă. În cazul în care faceți clic pe Deschidere pentru map.html, iar cotele sunt esti mergi la a lua o alertă, un mesaj de eroare, da? Mesaj de eroare, mesajul de eroare? Deci, din păcate, eroarea Mesajul nu este acela edificator excepția cazului în care de fapt, deschideți consolă, acea filă specială noi ținut de deschidere ieri și un pic mai devreme. Dar, am dat peste acest lucru mai devreme, așa că am deja a dat seama ce soluția este. În slide-uri de astăzi, sau mai degrabă, în Cloud9, anunț că noi nu am făcut ceva în mod deliberat. Observați că această etichetă script în linia 29, dacă ai citit prin ea, e ca maps.googleapis.com/ ceva, ceva, ceva, apoi observați pe cineva, unul dintre dezvoltatorii, a scris în toate de capital litere, cheia API. Avem nevoie pentru a lipi ceva acolo. Și acest lucru a fost etapa Am făcut-o pentru noi, înainte, și din nou, s-ar putea lista neagra ne, dacă dintr-o dată, 12 sau mai multe dintre noi începe să utilizați aceeași cheie, dar hai să vedem ce se întâmplă. Așa că, dacă te duci în astăzi slide-uri, un diapozitiv mai târziu, există acest șir de caractere foarte funky, cu aspect de text. Mergeți mai departe și trebuie doar să copiați acest lucru și lipiți-l în cazul în care se spune cheia API. Asta e cea m-am înscris. Și, cu siguranță, nu încercați introducându-l manual, pentru că se simte plină cu greșeli de tipar, cu potențial. Deci, doar copiați și lipiți asta. Și se va face pe linia mai mult, dar acum, trebuie doar să fie clar, ar trebui să arate un pic mai mult ca aceasta, în cazul în care cheia nu este egal cu capitalizată țipat la tine. Salvați pagina, du-te înapoi la cealaltă filă, reîncărcați, și sperăm să vedem o hartă de unde? AUDIENTA: Australia. DAVID MALAN: Australia. Așa că se pare că cei care sunt Coordonatele GPS Australia. Și lasă-mă să se plimbe doar pentru o clipă și de a ajuta pe cineva care nu e chiar acolo, dar permiteți-mi propun, prin intermediul Google, găsiți coordonatele GPS ale propriului tău natal sau propria tara de origine. Și, probabil, Google poate transforma acest lucru în sus, sau Wikipedia vă pot spune. Dar, alege două valori diferite pentru latitudine și longitudine, du-te înapoi și să le lipiți, și apoi să reîncărcați pagina după salvare și vezi dacă poți avea un harta pentru propria ta natal. Iar când ai terminat cu că, follow-up challenge-- și eu voi da un pic mai puțin de direcție, în mod deliberat, astfel încât în ​​mod deliberat trebuie să se lupte pentru un cuplu minute cu documentația, schimba harta pentru a nu fi acest lucru desenelor animate implicit, dar o harta prin satelit. Deci, tu vezi de fapt din satelit imagini în loc de culori frumoase. Și indiciul voi da se schimba tipul hărții. Du-te înapoi la faptul că obținerea a început pagina de inspirație. După cum s-ar putea fi spicuite, dacă sunteți în căutarea, există atât de multe lucruri pe care le puteți face. Unii dintre voi aveți deja a schimbat tipul de hartă. Dar vă puteți do--, de exemplu, permiteți-mi du-te la ceva ce am făcut-o pentru curs I teach-- maps.cs50.net. Unul dintre undergrads noastre a făcut acest lucru. Noi in centru harta de peste Harvard Yard suprapune peste toate aceste nume de constructii, și am avut să-l adăugați acest lucru. Așa că, dacă doresc să caute, de exemplu, Matthews Hall, avem un meniu mic drop-down. Și cred că folosește bootstrap, bibliotecă am discutat mai devreme pentru acest lucru. Și, dacă faceți clic pe Matthews Hall, imediat sare harta pentru o anumită locație, și arată ai o imagine în acest mic pop-up. Dar chiar și această mică pop-up, nu ne-am implementat. În cazul în care defilează în jos pe obtinerea nostru a început pagina și căutați info ferestre, veți vedea că unele dintre funcționalitate te se pot adăuga, deși cu o complexitate pic mai mult, este ceva ce se numește o fereastră de informații. Și, dacă fac clic pe un exemplu aici, iar acest lucru este ceea ce este distractiv, poți face lucruri de genul asta, Dați clic pe un marker și apoi voila, informații apare. Așa că nu am introdus destul caracteristici suficient de JavaScript pentru a picta o imagine a exact cum ar putea sârmă toate aceste lucruri împreună, dar ne-am cam zgâriat suprafața. De fapt, ceea ce tocmai am făcut-o atunci când Am făcut clic pe acel marcator, a fost declanșând un eveniment, o asa-numitul eveniment pe clic. Si am vazut de fapt un eveniment mai devreme astăzi, așa-numitul eveniment de trimitere, atunci când am fost prevenirea utilizatorul de la căutarea pentru pisici. Așa că ne-am cam ales și choosed dintre toate aceste caracteristici diferite, pentru a vă da un sens, sperăm, din ceea ce se poate de fapt face cu ceva mai mult confort în programare, și resurse complet gratuit. Alte intrebari? Nu? Aceasta este șansa ta finală, cel puțin astăzi, într-o vineri, pentru a obține ceva de pe piept astfel încât să pleci de aici senzație de încrezător și confortabil. Da. AUDIENTA: De ce nu adăugați un lucru mai mult? David MALAN: Oh, Doamne. Trebuie să mă odihnesc în acest weekend, cred. Alte întrebări? AUDIENTA: [inaudibil] DAVID MALAN: Te can-- în Internet Explorer, se odihnească în pace, ați folosit pentru a fi capabil de a pune VB script, script-ul de bază virtuale, dar că într-adevăr niciodată prins. Deci, răspunsul scurt este pur și simplu JavaScript. Alte întrebări? Bine, bine, lasă-mă să fac asta. Lasă-mă să iau colegii noștri din afară. Ele au o anumită evaluare forme pe care le doresc pentru toată lumea să-și petreacă câteva minute completarea. Ei doresc să colecteze acea formă și orice derogări pe care le-ar putea avea în afara. Ei vor avea, de asemenea, certificate. Cred că există încă unele gustări din afara. Lasă-mă să trec astea, și dacă Pentru orice întrebări, între timp, Voi umbla în jurul valorii de mai mult individual și putem obține ai început. Da, desigur. AUDIENTA: [inaudibil] DAVID MALAN: Asta de obicei, adevărat aceste zile. Cu siguranță, web software-ul, sunteți înclinat pe alții sunteți fie folosind punct de vedere estetic lucrurile cum ar fi Bootstrap, astfel încât să nu trebuie să pună în aplicare nivelul scăzut detalii cu privire la meniuri și butoane și toate astea. Te sprijinindu-se pe cineva cum ar fi Google, astfel încât să nu trebuie să construiască un Uber de afaceri și o afacere de cartografiere, precum și orice număr de similare aplicatii, de asemenea. De fapt, loginul populare, de asemenea. Dacă ați utilizat Spotify sau orice număr de site-uri web, vă veți autentifica la unele site-uri web folosind Facebook. Deci, ce e frumos, acolo sunt API-uri pentru Conectări în zilele noastre, astfel încât să nu aveți pentru a avea propriul tabel de utilizatori și toate baza de date proprie neapărat în aceeași măsură. Te poți lăsa Facebook face tot din această complexitate pentru tine. Deci, e un moment emoționant, onest, în programare, pentru că există atât de multe părți terțe serviciile pe care le puteți construi pe partea de sus a. Și din nou, prețul pe care îl plătiți este fie financiar, fie de nefuncționare. Dacă Google merge în jos, deci nu Uber, fără îndoială, dar poate că e un rezonabil compromis. Și din nou, că a fost una dintre temele, sperăm, pentru ultimele două zile, este aceste compromisuri. Si rareori este acolo merge pentru a fi un răspuns corect. Este într-adevăr este mai bine de două sau mai multe răspunsuri. Se trece aceste jur. Și aceste conturi Cloud9 vor continua la locul de muncă, în teorie, pe termen nelimitat. S-ar putea găsi, dacă vă așteptați câteva zile sau o săptămână sau mai mult pentru a vă conecta din nou în ele, ar putea dura ca unul sau cinci minute pentru a deschide din nou în sus, dar asta e doar pentru că au pus să doarmă pentru a salva pe resurse.