[MUSIC JOC] DAVID MALAN: Aceasta este CS50, și aceasta este începutul săptămâni opt. Și suntem atât de emoționată de a primi înapoi, mare surpriza, propriu Ramon CS50 lui Galvan, un senior în creștere care a fost petrece ultimele luni începând cu luna iulie, în Los Angeles, la Hollywood, literalmente de lucru pe un televizor nou brand- show numit Colony, creatorul de care este de fapt un alaun Harvard el însuși. Și așa suntem foarte încântați să vedem acest debut în rețeaua SUA în ianuarie. Așa încât urmăriți pentru că, și pentru mai Ramon pentru săptămânile viitoare. Știu acum că sfârșitul este aproape. Și ce înseamnă acest lucru este că nu e tot atât de mult plecat de CS50, trist să spun. Avem doar trei probleme seturi left-- există problemă set six-- care este în mâinile tale acum sau în curând va fi, din cauza mai târziu în acest week-- este menit să elimine lumile noastre de linia de comandă, în cazul în care am petrecut majoritatea timpului nostru folosind C, și lumea de programare web. Ei bine, veți vedea o mulțime de idei împrumutat de la munca linia de comandă, dar, de asemenea, o mulțime de noi și idei interesante care sunt, de asemenea, vor fi germane pentru aplicatii mobile si pentru tehnologia, mai general, cu care baieti sunt familiare în zilele noastre pe laptop-uri și telefoane și altele asemenea. Deci, veți pune în aplicare nu o pagină web, sau un site în sine, ci un server web actuale. Veți scrie restul un server web scris în C, al căror scop în viață este de a primi cereri HTTP, aceste plicuri virtuale am Continuă să vorbești despre, și de fapt, să răspundă, fie cu unele content-- statice, cum ar fi un punct HTML fișier, sau un punct JPEG sau orice alt număr de dosare, sau chiar un fișier PHP prin care dvs. de web server este de gând să interpreteze că PHP Codul și scuipa rezultatele. Acum, v-am furnizat cu destul de un pic de cadru Într-adevăr, pentru it-- Codul de distribuție pentru problema set de șase este de peste 1.000 de linii de mult timp, o mulțime de care este comentarii, să fie fair-- dar acest lucru este într-adevăr înțelege să fie o oportunitate a pune mâna scufundări murdare într-un proiect destul de mare că am foarte specific piese sculptate din tine, pentru astfel încât într-adevăr, atunci când ieșiți CS50 și intra în lumea reală de programare și doresc să se ocupa în orice număr de proiecte, veți avea mult mai mare confort descărcarea o sursă cod, unele open source proiect pe web, și scufundări în și de a face modificările pe care le de cuviință. Problema set șapte va fi de aproximativ face propria aplicația web-based care ia de intrare și dinamic produce ieșire dinamică în formă de un site-ul etrade.com ca. Și problema stabilit opt ​​se va concentra pe încă o altă limbă cunoscută sub numele de JavaScript. Între timp, finala Proiectul este la orizont. Așa-numita pre-propunerea se datorează o săptămână, începând de astăzi. Pre-proposal-- pe caietul de sarcini, care se află pe website-- CS50 lui este o oportunitate destul de ocazional pentru pentru a trimite un e-mail destul de succint pentru colegii dumneavoastră de predare doar să-l informa sau ei de la ce te gândești, la el sau ea folosi ca un cutie de rezonanță. Și au un bun-simț check-- dacă te gândești despre mușcat prea mult sau poate prea puțin, sau poate aveți nici un fel de idee și doresc să se angajeze într-o conversație. După aceea este o propunere și raport de stare, așa-numita CS50 hackathon aici Cambridge pentru Harvard și Yale studenți deopotrivă. Final proiectului punere în aplicare este atunci datorează. Și apoi un târg CS50 aici, în Cambridge, precum și un alt în New Haven. Deci propunerea, să ia o privire la site-ul pentru aceste date. Dar mai tulburator, de asemenea, este un posibilitatea de a-ți murdărești mâinile, și mintea deschise la un întreg grămadă de subiecte și instrumente și tehnici care sunt auxiliare la cursul de bază programa, dar cu toate acestea legate. Și, de asemenea pietre pas cu pas minunat de a face proiecte finale cu adevărat cool care du-te dincolo de materiale ne-am acoperit în mod oficial în problema seturi sau în curs. Deci, du-te la site-ul CS50 pentru întreaga listă de seminarii. Dacă nu vă înregistrați încă, e în regulă. Du-te si inscrie-te încă și vom urmărirea cu un link live streaming, ziua și ora este pe site-ul. Și totul va fi înregistrate și pus online dacă nu puteți face anumite zile și ore. În ceea ce privește ceea ce se află în fața thereafter-- bine, Desigur, nu e hackathon CS50. Aceasta fotografie, rechemare, de la zero, luate săptămână în jurul valorii de 4 AM într-o seară în ultimii ani. Târgul CS50, care din nou va avea loc în ambele orașe. Și apoi, ca să planteze semințe, chiar dacă încă au o luna plus stânga semestru, în cazul în care doriți să se alăture învățătura propriu CS50 lui personalul, și doriți să începeți gândire despre a deveni un CA, sau colegi de predare, să știți că Vom începe vorbim mai multe despre asta mai târziu în acest semestru. Dar imaginat aici este cele mai multe din echipa din acest an. Și astfel, PHP-- și am fost atât de trist saptamana trecuta, ca [? Allyse?] Amabilitate sa dus la efortul de a obține noi elemente de recuzită aceste minunate că nu am ajunge folosind, așa că într-adevăr doar un fel de stupid uitat că am avut o lopata stau aici tot zi miercurea trecuta, și un pic lingura. Dar aceasta a fost metaforic mea mod de a încerca să picteze imaginea ce ne tranziția de la C la o limbă cum ar fi PHP. Și același lucru poate fi spus cu privire la orice Numărul de languages-- Java, Python, Ruby sau ciorchini de others-- dar întrucât în C, de exemplu, scrie un program în C ar putea fi în mod tipic ca a lua o lingura ca aceasta si sapat o gaura in sol, în nisip sau noroi. PHP vă permite să ia mult mușcături mai mari din problema, scris mult mai puțin cod folosind un instrument mult mai mic, pentru că există atât de mult mai mult funcționalitate pus cap la. Acum, dacă am fost într-adevăr dramatică, vom avea ceva de lopata aici, dar așa să fie. Intre timp, celălalt metaforă am venit cu este, desigur, ai putea folosi ceva de genul o cheie la ciocan în ceva ca un cui. Dar, desigur, dreptul de instrument pentru utilizare se întâmplă să fie nu atât de mult Limba numit C- și acum am doar enervat [? Sanders,?] Probabil, vom rezolva asta așa later-- instrumentul dreptul de a utiliza frecvent nu va fi acest cel mai scăzut nivel instrument. Și într-adevăr, C nu este un limbaj care cele mai multe dintre voi sunt vreodată de gând să utilizeze, sau ar trebui să utilizeze în mod necesar din nou. Și, de fapt, un pic secret-- singura dată Eu folosesc C-am destul de mult între este Septembrie și decembrie a fiecărui toamna semestru. Si asta pentru ca noi să-l utilizați ca o oportunitate pentru a preda fundamentele de programare, și cu ea calculator principiilor fundamentale ale științei, date structuri, algoritmi și like-- dar va foarte repede vezi acum că sintaxa și ideile care stau la baza C a sunt atât de minunat transferabile la mai modern limbaje de nivel superior, cum ar fi PHP și Python și Perl și Java și Obiectiv-C- de fapt, nu atât de mult Obiectiv-C- dar Swift, acestea mai noi limbi pe care multi dintre voi vor apoi se ocupa cu tine final al proiectului. Deci, fără alte formalități, să de fapt utilizați PHP pentru a rezolva unele probleme. Amintiti-va ca de timpuriu, ultima săptămâni, doar am folosit CS50 IDE, am scris un program de Dinky pic care tocmai a spus, "Bună ziua lume." Și apoi l-am salvat în un fișier numit hello.php. Și apoi am fugit această comandă. Și de ce? În limba engleză, ceea ce se întâmplă aici? Ceea ce a fost atunci când fac Am fugit această comandă? Da? Audiența: Există o funcție PHP care citește ce in-- înțelege că. DAVID MALAN: Bine, există unele funcții PHP-- și lasă-mă să fie mai specific, exista un program numit PHP, a.k.a. Un interpret, care intelege conținutul hello.php, și interpretează top la jos, la stânga la dreapta, și face ce spun aceste comenzi. Comenzile din hello.php, desigur, este doar sursa code-- funcții și variabile și bucle și alții, că ne au început să scrie în PHP. Dar, spre deosebire de C, care este un limbaj compilat, PHP pe care tocmai ați scrie, și rulați-l. Săriți peste acest pas intermediar de conversia la zerouri și cele, și apoi rulează. Și ce este o cu susul în asta? De ce ne-am sărind peste pasul? De ce limbi mai moderne au tendința de a sări peste acest pas? Care a fost beneficiul? Sau doar intuitiv? Chiar dacă nu am scris mult PHP înainte, ceea ce este benefic nu despre compilarea codul crezi? Nu? Nu comite? Lamureste? Da. Audiența: mai dinamice. DAVID MALAN: mai dinamic? Ce vrei să spui? Audiența: [inaudibil] DAVID MALAN: OK, bine, așa în funcție de intrare, nu trebuie să-l compilați de fiecare dată. Și într-adevăr este la fel de simplu ca that-- ce este punctul de a continua pentru a compila codul? Acesta este doar un pas care este making-- acest lucru este care necesită, In ultimii săptămâni, de două ori mai mulți pași ca ruleaza doar programul. A fost util în a vedea pe care le vedea unele mesaje de eroare și așa mai departe, dar este încă doar un pas enervant. Și așa programatori realizat a lungul timpului, de ce nu ne începe să scrie limbi care nu nevoie de pas destul de mecanică, astfel încât să poată scrie doar codul dvs. și rula. Dar ceea ce a fost prețul că am văzut am plătit săptămâna trecută, cu un anumit exemplu? Da? Viteza. Asa ca [? ceea ce este] interpreți? un pic mai lent, în care zerouri și sunt cele frumos si rapid pentru un calculator pentru a înțelege, pentru că Intel CPU, sau orice ar fi, doar înțelege ce se întâmplă mai departe cu acele modele de biți. Întrucât un interpret este un program care într-adevăr trebuie să citiți sursa ASCII cod care le-ați scris, și converti, ca să spunem așa, sau dau seama cum se transformă în cele din urmă la zero și cele. Deci, doar nevoie de un pic bit de un hit de performanță. Deci, este un pic de un compromis. Acum, dacă am face acest lucru aici, lasă-mă să mergeți mai departe și de a face, de exemplu, după cum urmează. Dacă mă duc aici, nou dosar, am de gând pentru a salva acest lucru din nou este hello.php. Iar acum am de gând să merg mai departe și spune, "Print Hello World" - și reamintească faptul că pot folosi de imprimare, eu nu trebuie să utilizeze imprimare F. Și acum aici, dacă fac PHP de hello.php, am huh-- nu par să-l aibă interpretat. Cu ce ​​am greșit? Audiența: Brățările unghiulare. DAVID MALAN: Da, ai nevoie de acest unghi suport până sus. Deci e un fel de enervant, dar te obisnuiesti repede. Dacă trebuie să scrie cod PHP, am în general, trebuie să-i spuneți programului, sau spune interpretului, hei PHP, aici vine un cod PHP. Și apoi pentru o bună măsură, aș face- închide acest lucru nu cu acest lucru, ci mai degrabă cu doar întrebarea unghi marca suport, astfel că acum aici, dacă I ​​a alerga acest lucru din nou, acum Am obține rezultatul dorit. Acum, haideți să facem o ușoară optimizare, doar pentru ca l-ați mai văzut înainte. Aceasta este un fel de enervant ca am trebuie să rulați PHP spațiu hello.php, pentru că în trecut I ar putea scrie doar slash punct numele programului, care este un fel de frumos. E un fel de experiență de utilizare mai bună. Deci, se dovedește puteți face acest lucru în PHP cu I following-- pot folosi acest destul de criptic incantație în partea de sus de aici, care este în general numit un shebang, care acest lucru este un simbol ascuțit, ca să spunem așa, acest lucru este un bang sau un semn de exclamare. Iar acest lucru acum este calea la un program de pe un sistem tipic Linux, care se numește mediu, sau env. Și această poveste lungă line-- o linie short-- doar spune, hei calculator, găsi PHP interpret pentru mine în mediul înconjurător, se pare în memorie, ca să spunem așa. Și ce e frumos acum, este că dacă mă duc aici, Pot face dot slash salut dot php, sau-- hmm. Acces refuzat. Ei bine, veți vedea chiar mai mult din această cu problema set de șapte, dacă nu au deja, cu permisiuni. Se pare că am nevoie de pentru a executa aceasta comanda numit [? chamod?] pentru schimbare mode-- un plus X hello.php. Am nevoie de [neauzit] aceasta suplimentar etapă care se spune calculatorul meu, face executabil hello.php. Și acum ma uit la ceea ce happens-- dot slash hello.php, doar ruleaza. Nu am nevoie să specificați mai interpret. Și eu pot face chiar mai frumoasa, Totuși, dacă am redenumi acest lucru. Dacă am trece la doar hello.php Hello-- astfel observa in partea din stânga sus, Numele programului este într-adevăr, acum doar Buna ziua. Acum pot face să arate ca un program C, chiar dacă este scris în PHP-- sau sincer orice număr de alte limbi. Deci accesoriu marginal, nici o diferență funcțională. Dar e doar un pic de curiozitate acum, astfel încât să puteți scrie programe în orice limbă, iar utilizatorul nu trebuie să știe sau de îngrijire care sunt cele. Ei bine, să ne uităm la o mai exemplu convingător acum că am bătut în prealabil. Și aceasta se numește quote.php. Și e disponibil online. Și observați că e destul de short-- dar este un program de linie de comandă care este O să se uite în sus prețurile de vînzare pentru mine, care se întâmplă de fapt să fie germane la problema seta șapte. Deci, haideți să vedem ce fac. La foarte de sus am primit deschis Suport semn de întrebare PHP. Apoi am această linie, prin care sunt necesită un fișier numit functions.php-- vom vedea mai mult pe aceasta într-un pic, dar acest lucru este ca a lui C Versiunea de ascuțite includ, unde vrei sa mergi includ un alt fișier. PHP solicită nevoie de ea, deși are, de asemenea, o funcție includ. Și se dovedește că este function.php doar ceva ce am scris înainte de clasă. Am pus-o în același director, pentru că Am vrut să factor în unele cod că am putea doriți să utilizați în altă parte. Între timp, puteți probabil deduce ce se întâmplă aici. Acesta este un pic diferit de la C- dar Ce vreau să spun prin asigurarea utilizării corespunzătoare? Traduce aceasta mai tehnic. În ce condiții sunt eu renunti programului, sau ieșirea? Da? Audiența: Când nu aveți două argumente în linia de comandă. DAVID MALAN: Când nu am pentru a comanda argumente în linia. Și amintiți-vă că unul dintre cei argumente este numele programului în sine. Iar al doilea va fi un alt cuvânt de tip I după prompt. Deci, la fel ca C, aceasta este felul meu de a verifica, au cooperat utilizator și rula programul așa cum am intenționat? Acum, e ceva un pic diferit cu C- în primul rând ne-am au acest semn dolar, și ceea ce face un dolar semn indica in PHP? Doar o variabilă. Asta e all-- doar o variabilă, urmată de ce vrei să-i spunem de fapt. Observați există ceva lipsesc din programul meu PHP, la fel ca ea lipsea ultima săptămâni, comparativ cu C, care este ceea ce? A tipuri, dar, de asemenea altceva. Nu există nici ceva function-- funcție principală. Nu e nici o funcție principală. Tu doar începe să scrie codul fără a avea să vă faceți griji cu privire la o destul de arbitrare convenție de denumire unele implicit Funcția principală. Deci arg C este doar într-adevăr o variabilă globală că interpretul face disponibile pentru mine. Acum, acest lucru este interesant. Asa ca uite în sus lucruri. Semn dolar este pe stoc stânga, asta e variabila mea. Pe partea dreapta, nu e aparent o funcție în PHP numit de căutare, care Am trece ultima mea linie de comandă argument sa-- indiferent de cuvântul este. Și vom vedea cum acest lucrează într-o clipă. Și apoi în cele din urmă am de raportare prețul. Sunt imprimarea unul cota de așa și așa. Și amintiți-vă, aceasta este cale de PHP---un mod în PHP-- în cazul în care nu au de a face semnul dolar S mai. Puteți folosi doar acolade și conectați în unele variabile. Nu trebuie să vă faceți griji cu privire la folosind printf în același mod. Și, ca o paranteză, când ai pus o variabilă în interiorul ghilimele acest fel, pe care îl utilizați o tehnică de lux numit interpolare variabilă. Aceasta înseamnă doar conectați variabila aici. Și, ca o paranteza, unii dintre voi care au venit de la alte medii de programare, nu puteți utiliza ghilimele simple în jurul valorii de siruri de caractere pentru a face acest lucru. Trebuie să utilizați ghilimele pentru interpolare variabilă de a lucra. În caz contrar, veți literalmente vedea aceste acolade. Deci în sfârșit, să mergem mai departe și să rulați acest lucru. Permiteți-mi să fac terminalul meu un pic mai mare. Lasă-mă să mergeți mai departe și a alerga interiorul directorul meu citat. [? CDsource?] [? AM?] [? citat?] PHP Citat punct PHP, și am de gând pentru a căuta ceva ca GOOG, care este simbolul ticker, și o acțiune din nume noi, Alfabet Inc, costa $ 717 începând de astăzi. În regulă, dacă vrem să executați din nou, oricine un alt ticker stoc vor să se uite în sus? Microsoft cred că este aceasta, MSFT-- $ 53. Cred că Yahoo este poate că. Și Facebook este că. Deci, ce este acest program faci? Magia pare a fi încorporat în această funcție de căutare. Deci, haideți să aruncăm o privire rapidă. Se pare că nu vine cu PHP, este în functions.php. Și nu vom trece prin acest în detaliu, dar observați cuvântul operativ aici este că pe linia șase de functions.php-- Eu spun literalmente funcție. Am specificați numele funcției mele. Apoi m-am specifica orice argumente, sau parametri, Vreau funcție pentru take-- nu tipuri. Și apoi l-am pune în aplicare. Și voi val mâna mea la punerea în aplicare, din moment ce este corect destul de avansat acum, dar vom vedea din nou de fapt într-o săptămână în problema set de șapte. Dar pot curăța asta, de asemenea. De asemenea, am inclus în Codul de astăzi o versiune citatul, care nu are nici o fișier punct PHP. Pentru că ceea ce este probabil la Partea de sus a programului numit doar citez? Această așa-numitele shebang-- incantație destul de criptic care spune găsi PHP și apoi executați-o pe codul meu aici. Bine, pentru ca aduce ne să unde am rămas Ultima time-- deși cu câteva exemple mai avansate. Orice întrebări despre până acum PHP sau ce facem? No-- în regulă. Da? Audiența: interiorul Fișiere HTML, nu Tu-- [? tu ?] [? doar o numesc?] o [inaudibil] fișier PHP? DAVID MALAN: Bună întrebare. Într-un context web, care suntem literalmente pe cale de a trecerea la, nu utilizați așa-numitul shebang în partea de sus, deoarece server-- web adesea o program numit Apache sau Microsoft IIS, Internet Information Server, sau orice număr de alte software de tip server de web, știe că, atunci când vede un fișier punct PHP, că ar trebui să ruleze interpretul pe ea. Ea nu se uita la asta de prima linie. Deci, această primă linie truc este doar atunci când sunteți scris de linie de comandă programs-- care nu vom face super-de multe ori, dar este modul nostru de a trece C exemplele noastre la intreprinderea PHP nostru. Așa că haideți să într-adevăr pod această lume din lume linia de comandă pe web de a face următoarele. Lasă-mă să mergeți mai departe și să aici doar pentru o clipă. Deci, dacă avem un server web, sau mai degrabă dacă avem laptop-ul meu aici, pe care le voi desena asa. Și aici avem Internet într-o formă. Și apoi aici, avem un server într-o building-- acesta este modul internetul works-- și aici este un server cu unele lumini poate. Ce se intampla de fapt pe între aceste două conexiuni? Deci, în această clădire este un server de web. Asta e doar un calculator care este execută unele de operare system-- poate software-ul gratuit numit Apache, care CS50 IDE se execută. Astfel încât să puteți de fapt cred că de această clădire ca fiind clădirea în care CSt0 IDE este stocat. Asta în cazul în are voi toți conturi, în cazul în care voi toți au server de web proprie funcționare, voi toți au propriile adrese URL unice, cum am început să discutăm, și veți vedea mai mult în P. set de șase. Iată laptop-ul meu pe undeva altceva de pe internet. Și așa că atunci când am vizita o adresă URL care aparține pentru mine, că traficul de internet se întâmplă pe la server, server-ului primirea unui HTTP request-- ca o lua index.html și e răspunzând la acea pagină web. Deci, asta e paradigma generală. Întrucât totul până în prezent astăzi, totul se întâmpla numai în limitele de această clădire. Am fost folosind laptop-ul meu, dar Am fost conectat la CS50 IDE, astfel încât toate acestor programe am fost difuzate a fost în interiorul serverului, în sine. Dar acum, să începem reutilizarea PHP pentru a scrie unele programe reale care sunt servite de un server web. Și pentru a face acest lucru, am de gând să merg într-o grămadă de exemple care introduc această idee aici. Astfel încât acesta este un fel de cale de fantezie descrie o paradigmă de programare. Și, de fapt, așa cum ieșiți CS50 sau lucreze la proiecte finale, sau de a lua unele urma de clasa, veți începe pentru a vedea că world-- mai ales după ce crescut cu limbaje cum ar fi C că sunt foarte scăzute level-- dau seama că nu e bine modalități de software scris. Există anumite modele puteți urmări, anumite moduri de organizare fișierelor și modalități de denumire funcțiile, astfel încât poveste lungă scurt, lumea a venit cu o grămadă de acronime și numele de modalități de programare. Acestea sunt doar tehnici pe care le-ar putea folosi. Și unul dintre ei este numit MVC, pentru Model View Controller. Și aceasta este doar, pentru acum, o prea complicate mod de a spune cum ar trebui să se stabilească în un site pe baza de PHP, în cazul nostru. Cum vă organizați fișierele, cum vă organizați logica, într-un mod care face mai ușor pentru a scrie site-uri mai complicate? Și într-adevăr, vom rapid ajunge acolo cu p-set șapte. Deci, în lumea de MVC, ai de gând pentru a vedea că, în general, codul nostru poate fi caracterizate fie ca model de cod, sau cod controler, sau pentru a vizualiza codul. Și am de gând să simplifica-o ca follows-- controlerul este creierul de programul tău, e care toate logica interesant se intampla. Deci tot ceea ce am fost scris până acum în clasă, este un fel de controlor code-- se controlează programul, buclele tale, tău condiții, funcțiile și variabile și tot ce. Vizualizări, acum, vor fi un pic mai evidentă în lumea web. Un punct de vedere este estetica de site-ul dvs.. Este ceea ce utilizatorul sees-- imaginile, tabelele HTML, tag-uri HTML, și toate de faptul că, toate estetic pufos lucrurile care nu este așa de greu să scrie, dar este doar ceea ce generatoare, este așa-numitul punct de vedere, estetica. Și modelul, în cele din urmă, se va să fie stuff-- baza de date care vom începe scufundare în toate miercuri cu atât mai mult. Deci controler este logica, punct de vedere este chestii estetic, și modelul va fi în cazul în care stocăm datele noastre actuale. Deci, să ne uităm la acest lucru mai concret cu următorul exemplu. Am de gând să merg în directorul meu aici de sursa de astăzi code-- toate este disponibil online. Și am de gând să meargă în versiunea zero. Și aici este-- Să-l apelul Versiunea de zero a site-ului CS50 lui. Nu e mult aici, la toate. Este o pagina web foarte simplu este probabil folosind ceea ce HTML tags-- doar ghici de la exemplele anterioare? Ce-i asta? H1-- probabil pentru că mare bold titlu, că logo-ul până sus, CS50. Și ce altceva este în joc? Da? Audiența: lista neordonată. DAVID MALAN: list-- neordonată Deci Tag UL și poate o pereche de tag-uri LI. Și dacă nu-mi amintesc aceste, aceasta sincer nu contează. Acestea sunt un fel de pufos detaliile de implementare HTML că te uiți rapid și te-ai întors pe drumul tau. Ne vom concentra mai mult pe programarea idei care sunt piesele juicier. Deci, hai să aruncăm o rapidă uita-te la HTML-- și, într-adevăr dacă am deschide sursa vedere aici, Da, Asta e exact ceea ce se întâmplă aici. Există o etichetă UL. Imbricate în interiorul, care este de a tag-uri LI. Și apoi am împrumutat URL-ul a programei actuale de aici. Și apoi în lectures.php este aparent o altă pagină generat dinamic care va avea, să see-- ah, primele două săptămâni de curs. Deci, săptămâna zero și o săptămână, să uita-te la asta: dacă aș vedea sursă al paginii, de asemenea, foarte simplu. Acestea sunt ceea ce duce la două pagini numit week0.php, și week1.php. Deci, ia în considerare ceea ce se întâmplă acum. Când m-am faceți clic pe week0.php, laptop-ul meu este de a face o cerere de week0.php. Serverul de web, a.k.a., CS50 IDE, primește plicul virtual. Este văzut un mesaj ca, pentru a primi week0.php. Acesta este apoi interpretarea fișierul, de sus în jos, la stânga pentru a right-- fișierul numit și week0.php-- scuipa afară de rezultatele. Deci, în interiorul acestui fișier, week0.php, trebuie să fie logica controler care este generatoare de acest HTML, și vom vedea în curând că. Dar pentru moment, lasă-mă să faceți clic pe săptămână la zero, iar acum avem miercuri și vineri, iar acum avem diapozitivele încet din săptămână zero. Și s-ar putea aminti tu acest din drumul înapoi atunci când. Deci asta e tot acest site este de a face. Deci, haideți să ia în considerare cum se face acest lucru. Am de gând să meargă înapoi în codul sursă aici, în CS50 IDE, și am de gând să se deschidă index.php. În partea de sus a acestui fișier este o grămadă de comentarii. Și apoi în mijlocul acestui fișier ea, se dovedește, este nici un fel de cod PHP. Pentru că dacă nu aveți oricare dintre suport deschis etichete semn de întrebare PHP, ești liber să pune doar HTML. Pentru că ceea ce PHP interpret ar trebui să facă, este atunci când citește acest file-- sus în jos, la stânga pentru a right-- se interpretează doar codul se vede între aceste paranteze unghiulare semn de întrebare. Și orice altceva care aceasta nu recunosc ca PHP, doar scuipă. Și HTML este printre lucrurile se va scuipa doar din. Deci, acest fișier ar putea avea fost numit index.html, dar eu sunt de denumire tot dot PHP ca o piatră de temelie. Lectures.php-- în mod similar underwhelming, e doar ceva HTML. Week0.php, în mod similar doar câteva HTML. Dar acum să pună pe pălărie de inginerie proverbial, și ia în considerare modul în care ne putem îmbunătăți acest lucru. Nu e greu să faci acest lucru, dar am un fel de involuat in copiere și lipire. Și, de fapt, dacă am face doua saptamani, te Știi la ce mă, probabil, va face? Am de gând să merg la week1.php, eu sunt va pentru a evidenția totul. Am de gând să-l copiați, lipiți- într-un nou fișier denumit week2.php, tweak unele URL-uri, și să fie pe drum. Deci, bazat pe ceea ce ne-am văzut în C deja, acest lucru nu se simte bine, sperăm. Copy, Paste rareori solutia potrivita. Deci, ce putem începe a face pentru a îmbunătăți acest lucru? În cazul în care sunt oportunitățile pentru proiectare mai bine? De când am ajunge la opt saptamani, se va să fie foarte enervant dacă vreau să se schimbe fontul de fiecare dintre paginile mele, sau dacă vreau de a schimba structura de structura. Deci, unde e ocazia pentru proiectare mai bine? Ei bine, să considerăm ceea ce este comun în toate aceste fișiere. Iată o saptamana, aici e săptămână la zero, aici e lectures.php, aici e ceea ce index.php-- este același și ceea ce este diferit, aproximativ vorbind, în fiecare dintre aceste fișiere? Da? Audiența: [inaudibil] DAVID MALAN: OK, bine. Deci, există un model, cu siguranță, în care de fiecare dată când aleg curs I, V-aș fi generatoare de o Pagina arată foarte asemănătoare. Și astfel, probabil că pot mobiliza faptul că într-adevăr, am în mod deliberat numeric indexate lectures-- nostru dacă pot pune chiar mai mult cuvinte în răspunsul dumneavoastră. Și ceea ce este singurul lucru, într-adevăr, care se schimbă între săptămână Unu și lasă-mă derulați în jos așa că e aproximativ în aceeași place-- Deci, aici este săptămâna de zero, aproximativ în partea de sus. Aici este o saptamana, saptamana la zero, o saptamana, saptamana zero. OK, literalmente, dacă știi nici un fel de program acest lucru este acum doar ca o model joc de potrivire. Deci, ce este diferit? Da? Audiența: [inaudibil] DAVID MALAN: Bun, deci titlul se schimbă, vreodată atât de ușor. Zero va, desigur, la unul. Același lucru se întâmplă în tag-ul H1. Și noi nu prea o văd la fel de ușor, deoarece adresele URL sunt un pic cam lung. Dar aceste URL-uri se schimba usor. Dar ceea ce nu se schimbă este, îndrăznesc să spune, majoritatea conținutului page-- tag-ul HTML este la fel, capul este același, titlul este aproape la fel, corpul este același, și aproape orice altceva este același cu excepția aceste trucuri mici. Deci, cum putem merge cu privire la factoring o parte din asta? Ei bine, lasă-mă să propună exact că în următoarea versiune. Deci, aici, în versiunea unul, am exact aceleași fișiere, plus o pereche de altele. Iată index.php-- și chiar dacă nu ați mai văzut înainte PHP, ceea ce am, probabil, fac pentru a rezolva această problem-- bazat pe ceea ce vezi aici? Da, este faptul că o ușoară angajament? Nu? Da, du-te mai departe. Audiența: [inaudibil] DAVID MALAN: Da. Audiența: [inaudibil] DAVID MALAN: Am nevoie de tine să vorbesc doar un pic mai tare. Audiența: [inaudibil] DAVID MALAN: OK, bine. Și am think-- a fost greu de Tu-- dar am auzit cred că ceea ce vrei să ajungi este că Tag-urile care au fost comune până sus, și tag-uri care au fost comune pe de jos, au fost luate afară, sau retrogradat la ce fișiere? Header.php și footer.php-- și vom pentru a face unele trucuri pentru a adresa preocuparea pe care tocmai ridicate cu privire la schimbarea de numere, pentru exemplu, dacă te-am auzit corect. Dar care pare a fi esența aceasta. Dacă a existat o mare cantitate de redundanță în partea de sus a paginii, și o cantitate mare de redundanță în partea de jos, hai literalmente doar a evidenția și taie acel conținut afară, pune-l într-o file-- separat la fel ca ideea de CSS, unde am luat din estetica foarte similare, într-un fișier separat punct PHP, utilizați necesita mechanism-- care este ca C include-- ascuțite care este, în esență cum ai spune du-te apuca conținutul header.php, și să copiați și lipiți-le aici. Dar ceea ce înseamnă acest lucru este că acum în index.php, am cele două linii. În lectures.php, eu, de asemenea, au cele două linii. În week0.php, eu, de asemenea, au cele două linii. Deci, acum, dacă vreau să se schimbe titlul de toate paginile mele, sau Vreau să schimba structura fundamentală, Pot schimba acum într-un singur loc, sau două antet și subsol places--, respectiv. Acum plecare codul de a privi un pic mai mult criptic, nu? Dar dacă te gândești la ceea ce pagina este doing-- dacă am solicita week0.php, la fel ca în desen peste here-- când se solicită week0.php, Ce înseamnă asta? Literalmente, acest fisier este solicitate de către browser. A.k.a. web server-- CS50 ID-- apucă acest fișier, week0.php, și citește o sus în jos, la stânga la dreapta. Pe o linie, se întâlnește imediat Suport deschis semn de întrebare PHP, necesită header punct PHP, și așa ceea ce interpretul PHP does-- care este construit în web Server, pentru că am preconfigurat o pentru Tu-- merge automat în header.php, copiaza continutul, le lipește aici. Dar apoi întâlnește interpreți semn de întrebare suport aproape, asa ca este terminat gândire. Acum scuipă doar orbește liniile doi prin șapte, pentru că e doar HTML prime. Ajunge la linia opt, și face asta aceeași magie again-- deschiderea fișierului, hapsân conținutul, și cerându-le sau lipirea lor chiar atunci sau acolo. Dar am făcut aluzie la un bug. Acesta este un pas înapoi parțială, pentru că dacă ne uităm în header.php, Un fel de am tăiat un colț. Ce caracteristică am renunța pentru pentru a obține acest design discutabil mai bine? Da? Audiența: [inaudibil] DAVID MALAN: Da, am un fel de tăiat un colț trivial. Tu a subliniat că ceea ce se schimba a fost titlul, numărul în titlu, și numărul în H1. Deci soluția mea a fost, OK, hai să redenumi pagina, și nu a face cu faptul că fel de problemă. Așa că e un parțială pas înapoi pentru sigur. Dar ceea ce este demn de remarcat aici este că ceea ce am făcut este luat în caz contrar tot comun lucrurile. Și în footer.php, observa am luat tot din faptul că, deși mai mică, chestii comune. Așa că am nevoie pentru a fi într-un fel acum posibilitatea de a luați un alt pas înainte, și să stabilească că aspectele titlu. Așa că hai să facem asta. Lasă-mă să intru în a doua versiunea mea aici, care, din nou, are aceleași fișiere cu excepția unui nou plus. Și e un pic mai mult verbose, dar să vedem dacă ne poate tachineze pe langa ceea ce se întâmplă aici. Deci, în loc de a cere header.php, și footer.php, Mi se pare a fi să necesite un singur file-- numit, desigur, helpers.php. Și lasă-mă să prevadă acum, ceea ce este în interiorul helpers.php este doar o adunatura de funcții că am scris, ca înainte. Dar l-am sunat helpers.php. Acum se pare, în linia trei și 10, sunt asteptare două functions-- face antet, subsol face. Cei care nu vin cu PHP, am scris celor mine. Și le-am pus în helpers.php. Acum, am văzut doar această sintaxă odată, și a fost foarte scurt. Dar acest lucru este aparent un argument pentru a face antet, funcția. De ce știu eu asta? Ei bine, aici e un paren apropiate, aici e un paren deschisă. Și, desigur, la fel ca în C, ceva între aceste paranteze este un input-- sau un argument pentru această funcție. Care este tipul de date de acest argument, bazat pe ceea ce am subliniat? Ce face aceste paranteze drepte indică, pe baza de săptămâna trecută? Da, e un array-- în mod special un tablou asociativ. Și, desigur, această sintaxă este un pic funky dar acest lucru este doar in trecere în o pereche valoare-cheie. Cheia este, citat citatul titlu, iar valoarea este CS50. Dacă am fi făcut acest lucru în C, s-ar putea în schimb arata mai mult ca acest lucru, doar citat încheiat citatul CS50-- sau de fapt, ar fi buclat bretele, sau ceva de genul că, în C, în cazul în care cheia este zero, iar valoarea este CS50. Dar, din nou, în PHP, chiar dacă Sintaxa este, din nou, un pic ciudat, vă permite să treci în cuvinte în loc de numere să se asocieze cheile cu valori. Deci, ce inseamna toate acestea? Dacă mă duc în helpers.php, să ne uităm la această funcție. renderHeader.php, mai degrabă renderHeader este funcția mea, și știu că pentru că văd funcția cheie aici. Acest lucru este nou de la C- ea aparent ia un argument numit data-- dar aș fi putut numit acest nimic, dar l-am sunat de date, doar pentru a fi un pic clean-- și ia doar o presupunere, în special dacă ați programat în altă limbaj de nivel superior înainte, ceva de mai sus C, conceptual. Ce suport deschis egal Suport pătrat probabil înseamnă? Sau ce ar putea să-l spui? Noi nu am văzut acest lucru în C. Da? Un array gol. Mai exact, aceasta înseamnă că, dacă utilizatorul nu pune renderHeader cu un argument, am încă în desfășurare de a avea un argument numit de date, dar valoarea sa implicită este va fi un array gol. Deci e doar un confort frumos. Eu nu trebuie să țipi la utilizator, sau spune-ați folosit funcția mea greșit. Pot da doar utilizatorul implicit valoare, dacă nu-mi pasă în special. Acum această funcție, eu sunt O să val mâinile mele la. Dar această funcție permite extract ne pentru a trece aceste variabile în date în header.php în felul următor. Și aceasta este ultima piesă, Cred că, de sintaxă funky. Aici este noua mea versiune de aceasta header.php-- obișnuia să spună, literalmente, deschis Suport titlu CS50, și că a fost. Și același lucru H1. Acum se pare că spune ceva destul de funky. Și lasă-mă să simplifice această pentru o clipă, după cum urmează. Aceasta este ceea ce am a schimbat titlul meu de a fi. Cu toate acestea, se face un pic urât pentru paranteze constant deschise cu PHP, și apoi utilizați funcția de imprimare. Se pare că PHP are o prescurtare notație pentru aceasta, care este doar un semn de egalitate, care este punct de vedere tehnic o funcție numită ecou în loc de imprimare, dar este același lucru, în mod eficient. Care doar arata mai bine. E doar o sintactic zahăr, dacă vreți, care face ca codul meu arata un pic mai bine. Dar se pare, și vom vedea acest lucru din nou înainte de mult timp, trebuie să numim acest enervant funcție lung numit HTML caractere speciale în PHP, pentru că se pare că există anumite intrări că utilizatorul ne-ar putea da, sau pe care utilizatorii ar putea să ne dea, care sunt de gând să rupă site-ul nostru. Dar vom vedea că următoarea săptămână cu JavaScript. Dar pentru moment, știu doar că acest fișier, headers.php, pur și simplu ia titlul pe care Am trecut în, face sigur că e sigur să fie injectat într-un web pagină, și scuipa ca titlul meu și, ca H1 meu. Deci, dacă mă duc în această versiune acum, observați că prelegeri are titlul înapoi, săptămână la zero are titlul înapoi, și Într-adevăr, HTML am generatoare este identic cu ceea ce primul meu versiune asta-- excepția spațiu mea, pentru că am început de formatare codul meu un pic diferit. Dar am generat toate codul îmi pasă. Deci lasă-mă să pauză pentru doar un moment și a vedea dacă există orice întrebări sau confuzie am creat. Bine, hai să răsucească așa un pic mai greu aici pentru a vedea dacă există un oportunitate de îmbunătățire. Helpers.php, de asemenea, a avut acest funcție, numit renderFooter. Și ceea ce este demn de remarcat despre renderHeader, și renderFooter? Și din nou, în scopul de astăzi, știu că funcția extractul este doar felul meu de argumente trecători în header.php și footer.php. Ne pare rău? Audiența: [inaudibil] DAVID MALAN: Da, am doar a schimbat necesita linie. Deci literal, am comis păcatul de copiere și lipire, încă o dată. Nu este un număr foarte mare de linii, dar vin on-- dacă am copierea și lipirea tot doar pentru a schimba un singur cuvânt mic, și un cuvânt mic care Alan punctele out este subsol aici, comparativ cu antet aici. În caz contrar, totul este identice, cu excepția, Desigur, numele de funcție de. Deci, ceea ce ar putea face mai bine ne-am? Ei bine, lasă-mă să deschid această versiune aici, prin care în helpers.php, de ce nu am chiar a lua o puțin mai inteligent despre asta? Scrie puțin mai complicat cod, dar o numesc fac? Deci, ce am schimbat fundamental? Este nevoie de un argument now-- două argumente, date încă. Și apoi ce-i primul Numele probabil utilizat pentru, bazat pe ceea ce sunteți de lectură aici? Chiar dacă o parte din sintaxa este încă nou. Ce este dolar șablon semn? Ne pare rău? Audiența: antet sau subsol. DAVID MALAN: antet sau subsol. Deci se pare, am decis că, dacă singurul lucru care se schimba este ceea ce vreau șablon la print-- și prin șablon Vreau să spun acest lucru este model pentru cod pe care vreau să ieșire, dar vreau să conectați într-un values-- așa că dacă este doar în afara sau subsol, de ce nu am parameterize că și numesc semnul argument dolar șablon? Și apoi această sintaxă funky, îmi permite pentru a crea o cale într-o variabilă aici. Deci, calea semn dolar este o variabilă. Ce face această sintaxă face, dacă ești familiar? Da? Audiența: [inaudibil] DAVID MALAN: Exact. Dacă șablon este, citat citatul, antet, sau în cazul în care șablon este, Citat încheiat citatul, subsol, că linia nu care le-am subliniat, linia opt, este pur și simplu a lua acest nume, cum ar fi antet, și concatenarea cu punct PHP. Deci nu am avut acest operator în C. Acest operator este dot un lucru uimitor în PHP-- daca esti familiarizat cu JavaScript sau Java, puteți utiliza plus semneze pentru a face concatenare. În C, este o durere în neck-- și îmi pare rău, în set p șase, ai de gând să trebuie să faci asta: este o durere în gât a concatena șiruri. Ce? Ei bine, pentru că dacă ai un șir care este atât de mult, și un alt șir care este atât de mult, Nu poți să le conectați împreună. Ce ai în loc să facă în C? Da? Audiența: [inaudibil] DAVID MALAN: Trebuie să malloc memorie, sau de a folosi un array pe stiva. Și tu de fapt, să face ca matrice destul de mare pentru a se potrivi acest plus acest lucru, plus backslash zero. Apoi le înlănțui împreună, folosind se amestecă pisica sau manual cu o buclă pentru, sau orice număr de tehnici. Și vă vom arăta un cuplu in sase set-p. Este o durere în gât. Și aceasta este într-adevăr ceea ce vreau să spun despre acest versus astea-- ca C față de PHP. Trebuie doar primești mai mult funcționalitate pentru drum liber, astfel încât să vă puteți concentra, în mod ideal, la distracție parte a codificare, The proiect pe care doriți să rezolve, mai degrabă decât detalii precise nivel scăzut. Deci, acest lucru doar generează header.php sau footer.php bazat pe care o numesc eu. Și într-adevăr, dacă mă duc în index.php, aviz tot ce changed-- loc de de asteptare face antet sau subsol face, Sun fac, urmat de Numele modelului pe care vreau să fac. Și veți vedea acest lucru, de asemenea, în problema set de șapte, prin care vă permit să utilizați aceeași funcție pentru a face buchete și buchete de diferite pagini web. Deci, mai degrabă decât să locuiască prea mult mai mult pe aceste details-- care veți vedea din nou în set problemă seven-- să ne uităm la acum începutul unei soluții la o problemă mai interesantă. Până acum, ne-am nimic făcut are date salvate. De fapt, singura dată când l-am salvat vreodată ceva ce am făcut în această clasă este atunci când am avut un demo foarte simplu vreme înapoi, în care am folosit fișier IO în C, și cred că am scris în numele meu, și Numele lui Hannah, și numele Maria, sau, poate, numele lui Andy, și apoi am salvat o file-- CSV separate prin virgula fișier valori. Si am folosit fopen-- cred am folosit fprintf ca îmi amintesc, si am salvat un fișier. Acum, că este cea mai simplă forma unei baze de date. Dacă doriți pentru a face un site web pentru Program Frosh AI, prin care bobocilor pot înregistra pentru un sport, ai ideal vrei să faci ceva cu aceste date. Săptămâna trecută, am făcut nimic cu data-- tocmai am spus, v-ați înregistrat, nu chiar. Sau poate prin e-mail Proctor, și asta a fost tot. Dar ar fi frumos dacă aș putea da că Proctor un fișier CSV, ca un fișier Excel. Sau mai bine, ar fi fi frumos dacă aș putea pune numele acestor utilizatori și cămin nume și toate astea într-o bază de date care doar trăiește pentru totdeauna, până aleg pentru a șterge datele. O bază de date care permite ma pentru a interoga informații. Și într-adevăr, asta e ceea ce o bază de date este. Va prezentam azi, și săptămâna viitoare, de asemenea, o tehnologie numit SQL-- o interogare structurat Limba, care este o altă limbă. Este, în esență, o programare limbă, dar pentru baze de date. Și o bază de date pentru acum, doar cred că de o versiune super-ca de lux Microsoft Excel, sau Google Foi de calcul, sau numere de mere. Este, în general, un program care permite să stocați o grămadă de date în rânduri și coloane, destul de ca s-ar putea în Excel. Dar ceea ce este frumos, mai ales în cazul în care nu suntem foarte familiarizați cu Excel, ce SQL vă permite să faceți este interogare acest informații prin scrierea de linii de cod în cazul în care puteți, chiar dacă dumneavoastră baza de date are un milion de rânduri în ea, puteți găsi lucruri foarte rapid. De fapt, Excel este deosebit rău la seturi mari de date. Și, de fapt, până la câteva cu ani în urmă, s-au dovedit Excel va permite doar să stocați până la 65.535 rânduri de data-- care sună ca o mulțime, dar la timp am fost un student grad, și îmi amintesc împiedicare peste asta pentru că am fost generatoare de Fișiere CSV pentru cercetare și am mea a vrut să-i analizeze rapid doar prin deschiderea în Excel. Desigur, calculatorul meu doar sa prăbușit, pentru că am avut mai mult de 65.000 de rânduri. Dar în cazul în care a făcut 65.535 provin de la? Ce făcea Microsoft, probabil? Daca esti bun cu puterile tale de doi? Da, au fost folosind un 16 biți valoare reprezintă numărul rând. Și două la 16 este 65,536-- minus unu, pentru că dacă index zero, înseamnă că a fost mai mare număr de rânduri aș putea avea. Și a fost doar o decizie de design. Prin salvarea 16 biți, mi-au limitat la 16.000 de rânduri, în loc de 4 miliarde de euro, pe care am fi putut avea în mod ideal. Dar pentru acum, vom introduce acest mai mult într-un context web. Și ceea ce este frumos despre SQL este că, chiar deși este destul de puternic și destul de sofisticat, se reduce într-adevăr până la patru operațiuni cheie, patru funcții-cheie, dacă will-- selectați, pentru recuperarea de date, căutare pentru datele; șterge sau ștergerea de date; introduce pentru adăugarea de rânduri în baza de date; și actualizarea. Deci, dacă ați folosit vreodată Google Foi de calcul, numere Apple, Microsoft Excel, ați executat, cel mai probabil, toate din aceste operațiuni ca un om de doar cu ajutorul tastaturii și mouse-- dvs. introducerea de date, folosind ochii pentru a selecta sau a căuta date, sau date de actualizare, sau ștergerea datelor. Deci, ce înseamnă asta? Ei bine, pre-instalat în CS50 IDE este un program numit MySQL. Este un program gratuit, open-source baza de date care e foarte popular. Facebook, de exemplu, foloseste acest zi, printre alte instrumente pe care le utilizează. Și o mulțime de site-uri foarte populare utiliza aceasta în mare parte pentru că este rapid, și pentru că este gratuit. Deși cu siguranță există alternative. Și unii dintre voi s-ar putea bălăci în apă cu alternative pentru proiectele finale. Aceasta este o captură de ecran, între timp, de un instrument bazat pe web numit phpMyAdmin. Este o coincidență faptul că acest instrument bazat pe web este, de asemenea scrise într-o limbă, PHP, dar ceea ce este menit să facă este să ne dea un web- interfață pentru o bază de date. Deoarece MySQL este în mod tipic ceva, istoric tine, ar interacționa cu doar cu o linie de comandă. Și ar fi foarte enervant și arcane de a avea de tip comenzi textuale pentru a selecta date, introduceți datele și șterge datele. Asa ca unii oameni de pe internet a scris un program web-based ca doar să ne gestiona datele din baza noastra de date. E ca și cum dublu click pe Excel, și execută o versiune web-based a acestuia. Și ce ai de gând să utilizați acest lucru pentru în cele din urmă săptămâna viitoare, nu în șase set-p, dar este de a construi ceva numit CS50 Finanțe, care va avea o bază de date de utilizatorii, cu nume de utilizator și parole, dolar sumele pe care le au în conturile lor bancare. O să fie ceva ce utilizați pentru a stoca simbolurile și cantitățile de stocuri care utilizatorii au cumpărat cu ajutorul virtuale dolari pe care le veți da pentru a le. Si va permite utilizatorilor să să se înregistreze pentru site-ul dvs., astfel încât chiar și prietenii tăi poate ton in site-ul dumneavoastră și de fapt înregistrați, conectați, și să se joace în jurul valorii de și să încerce să găsească vina în codul, și să încerce să găsească bug-uri în site-ul dumneavoastră. Și vor înregistra pur și simplu de adăugarea ei înșiși, în mod eficient, prin cod vă scrie la baza de date. De exemplu, acest lucru este un screenshot rapid de ce o bază de date ar putea arata. Aceasta a fost de la unul dintre solutions-- anul trecut acest lucru este ca o mini Excel fișier, stocate în baza noastră de date, În această colecție de software numit MySQL. Pe partea stângă, se pare Am dat fiecare utilizator un număr unic. În a doua coloană, am dat toată lumea un utilizator name-- mea dintre ei. Și pe partea dreaptă, Le-am dat un hash. Acum, acest lucru este de fapt o parolă, dar nu este o parolă text simplu. Este o parolă criptată, în cazul în care vreți, sau o parolă hash. Care ne vom întoarce la timp, înainte de. Dar dacă ați citit vreodată un articol despre modul în care parola la un bancar sau unele site-ul ar fi putut fi compromisă, în general, poate însemna unul din două lucruri. Deci, aceasta este doar un fragment de șase utilizatori. Voi toti acum puteți da seama out prin hacking sau crăparea ce parole noastre șase persoane sunt. Dar dacă ați ajuns vreodată o alertă sau scuze de la o companie sau site-ul spune, Ne pare rău, un hacker a izbucnit în baza noastră de date, tu ar trebui să schimbe, probabil, dumneavoastră parola, ce ar putea să însemne asta? Ei bine, o, ar putea insemna companie a fost mai cretin, și a fost depozitarea parola într-o coloană de acest fel, necriptate. Ceea ce înseamnă un adversar, care a furat baza de date, stie literalmente dvs. Numele de utilizator și parola. Asta e cel mai rău scenariu posibil. Și, după cum veți vedea în p-set șapte, atât de ușor pentru a evita. Nu există absolut nici o scuză pentru faptul că formă de prostie pe internet astăzi. Two-- și vom găsi unele articole să depună mărturie asupra faptului că acest lucru încă se întâmplă, nonetheless-- doi, poate un adversar a furat această versiune a bazei de date. Care este încă un fel de rău, pentru că acum ei știu că am șase clienți, Știu numele de utilizator din aceste șase clienți, și știu criptate versiuni, sau versiunile distribuit, de parole cele șase clienților. Dar oricare dintre voi care ar putea am făcut [? Hacker 2?] în cazul în care cracare parole, sau a luat O privire la această versiune a problemei set, de ce este încă un pic îngrijorătoare dacă un adversar stie hash-ul parole? Audiența: deoarece acestea ar putea introduceți întreaga dicționar în funcție hash. Și dacă parola este un dicționar cuvânt, [? ei doar pot match--?] DAVID MALAN: Exact, un adversar poate scrie doar cod, ca și unii dintre voi a făcut pentru [? Hacker?] 2, prin care te repeta peste toate cuvintele din dicționar, sau toate combinațiile posibile de A prin Z și unul prin nine-- care sună ca o mulțime, și este. Dar pentru un computer, e destul de darn rapid. Și, de fapt, că a fost punct de [? Hacker 2,?] A fost să ia lucruri care literalmente arata ca acest lucru, și reverse engineering ceea ce era de fapt. Deci ne vom uita la modul în care putem stoca acest lucru mai eficient. Se pare că, din fericire în MySQL, acolo vor fi tipuri de date. Și una dintre părțile amuzante despre proiectare baze de date, să fiu sincer, este, de fapt de a decide pentru tine cum ar trebui să Reprezentati datele? Ar trebui să vă reprezinte un număr de telefon ca un int, ca un număr mare, sau un lung? Sau te face de fapt ca o secvență de caractere? Și nu poate fi foarte impactul non-triviale ale acestui. De fapt, unul dintre cele mai Primele, povestiri amuzante Germane este atunci când Mark Zuckerberg a fost construirea Facebook, a fost scrisă inițial în, și încă mai este în mare măsură scris în PHP. Și una dintre cele mai mari provocări au confruntat de timpuriu a fost de scalare. Când au păstrat adăugarea de școală după școală după școală, după știința mea, una din soluțiile originale a fost, în esență, să copiați și să lipiți unele dintre bazele de date și o parte din cod, astfel încât Harvard a fost care rulează pe cont propriu in sistem, și MIT a fost difuzate pe cont propriu in sistem. Și din această cauză, pentru a putea dintre voi s-ar putea aminti care, nu putea avea prieteni în alte rețele. Probabil că nu au prieteni la MIT sau Harvard acum 10 ani sau cam asa ceva, dar nu puteai acopera retele pentru o parte din acest motiv. Și una dintre cele mai mari provocări pentru Mark și pentru companii precum Facebook este, de fapt de manipulare sute și mii și milioane de cereri pe secundă. Deci lucrurile vom începe vorbesc despre această săptămână sunt într-adevăr de gând să fie germane la scris software bun, și popular instrumente de succes care se pot ocupa o mulțime de utilizatori. Deci, vom vorbi despre lucruri ca indexarea și căutarea, dar că este pentru ziua de azi. Vă vom vedea mai multe miercuri. [MUSIC - "Seinfeld" TEMA] DAVID MALAN: aveți posibilitatea de a l, și scade de la ea. Și nu trebuie să stai cu o anumită cantitate predeterminată de memorie. Ei bine, ce se că merge să fie numit? SPEAKER 1: Ei bine, ce se întâmplă? SPEAKER 2: Ce vrei să spui? El dă o prelegere. DAVID MALAN: Și putem folosi un funcție numită malloc la memory-- SPEAKER 1: De ce nu sunt brațele în mișcare? SPEAKER 2: Ei bine that's-- știi, e normal. E la fel ca el are doar cârnați mari agățat acolo. SPEAKER 1: E normal? SPEAKER 2: Da, cred că doar presupunem că accidental înlocuit deodorant lui cu superglue.