>> [Musik spiller]
>> DAVID MALAN: Dette er CS50, og dette er starten på uge otte.
Og vi er så glade for at byde velkommen tilbage, store overraskelse, CS50 egen Ramon
Galvan, en stigende senior, der har været udgifter de sidste adskillige måneder
siden juli i LA, i Hollywood, bogstaveligt talt arbejder på en helt ny tv
show kaldet Colony, skaberen af ​​hvilke er faktisk en Harvard alun selv.
Og så vi er meget spændte på at se denne debut på USA-netværket i januar.
Så ophold tuned for det, og for mere Ramon for de kommende uger.
>> Ved nu, at enden er nær.
Og hvad dette betyder, at der ikke så meget tilbage af CS50, trist at sige.
Vi har blot tre problem sæt left-- der er
problem sæt six--, som er i dine hænder nu, eller snart vil være,
senere på week-- er beregnet til at bygge bro vore verdener af kommandolinjen, hvor
vi har brugt det meste af vores tid ved hjælp af C, og verden af ​​web-programmering.
Nå, vil du se en masse ideer lånt fra kommandolinjen arbejde,
men også en masse nye og interessante idéer
, der også kommer til at være germane for mobile applikationer og til teknologi,
mere generelt, som du fyre kender alle i dag
på bærbare computere og telefoner og lignende.
>> Så du implementere ikke en webside, eller en hjemmeside
per se, men en faktisk webserver.
Du vil skrive resten af ​​en web-server skrevet i C, hvis formål i livet
er at modtage HTTP-anmodninger, de virtuelle kuverter vi holder taler
om, og faktisk reagere enten med nogle statiske content-- ligesom en prik HTML
fil eller en prik JPEG eller enhver anden antal filer,
eller endda en PHP-fil, hvor din web server kommer til at fortolke denne PHP
kode og spytte ud resultaterne.
Nu har vi givet dig ganske lidt af rammer
for det-- faktisk fordeling kode til problemet
sæt seks er over 1.000 linjer lang, en masse som er kommentarer, at være fair--
men dette er virkelig betød at være en mulighed
at få dine hænder beskidte dykning ind i et temmelig stort projekt
at vi har meget specifikt hugget ud stykker af for dig,
så virkelig når du afslutter CS50 og indtaste den virkelige verden af ​​programmering
og ønsker at fuske i vilkårligt antal projekter,
har du meget større komfort downloade nogle kilde
kode, nogle open source projekt på nettet,
og dykning i og gøre ændringer, som du ønsker det.
Problem sæt syv kommer til at handle om lave din egen web-baseret program
der tager dynamisk input og producerer dynamisk output i form
af et etrade.com-lignende website.
Og problemet sæt otte vil fokusere på endnu et andet sprog er kendt som JavaScript.
>> I mellemtiden er den endelige projekt er i horisonten.
Den såkaldte pre-forslag skyldes en uge fra i dag.
Pre-proposal-- pr specifikationen, som er på CS50 s website--
er en temmelig afslappet mulighed for dig at sende en temmelig kortfattet e-mail
til din undervisning kollega bare at underrette ham
eller hende om, hvad du tænker, at bruge ham eller hende som sparringspartner.
Og har en tilregnelighed check-- uanset om du tænker
om bide også meget eller måske for lidt,
eller måske du har ingen idé overhovedet og ønsker at engagere sig i en samtale.
>> Derefter er et forslag og statusrapport,
den såkaldte CS50 hackathon her i Cambridge til Harvard og Yale-studerende
ens.
Det endelige projekts implementering er derfra.
Og så en CS50 retfærdig her, i Cambridge, samt en anden i New Haven.
Så forslaget, tage et kig på hjemmesiden for disse oplysninger.
>> Men mere spændende, også er en mulighed for at få dine hænder beskidte,
og jeres sind åbne for en hel bundt af emner og værktøjer
og teknikker, der støtter til kurset kerne pensum,
men ikke desto mindre forbundet.
Og også vidunderlige trædesten til gør virkelig cool afsluttende projekter,
går langt ud over materiale, vi har dækket formelt i problemer sætter eller foredrag.
Så gå til CS50 hjemmeside for hele tjenesteliste af seminarer.
Hvis du ikke registrerer endnu, det er fint.
Gå videre og tilmelde dig stadig, og vi vil følge op med en live streaming link,
dagen og tiden er på hjemmesiden.
Og alt vil være registreres og lagt online
hvis du ikke kan gøre bestemte dage og tidspunkter.
>> Med hensyn til, hvad der ligger forude thereafter-- godt, selvfølgelig er der det CS50 hackathon.
Dette foto, tilbagekaldelse, fra uge nul taget omkring 04:00 en aften i de forløbne år.
Den CS50 fair, hvilket igen vil finde sted i begge byer.
Og så bare at plante frø, selvom vi stadig
har en måned plus tilbage af semester, hvis du gerne vil tilslutte CS50 egen undervisning
personale, og du ønsker at starte tænker på at blive en CA,
eller undervisning fyr, ved, at vi begynder at tale mere om det
senere dette semester.
Men afbilledet her de fleste af dette års hold.
>> Og så, PHP-- og jeg var så ked af sidste uge, at [? Allyse?] Venligt
gik til indsatsen for at få os disse vidunderlige rekvisitter
at jeg ikke ender med at bruge, så det egentlig bare kiggede slags dum
at vi havde en skovl sidder her alle dag sidste onsdag, og en lille ske.
Men dette var min metaforisk måde at forsøge at male
billedet af, hvorfor vi skifter fra C til et sprog som PHP.
Og det samme kan siges om enhver antal languages-- Java, Python, Ruby
eller klaser af others-- men mens der i C, for eksempel, at skrive et program i C
typisk kan være ligesom tage en ske som denne
og gravere et hul i jorden, i sandet eller snavs.
PHP giver dig mulighed for at tage meget større bid ud af problemet,
skrive langt mindre kode ved hjælp af en langt mindre værktøj,
fordi der er så meget mere funktionalitet stykket i.
>> Nu, hvis vi var virkelig dramatisk, vi ville have noget at skovle
her, men så må det være.
I mellemtiden, den anden metafor vi kom op med
er selvfølgelig, kunne du bruge noget som en skruenøgle
at hamre i noget lignende et søm.
Men selvfølgelig, retten værktøj til brug går
ikke at være så meget sprog kaldet C--
og nu har jeg bare irriteret [? Sanders?] Formentlig,
Vi ordner det later-- så det rigtige værktøj til at bruge ofte
kommer ikke til at være dette laveste niveau værktøj.
Og ja, C er ikke et sprog, de fleste af jer nogensinde kommer til at bruge,
eller skal nødvendigvis bruge igen.
>> Og faktisk lidt secret-- den eneste gang
Jeg bruger C selv er temmelig meget mellem September og december hvert efterår
semester.
Og det er, fordi vi bruge det som en mulighed
at undervise de grundlæggende af programmeringen,
og med det computer videnskab fundamentals, data
strukturer, algoritmer og like-- men meget hurtigt vil du
se nu, at syntaksen og de ideer, der ligger til grund C
er så vidunderligt overføres til mere moderne
højere sprog niveau, ligesom PHP og Python og Perl og Java
og Objective-C-- faktisk ikke så meget Objective-C-- men Swift, disse nyere
sprog, som mange af jer vil derefter fuske med dig afgangsprojekt.
>> Så uden videre, lad os faktisk bruge PHP til at løse nogle problemer.
Husk på, at tidligt, sidste uge, vi bare brugt CS50 IDE,
Vi skrev en dinky lille program der bare sagde, "Hej verden".
Og så er jeg gemte det i en fil kaldet hello.php.
Og så løb jeg denne kommando.
>> Og hvorfor?
På engelsk, hvad der foregår her?
Hvad var jeg gør, når Jeg løb denne kommando?
>> Ja?
>> PUBLIKUM: Der er nogle funktion PHP der læser hvad der in-- forstår det.
DAVID MALAN: God, er der nogle funktion PHP-- og lad mig være mere specifik,
der er et program kaldet PHP, alias
En tolk, der forstår indholdet af hello.php,
og fortolker det top til bund, venstre mod højre,
og gør, hvad de kommandoer sige.
Kommandoerne i hello.php naturligvis er bare kilde code-- funktioner
og variabler og sløjfer og lignende, at vi selv
er begyndt at skrive i PHP.
>> Men i modsætning til C, som er en kompileret sprog,
PHP du bare skrive det, og køre den.
Du springe den mellemmand trin at omdanne det til nuller og ettaller,
og derefter kører det.
Og så hvad er en upside på dette?
Hvorfor er vi springe skridt?
Hvorfor gøre mere moderne sprog en tendens til at springe dette trin?
Hvad var fordelen?
>> Eller bare intuitivt?
Selv om vi ikke har skrevet meget PHP før,
hvad der er gavnligt om ikke kompilere din kode tror du?
Nej?
Ikke begå?
Skrabe dit hoved?
Ja.
>> PUBLIKUM: Mere dynamisk.
>> DAVID MALAN: Mere dynamisk?
Hvad mener du?
>> PUBLIKUM: [uhørligt]
DAVID MALAN: OK, godt, så afhængigt af input,
du behøver ikke at kompilere det hver gang.
Og det er virkelig som simpelt som at-- hvad
er pointen med at fortsætte at kompilere din kode?
Dette er blot et skridt, der er making-- dette kræver,
for de sidste mange uger, dobbelt så mange trin
som bare kører dit program.
Det har været nyttigt i at se, at du se nogle fejlmeddelelser og så videre,
men det er stadig bare en irriterende skridt.
>> Og så programmører realiseret over tid, hvorfor vi ikke
begynde at skrive sprog, der ikke brug for, at forholdsvis mekanisk skridt,
så kan bare skrive din kode og køre den.
Men hvad var prisen at vi så vi betalte
sidste uge, med et bestemt eksempel?
Ja?
>> Fart.
Så [? hvad er?] tolke lidt langsommere,
i at nuller og ettaller er flot og hurtigt for en computer
at forstå, fordi Intel CPU, eller hvad det er,
bare forstår, hvad der foregår med de nævnte mønstre af bits.
Hvorimod en tolk er et program, der virkelig
har til at læse Ascii kilde kode, som du har skrevet,
og konvertere det, så at sige, eller regne ud, hvordan det konverterer sidste ende
til nuller og ettaller.
Så det tager bare lidt lidt af en præstation hit.
Så det er lidt af en afvejning.
Nu, hvis vi gør det herovre, lad mig gå videre og gøre et eksempel som følger.
Hvis jeg går i her, ny fil, vil jeg at gemme denne gang er hello.php.
Og nu jeg har tænkt mig at gå videre og sige, "print hello world" -
og minde om, at jeg kan bruge print, det gør jeg ikke nødt til at bruge print-F. Og nu hernede,
hvis jeg gør PHP af hello.php, huh-- jeg synes ikke at have fortolket det.
Hvad har jeg gjort forkert?
>> PUBLIKUM: De vinklede armbånd.
>> DAVID MALAN: Ja, du har brug for denne vinkel beslag op øverst.
Så det er lidt irriterende, men du vænne sig til det hurtigt.
Hvis jeg skal skrive PHP kode, jeg generelt behov for at fortælle programmet,
eller fortælle tolken, hey PHP, her kommer nogle PHP-kode.
Og så for god foranstaltning, ville jeg lukke dette ikke med dette, men snarere
med blot spørgsmålstegn vinkel beslag, så der nu hernede,
hvis jeg kører det igen, nu Jeg får det ønskede resultat.
>> Lad os nu gøre en lille optimering, bare så du har set det før.
Dette er slags irriterende, at jeg nødt til at køre PHP plads hello.php,
fordi der i de sidste jeg kunne bare skrive dot skråstreg
programnavn, som er form for nice.
Det er form for en bedre brugeroplevelse.
>> Så det viser sig, kan du gøre det i PHP med following-- I
kan bruge denne temmelig kryptisk besværgelsesformular øverst her,
der generelt kaldes en shebang, hvorved det er en skarp symbol,
så at sige, det er et brag eller et udråbstegn.
Og det nu er vejen til et program på en typisk Linux system,
kaldes miljø eller env.
Og dette line-- lang historie short-- linje man bare
siger, hey computer, find PHP tolk for mig i miljøet,
finde det i din hukommelse, så at sige.
>> Og hvad er rart nu, er at hvis jeg går ned her,
Jeg kan gøre dot skråstreg hej dot php, eller-- hmm.
Tilladelse nægtet.
Nå, vil du se endnu mere af dette med problemet sæt syv, hvis du
ikke allerede har, med tilladelser.
Det viser sig, at jeg har brug for at udføre denne kommando
hedder [? chamod?] for forandring mode-- et plus x hello.php.
Jeg har brug for [uhørligt] denne ene ekstra skridt, som er at fortælle min computer,
gøre hello.php eksekverbar.
Og nu se, hvad der happens-- dot slash hello.php, det bare kører.
Jeg behøver ikke at angive tolken længere.
Og jeg kan gøre det endnu smukkere, stadig, hvis jeg omdøber denne ting.
Hvis jeg flytter hello.php til blot Hello-- så mærke i øverste venstre,
programmets navn er ja nu bare Hej.
Nu kan jeg få det til at ligne et C-program, selvom det er skrevet i PHP--
eller helt ærligt vilkårligt antal af andre sprog.
>> Så marginal forbedring, ingen funktionel forskel.
Men det er bare en lille nysgerrighed nu, så du kan skrive programmer
på alle sprog, og brugeren ikke nødt til at vide eller pleje, hvad de er.
Nå, lad os se på en mere overbevisende eksempel nu
at jeg pisket op på forhånd.
Og dette kaldes quote.php.
Og det er tilgængelig online.
Og bemærk, at det er ret short-- men det er en kommandolinje program, der er
kommer til at se op aktiekurser for mig er der faktisk går
at være relevant for problemet indstille syv.
>> Så lad os se, hvad jeg laver.
På toppen I got åbent beslag spørgsmålstegn PHP.
Så jeg har fået denne linje, hvorved jeg kræver en fil kaldet functions.php--
vi kommer til at se mere om dette i lidt,
men dette er ligesom C'er version af skarpe omfatter,
hvor du ønsker at gå omfatter en anden fil.
PHP kalder det kræve, selvom det har også en include funktion.
Og det viser sig, at function.php er bare noget jeg skrev før klassen.
Jeg sætte det i samme mappe, fordi Jeg ønskede at faktor ud noget kode
at vi måske ønsker at bruge andre steder.
>> I mellemtiden kan du sandsynligvis udlede, hvad der foregår her.
Dette er lidt anderledes fra C-- men hvad mener jeg med at sikre korrekt brug?
Oversæt denne mere teknisk.
Under hvilke omstændigheder er jeg holde op programmet, eller ud?
Ja?
>> PUBLIKUM: Når du ikke har to kommandolinjeargumenter.
>> DAVID MALAN: Når jeg ikke har at kommandolinjeargumenter.
Og husk, at en af ​​dem argumenter er programmets navn selv.
Og det andet bliver et andet ord, jeg skriver efter prompten.
Så ligesom C, dette er min måde at kontrollere,
gjorde brugeren samarbejder og køre programmet som jeg hensigten?
Nu er der noget lidt anderledes
med C-- først og fremmest vi har denne dollartegn,
og hvad der en dollar underskrive betegne i PHP?
Bare en variabel.
Det er all-- blot en variabel efterfulgt af hvad du vil faktisk kalde det.
Læg mærke til at der er noget mangler fra min PHP-program,
ligesom det manglede sidste uge, versus C, hvilket er hvad?
>> A typer, men også noget andet.
Der er ingen noget function-- hovedfunktion.
Der er ingen vigtigste funktion.
Du skal bare begynde at skrive din kode uden at have
at bekymre sig om en temmelig vilkårlig konvention at navngive nogle standard
funktion vigtigste.
Så arg C er bare virkelig en global variabel
at tolken stiller til rådighed for mig.
Nu, dette er interessant.
Så ser op kram.
Dollar tegn bestanden er på venstre, det er min variabel.
På højre side, Der er tilsyneladende
en funktion i PHP kaldet opslag, der Jeg passerer min sidste kommandolinje
argument at-- hvad ordet er.
Og vi vil se, hvordan dette arbejder i et øjeblik.
>> Og så til sidst jeg rapportere prisen.
Jeg udskrivning ud en andel af sådan og sådan.
Og husk, det er den måde PHP-- en måde PHP--
hvor du ikke behøver at gøre dollar tegnet S længere.
Du kan bare bruge krøllede parenteser og tilslutte nogle variabel.
Du behøver ikke at bekymre dig om ved hjælp printf på samme måde.
>> Og som en sidebemærkning, når du sætter en variabel indersiden af ​​anførselstegn som dette,
du bruger en fancy teknik såkaldte variable interpolation.
Det betyder bare plug variablen i her.
Og som en sidebemærkning, nogle af jer, der kommer fra andre programmeringssprog baggrunde,
du må ikke bruge enkelte anførselstegn omkring strenge at gøre dette.
Du skal bruge dobbelte anførselstegn til variabel interpolation til at arbejde.
Ellers vil du bogstaveligt talt se disse krøllede parenteser.
>> Så endelig, lad os gå videre og køre dette.
Lad mig gøre min terminal lidt større.
Lad mig gå videre og køre indersiden af ​​mit citat mappe.
[? CDsource?] [? AM?] [? citat?] PHP citat dot PHP,
og jeg har tænkt mig at søge efter noget Ligesom GOOG, som er dens ticker symbol,
og en andel af sit nye navn, Alfabet Inc, koster $ 717 i dag.
Okay, hvis vi ønsker at køre dette igen, nogen
har en anden bestand ticker de ønsker at slå op?
>> Microsoft jeg synes er denne ene, MSFT-- 53 $.
Jeg tror Yahoo er måske det.
Og Facebook er det.
>> Så hvad er dette program gør?
Det magiske synes at være indlejret i denne lookup funktion.
Så lad os tage et hurtigt kig.
>> Det viser sig, at der ikke kommer med PHP, det er i functions.php.
Og vi vil ikke gå igennem dette i stor detalje,
men bemærke den udløsende ord her er at der på linje seks af functions.php--
Jeg bogstaveligt sige funktion.
Jeg angive navnet på min funktion.
Jeg derefter angive nogen argumenter, eller parametre,
Jeg vil have denne funktion til at take-- ingen typer.
Og så er jeg gennemføre den.
>> Og jeg vil vinke min hånd ved gennemførelsen,
da det er temmelig avanceret ret nu, men vi vil se det igen faktisk
i en uge i problemer sæt syv.
Men jeg kan rense det op, også.
Jeg har også inkluderet i dagens kode en version
af tilbud, som ikke har nogen prik PHP-fil.
Fordi det er formentlig på toppen af ​​program kaldet blot citere?
Det såkaldte shebang-- den temmelig kryptisk besværgelse
der siger finde PHP og derefter køre det på min kode her.
>> Okay, så der bringer os til hvor vi slap
sidste time-- omend med nogle mere avancerede eksempler.
Eventuelle spørgsmål hidtil om PHP eller hvad vi laver?
No-- okay.
Ja?
>> PUBLIKUM: Inde i HTML-filer, gør du--
[? gør du ?] [? bare kalde det?] en [uhørligt] PHP-fil?
DAVID MALAN: Godt spørgsmål.
I en web sammenhæng, hvilket vi er bogstaveligt om at overgangen til,
du ikke bruger den såkaldte shebang foroven,
fordi web server-- ofte program kaldet Apache eller Microsoft
IIS, Internet Information Server, eller en række andre webserversoftware,
ved, at når det ser en prik PHP-fil, at det
skal køre fortolkeren på det.
Det ser ikke ud på den første linje.
Så denne første linje trick er bare, når du er
skriver kommandolinjen programs-- som vi vil ikke gøre super ofte,
men det er vores måde at bygge bro vores C-eksempler for nu vores PHP.
>> Så lad os faktisk bygge bro over denne verden fra kommandolinjen verden til internettet
ved at gøre følgende.
Lad mig gå videre og trække over her for et øjeblik.
Så hvis vi har en web-server, eller rettere hvis vi har min laptop herovre,
som jeg vil trække på denne måde.
Og her har vi den internettet i en eller anden form.
Og derefter over her, vi har en server i et building--
dette er, hvordan internettet works-- og her
er en server med nogle lys måske.
Hvad er egentlig foregår mellem disse to forbindelser?
>> Så i denne bygning er en web-server.
Det er bare en computer der kører nogle operativsystem
system-- måske den gratis software kaldet Apache, som CS50 IDE kører.
Så du kan faktisk tænk på denne bygning
som værende bygning i som CSt0 IDE er gemt.
Det er, hvor alle har konti, hvor alle jer
har din egen webserver kører, alle jer
har dine egne unikke URL'er, som vi begyndte at diskutere,
og du vil se mere i P. sæt seks.
>> Her er min laptop eller andet sted steder på internettet.
Og så når jeg besøger en webadresse, der tilhører for mig, er, at internettrafik går
over til serveren, serverens modtager HTTP request--
ligesom en få index.html, og det er besvarelse af denne webside.
Så det er den generelle paradigme.
Hvorimod alt op hidtil dag, alt
blev kun sker i rammerne af denne bygning.
Jeg bruger min bærbare computer, men Jeg var tilsluttet CS50 IDE,
så alle disse programmer, jeg kørte var inde i serveren, selv.
>> Men nu, lad os starte genbruge PHP at skrive nogle faktiske programmer,
er tjent op af en webserver.
Og for at gøre dette, vil jeg gå ind i en hel masse eksempler
at indføre denne idé her.
Så dette er lidt af en fancy måde beskriver en programmeringsparadigme.
>> Og i virkeligheden, som du afslutter CS50 eller arbejde på afgangsprojekter,
eller tage nogle følger på klassen, vil du begynde
at se, at verden- især have vokset op
med sprog som C som er super lav level--
indse, at der er bedre måder at skrive software.
Der er visse mønstre, du kan følge,
visse måder at organisere dine filer og måder at navngive dine funktioner,
så lang historie kort, Verden er kommet op
med en hel masse akronymer og navne for måder at programmeringen.
Disse er blot teknikker, du kan bruge.
>> Og en af ​​dem kaldes MVC, til Model View Controller.
Og det er netop, for nu, en alt for kompliceret
måde at sige, hvordan du skal lægge ud en PHP-baseret websted, i vores tilfælde.
Hvordan organisere dine filer, hvordan kan du organisere din logik,
på en måde, der gør det lettere at skrive mere komplicerede hjemmesider?
Og ja, vil vi hurtigt komme der med p-sæt syv.
>> Så i verden af ​​MVC, er du nødt at se, at vores kode kan generelt
karakteriseres som enten model kode, eller controller kode, eller visning kode.
Og jeg har tænkt mig at forsimpler det som follows--
regulatoren er hjerner af dit program,
det er, hvor alle de interessant logik sker.
Så alt, hvad vi har været skriver hidtil i klassen,
er lidt ligesom controller code-- det kontrollerende
dit program, dine loops, din betingelser, dine funktioner
og variabler og alt det der.
>> Synspunkter, nu kommer til at være lidt mere indlysende i verden af ​​internettet.
En visning er æstetik af din hjemmeside.
Det er, hvad brugeren sees-- billederne, HTML tabeller, HTML-tags, og alle
af, at alle de fluffy æstetiske ting, der er ikke så svært at skrive,
men er lige hvad du genererer, er den såkaldte opfattelse æstetik.
Og model, i sidste ende, vil at være database stuff-- som
vi starter dykning i alle jo mere denne onsdag.
Så controller er logikken, visning er det æstetiske ting,
og model vil være, hvor vi gemme vores faktiske data.
>> Så lad os se på dette mere konkret med følgende eksempel.
Jeg har tænkt mig at gå ind i min mappe her dagens kilde code-- som alle
er tilgængelig online.
Og jeg har tænkt mig at gå ind i versionen nul.
Og her is-- lad os kalde det det udgave nul af CS50 hjemmeside.
Der er ikke meget her overhovedet.
Det er en meget simpel webside, der er sandsynligvis ved hjælp af hvad HTML tags-- bare
gætte fra tidligere eksempler?
>> Hvad er det?
H1-- sandsynligvis for at store fed titel, at logoet op øverst, CS50.
Og hvad der ellers er på spil?
Ja?
PUBLIKUM: uordnet liste.
DAVID MALAN: Uordnet list-- så UL-tag og måske et par LI tags.
Og hvis du ikke kan huske disse, det ærligt er ligegyldigt.
Disse er fluffy slags oplysninger om HTML implementering
at du hurtigt slå op og du er tilbage på din måde.
Vi vil fokusere mere på programmeringen ideer, der er de juicier stykker.
>> Så lad os bare tage et hurtigt se på HTML-- og faktisk
hvis jeg åbner visningen kilde her, yup, Det er præcis, hvad der foregår her.
Der er en UL-tag.
Indlejret inde i det er at LI tags.
Og så har jeg lånt URL af den faktiske pensum her.
>> Og derefter i den lectures.php er tilsyneladende
anden dynamisk genereret side der kommer til at have, lad os see-- ah,
de første to uger af forelæsning.
Så uge nul og uge en, lad os se på denne-- hvis jeg se side kilde,
også super enkel.
Disse fører til to sider kaldet week0.php, og week1.php.
Så overveje nu, hvad der sker.
>> Når jeg klikker på week0.php, min laptop gør en anmodning om week0.php.
Webserveren, alias, CS50 IDE, modtager den virtuelle kuvert.
Det er at se en besked lignende, får week0.php.
Det er derefter fortolkes filen, top til bund, venstre til right-- filen
kaldet week0.php-- og spytte ud resultaterne.
Så inde i denne fil, week0.php, skal være
controlleren logik, der genererer denne HTML, og vi vil snart se det.
>> Men for nu, lad mig klikker på uge nul, og nu har vi onsdag og fredag,
og nu har vi dias langsomt fra uge nul.
Og du måske husker dette fra vej tilbage, når.
Så det er alt dette website gør.
>> Så lad os overveje, hvordan den gør dette.
Jeg har tænkt mig at gå tilbage til kildekoden her, i CS50 IDE,
og jeg har tænkt mig at åbne op index.php.
På toppen af ​​denne fil er en flok kommentarer.
Og derefter i midten af ​​denne fil, det viser sig, er overhovedet ingen PHP-kode.
For hvis du ikke har nogen af ​​de åbent beslag spørgsmålstegn PHP tags,
du er velkommen til at bare sætte HTML.
>> For hvad PHP tolk er meningen at gøre,
er, når den læser denne file-- top til bund, venstre til right--
den kun fortolker kode det ser mellem disse vinkelparenteser spørgsmålstegn.
Og alt andet, det ikke anerkender som PHP, det bare spytter.
Og HTML er blandt de ting det vil bare spytte ud.
>> Så denne fil kunne have blevet kaldt index.html,
men jeg navngivning alt dot PHP som et springbræt.
Lectures.php-- tilsvarende underwhelming, det er bare nogle HTML.
Week0.php, tilsvarende blot nogle HTML.
>> Men lad os nu sætte på legendariske ingeniør hat,
og overveje, hvordan vi kan forbedre denne.
Det er ikke svært at gøre dette, men jeg slags af uddelegeret i kopiere og indsætte.
Og i virkeligheden, hvis jeg laver uge to, du ved, hvad jeg sandsynligvis kommer til at gøre?
Jeg har tænkt mig at gå til week1.php, jeg er kommer til at fremhæve alt.
Jeg har tænkt mig at kopiere det, indsætte det i en ny fil kaldet week2.php,
nappe nogle webadresser, og være på min vej.
>> Så baseret på, hvad vi har ses i C allerede
dette ikke føles rigtigt, forhåbentlig.
Kopiere, indsætte sjældent den rigtige løsning.
Så hvad kan vi starte at gøre for at forbedre dette?
Hvor er de muligheder for bedre design?
>> Ved den tid, jeg kommer til at uge otte, går det
at være virkelig irriterende hvis jeg ønsker at ændre
skrifttypen af ​​hver eneste af mine sider, eller hvis jeg ønsker
at ændre strukturen af ​​layoutet.
Så hvor er mulighed for bedre design?
Nå, lad os overveje, hvad der er deles på tværs af alle disse filer.
>> Her er uge én, her er uge nul, her er lectures.php,
her er index.php-- hvad der er den samme, og hvad der er anderledes, groft sagt,
i hvert af disse filer?
Ja?
>> PUBLIKUM: [uhørligt]
DAVID MALAN: OK, godt.
Så der er et mønster, helt sikkert, hvorved hver gang jeg vælger forelæsning I,
Jeg skal generere en meget ens udseende side.
Og så måske jeg kan udnytte det faktum, at virkelig,
vi bevidst numerisk indekseret vores lectures--
hvis jeg kan sætte endnu mere ord i dit svar.
Og hvad er det eneste, virkelig, der er skift mellem uge en--
og lad mig rulle ned, så det er nogenlunde i samme sted--
så her er uge nul, nogenlunde på toppen.
Her er uge en, uge nul, én uge, uge ​​nul.
OK, bogstaveligt talt, hvis du kender nogen program,
dette er nu ligesom en mønster matchende spil.
Så hvad er anderledes?
Ja?
>> PUBLIKUM: [uhørligt]
DAVID MALAN: Godt, så titlen ændrer sig, nogensinde så lidt.
Zero kommer naturligvis til én.
Samme ting der sker i H1 tag.
Og vi ved ikke helt se det som let, fordi de webadresser er lidt lang.
Men disse URL'er er lidt forandring.
>> Men hvad der ikke ændrer sig, tør jeg sige, det meste af indholdet af page--
HTML-tag er det samme, hovedet er den samme, titlen er næsten den samme,
kroppen er den samme, og næsten alt andet
er det samme bortset fra de små tweaks.
Så hvordan kan vi gå om factoring noget af det ud?
>> Jamen så lad mig foreslå præcis at der i den næste version.
Så her i version en, jeg har nøjagtig samme filer, plus et par andre.
Her er index.php-- og selv om du aldrig har set PHP før,
hvad gør jeg nok for at løse dette problem-- baseret på, hvad du ser her?
Ja, er, at en lille engagement?
Nej?
Ja, gå videre.
>> PUBLIKUM: [uhørligt]
>> DAVID MALAN: Yep.
>> PUBLIKUM: [uhørligt]
>> DAVID MALAN: Jeg har brug for dig til tale lidt højere.
>> PUBLIKUM: [uhørligt]
DAVID MALAN: OK, godt.
Og jeg tror-- det var svært at høre du-- men jeg
tror hvad du får på, er, at tags, der var fælles op toppen,
og tags, som var almindeligt på den bunden, er nu blevet indregnet ud,
eller forvist til hvilke filer?
Header.php og footer.php-- og vi vil
at foretage nogle tweaks til imødegå den bekymring, du bare
rejst om tallene skiftende, for eksempel, hvis jeg hørte dig korrekt.
>> Men der synes at være kernen i det.
Hvis der var en enorm mængde af redundans på toppen af ​​siden,
og en enorm mængde af redundans i bunden,
lad os bogstaveligt talt bare højdepunkt og skæres indholdet ud,
sætte det i en separat file-- ligesom tanken om CSS, hvor vi indregnes ud
meget lignende æstetik, sætte den i et separat dot PHP-fil,
bruge kræver mechanism-- som er ligesom C skarpe include-- som
er hovedsagelig som at sige gå fat i indholdet af header.php,
og kopiere og indsætte dem her.
>> Men hvad det betyder er, at nu i index.php, jeg har disse to linjer.
I lectures.php, jeg også har disse to linjer.
I week0.php, jeg også har disse to linjer.
>> Så nu, hvis jeg ønsker at ændre titlen på alle mine sider,
eller jeg ønsker at ændre grundlæggende struktur,
Jeg kan ændre det nu på bare ét sted, eller to places-- sidehoved og sidefod,
henholdsvis.
Nu koden er begyndt at se lidt mere kryptisk, ikke?
Men hvis du tænker over hvad siden er doing-- hvis jeg anmoder week0.php,
ligesom på tegningen løbet her-- når week0.php der anmodes,
hvad betyder det?
>> Bogstaveligt, denne fil er anmodet af browseren.
Den web server-- alias
CS50 ID- griber dette fil, week0.php, og læser
det top til bund, venstre til højre.
På linje én, er det straks møder åbent beslag spørgsmålstegn PHP, kræver
header dot PHP, og så hvad PHP fortolkeren
does-- der er indbygget i nettet server, fordi vi prækonfigurerede
det for du-- det automatisk går i header.php, kopierer indhold,
indsætter dem her.
>> Men så tolk møder spørgsmålstegn tæt beslag,
så det hele foregår tænkning.
Nu er det bare blindt spytter ud linier to gennem syv,
fordi det er bare rå HTML.
Får til linie otte, og gør, at samme magi igen-- åbne filen,
sensationsprægede indhold, og kræver dem eller indsætte dem
ret dengang eller der.
>> Men jeg netop hentydede til en fejl.
Dette er en delvis skridt tilbage, for hvis vi ser i header.php,
Jeg har slags skære et hjørne.
Hvad funktion har jeg giver op for at opnå denne diskutabel bedre design?
Ja?
PUBLIKUM: [uhørligt]
DAVID MALAN: Ja, jeg slags af skære et nontrivial hjørne.
De påpegede, at det, der blev skiftende var titlen, nummeret i titlen,
og antallet i H1.
Så min løsning var, OK, lad os bare omdøbe siden,
og ikke beskæftige sig med det problem overhovedet.
Så det er en delvis tilbageskridt for sikker.
>> Men hvad er bemærkelsesværdigt her er, at hvad jeg har gjort
ellers indregnet ud af alle de fælles ting.
Og i footer.php, mærke jeg indregnet ud af alle, der, selv mindre,
fælles ting.
Så jeg har brug for en eller anden måde nu kunne tage endnu et skridt fremad, og løse
denne titel spørgsmål.
Så lad os gøre det.
>> Lad mig gå ind i min anden version her, som igen har de samme filer
bortset fra en ny tilføjelse.
Og det er lidt mere verbose, men lad os se, om vi
kan drille hinanden, hvad der foregår her.
Så i stedet for at kræve header.php, og footer.php,
Jeg synes at være kun kræver én file-- kaldes naturligvis helpers.php.
Og lad mig fastsætte nu, hvad der er inde i helpers.php
er bare en masse funktioner at jeg skrev, ligesom før.
Men jeg kaldte det helpers.php.
>> Nu tilsyneladende, i linie tre og 10, jeg er
ringer to functions-- gør sidehoved, gør footer.
De kommer ikke med PHP, skrev jeg dem selv.
Og jeg satte dem i helpers.php.
>> Nu har vi kun set denne syntaks én gang, og det var super kort.
Men det er tilsyneladende et argument at gøre header, funktionen.
Hvorfor skal jeg vide det?
Nå her er et tæt paren, her er en åben parentes.
Og selvfølgelig, ligesom i C, noget mellem disse parenteser
er en input-- eller argument til funktionen.
>> Hvilken datatype i dette argument, baseret på, hvad jeg har fremhævet?
Hvad gør de kantede parenteser angiver, baseret på sidste uge?
Ja, det er en array-- specifikt en associativt array.
Og denne syntaks ganske vist er lidt funky,
men dette er blot passerer i en nøgleværdi par.
Det centrale er, citerer citat slut titel, og værdien er CS50.
>> Hvis vi havde gjort dette i C, kan det i stedet
se mere som denne, bare citerer citat slut CS50--
eller faktisk ville det være krøllet seler, eller sådan noget i C,
hvor nøglen er nul, og værdien er CS50.
Men igen, i PHP, selv om syntaks er, igen, en smule underlige,
det giver dig mulighed for at passere i ord i stedet for numre
at knytte nøgler med værdier.
>> Så hvad betyder alt dette?
Hvis jeg går ind helpers.php, lad os se på denne funktion.
renderHeader.php snarere renderHeader er min funktion,
og jeg ved, at fordi jeg ser funktionen nøgleordet her.
Det er nyt fra C-- det tilsyneladende tager et argument kaldet data--
men jeg kunne have kaldt det noget, men jeg kaldte det data,
bare for at være lidt clean-- og bare tage et gæt, især
hvis du har programmeret på anden højere niveau sprog før, noget
over C, begrebsmæssigt.
>> Hvad betyder lige åben beslag firkantede beslag formentlig betyde?
Eller hvad kan det betyde?
Vi har ikke set det i C. Ja?
>> En tom array.
Konkret betyder dette, at hvis brugeren ikke kalde renderHeader
med et argument, jeg stadig går at have et argument kaldes data,
men dens standard værdi er vil være et tomt array.
Så det er bare en nice bekvemmelighed.
Jeg behøver ikke at råbe ad brugeren, eller sige du brugte min funktion forkert.
Jeg kan bare give brugeren en standard værdi, hvis jeg ikke særlig pleje.
Nu denne funktion, er jeg kommer til at vinke mine hænder på.
Men dette ekstrakt funktion tillader os til at videregive disse variabler i data
i header.php på følgende måde.
Og dette er den sidste brik, Jeg tror, ​​funky syntaks.
Her er min nye version af header.php-- det
plejede at sige, bogstaveligt talt, åben beslag titel CS50, og det var det.
Og samme for H1.
>> Nu er det tilsyneladende står noget temmelig funky.
Og lad mig forenkle denne et øjeblik som følger.
Dette er, hvad jeg har ændret min titel til at være.
Imidlertid er det få lidt grimt til konstant at åbne parenteser med PHP,
og derefter bruge print-funktionen.
Det viser sig, at PHP har en stenografi notation for dette, som er lige
et lighedstegn, som er teknisk set en funktion kaldet ekko i stedet for print,
men det er de samme ting, effektivt.
>> Det ser bare bedre.
Det er bare en syntaktisk sukker, hvis du vil,
der gør min kode ser lidt bedre.
Men det viser sig, og vi vil se det igen
inden længe, ​​vi er nødt til at kalde denne irriterende lang funktion kaldet
HTML særlige tegn i PHP, fordi det viser sig
der er visse indgange at brugeren kan give os,
eller at brugere kan give os, der kommer til at bryde vores hjemmeside.
Men vi vil se, at næste uge med JavaScript.
Men for nu, bare vide, at denne fil, headers.php, simpelthen
tager den titel, der Jeg gik i, det gøre
sikre, at det er sikkert at blive injiceret i en web side, og det spytter det ud som min titel
og som min H1.
Så hvis jeg går ind i denne version nu, bemærke, at forelæsninger har sin titel tilbage,
uge nul har sin titel tilbage, og ja, HTML jeg genererer
er identisk med, hvad min første version was-- bortset fra min mellemrum,
fordi jeg er begyndt formatering min kode lidt anderledes.
Men jeg har genereret alle koden, jeg holder af.
Så lad mig holde pause for bare et øjeblik og se
hvis der er nogen spørgsmål eller forvirring Jeg har oprettet.
Okay, så lad os vride lidt hårdere her
at se, om der er en mulighed for forbedring.
Helpers.php havde også denne funktion, kaldet renderFooter.
Og hvad er bemærkelsesværdigt om renderHeader og renderFooter?
Og igen, for nutidens formål, kender at ekstraktet funktion er lige
min måde at passerer argumenter i header.php og footer.php.
>> Undskyld?
>> PUBLIKUM: [uhørligt]
DAVID MALAN: Ja, bare jeg ændret kræver linje.
Så bogstaveligt, jeg har begået den synd af kopiering og indsætning, endnu en gang.
Det er ikke et enormt antal af linjer, men kommer on--
hvis jeg kopiere og indsætte alt bare for at ændre en lille ord,
og den ene lille ord, som Alan peger ud sige footer her, versus header her.
Ellers, alt er identiske, bortset fra,
selvfølgelig funktionens navne.
Så hvad kan vi gøre bedre?
>> Jamen så lad mig åbne denne version her, hvor i helpers.php,
hvorfor jeg ikke bare få en lidt smartere om dette?
Skriv lidt mere kompliceret kode, men kalder det gør?
Så hvad har jeg fundamentalt ændret?
>> Det tager et argument nu-- to argumenter, data stadig.
Og hvad er den første navn formentlig bliver brugt til,
baseret på, hvad du læser her?
Selv om nogle af syntaksen stadig er nyt.
Hvad er dollartegn skabelon?
>> Undskyld?
>> PUBLIKUM: sidehoved eller sidefod.
>> DAVID MALAN: sidehoved eller sidefod.
Så tilsyneladende, besluttede jeg, at hvis det eneste, der er at ændre
er, hvad skabelon jeg vil at print-- og ved skabelon
Jeg mener det er plan for kode, som jeg ønsker at output,
men jeg ønsker at tilslutte nogle values-- så hvis det er kun header
eller sidefod, hvorfor ikke jeg parametrisere det, og kalder argumentet dollartegn
skabelon?
Og så er denne funky syntaks tillader mig at skabe en sti i en variabel her.
>> Så dollartegn sti er en variabel.
Hvad betyder denne syntaks gøre, hvis du er bekendt?
Ja?
>> PUBLIKUM: [uhørligt]
DAVID MALAN: Præcis.
Hvis skabelonen er, citat Citat slut, header, eller hvis skabelon er,
citat Citat slut, footer, denne linje der at jeg har fremhævet, line otte,
er simpelthen at tage det navn, som header, og sammenkæde det med dot PHP.
Så vi havde ikke denne operator i C. Denne dot operatør
en fantastisk ting i PHP--, hvis du er fortrolig med JavaScript eller Java,
du kan bruge plus underskrive for at gøre sammenkædning.
>> I C, det er en smerte i neck-- og jeg er så ked af det, i p-sæt seks,
du er nødt til at gøre her-- det er en smerte i nakken
at sammenkæde strenge.
Hvorfor?
Tja, for hvis du har fået en streng, der er denne lange,
og en anden streng, der er denne lange, du kan ikke bare sætte dem sammen.
Hvad vil du i stedet nødt til at gøre i C?
Ja?
>> PUBLIKUM: [uhørligt]
>> DAVID MALAN: Du skal malloc hukommelse eller bruge et array på stakken.
Og du faktisk nødt til at at den opstilling stor nok
til at passe dette plus det, plus backslash nul.
Så sammenkæde dem sammen ved hjælp røre kat eller manuelt med en for-løkke,
eller en række teknikker.
Og vi viser dig et par i p-sæt seks.
>> Det er en smerte i nakken.
Og det er virkelig, hvad jeg mener om dette versus denne-- som C versus PHP.
Du skal bare få så meget mere funktionalitet gratis,
så du kan fokusere, ideelt, om det sjove
del af kodning, den projekt, du ønsker at løse,
snarere end det lave niveau bagateller.
>> Så dette blot genererer header.php eller footer.php baseret på hvilken en jeg kalder.
Og faktisk hvis jeg går i index.php, varsel
alle, der er changed-- stedet for ringer gør sidehoved eller gøre sidefod,
Jeg ringer gøre, efterfulgt af navn på den skabelon, jeg ønsker at gøre.
Og du vil se det, også, i problemer sæt syv,
hvorved vi giver dig mulighed for at bruge samme funktion at gøre bundter
og klaser af forskellige websider.
>> Så i stedet dvæle for meget mere om disse details--
som du vil se igen i Problemet sæt seven-- lad os se
ved nu begyndelsen af ​​en opløsning til en mere interessant problem.
Indtil videre, intet vi har gjort har gemte data.
Faktisk er vi den eneste gang nogensinde har sparet noget vi har gjort i denne klasse
er, når vi havde en meget simpel demo stund tilbage, hvorved vi brugte fil IO i C,
og jeg tror, ​​jeg har skrevet i mit navn, og Hannahs navn, og Marias navn,
eller måske Andy navn, og så vi gemt en CSV file--
kommaseparerede værdier fil.
>> Og vi brugte fopen-- jeg tror vi brugte fprintf så vidt jeg husker,
og vi gemt en fil.
Nu, er den enkleste form af en database.
Hvis du ønsker at lave en hjemmeside for Frosh IMS-programmet, hvor freshmen
kan tilmelde sig en sport, du helst ønsker at gøre noget med disse data.
I sidste uge, vi gjorde intet med data-- vi lige sagt,
du er registreret, ikke rigtig.
Eller måske emailet jeg Proctor, og det var det.
>> Men det ville være rart, hvis jeg kunne give denne proctor en CSV-fil,
ligesom en Excel-fil.
Eller endnu bedre, ville det være rart, hvis jeg kunne
sætte disse brugeres navne og dorm navne og alt dette
i en database, der bare lever for evigt,
indtil jeg vælger at slette dataene.
En database, der tillader mig til at forespørge oplysninger.
Og ja, det er hvad en database er.
>> Vi introducerer i dag, og næste uge, også, en teknologi
kaldet SQL-- en Structured Query Sprog, hvilket er et andet sprog.
Det er hovedsageligt en programmering sprog, men for databaser.
Og en database for nu, bare tænke på som en super fancy udgave
Microsoft Excel eller Google Regneark eller Apple Numbers.
Det er generelt et program, der tillader dig at gemme en hel masse data
i rækker og søjler, helt ligesom du måske i Excel.
>> Men hvad er rart, især hvis vi er ikke super fortrolig med Excel,
hvad SQL giver dig mulighed for at gøre, er forespørgsel dette oplysninger ved at skrive linjer kode
hvor du kan, selvom din database en million rækker i det,
du kan finde ting super hurtigt.
Faktisk Excel er særlig dårlige til store datasæt.
Og faktisk op til et par år siden, viste sig
Excel vil kun tillade dig at gemme op til 65.535 rækker data-- som
lyder som en masse, men på gang jeg var en grad studerende,
og jeg husker at snuble over dette, fordi jeg var generere
CSV-filer til min forskning, og jeg ønskede at analysere dem hurtigt
ved blot at åbne op i Excel.
Selvfølgelig min computer bare styrtede ned, fordi jeg havde mere end 65.000 rækker.
>> Men hvor kom de 65.535 fra?
Hvad var Microsoft laver, formentlig?
Hvis du er god med dine beføjelser to?
Ja, de brugte en 16-bit værdi til at repræsentere rækkenummer.
Og to til 16 er 65,536-- minus én, fordi hvis du
nul indeks betyder, var mest antallet af rækker, jeg kunne have.
Og det var bare et design beslutning.
Ved at gemme 16 bit, de begrænsede mig til 16.000 rækker, i stedet for 4 milliarder,
som jeg kunne have haft ideelt.
Men for nu, vi vil indføre denne mere i en web sammenhæng.
Og hvad er rart om SQL er, at selv selvom det er temmelig stærk og smuk
sofistikeret, det virkelig koger ned til fire centrale operationer, fire
nøglefunktioner, hvis du will-- vælge, for at hente data, der søger
for data; slette eller sletning af data; Indsæt til at tilføje rækker til databasen;
og opdatering.
Så hvis du nogensinde har brugt Google Regneark, Apple Numbers, Microsoft
Excel, du har udført, mest sandsynligt, alle
disse foranstaltninger som et menneske ved bare bruge dit tastatur og mouse--
indsætte data, ved hjælp af dine øjne for at vælge eller søge efter data,
eller opdatere data eller slette data.
>> Så hvad betyder det?
Nå, forudinstalleret i CS50 IDE er et program kaldet MySQL.
Det er en gratis, open-source database, der er super populær.
Facebook, for eksempel, anvender det til denne dag, blandt andre værktøjer, som de bruger.
Og en masse meget populære hjemmesider bruger det i vid udstrækning, fordi det er hurtigt,
og fordi det er gratis.
Men bestemt findes alternativer.
Og nogle af jer måske fuske med alternativer til de endelige projekter.
>> Dette er et skærmbillede, i mellemtiden, for et webbaseret værktøj kaldet phpMyAdmin.
Det er en tilfældighed, at denne web-baseret værktøj er også
skrevet i et sprog, PHP, men hvad det betød at gøre
er at give os et web-baseret grænseflade til en database.
Fordi MySQL typisk noget, historisk, du
ville interagere med kun med en kommandolinje.
Og det ville være super irriterende og Arcane at have
at skrive tekstuelle kommandoer til at vælge data, indsætte data, og slette data.
Så nogle mennesker på internettet skrev et web-baseret program
at bare lade os styre data i vores database.
Det er ligesom at dobbeltklikke på Excel og kører en webbaseret udgave heraf.
>> Og hvad du vil bruge dette til i sidste ende i næste uge, ikke i p-sæt seks,
men er at bygge noget kaldet CS50 Finans, som
vil have en database over brugere, med brugernavne og adgangskoder,
dollar beløb, de har i deres bankkonti.
Det kommer til at blive noget, du bruger til at gemme
symbolerne og de mængder af bestande, som brugerne
har købt ved hjælp af virtuelle dollars, som du vil give til dem.
Og det kommer til at give brugerne mulighed at registrere for dit websted,
så selv dine venner kan tune ind på din hjemmeside
og faktisk registrere, log ind og lege
og forsøge at finde fejl i din kode, og forsøge at finde fejl i dit websted.
Og de vil blot registrere ved tilføjer sig selv, effektivt,
via kode, du skriver til din database.
>> For eksempel er dette en hurtig skærmbillede af, hvad en database kan se ud.
Dette var fra en af sidste års solutions--
det er ligesom en mini Excel fil, gemmes i vores database,
gemt i denne software kaldet MySQL.
På venstre side, jeg har åbenbart givet alle brugere et unikt nummer.
I anden kolonne, har jeg givet alle en bruger name-- min egen
blandt dem.
Og på den højre side, Jeg har givet dem en hash.
>> Nu er dette er faktisk en adgangskode, men det er ikke en almindelig tekst-adgangskode.
Det er en krypteret adgangskode, hvis du vil, eller en hash-adgangskode.
Som vi vil vende tilbage til inden længe.
>> Men hvis du nogensinde har læst en artikel om, hvordan
dit password på nogle bank eller nogle hjemmeside kunne have været kompromitteret,
det kan generelt betyde en af ​​to ting.
Så dette er bare et uddrag af seks brugere.
Alle jer nu kan regne via hacking eller cracking
hvad vores seks folks passwords er.
Men hvis du nogensinde har fået en advarsel eller en undskyldning
fra en virksomhed eller hjemmeside siger, undskyld, en hacker brød ind i vores database,
bør du nok ændre din adgangskode, hvad kunne det betyde?
>> Tja, en, kan betyde Virksomheden har været mere åndssvage,
og har været opbevaring af dit password i en kolonne som denne, ukrypteret.
Hvilket betyder modstanderen, der stjal databasen,
bogstaveligt kender din brugernavn og adgangskode.
Det er det værst tænkelige scenarie.
Og som du kan se i p-sæt syv, så let at undgå.
Der er absolut ingen undskyldning for, at form for dumhed i dagens internet.
To-- og vi vil finde nogle artikler at vidne, at dette stadig
sker, nonetheless-- to, måske modstanderen
stjal denne version af databasen.
Som stadig slags dårligt, fordi nu de ved, at jeg har seks kunder,
Jeg kender brugernavne af disse seks kunder,
og jeg kender den krypterede versioner, eller de skraverede versioner,
af disse seks kunders adgangskoder.
Men nogen af ​​jer, der måske har gjort [? Hacker 2?]
hvor du krakket adgangskoder, eller tog et kig på denne version af problemet
sæt, hvorfor er det stadig lidt bekymrende hvis modstanderen kender din hash
adgangskoder?
>> PUBLIKUM: Fordi de kunne Indtast hele ordbogen
i hash-funktionen.
Og hvis dit password er en ordbog ord, [? de kan bare match--?]
>> DAVID MALAN: Præcis, modstanderen kan bare skrive kode, ligesom nogle af jer
gjorde for [? Hacker?] 2, hvorved du gentage over
alle ord i ordbogen, eller alle mulige kombinationer af A
til Z og en gennem nine-- der lyder som en masse, og det er.
Men for en computer, det er temmelig darn hurtigt.
Og i virkeligheden, det var den punkt [? Hacker 2,?] Blev
at tage ting, bogstaveligt ser sådan ud,
og reverse engineering hvad det egentlig var.
>> Så vi vil se på, hvordan vi kan gemme denne mere effektivt.
Slår ud, heldigvis i MySQL, Der vil være datatyper.
Og en af ​​de sjove dele om database design, for at være ærlig,
der faktisk bestemmer selv hvordan skal du repræsenterer dataene?
Skulle du repræsenterer et telefonnummer, som en int, ligesom en stor nummer, eller en lang?
Eller har du rent faktisk gør det som en sekvens af tegn?
Og der kan være meget ikke-trivielle virkninger af dette.
>> Faktisk er en af tidligste, sjove germane historier
er, når Mark Zuckerberg byggede Facebook blev det oprindeligt skrevet i,
og stadig er i vid udstrækning i PHP.
Og en af ​​de største udfordringer de stod tidligt blev skalering.
Når de holdt tilføjer skolen efter skole efter skole, så vidt jeg ved,
en af ​​de oprindelige løsninger var hovedsageligt at kopiere og indsætte
nogle af databaserne og nogle af koden,
således at Harvard var kører på sin egen server,
og MIT kørte på sin egen server.
Og var det derfor, for nogle af jer der måske husker,
kunne du ikke har venner i andre netværk.
>> Du sandsynligvis ikke har venner på MIT eller Harvard 10 eller så år siden,
men du kunne ikke spænde netværk til dels af den grund.
Og en af ​​de største udfordringer for Mark og for virksomheder som Facebook
er faktisk håndtering hundredvis og tusinder og millioner
af anmodninger per sekund.
Så de ting, vi starter taler om i denne uge
virkelig kommer til at være relevant for skrive god software, og i folkemunde
succesfulde værktøjer, som kan håndtere masser af brugere.
>> Så vi vil tale om ting ligesom indeksering og søgning,
men det er det for i dag.
Vi vil se dig mere på onsdag.
>> [MUSIC - "Seinfeld" TEMA]
DAVID MALAN: du kan for at den og trække fra det.
Og du behøver ikke at holde fast i nogle forudbestemt mængde hukommelse.
Nå, hvad er det kommer til at hedde?
>> SPEAKER 1: Nå, hvad sker der?
SPEAKER 2: Hvad mener du?
Han giver en forelæsning.
DAVID MALAN: Og vi kan bruge en funktion kaldet malloc at memory--
>> SPEAKER 1: Hvorfor ikke hans arme bevæger sig?
>> SPEAKER 2: Nå that's-- du ved, det er normalt.
Det er ligesom han har bare store pølser hængende der.
>> SPEAKER 1: Det er normalt?
>> SPEAKER 2: Ja, jeg tror, ​​vi bare antage han ved et uheld
erstattet sin deodorant med superlim.