>> [MUSIC SPILLE]
>> DAVID MALAN: Dette er CS50, og Dette er begynnelsen av uken åtte.
Og vi er så glade for å velkommen tilbake, stor overraskelse, CS50 egen Ramon
Galvan, en stigende senior som har vært tilbringer de siste månedene
siden juli i LA, i Hollywood, bokstavelig talt arbeider på en helt ny TV
show kalt Colony, skaperen av hvilke er faktisk en Harvard alum selv.
Og så vi er veldig glade for å se dette debut på USA-nettverket i januar.
Så følg med for det, og for mer Ramon for ukene som kommer.
>> Vet nå at enden er nær.
Og hva dette betyr er at det er ikke så mye igjen av CS50, trist å si.
Vi har bare tre problem sett left-- det er
Problemet satt six-- som er i hendene nå, eller snart vil bli,
grunn senere i week-- er ment å bygge bro våre verdener av kommandolinjen, der
vi har tilbrakt mesteparten av vår tid ved hjelp C, og en verden av web-programmering.
Vel, vil du se en masse ideer lånt fra kommandolinjen arbeid,
men også mye nytt og interessante ideer
som også kommer til å være germane for mobile applikasjoner og for teknologi,
mer generelt, som du Gutta er alle kjent i dag
på bærbare datamaskiner og telefoner og lignende.
>> Så vil du implementere ikke en nettside, eller et nettsted
per se, men en faktisk webserver.
Du vil skrive resten av en webserver skrevet i C, hvis formål i livet
er å motta HTTP-forespørsler, de virtuelle konvolutter vi fortsetter å snakke
om, og faktisk svare enten med noen statisk content-- som en prikk HTML
fil, eller en prikk JPEG eller noen annen rekke filer,
eller til og med en PHP-fil hvor nett Serveren kommer til å tolke at PHP
kode og spytte ut resultatene.
Nå har vi gitt deg ganske mye rammeverk
for it faktisk distribusjon kode for problem
satt seks er over 1000 linjer lang, en Mange som er kommentarer, for å være fair--
men dette er egentlig ment å være en mulighet
å få hendene skitne dykking inn i en relativt stor prosjekt
at vi har veldig spesielt skåret ut biter av for deg,
slik at virkelig når du avslutter CS50 og angir den virkelige verden av programmering
og ønsker å prøve seg på en rekke prosjekter,
vil du ha mye større comfort laste ned noen kilde
kode, noen åpen kildekode projisere på nettet,
og dykking i og gjøre endringene du ønsker.
Problemet satt sju kommer til å være om lage din egen web-basert applikasjon
som tar dynamisk input og gir dynamisk effekt i form
av en etrade.com-lignende nettsted.
Og problemet satt åtte vil fokusere på ennå et annet språk kjent som Javascript.
>> I mellomtiden, den endelige Prosjektet er på horisonten.
Den såkalte pre-forslag skyldes en uke fra i dag.
Pre-proposal-- per spesifikasjonen, som er på CS50 er website--
er en ganske uformell mulighet for du sende en ganske konsis epost
til undervisningen stipendiat bare for å apprise ham
eller henne om hva du tenker, for å bruke ham eller henne som en samtalepartner.
Og har en mental helse check-- om du tenker
om biting av også mye eller kanskje for lite,
eller kanskje du har ingen anelse overhodet og ønsker å delta i en samtale.
>> Deretter er et forslag og statusrapport,
den såkalte CS50 hackathon her i Cambridge for Harvard og Yale studenter
alike.
Den endelige prosjektet implementeringen er da grunn.
Og så en CS50 rettferdig her, i Cambridge, samt en annen i New Haven.
Så forslaget, ta en titt på nettsiden for disse opplysningene.
>> Men mer spennende, også er en muligheten til å få hendene skitne,
og deres sinn åpne for en hel haug av emner og verktøy
og teknikker som er underordnet til kurset kjernepensum,
men likevel relatert.
Og også fantastiske stepping steiner til gjør virkelig kule endelige prosjekter som
går langt utover materialet vi har dekket formelt problem setter eller i forelesning.
Så gå til CS50 hjemmeside for hele liste av seminarer.
Hvis du ikke registrerer ennå, er det helt greit.
Gå videre og melde seg fremdeles, og vi vil følge opp med en live streaming link,
dag og tid er på nettsiden.
Og alt vil være registrert og lagt ut på nettet
hvis du ikke kan gjøre bestemte dager og tider.
>> Når det gjelder hva som ligger foran oss thereafter-- godt, selvfølgelig, det er CS50 hackathon.
Dette bildet, husker, fra uke null tatt rundt 4 AM en kveld i år tidligere.
Den CS50 rettferdig, som igjen vil foregå i begge byene.
Og så, bare for å plante frø, selv om vi fortsatt
har en måned pluss igjen av semesteret, hvis du ønsker å bli med CS50 egen undervisning
ansatte, og du vil begynne tenker på å bli en CA,
eller undervisning fyr, vet at Vi begynner å snakke mer om det
senere dette semesteret.
Men avbildet her er de fleste av årets lag.
>> Og så, PHP-- og jeg var så trist i forrige uke at [? Allyse?] Kindly
gikk til innsats for å få oss disse fantastiske rekvisitter
at jeg ikke ender opp med å bruke, så det egentlig bare så slags dum
at vi hadde en spade sitter her hele dag sist onsdag, og en liten skje.
Men dette var min metaforiske måte å prøve å male
bildet av hvorfor vi overgangen fra C til et språk som PHP.
Og det samme kan sies om noen antall languages-- Java, Python, Ruby
eller bunter av others-- men mens i C, for eksempel, å skrive et program i C
kan typisk være like tar en skje som dette
og å grave et hull i jord, i sand eller smuss.
PHP kan du ta mye større biter ut av problemet,
skriver langt mindre kode ved hjelp av et langt mindre verktøy,
fordi det mye mer er så funksjonalitet sydde i.
>> Nå, hvis vi var veldig dramatisk, vi ville ha noe å måke
her, men det så være.
I mellomtiden, den annen metafor vi kom opp med
er, selvfølgelig, kunne du bruke noe sånt som en skiftenøkkel
å hamre i noe sånt som en spiker.
Men selvfølgelig, retten verktøy til bruk kommer
å ikke være så mye språk kalt C--
og nå er jeg bare irritert [? Sanders,?] Sannsynligvis,
vi vil fikse det later-- så riktig verktøy å bruke ofte
ikke kommer til å være dette laveste nivået verktøyet.
Og ja, er ikke C et språk som de fleste av dere noen gang kommer til å bruke,
eller bør nødvendigvis bruke igjen.
>> Og i virkeligheten en liten secret-- den eneste gangen
Jeg bruker C selv er ganske mye mellom September og desember hvert fall
semester.
Og det er fordi vi bruke det som en mulighet
for å lære det grunnleggende programmering,
og med det datamaskin vitenskap fundamentale forhold, data
strukturer, algoritmer og like-- men svært raskt vil du
ser nå at syntaksen og ideene underliggende C
er så fantastisk overførbare til mer moderne
høyere nivå språk, som PHP og Python og Perl og Java
og Objective-C-- faktisk, ikke så mye Objective-C-- men Swift, disse nyere
språk som mange av dere vil deretter eksperimentere med deg siste prosjekt.
>> Så uten videre, la oss faktisk bruke PHP til å løse noen problemer.
Husker at tidlig, siste uke, vi brukte nettopp CS50 IDE,
Vi skrev en Eagle lite program som bare sa: "Hello world".
Og så jeg lagret det i en fil som heter hello.php.
Og da jeg kjørte denne kommandoen.
>> Og hvorfor?
På engelsk, hva skjer her?
Hva skulle jeg gjøre da Jeg kjørte denne kommandoen?
>> Yeah?
>> PUBLIKUM: Det finnes noen funksjon PHP som leser hva som in-- forstår det.
DAVID MALAN: Bra, det er noen funksjon PHP-- og la meg være mer spesifikk,
det er et program som heter PHP, a.k.a.
Tolk, som forstår innholdet av hello.php,
og tolker det topp til bunn, venstre til høyre,
og gjør hva disse kommandoene si.
Kommandoene i hello.php, selvfølgelig, er bare kilden code-- funksjoner
og variabler og sløyfer og lignende, som vi selv
har begynt å skrive i PHP.
>> Men i motsetning til C, som er et kompilert språk,
PHP du bare skrive det, og kjøre den.
Du hopper som mellommann trinnet konvertere den til nuller og enere,
og deretter kjøre den.
Og så hva er en oppside på dette?
Hvorfor er vi hopper over trinnet?
Hvorfor gjøre mer moderne språk tendens til å hoppe over dette trinnet?
Hva var fordelen?
>> Eller bare intuitivt?
Selv om vi har ikke skrevet mye PHP før,
hva som er gunstig om ikke kompilere koden din tror du?
Nei?
Ikke begå?
Skrape hodet?
Yeah.
>> PUBLIKUM: Mer dynamisk.
>> DAVID MALAN: Mer dynamisk?
Hva mener du?
>> PUBLIKUM: [uhørbart]
DAVID MALAN: OK, bra, så avhengig av innspill,
du trenger ikke å kompilere den hver gang.
Og det er virkelig som enkelt som at-- hva
er poenget med å fortsette å kompilere koden din?
Dette er bare et skritt som er making-- dette krever,
For de siste uker, dobbelt så mange skritt
som bare kjører programmet.
Det har vært nyttig i å se at du se noen feilmeldinger og så videre,
men det er fortsatt bare en irriterende trinn.
>> Og så programmerere innså over tid, hvorfor gjør ikke vi
begynne å skrive språk som ikke trenger det ganske mekanisk trinn,
slik at du bare skrive koden din og kjøre den.
Men hva var prisen som vi så vi betalte
i forrige uke, med et spesielt eksempel?
Ja?
>> Speed.
Så [? hva er?] tolker litt tregere,
i at nuller og enere er fint og raskt for en datamaskin
å forstå, fordi Intel CPU, eller hva det er,
bare forstår hva som skjer videre med de mønstre av bits.
Mens en tolk er et program som virkelig
har å lese Ascii kilde kode som du har skrevet,
og konvertere den, så å si, eller finne ut hvordan det konverterer til slutt
til nuller og enere.
Slik at det bare tar litt litt av en forestilling hit.
Så det er litt av en trade-off.
Nå hvis vi gjør dette over her, la meg gå videre og gjøre et eksempel som følger.
Hvis jeg går inn her, ny fil, jeg kommer lagre dette igjen er hello.php.
Og nå kommer jeg til å gå videre og si, "print hello world" -
og husker at jeg kan bruke print, gjør jeg ikke må bruke print-F. Og nå her nede,
hvis jeg gjør PHP av hello.php, huh-- jeg ikke synes å ha tolket det.
Hva har jeg gjort galt?
>> PUBLIKUM: De vinklede armbånd.
>> DAVID MALAN: Ja, trenger du den vinkelen braketten opp toppen.
Så det er litt irriterende, men du blir vant til det fort.
Hvis jeg må skrive PHP kode, jeg generelt behov for å fortelle programmet,
eller fortelle tolken, hey PHP, her kommer noen PHP-kode.
Og så for godt mål, ville jeg lukke dette ikke med dette, men heller
med bare spørsmålstegn vinkel brakett, slik at nå her nede,
hvis jeg kjører dette igjen, nå Jeg får det ønskede resultat.
>> Nå la oss gjøre en liten optimalisering, bare slik at du har sett det før.
Dette er litt irriterende at jeg må kjøre PHP plass hello.php,
fordi i det siste jeg bare kunne skrive dot slash
programnavnet, som er slags hyggelig.
Det er litt av en bedre brukeropplevelse.
>> Så det viser seg kan du gjøre dette i PHP med following-- jeg
kan bruke dette ganske kryptisk besvergelse på toppen her,
som vanligvis kalles en shebang, idet dette er en skarp symbol,
så å si, er dette et smell eller et utropstegn.
Og dette nå er banen til et program på et typisk system som Linux
kalles miljø, eller env.
Og dette line-- lang historie short-- linje man bare
sier, hei datamaskin, finn PHP tolk for meg i miljøet,
finner det i minnet, så å si.
>> Og hva er fint nå, er at hvis jeg går her nede,
Jeg kan gjøre dot slash hei dot php, or-- hmm.
Tillatelse avslått.
Vel, vil du se enda mer av dette med problemet satt syv, hvis du
ikke allerede har, med tillatelser.
Det viser seg at jeg trenger å utføre denne kommandoen
kalt [? chamod?] for endring mode-- et pluss x hello.php.
Jeg trenger [uhørbart] dette en ekstra trinn som er å fortelle min datamaskin,
gjøre hello.php kjørbar.
Og nå se hva happens-- dot slash hello.php, bare kjører den.
Jeg trenger ikke å oppgi tolken lenger.
Og jeg kan gjøre det enda penere, likevel, hvis jeg navn på denne tingen.
Hvis jeg flytter hello.php å bare Hello-- så varsel øverst til venstre,
programmets navn er faktisk nå bare Hei.
Nå kan jeg gjøre det ser ut som et C-program, selv om det er skrevet i PHP--
eller ærlig så mange av andre språk.
>> Så marginal forbedring, ingen funksjonell forskjell.
Men det er bare en liten kuriositet nå, så kan du skrive programmer
på alle språk, og brukeren ikke må vite eller bryr seg hva de er.
Vel, la oss se på en mer overbevisende eksempel nå
at jeg pisket opp på forhånd.
Og dette kalles quote.php.
Og det er tilgjengelig på nettet.
Og legg merke til at det er ganske short-- men det er et kommandolinje program som er
kommer til å se opp aksjekurser for meg, er noe som faktisk skjer
å være relevante for oppgavesettet sju.
>> Så la oss se hva jeg gjør.
På toppen har jeg fått åpen brakett spørsmålstegn PHP.
Så jeg har fått denne linjen, der jeg er krever en fil som heter functions.php--
vi kommer til å se mer om dette i en bit,
men dette er som Cs versjon av skarpe omfatter,
der du ønsker å gå inkludere en annen fil.
PHP kaller det krever, selv om det har også en inkludere funksjon.
Og det viser seg at function.php er bare noe jeg skrev før klassen.
Jeg satte den i samme katalog, fordi Jeg ønsket å faktor ut noen kode
at vi kanskje ønsker å bruke andre steder.
>> I mellomtiden kan du sannsynligvis antyde hva som skjer her.
Dette er litt forskjellig fra C-- men hva mener jeg med sikre riktig bruk?
Oversett dette mer teknisk.
Under hvilke omstendigheter er jeg avslutte programmet, eller spennende?
Yeah?
>> PUBLIKUM: Når du ikke har to kommandolinjeargumenter.
>> DAVID MALAN: Når jeg ikke har til kommandolinje argumenter.
Og husk at en av dem argumenter er programmets navn selv.
Og den andre kommer til å være et annet ord jeg skriver etter ledeteksten.
Så akkurat som C, dette er min måte å sjekke,
gjorde brukeren samarbeide og kjøre programmet som jeg hadde til hensikt?
Nå, det er noe litt annerledes
med C-- først av alt vi har denne dollartegn,
og hva gjør en dollar logg betegne i PHP?
Bare en variabel.
Det er alle-- bare en variabel etterfulgt av hva du vil faktisk kalle det.
Legg merke til det er noe mangler fra min PHP program,
akkurat som det ble sist mangler uke, i motsetning til C, som er det?
>> A typer, men også noe annet.
Det er ikke noe function-- hovedfunksjon.
Det er ingen hovedfunksjon.
Du bare begynne å skrive koden din uten å
å bekymre seg for en ganske vilkårlig konvensjonen navngi noen standard
Funksjonen main.
Så arg C er bare veldig en global variabel
at tolken gjør tilgjengelig for meg.
Nå er dette interessant.
Så se opp ting.
Dollartegn lager er på igjen, det er min variabel.
På høyre side, det er tydeligvis
en funksjon i PHP kalles oppslag som Jeg har bestått min siste kommandolinje
argument to-- hva ordet er.
Og vi får se hvordan dette arbeider i et øyeblikk.
>> Og så til slutt jeg rapporterer prisen.
Jeg skriver ut en andel av slik og slik.
Og husk, dette er Måten PHP-- en måte i PHP--
der du ikke trenger å gjøre dollartegnet S lenger.
Du kan bare bruke klammeparentes og plugg i noen variabel.
Du trenger ikke å bekymre deg for bruker printf på samme måte.
>> Og som en side, når du setter en variabel innsiden av doble anførselstegn som dette,
du bruker en fancy teknikk kalt variabel interpolering.
Det betyr bare plugge den variable i her.
Og som en digresjon, noen av dere som kommer fra andre programmeringsbakgrunn,
du kan ikke bruke apostrof rundt strenger å gjøre dette.
Du må bruke anførselstegn for variabel interpolasjon til å fungere.
Ellers vil du bokstavelig talt se disse klammeparentes.
>> Så til slutt, la oss gå videre og kjøre dette.
La meg gjøre min terminal litt større.
La meg gå videre og kjøre innsiden av mitt sitat katalogen.
[? CDsource?] [? AM?] [? quote?] PHP sitat dot PHP,
og jeg kommer til å søke etter noe som GOOG, som er dens ticker symbol,
og en andel av sitt nye navn, Alphabet Inc, koster $ 717, som i dag.
Greit, hvis vi ønsker å kjøre dette igjen, anyone
har en annen lager ticker de ønsker å slå opp?
>> Microsoft tror jeg er denne, MSFT-- $ 53.
Jeg tror Yahoo er kanskje det.
Og Facebook er det.
>> Så hva er dette programmet gjør?
Magien synes å være forankret ved at oppslag funksjon.
Så la oss ta en rask titt.
>> Det viser seg at ikke kommer med PHP, er det i functions.php.
Og vi vil ikke gå gjennom dette i stor detalj,
men merker det operative ordet her er som på linje seks av functions.php--
Jeg bokstavelig talt si funksjon.
Jeg angir navnet på min funksjon.
Jeg deretter angir noen argumenter eller parametere,
Jeg ønsker at funksjonen til take-- ingen typer.
Og da jeg gjennomføre det.
>> Og jeg skal vinke min hånd ved gjennomføringen,
siden det er ganske avansert rett nå, men vi får se det igjen faktisk
i en uke i oppgavesettet syv.
Men jeg kan rydde opp dette, også.
Jeg har også tatt med i dagens kode en versjon
sitat, som ikke har noen prikk PHP-fil.
Fordi det er antagelig på toppen av programmet kalles bare sitere?
Det såkalte shebang-- den ganske kryptisk besvergelse
som sier finne PHP og deretter kjøre den på min kode her.
>> All right, så som bringer oss til der vi slapp
siste tid-- riktignok med noen mer avanserte eksempler.
Eventuelle spørsmål så langt om PHP eller hva vi gjør?
No-- all right.
Yeah?
>> PUBLIKUM: Inside the HTML-filer, gjør you--
[? gjør du ?] [? bare kalle det?] en [uhørbart] PHP fil?
DAVID MALAN: Godt spørsmål.
I en web sammenheng, som vi er bokstavelig talt i ferd med å gå over til,
du ikke bruker den såkalte shebang på toppen,
fordi nettet server-- ofte en Programmet heter Apache eller Microsoft
IIS, Internet Information Server, eller en rekke andre web server software,
vet at når den ser en prikk PHP-fil, som det
bør kjøre tolken på den.
Det ser ikke ut til at første linje.
Så denne første linjen trick er bare når du er
skriver kommandolinje programs-- som vi ikke vil gjøre super ofte,
men det er vår måte å bygge bro våre C eksempler til nå vår PHP.
>> Så la oss faktisk bro denne verden fra kommandolinjen verden til nettet
ved å gjøre følgende.
La meg gå videre og trekke over her for bare et øyeblikk.
Så hvis vi har en web server, eller snarere hvis vi har min laptop over her,
som jeg skal tegne som dette.
Og her har vi den Internett i en eller annen form.
Og så over her, har vi en server i en building--
Dette er hvordan internett works-- og inn her
er en server med noen lys kanskje.
Hva som faktisk skjer mellom disse to tilkoblinger?
>> Så i denne bygningen er en webserver.
Det er bare en datamaskin som kjører noen drifts
system-- kanskje fri programvare kalt Apache, som CS50 IDE er i gang.
Så kan du faktisk tenk på denne bygningen
som bygningen som CSt0 IDE er lagret.
Det er der dere alle har kontoer, hvor dere alle
har din egen webserver kjører, alle dere
ha din egen unike webadresser, som vi begynte å diskutere,
og du vil se mer i P. satt seks.
>> Her er min laptop sted annet på internett.
Og så når jeg besøker en URL som tilhører for meg, er at Internett-trafikk som går
over til serveren, serverens mottar en HTTP request--
som en får index.html og det er svarer på denne websiden.
Så det er den generelle paradigmet.
Mens alt opp til nå i dag, alt
skjedde bare i rammen av denne bygningen.
Jeg brukte min laptop, men Jeg ble koblet til CS50 IDE,
så alle de programmene jeg kjørte var inne på denne serveren, selv.
>> Men nå, la oss starte gjenbruk PHP å skrive noen faktiske programmer som
blir servert av en webserver.
Og for å gjøre dette, kommer jeg til å gå inn en hel haug med eksempler
at introdusere denne ideen her.
Så dette er en slags fancy måte beskriver et programmeringsparadigme.
>> Og faktisk, som du avslutter CS50 eller jobbe på endelig prosjekter,
eller ta noen følger på klassen, vil du begynne
å se at world-- spesielt etter å ha vokst opp
med språk som C som er super lav level--
innse at det er bedre måter å skrive programvare.
Det er visse mønstre du kan følge,
bestemte måter å organisere filene dine og måter å navngi dine funksjoner,
slik at lang historie kort, verden har kommet opp
med en hel haug med akronymer og navn på veier programmering.
Dette er bare teknikker du kan bruke.
>> Og en av dem heter MVC, for Model View Controller.
Og dette er bare, for nå, en altfor komplisert
måte å si hvordan du bør legge ut et PHP-basert nettsted, i vårt tilfelle.
Hvordan organiserer du filene dine, hvordan organisere du din logikk,
på en måte som gjør det lettere å skrive mer kompliserte nettsteder?
Og ja, vi raskt komme dit med p-set sju.
>> Så i en verden av MVC, du kommer å se at koden vår kan generelt
karakteriseres som enten modellkode, eller kontroller kode, eller vise kode.
Og jeg kommer til å overforenkle det som follows--
kontrolleren er hjernen til programmet,
Det er der alle interessant logikk skjer.
Så alt vi har vært skriver hittil i klassen,
er typen som controller code-- det kontrollerende
programmet, loopene, din betingelser, din fungerer
og variabler og alt det der.
>> Visninger, nå, kommer til å være litt mer opplagt i verden av nettet.
En visning er estetikk på ditt nettsted.
Det er hva brukeren sees-- bildene, HTML-tabeller, HTML-koder, og alle
av at alle de fluffy estetiske ting som ikke er så vanskelig å skrive,
men er akkurat hva du genererer, er den såkalte visning, estetikk.
Og modellen, til slutt, kommer å være database stuff-- som
vi vil begynne å dykke inn i alt jo mer denne onsdagen.
Så kontrolleren er logikken, Utsikten er det estetiske ting,
og modellen kommer til å være der vi lagrer våre faktiske data.
>> Så la oss se på dette mer konkret med følgende eksempel.
Jeg kommer til å gå inn i katalogen min her dagens kilde code-- som alle
er tilgjengelig på nettet.
Og jeg kommer til å gå inn i versjon null.
Og her er-- la oss kalle det det versjon null av CS50 hjemmeside.
Det er ikke mye her i det hele tatt.
Det er en veldig enkel web-side som er sannsynligvis ved hjelp av hva HTML tags-- bare
gjette fra tidligere eksempler?
>> Hva er det?
H1-- sannsynligvis for at stor fet Tittelen, som logoen opp toppen, CS50.
Og hva annet er på spill?
Yeah?
PUBLIKUM: Usortert liste.
DAVID MALAN: Usortert list-- så UL tag og kanskje et par LI koder.
Og hvis du ikke husker disse, det ærlig spiller ingen rolle.
Dette er fluffy liksom implementering detaljer om HTML
at du raskt slå opp og du er tilbake på din vei.
Vi vil fokusere mer på programmering ideer som er de saftigere stykker.
>> Så la oss bare ta en rask se på HTML-- og faktisk
hvis jeg åpner opp kilden visning her, jepp, Det er akkurat det som skjer her.
Det er en UL tag.
Nestet innsiden av det er å LI koder.
Og da jeg lånte URL av selve pensum her.
>> Og deretter i lectures.php er tilsynelatende
en annen dynamisk generert side som kommer til å ha, la oss see-- ah,
de to første ukene av forelesning.
Så uke null og den første uken, la oss ser på dette-- hvis jeg se siden kilden,
også super enkelt.
Dette fører til to sider kalt week0.php, og week1.php.
Så vurdere nå hva som skjer.
>> Når jeg klikker på week0.php, min laptop gjør en forespørsel om week0.php.
Webserveren, a.k.a., CS50 IDE, mottar den virtuelle konvolutten.
Det ser en melding som får week0.php.
Det er da tolke filen, topp til nederst, venstre til right-- filen
kalt week0.php-- og spytter ut resultatene.
Så innsiden av denne filen, week0.php, må være
styrelogikk som genererer denne HTML, og vi vil snart se at.
>> Men for nå, la meg klikke på uken null, og nå har vi onsdag og fredag,
og nå har vi lysbildene langsomt fra uke null.
Og du kanskje husker dette fra vei tilbake når.
Så det er all denne nettsiden gjør.
>> Så la oss vurdere hvordan det er å gjøre dette.
Jeg kommer til å gå tilbake til kildekoden her, i CS50 IDE,
og jeg kommer til å åpne opp index.php.
På toppen av denne filen er en haug med kommentarer.
Og så i midten av denne filen, det viser seg, er ingen PHP-kode hodet.
Fordi hvis du ikke har noen av de åpen brakett spørsmålstegn PHP koder,
du er fri til å bare sette HTML.
>> Fordi hvordan PHP tolk er ment å gjøre,
er når den leser dette file-- topp til bunn, venstre til right--
det bare tolker koden den ser mellom disse vinkelparenteser spørsmålstegn.
Og alt annet som det ikke gjenkjenner som PHP, det bare spytter ut.
Og HTML Er blant de ting det vil bare spytte ut.
>> Så denne filen kan ha blitt kalt index.html,
men jeg navngi alt dot PHP som et springbrett.
Lectures.php-- tilsvar uimponerende, det er bare litt HTML.
Week0.php, på samme måte bare noen HTML.
>> Men la oss nå sette på velkjente ingeniør hat,
og vurdere hvordan vi kan forbedre dette.
Det er ikke vanskelig å gjøre dette, men jeg slags av delegert inn kopier og lim inn.
Og faktisk, hvis jeg gjør uke to, du vet hva jeg sannsynligvis kommer til å gjøre?
Jeg kommer til å gå til week1.php, jeg er kommer til å markere alt.
Jeg kommer til å kopiere det, lim det inn i en ny fil som heter week2.php,
finpusse noen webadresser, og være på vei.
>> Så basert på hva vi har sett i C allerede,
Dette føles ikke riktig, forhåpentligvis.
Kopiere, lime sjelden den riktige løsningen.
Så hva kan vi begynne å gjøre for å forbedre dette?
Hvor ligger mulighetene for bedre design?
>> Innen jeg kommer til uke åtte, kommer det til
å være veldig irriterende hvis jeg ønsker å endre
skriften på hver og en av sidene mine, eller om jeg vil ha
for å endre strukturen av oppsettet.
Så hvor er muligheten for bedre design?
Vel, la oss vurdere hva som er deles på tvers av alle disse filene.
>> Her er uke en, her er uke null, her lectures.php,
her er index.php-- hva som er den samme og hva er annerledes, grovt sett,
i hver av disse filene?
Yeah?
>> PUBLIKUM: [uhørbart]
DAVID MALAN: OK, bra.
Så det er et mønster, sikkert, hvorved hver gang jeg velger forelesning jeg,
Jeg skal generere en svært likt utseende siden.
Og så kanskje jeg kan utnytte det faktum at egentlig,
vi bevisst numerisk indeksert vår lectures--
hvis jeg kan sette enda mer ord i svaret ditt.
Og hva er det eneste, virkelig, som er i endring mellom uke one--
og la meg bla nedover, så det er omtrent i samme sted--
så her er uke null, omtrent på toppen.
Her er uke en, uke null, uke én, uke null.
OK, bokstavelig talt hvis du vet ingen program overhodet,
dette er nå akkurat som en mønstergjenkjenning spillet.
Så hva er annerledes?
Yeah?
>> PUBLIKUM: [uhørbart]
DAVID MALAN: Bra, så tittelen er i endring, aldri så litt.
Zero kommer naturligvis til en.
Samme skjer i H1 tag.
Og vi ikke helt ser det så lett, fordi nettadressene er litt lang.
Men disse webadressene endrer litt.
>> Men hva er det ikke endring er, tør jeg si, det meste av innholdet i page--
HTML-koden er den samme, er hodet det samme, tittelen er nesten det samme,
legemet er den samme, og nesten alt annet
er den samme bortsett de små tweaks.
Så hvordan kan vi gå om facto noe av dette ut?
>> Vel la meg foreslå nøyaktig som i neste versjon.
Så her i versjon en, har jeg den eksakte samme filene, pluss et par andre.
Her er index.php-- og selv om du aldri har sett PHP før,
hva er det jeg sannsynligvis gjør for å løse dette problem-- basert på det du ser her?
Ja, det er en liten forpliktelse?
Nei?
Ja, gå på.
>> PUBLIKUM: [uhørbart]
>> DAVID MALAN: Jepp.
>> PUBLIKUM: [uhørbart]
>> DAVID MALAN: Jeg trenger deg til snakke litt høyere.
>> PUBLIKUM: [uhørbart]
DAVID MALAN: OK, bra.
Og jeg think-- det var vanskelig å høre you-- men jeg
tenke hva du får på er at kodene som var vanlig opp toppen,
og kodene som var vanlig på bunn, har nå blitt tatt ut,
eller henvist til hvilke filer?
Header.php og footer.php-- og vi kommer
å gjøre noen tilpasninger for å adressere bekymring du bare
reist om tallene endring, for eksempel, hvis jeg hørte riktig.
>> Men det synes å være hovedinnholdet i den.
Hvis det var en enorm mengde redundans på toppen av siden,
og en enorm mengde redundans på bunnen,
la oss bokstavelig talt bare høydepunkt og kutte det ut innhold,
legg den i en egen file-- akkurat som ideen av CSS, hvor vi tatt ut
veldig lignende estetikk, satt i et separat dot PHP-fil,
bruke kreve mechanism-- som er som ciss include-- som
er egentlig som å si gå ta tak i innholdet i header.php,
og kopiere og lime dem her.
>> Men hva dette betyr er at nå i index.php, jeg har disse to linjene.
I lectures.php, jeg også ha disse to linjer.
I week0.php, jeg også ha disse to linjer.
>> Så nå, hvis jeg ønsker å endre tittelen på alle mine sider,
eller jeg ønsker å endre fundamental struktur,
Jeg kan endre det nå på bare ett sted, eller to places-- topp- og bunntekst,
henholdsvis.
Nå koden begynner å se litt mer kryptisk, ikke sant?
Men hvis du tenker på hva siden er doing-- hvis jeg ber om week0.php,
på samme måte som på tegningen i løpet her-- når week0.php er forespurt,
hva betyr det?
>> Bokstavelig talt, er denne filen spurt av nettleseren.
Nettet server-- a.k.a.
CS50 ID-- griper dette fil, week0.php, og leser
det øverst til nederst, venstre til høyre.
På linje en, den støter umiddelbart åpen brakett spørsmålstegn PHP, krever
header dot PHP, og så hvordan PHP tolk
does-- som er bygget inn i nettet server, fordi vi forhåndskonfigurert
det for you-- det går automatisk i header.php, kopierer innholdet,
limer dem her.
>> Men så tolk møter spørsmålstegn tett brakett,
slik det er gjort tenker.
Nå er det bare blindt spytter ut linjer to gjennom syv,
fordi det er bare rå HTML.
Blir til linje åtte, og gjør at samme magien igjen-- åpne filen,
gripe innholdet, og krever dem eller lime dem
akkurat da eller der.
>> Men jeg bare antydet en bug.
Dette er en delvis skritt bakover, fordi hvis vi ser i header.php,
Jeg har på en måte kuttet et hjørne.
Hva har jeg gi opp for for å få dette hevdes bedre design?
Yeah?
PUBLIKUM: [uhørbart]
DAVID MALAN: Ja, jeg slags av kuttet en nontrivial hjørne.
Du påpekte at det var i endring var tittelen, nummeret i tittelen,
og nummeret i H1.
Så min løsning var, OK, la oss bare endre navn på siden,
og ikke forholde seg til det problem overhodet.
Så det er en delvis gå bakover for sikker.
>> Men hva er bemerkelsesverdig her er at det jeg har gjort
ellers er priset ut alle de vanlige tingene.
Og i footer.php, merker jeg tatt ut alt dette, om enn mindre,
felles ting.
Så jeg trenger å liksom nå kunne ta et steg videre, og fikse
at tittelen problemer.
Så la oss gjøre det.
>> La meg gå inn i min andre versjon her, som, igjen, har de samme filene
med unntak av ett nytt tilskudd.
Og det er litt mer ordrik, men la oss se om vi
kan erte hverandre hva som skjer her.
Så i stedet for å kreve header.php, og footer.php,
Jeg synes å være bare krever én file-- kalt, selvfølgelig, helpers.php.
Og la meg fastsette nå, hva som er inne i helpers.php
er bare en haug med funksjoner som jeg skrev, akkurat som før.
Men jeg kalte det helpers.php.
>> Nå tilsynelatende, i linje tre og 10, er jeg
ringer to functions-- gjengi header, gjengi bunntekst.
De kommer ikke med PHP, skrev jeg dem selv.
Og jeg setter dem i helpers.php.
>> Nå har vi bare sett denne syntaksen en gang, og det var super kort.
Men dette er tydeligvis et argument å gjengi mål funksjonen.
Hvorfor vet jeg det?
Vel her er et nært paren, her er en åpen paren.
Og selvfølgelig, akkurat som i C, noe mellom disse parentes
er en input-- eller en argument til funksjonen.
>> Hva er datatypen for dette argumentet, basert på hva jeg har uthevet?
Hva gjør disse klammer indikerer, basert på forrige uke?
Ja, det er en array-- spesielt en assosiativ array.
Og denne syntaksen riktignok er litt funky,
men dette er bare passerer i en sentral verdi par.
Nøkkelen er, sitat unquote tittel, og verdien er CS50.
>> Hvis vi hadde gjort dette i C, kan det i stedet
ser mer ut som dette, bare quote unquote CS50--
eller faktisk det ville være krøllete bukseseler, eller noe sånt i C,
hvor nøkkelen er null, og verdien er CS50.
Men igjen, PHP, selv om syntaks er, igjen, litt rart,
det tillater deg å passere i ord i stedet for tall
å knytte nøkler med verdier.
>> Så hva betyr alt dette?
Hvis jeg går inn helpers.php, la oss se på denne funksjonen.
renderHeader.php, snarere renderHeader er min funksjon,
og jeg vet det fordi jeg ser funksjonen nøkkelordet her.
Dette er nytt fra C-- det tilsynelatende tar et argument kalt data--
men jeg kunne ha kalt dette noe, men jeg kalte det data,
bare for å være litt clean-- og bare ta en gjetning, spesielt
Hvis du har programmert på annen høyere nivå språk før, noe
ovenfor C, konseptuelt.
>> Hva gjør like åpen brakett hakeparentes trolig bety?
Eller hva kan det bety?
Vi har ikke sett dette i C. Yeah?
>> En tom array.
Nærmere bestemt betyr dette at hvis brukeren ikke kalle renderHeader
med et argument, jeg fortsatt kommer å ha et argument som heter data,
men standardverdien er kommer til å være en tom array.
Så det er bare en hyggelig service.
Jeg trenger ikke å kjefte på brukeren, eller si du brukte min funksjon galt.
Jeg kan bare gi brukeren en standard verdi, hvis jeg ikke særlig omsorg.
Nå er denne funksjonen, er jeg kommer til å vinke hendene mine på.
Men dette ekstraktet funksjonen gjør oss å passere disse variablene i data
inn header.php på følgende måte.
Og dette er den siste brikken, Jeg tror, ​​funky syntaks.
Her er min nye versjon av header.php-- det
pleide å si, bokstavelig talt, åpen brakett tittel CS50, og det var det.
Og samme for H1.
>> Nå står det tilsynelatende noe ganske funky.
Og la meg forenkle dette et øyeblikk som følger.
Dette er hva jeg har endret min tittel å være.
Men, det blir litt stygge å stadig åpne brak med PHP,
og deretter bruke utskriftsfunksjonen.
Det viser seg at PHP har en stenografi notasjon for dette, som er like
et likhetstegn, som er teknisk sett en funksjon kalt ekko i stedet for print,
men det er det samme, effektivt.
>> Det ser bare bedre.
Det er bare en syntaktisk sukker, om du vil,
som gjør at koden min ser litt bedre.
Men det viser seg, og vi vil se dette igjen
før lenge, må vi kalle dette grammatikken lang funksjon kalt
HTML spesialtegn i PHP, fordi det viser seg
det er visse innganger at brukeren kan gi oss
eller at brukere kan gi oss, som kommer til å bryte vår side.
Men vi får se det neste uke med Javascript.
Men for nå, bare vet at denne filen, headers.php, rett og slett
tar tittelen som Jeg gikk inn, det gjør
sikker på at det er trygt å bli injisert inn i et web side, og det spytter det ut som min tittel
og som min H1.
Så hvis jeg går inn i denne versjonen nå, Legg merke til at forelesningene har sin tittel tilbake,
uke null har sin tittel tilbake, og ja, HTML jeg genererer
er identisk med hva min første versjon var-- bortsett fra min mellomrom,
fordi jeg har begynt å formatere koden min litt annerledes.
Men jeg har generert alle koden jeg bryr meg om.
Så la meg pause for bare et øyeblikk og se
hvis det er noen spørsmål eller forvirring jeg har laget.
Greit, så la oss vri litt vanskeligere her
for å se om det er en mulighet for forbedring.
Helpers.php også hatt dette funksjon, kalt renderFooter.
Og hva er bemerkelsesverdig om renderHeader, og renderFooter?
Og igjen, for dagens formål, vet at ekstrakt funksjon er bare
min måte å passerende argumenter inn header.php og footer.php.
>> Sorry?
>> PUBLIKUM: [uhørbart]
DAVID MALAN: Ja, bare jeg endret kreve linje.
Så bokstavelig talt, jeg har begått den synd kopiere og lime inn, enda en gang.
Det er ikke et stort antall linjer, men kommer on--
hvis jeg kopiere og lime alt bare for å endre en lite ord,
og den ene lille ordet som Alan peker ut er fotnoter her, kontra header her.
Ellers er alt identiske, bortsett fra,
selvfølgelig funksjonens navn.
Så hva kan vi gjøre bedre?
>> Vel la meg åpne opp denne versjonen her, hvor i helpers.php,
hvorfor kan jeg ikke bare få en litt smartere om dette?
Skriv litt mer komplisert kode, men kaller det gjengi?
Så hva har jeg fundamentalt endret?
>> Det tar et argument now-- to argumenter, data fortsatt.
Og så hva er det første Navnet sannsynligvis blir brukt til,
basert på hva du leser her?
Selv om noen av syntaksen er fortsatt nytt.
Hva er dollartegn mal?
>> Sorry?
>> PUBLIKUM: topp- eller bunnteksten.
>> DAVID MALAN: topp- eller bunnteksten.
Så tilsynelatende, bestemte jeg meg for at hvis det eneste som forandrer seg
er det mal jeg ønsker til print-- og etter mal
Jeg mener dette er fasit for kode som jeg ønsker å utgang,
men jeg ønsker å koble til noen values-- så hvis det er bare header
eller bunntekst, hvorfor ikke jeg parameterize det og kaller argumentet dollartegn
mal?
Og så denne funky syntaks tillater meg å lage en sti i en variabel her.
>> Så dollartegn banen er en variabel.
Hva gjør denne syntaksen gjøre, hvis du er kjent?
Yeah?
>> PUBLIKUM: [uhørbart]
DAVID MALAN: Nettopp.
Hvis malen, sitat unquote, header, eller hvis malen er,
quote unquote, bunntekst, den linjen der som jeg har uthevet, linje åtte,
er ganske enkelt å ta det navnet, som header, og sette sammen det med dot PHP.
Slik at vi ikke har denne operatøren i C. Dette dot operatør
en fantastisk ting i PHP-- hvis du er kjent med Javascript eller Java,
du kan bruke pluss signere å gjøre sammensetning.
>> I C, er det en smerte i neck-- og jeg er så lei meg, i p-set seks,
du er nødt til å gjøre dette-- det er en smerte i nakken
å sette sammen strenger.
Hvorfor?
Vel, fordi hvis du har en streng som er denne lange,
og en annen streng som er denne lange, du kan ikke bare koble dem sammen.
Hva har du i stedet har å gjøre i C?
Yeah?
>> PUBLIKUM: [uhørbart]
>> DAVID MALAN: Du må malloc minne, eller bruke en matrise på stakken.
Og du faktisk nødt til å gjør at matrisen stor nok
å passe dette pluss dette, pluss backslash null.
Deretter sette sammen dem sammen ved hjelp røre katt eller manuelt med en for loop,
eller en rekke teknikker.
Og vi viser deg et par i p-set seks.
>> Det er en smerte i nakken.
Og dette er virkelig hva jeg mener om dette versus dette-- som C versus PHP.
Du bare får så mye mer funksjonalitet for gratis,
slik at du kan fokusere, ideelt sett på moroa
del av koding, blir prosjekt du ønsker å løse,
snarere enn lavt nivå bagateller.
>> Så dette er bare genererer header.php eller footer.php basert på hvilken jeg ringe.
Og ja hvis jeg går inn i index.php, varsel
alt som changed-- Istedenfor ringer gjengi header eller gjengi bunntekst,
Jeg ringer gjengi, etterfulgt av navnet på malen som jeg ønsker å gjøre.
Og du vil se dette, også, i oppgavesettet syv,
hvor vi gir deg mulighet til å bruke samme funksjon for å lage bunter
og bunter av forskjellige nettsider.
>> Så i stedet for å dvele for mye mer på disse details--
som du vil se igjen i Oppgavesettet seven-- la oss se
ved nå begynnelsen av en løsning til et mer interessant problem.
Så langt, ikke noe vi har gjort har lagrede data.
Faktisk, den eneste gangen vi noensinne har lagret noe vi har gjort i denne klassen
er når vi hadde en veldig enkel demo stund tilbake, hvor vi brukte filer IO i C,
og jeg tror jeg skrev i mitt navn, og Hannah navn, og Maria navn,
eller kanskje Andy navn, og da vi lagret en CSV file--
kommaseparert verdier filen.
>> Og vi brukte fopen-- jeg tror vi brukte fprintf som jeg husker,
og vi har lagret en fil.
Nå, som er den enkleste form av en database.
Hvis du ønsker å lage en nettside for Frosh direktemeldinger program, der freshmen
kan registrere deg for en sport, du ideelt ønsker å gjøre noe med disse dataene.
Forrige uke, vi gjorde ingenting med data-- vi nettopp sa,
du er registrert, ikke egentlig.
Eller kanskje jeg mailet Proctor, og det var det.
>> Men det ville være fint om jeg kunne gi som Proctor en CSV-fil,
som en Excel-fil.
Eller enda bedre, det ville være fint om jeg kunne
sette disse brukernes navn og dorm navn og alt det der
inn i en database som bare lever videre for alltid,
før jeg velger å slette dataene.
En database som gjør det mulig meg å spørre informasjon.
Og ja, det er hva en database er.
>> Vi introduserer i dag, og neste uke også, en teknologi
kalt SQL-- en Structured Query Språk, som er et annet språk.
Det er egentlig et programmerings språk, men for databaser.
Og en database for nå, bare tenker på som en super fancy versjon
av Microsoft Excel, eller Google Regneark eller Apple Numbers.
Det er som regel et program som lar du lagre en hel haug av data
i rader og kolonner, ganske som du kanskje i Excel.
>> Men hva er fint, spesielt hvis vi er ikke super kjent med Excel,
hva SQL tillater deg å gjøre er å spørre dette informasjon ved å skrive linjer med kode
der du kan, selv om Databasen har en million rader i det,
du kan finne ting super rask.
Faktisk er Excel spesielt dårlig i store datasett.
Og faktisk opp til noen få år siden, viste seg
Excel vil bare tillate deg å lagre opptil 65535 rader av data-- som
høres ut som mye, men på gang jeg var en grad student,
og jeg husker snuble over dette fordi jeg var å generere
CSV-filer for min forskning, og jeg ønsket å analysere dem raskt
ved bare å åpne opp i Excel.
Selvfølgelig, min datamaskin bare krasjet, fordi jeg hadde mer enn 65.000 rader.
>> Men hvor ble det av 65 535 kommer fra?
Hva var Microsoft gjør, formodentlig?
Hvis du er flink med dine krefter to?
Ja, de brukte et 16-bit verdi for å representere radnummer.
Og to til 16 er 65,536-- minus en, fordi hvis du
null indeks betyr at det var flest antall rader jeg kunne ha.
Og det var bare et design beslutning.
Ved å lagre 16 bit, begrenset de meg 16.000 rader, i stedet for 4 milliarder kroner,
som jeg kunne ha hatt ideelt.
Men for nå, skal vi innføre denne mer i en web-sammenheng.
Og hva er fint om SQL er at selv selv om det er ganske kraftig og pen
sofistikerte, det virkelig koker ned til fire viktige operasjoner, fire
viktige funksjoner, hvis du will-- velger, for å hente data, søking
for data; slette eller slette data, sette inn for å legge til rader i databasen;
og oppdatering.
Så hvis du noen gang har brukt Google Regneark, Apple Numbers, Microsoft
Excel, har du utført, mest sannsynlig, alt
av disse operasjonene som et menneske med bare ved hjelp av tastaturet og mouse--
sette inn data ved hjelp av øynene dine for å velge eller søke etter data,
eller oppdatere data, eller slette data.
>> Så hva betyr dette?
Vel, forhåndsinstallert i CS50 IDE er et program som heter MySQL.
Det er et gratis, open-source database som er super populært.
Facebook, for eksempel bruker den til denne dag, blant annet verktøy som de bruker.
Og mange svært populære nettsteder bruker det i stor grad fordi det er raskt,
og fordi det er gratis.
Men absolutt alternativer finnes.
Og noen av dere kanskje prøve seg med alternativer for endelig prosjekter.
>> Dette er en skjermdump, i mellomtiden, for et nettbasert verktøy kalt phpMyAdmin.
Det er en tilfeldighet at denne web-basert verktøy er også
skrevet i et språk, PHP, men hva det er ment å gjøre
er å gi oss en web-basert grensesnitt til en database.
Fordi MySQL er typisk noe historisk, du
ville samhandle med bare med en kommandolinje.
Og det ville være super irriterende og uforståelige å ha
å skrive tekstkommandoer for å velge data, sette inn data, og slette data.
Så noen folk på internett skrev en web-basert program
som bare la oss styre dataene i vår database.
Det er som å dobbeltklikke på Excel, og kjører en web-basert versjon av denne.
>> Og hva du kommer til å bruke denne for slutt neste uke, ikke i p-set seks,
men er å bygge noe kalt CS50 Finance, som
kommer til å ha en database over brukere, med brukernavn og passord,
dollar beløp at de har i sine bankkonti.
Det kommer til å være noe du bruker til å lagre
symbolene og de mengdene av aksjer som brukere
har kjøpt ved hjelp virtuelle dollar som du vil gi til dem.
Og det kommer til å tillate brukere for å registrere nettstedet ditt,
slik at selv vennene dine kan stemme på ditt nettsted
og faktisk registrere, logger deg på, og leke seg
og prøve å finne feil i koden din, og prøve å finne feil i ditt nettsted.
Og de vil ganske enkelt registrere deg ved legge seg, effektivt,
via koden du skriver til databasen.
>> For eksempel er dette en rask skjermbilde av hva en database kan se ut.
Dette var fra en av fjorårets solutions--
Dette er som en mini Excel fil, lagret i vår database,
lagret i denne programvaren kalles MySQL.
På venstre side, har jeg tydeligvis gis hver brukeren et unikt nummer.
I den andre kolonnen, har jeg gitt alle en bruker name-- min egen
blant dem.
Og på høyre side, Jeg har gitt dem en hash.
>> Nå er dette faktisk et passord, men det er ikke en ren tekst passord.
Det er et kryptert passord, hvis du vil, eller en hash passord.
Som vi vil komme tilbake til før lenge.
>> Men hvis du noensinne har lest en artikkel om hvordan
passordet på noen bank eller noen nettside kan ha blitt kompromittert,
det kan vanligvis bety en av to ting.
Så dette er bare et utdrag av seks brukere.
Alle dere nå kan finne ut via hacking eller cracking
hva våre seks folks passord er.
Men hvis du noen gang har fått et varsel eller en unnskyldning
fra et firma eller nettside ordtak, Beklager, en hacker brøt seg inn i vår database,
bør du sannsynligvis endre passord, hva kan det bety?
>> Vel, en, kan bety Selskapet har vært mer moronic,
og har blitt lagre passordet ditt i en kolonne som dette, ukryptert.
Hvilket betyr motstanderen, som stjal databasen,
bokstavelig talt kjenner din brukernavn og passord.
Det er det verst tenkelige scenario.
Og som du ser i p-settet syv, så lett å unngå.
Det er absolutt ingen unnskyldning for det form for dumhet i dagens internett.
Two-- og vi vil finne noen artikler å vitne at dette fortsatt
skjer, nonetheless-- to, kanskje motstanderen
stjal denne versjonen av databasen.
Som fortsatt er litt dårlig, fordi nå de vet at jeg har seks kunder,
Jeg vet brukernavn av disse seks kunder,
og jeg vet det krypterte versjoner, eller de hashed versjoner,
av de seks kundenes passord.
Men noen av dere som kanskje har gjort [? Hacker 2?]
hvor du sprakk passord, eller tok en ser på den versjonen av problemet
set, hvorfor er det fortsatt litt betenkelig hvis motstanderen kjenner din hash
passord?
>> PUBLIKUM: Fordi de kunne tast inn hele ordboken
inn i hash-funksjon.
Og hvis passordet er en ordbok ord, [? de kan bare match--?]
>> DAVID MALAN: Akkurat, motstanderen kan bare skrive kode, som noen av dere
gjorde for [? Hacker?] 2, hvorved du iterere over
alle ordene i ordlisten, eller alle mulige kombinasjoner av A
gjennom Z og en gjennom nine-- som høres ut som mye, og det er.
Men for en datamaskin, det er ganske darn fort.
Og i virkeligheten var det punkt av [? Hacker 2,?] Var
å ta ting som bokstavelig talt ser ut som dette,
og omvendt utvikling hva det egentlig var.
>> Så skal vi se på hvordan vi kan lagre denne mer effektivt.
Slår ut, heldigvis i MySQL, det kommer til å være datatyper.
Og en av de morsomme delene om database design, for å være ærlig,
er faktisk bestemmer selv hvordan skal du representere dataene?
Skulle du representerer et telefonnummer som en int, som et stort tall, eller en lang?
Eller gjør du egentlig det som en sekvens av tegn?
Og det kan være svært ikke-trivielle konsekvensene av dette.
>> Faktisk er en av de tidligste, morsomme germane historier
er når Mark Zuckerberg var å bygge Facebook, ble det opprinnelig skrevet på,
og fortsatt er i stor grad skrevet i PHP.
Og en av de største utfordringene de møtte tidlig ble skalering.
Da de holdt legge skolen etter skole etter skolen, så vidt jeg vet,
en av de opprinnelige oppløsninger var i hovedsak å kopiere og lime inn
noen av databasene og noen av koden,
slik at Harvard var som kjører på sin egen server,
og MIT ble kjørt på sin egen server.
Og dette var grunnen, for noen av dere som kanskje husker,
du kunne ikke ha venner i andre nettverk.
>> Du har sannsynligvis ikke har venner på MIT eller Harvard 10 eller så år siden,
men du kan ikke span nettverk for delvis av den grunn.
Og en av de største utfordringene for Mark og for selskaper som Facebook
er faktisk håndtering av hundrevis og tusener og millioner
forespørsler per sekund.
Så de tingene vi vil starte snakker om denne uken
er virkelig kommer til å være relevante for skrive god programvare, og populært
vellykkede verktøy som kan håndtere mange brukere.
>> Så vi skal snakke om ting som indeksering og søking,
men det er det for i dag.
Vi vil se deg for mer onsdag.
>> [MUSIC - "SEINFELD" TEMA]
DAVID MALAN: Du kan til det, og trekke fra det.
Og du trenger ikke å feste med noen forhåndsbestemt mengde minne.
Vel, hva er det som kommer til å bli kalt?
>> SPEAKER 1: Vel, hva er det som skjer?
SPEAKER 2: Hva mener du?
Han gir en forelesning.
DAVID MALAN: Og vi kan bruke en funksjon kalt malloc å memory--
>> SPEAKER 1: Hvorfor er ikke armene i bevegelse?
>> SPEAKER 2: Vel that's-- du vet, det er normalt.
Det er akkurat som han har bare store pølser henger der.
>> SPEAKER 1: Det er normalt?
>> SPEAKER 2: Ja, jeg tror vi bare anta at han ved et uhell
erstattet sin deodorant med superlim.