[Speel van musiek] David Malan: Dit is CS50, en dit is die begin van die week agt. En ons is so opgewonde om te verwelkom rug, groot verrassing, eie Ramon CS50 se Galvan, 'n stygende senior wat reeds die besteding van die afgelope paar maande sedert Julie in LA, in Hollywood, letterlik besig met 'n splinternuwe TV show genoem Kolonie, die skepper van wat is eintlik 'n Harvard aluin homself. En so het ons is baie opgewonde om dit te sien debuut op die VSA netwerk hierdie Januarie. So bly ingeskakel vir wat, en vir meer Ramon vir die komende weke. Weet nou dat die einde naby is. En wat dit beteken, is dat daar nie alles wat veel oorbly van CS50, hartseer om te sê. Ons het net drie probleem stelle left-- daar probleem stel six-- wat in jou hande nou of binnekort sal wees, as gevolg van later hierdie week-- is bedoel om te oorbrug ons wêrelde van die opdrag lyn, waar ons het spandeer die meeste van ons tyd met behulp van C, en die wêreld van die web ontwikkeling. Wel, jy sal 'n baie idees sien geleen uit die opdrag lyn werk, maar ook 'n baie nuwe en interessante idees wat ook gaan related te wees mobiele programme en tegnologie, meer algemeen, waarmee jy ouens is almal bekend deesdae op skootrekenaars en selfone en dies meer. Sodat jy nie te implementeer 'n webblad, of 'n webwerf per se nie, maar 'n werklike web server. Jy sal die res van 'n web bediener te skryf geskryf in C, wie se doel in die lewe is om HTTP versoeke, diegene te ontvang virtuele koeverte ons bly praat oor, en eintlik reageer óf met sommige statiese content-- soos 'n dot HTML lêer, of 'n dot JPEG of enige ander aantal lêers, of selfs 'n PHP lêer waardeur jou web bediener gaan wat PHP interpreteer kode en spoeg uit die resultate. Nou het ons jou voorsien nogal 'n bietjie van 'n raamwerk Want die it-- verspreiding kode vir die probleem stel ses is oor 1000 lyne lank, 'n baie wat kommentaar, fair-- te wees maar dit is eintlik bedoel om 'n geleentheid te wees om jou hande vuil duik in 'n redelike groot projek wat ons het baie spesifiek uitgekap stukke vir jou, sodat regtig wanneer jy CS50 verlaat en Tik die werklike wêreld van ontwikkeling en wil ploeteraars in enige aantal projekte, jy sal veel groter het troos aflaai 'n bron kode, sommige open source projekteer op die web, en duik in en maak veranderinge wat jy goeddink. Probleem die sewe gaan wees oor maak jou eie web-gebaseerde program wat neem dinamiese insette en produseer dinamiese uitset in die vorm van 'n etrade.com-agtige webwerf. En die probleem stel agt sal nog fokus op 'n ander taal bekend as JavaScript. Intussen het die finale projek is op die horison. Die sogenaamde pre-voorstel is as gevolg van 'n week van vandag af. Pre-proposal-- per die spesifikasie, wat op CS50 se website-- is 'n mooi gemaklik geleentheid vir jy 'n mooi bondige e-pos te stuur om jou onderrig mede net om hom te vergewis of haar van wat jy dink, om gebruik hom of haar as 'n klankbord. En het 'n gesonde verstand check-- of jy dink oor byt te af veel of dalk te min, of miskien het jy het geen idee hoegenaamd en wil betrokke raak in 'n gesprek. Daarna is 'n voorstel en status verslag die sogenaamde CS50 hackathon hier in Cambridge vir Harvard en Yale studente gelyk. Die finale projek se implementering is dan gevolg. En dan 'n CS50 billike hier, in Cambridge, sowel as die ander in New Haven. So het die voorstel, neem 'n blik op die webwerf vir diegene besonderhede. Maar meer spannende, te, is 'n geleentheid om jou hande vuil te kry, en jou gedagtes oop vir 'n hele n klomp van die onderwerpe en gereedskap en tegnieke wat aanvullende om die kursus se kernsillabus, maar tog verwant is. En ook wonderlike trapklippe te doen regtig cool finale projekte wat goed gaan verder as materiaal wat ons het gedek formeel in die probleem stel of in lesing. So gaan na die webwerf CS50 se die hele rooster van seminare. As jy nog nie registreer nie, is dit goed. Gaan voort en teken nog steeds en ons sal volg op met 'n live streaming skakel die dag en tyd is op die webwerf. En alles sal wees aangeteken en aanlyn sit as jy nie kan maak die spesifieke dae en tye. As wat voorlê thereafter-- goed, natuurlik, is daar die CS50 hackathon. Hierdie foto, onthou, van week nul geneem rondom 04:00 een aand in die afgelope jare. Die CS50 billike weer wat sal plaasvind in beide stede. En dan, net om die plant saad, selfs al het ons nog steeds 'n maand plus oorbly semester, as jy wil eie onderrig CS50 se sluit personeel, en jy wil om te begin dink oor hoe 'n CA, of onderrig mede, weet dat Ons begin praat meer daaroor later hierdie semester. Maar hier uitgebeeld word die meeste van span vanjaar se. En so, PHP-- en ek was so hartseer verlede week dat [? Allyse?] Vriendelik gegaan om die moeite om ons hierdie wonderlike rekwisiete dat ek nie uiteindelik met behulp van, so dit regtig net gekyk soort stupid dat ons 'n graaf sit hier al dag verlede Woensdag, en 'n bietjie lepel. Maar dit was my metaforiese manier om te probeer om te verf die foto van die rede waarom ons die oorgang van C na 'n taal soos PHP. En dieselfde kan gesê word van enige aantal languages-- Java, Python, Ruby of trosse van others-- maar terwyl in C, byvoorbeeld, skryf 'n program in C kan tipies wees soos neem 'n lepel soos hierdie en grawe 'n gat in die grond, in die sand of die vuil. PHP kan jy veel groter byt uit die probleem, skryf baie minder-kode met behulp van 'n veel kleiner instrument, want daar is soveel meer funksionaliteit een stuk in. Nou, as ons regtig dramatiese, ons iets om te skop wil hê hier nie, maar laat dit so wees. Intussen het die ander metafoor ons het met is, natuurlik, jy kan gebruik iets soos 'n sleutel om die hamer in iets soos 'n spyker. Maar natuurlik, die reg instrument gebruik gaan om nie soseer die wees taal, die sogenaamde C-- en nou het ek net vererg [? Sanders,?] Waarskynlik ons sal regmaak later-- so die regte gereedskap om gebruik dikwels is nie van plan om hierdie laagste vlak instrument. En inderdaad, C is nie 'n taal wat die meeste van wat jy ooit gaan gebruik, of moet noodwendig weer te gebruik. En in die feit, 'n bietjie secret-- die enigste tyd Ek gebruik C myself is pretty much tussen September en Desember van elke val semester. En dit is omdat ons gebruik dit as 'n geleentheid om die beginsels te leer van die ontwikkeling, en met dit die rekenaar wetenskap grondbeginsels, data strukture, algoritmes en die like-- maar baie vinnig sal jy sien nou dat die sintaksis en die idees onderliggend C is so wonderlik oordraagbaar na meer moderne hoër vlak tale, soos PHP en Perl Python en en Java en Objective-C-- eintlik nie soseer Objective-C-- maar Swift, hierdie nuwer tale wat baie van julle sal dan ploeteraars met jou finale projek. So sonder verdere uitstel het, laat ons eintlik gebruik PHP 'n paar probleme op te los. Onthou dat vroeg op, laaste week, het ons net gebruik CS50 IDE, Ons het 'n knap klein program wat net gesê, "Hello world." En dan gered Ek dit in 'n lêer genaamd hello.php. En dan het ek hierdie opdrag. En waarom? In Engels, wat gaan hier aan? Wat ek doen wanneer Ek hardloop hierdie opdrag? Ja? GEHOOR: Daar is 'n funksie PHP wat lees wat in-- verstaan ​​dat. David Malan: Goed, daar is 'n funksie PHP-- en laat my meer spesifieke, daar is 'n program genaamd PHP, a.k.a. 'N tolk, wat verstaan die inhoud van hello.php, en interpreteer dit om top onder, links na regs, en doen wat daardie opdragte te sê. Die opdragte in hello.php, natuurlik, is net die bron code-- funksies en veranderlikes en loops en die wil, dat ons onsself het begin skryf in PHP. Maar in teenstelling met C, wat is 'n saamgestel taal, PHP jy net skryf dit, en voer dit uit. Jy slaan dat middelman stap van dit na nulle en ene, en dan loop dit. En so wat is 'n onderstebo van hierdie? Hoekom is ons draai die stap? Hoekom doen meer moderne tale is geneig om hierdie stap oor te slaan? Wat was die voordeel? Of net intuïtief? Selfs as ons het nie geskryf veel PHP voor, Wat is voordelig oor nie die opstel van jou kode dink jy? Geen? Nie pleeg? Krap jou kop? Ja. GEHOOR: Meer dinamiese. David Malan: Meer dinamiese? Wat bedoel jy? GEHOOR: [onhoorbaar] David Malan: OK, goed, so afhangende van die insette, jy hoef nie om dit elke keer op te stel. En dit is regtig so eenvoudig soos that-- wat is die punt van die voortsetting van om jou kode te stel? Dit is net 'n stap wat making-- dit vereis, vir die afgelope paar weke, twee keer soveel stappe as net die bestuur van jou program. Dit is nuttig om te sien dat jy sien 'n paar fout boodskappe en so meer, maar dit is nog steeds net 'n irriterende stap. En so programmeerders besef met verloop van tyd, hoekom het ons nie begin skryf tale wat nie nodig dat redelik meganiese stap, sodat net skryf jou kode en voer dit uit. Maar wat was die prys dat ons het ons betaal verlede week, met 'n spesifieke voorbeeld? Ja? Spoed. So [? wat is?] tolke 'n bietjie stadiger, in daardie nulle en ene is mooi en vinnig vir 'n rekenaar om te verstaan, want die Intel CPU, of wat dit ookal is, net verstaan ​​wat aangaan met diegene patrone van stukkies. Terwyl 'n tolk is 'n program wat regtig het na die Ascii bron gelees kode wat jy geskryf het, en dit omskep, om so te praat, of uit te vind hoe dit vat uiteindelik om nulle en ene. So dit neem net 'n bietjie bietjie van 'n prestasie treffer. So dit is 'n bietjie van 'n trade-off. Nou as ons dit doen hier, laat my gaan voort en doen 'n voorbeeld soos volg. As ek gaan hier, nuwe lêer, ek gaan om dit weer te red is hello.php. En nou gaan ek voort te gaan en sê, "druk hello world" - en onthou dat ek druk kan gebruik, doen ek nie, moet druk-F te gebruik. En nou af hier, as ek PHP van hello.php doen huh-- ek lyk nie dit geïnterpreteer het. Wat het ek verkeerd gedoen? GEHOOR: Die skuins armbande. David Malan: Ja, moet jy daardie hoek bracket up top. So dit is soort van irriterende, maar jy gebruik om dit vinnig. As ek moet PHP kode te skryf, het ek algemeen nodig het om die program te vertel, of vertel die tolk, hey PHP, hier kom 'n paar PHP-kode. En dan vir 'n goeie maatreël, sou ek sluit dit nie met hierdie, maar eerder met net vraagteken hoek bracket, so wat nou hier, as ek weer loop dit nou Ek kry die gewenste resultaat. Nou laat ons doen 'n effense optimalisering, net sodat jy dit nog nooit gesien. Dit is 'n soort van irriterende dat ek moet PHP ruimte hello.php hardloop, want in die verlede het ek kon net skryf dot streep program naam, wat is 'n soort van mooi. Dit is soort van 'n beter gebruikers ervaring. So dit blyk jy kan dit doen in PHP met die following-- ek kan gebruik hierdie redelik kriptiese inkantasie aan die bokant hier wat algemeen bekend as 'n kaboedel, waardeur dit is 'n skerp simbool, om so te praat, is dit 'n knal of 'n uitroepteken. En dit is nou die pad na 'n program op 'n tipiese Linux stelsel wat genoem omgewing, of env. En dit line-- lang storie short-- lyn een net sê, hey rekenaar, vind die PHP tolk vir my in die omgewing, vind dit in jou geheue, om so te praat. En wat is nou mooi, is dat as ek gaan hier, Ek kan dot streep te doen hallo dot php, or-- hmm. Toestemming geweier. Wel, sal jy selfs meer van dit te sien met die probleem sit sewe, as jy nie reeds met regte. Dit blyk dat ek nodig het om hierdie opdrag uit te voer genoem [? chamod?] vir 'n verandering mode-- 'n plus x hello.php. Ek moet [onhoorbaar] hierdie een addisionele stap wat vertel van my rekenaar, maak hello.php uitvoerbare. En nou kyk wat happens-- dot streep hello.php, is dit net loop. Ek het nie nodig om te spesifiseer die tolk nie. En ek kan dit nog mooier te maak, Tog, as ek hierdie ding hernoem. As ek hello.php beweeg net Hello-- so in kennis links bo, die naam van die program is inderdaad nou net Hello. Nou kan ek maak dat dit lyk soos 'n C program, selfs al is dit geskryf in PHP-- of eerlik enige aantal van ander tale. So marginale verbetering, geen funksionele verskil. Maar dit is net 'n bietjie nuuskierigheid nou, sodat jy kan programme te skryf in enige taal, en die gebruiker nie doen moet weet of omgee wat dit is. Wel, laat ons kyk na 'n meer dwingende byvoorbeeld nou dat ek opgesweep in advance. En dit is genoem quote.php. En dit is aanlyn beskikbaar. En sien dat dit is redelik short-- maar dit is 'n command line program wat gaan kyk voorraad pryse vir my, wat eintlik gaan related te wees om die probleem die sewe. So laat ons sien wat ek doen. Op die heel boonste Ek het die oop bracket vraagteken PHP. Toe Ek het hierdie lyn, waardeur ek vereis 'n lêer genaamd functions.php-- ons gaan om te sien meer hieroor in 'n bietjie, maar dit is soos C se weergawe van skerp sluit, waar jy wil gaan sluit 'n ander lêer. PHP noem dit nodig het, al is dit het ook 'n funksie insluit. En dit blyk dat function.php is net iets wat ek geskryf het voor die klas. Ek sit dit in dieselfde gids, want Ek wou faktor paar kode dat ons dalk wil elders gebruik. Intussen kan jy waarskynlik aflei wat gaan hier aan. Dit is 'n bietjie anders as C-- maar wat bedoel ek met verseker dat behoorlike gebruik? Vertaal dit meer tegnies. Onder watter omstandighede is ek ophou van die program, of afsluit? Ja? GEHOOR: Wanneer jy nie twee command line argumente. David Malan: Wanneer Ek het nie om lyn argumente beveel. En onthou dat een van daardie argumente is die naam van die program se self. En die tweede gaan wees ander woord ek tik na die vinnige. So net soos C, hierdie is my manier van kontrole, het die gebruiker saam te werk en hardloop die program as ek bedoel? Nou, daar is iets 'n bietjie anders met C-- eerste van alles wat ons hierdie dollar teken en wat 'n dollar teken dui in PHP? Net 'n veranderlike. Dit is net 'n all-- veranderlike gevolg deur alles wat jy wil eintlik dit noem. Let daarop dat daar is iets ontbreek my PHP program, net soos dit was ontbreek laaste week, teenoor C, en dit is wat? A tipes, maar ook iets anders. Daar is geen iets function-- hooffunksie. Daar is geen hooffunksie. Jy begin net skryf jou kode sonder te bekommer oor 'n redelik arbitrêre konvensie van noem sommige verstek funksie belangrikste. So arg C is net regtig 'n globale veranderlike dat die tolk maak vir my beskikbaar. Nou, dit is interessant. So kyk dinge. Dollar-teken voorraad op die links, dit is my veranderlike. Op die regterkant, daar is blykbaar 'n funksie in PHP genoem lookup dat Ek verby my laaste command line argument aan- ongeag die woord is. En ons sal sien hoe dit werk in 'n oomblik. En dan laastens ek die aanmelding van die prys. Ek is uit te druk een deel van so en so. En onthou, dit is die manier PHP-- 'n manier in PHP-- waar jy nie hoef te doen die dollar teken S nie. Jy kan net gebruik krulhakies en prop in sommige veranderlike. Jy hoef nie bekommerd te wees oor gebruik van printf op dieselfde manier. En as 'n eenkant, wanneer jy 'n veranderlike binnekant van dubbele aanhalingstekens soos hierdie, jy 'n fancy tegniek genoem veranderlike interpolasie. Dit beteken net prop die veranderlike hier. En as 'n eenkant, sommige van julle wat kom van ander programme agtergronde, jy mag nie aanhalingstekens gebruik rondom snare om dit te doen. Jy moet dubbel kwotasies vir gebruik veranderlike interpolasie te werk. Anders sal jy letterlik sien daardie krullerige draadjies. So laastens, laat ons gaan voort en hardloop hierdie. Laat my my terminale 'n bietjie groter. Laat my gaan voort en hardloop binnekant van my quote gids. [? CDsource?] [? AM?] [? quote?] PHP quote dot PHP, en ek gaan om te soek vir iets soos GOOG, wat is die simbool, en een deel van sy nuwe naam, Alfabet Inc, kos $ 717, soos vandag. Alle reg, as ons wil weer uit te voer hierdie, iemand het 'n ander voorraad ENKELE hulle wil om te kyk? Microsoft ek dink is hierdie een, MSFT-- $ 53. Ek dink Yahoo is miskien. En Facebook is dat. So, wat is hierdie program doen? Die magic blyk te wees ingesluit in daardie lookup funksie. So laat ons neem 'n vinnige blik. Dit blyk dat nie kom met PHP, dit is in functions.php. En ons sal nie deur hierdie in groot detail, maar kennis van die operatiewe woord hier is wat op die lyn ses functions.php-- Ek het letterlik sê funksie. Ek die naam van my funksie spesifiseer. Ek spesifiseer dan enige argumente of parameters, Ek wil hê dat die funksie om geen tipes take--. En dan het ek dit te implementeer. En Ek sal my hand waai by die implementering, want dit is redelik gevorderde reg nou nie, maar ons sal dit weer sien eintlik in 'n week in die probleem stel sewe. Maar ek kan dit ook skoon te maak. Ek het ook ingesluit in vandag se kode van 'n weergawe van quote, wat geen dot PHP lêer. Want wat is vermoedelik by die top van die program genoem net haal? Dat die sogenaamde shebang-- die redelik kriptiese inkantasie wat sê vind PHP en dan voer dit op my kode hier. Alle reg, sodat bring ons waar ons opgehou het laaste time-- al is dit met sommige meer gevorderde voorbeelde. Enige vrae wat tot dusver oor PHP of wat ons doen? No-- alles reg. Ja? GEHOOR: Binne-in die HTML-lêers, doen you-- [? doen jy ?] [? noem dit net?] 'n [onhoorbaar] PHP lêer? David Malan: Goeie vraag. In 'n web konteks, wat ons is letterlik oor die oorgang na, jy nie die gebruik van die sogenaamde kaboedel aan die bokant, omdat die web server-- dikwels 'n program genaamd Apache of Microsoft IIS, Internet Information Server, of enige aantal ander web bediener sagteware, weet dat wanneer dit sien 'n dot PHP lêer, dat dit moet die tolk hardloop op dit. Dit lyk nie op daardie eerste lyn. So die eerste lyn truuk is net wanneer jy skryf command line programs-- wat ons sal nie super dikwels doen, maar dit is die manier waarop ons te oorbrug ons C voorbeelde om nou ons PHP. So laat inderdaad die wêreld te oorbrug uit die opdrag lyn wêreld om die web deur die volgende te doen. Laat my gaan voort en teken hier vir net 'n oomblik. So as ons 'n web bediener, of liewer as ons my laptop hier, wat ek sal maak soos hierdie. En hier het ons die internet in 'n vorm. En dan hier, ons het 'n bediener in 'n building-- Dit is hoe die internet works-- en hier is 'n bediener met 'n paar ligte miskien. Wat is eintlik aan die gang tussen hierdie twee verbindings? So in hierdie gebou is 'n web bediener. Dit is net 'n rekenaar dit is wat loop sommige bedryfstelsel system-- dalk die vrye sagteware genoem Apache, wat CS50 IDE loop. So jy kan eintlik dink hierdie gebou as die gebou in wat CSt0 IDE gestoor word. Dit is waar almal van julle het rekeninge, waar almal van julle jou eie web server hardloop, almal van julle jou eie unieke URL's, as ons begin om te bespreek, en jy sal sien meer in P. stel ses. Hier is my laptop iewers anders op die internet. En so toe ek besoek 'n URL wat behoort vir my is dat die internet verkeer gaan oor die bediener, die bediener se ontvangs van 'n HTTP request-- soos 'n te kry en dit is index.html antwoord op daardie webblad. So wat is die algemene paradigma. AANGESIEN alles op tot nou vandag alles slegs gebeur in die grense van hierdie gebou. Ek gebruik my laptop, maar Ek is verbind tot CS50 IDE, so al die programme ek hardloop was binnekant van die bediener, self. Maar nou, laat ons begin hergebruik PHP sommige werklike programme te skryf wat is up bedien deur 'n web bediener. En om dit te doen, ek gaan om te gaan in 'n hele klomp van die voorbeelde wat stel hier hierdie idee. So dit is 'n soort van 'n fancy manier beskrywing van 'n programmeertaal paradigma. En in die feit, soos jy CS50 verlaat of werk op die finale projekte, of neem 'n paar te volg op die klas, sal jy begin om te sien dat die world-- veral nadat grootgeword met tale soos C wat super lae level-- besef dat daar is beter maniere van skryf sagteware. Daar is sekere patrone wat jy kan volg, sekere maniere organiseer jou lêers en weë van die name van jou funksies, sodat lang storie kort, die wêreld het gekom met 'n hele klomp van die akronieme en name vir maniere van programmering. Dit is net tegnieke wat jy kan gebruik. En een van hulle is genoem MVC, vir Model View Controller. En dit is net vir nou, 'n té ingewikkeld manier om te sê hoe jy moet uit te lê 'n PHP-gebaseerde webwerf, in ons geval. Hoe kan jy jou lêers, hoe kan jy organiseer jou logika, in 'n manier dat dit makliker is om maak skryf meer ingewikkeld webwerwe? En inderdaad, sal ons vinnig kry daar saam met p-stel sewe. So in die wêreld van MVC, jy gaan om te sien dat ons kode kan oor die algemeen gekenmerk word as óf model kode, of kontroleerder kode, of oog-kode. En ek gaan oversimplify dit as follows-- die kontroles is die brein van jou program, dit is waar al die interessante logika gebeur. So alles wat ons het is skryf tot dusver in die klas, is soort van soos kontroleerder code-- dit beheer jou program, jou loops, jou voorwaardes, u funksies en veranderlikes en alles wat. Uitsig, nou, gaan 'n bietjie te wees meer duidelik in die wêreld van die web. 'N siening is die estetika van jou webwerf. Dit is wat die gebruiker die beelde sees--, die HTML tafels, die HTML tags, en al van dat, al die sagte estetiese dinge wat nie so moeilik om te skryf, maar is net wat jy genereer, is die sogenaamde oog, die estetika. En model, uiteindelik, gaan databasis spul wees wat ons sal duik in al begin die meer hierdie Woensdag. So kontroleerder is die logika, siening is die estetiese dinge, en model gaan wees waar Ons slaan ons werklike data. So laat ons kyk na dit meer konkreet met die volgende voorbeeld. Ek gaan hier in my gids gaan bron vandag se code-- wat almal is aanlyn beskikbaar. En ek gaan in weergawe nul om te gaan. En hier is-- kom ons noem dit die weergawe van die webwerf nul CS50 se. Daar is nie veel hier nie. Dit is 'n baie eenvoudige webblad wat waarskynlik gebruik wat HTML tags-- net raai uit die verlede voorbeelde? Wat is dit? H1-- waarskynlik vir daardie groot vet titel, wat logo up top, CS50. En wat anders is op die spel? Ja? GEHOOR: On-geordende lys. David Malan: Ongeordende list-- so die UL tag en miskien 'n paar van die LI tags. En as jy nie hierdie onthou, dit eerlik nie saak nie. Dit is soort van sagte implementering van HTML besonderhede dat jy vinnig opkyk en jy is terug op jou pad. Ons sal meer fokus op die ontwikkeling idees wat die sappiger stukke is. So laat ons net 'n vinnige kyk na die HTML-- en inderdaad as ek oop te maak die bron oog hier, yup, Dit is presies wat gaan hier aan. Daar is 'n UL tag. Geneste binnekant van dit is LI tags. En dan geleen Ek die URL van die werklike leerplan hier. En dan in die lectures.php is blykbaar 'n ander dinamiese gegenereerde bladsy wat gaan om te hê, laat ons see-- ah, die eerste twee weke van lesing. So week nul en een week, laat kyk na this-- as ek sien bladsy bron ook super eenvoudig. Dit is wat lei tot twee bladsye genoem week0.php en week1.php. So oorweeg nou wat gebeur. Wanneer ek op week0.php, my laptop maak 'n versoek om week0.php. Die web bediener, a.k.a., CS50 IDE, ontvang dat virtuele koevert. Dit sien 'n boodskap soos, kry week0.php. Dit word dan die interpretasie van die lêer, top na onder, links na die lêer right-- genoem week0.php-- en spoeg uit die resultate. So binnekant van hierdie lêer, week0.php, moet die kontroles logika wat genereer hierdie HTML, en ons sal gou sien dat. Maar vir nou, laat my klik op week nul, en nou het ons Woensdag en Vrydag, en nou het ons die skyfies stadig van week nul. En jy kan onthou dit van pad terug toe. So dit is al wat hierdie webwerf is om te doen. So laat ons kyk hoe dit dit te doen. Ek gaan om terug te gaan na die bronkode hier, in CS50 IDE, en ek gaan om oop te maak index.php. Op die top van hierdie lêer is 'n klomp van die kommentaar. En dan in die middel van hierdie lêer, dit blyk, is geen PHP-kode hoegenaamd nie. Want as jy nie enige van die het oop bracket vraagteken PHP tags, jy is vry om net sit HTML. Want wat die PHP tolk veronderstel is om te doen nie, is wanneer dit lees hierdie file-- bo na onder, links na right-- dit interpreteer net code dit sien tussen diegene hoek tussen hakies vraagteken. En enigiets anders wat dit nie doen nie erken as PHP, dit spoeg net uit. En HTML is een van die dinge dit sal net spoeg uit. So hierdie lêer kon is index.html genoem, maar ek noem alles dot PHP as 'n stepping stone. Lectures.php-- insgelyks underwhelming, dit is net 'n paar HTML. Week0.php, insgelyks net 'n paar HTML. Maar laat ons nou op die spreekwoordelike ingenieurswese hoed, en kyk hoe ons dit kan verbeter. Dit is nie moeilik om dit te doen nie, maar ek soort van afgewentel na kopie en plak. En in die feit, as ek week twee, jy weet wat ek waarskynlik gaan om te doen? Ek gaan om te gaan na week1.php, ek is gaan alles beklemtoon. Ek is van plan om dit te kopieer, plak dit in 'n nuwe lêer genaamd week2.php, tweak paar URLs, en op my manier. So op grond van wat ons het gesien in C reeds Dit beteken egter nie reg voel, hopelik. Kopieer, plak selde die regte oplossing. So, wat kan ons begin om te doen om dit te verbeter? Waar is die geleenthede vir 'n beter ontwerp? Teen die tyd dat ek by week agt, dit gaan regtig irriterende te wees as ek wil om te verander die font van elkeen van my bladsye, of as ek wil om die struktuur van die uitleg te verander. So waar is die geleentheid vir 'n beter ontwerp? Wel, laat ons kyk wat is gedeel oor al hierdie lêers. Hier is een week, hier is week nul, hier is lectures.php, hier is index.php-- wat dieselfde is en Wat is anders, rofweg gesproke, in elk van hierdie lêers? Ja? GEHOOR: [onhoorbaar] David Malan: OK, goed. So is daar 'n patroon, sekerlik, waardeur elke keer as ek kies lesing I, Ek moet skep van 'n baie soortgelyk soek-bladsy. En so miskien kan ek hefboom die feit dat baie, ons doelbewus numeries geïndekseer ons lectures-- as ek nog meer kan sit woorde in jou antwoord. En wat is die enigste ding wat regtig nie, dit is die verandering tussen week one-- en laat my rol af so dit is rofweg in dieselfde place-- so hier is week nul, rofweg aan die bokant. Hier is week een week nul, week een week nul. OK, letterlik as jy weet geen program ookal, dit is nou net soos 'n patroon wat ooreenstem met spel. So, wat is die verskil? Ja? GEHOOR: [onhoorbaar] David Malan: Goed, so die titel verander, ooit so effens. Zero gaan, natuurlik, een. Dieselfde ding gebeur in die H1 tag. En ons het nie baie sien dit as maklik, omdat die URLs is 'n bietjie lank. Maar diegene URLs is effens verander. Maar wat nie verander nie, durf ek sê, die meeste van die inhoud van die page-- die HTML tag is dieselfde, die kop is dieselfde, die titel is byna dieselfde, die liggaam is dieselfde, en byna alles anders is dieselfde, behalwe vir daardie klein tweaked. So, hoe kan ons gaan oor factoring sommige van dit uit? Wel laat ek stel presies dat in die volgende weergawe. So hier in weergawe een, ek het die presiese dieselfde lêers, plus 'n paar ander. Hier is index.php-- en selfs as jy nog nooit gesien voor PHP, wat ek waarskynlik doen om hierdie op te los problem-- gebaseer op wat jy hier sien? Ja, is dat 'n effense verbintenis? Geen? Ja, gaan op. GEHOOR: [onhoorbaar] David Malan: Yep. GEHOOR: [onhoorbaar] David Malan: Ek moet jy praat net 'n bietjie harder. GEHOOR: [onhoorbaar] David Malan: OK, goed. En ek think-- dit was moeilik om te you-- maar ek hoor dink wat jy kry op is dat die etikette wat algemeen up top was, en die etikette wat algemeen was op die bodem, is nou ingereken word, of verban na watter lêers? Header.php en footer.php-- en ons gaan sommige tweaks maak spreek die kommer jy net uitgespreek oor die getalle verander, want Byvoorbeeld, as ek reg gehoor nie. Maar dit blyk die kern van dit te wees. As daar 'n groot hoeveelheid van die ontslag aan die bokant van die bladsy en 'n groot hoeveelheid van die ontslag aan die onderkant, laat letterlik net 'n hoogtepunt en sny dat die inhoud nie, sit dit in 'n aparte file-- net soos die idee van CSS, waar ons ingereken uit baie soortgelyk estetika, sit dit in 'n aparte dot PHP lêer, gebruik die mechanism-- vereis wat is soos C skerp include-- wat is in wese soos om te sê gaan gryp die inhoud van header.php, en kopieer en plak dit hier. Maar wat dit beteken is dat dit nou in index.php, ek het die twee lyne. In lectures.php, het ek ook het die twee lyne. In week0.php, het ek ook het die twee lyne. So nou, as ek wil om te verander die titel van al my bladsye, of ek wil die verander fundamentele struktuur, Ek kan dit nou verander in net een plek, of twee places-- kop-en voet, onderskeidelik. Nou begin die kode se om te kyk 'n bietjie meer kriptiese, reg? Maar as jy dink oor wat die bladsy is doing-- as ek versoek week0.php, net soos op die tekening oor here-- wanneer week0.php versoek word, wat beteken dit? Letterlik, hierdie lêer is versoek deur die leser. Die web server-- a.k.a. CS50 ID-- gryp hierdie lêer, week0.php, en lees dit bo tot onder, links na regs. On line een, is dit onmiddellik ontmoetings oop bracket vraagteken PHP, vereis header dot PHP, en so wat die PHP tolk does-- dit is gebou in die web bediener, omdat ons vooraf dit you-- dit outomaties gaan in header.php, afskrifte van die inhoud, plak hulle hier. Maar dan moet die tolk ontmoetings vraagteken naby bracket, so dit is al gedoen dink. Nou is dit net blindelings spoeg uit lyne twee deur sewe want dit is net rou HTML. Kry om te reël agt, en doen wat dieselfde magic again-- die opening van die lêer, gryp die inhoud en wat hulle of hulle plak regs en dan of daar. Maar ek het net verwys na 'n fout. Dit is 'n gedeeltelike stap agteruit, want as ons kyk in header.php, Ek het soort van sny 'n hoek. Watter kenmerk het ek opgee om om hierdie omstrede beter ontwerp te kry? Ja? GEHOOR: [onhoorbaar] David Malan: Ja, ek soort van sny 'n triviaal hoek. Jy het daarop gewys dat dit wat die verandering was die titel, die nommer in die titel, en die getal in die H1. So my oplossing was, OK, laat ons net die naam van die blad, en nie te gaan met dit probleem hoegenaamd nie. So dit is 'n gedeeltelike stap agteruit vir seker. Maar wat opvallend is hier Is dit wat ek gedoen het anders ingereken al die gemeenskaplike dinge. En in footer.php, sien ek ingereken al van dat, hoewel minder, algemene dinge. So ek moet een of ander manier nou in staat wees om neem nog 'n stap vorentoe, en los daardie titel kwessies. So laat dit te doen. Laat my gaan in my tweede weergawe hier, wat, weer, het dieselfde lêers behalwe vir een nuwe toevoeging. En dit is 'n bietjie meer verbose, maar laat ons kyk of ons kan terg uitmekaar wat gaan hier aan. So in plaas van dat header.php en footer.php, Dit lyk asof ek net wat een file-- genoem, natuurlik, helpers.php. En laat my nou bepaal, wat binne in helpers.php is net 'n klomp van die funksies wat ek geskryf het, net soos voorheen. Maar ek het dit helpers.php. Nou blykbaar in lyn drie en 10, ek is roep twee functions-- lewer kop, lewer footer. Diegene kom nie met PHP, het ek geskryf diegene myself. En ek het dit in helpers.php. Nou het ons net gesien hoe hierdie sintaksis een keer, en dit was super kort. Maar dit is blykbaar 'n argument om kop, die funksie lewer. Hoekom weet ek dit? Wel, hier is 'n beslote paren, hier is 'n oop hakie. En natuurlik, net soos in C, enigiets tussen diegene hakies is 'n input-- of 'n argument om die funksie. Wat is die data tipe van hierdie argument, gebaseer op wat ek uitgelig? Wat doen diegene vierkantige hakies dui, gebaseer op verlede week? Ja, dit is 'n array-- spesifiek 'n assosiatiewe skikking. En dit sintaksis weliswaar is 'n bietjie funky, Maar dit is net verby in een van die belangrikste waarde paar. Die sleutel is, quote unquote titel, en die waarde is CS50. As ons dit gedoen in C, kan dit plaas lyk meer soos hierdie, net quote unquote CS50-- of eintlik sou dit wees krullerige draadjies, of iets soos dit in C, waar die sleutel is nul, en die waarde is CS50. Maar weereens, in PHP, selfs al is die sintaksis is, weer, 'n bietjie vreemd, dit kan jy in slaag woorde in plaas van getalle om sleutels te assosieer met waardes. So, wat beteken dit alles? As ek gaan in helpers.php, laat ons kyk na hierdie funksie. renderHeader.php, eerder renderHeader is my funksie, en ek weet dat want ek sien die funksie navraag hier. Dit is 'n nuwe uit C-- dit blykbaar neem 'n argument genoem data-- maar ek kon dit genoem enigiets nie, maar ek het dit data, net 'n bietjie clean-- wees en net 'n raaiskoot, veral as jy het geprogrammeer in 'n ander hoër vlak taal voor, iets wat bo C, konseptueel. Wat beteken gelyke oop bracket vierkante bracket waarskynlik beteken? Of wat kan dit beteken? Ons het dit nie gesien in C. Ja? 'N leë skikking. Spesifiek, beteken dit dat indien die gebruiker renderHeader noem nie met 'n argument, ek gaan nog om 'n argument genoem data het, maar die standaard waarde is gaan na 'n leë verskeidenheid wees. So dit is net 'n mooi gerief. Ek hoef nie te skree die gebruiker, of sê jy gebruik my funksie verkeerd. Ek kan net 'n verstek gee die gebruiker waarde, indien ek nie veral sorg. Nou is hierdie funksie, ek is gaan my hande waai. Maar hierdie uittreksel funksie kan ons om hierdie veranderlikes in die data slaag in header.php in die volgende manier. En dit is die laaste stuk, Ek dink, van funky sintaksis. Hier is my nuwe weergawe van header.php-- dit gebruik om te sê, letterlik, oop bracket titel CS50, en dit was dit. En dieselfde ding vir die H1. Nou is dit blykbaar sê iets mooi funky. En laat my vereenvoudig vir 'n oomblik soos volg. Dit is wat ek het verander my titel te wees. Dit is egter 'n bietjie lelik om voortdurend oop hakies met PHP, en gebruik dan die gedrukte funksie. Dit blyk dat 'n snelskrif PHP notasie vir hierdie, wat net 'n gelyke teken, wat is tegnies 'n funksie genoem eggo in plaas van druk, maar dit is dieselfde ding, effektief. Dit lyk net beter. Dit is net 'n sintaktiese suiker, as jy wil, dit maak my kode kyk 'n bietjie beter. Maar dit blyk, en ons sal dit weer te sien voor lank het ons na hierdie skakel lastig lang funksie genoem HTML spesiale karakters in PHP, want dit blyk daar is sekere insette wat die gebruiker kan gee vir ons, of dat die gebruikers om ons te gee, wat gaan ons webwerf te breek. Maar ons sal sien dat die volgende week met JavaScript. Maar vir nou, weet net dat hierdie lêer, headers.php, eenvoudig neem die titel wat Ek geslaag, dit maak seker dit is veilig om te ingespuit word in 'n web bladsy, en dit spoeg dit uit as my titel en as my H1. So as ek gaan in hierdie weergawe nou, sien dat lesings het sy titel terug, week nul het sy titel terug, en Trouens, die HTML ek genereer is identies aan wat my eerste weergawe was-- behalwe vir my spasie, want ek het begin opmaak my kode 'n bietjie anders. Maar ek het al gegenereer die kode wat ek omgee. So laat my breek vir net 'n oomblik en kyk as daar enige vrae of verwarring wat ek gemaak het. Alle reg, so laat draai 'n bietjie harder hier om te sien of daar 'n geleentheid vir verbetering. Helpers.php hierdie het ook funksie, genaamd renderFooter. En wat is merkwaardig oor renderHeader en renderFooter? En weer, vir doeleindes vandag se, jy weet dat die uittreksel funksie is net my manier van verbygaande argumente in header.php en footer.php. Jammer? GEHOOR: [onhoorbaar] David Malan: Ja, ek alleen verander die vereistes lyn. So letterlik, het ek die sonde van kopieer en plak, maar weer. Dit is nie 'n groot aantal lyne, maar kom on-- as ek kopieer en plak alles net een klein woord te verander, en die een wat bietjie woord wat Alan wys Out is voet teks hier versus header hier. Anders, alles is identies, behalwe vir, natuurlik, name van die funksie. So wat kan ons beter doen? Wel laat ek oopmaak hierdie weergawe hier, waardeur in helpers.php, Hoekom kry ek nie net 'n bietjie slimmer oor hierdie? Skryf effens meer ingewikkeld kode, maar noem dit lewer? So wat het ek fundamenteel verander? Dit neem 'n argument now-- twee argumente, data steeds. En dan wat is die eerste naam waarskynlik gebruik word vir, gebaseer op wat jy hier lees? Selfs as 'n paar van die sintaksis is nog nuut. Wat is dollar teken sjabloon? Jammer? GEHOOR: Selected of footer. David Malan: Selected of footer. So glo, het ek besluit dat indien die enigste ding wat verander is wat ek wil sjabloon om print-- en template Ek bedoel dit is bloudruk vir kode wat ek wil lewer, maar ek wil aan te sluit in 'n paar values-- so as dit is net kop of footer, hoekom nie ek parameteriseren dit en noem die argument dollar teken sjabloon? En dan hierdie funky sintaksis laat my om 'n pad hier te skep in 'n veranderlike. So dollar teken pad is 'n veranderlike. Wat beteken dit sintaksis doen, as jy vertroud is? Ja? GEHOOR: [onhoorbaar] David Malan: Presies. As sjabloon is, quote unquote, kop, of as sjabloon is, quote unquote, footer, daardie lyn is daar wat ek uitgelig, lyn agt, is eenvoudig te neem dat die naam, soos kop, en concatenating met dot PHP. So het ons nie hierdie operateur het in C. Dit dot operateur is 'n wonderlike ding in PHP-- as jy vertroud is met JavaScript of Java, kan jy die plus gebruik teken om aaneenskakellling doen. In C, dit is 'n pyn in die neck-- en ek is so jammer, in p-stel ses jy gaan het te doen this-- dit is 'n pyn in die nek snare koppel. Hoekom? Wel, want as jy het 'n string wat is hierdie lang, en 'n ander string wat hierdie lang, jy kan nie net prop hulle saam. Wat doen jy in plaas daarvan het te doen in C? Ja? GEHOOR: [onhoorbaar] David Malan: Jy moet malloc geheue, of gebruik 'n skikking op die stapel. En jy eintlik moet maak dat die verskeidenheid groot genoeg om hierdie pas plus dit plus agteroorskuisstreep nul. Koppel hulle dan saam met behulp van roer kat of met die hand met 'n lus, of enige aantal tegnieke. En ons wys jou 'n paar in-p stel ses. Dit is 'n pyn in die nek. En dit is werklik wat ek bedoel oor hierdie versus this-- soos C versus PHP. Jy kry net soveel meer funksie vir gratis, sodat jy kan fokus, ideaal, aan die pret deel van kodering, die projek wat jy wil om op te los, eerder as die lae vlak kleinigheden. So dit net genereer header.php of footer.php gebaseer op watter een ek bel. En inderdaad as ek gaan in index.php, kennisgewing al wat changed-- plaas van roep lewer kop of lewer footer, Ek bel lewer, gevolg deur die Naam van die sjabloon wat ek wil doen. En jy sal dit sien, ook in die probleem stel sewe waardeur ons toelaat om die gebruik dieselfde funksie om trosse te maak en trosse van verskillende webblaaie. So eerder as woon te veel meer op die details-- wat julle weer sien in probleem stel seven-- laat ons kyk by nou die begin van 'n oplossing om 'n meer interessante probleem. So ver, ons het niks gedoen het gered data. Trouens, die enigste tyd wat ons nog ooit gered iets wat ons gedoen het in hierdie klas is wanneer ons het 'n baie eenvoudige demo rukkie terug, waardeur ons gebruik lêer IO in C, en ek dink ek getik in my naam, en Hannah se naam, en die naam Maria se of miskien naam Andy se en dan gered ons CSV file-- CSV. En ons gebruik fopen-- Ek dink ons gebruik fprintf as ek reg onthou, en ons gered van 'n lêer. Nou, dit is die eenvoudigste vorm van 'n databasis. As jy wil 'n webwerf vir die maak Frosh kitsboodskappe program, waardeur eerstejaars kan ideaal vir 'n sport, jy wil iets met daardie data te doen. Verlede week, het ons niks met die data-- ons het net gesê, jy geregistreer is, nie regtig nie. Of miskien per e-pos wat ek die Proctor, en dit was dit. Maar dit sal lekker wees as ek kon gee dat Proctor n CSV-lêer, soos 'n Excel-lêer. Of nog beter, sou dit lekker wees as ek kon sit name diegene gebruikers en dorm name en al wat in 'n databasis wat net leef vir ewig, totdat ek kies om die data te verwyder. 'N databasis wat kan my inligting navraag. En inderdaad, dit is wat 'n databasis is. Ons stel vandag, en volgende week ook 'n tegnologie genoem SQL-- n Structured Query Taal, wat is 'n ander taal. Dit is in wese 'n programmeertaal taal, maar vir databasisse. En 'n databasis vir nou, net dink as 'n super fancy weergawe van Microsoft Excel, of Google Sigblaaie, of Apple Nommers. Dit is oor die algemeen 'n program wat dit moontlik maak jy 'n hele klomp van die data te stoor in rye en kolomme, heel soos jy dalk in Excel. Maar wat is lekker, veral as ons is nie vertroud is met super Excel, wat SQL kan jy doen is navraag hierdie inligting deur die skryf van reëls van die kode waar jy kan, selfs as jou databasis het 'n miljoen rye in dit, jy kan vind dinge super vinnig. In werklikheid, Excel is veral sleg groot datastelle. En in die feit, tot 'n paar jaar gelede, blyk Excel sal net toelaat dat jy om te stoor tot 65.535 rye data-- wat klink soos 'n baie, maar aan die tyd was ek 'n grad student, en ek onthou struikel oor hierdie, want ek was te genereer CSV lêers vir my navorsing en ek wou hulle vinnig analiseer deur net die opening in Excel. Natuurlik, my rekenaar net neergestort, want ek het meer as 65.000 rye. Maar waar het die 65535 vandaan? Wat is Microsoft doen, vermoedelik? As jy goed met jou magte van twee is? Ja, hulle gebruik 'n 16-bit waarde tot die ry getal verteenwoordig. En twee tot 16 is 65,536-- minus een, want as jy zero-indeks beteken dit was die meeste aantal rye Ek kon hê. En dit was net 'n ontwerp besluit. Deur die redding van 16 stukkies, hulle het my beperk om 16.000 rye, in plaas van 4 miljard, wat ek ideaal kon gehad het. Maar vir nou, ons gaan stel dit meer in 'n web konteks. En wat is lekker oor SQL is dat selfs al is dit mooi en mooi kragtige gesofistikeerde, dit is werklik kook af na vier belangrike bedrywighede, vier sleutel funksies, as jy will-- kies, vir die herwinning van data, soek vir data; verwyder of verwyder data; voeg vir die toevoeging van rye van die databasis; en opdatering. So as jy ooit gebruik Google Sigblaaie, Apple Nommers, Microsoft Excel, het jy uitgevoer word, waarskynlik, al van hierdie bedrywighede as 'n mens deur net die gebruik van jou sleutelbord en mouse-- invoeging van data, die gebruik van jou oë te kies of soek vir data, of update data, of te verwyder data. So, wat beteken dit? Wel, pre-geïnstalleer in CS50 IDE is 'n program genaamd MySQL. Dit is 'n gratis, open-source databasis wat is super gewild. Facebook, byvoorbeeld, gebruik dit om hierdie dag onder ander instrumente wat hulle gebruik. En 'n baie baie gewild webtuistes gebruik dit in 'n groot deel, want dit is vinnig, en omdat dit is gratis. Alhoewel beslis alternatiewe bestaan. En sommige van julle dalk ploeteraars met alternatiewe vir finale projekte. Dit is 'n kiekie, intussen, van 'n web-gebaseerde instrument genoem phpMyAdmin. Dit is 'n toeval dat hierdie web-gebaseerde instrument is ook geskryf in 'n taal, PHP, maar wat dit bedoel is om te doen is vir ons 'n web-gebaseerde koppelvlak om 'n databasis. Omdat MySQL tipies is iets histories jy wisselwerking met slegs met 'n command line. En dit sou wees super irriterende en arcane om tekstuele opdragte tik te kies data, voeg data en data verwyder. So 'n paar mense op die internet het 'n web-gebaseerde program dat net laat bestuur die data in ons databasis. Dit is soos dubbel te kliek op Excel, en bestuur van 'n web-gebaseerde weergawe daarvan. En wat jy gaan om dit te gebruik vir uiteindelik volgende week, nie in-p stel ses maar om iets te bou genoem CS50 Finansies, wat gaan 'n databasis van het gebruikers, met gebruikers name en wagwoorde, dollar beloop dat hulle in hul bankrekeninge. Dit gaan wees iets wat jy gebruik om te stoor die simbole en die hoeveelhede van die aandele wat gebruikers gekoop het die gebruik van virtuele dollars wat jy vir hulle gee. En dit gaan toelaat gebruikers om te registreer vir jou site, sodat selfs jou vriende kan inskakel om jou webwerf en eintlik te registreer, inteken, en speel rond en probeer om fout te vind in jou kode, en probeer om foute in jou webwerf. En hulle sal net registreer hulself te voeg, effektief, via kode wat jy skryf aan jou databasis. Byvoorbeeld, dit is 'n vinnige kiekie van wat 'n databasis kan lyk. Dit was een van solutions-- verlede jaar se dit is soos 'n mini Excel lêer, gestoor in ons databasis gestoor in hierdie sagteware genoem MySQL. Op die linkerkant, ek het blykbaar gegee elke gebruiker 'n unieke nommer. In die tweede kolom, het ek gegee almal 'n gebruiker name-- my eie tussen hulle. En op die regterkant, Ek het vir hulle 'n hash gegee. Nou is dit eintlik 'n wagwoord, maar dit is nie 'n gewone teks wagwoord. Dit is 'n geënkripteerde wagwoord as jy wil, of 'n hash wagwoord. Wat ons sal terug na voor lank kom. Maar as jy al ooit gelees 'n artikel oor hoe jou wagwoord op 'n sekere bank of 'n webwerf kon gewees het in die gedrang, dit kan oor die algemeen beteken een van twee dinge. So dit is net 'n uittreksel uit ses gebruikers. Almal van julle kan nou uitvind uit via inbraak of krake wat wagwoorde ons ses mense se. Maar as jy al ooit gekry 'n waarskuwing of 'n verskoning van 'n maatskappy of 'n webwerf woord Jammer, 'n hacker breek in ons databasis jy moet waarskynlik verander jou wagwoord wat kan dit beteken? Wel, een, kan beteken dat die maatskappy het meer moronic was, en is die stoor van jou wagwoord in 'n kolom soos hierdie, unencrypted. Wat beteken dat die teenstander, wat die databasis gesteel het, letterlik ken jou gebruikersnaam en wagwoord. Dit is die ergste moontlike scenario. En as jy sien in p-stel sewe, so maklik is om te vermy. Daar is absoluut geen verskoning vir wat vorm van onnoselheid in vandag se internet. Two-- en ons sal 'n paar artikels vind om te getuig van die feit dat dit nog steeds gebeur, nonetheless-- twee, miskien is die teenstander gesteel hierdie weergawe van die databasis. Wat is nog soort van slegte, want nou hulle weet dat Ek het ses kliënte, Ek weet die gebruikers name van daardie ses kliënte, en ek weet die geïnkripteer weergawes, of die hashed weergawes, wagwoorde daardie ses klante. Maar niemand van julle wat dalk het gedoen [? Hacker 2?] waar jy gekraak wagwoorde, of het 'n blik op die weergawe van die probleem stel, hoekom is dit nog 'n bietjie kommerwekkend indien die teenstander ken jou hash wagwoorde? GEHOOR: Omdat hulle kon Tik die hele woordeboek in die hash funksie. En as jou wagwoord is 'n woordeboek woord [? hulle kan net match--?] David Malan: Presies, die teëstander kan net skryf kode, soos sommige van julle gedoen het vir [? Hacker?] 2, waardeur jy Itereer oor al die woorde in die woordeboek, of al die moontlike kombinasies van A deur Z en een deur nine-- wat klink soos 'n baie, en dit is nie. Maar vir 'n rekenaar, dit is pretty darn vinnig. En in die feit, dit was die punt van [? Hacker 2,?] Was om dinge te neem wat letterlik lyk soos hierdie, en reverse engineering wat dit werklik was. So ons sal kyk hoe ons kan stoor dit meer doeltreffend. Blyk, gelukkig in MySQL, daar gaan datatipes wees. En een van die pret dele oor databasis ontwerp, om eerlik te wees, is eintlik besluit vir jouself hoe moet jy die data verteenwoordig? Moet jy 'n telefoonnommer verteenwoordig as 'n int, soos 'n groot aantal, of 'n lang? Of het jy eintlik doen as 'n reeks van karakters? En daar kan baie wees nie-triviale impak van hierdie. Trouens, een van die vroegste, pret related stories is wanneer Mark Zuckerberg gebou Facebook, is dit oorspronklik geskryf, en nog steeds is grootliks geskryf in PHP. En een van die grootste uitdagings hulle in die gesig gestaar vroeg op is skalering. Wanneer hulle het die toevoeging van die skool na skool na skool, na my wete, een van die oorspronklike oplossings was in wese te kopieer en plak sommige van die databasisse en 'n paar van die kode, sodat Harvard was loop op sy eie server, en MIT hardloop op sy eie bediener. En dit is die rede waarom, vir 'n paar van julle wat kan onthou, jy kan nie vriende het in ander netwerke. Jy het waarskynlik nie vriende het op MIT of Harvard 10 of so jaar gelede, maar jy kan nie netwerke span vir deels daardie rede. En een van die grootste uitdagings vir die Mark en vir maatskappye soos Facebook is eintlik die hantering van honderde en duisende en miljoene versoeke per sekonde. So die dinge wat ons sal begin praat oor die week is regtig related om te wees die skryf van goeie sagteware, en algemeen suksesvolle gereedskap wat kan hanteer baie van die gebruikers. So ons sal praat oor dinge soos kruip en soek, maar dit is dit vir vandag. Ons sal jy sien vir meer op Woensdag. [MUSIEK - "Seinfeld" TEMA] David Malan: jy kan om , en trek daaruit. En jy hoef nie te hou met sommige pre-bepaal bedrag van die geheue. Wel, wat is dit gaan om genoem te word? Spreker 1: Wel, wat gaan aan? Spreker 2: Wat bedoel jy? Hy gee 'n lesing. David Malan: En ons kan 'n gebruik funksie genoem malloc om memory-- Spreker 1: Hoekom is daar nie sy arms beweeg? Spreker 2: Wel that's-- jy weet, dit is normaal. Dit is net soos hy net groot wors hang daar. Spreker 1: Dit is normaal? Spreker 2: Ja, ek dink ons net aanvaar hy per ongeluk vervang sy deodorant met superlijm.