[RIPRODUZIONE DI BRANI MUSICALI] DAVID MALAN: Questo è CS50, e questo è l'inizio di otto settimane. E siamo così entusiasti di accogliere indietro, grande sorpresa, proprio Ramon del CS50 Galvan, un anziano in aumento che è stato trascorso gli ultimi mesi da luglio a Los Angeles, a Hollywood, letteralmente lavorando su un televisore nuovo di zecca show chiamato Colony, il creatore dei quali è in realtà un allume Harvard stesso. E quindi siamo molto entusiasti di vedere questo debutto sulla rete USA questo mese di gennaio. Quindi rimanete sintonizzati per questo, e per più Ramon per le settimane a venire. Ora so che la fine è vicina. E questo significa che non c'è tutto che molto resta di CS50, triste a dirsi. Abbiamo solo tre problema set sinistra- c'è problema impostato six-- che è in le mani ora o lo saranno presto, dovuto entro la fine week-- è destinata a colmare nostri mondi della riga di comando, dove abbiamo passato la maggior parte del nostro tempo utilizzando C, e il mondo della programmazione web. Beh, vedrete un sacco di idee preso in prestito dal lavoro linea di comando, ma anche un sacco di nuova e idee interessanti che sono anche andando a essere germano per applicazioni mobili e per la tecnologia, più in generale, con il quale si ragazzi sono tutti conosciamo al giorno d'oggi su computer portatili e telefoni e simili. Così sarete implementare non una pagina web, o un sito web di per sé, ma un vero e proprio web server. Potrai scrivere il resto di un server web scritto in C, il cui scopo nella vita è quello di ricevere le richieste HTTP, quelle buste virtuali Continuiamo a parlare su, e in realtà rispondere o con alcuni content-- statiche come un puntino HTML file o un punto JPEG o qualsiasi altro numero di file, o anche un file PHP per cui il vostro web server sta per interpretare che PHP codice e sputare fuori i risultati. Ora, vi abbiamo fornito un po 'di quadro per it-- infatti la codice di distribuzione per il problema set sei è lunga oltre 1.000 linee, un molti dei quali è commenti, per essere fair-- ma questo è veramente destinata essere un'opportunità per mettere le mani sporche di immersione in una piuttosto grande progetto che abbiamo molto particolare scavate pezzi di per voi, in modo che in realtà quando si esce e CS50 entrare nel mondo reale di programmazione e vogliono dilettarsi in qualsiasi numero di progetti, avrete molto più grande la comodità di scaricare qualche fonte codice, alcuni open source proiettare sul web, e le immersioni e fare le modifiche che si vede in forma. Problema impostare sette sta per essere su rendere la propria applicazione web-based che prende input dinamico e produce output dinamico in forma di un sito web etrade.com-like. E problema set eight si concentrerà su ancora un'altra lingua conosciuta come JavaScript. Nel frattempo, la finale progetto è all'orizzonte. La cosiddetta pre-proposta è dovuta una settimana a partire da oggi. Pre-proposal-- secondo la specifica, che si trova sulla website-- di CS50 è un'opportunità piuttosto informale per di inviare una e-mail piuttosto succinto sul tuo insegnamento compagno solo per avvertire lui o lei di cosa stai pensando, a lui o lei usare come cassa di risonanza. E hanno un buon senso check-- se stai pensando circa mordere troppo tanto o forse troppo poco, o forse non avete idea di sorta e vogliono impegnarsi in una conversazione. Successivamente è una proposta e rapporto di stato, il cosiddetto CS50 Hackathon qui a Cambridge per Harvard e Yale studenti allo stesso modo. La finale del progetto implementazione è poi dovuto. E poi una fiera CS50 qui, a Cambridge, così come un altro a New Haven. Quindi la proposta, dare un'occhiata a il sito web per tali indicazioni. Ma più eccitante, anche, è un opportunità di mettere le mani sporche, e le vostre menti aperte a tutta una mucchio di argomenti e gli strumenti e tecniche che sono accessorie al core programma del corso, ma comunque correlate. E anche pietre miliari meraviglioso per facendo progetti finali davvero cool che vanno ben oltre il materiale abbiamo coperto formalmente nel problema imposta o in conferenza. Quindi, andare al sito web del CS50 per l'intero roster di seminari. Se non si è registrato ancora, va bene. Vai avanti e firmare ancora e lo faremo follow-up con un collegamento in diretta streaming, il giorno e l'ora è sul sito web. E tutto sarà registrato e messo on-line se non è possibile effettuare il particolari giorni e orari. Per quanto riguarda quello che ci aspetta thereafter-- bene, naturalmente, c'è il Hackathon CS50. Questa foto, richiamo, di settimana a zero presi intorno a 4:00 una sera negli anni passati. La fiera CS50, che ancora una volta si terrà in entrambe le città. E poi, giusto per piantare il seme, anche se abbiamo ancora un mese più a sinistra di semestre, se si desidera partecipare proprio l'insegnamento di CS50 personale, e si desidera iniziare pensando di diventare una CA, o insegnamento compagno, sapere che inizieremo a parlare di più che entro la fine semestre. Ma nella foto qui è la maggior parte della squadra di quest'anno. E così, PHP-- ed ero così triste la settimana scorsa che [? Allyse?] Gentilmente è andato allo sforzo di ottenere noi questi meravigliosi oggetti di scena che io non finire di utilizzare, in modo da in realtà solo guardato un po 'stupido che abbiamo avuto una pala seduto qui tutto giorno Mercoledì scorso, e un cucchiaino. Ma questa era la mia metaforica modo di cercare di dipingere l'immagine del perché stiamo transizione da C a un linguaggio come PHP. E lo stesso si potrebbe dire di qualsiasi numero di languages-- Java, Python, Ruby o mazzi di others-- ma mentre in C, per esempio, scrivere un programma in C potrebbe essere tipicamente come prendere un cucchiaio come questo e scavando un buco nel terra, nella sabbia o sporcizia. PHP permette di prendere molto morsi più grandi fuori del problema, scrivere molto meno codice utilizzando uno strumento molto minore, perché c'è molto di più funzionalità ricostruito in. Ora, se fossimo davvero drammatico, avremmo qualcosa da spalare qui, ma così sia. Nel frattempo, l'altra metafora ci siamo inventati è, naturalmente, si potrebbe usare qualcosa come una chiave inglese a martellare in qualcosa di simile a un chiodo. Ma naturalmente, il diritto strumento per uso sta andando di essere non tanto la linguaggio chiamato C-- e ora ho solo infastidito [? Sanders,?] Probabilmente, ripareremo che later-- così lo strumento giusto da utilizzare spesso non sta per essere questo strumento più basso livello. E infatti, C non è un linguaggio che la maggior parte di voi sono mai intenzione di usare, o dovrebbe necessariamente usare di nuovo. Ed infatti, un po ' secret-- l'unica volta Io uso C mi è più o meno tra Settembre e dicembre di ogni caduta semestre. E questo perché noi usarlo come un'opportunità per insegnare i fondamentali di programmazione, e con essa calcolatore fondamenti scientifici, i dati strutture, algoritmi e la like-- ma sarà molto rapidamente vedere ora che la sintassi e le idee alla base C sono così meravigliosamente trasferibili a più moderno linguaggi di livello superiore, come PHP e Python e Perl e Java e Objective-C-- in realtà, non tanto Objective-C-- ma Swift, questi recenti lingue che molti di voi poi dilettarsi con voi progetto finale. Quindi, senza ulteriori indugi, andiamo in realtà utilizzare PHP per risolvere alcuni problemi. Ricordiamo che nella fase iniziale, l'ultima settimana, abbiamo usato solo CS50 IDE, abbiamo scritto un piccolo programma dinky che appena detto, "Ciao mondo". E poi ho salvato in un file chiamato hello.php. E poi ho eseguito questo comando. E perché? In inglese, cosa sta succedendo qui? Che cosa stavo facendo quando Ho eseguito questo comando? Sì? PUBBLICO: C'è qualche funzione PHP che legge ciò che è consapevole che dentro--. DAVID MALAN: Bene, c'è qualche funzione PHP-- e mi permetta di essere più precisi, c'è un programma chiamato PHP, pseudonimo Un interprete, che comprende il contenuto di ciao.php, e interpreta superiore a basso, da sinistra a destra, e fa quello che dicono i comandi. I comandi hello.php, naturalmente, è solo fonte code-- funzioni e variabili e loop e simili, che noi stessi hanno iniziato a scrivere in PHP. Ma a differenza di C, che è un linguaggio compilato, PHP è sufficiente scriverlo, ed eseguirlo. Si salta questo passo intermediario di convertendolo in zero e uno, e poi eseguirlo. E così quello che è un aspetto positivo di questo? Perché stiamo saltando il passo? Perché linguaggi più moderni tendono a saltare questo passaggio? Qual è stato il beneficio? O solo intuitivamente? Anche se non abbiamo scritto molto prima di PHP, ciò che è vantaggioso di non compilazione del codice ne pensi? No? Non commettere? Graffiare la testa? Già. PUBBLICO: più dinamico. DAVID MALAN: più dinamico? Cosa vuoi dire? PUBBLICO: [incomprensibile] DAVID MALAN: OK, bene, così seconda dell'ingresso, non c'è bisogno di compilare ogni volta. Ed è davvero così semplice come quello che-- è il punto di continuare per compilare il codice? Questo è solo un passo che è making-- questo sta richiedendo, Negli ultimi settimane, due volte più numerosi passi come solo in esecuzione il programma. E 'stato utile nel vedere che si vedere alcuni messaggi di errore e così via, ma è ancora solo un passo fastidioso. E così i programmatori realizzati nel corso del tempo, perché non è vero iniziare a scrivere le lingue che non lo fanno bisogno di questo passo abbastanza meccanico, in modo che può solo scrivere il codice ed eseguirlo. Ma quello che era il prezzo che abbiamo visto che abbiamo pagato Settimana scorsa, con un esempio particolare? Sì? Velocità. Così [? che cosa è?] interpreti un po 'più lento, in tale zero e uno sono bello e veloce per un computer capire, perché la CPU Intel, o qualunque cosa sia, solo capisce quello che sta succedendo con tali modelli di bit. Considerando che un interprete è un programma che realmente deve leggere il sorgente Ascii codice che hai scritto, e convertirlo, per così dire, o capire come converte in ultima analisi, a zero e uno. Quindi ci vuole solo un po ' po 'di un calo di prestazioni. Quindi è un po 'di un trade-off. Ora, se facciamo questo qui, mi permetta andare avanti e fare un esempio come segue. Se vado qui, nuovo file, vado per salvare questo nuovo è ciao.php. E ora ho intenzione di andare avanti e dire, "print ciao mondo" - e ricordo che posso usare di stampa, non lo faccio è necessario utilizzare la stampa-F. E ora qui, se faccio PHP hello.php, io huh-- non sembrano aver interpretato. Che cosa ho fatto di sbagliato? PUBBLICO: I braccialetti angolati. DAVID MALAN: Sì, è necessario che top parentesi angolare su. Quindi è seccante, ma ci si abitua in fretta. Se devo scrivere codice PHP, io generalmente bisogno di dire al programma, o dire all'interprete, hey PHP, ecco che arriva un po 'di codice PHP. E poi, per buona misura, vorrei chiudere questo non con questo, ma piuttosto con un solo angolo di domanda marchio staffa, così che ora qui, se corro di nuovo, ora Ottengo il risultato desiderato. Ora facciamo una leggera ottimizzazione, solo in modo che hai visto prima. Questa è una specie di fastidioso che io necessario eseguire PHP spazio ciao.php, perché in passato ho potrebbe solo scrivere barra puntino nome del programma, che è una specie di piacevole. E 'una specie di una migliore esperienza utente. Così si scopre che si può fare questo in PHP con l'io following-- può utilizzare questo abbastanza criptica incantation in alto qui, che è generalmente chiamato shebang, per cui questo è un simbolo tagliente, per così dire, si tratta di un botto o un punto esclamativo. E questo ora è il percorso di un programma su un tipico sistema Linux è chiamato ambiente o env. E questa line-- lunga storia short-- una linea solo dice, hey computer trovare il PHP interprete per me nell'ambiente, trovare nella vostra memoria, per così dire. E cosa c'è di bello ora, è che se io scendo qui, Posso fare puntino barra ciao puntino php, or-- hmm. Permesso negato. Beh, si vedrà ancora di più di questo con il problema di set di sette, se si non hanno già, con le autorizzazioni. Si scopre che ho bisogno per eseguire questo comando chiamato [? chamod?] per il cambiamento mode-- un plus x ciao.php. Ho bisogno di [incomprensibile] questo un ulteriore passo che sta dicendo il mio computer, rendere eseguibile ciao.php. E ora guarda cosa happens-- puntino taglio su hello.php, funziona solo. Non ho bisogno di specificare l'interprete più. E posso rendere ancora più bella, ancora, se a rinominare questa cosa. Se mi muovo ciao.php a solo Hello-- così notare in alto a sinistra, il nome del programma è infatti ora solo Ciao. Ora posso farlo sembrare un programma in C, anche se è scritto in PHP-- o francamente qualsiasi numero di altre lingue. Così miglioramento marginale, alcuna differenza funzionale. Ma è solo un po 'di curiosità ora, in modo da poter scrivere programmi in qualsiasi lingua, e l'utente non fa devono sapere o cura che cosa questi sono. Bene, diamo un'occhiata a un altro esempio convincente ora che ho montata in anticipo. E questo si chiama quote.php. Ed è disponibile on-line. E si noti che è piuttosto short-- ma è un programma a riga di comando che è andando a guardare in alto i prezzi delle azioni per me, che è in realtà andando essere pertinente al problema impostare sette. Quindi cerchiamo di vedere quello che sto facendo. Nella parte superiore ho la aperto staffa punto interrogativo PHP. Poi ho questa linea, per cui io sono che richiede un file chiamato functions.php-- stiamo andando a vedere più su questo in un po, ma questo è come C di versione di sharp includono, dove vuoi andare includere un altro file. PHP chiama richiedono, anche se ha anche una funzione di includere. E si scopre che è function.php solo qualcosa che ho scritto prima della lezione. L'ho messo nella stessa directory, perché Volevo fattore fuori del codice che potremmo desiderare di utilizzare altrove. Nel frattempo, si può probabilmente dedurre quello che sta succedendo qui. Questo è un po 'diverso da C-- ma quello che intendo per assicurare un uso corretto? Tradurre questo più tecnicamente. In quali circostanze sono io chiudere il programma, o uscire? Sì? PUBBLICO: Quando non si dispone di due argomenti della riga di comando. DAVID MALAN: quando non ho di comandare gli argomenti della riga. E ricorda che uno di quelli argomento è il nome del programma stesso. E il secondo sta per essere un'altra parola digito dopo il prompt. Così, proprio come C, questo è il mio modo di controllare, ha l'utente cooperare e eseguire il programma come ho inteso? Ora, c'è qualcosa un po 'diverso con C-- prima di tutto avere questo segno del dollaro, e cosa un dollaro accedi indicare in PHP? Basta una variabile. Questo è tutto-- solo una variabile seguita da tutto quello che si desidera chiamare realtà. Si noti che c'è qualcosa manca dal mio programma PHP, proprio come mancava scorso settimana, contro C, che è quello che? A tipi, ma anche qualcosa d'altro. Non c'è qualcosa function-- funzione principale. Non c'è alcuna funzione principale. Devi solo iniziare a scrivere il codice senza avere di cui preoccuparsi abbastanza arbitrario convenzione di nominare qualche difetto funzione principale. Così arg C è solo molto una variabile globale che l'interprete mette a disposizione per me. Ora, questo è interessante. Quindi cercare roba. Segno del dollaro Stock è sul a sinistra, che è la mia variabile. Sul lato destro, c'è a quanto pare una funzione in PHP chiamata di ricerca che Sto passando la mia ultima riga di comando argomento a-- qualunque sia la parola è. E vedremo come questo lavora in un attimo. E poi, infine sto segnalato il prezzo. Sto stampando uno quota di così e così. E ricordate, questo è il modo in PHP-- un modo PHP-- dove non si ha a che fare il simbolo del dollaro S più. Si può solo usare le parentesi graffe e collegare una variabile. Non dovete preoccuparvi di utilizzando printf nello stesso modo. E per inciso, quando si mette una variabile all'interno di doppi apici come questo, si utilizza una tecnica di fantasia chiamato interpolazione variabile. Significa solo collegare la variabile qui. E per inciso, alcuni di voi che venite da altri ambienti di programmazione, Non è possibile utilizzare le virgolette singole intorno stringhe per fare questo. È necessario utilizzare le virgolette doppie per interpolazione variabile al lavoro. Altrimenti si letteralmente vedere quelle parentesi graffe. Così, infine, andiamo avanti ed eseguire questo. Mi permetta di fare il mio terminale un po 'più grande. Lasciami andare avanti e correre interno del mio elenco preventivo. [? CDsource?] [? AM?] [? preventivo?] citazione PHP dot PHP, e ho intenzione di cercare qualcosa come GOOG, che ne è il simbolo ticker, e una azione del suo nuovo nome, Alfabeto Inc, costa $ 717, a partire da oggi. Va bene, se vogliamo eseguire di nuovo, chiunque avere un altro ticker vogliono guardare in alto? Microsoft credo sia questo, MSFT-- $ 53. Credo che Yahoo è forse quello. E Facebook è che. Allora, qual è il programma che fa? La magia sembra essere incorporato in quella funzione di ricerca. Quindi, diamo un rapido sguardo. Si scopre che non arriva con PHP, è in functions.php. E non passare attraverso questo in grande dettaglio, a meno di notare la parola chiave qui è che on line sei di functions.php-- Ho letteralmente dico funzione. A specificare il nome della mia funzione. Ho poi specificare qualsiasi argomenti, o parametri, Voglio che la funzione di take-- nessun tipo. E poi ho attuarlo. E io cenno la mia mano all'implementazione, perché è proprio piuttosto avanzata ora, ma vedremo di nuovo in realtà in una settimana in problema impostare sette. Ma posso pulire questo, anche. Ho incluso anche in il codice di oggi una versione di citazione, che non ha dot file PHP. Perché ciò che è presumibilmente al superiore del programma chiamato semplicemente citare? Che la cosiddetta shebang-- il incantesimo abbastanza criptico che dice trovano PHP e poi eseguirlo sul mio codice qui. Va bene, allora che porta noi dove abbiamo lasciato ultima tempo-- anche se con alcuni esempi più avanzati. Tutte le domande finora su PHP o cosa stiamo facendo? No-- tutto bene. Sì? AUDIENCE: All'interno del I file HTML, fanno you-- [? Fai ?] [? basta chiamarlo?] un [incomprensibile] file PHP? DAVID MALAN: Bella domanda. In un contesto web, che siamo letteralmente su di transizione verso, non si utilizza la cosiddetta shebang in alto, perché la server-- web spesso una programma chiamato Apache o Microsoft IIS, Internet Information Server, o un numero qualsiasi di altri software del server Web, sa che quando vede un file puntino PHP, che dovrebbe eseguire l'interprete su di esso. Non sembra che in prima linea. Quindi questa prima presa linea è solo quando sei scrivendo a riga di comando programs-- che non faremo eccellente spesso, ma è il nostro modo di colmare nostri esempi C a ora il nostro PHP. Quindi cerchiamo di colmare davvero questo mondo dal mondo riga di comando per il web facendo quanto segue. Lasciami andare avanti e disegnare qui solo per un momento. Quindi, se abbiamo un server web, o meglio, se abbiamo il mio portatile qui, che io traggo come questo. E qui abbiamo la internet in qualche forma. E poi qui, abbiamo un server in una building-- questo è il modo in internet works-- e qui è un server con alcune luci forse. Che cosa sta realmente succedendo tra queste due connessioni? Quindi, in questo edificio è un web server. Questo è solo un computer che è l'uso di alcuni operativo system-- forse il software gratuito chiamato Apache, che CS50 IDE è in esecuzione. Così si può effettivamente pensare a questo edificio come la costruzione in che CSt0 IDE è memorizzato. Questo è dove tutti voi avete conti, dove tutti voi avere un proprio server web in esecuzione, tutti voi avere il proprio URL unici, come abbiamo iniziato a discutere, e vedrete più in P. definito sei. Ecco il mio computer portatile da qualche parte altro su Internet. E così quando visito un URL che appartiene a me, che il traffico Internet sta andando verso il server, il server del riceve un HTTP richiesta-- come ottenere index.html ed è rispondendo a quella pagina web. Ecco, questo è il paradigma generale. Mentre tutto in su fino ad ora oggi, tutto stava accadendo solo nel confini di questo edificio. Stavo usando il mio portatile, ma Sono stato collegato a CS50 IDE, così tutti quei programmi stavo correndo era dentro di quel server, in sé. Ma ora, cominciamo riutilizzo di PHP di scrivere alcuni programmi reali che sono serviti da un server web. E per fare questo, ho intenzione di andare in un sacco di esempi che introducono questa idea qui. Quindi questo è una specie di un modo elegante per descrivendo un paradigma di programmazione. E infatti, come si esce CS50 o lavorare su progetti finali, o prendere un po 'seguire in classe, potrai iniziare per vedere che il world-- specialmente essendo cresciuto con linguaggi come C che sono super low level-- si rendono conto che non c'è più modi di software di scrittura. Ci sono certi modelli è possibile seguire, certi modi di organizzazione dei file e modi di nominare le funzioni, in modo che per farla breve, il mondo ha messo a punto con un sacco di sigle e nomi per modi di programmazione. Queste sono solo le tecniche si possono utilizzare. E uno di loro si chiama MVC, per Model View Controller. E questo è solo, per ora, una troppo complicato modo di dire come si dovrebbe tracciare un sito web basato su PHP, nel nostro caso. Come organizzate i vostri file, come si fa a organizzare la vostra logica, in un modo che rende più facile scrivere i siti web più complessi? E in effetti, ci prende subito arrivare con p-set sette. Così nel mondo di MVC, si sta andando per vedere che il nostro codice può generalmente caratterizzato sia come modello di codice, o il codice di controllo, o il codice di vista. E ho intenzione di semplificare eccessivamente come follows-- il controllore è il cervello del vostro programma, è dove tutti i logica interessante accade. Quindi tutto quello che abbiamo scrivendo finora in classe, è un po 'come controllore code-- sta controllando il programma, i loop, il vostro le condizioni, le funzioni e variabili e tutto il resto. Vista, ora, stanno per essere un po ' più evidente nel mondo del web. Una vista è l'estetica del tuo sito web. E 'ciò che l'utente sees-- le immagini, le tabelle HTML, i tag HTML, e tutti di questo, tutto dell'estetica lanuginoso roba che non è così difficile da scrivere, ma è proprio quello che si sta generando, è la cosiddetta vista, l'estetica. E il modello, in ultima analisi, sta andando essere banca dati che stuff-- inizieremo tuffarsi tutto tanto più questo Mercoledì. Così è la logica di controllo, vista è la roba estetica, e il modello sta per essere dove archiviamo i nostri dati effettivi. Quindi diamo un'occhiata a questo più concretamente con il seguente esempio. Ho intenzione di andare nel mio elenco qui di fonte odierna code-- tutte è disponibile online. E ho intenzione di andare in versione zero. E qui è-- chiamiamolo il versione zero del sito web di CS50. Non c'è molto qui a tutti. E 'una semplice pagina web che è probabilmente utilizzando ciò che HTML tags-- solo intuire dal esempi passati? Che cos'è? H1-- probabilmente per quel grande grassetto titolo, che il logo sulla parte superiore, CS50. E che altro è in gioco? Sì? PUBBLICO: Elenco non ordinato. DAVID MALAN: list-- non ordinato in modo che il Tag UL e forse un paio di tag LI. E se non ti ricordi questi, onestamente non importa. Si tratta di una sorta di soffice dettagli di implementazione di HTML che rapidamente guardi in alto e sei di nuovo sulla buona strada. Ci concentreremo di più sulla programmazione idee che sono i pezzi più succosa. Così facciamo solo un rapido guardare il HTML-- e in effetti se apro la fonte vista qui, yup, Questo è esattamente quello che sta succedendo qui. C'è un tag UL. Nidificato all'interno di ciò che è per i tag LI. E poi ho preso in prestito l'URL del programma vero e proprio qui. E poi nel lectures.php è apparentemente un'altra pagina generata dinamicamente che sta per avere, diciamo see-- ah, le prime due settimane di lezione. Così settimana zero e prima settimana, diamo guardare questo-- se visualizzo sorgente della pagina, anche super semplice. Questi stanno portando a due pagine chiamato week0.php, e week1.php. Quindi prendere in considerazione ora che cosa sta accadendo. Quando clicco su week0.php, il mio computer portatile sta facendo una richiesta di week0.php. Il web server, pseudonimo, CS50 IDE, sta ricevendo quella busta virtuale. È vedere un messaggio come, ottenere week0.php. Viene quindi interpretare il file, in alto in basso, da sinistra a destra- sopra il file chiamato week0.php-- e sputando il risultato. Quindi all'interno di questo file, week0.php, deve essere la logica di controllo che sta generando questo HTML, e ci sarà presto vedere che. Ma per ora, lascia che clicco su settimana a zero, e ora abbiamo Mercoledì e Venerdì, e ora abbiamo le diapositive lentamente di settimana zero. E si potrebbe ricordare questo da via del ritorno quando. Ecco, questo è tutto questo sito sta facendo. Quindi prendiamo in considerazione come si sta facendo questo. Ho intenzione di tornare in il codice sorgente qui, in CS50 IDE, e ho intenzione di aprire index.php. Nella parte superiore di questo file è un po 'di commenti. E poi in mezzo a questo file, risulta, non è codice PHP sorta. Perché se non hai nessuna delle staffa aperto tag punto interrogativo PHP, sei libero di mettere solo HTML. Perché ciò che il PHP interprete deve fare, è quando si legge questo file-- dall'alto verso il basso, da sinistra a destra- sopra interpreta solo il codice che vede tra quelle parentesi angolari punto interrogativo. E qualsiasi altra cosa che non è così riconoscere come PHP, sputa appena fuori. E HTML è tra le cose sarà solo sputare. Quindi questo file potrebbe avere stato chiamato index.html, ma sto nominando tutto dot PHP come un trampolino di lancio. Lectures.php-- simile deludente, è solo un po 'di HTML. Week0.php, allo stesso modo solo alcuni HTML. Ma ora mettiamola sul cappello di ingegneria proverbiale, e consideriamo come possiamo migliorare questo. Non è difficile fare questo, ma io tipo di devoluto in copia e incolla. E infatti, se faccio settimana due, So quello che sto probabilmente intenzione di fare? Ho intenzione di andare a week1.php, io sono andando a evidenziare tutto. Ho intenzione di copiarlo, incollarlo in un nuovo file chiamato week2.php, modificare alcuni URL, e per la mia strada. Quindi, sulla base di ciò che abbiamo visto in C già, questo non si sente bene, si spera. Copia, incolla raramente la soluzione giusta. Che cosa possiamo iniziare di fare per migliorare questo? Dove sono le opportunità per una migliore progettazione? Con il tempo ho per otto settimane, sta andando per essere davvero fastidioso se voglio cambiare il carattere di ognuno di le mie pagine, o se voglio modificare la struttura del layout. Allora, dove c'è la possibilità per una migliore progettazione? Bene, prendiamo in considerazione ciò che è condiviso tra tutti questi file. Ecco una settimana, ecco la settimana pari a zero, ecco lectures.php, ecco index.php-- che è lo stesso e ciò che è diverso, grosso modo, in ciascuno di questi file? Sì? PUBBLICO: [incomprensibile] DAVID MALAN: OK, bene. Quindi c'è un modello, sicuramente, per cui ogni volta che ho scelto io lezione, Dovrei essere la generazione di un molto simile pagina cercando. E così forse posso sfruttare il fatto che in realtà, abbiamo volutamente numericamente indicizzato nostro lectures-- se posso mettere ancora di più parole la risposta. E qual è l'unica cosa che, in realtà, che sta cambiando tra settimana tra-- e mi permetta di scorrere verso il basso in modo che sia più o meno nello stesso posto-- ecco settimana pari a zero, all'incirca in alto. Ecco una settimana, la settimana pari a zero, prima settimana, la settimana a zero. OK, letteralmente se sai nessun programma di sorta, questo è ora come un modello gioco di abbinamento. Quindi cosa c'è di diverso? Sì? PUBBLICO: [incomprensibile] DAVID MALAN: Bene, così il titolo sta cambiando, sempre leggermente. Zero sta, naturalmente, a uno. Stessa cosa sta accadendo nel tag H1. E noi non vediamo abbastanza come facilmente, perché gli URL sono un po 'lungo. Ma tali URL cambiano leggermente. Ma ciò che non sta cambiando è, oserei dire, la maggior parte dei contenuti della page-- il tag HTML è lo stesso, la testa è lo stesso, il titolo è quasi la stessa, il corpo è lo stesso, e quasi tutto il resto è la stessa tranne quei piccoli ritocchi. Quindi, come possiamo fare per factoring alcuni di questo fuori? Ebbene vorrei proporre esattamente che nella versione successiva. Quindi, qui in versione uno, ho l'esatto stessi file, più un paio di altri. Ecco index.php-- e anche se non hai mai visto prima PHP, quello che sto facendo, probabilmente per risolvere questo problem-- in base a ciò che si vede qui? Sì, è che una leggera l'impegno? No? Sì, andare avanti. PUBBLICO: [incomprensibile] DAVID MALAN: Sì. PUBBLICO: [incomprensibile] DAVID MALAN: Ho bisogno di te per parlare solo un po 'più forte. PUBBLICO: [incomprensibile] DAVID MALAN: OK, bene. E io think-- era difficile sentire you-- ma io pensare a cosa vuoi arrivare è che i tag che erano comuni sulla parte superiore, ei tag che erano comuni sulla fondo, ora sono stati presi fuori, o relegati a quali file? Header.php e footer.php-- e stiamo andando di fare alcune modifiche per affrontare il problema che hai appena raccolto circa il cambiamento numeri, per esempio, se ho capito bene. Ma che sembra essere l'essenza di esso. Se ci fosse un enorme quantità di ridondanza nella parte superiore della pagina, e una quantità enorme di ridondanza a fondo, diamo letteralmente clou e tagliare fuori che il contenuto, metterlo in una file-- separato solo come l'idea di CSS, dove abbiamo fattorizzato estetica molto simili presentati in un file di punti PHP separato, utilizzare il richiedono mechanism-- che è come C include-- tagliente che è essenzialmente come dire andare afferrare i contenuti di header.php, e copiare e incollare qui. Ma che cosa questo significa è che ora in index.php, ho queste due righe. In lectures.php, ho anche avere quelle due righe. In week0.php, ho anche avere quelle due righe. Così ora, se voglio cambiare il titolo di tutte le mie pagine, o Voglio cambiare la struttura fondamentale, Posso cambiare ora in un solo luogo, o due intestazione e piè di pagina places--, rispettivamente. Ora di partenza del codice a guardare un po 'più criptico, giusto? Ma se si pensa a ciò che la pagina è doing-- se sto chiedendo week0.php, proprio come sul disegno sopra qui-- quando è richiesta week0.php, che cosa significa? Letteralmente, questo file è richiesta dal browser. Pseudonimo Il web server-- CS50 ID-- afferra questo file week0.php, e legge che verso il basso, da sinistra a destra. Sulla linea uno, che incontra subito Staffa aperto punto interrogativo PHP, richiedere intestazione dot PHP, e così ciò che l'interprete PHP does-- che è costruito nella rete Server, perché abbiamo preconfigurati per you-- va automaticamente in header.php, copia i contenuti, li incolla qui. Ma poi gli incontri interprete punto interrogativo chiudere la parentesi, così è tutto fatto pensare. Ora sputa ciecamente le linee di due a sette, perché è solo HTML grezzo. Ottiene alla linea di otto, e fa quel stessa magia again-- l'apertura del file, afferrando il contenuto, e richiedendo loro o incollandoli in quel momento o là. Ma ho appena accennato un bug. Si tratta di un passo parzialmente indietro, perché se guardiamo in header.php, Ho tipo di taglio un angolo. Quale caratteristica ho dato in ordine per ottenere questo disegno discutibile meglio? Sì? PUBBLICO: [incomprensibile] DAVID MALAN: Sì, io tipo di tagliare un angolo non banale. Lei ha sottolineato che quello che stava cambiando è il titolo, il numero nel titolo, e il numero nel H1. Quindi la mia soluzione era, OK, facciamo solo rinominare la pagina, e non fare con quel problema di sorta. Quindi questo è un parziale di passo indietro di sicuro. Ma ciò che è degno di nota qui è che quello che ho fatto altrimenti ceduti fuori tutta la roba comune. E in footer.php, accorgo io presi tutto questo, anche se minore, roba comune. Così ho bisogno di qualche ora in grado di fare un altro passo in avanti, e fissare che i problemi del titolo. Allora, facciamo così. Lasciami andare nella mia seconda versione qui, che, ancora una volta, ha gli stessi file tranne una nuova aggiunta. Ed è un po 'più verbose, ma vediamo se ci può prendere in giro a parte quello che sta succedendo qui. Così, invece di richiedere header.php, e footer.php, Mi sembra di essere che richieda un solo file-- chiamato, naturalmente, helpers.php. E mi permetta di stipula le ora, cosa c'è dentro di helpers.php è solo un mucchio di funzioni che ho scritto, proprio come prima. Ma ho chiamato helpers.php. Ora a quanto pare, in linea tre e 10, sono chiamando due functions-- render intestazione, il rendering piè di pagina. Quelli non sono dotati di PHP, ho scritto quelle me stesso. E li ho messi in helpers.php. Ora, abbiamo visto solo questa sintassi una volta, ed era super breve. Ma questo è apparentemente un argomento rendere intestazione, la funzione. Perché so che? Bene ecco una stretta parentesi tonda, ecco una parentesi tonda aperta. E, naturalmente, proprio come in C, qualcosa tra quei parentesi è un input-- o argomento della funzione. Qual è il tipo di dati di questo argomento, sulla base di quello che ho evidenziato? Che cosa fanno quelle parentesi quadre indicare, sulla base di settimana scorsa? Sì, è un array-- in particolare un array associativo. E questa sintassi per ammissione è un po 'eccentrico, ma questo è solo di passaggio in una coppia di valori chiave. La chiave è, tra virgolette titolo, e il valore è CS50. Se avessimo fatto questo in C, potrebbe invece più simile a questo, solo tra virgolette CS50-- o addirittura sarebbe ricci bretelle, o qualcosa del genere in C, dove la chiave è zero, e il valore è CS50. Ma di nuovo, in PHP, anche se la sintassi è, di nuovo, un po 'strano, esso consente di passare in parole al posto dei numeri per associare i tasti con i valori. Che cosa significa tutto questo? Se vado in helpers.php, diamo un'occhiata a questa funzione. renderHeader.php, piuttosto renderHeader è la mia funzione, e so che perché vedo la parola chiave function qui. Questa è una novità da C-- apparentemente prende un argomento chiamato data-- ma ho potuto chiamare questa niente, ma ho chiamato i dati, solo per essere un po 'e clean-- basta prendere una supposizione, soprattutto se avete già programmato in qualche altro linguaggio di alto livello prima, qualcosa sopra C, concettualmente. Che cosa è uguale parentesi aperta parentesi quadra probabilmente significa? O che cosa potrebbe significare? Noi non abbiamo visto questo in C. Sì? Un array vuoto. In particolare, ciò significa che se l'utente non chiama renderHeader con un argomento, sono ancora in corso ad avere un argomento chiamato dati, ma il suo valore predefinito è sta per essere un array vuoto. Quindi è solo una bella comodità. Io non devo urlare presso l'utente, o dire che hai usato la mia funzione errata. Posso solo dare all'utente un default valore, se non mi interessa particolarmente. Ora questa funzione, sono andando a sventolare le mani in. Ma questa funzione permette estratto noi di passare queste variabili nei dati in header.php nel modo seguente. E questo è l'ultimo pezzo, Penso, della sintassi funky. Ecco la mia nuova versione di header.php-- esso diceva, letteralmente, aperto Staffa titolo CS50, e che è stato. E stessa cosa per l'H1. Ora si dice a quanto pare qualcosa di molto funky. E lasciatemi semplificare questo per un momento come segue. Questo è quello che ho cambiato il mio titolo di essere. Tuttavia, si sta facendo un po 'brutto alle staffe costantemente aperte con PHP, e quindi utilizzare la funzione di stampa. Si scopre che il PHP ha una scorciatoia notazione per questo, che è solo un segno di uguale, che è tecnicamente un funzione chiamata echo al posto di stampa, ma è la stessa cosa, in modo efficace. Che sembra proprio meglio. E 'solo un sintattico zucchero, se si vuole, che fa il mio codice aspetto un po 'meglio. Ma si scopre, e vedremo di nuovo in poco tempo, dobbiamo chiamare questa fastidiosamente funzione di lunga chiamata HTML caratteri speciali in PHP, perché si scopre ci sono alcuni ingressi che l'utente potrebbe darci, o che gli utenti ci potrebbe dare, che stanno per rompere il nostro sito. Ma staremo a vedere che il prossimo Settimana con JavaScript. Ma per ora, è sufficiente sapere che questo file, headers.php, semplicemente prende il titolo che Ho passato in, ne fanno che sia sicuro per essere iniettato in una rete pagina e sputa come il mio titolo e come il mio H1. Quindi, se vado in questa versione ora, notare che le lezioni ha il suo titolo di nuovo, Settimana zero ha il suo titolo di nuovo, e infatti, il codice HTML sto generando è identico a quello che la mia prima versione era-- tranne che per il mio spazio, perché ho iniziato la formattazione il mio codice un po 'diverso. Ma ho generato tutto il codice mi interessa. Così mi permetta di pausa per solo un attimo e vedere se ci sono delle domande o confusione ho creato. Va bene, quindi cerchiamo di torcere un po 'più difficile qui per vedere se c'è un possibilità di miglioramento. Helpers.php ha avuto anche questo funzione, chiamata renderFooter. E ciò che è degno di nota renderHeader, e renderFooter? E ancora, per finalità di oggi, conoscere che la funzione estratto è solo il mio modo di passaggio di argomenti in header.php e footer.php. Scusate? PUBBLICO: [incomprensibile] DAVID MALAN: Sì, ho solo cambiato il richiede la linea. Così letteralmente, ho commesso il peccato di copia e incolla, ancora una volta. Non è un numero enorme di linee, ma venire on-- se sto copiando e incollando tutto solo per cambiare una piccola parola, e quella parolina che punta Alan out è piè di pagina qui, contro intestazione qui. Altrimenti, tutto è identici, tranne, Naturalmente, i nomi della funzione. Che cosa potremmo fare di meglio? Ebbene vorrei aprire questa versione qui, per cui in helpers.php, perché non ottengo solo un po 'più intelligente di questo? Scrivere un po 'più complicato codice, ma lo chiamano render? Quindi che cosa ho cambiato radicalmente? Ci vuole un argomento now-- due argomenti, i dati ancora. E allora qual è la prima nome probabilmente utilizzato per, sulla base di ciò che stai leggendo qui? Anche se alcuni di sintassi è ancora nuova. Che cosa è il dollaro modello di segno? Scusate? PUBBLICO: intestazione o piè di pagina. DAVID MALAN: intestazione o piè di pagina. Quindi, apparentemente, ho deciso che se l'unica cosa che sta cambiando è quello del modello che voglio a print-- e modello Voglio dire questo è modello per codice che voglio uscita, ma voglio collegare in qualche values-- quindi se è solo un colpo di testa o piè di pagina, perché non ho parametrizzare che e chiamare il simbolo del dollaro argomento modello? E poi questa sintassi funky mi permette per creare un percorso in una variabile qui. Così sentiero simbolo del dollaro è una variabile. Che cosa significa questa sintassi fare, se si ha familiarità? Sì? PUBBLICO: [incomprensibile] DAVID MALAN: Esattamente. Se template è, tra virgolette, intestazione, o se è template, tra virgolette, piè di pagina, quella linea lì che ho evidenziato, linea di otto, è semplicemente prendendo quel nome, come intestazione, e concatenando con PHP punto. Quindi non abbiamo avuto questo operatore in C. Questo operatore punto è una cosa incredibile in PHP-- se siete familiarità con JavaScript o Java, è possibile utilizzare il segno più Entra a fare concatenazione. In C, è un dolore nel neck-- e mi dispiace tanto, in p-set di sei, si sta andando ad avere a che fare questo-- si tratta di un dolore al collo per concatenare le stringhe. Come mai? Beh, perché se hai una stringa che è così a lungo, e un'altra stringa che è così a lungo, non si può semplicemente collegarli insieme. Che cosa invece deve fare in C? Sì? PUBBLICO: [incomprensibile] DAVID MALAN: Devi malloc memoria, o utilizzare un array in pila. E in realtà hanno a rendere tale matrice abbastanza grande per adattarsi a questo, più questo, più il backslash zero. Poi concatenare insieme con mescolate gatto o manualmente con un ciclo for, o qualsiasi numero di tecniche. E vi mostriamo un paio di p-set di sei. E 'un dolore al collo. E questo è veramente quello che voglio dire su questo contro questo-- come C contro PHP. Basta avere molto di più funzionalità per libero, in modo da poter mettere a fuoco, idealmente, sul divertimento parte della codifica, la progetto che si desidera risolvere, piuttosto che le minuzie di basso livello. Quindi questo genera solo header.php o footer.php in base al quale un io chiamo. E in effetti se vado in index.php, avviso tutto ciò che è changed-- Invece di chiamando rendere intestazione o piè di pagina di rendering, Chiamo il rendering, seguito dal il nome del modello che voglio fare. E vedrai anche questo, nel problema set di sette, per cui permettiamo di utilizzare la stessa funzione per fare grappoli e mazzi di diverse pagine web. Quindi, piuttosto che soffermarsi troppo molto di più su questi details-- che si vedrà di nuovo in set problema seven-- diamo un'occhiata a oggi l'inizio di una soluzione ad un problema più interessante. Finora, nulla abbiamo fatto ha dati salvati. In realtà, l'unica volta che abbiamo mai risparmiato qualcosa che abbiamo fatto in questa classe è quando abbiamo avuto una semplice demo per un po ' indietro, per cui abbiamo utilizzato il file IO in C, e penso che ho digitato il mio nome, e Il nome di Hannah, e il nome di Maria, o forse il nome di Andy, e allora abbiamo risparmiato un file-- CSV virgole file di valori separati. E abbiamo usato fopen-- penso abbiamo usato fprintf come ricordo, e abbiamo salvato un file. Ora, che è il più semplice sotto forma di un database. Se si vuole fare un sito web per la Programma Frosh messaggi istantanei, in base alle quali matricole possono registrarsi per uno sport, è in posizione ideale voler fare qualcosa con quei dati. La scorsa settimana, non abbiamo fatto niente con il data-- abbiamo appena detto, siete registrati, non proprio. O forse Ho contattato il Proctor, e che è stato. Ma sarebbe bello se potessi dare che Proctor un file CSV, come un file di Excel. O meglio ancora, sarebbe bello se potessi mettere i nomi di quegli utenti e dormitorio nomi e tutto questo in un database che solo vive per sempre, fino a quando ho scelto di cancellare i dati. Un database che permette me per richiedere informazioni. E in effetti, questo è ciò che un database. Introduciamo oggi, e la prossima settimana, anche, una tecnologia chiamato SQL-- una Structured Query Lingua, che è un altro linguaggio. E 'essenzialmente una programmazione lingua, ma per i database. E un database per ora, solo pensare come una versione super di fantasia di Microsoft Excel o Google Fogli di calcolo, o numeri di Apple. È generalmente un programma che permette di memorizzare un intero gruppo di dati in righe e colonne, piuttosto come si potrebbe in Excel. Ma ciò che è bello, soprattutto se non siamo super-familiarità con Excel, quello che SQL permette di fare è interrogare questo informazioni scrivendo righe di codice dove è possibile, anche se il database ha un milione di righe in esso, si possono trovare le cose super veloce. In realtà, è particolarmente Excel male a grandi insiemi di dati. Ed infatti, fino a qualche anni fa, si è rivelato Excel non farebbe che consente di memorizzare fino a 65.535 righe di data-- che suona come un sacco, ma al tempo ero uno studente laureato, e mi ricordo inciampare su questo perché stavo generando File CSV per la mia ricerca e ho voleva analizzarli rapidamente semplicemente aprendo in Excel. Naturalmente, il mio computer si è bloccato, perché ho avuto più di 65.000 righe. Ma dove ha fatto il 65.535 provengono da? Che cosa stava facendo Microsoft, presumibilmente? Se sei bravo con le potenze di due? Sì, stavano usando un 16 bit il valore per rappresentare il numero di riga. E due a 16 è 65,536-- meno uno, perché se si indice zero significa che è stata la maggior numero di righe avrei potuto. Ed era solo una decisione di progettazione. Salvando 16 bit, mi hanno limitato a 16.000 righe, invece di 4 miliardi di euro, che ho potuto avere una posizione ideale. Ma per ora, stiamo andando a introdurre questo più in un contesto web. E cosa c'è di bello su SQL è che anche anche se è abbastanza potente e abbastanza sofisticato, bolle davvero fino a quattro operazioni fondamentali, quattro funzioni chiave, se si seleziona, will-- per il recupero dei dati, la ricerca per i dati; cancellare o eliminare dati inserto per l'aggiunta di righe al database; e l'aggiornamento. Quindi, se avete mai utilizzato Google Fogli di calcolo, numeri Apple, Microsoft Excel, è stato eseguito, molto probabilmente, tutte di queste operazioni come un essere umano di usando solo la tastiera e mouse-- l'inserimento dei dati, utilizzando i tuoi occhi per selezionare o cercare i dati, o aggiornare i dati o eliminare dati. Che cosa significa questo? Beh, pre-installato in CS50 IDE è un programma chiamato MySQL. Si tratta di un libero, open-source database che è super popolare. Facebook, ad esempio, utilizza per questo giorno, tra gli altri strumenti che usano. E un sacco di siti web molto popolari usa in gran parte perché è veloce, e perché è gratis. Anche se certamente esistono alternative. E alcuni di voi potrebbero dilettarsi con alternative per progetti finali. Questo è uno screenshot, nel frattempo, di uno strumento basato sul web denominato phpMyAdmin. E 'una coincidenza che questo strumento web-based è anche scritto in un linguaggio, PHP, ma quello che ha significato fare è di darci una web-based interfaccia a un database. Perché MySQL è tipicamente qualcosa, storicamente voi, sarebbe interagire con solo con una riga di comando. E sarebbe super- fastidioso e arcana di avere digitare i comandi testuali per selezionare dati, inserire i dati, e cancellare i dati. Così alcune persone su internet ha scritto un programma basato su Web che solo di farci gestire i dati in nostro database. E 'come un doppio clic su Excel, e che esegue una versione web-based della stessa. E che cosa avete intenzione di usare questo per in definitiva la prossima settimana, non nel p-set di sei, ma è quello di costruire qualcosa chiamato CS50 Finance, che sta per avere un database di gli utenti, con nomi utente e password, dollaro importi che hanno in loro conti bancari. Esso sarà qualcosa che si usa per memorizzare i simboli e le quantità di azioni che gli utenti hanno acquistato utilizzando virtuale dollari che darai a loro. E sta andando per consentire agli utenti per registrarsi per il tuo sito, in modo che anche i tuoi amici può entrare in sintonia con il vostro sito web ed effettivamente registrati, log in, e giocare e cercare di trovare un difetto nel codice, e cercare di trovare bug nel tuo sito web. E faranno semplicemente registrarsi per aggiungendosi, efficace, tramite codice scritto al database. Per esempio, questo è un rapido schermata di quello che una banca dati potrebbe essere simile. Questo è stato da una delle solutions-- dello scorso anno questo è come un mini Excel su file, memorizzati nel nostro database, memorizzati in questo software chiamato MySQL. Sul lato sinistro, ho a quanto pare dato ogni utente un numero univoco. Nella seconda colonna, ho dato tutti un utente nome-- mia tra di loro. E sul lato destro, Ho dato loro un hash. Ora questo è in realtà una password, ma non è una password di testo normale. Si tratta di una password crittografata, se si vuole, o di una password hash. Che torneremo a non molto. Ma se hai mai letto un articolo su come la password in qualche banca o qualche sito web potrebbe essere stata compromessa, può generalmente significare due cose. Quindi questo è solo un estratto di sei utenti. Tutti voi ora riesco a capire tramite hacking o di cracking ciò che le password nostri sei delle persone sono. Ma se hai mai ottenuto un avviso o una scusa da una società o un sito web dice, scusate, un hacker ha rotto nel nostro database, probabilmente si dovrebbe cambiare la vostra password, cosa potrebbe significare? Beh, si, potrebbe significare la società è stata più idiota, ed è stato l'archiviazione la password in una colonna come questo, in chiaro. Il che significa che l'avversario, che ha rubato il database, conosce letteralmente il vostro username e password. Questo è il peggior scenario possibile. E, come vedrete in p-set sette, così facile da evitare. Non c'è assolutamente nessuna scusa per quello sotto forma di stupidità in Internet di oggi. Two-- e troveremo alcuni articoli a testimoniare il fatto che questo ancora accade, nonetheless-- due, forse l'avversario ha rubato questa versione del database. Che è ancora un po 'male, perché ora sanno che ho sei clienti, Io so i nomi di utente di queste sei clienti, e so che la crittografato versioni, o le versioni hash, delle password quei sei clienti. Ma qualcuno di voi che potrebbe aver fatto [? Hacker 2?] dove è incrinato password, o preso uno sguardo a quella versione del problema insieme, perché è ancora un po 'preoccupante se l'avversario conosce il vostro hash le password? PUBBLICO: perché potrebbero inserire l'intero dizionario nella funzione di hash. E se la password è un dizionario parola, [? si può solo match--?] DAVID MALAN: Esattamente, l'avversario può solo scrivere codice, come alcuni di voi ha fatto per [? Hacker?] 2, per cui eseguire iterazioni su tutte le parole del dizionario, o tutte le possibili combinazioni di A a Z e uno attraverso nine-- che suona come un sacco, ed è. Ma per un computer, è maledettamente veloce. E infatti, che è stato il punto di [? Hacker 2,?] Era a prendere roba che sembra letteralmente come questo, e reverse engineering che cosa è in realtà. Quindi vedremo come possiamo memorizzare in modo più efficiente. Risulta, per fortuna in MySQL, ci stanno per essere tipi di dati. E una delle parti divertenti di progettazione di database, ad essere onesti, è in realtà decidere per te stesso come si dovrebbe rappresentare i dati? In caso di rappresentare un numero di telefono come un int, come un numero grande, o un lungo? O si fa realmente fa come una sequenza di caratteri? E non ci può essere molto impatti non banali di questo. Infatti, uno dei prime, divertenti storie germano è quando Mark Zuckerberg stava costruendo Facebook, è stato scritto in, e ancora in gran parte è scritto in PHP. E uno dei più grandi sfide hanno affrontato nella fase iniziale è stato il ridimensionamento. Quando hanno continuato ad aggiungere scuola dopo la scuola dopo la scuola, a mia conoscenza, una delle soluzioni originali era essenzialmente di copiare e incollare alcuni dei database e parte del codice, in modo che Harvard era in esecuzione sul proprio server, e il MIT era in esecuzione sul proprio server. E questo è stato il motivo per cui, per qualche di voi che potrebbe ricordare, Non si potrebbe avere amici in altre reti. Probabilmente non avete amici a MIT Harvard o 10 di anni fa, ma non si poteva estendersi su reti per questo motivo in parte. E una delle più grandi sfide per Marco e per le aziende come Facebook è in realtà la manipolazione centinaia e migliaia e milioni di richieste al secondo. Quindi le cose che inizieremo parlando di questa settimana sono davvero intenzione di essere pertinente scrittura di un buon software, e popolarmente strumenti efficaci che in grado di gestire un sacco di utenti. Quindi parleremo di cose come l'indicizzazione e la ricerca, ma questo è tutto per oggi. Ci vedremo per più di Mercoledì. [MUSICA - TEMA "Seinfeld"] DAVID MALAN: il possibile per , e sottrarre da esso. E non c'è bisogno di attaccare con certa quantità predeterminata della memoria. Beh, cosa c'è che andare a essere chiamato? SPEAKER 1: Beh, che cosa sta succedendo? SPEAKER 2: Che vuoi dire? Sta dando una lezione. DAVID MALAN: E siamo in grado di utilizzare un funzione chiamata malloc per memory-- SPEAKER 1: Perché non sono le sue braccia in movimento? SPEAKER 2: Be that's-- si sa, è normale. E 'proprio come ha appena grandi salsicce appeso lì. SPEAKER 1: E 'normale? SPEAKER 2: Sì, penso che solo presumere che accidentalmente sostituito il suo deodorante con supercolla.