[Muziek] DAVID MALAN: Dit is CS50, en Dit is het begin van week acht. En we zijn zo enthousiast te verwelkomen rug, grote verrassing, eigen Ramon CS50's Galvan, een stijgende senior die is geweest besteding van de afgelopen maanden sinds juli in LA, in Hollywood, letterlijk werken aan een nieuwe tv- show genaamd Colony, de maker van die is eigenlijk een Harvard aluin zelf. En dus we zijn erg blij om dit te zien debuut op de VS-netwerk in januari. Dus stay tuned voor dat, en voor meer Ramon voor de komende weken. Weet nu dat het einde nabij is. En wat dit betekent is dat er niet al dat veel links van CS50, triest om te zeggen. We hebben slechts drie probleem sets left-- er probleem set six-- die in je handen nu of binnenkort zal worden, later dit week-- is bedoeld om te overbruggen onze werelden van de command line, waar de We hebben het grootste deel van onze tijd met behulp C, en de wereld van het web programmeren. Nou, je zult een heleboel ideeën te zien geleend van de command line werk, maar ook een heleboel nieuwe en interessante ideeën die ook zullen germane te worden mobiele toepassingen en voor technologie, meer in het algemeen, waarmee je jongens zijn allemaal bekend tegenwoordig op laptops en telefoons en dergelijke. Dus je zult niet te implementeren een webpagina of een website per se, maar een effectief webserver. Je zult de rest van een webserver te schrijven geschreven in C, waarvan het doel in het leven is om HTTP-verzoeken, die te ontvangen virtuele enveloppen we blijven praten over, en eigenlijk te reageren, hetzij met sommige statische content-- als een dot HTML bestand of een punt JPEG of een ander aantal bestanden, of zelfs een PHP bestand waarmee uw web- server gaat dat PHP interpreteren code en spugen de resultaten. Nu, hebben wij u voorzien nogal wat raamwerk want inderdaad de het-- verdeelsleutel voor het probleem set van zes is meer dan 1000 regels lang, een Veel van die reacties, fair-- worden maar dit is echt bedoeld om een ​​kans te zijn om je handen vuil duiken in een vrij groot project dat we heel specifiek uitgehouwen stukken voor u, zodat echt wanneer je CS50 verlaten en voer de echte wereld van de programmering en willen ploeteren in een aantal projecten, je zult veel meer hebben Comfort downloaden van een bron code, een aantal open source projecteren op het web, en duiken in en het maken van veranderingen die je past. Probleem stelde zeven gaat worden over het maken van uw eigen web-based applicatie dat neemt dynamische input en produceert dynamische output in de vorm van een etrade.com-achtige website. En probleemoplossend ingesteld acht zal nog richten op andere taal bekend als JavaScript. Intussen is de uiteindelijke project is aan de horizon. De zogenaamde pre-voorstel is het gevolg van een week vanaf nu. Pre-proposal-- per de specificatie, die op CS50's website-- is een vrij informele gelegenheid voor u een vrij beknopte e-mail om uw onderwijs collega alleen maar om hem te hoogte te stellen of haar van wat je denkt, om Gebruik hem of haar als klankbord. En hebben een gezond verstand check-- of u denkt over te bijten off veel of misschien te weinig, of misschien heb je geen idee wat en wenst deel te nemen aan een gesprek. Daarna is een voorstel en statusrapport, de zogenaamde CS50 hackathon hier Cambridge voor Harvard en Yale studenten alike. Het uiteindelijke project implementatie is dan het gevolg. En dan een CS50 eerlijke hier, in Cambridge, alsmede een in New Haven. Zodat het voorstel, een kijkje nemen op de website voor deze gegevens. Maar meer opwindend, ook, is een mogelijkheid om uw handen vuil te krijgen, en je geest open voor een hele stelletje onderwerpen en gereedschap en technieken die bijkomende aan de cursus kern syllabus, maar desalniettemin verwant. En ook prachtige stapstenen aan doet echt cool laatste projecten die gaan veel verder dan materiaal dat we hebben behandeld formeel probleem stelt of in collegezaal. Dus ga naar de website van CS50's voor de hele rooster van seminars. Als u nog niet te registreren, is dat prima. Ga je gang en meld je nog steeds en we zullen follow-up met een live streaming link de dag en de tijd is op de website. En alles zal zijn opgenomen en online gezet als je niet kunt maken van de bepaalde dagen en tijden. Met betrekking tot wat ons te wachten thereafter-- goed, Natuurlijk is er de CS50 Hackathon. Deze foto, recall, vanaf week nul genomen rond 04:00 op een avond in de afgelopen jaren. De CS50 beurs, die weer vindt plaats in beide steden. En dan, alleen maar om de planten zaad, hoewel we nog steeds hebben een maand plus links van semester, indien u wilt eigen onderwijs CS50's mee personeel, en u wilt beginnen denken over hoe u een CA, of onderwijs collega, weet dat We beginnen te praten over dat Later dit semester. Maar hier afgebeeld wordt het grootste deel van het team van dit jaar. En dus, PHP-- en ik was zo verdrietig vorige week dat [? Allyse?] Vriendelijk naar de inspanning krijgen ons deze prachtige rekwisieten dat ik niet uiteindelijk met behulp van, dus het eigenlijk alleen maar leek soort stomme dat we een schop zitten hier allemaal dag afgelopen woensdag, en een kleine lepel. Maar dit was mijn metaforische manier om te proberen om te schilderen het beeld van waarom we de overgang van C naar een taal als PHP. En hetzelfde kan gezegd worden van elke aantal languages-- Java, Python, Ruby of trossen van others-- maar terwijl in C, bijvoorbeeld, het schrijven van een programma in C kan doorgaans worden als het nemen van een lepel als deze en het graven van een gat in de grond, in het zand of stof. PHP kun je veel te nemen grotere happen uit het probleem, schrijven veel minder code met een veel kleiner tool, want er is zo veel meer functionaliteit geknutseld in. Nu, als we waren echt dramatisch, we iets om schop zou moeten hier, maar het zij zo. Intussen is de andere metafoor we kwamen met is natuurlijk, je kon gebruik iets als een moersleutel hamer in iets als een spijker. Maar natuurlijk de juiste tool om te gebruiken gaat niet zozeer het zijn taal genaamd C-- en nu heb ik alleen maar geïrriteerd [? Sanders,?] Waarschijnlijk zullen we lossen dat later-- zo het juiste gereedschap te gebruiken vaak is niet van plan te zijn Dit laagste niveau tool. En inderdaad, C is niet een taal die de meesten van jullie ooit gaat gebruiken, of moet per se opnieuw gebruiken. En inderdaad, een beetje secret-- de enige keer Ik gebruik C zelf is vrij veel tussen September en december van elke herfst semester. En dat is omdat we Gebruik het als een kans de fundamenten leren van de programmering, en daarmee computer wetenschap fundamentals, data structuren, algoritmen en like-- maar al snel zul je zie nu dat de syntax en de ideeën die ten grondslag liggen C zijn zo heerlijk overdraagbaar modernere hoger niveau talen, zoals PHP en Python en Perl en Java en Objective-C-- eigenlijk niet zozeer Objectieve C-- maar Swift, deze nieuwere talen die velen van jullie zullen dan knoeien met je afstudeerproject. Dus zonder verder oponthoud, laten we eigenlijk PHP gebruiken om een ​​aantal problemen op te lossen. Bedenk dat vroeg op, de laatste week, we gebruikten gewoon CS50 IDE, We schreven een dinky klein programma dat net zei, "Hallo wereld". En vervolgens opgeslagen ik het in een bestand genaamd hello.php. En toen kwam ik deze opdracht. En waarom? In het Engels, wat is hier aan de hand? Wat deed ik toen Ik liep deze opdracht? Ja? Publiek: Er is een aantal functies PHP die leest wat in-- begrijpt dat. DAVID MALAN: Goed, er is een functie PHP-- en laat me meer specifiek, Er is een programma genaamd PHP, alias Een tolk, die begrijpt de inhoud van hello.php, en interpreteert boven naar beneden, van links naar rechts, en doet wat die opdrachten zeggen. De commando's in hello.php natuurlijk is gewoon bron code-- functies en variabelen en loops en dergelijke, dat we onszelf zijn begonnen met het schrijven in PHP. Maar in tegenstelling tot C, die een gecompileerde taal, PHP je gewoon schrijven, en voer het uit. Je overslaan dat tussenpersoon stap van converteren naar nullen en enen, en dan het runnen van het. En dus wat is een omgekeerde van deze? Waarom zijn we het overslaan van de stap? Waarom hebben meer moderne talen hebben de neiging om deze stap overslaan? Wat is het voordeel? Of gewoon intuïtief? Zelfs als we hebben niet geschreven veel PHP vóór, wat is gunstig over het niet samenstellen van uw code denk je? Nee? Niet begaan? Krassen op je hoofd? Ja. Publiek: Meer dynamiek. DAVID MALAN: meer dynamiek? Wat bedoel je? PUBLIEK: [onverstaanbaar] DAVID MALAN: Oké, goed, dus afhankelijk van de input, je hoeft niet elke keer te compileren. En het is echt zo simpel als wat dat-- is het punt van voortdurende om uw code te compileren? Dit is slechts een stap die is making-- dit is vereist, voor de afgelopen weken, twee keer zoveel stappen als gewoon het runnen van uw programma. Het is nuttig in te zien dat u zie een aantal foutmeldingen, enzovoort, maar het is nog steeds gewoon een vervelende stap. En zo programmeurs gerealiseerd na verloop van tijd, waarom doen we niet beginnen met het schrijven talen die dat niet doen moet dat vrij mechanische stap, zodat kan gewoon schrijven de code en voer het uit. Maar wat was de prijs die we zagen we betaald vorige week, met een bijzonder voorbeeld? Ja? Snelheid. Dus [? wat is er?] tolken een beetje langzamer, doordat nullen en enen zijn mooi en snel voor een computer begrijpen, omdat de Intel CPU, of wat het ook is, alleen begrijpt wat er aan de hand op met de bitpatronen. Terwijl een tolk is een programma dat echt moet de ASCII bronleesverzoek code die je hebt geschreven, en omzetten, zo te zeggen, of erachter te komen hoe het omzet uiteindelijk nullen en enen. Dus het duurt slechts een beetje beetje een performance hit. Dus het is een beetje een trade-off. Nu, als we dit doen hier, laat me ga je gang en doe een voorbeeld als volgt. Als ik ga hier, nieuw bestand, ga ik om dit opnieuw te besparen is hello.php. En nu ga ik om verder te gaan en zeggen: "print hello world" - en herinner me dat ik druk kan gebruiken, ik niet moeten afdrukken-F te gebruiken. En nu hier beneden, als ik PHP van hello.php doen, huh-- I lijken niet te hebben geïnterpreteerd. Wat heb ik verkeerd gedaan? Publiek: De schuine armbanden. DAVID MALAN: Ja, moet je dat hoekijzer boven. Dus het is een beetje vervelend, maar je wennen aan het snel. Als ik moet PHP-code te schrijven, I algemeen behoefte om het programma te vertellen, of vertel de tolk, hey PHP, hier komt een aantal PHP-code. En dan voor een goede maatregel, zou ik sluit dit niet mee, maar veeleer met slechts vraagteken hoek beugel, zodat hier nu naar beneden, als ik weer rennen dit, nu Ik krijg het gewenste resultaat. Laten we nu eens doen een lichte optimalisatie, gewoon zo dat je het eerder hebt gezien. Dit is een soort van vervelend dat ik moeten PHP ruimte hello.php lopen, omdat ik in het verleden kon gewoon schrijven dot slash programmanaam, dat is wel leuk. Het is een soort van een betere gebruikerservaring. Dus het blijkt dat je kunt dit doen in PHP met de following-- I kunnen gebruik maken van dit vrij cryptische bezwering aan de top hier, die is over het algemeen wel een keet, waarbij dit is een scherpe symbool, zo te zeggen, dit is een knal of een uitroepteken. En dit is nu het pad naar een programma Op een typische Linux systeem heet milieu of env. En dit line-- lang verhaal short-- lijn een net zegt, hey computer, vindt de PHP tolk voor mij in het milieu, vind het in je geheugen, om zo te zeggen. En wat is er nu leuk is dat als ik ga hier naar beneden, Ik kan dot slash doen hallo dot php, of-- hmm. Geen toestemming. Nou, je zult nog meer van dit zien met een probleem stelde zeven, als je nog niet hebt gedaan, met toestemmingen. Het blijkt dat ik nodig om deze opdracht uit te voeren genaamd [? chamod?] voor verandering mode-- een plus x hello.php. Ik moet [onverstaanbaar] dit een extra stap die vertelt mijn computer, maken hello.php uitvoerbaar. En nu kijk wat happens-- dot slash hello.php, het is gewoon loopt. Ik hoef niet te geven de tolk meer. En ik kan het nog mooier te maken, nog steeds, als ik de naam van dit ding. Als ik hello.php naar net Hello-- zodat het bericht in de linkerbovenhoek, de naam van het programma is inderdaad nu slechts Hallo. Nu kan ik het eruit als een C-programma, ook al is het geschreven in PHP-- of eerlijk gezegd een aantal andere talen. Dus marginale verbetering, geen functionele verschil. Maar het is gewoon een beetje nieuwsgierigheid nu, zodat u programma's te schrijven in elke taal, en de gebruiker niet doet moet weten of schelen wat die zijn. Nou, laten we eens kijken op een meer overtuigend voorbeeld nu dat ik slagroom op voorhand. En dit heet quote.php. En het is online beschikbaar. En merken dat het is vrij short-- maar het is een command line programma dat is gaan opzoeken aandelenkoersen voor mij, wat er werkelijk gaande is germane te zijn om probleem stelde zeven. Dus laten we zien wat ik doe. Op de top Ik heb de geopend beugel vraagteken PHP. Toen ik heb deze lijn, waarbij ik ben die een bestand genaamd functions.php-- we gaan om te zien Meer hierover in een beetje, maar dit is als C's versie van scherpe omvatten, waar je heen wil gaan onder ander bestand. PHP noemt het nodig is, hoewel het heeft ook een include-functie. En het blijkt dat function.php is gewoon iets wat ik schreef voor de les. Ik zet het in dezelfde map, omdat Ik wilde factor enkele code opdat wij zouden willen elders te gebruiken. Ondertussen kunt u waarschijnlijk afleiden wat er hier aan de hand. Dit is een beetje anders, maar C-- wat bedoel ik door zorgen juiste gebruik? Vertaal deze meer technisch. Onder welke omstandigheden ben ik stoppen met het programma, of verlaten? Ja? Publiek: Als u niet beschikt over twee commandoregel argumenten. DAVID MALAN: Als ik niet om argumenten te bevelen. En vergeet niet dat een van die argumenten is de naam van het programma zelf. En de tweede gaat worden een ander woord typ ik na de prompt. Dus net als C, dit is mijn manier om te controleren, heeft de gebruiker samenwerken en start het programma als ik van plan was? Nu, er is iets een beetje anders met C-- allereerst we hebben dit dollarteken, en wat doet een dollar ondertekenen duiden in PHP? Slechts een variabele. Dat is all-- gewoon een variabele gevolgd door wat je wilt eigenlijk noemen. Merken dat er iets ontbreekt in mijn PHP-programma, net als het ontbrak afgelopen week, tegenover C, dat is wat? Een types, maar ook iets anders. Er is geen iets function-- belangrijkste functie. Er is geen hoofdfunctie. Je begint gewoon schrijven uw code zonder zorgen te maken over een tamelijk willekeurige conventie van naamgeving van een aantal standaard functie main. Dus arg C is gewoon echt een globale variabele dat de tolk maakt voor mij beschikbaar. Nu is dit interessant. Dus kijk up spullen. Dollarteken voorraad is op het links, dat is mijn variabele. Aan de rechterkant, Er is blijkbaar een functie in PHP genaamd lookup dat Ik ben het passeren van mijn laatste command line argument to-- wat het woord is. En we zullen zien hoe dit werkt in een moment. En dan tot slot ben ik de rapportage van de prijs. Ik ben het afdrukken van één aandeel van die en die. En vergeet niet, dit is de manier PHP-- een manier PHP-- waar je niet hoeft te doen het dollarteken S meer. U kunt gewoon gebruik maken van accolades en steek de stekker in een aantal variabele. U hoeft geen zorgen te maken over met behulp van printf op dezelfde manier. En als een terzijde, wanneer je een variabele binnenkant van de dubbele aanhalingstekens als deze, u een mooie techniek genaamd variabele interpolatie. Het betekent gewoon de stekker van de variabele hier. En als een terzijde, sommigen van jullie die komen uit andere programmering achtergronden, je mag niet enkele aanhalingstekens gebruiken rond snaren om dit te doen. U moet dubbele aanhalingstekens te gebruiken variabele interpolatie werken. Anders zul je letterlijk zie die accolades. Dus tot slot, laten we verder gaan en lopen dit. Laat me mijn terminal een beetje groter. Laat me gaan en lopen binnenkant van mijn citaat directory. [? CDsource?] [? EEN M ?] [? citaat?] PHP citaat dot PHP, en ik ga op zoek naar iets zoals GOOG, die haar ticker symbool, en een deel van de nieuwe naam, Alfabet Inc, kost $ 717, met ingang van vandaag. Oké, als we willen opnieuw uit te voeren dit, iedereen nog een ticker ze willen opzoeken? Microsoft vind ik deze, MSFT-- $ 53. Ik denk dat Yahoo is misschien dat. En Facebook is dat. Dus wat is dit programma doen? De magie lijkt te worden ingebed in die lookup functie. Dus laten we eens een snelle blik. Het blijkt dat niet komt met PHP, het is in functions.php. En we zullen niet gaan door dit in detail, maar merken het sleutelwoord hier is dat on line zes functions.php-- Ik letterlijk zeggen functie. Ik de naam van mijn functie te geven. Ik geef dan elke argumenten, of parameters, Ik wil die functie geen types take--. En dan heb ik implementeren. En ik zal mijn hand wuiven bij de uitvoering, want het is vrij geavanceerde rechts nu, maar we zullen het opnieuw zien eigenlijk in een week in probleem stelde zeven. Maar ik kan dit ook opruimen. Ik ook opgenomen in de huidige code een versie citaat, waarin geen punt PHP-bestand heeft. Want wat vermoedelijk de bovenkant van het programma met de naam gewoon citeren? Dat de zogenaamde shebang-- de vrij cryptisch bezwering die zegt te vinden PHP en vervolgens draaien op mijn code hier. Oké, dus dat brengt ons naar waar we gebleven laatste tijd-- zij het met sommige meer geavanceerde voorbeelden. Voor vragen tot nu toe over PHP of wat we doen? No-- goed. Ja? Publiek: Inside the HTML-bestanden, doen u-- [? doe je ?] [? noem het?] a [onverstaanbaar] PHP-bestand? DAVID MALAN: Goede vraag. In een web context, die we letterlijk over de overgang naar, u geen gebruik maken van de zogenaamde keet aan de top, omdat het web server-- vaak programma genaamd Apache of Microsoft IIS, Internet Information Server, of een aantal andere web-server software, weet dat als het ziet een punt PHP-bestand, dat het moet de tolk draaien op. Het ziet er niet op dat de eerste lijn. Dus deze eerste lijn truc is net als je bent schrijven command line programs-- die we zullen niet super vaak doen, maar het is onze manier van het overbruggen onze C voorbeelden om nu onze PHP. Dus laten we inderdaad deze wereld te overbruggen vanaf de opdrachtregel wereld op het web door het volgende te doen. Laat me gaan en trekken hier voor slechts een moment. Dus als we een webserver, of liever als we mijn laptop over hier, die ik zal trekken als dit. En hier hebben we de internet in een bepaalde vorm. En dan hier, we hebben een server in een gebouw-- dit is hoe het internet works-- en hier is een server met een paar lampen misschien. Wat is er eigenlijk aan de hand tussen deze twee verbindingen? Dus in dit gebouw is een webserver. Dat is gewoon een computer dat loopt sommige besturingssystemen system-- misschien de gratis software genaamd Apache, die CS50 IDE loopt. Dus je kunt eigenlijk denk aan dit gebouw als het gebouw die CSt0 IDE wordt opgeslagen. Dat is waar jullie allemaal hebben rekeningen waar jullie allemaal uw eigen webserver running, u allen je eigen unieke URL's, zoals we begonnen te bespreken, en je zult zien meer in P. ingesteld zes. Hier is mijn laptop ergens anders op het internet. En dus toen ik een bezoek aan een URL die hoort voor mij, is dat het internetverkeer te gaan over naar de server, de server het ontvangen van een HTTP request-- als een index.html te krijgen en het is het beantwoorden van die webpagina. Dus dat is de algemene paradigma. Overwegende dat alles up Tot nu vandaag, alles werd pas gebeurt in de grenzen van dit gebouw. Ik was met mijn laptop, maar Ik was aangesloten op CS50 IDE, dus al die programma's die ik liep was de binnenkant van die server zelf. Maar nu, laten we beginnen met het hergebruik van PHP sommige werkelijke programma's schrijven dat worden geserveerd door een webserver. En om dit te doen, ik ga om te gaan in een heleboel voorbeelden dat introduceren hier dit idee. Dus dit is een soort van een mooie manier om beschrijft een programmeerparadigma. En in feite, zoals u CS50 verlaten of werken aan afstudeeropdrachten, of neem wat te volgen op klasse, zult u beginnen om te zien dat de wereld-- vooral opgegroeid met talen als C dat zijn super laag level-- beseffen dat er betere manieren van het schrijven van software. Er zijn bepaalde patronen die je kunt volgen, een bepaalde manier van het organiseren van uw bestanden en manieren om het benoemen van uw functies, zodat lang verhaal kort, de wereld is gekomen met een hele hoop van acroniemen en namen voor wegen programmering. Dit zijn slechts technieken die je zou kunnen gebruiken. En een van hen is genoemd MVC, voor Model View Controller. En dit is slechts voor Nu, een overdreven ingewikkeld manier om te zeggen hoe je moet lay-out een PHP-gebaseerde website, in ons geval. Hoe organiseer je bestanden, hoe organiseer je je logica, op een manier die het gemakkelijker maakt schrijf ingewikkelder websites? En inderdaad, zullen we snel krijgen daar met p-set zeven. Dus in de wereld van MVC, je gaat om te zien dat onze code kunnen over het algemeen worden gekarakteriseerd als ofwel modelcode, of controller code, of uitzicht op de code. En ik ga te simpel als follows-- de controller is de hersens van uw programma, Het is waar alle interessant logica gebeurt. Dus alles wat we geweest schrijven tot nu toe in de klas, is een soort controller code-- dat het beheersen van je programma, je loops, uw voorwaarden, uw functies en variabelen en dat alles. Uitzicht, nu, gaan een beetje te zijn meer voor de hand in de wereld van het web. Een visie is de esthetiek van uw website. Het is wat de gebruiker de beelden sees--, HTML tabellen, de HTML-tags, en al dat, alle pluizige esthetische spul dat is niet zo moeilijk om te schrijven, maar is net wat je genereren, is de zogenaamde view, de esthetiek. En model, uiteindelijk gaat database stuff-- zijn welke we duiken in alle beginnen hoe meer deze woensdag. Dus controller logica, uitzicht is de esthetische spul, en het model gaat worden, waar We slaan onze actuele gegevens. Dus laten we eens kijken naar dit concreter met het volgende voorbeeld. Ik ga hier in mijn map gaan bron huidige code-- allemaal is online beschikbaar. En ik ga naar versie nul te gaan. En hier is-- laten we noemen het de versie nul van de website CS50's. Er is niet veel hier helemaal. Het is een zeer eenvoudige webpagina die is waarschijnlijk met behulp van wat HTML tags-- net denk uit het verleden voorbeelden? Wat is dat? H1-- waarschijnlijk voor die grote vette titel, dat logo op de top, CS50. En wat is in het spel? Ja? Publiek: Ongeordende lijst. DAVID MALAN: Ongeordende list-- zodat de UL tag en misschien een paar LI-tags. En als je niet van deze herinneren, het is eerlijk gezegd niet uit. Dit zijn pluizige soort implementatie details van HTML dat je snel opzoeken en je bent weer op weg. We zullen meer richten op de programmering ideeën die de sappiger stukken zijn. Dus laten we gewoon een snelle kijk naar de HTML-- en inderdaad als ik het openstellen van de bron weergave hier, yup, Dat is precies wat er aan de hand hier. Er is een UL tag. Geneste binnenin dat wil LI markeringen. En dan leende ik de URL de eigenlijke programma in. En vervolgens in de lectures.php blijkbaar een dynamisch gegenereerde pagina dat gaat te hebben, laten we see-- ah, de eerste twee weken van de lezing. Dus week nul en één week, laten we kijk naar dit-- als ik bekijken pagina bron, ook super eenvoudig. Deze leiden tot twee bladzijden riep week0.php en week1.php. Dus overweeg nu wat er gebeurt. Wanneer ik op week0.php, mijn laptop is het maken van een verzoek om week0.php. De webserver, alias, CS50 IDE, ontvangt dat virtual envelope. Het zien van een bericht als, krijgen week0.php. Vervolgens wordt de interpretatie van het bestand, top naar beneden, van links naar het bestand right-- riep week0.php-- en uitspugen de resultaten. Dus de binnenkant van dit bestand, week0.php, moet de controller logica genereert deze HTML, en we zullen snel zien dat. Maar voor nu, laat me op week nul, en nu hebben we woensdag en vrijdag, en nu hebben we de slides langzaam van week nul. En je zou kunnen herinneren deze uit de weg terug wanneer. Dus dat is alles wat deze website doet. Dus laten we eens kijken hoe het dit doet. Ik ga om terug te gaan naar de source code hier, in CS50 IDE, en ik ga openstellen index.php. Boven aan dit bestand is een heleboel opmerkingen. En dan in het midden van het bestand, blijkt, is geen PHP-code dan ook. Want als je niet een van de hebben geopend beugel vraagteken PHP-tags, je bent vrij om gewoon HTML. Want wat de PHP tolk verondersteld wordt te doen, is wanneer het dit leest file-- van boven naar beneden, van links naar right-- interpreteert alleen code ziet tussen die punthaken vraagteken. En iets anders dat het niet herkennen als PHP, spuugt gewoon uit. En HTML is een van de dingen het zal gewoon spugen. Dus dit bestand zou kunnen hebben is index.html genoemd, maar ik ben het benoemen van alles dot PHP als een opstapje. Lectures.php-- evenzo underwhelming, het is slechts enkele HTML. Week0.php, net slechts enkele HTML. Maar nu laten we aan de spreekwoordelijke techniek hoed, en onderzoeken hoe we dit kunnen verbeteren. Het is niet moeilijk om dit te doen, maar ik soort van gedeconcentreerde in kopiëren en plakken. En in feite, als ik week twee, u weet wat ik ben waarschijnlijk gaan doen? Ik ga naar week1.php, ik ben ga alles markeren. Ik ga om het te kopiëren, plakken in een nieuw bestand met de naam week2.php, tweak sommige URL's, en op mijn manier. Dus gebaseerd op wat we hebben gezien in C al, Dit voelt niet goed, hopelijk. Kopiëren, plakken zelden de juiste oplossing. Dus wat kunnen we beginnen te doen om dit te verbeteren? Waar liggen de kansen voor een beter ontwerp? Tegen de tijd dat ik aan week acht, het gaat echt vervelend te zijn als ik wil veranderen het lettertype van elk van mijn pagina's, of als ik wil de structuur van de inrichting te veranderen. Dus waar is de kans voor een beter ontwerp? Nou, laten we eens kijken wat er gedeeld door al deze bestanden. Hier is een week, hier is week nul, hier is lectures.php, hier is index.php-- wat hetzelfde is en Wat is het verschil, grofweg, in elk van deze bestanden? Ja? PUBLIEK: [onverstaanbaar] DAVID MALAN: OK, goed. Dus er is een patroon, zeker, waarbij elke keer als ik kies lezing die ik, Ik moet het genereren van een zeer vergelijkbaar uitziende pagina. En dus misschien kan ik hefboomwerking het feit dat echt, we bewust numeriek geïndexeerd onze lectures-- als ik nog meer kan zetten woorden in uw antwoord. En wat is het enige, echt, dat verandert tussen week een-- en laat me scroll naar beneden dus het is ongeveer in dezelfde plaats-- dus hier is week nul, ruwweg bovenaan. Hier is een week, week nul, één week, week nul. OK, letterlijk als je weet geen programma dan ook, dit is nu net als een patroonherkenning spel. Dus wat is er anders? Ja? PUBLIEK: [onverstaanbaar] DAVID MALAN: Goed, dus de titel is aan het veranderen, ooit zo iets. Nul gaat uiteraard één. Hetzelfde gebeurt in de H1-tag. En we niet helemaal zien het zo gemakkelijk, omdat de URL's zijn een beetje lang. Maar die URL's zijn iets te veranderen. Maar wat niet is aan het veranderen, durf ik zeggen, de meeste van de inhoud van de page-- de HTML-tag is hetzelfde, het hoofd is hetzelfde, de titel is bijna hetzelfde, het lichaam is hetzelfde, en bijna alles anders is hetzelfde behalve voor die kleine tweaks. Dus hoe kunnen we gaan over het factoring een aantal van dit uit? Nou laat me voorstellen precies dat in de volgende versie. Dus hier in één versie, heb ik de exacte dezelfde bestanden, plus een paar anderen. Hier index.php-- en zelfs als je nog nooit eerder gezien PHP, wat ben ik waarschijnlijk doen om dit op te lossen probleem-- op basis van wat u hier ziet? Ja, is dat een lichte inzet? Nee? Ja, ga op. PUBLIEK: [onverstaanbaar] DAVID MALAN: Yep. PUBLIEK: [onverstaanbaar] DAVID MALAN: ik heb je nodig om te spreken alleen een beetje luider. PUBLIEK: [onverstaanbaar] DAVID MALAN: OK, goed. En ik think-- het was moeilijk te krijge maar ik hoor denk dat wat je krijgt bij is dat de tags die gemeenschappelijke up top waren, en labels die gemeenschappelijk waren aan de onderkant, zijn nu meegenomen uit, of gedegradeerd tot welke bestanden? Header.php en footer.php-- en we gaan enkele tweaks leveren aan het adres van de zorg die u zojuist geuit over de nummers veranderen, voor Bijvoorbeeld, als ik het goed hoorde je. Maar dat lijkt de kern van het zijn. Als er een enorme hoeveelheid redundantie aan de bovenkant van de pagina, en een enorme hoeveelheid redundantie onderaan, laten we letterlijk hoogtepunt en snijd die inhoud uit, zet het in een aparte file-- net als het idee van CSS, waar we meegenomen uit vergelijkbaar esthetica, zet in een apart punt PHP-bestand, gebruik maken van de mechanism-- vereisen die is als C scherpe include-- die is in wezen hetzelfde als zeggen gaan pak de inhoud van header.php, en kopieer en plak ze hier. Maar wat dit betekent is dat nu in index.php, ik heb die twee lijnen. In lectures.php ik ook hebben deze twee lijnen. In week0.php ik ook hebben deze twee lijnen. Dus nu, als ik wil veranderen de titel van al mijn pagina's, of ik wil het veranderen fundamentele structuur, Ik kan het nu veranderen in slechts één plaats, of twee places-- kop- en voettekst, respectievelijk. Nu start de code te kijken een beetje cryptisch, toch? Maar als u denkt over wat de pagina wordt doing-- als ik het aanvragen week0.php, net zoals op de tekening boven hier-- wanneer week0.php wordt gevraagd, wat betekent dat? Letterlijk, dit bestand verzoekt de browser. Het web server-- a.k.a. CS50 ID-- pakt dit bestand, week0.php, en leest is van boven naar beneden, van links naar rechts. Op lijn één, het onmiddellijk ontmoetingen geopend beugel vraagteken PHP, vereisen header dot PHP, en zo wat de PHP-tolk does-- die is ingebouwd in het web server, omdat we voorgeconfigureerd het voor u-- automatisch gaat in header.php, kopieert de inhoud, plakt ze hier. Maar toen de tolk ontmoetingen vraagteken haakje sluiten, dus het is allemaal gedaan denken. Nu is het gewoon blindelings spuugt out lijnen twee door zeven, want het is gewoon rauwe HTML. Krijgt naar lijn acht, en doet dat Dezelfde magie again-- openen van het bestand, grijpen de inhoud, en die hen of ze plakken recht toen en daar. Maar ik gezinspeeld op een bug. Dit is een gedeeltelijke stap achteruit, want als we kijken in header.php, Ik heb soort snijden een hoek. Welke functie heb ik opgeven in orde om dit verdedigbaar beter ontwerp te krijgen? Ja? PUBLIEK: [onverstaanbaar] DAVID MALAN: Ja, ik soort van sneed een triviale hoek. U wees erop dat wat aan het veranderen was was de titel, het nummer in de titel, en het aantal in de H1. Dus mijn oplossing was, OK, laten we gewoon de naam van de pagina, en niet behandelen die enkel probleem. Dus dat is een gedeeltelijke stap achteruit voor zeker. Maar wat opmerkelijk is hier is dat wat ik heb gedaan anderszins ingecalculeerd alles uit de gewone dingen. En in footer.php, merk ik ingecalculeerd uit dat alles, zij het in mindere, gemeen spul. Dus ik moet een of andere manier nu in staat zijn om neem een ​​andere stap voorwaarts, en bevestig die titel kwesties. Dus laten we dat doen. Laat me gaan in mijn tweede versie Hier, waarbij wederom dezelfde bestanden behalve één nieuwe toevoeging. En het is een beetje meer breedsprakig, maar laten we eens kijken of we kan plagen elkaar wat er hier aan de hand. Dus in plaats van dat header.php en footer.php, Ik meen mij te slechts vereisen een file-- genoemd, natuurlijk, helpers.php. En laat me nu bepalen, wat is de binnenkant van helpers.php is gewoon een stel functies die ik schreef, net als vroeger. Maar ik noemde het helpers.php. Nu schijnbaar, in lijn drie en 10, ik ben roepen twee functions-- maken header, maken voettekst. Die komen niet met PHP, schreef ik die mezelf. En ik zet ze in helpers.php. Nu hebben we alleen gezien deze syntaxis een keer, en het was super kort. Maar dit is blijkbaar een argument header, de functie te maken. Waarom weet ik dat? Nou hier is een goede paren, hier is een open paren. En natuurlijk, net als in C, alles tussen de haakjes een input-- of argument voor de functie. Wat is het datatype van dit argument, gebaseerd op wat ik heb gewezen? Wat doen die vierkante haakjes geven, op basis van vorige week? Ja, het is een array-- specifiek een associatieve array. En deze syntaxis weliswaar is een beetje funky, maar dit is gewoon voorbij in een belangrijke waarde paar. De sleutel is, citaat unquote titel, en de waarde is CS50. Als we hadden gedaan in C, het zou kunnen in plaats daarvan kijk meer als dit, gewoon citaat unquote CS50-- of zelfs zou worden gekruld bretels, of iets dergelijks in C, waarbij de sleutel nul, en de waarde is CS50. Maar nogmaals, PHP, hoewel de syntax is, nogmaals, een beetje raar, het laat je in passeren woorden in plaats van nummers om sleutels te associëren met waarden. Dus wat betekent dit allemaal? Als ik in helpers.php, laten we eens kijken naar deze functie. renderHeader.php plaats renderHeader is mijn functie, en ik weet dat omdat ik zie de functie sleutelwoord. Dit is nieuw van C-- het blijkbaar neemt een argument genoemd data-- maar ik zou dit hebben genoemd wat dan ook, maar ik noemde het data, alleen maar om een ​​beetje schoon-- en gewoon een gok, vooral als je hebt geprogrammeerd in een andere hogere programmeertaal voor, iets boven C, conceptueel. Wat doet gelijke geopend beugel square bracket waarschijnlijk betekenen? Of wat zou dat betekenen? We hebben dit niet gezien in C. Yeah? Een lege array. Concreet betekent dit dat als De gebruiker hoeft niet te bellen renderHeader met een argument, ben ik nog steeds een argument genaamd gegevens, maar de standaard waarde is naar een lege array. Dus het is gewoon een leuke gemak. Ik hoef niet te schreeuwen bij de gebruiker, of zeggen dat je gebruikte mijn functie verkeerd. Ik kan gewoon een standaard geven de gebruiker waarde, als ik niet bijzonder schelen. Nu deze functie, ik ben ga mijn handen zwaaien. Maar dit extract functie kunt ons om deze variabelen in de gegevens doorgeven in header.php op de volgende manier. En dit is het laatste stuk, Ik denk, van funky syntaxis. Hier is mijn nieuwe versie van header.php-- is placht te zeggen, letterlijk open beugel titel CS50, en dat was het. En hetzelfde voor de H1. Nu het blijkbaar zegt iets behoorlijk funky. En laat me dit te vereenvoudigen even als volgt. Dit is wat ik heb veranderde mijn titel te zijn. Echter, het wordt een beetje lelijk om constant open haakjes met PHP, en gebruik vervolgens de printfunctie. Het blijkt dat PHP heeft een verkorte notatie voor dit, dat is gewoon een gelijk teken, dat is technisch gezien een functie genaamd echo in plaats van print, maar het is hetzelfde, effectief. Dat ziet er gewoon beter. Het is gewoon een syntactische suiker, als je wil, dat maakt mijn code ziet er een beetje beter. Maar het blijkt, en we zullen dit opnieuw zien het duurde niet lang, we hebben om dit te bellen hinderlijk lang functie genaamd HTML speciale tekens in PHP, want het blijkt zijn er bepaalde inputs dat de gebruiker kan geven ons, of gebruikers ons kunnen geven, die gaan naar onze site te breken. Maar we zullen zien dat de volgende week met JavaScript. Maar voor nu, weet alleen dat Dit bestand, headers.php, gewoon neemt de titel die Ik ging in het maken zeker dat het veilig is om te worden geïnjecteerd in een web pagina, en het spuugt het uit als mijn titel en zoals mijn H1. Dus als ik in deze versie nu, merken dat lezingen heeft zijn titel terug, week nul heeft zijn titel terug, en inderdaad, de HTML ik genereren identiek aan wat mijn eerste versie was-- behalve mijn witruimte, want ik ben begonnen opmaak mijn code een beetje anders. Maar ik heb alle gegenereerde de code die ik zorg over. Dus laat me pauzeren gewoon een moment en zien als er vragen of verwarring die ik heb gemaakt. Oké, dus laten draaien een beetje harder hier om te zien of er een mogelijkheden voor verbetering. Helpers.php dit had ook functie, genaamd renderFooter. En wat is opmerkelijk over renderHeader en renderFooter? En nogmaals, voor de doeleinden van vandaag, weet dat het extract functie is gewoon mijn manier van passerende argumenten in header.php en footer.php. Sorry? PUBLIEK: [onverstaanbaar] DAVID MALAN: Ja, maar ik veranderde de nodig lijn. Dus letterlijk, heb ik de zonde begaan kopiëren en plakken, nog maar eens. Het is niet een enorm aantal lijnen, maar kom on-- als ik het kopiëren en plakken alles alleen maar om een ​​woordje te veranderen, en het ene woordje dat Alan wijst out is voettekst hier, versus header hier. Anders, alles is identiek, met uitzondering van, Uiteraard namen de functie. Dus wat kan er beter? Nou laat me open te stellen deze versie hier, waarbij in helpers.php, waarom heb ik niet alleen een beetje slimmer over dit? Schrijf iets ingewikkelder code, maar noemen het maken? Dus wat heb ik fundamenteel veranderd? Het duurt een argument now-- twee argumenten, gegevens nog steeds. En wat is dan de eerste Naam mogelijk gebruikt voor, op basis van wat je hier lezen? Zelfs als sommige van de syntax is nog nieuw. Wat is dollarteken template? Sorry? PUBLIEK: kop- of voettekst. DAVID MALAN: kop- of voettekst. Dus blijkbaar, heb ik besloten dat als het enige dat verandert is wat template ik wil om print-- en door het sjabloon Ik bedoel, dit is een blauwdruk voor code die ik wil output, maar ik wil plug in sommige values-- dus als het alleen header of voettekst, waarom niet ik parametriseren dat en bel het argument dollarteken template? En dan is dit funky syntaxis stelt me een pad creëren hier een variabele. Dus dollarteken pad is een variabele. Wat doet deze syntaxis te doen, als je bekend bent? Ja? PUBLIEK: [onverstaanbaar] DAVID MALAN: Precies. Als sjabloon, citaat unquote, header, of als sjabloon, citaat unquote, voettekst, die lijn er die ik heb gemarkeerd, lijn acht, is gewoon het nemen van die naam, zoals header, en aaneenschakelen met stip PHP. Zodat we niet deze operator in C. Deze dot operator een geweldig ding PHP-- als je vertrouwd zijn met JavaScript of Java, kunt u de plus gebruiken ondertekenen aaneenschakeling doen. In C, het is een pijn in de neck-- en het spijt me zo, in de p-set van zes, je gaat moeten doen dit-- het is een pijn in de nek strings samenvoegen. Waarom? Nou, want als je hebt een koord dat deze lange, en andere string dat is deze lange, je kunt niet zomaar de stekker ze samen. Wat heb je in plaats daarvan moet doen in C? Ja? PUBLIEK: [onverstaanbaar] DAVID MALAN: Je moet malloc geheugen of gebruikt een matrix op de stapel. En je eigenlijk moet maken die array groot genoeg deze passen plus dit, plus de backslash nul. Aaneenschakelen ze dan samen met roer kat of handmatig met een lus, of een aantal technieken. En laten we u een paar in-p zes. Het is een pijn in de nek. En dit is echt wat ik bedoel dit versus dit-- zoals C versus PHP. Je krijgt net zoveel meer functionaliteit gratis, zodat u zich kunt concentreren, idealiter op het plezier deel van codering, de project dat u wilt oplossen, in plaats van het lage niveau kleinigheden. Dus dit gewoon genereert header.php of footer.php op basis waarvan één ik noem. En inderdaad, als ik ga in index.php, bericht alles wat changed-- plaats van bellen maken kop- of voettekst maken, Ik bel te maken, gevolgd door de Naam van de sjabloon die ik wil doen. En je zult dit zien, ook, in probleem stelde zeven, waarbij wij u toestaan ​​om het te gebruiken dezelfde functie aan trossen te maken en trossen van verschillende webpagina's. Dus in plaats van wonen te veel meer op die details-- die je weer zal zien in probleem set seven-- laten we eens kijken nu aan het begin van een oplossing voor een interessant probleem. Tot nu toe, we hebben niets gedaan heeft opgeslagen gegevens. In feite is de enige keer dat we ooit hebben gered iets wat we hebben gedaan in deze klasse is toen we een zeer eenvoudige demo een tijdje rug, waarbij we gebruik bestand IO in C, en ik denk dat ik typte in mijn naam, en Hannah's naam, en de naam van Maria's, of misschien de naam Andy's en vervolgens opgeslagen we een CSV file-- komma's gescheiden waarden bestand. En we gebruikten fopen-- denk ik gebruikten we fprintf als ik me goed herinner, en we opgeslagen in een bestand. Nu, dat is de eenvoudigste vorm van een database. Als u wilt een website voor het maken Frosh IMS-programma, waarbij eerstejaars kan ideaal registreren voor een sport, je willen iets met die gegevens doen. Vorige week hebben we niets met de data-- we net zei, u geregistreerd bent, niet echt. Of misschien mailde ik het Proctor, en dat was het. Maar het zou mooi zijn als ik kon geven dat Proctor een CSV-bestand, als een Excel-bestand. Of beter nog, het zou mooi zijn als ik kon zet de namen die de gebruikers en dorm namen en dat alles in een database die gewoon leeft voor altijd, totdat ik ervoor kiezen om de gegevens te verwijderen. Een database waarmee mij om informatie vragen. En inderdaad, dat is wat een database is. We introduceren vandaag, en volgende week, ook, een technologie riep SQL-- een Structured Query Taal, dat is een andere taal. Het is in wezen een programmering taal, maar voor databases. En een database voor nu, net denken als een super luxe versie Microsoft Excel of Google Spreadsheets, of Apple Numbers. Het is over het algemeen een programma waarmee je een hele hoop gegevens op te slaan in rijen en kolommen, heel zoals je misschien in Excel. Maar wat is leuk, vooral als we zijn niet super bekend met Excel, wat SQL kunt u doen is deze vraag informatie door het schrijven van regels code waar u kunt, zelfs als uw database een miljoen rijen daarin, je kunt vinden wat super snel. In feite, Excel bijzonder slecht in grote datasets. En in feite tot enkele jaar geleden, bleek Excel zou alleen kunt u op te slaan tot 65.535 rijen van data-- die klinkt als veel, maar op de keer was ik een grad student, en ik herinner me struikelen over dit omdat ik het genereren CSV-bestanden voor mijn onderzoek en ik wilde hen snel te analyseren door gewoon te openen in Excel. Natuurlijk, mijn computer gewoon crashte, want ik had meer dan 65.000 rijen. Maar waar de 65.535 vandaan? Wat is Microsoft bezig, vermoedelijk? Als je goed met je krachten van twee bent? Ja, zij werden met behulp van een 16-bits waarde voor het rijnummer vertegenwoordigen. En twee tot 16 is 65,536-- min één, want als je nul index betekent dat was het meeste aantal rijen ik kon hebben. En het was gewoon een ontwerp beslissing. Door het opslaan van 16 bits, ze me beperkt tot 16.000 rijen, in plaats van 4 miljard, die ik idealiter zou hebben gehad. Maar voor nu, we gaan introduceren dit meer in een web context. En wat is er leuk aan SQL is dat zelfs maar het is vrij krachtig en mooi verfijnd, het is echt kookt neer op vier belangrijke activiteiten, vier belangrijke functies, als je will-- selecteert, voor het ophalen van data, zoeken voor data; wissen of verwijderen van gegevens; plaatst voor het toevoegen van rijen aan de database; en bijwerken. Dus als je ooit hebt gebruikt Google Spreadsheets, Apple Numbers, Microsoft Excel, heb je uitgevoerd, waarschijnlijk alle van deze activiteiten als mens door alleen met behulp van uw toetsenbord en mouse-- invoegen van gegevens, het gebruik van uw ogen om te selecteren of zoeken naar gegevens, of updaten van gegevens, of te verwijderen gegevens. Dus wat betekent dit? Nou, vooraf geïnstalleerd in CS50 IDE is een programma genaamd MySQL. Het is een gratis, open-source database die is super populair. Facebook bijvoorbeeld, gebruikt het deze dag, onder andere tools die ze gebruiken. En een groot aantal zeer populaire websites gebruiken in een groot deel omdat het is snel, en omdat het is gratis. Maar zeker alternatieven bestaan. En sommigen van jullie misschien ploeteren met alternatieven voor de laatste projecten. Dit is een screenshot, ondertussen, van een web-based tool genaamd phpMyAdmin. Het is een toeval dat Deze web-based tool is ook geschreven in een taal, PHP, maar wat het is bedoeld om te doen is ons een web-based interface naar een database. Omdat MySQL typisch iets, historisch gezien, u zou interageren met slechts met een command line. En het zou super zijn vervelend en geheimzinnige te hebben tekstuele commando's typen om te selecteren data, plaatst data en gegevens te verwijderen. Dus sommige mensen op het internet schreef een web-based programma dat laat het ons beheren de gegevens in onze database. Het is net als dubbelklikken op Excel en het runnen van een web-based versie daarvan. En wat je gaat om dit te gebruiken voor uiteindelijk volgende week, niet-p zes, maar is om iets op te bouwen riep CS50 Financiën, die gaat om een ​​database van hebben gebruikers, met gebruikersnamen en wachtwoorden, dollar bedragen die zij in hun bankrekeningen. Het gaat zijn iets wat je gebruiken voor het opslaan de symbolen en de hoeveelheden van aandelen die gebruikers hebben gekocht met behulp van virtuele dollars dat je aan hen te geven. En het gaat om gebruikers te laten in te schrijven voor uw site, zodat zelfs je vrienden kunt afstemmen op uw website en eigenlijk te registreren, log in en spelen rond en probeer te merken in uw code, en proberen om bugs in uw website te vinden. En ze zullen gewoon aanmelden door zich voegen, effectief via code je schrijven op uw database. Bijvoorbeeld is dit een snelle screenshot wat een database eruit zou kunnen zien. Dit was van één van solutions-- vorig jaar Dit is als een mini-Excel file, opgeslagen in onze database, opgeslagen in deze software genaamd MySQL. Aan de linkerkant, ik heb blijkbaar krijgt elke gebruiker een uniek nummer. In de tweede kolom, heb ik gezien iedereen een gebruiker name-- mijn eigen onder hen. En aan de rechterkant, Ik heb ze een hash gegeven. Nu is dit eigenlijk een wachtwoord, maar het is niet een gewone tekst wachtwoord. Het is een versleutelde wachtwoord, indien je wil, of een hash wachtwoord. Die we weer terug naar het duurde niet lang te komen. Maar als je ooit hebt gelezen een artikel over hoe je wachtwoord op een bank of een website kan zijn gecompromitteerd, het kan over het algemeen betekenen een van twee dingen. Dus dit is slechts een fragment van de zes gebruikers. Jullie allemaal nu kunt achterhalen uitgevoerd via hacken of kraken wat wachtwoorden onze zes mensen zijn. Maar als je ooit hebt gekregen een waarschuwing of een verontschuldiging van een bedrijf of website gezegde, sorry, een hacker brak in onze database, moet je waarschijnlijk veranderen uw wachtwoord, wat zou dat betekenen? Nou, een, zou kunnen betekenen dat de bedrijf heeft meer debiele geweest, en is het opslaan van uw wachtwoord in een kolom als dit, ongecodeerd. Wat betekent dat de tegenstander, die de database gestolen, letterlijk weet je gebruikersnaam en wachtwoord. Dat is het slechtst mogelijke scenario. En zoals u zult zien in de p-set zeven, zo gemakkelijk te voorkomen. Er is absoluut geen excuus voor dat vorm van domheid in het huidige internet. Two-- en we zullen een aantal artikelen vinden om te getuigen van het feit dat dit nog steeds gebeurt, nonetheless-- twee, misschien de tegenstander stal deze versie van de database. Dat is nog een beetje slecht, want nu ze weten dat ik heb zes klanten, Ik weet dat de gebruikersnamen van die zes klanten en ik weet dat de versleutelde versies of gehakte versies wachtwoorden die zes klanten. Maar iemand van jullie die misschien heb gedaan [? Hacker 2?] waar u gebarsten wachtwoorden of namen Een blik op die versie van het probleem set, waarom is het nog steeds een beetje zorgwekkend Als de tegenstander kent uw hash wachtwoorden? Publiek: Omdat ze konden voer het hele woordenboek in de hash-functie. En als uw wachtwoord is een woordenboek woord, [? ze kunnen gewoon match--?] DAVID MALAN: Precies, de tegenstander kan gewoon schrijven code, zoals sommige van jullie deed voor [? Hacker?] 2, waarbij je itereren over alle woorden in het woordenboek, of alle mogelijke combinaties van A tot en met Z en één door de nine-- die klinkt als veel, en het is. Maar voor een computer, het is pretty darn snel. En in feite, dat was de punt van [? Hacker 2,?] Was om dingen te nemen dat letterlijk ziet er zo uit, en reverse engineering wat het eigenlijk was. Dus we zullen kijken hoe we kunnen bewaar dit efficiënter. Blijkt gelukkig in MySQL, er zullen data types. En een van de leuke delen over database-ontwerp, om eerlijk te zijn, is eigenlijk beslissen voor jezelf hoe moet je de gegevens te vertegenwoordigen? Mocht u een telefoonnummer vertegenwoordigen als een int, zoals een groot aantal, of een lange? Of heb je eigenlijk doen als een reeks tekens? En er kan heel zijn niet-triviale gevolgen hiervan. In feite is een van de vroegste, fun germane verhalen is toen Mark Zuckerberg bouwde Facebook werd oorspronkelijk geschreven in, en nog steeds is grotendeels geschreven in PHP. En een van de grootste uitdagingen ze geconfronteerd vroeg was schaalvergroting. Toen ze bleven toevoegen school na school na school, bij mijn weten, een van de oorspronkelijke oplossingen was in wezen te kopiëren en plakken enkele van de gegevensbestanden en een deel van de code, zodat Harvard was die op zijn eigen server, MIT en liep op zijn eigen server. En dit was de reden voor sommige onder u die zou kunnen herinneren, kon je geen vrienden in andere netwerken. U heeft waarschijnlijk niet vrienden hebben op MIT en Harvard 10 jaar of zo geleden, maar je kon niet netwerken overspannen voor een deel die reden. En een van de grootste uitdagingen voor Mark en voor bedrijven als Facebook is eigenlijk de behandeling van honderden en duizenden en miljoenen aanvragen per seconde. Dus de dingen die we beginnen praten over deze week zijn echt relevant voor te zijn het schrijven van goede software en in de volksmond succesvolle instrumenten die kan omgaan met tal van gebruikers. Dus we praten over dingen zoals het indexeren en zoeken, maar dat is het voor vandaag. Wij zullen u voor meer informatie over woensdag. [MUZIEK - "SEINFELD" THEMA] DAVID MALAN: U kunt het, en het te verkleinen. En je hoeft niet aan de stok met aantal vooraf bepaalde hoeveelheid geheugen. Nou, wat dat gaat worden genoemd? SPEAKER 1: Nou, wat is er aan de hand? Luidspreker 2: Wat bedoel je? Hij geeft een lezing. DAVID MALAN: En we kunnen gebruiken functie genaamd malloc om memory-- SPEAKER 1: Waarom zijn niet zijn armen bewegen? Luidspreker 2: Nou that's-- je weet wel, dat is normaal. Het is net alsof hij net grote worsten opknoping daar. SPEAKER 1: Dat is normaal? Luidspreker 2: Ja, ik denk dat we gewoon aannemen hij per ongeluk verving zijn deodorant met superlijm.