HANNAH BLUMBERG: Ciao a tutti. Stiamo per iniziare solo un paio di minuti di anticipo dal momento che abbiamo un bel po ' di materiale per farlo passare. Sono Hannah. Sono un TF. Maria sta per entrare a far parte noi in appena un paio di minuti. Insegna sezione a destra prima. Io insegno sezione giusta dopo, quindi stiamo andando tenerlo per un'ora e mezza. Quindi, come si vedrà qui, abbiamo abbastanza alcuni argomenti che abbiamo bisogno di ottenere attraverso, così noi andremo un po 'veloce. Ma se in un qualsiasi punto diciamo qualcosa troppo in fretta o non si capisce, sentitevi liberi di interrompere con le domande. Vogliamo essere in grado di rendere questo un rivedere sessione come utile a tutti voi possibile. Eccezionale. Quindi cerchiamo di saltare a destra con alcuni argomenti che in realtà molto, molto brevemente coperto per la quiz 0 al quiz 0 recensione sessione. Quindi, a partire con liste collegate. Quindi, solo assicurarsi di avere un po ' conoscenze di base sulle liste collegate e sono comodo fare alcune delle operazioni di base. Quindi, solo per rivedere, collegato le liste sono meglio di array perché possono crescere in modo dinamico. Così abbiamo che enorme vantaggio. Abbiamo visto li ha usati in tabelle hash quando Non so esattamente quante cose che stanno andando a voler inserire nella nostra struttura dati. Purtroppo, non abbiamo pezzi di la lista collegata in tutta la memoria, quindi non ci sarà necessariamente in grado di fare l'accesso costante di tempo ad ogni elemento della lista collegata. Al fine di trovare un particolare elemento, abbiamo deve scorrere tutto il modo fin dall'inizio. Quindi, tenere a mente che la maggior parte le operazioni di base sono omega di 1. Quindi inserto è solo andare a prendere uno. Elimina sta andando a prendere n da quando abbiamo andare a trovarlo dalla lista. E di ricerca potrebbe portare, nel peggiore dei casi, n. Non possiamo fare qualcosa di simile ricerca binaria su una lista concatenata dal momento che non possiamo solo saltate in modo casuale a metà. Raffreddare. Eccezionale. Un po 'di pile. Questo, ancora una volta, si avvicinò a quiz 0, in modo da dovrebbe essere super confortevole con esso. Ma per gli stack, vi chiediamo ricordare una pila di vassoi. E sta andando essere il primo a, dura fuori. Quindi noi sovrapponiamo le cose nella pila, e poi se stiamo cercando di prendere qualcosa off-- che noi chiamiamo popping off il stack-- veniamo fuori dalla parte superiore. E se vogliamo mettere qualcosa nella pila, si parla di spingere. Così sta andando sempre essere in crescita su dal basso come una pila di vassoi. Eccezionale. Abbiamo visto pile implementato con entrambe le liste e array collegate. Se si sta implementando con gli array, vuoi fare in modo di tenere traccia di sia la dimensione e la capacità. Così dimensioni sta per essere l'attuale numero di cose nel vostro stack, considerando che la capacità è il numero totale di cose che si possono memorizzare nel vostro stack. Raffreddare. In modo molto simile, abbiamo code. In questo caso, invece di pensare una pila di vassoi, pensare di una linea. Questo sta per essere il primo in, first out. Quindi, se siete in fila per qualcosa al negozio, ci auguriamo che la persona prima di la linea sta per essere aiutato prima. Invece di dire spinta e pop come facciamo noi per lo stack, diciamo solo enqueue e dequeue. E ancora, se attuazione del presente con una matrice, abbiamo bisogno di tenere traccia non solo la dimensione e capacità, ma anche la testa, che sta per essere parte anteriore della nostra coda. Raffreddare. Tutte le domande di nulla di tutto ciò? Eccezionale. Spostare a destra lungo. OK, tabelle hash. Qui è dove inizia a diventare davvero interessante. Quindi una tabella di hash è una implementazione di un array associativo. Quindi, in pratica ciò che è accaduto è che abbiamo tutto questo ingresso, e diamo a un hash funzione che dice: OK, questo è dove la tabella di hash essa appartiene. Così la funzione hash più semplice che abbiamo visto è solo dicendo, OK, supponiamo di voler mettere stringhe nella nostra tabella di hash. E davvero una semplice idea potrebbe essere quella di dire, OK, facciamo solo ordinare dal prima lettera della parola. Così si può vedere qui, prendiamo banana, abbiamo messo attraverso una funzione di hash, e si dice, hey, che dovrebbe andare a indice 1. Così possiamo essenzialmente pensare ad un hash tavolo come un mazzo di diversi secchi. E ciascuno di quelli secchi sta andando tenere la testa di una lista collegata. E in quella lista collegata è dove possiamo effettivamente messo diversi pezzi di dati. Così immersione un po 'di più in una funzione di hash, ecco l'esempio che ho appena descritto dove abbiamo solo dire, OK, prendere la prima lettera della parola e siamo andando a ordinare in secchi. Quindi, presumibilmente, ci saranno 26 secchi, uno per ogni lettera dell'alfabeto. Perché non si tratta di una grande funzione di hash? Ciò che rende questo non ideale? Già. PUBBLICO: Si sta andando di avere collisioni. HANNAH BLUMBERG: Sì, esattamente. Si sta andando ad avere collisioni. Ecco, questo è una cosa. E parleremo di come possiamo risolvere le collisioni in appena un secondo. Un altro problema con questo particolare funzione hash è che il nostro diverso benne stanno per essere di piuttosto drasticamente diverse dimensioni. Sappiamo che c'è un bel po ' più parole che iniziano con A di X, così noi avremo molto benne sbilanciati nella nostra tabella di hash. Raffreddare. Quindi sì, torniamo a il punto di collisioni. Che cosa facciamo se c'è una collisione? Abbiamo un paio di diverse opzioni. Così uno, quindi supponiamo che stiamo cercando di mettere bacca nella nostra tabella di hash. E vediamo, oh, vogliamo per dirla in indice 1, ma banane già vi abita. Cosa stiamo andando a fare? Abbiamo due opzioni principali. Il numero uno è che possiamo dire, OK, non c'è spazio a indice 1, ma facciamo solo continuare a cercare attraverso fino a quando siamo in grado di trovare un altro posto aperto. Così diremo, OK, mettiamola in posto 3. Questa è una opzione. Questo si chiama scansione lineare. E una seconda opzione che dice, OK, bene, facciamo solo fare ciascuno di questi secchi essere responsabili delle liste collegate. E va bene, se non c'è più di una cosa in un secchio. Stiamo solo andando a aggiungerlo sulla parte anteriore. Così qui si può vedere, OK, quando abbiamo inserito bacca, ci appena ha preso la banana, tipo di spinto sopra un po ' e gettò una bacca in là. E questo è anche tutto bene. Questo è chiamato concatenazioni separate. Si può pensare a questo come un po 'come una serie di teste di liste concatenate. Tutte le domande di hash tabelle, funzioni hash? Eccezionale. Alberi e tentativi. Così un albero è un qualsiasi tipo della struttura dati in cui c'è una sorta di gerarchia o una sorta di classifica ai vostri diversi oggetti. E questo diventerà super- chiaro quando vediamo un esempio. E abbiamo visto tentativi, lungo con tabelle hash, in pset5-- che, di nuovo, gioco completamente fiera per questo quiz-- come un altro dei dati strutture che possiamo memorizzare le cose diverse. Nel caso di dizionario, abbiamo memorizzato un mucchio di parole. Quindi, diamo uno sguardo ad alcuni alberi. Quindi questo è un esempio di un albero. Ha un tipo di struttura, tale struttura gerarchica, dove si può vedere che 1 nodo in cima ha una sorta di rango superiore al 2 e 3, che sono sopra 4, 5 e 6 e 7, che sono sopra 8 e 9. Ecco, questo è tutto quello che intendiamo per albero, così si può solo tipo di immaginare questo nella tua testa. Ora, abbiamo un paio di alberi più specializzati. Così un esempio è un albero binario. E un albero binario è, ancora una volta, solo andando a essere una struttura di dati con una sorta di gerarchia, ma ciascuno dei nodi può avere al massimo due bambini. Ecco dove la parola binaria proviene. Quindi questo è un esempio di un albero binario. Ecco, questo è una categoria più piccola di alberi. Ora andiamo ancora più specifico e parlare di binario trees-- ricerca binaria alberi, piuttosto. Quindi, ecco l'idea è non solo ogni nodo ha al massimo due figli, ma tutti i bambini al sinistra stanno per essere più piccoli e tutti i bambini al destra stanno per essere più grande. Quindi notare a solo il nostro albero binario, non c'è alcuna relazione tra i numeri. Ma nella nostra ricerca binaria albero, vediamo, OK, qui è 44. E ogni numero a sinistra di 44 è più piccolo e tutto a destra è più grande. E questo vale in ogni livello dell'albero. Ecco, questo è più piccolo 22 e questo è maggiore di 22. E questo è albero binario di ricerca. Perché pensiamo che si chiama un albero binario di ricerca? Che algoritmo fa vi ricorda? PUBBLICO: La ricerca binaria. HANNAH BLUMBERG: ricerca binaria. Perché se siete alla ricerca di un particolare numero in questo albero, in ogni punto, si può solo battere metà fuori della struttura, che è grande. E così che sta andando a darci qualcosa che sembra un po 'come ricerca binaria. Qualsiasi domanda? Va bene, fresco. Va bene, ci prova. Preferito da tutti. Quindi questo è l'esempio che abbiamo visto un gruppo in classe. E ancora una volta, questo è solo un altro modo in cui siamo in grado di memorizzare i dati. Nel caso del dizionario, di nuovo, questo è solo andare a essere stringhe. Quindi cerchiamo di vedere che cosa questo realmente assomiglia a un livello leggermente inferiore. Quindi, diamo uno sguardo in un nodo in un trie. E vediamo, OK, ci sta andando essere un booleano e un nodo, un puntatore a un nodo. E vediamo che la Booleana si chiama is_word. Quindi, in sostanza, che è andare a corrispondere a questi piccoli triangoli che dice, se hai ottenuto qui, avete trovato una parola completa. Sappiamo che "Turing" over qui è una parola completa, considerando solo T-U-R non è una parola perché non vediamo quel piccolo triangolo. E quel piccolo delta, ancora una volta, corrisponde a questo is_word, questo is_word booleano. E poi abbiamo una serie di bambini. Quindi, a ogni livello, si avere un particolare nodo, e che i punti di nodo a un matrice dell'intero alfabeto. Così si può vedere, ancora una volta, in questo un'Immagine-- sono intenzione di continuare a saltare indietro e forth-- che tale matrice in cima ha un sacco di diverso nodi che vengono fuori di esso. Ha 26, o 27 se si desidera per includere un carattere aggiuntivo. E questo ci dà un modo per memorizzare i nostri dati in un modo che può essere guardato su che si può guardare in alto super veloce. Qual è il tempo di ricerca per un trie? PUBBLICO: [incomprensibile]. HANNAH BLUMBERG: Sì. In teoria, è tempo costante. E 'solo sarà la dimensione del la parola che si desidera cercare. Anche se si aggiunge un zillion più parole per la nostra trie, non sta andando a prendere noi più per determinare se una determinata parola è nel trie. Ecco, questo è veramente bello. PUBBLICO: Ti è appena inizializzare tale matrice? Ti sei perso un punto o due. Si può solo parlare che per un secondo? HANNAH BLUMBERG: Certo, assolutamente. Bella domanda. La domanda era, abbiamo hanno una matrice che è andando ad avere nodo stella come rispetto a solo nodo, giusto? Raffreddare. Ecco quello che stiamo dicendo è il nostro array è solo sta per essere puntatori ad altri array. Quindi è essentially-- che tipo di si sente come una lista collegata in questo modo dove ognuno di questi bambini basta puntare al nodo successivo. E il modo in cui in realtà determinare, ehi, OK, abbiamo iterato attraverso un intero parola, è questa parola nel dizionario, abbiamo appena controlliamo questo is_word. Grande domanda. Già. PUBBLICO: OK. Allora, qual è stato il tempo di esecuzione per il trie? HANNAH BLUMBERG: Certo. Così il runtime per un trie per ricerca sarà tempo costante. Quindi è solo andare a essere il numero di lettere nella parola. Non è dipendente dalla dimensione del dizionario o la dimensione della struttura di dati. Quindi, ecco un esempio un po 'più semplice. In questo caso, si può vedere che la parola pipistrello è nel dizionario e si dispone di zoom, ma voi non hanno qualcosa di simile a zoo. Come potremmo fare zoo? Come possiamo aggiungere al nostro zoo dizionario, al nostro trie? Già. PUBBLICO: Fai is_word vale per il [incomprensibile]. HANNAH BLUMBERG: Good. Quindi diremmo Z-O-O, e allora avremmo vogliono spuntare quella scatola pure. Grande. Mettiamo a confronto molto brevemente cerca contro tabelle hash. Tentativi sono davvero grande perché, come abbiamo detto, forniscono a tempo costante ricerca. Ma l'enorme svantaggio è che sono humongous. È possibile ottenere il senso, anche cercando in esso, che sta andando a prendere una grande quantità di memoria. Così sta andando ad essere molto più grande di tabelle hash, ma che stanno andando a dare noi tempi di ricerca molto più veloce. Ecco, questo è il vostro tipo di compromesso, che cosa vi preoccupate, che si tratti di velocità o la memoria. Tutte le domande di nulla di tutto ciò, tutte le strutture di dati C. Bellissimo. OK. Stiamo andando a passare per un po ' po 'di sviluppo web con Maria. MARIA ZLATKOVA: Lovely. OK. HANNAH BLUMBERG: È possibile utilizzare il mio computer portatile. MARIA ZLATKOVA: Nizza. Ok bello. Come ci muoviamo ora al web sviluppo, abbiamo parlato un po ' sulla modifica delle autorizzazioni di file e directory in modo che possa essere accessibile ad altri utenti, al mondo, e in modo che possiamo vedere come fondamentalmente possiamo trasmettere quando sviluppiamo le cose come siti web che abbiamo fatto per lo più. Così abbiamo visto il comando chmod, che è modalità di modifica, in fondo. Questo è un comando di Linux e cambia i permessi di accesso di oggetti del file system. E un oggetto del file system è solo una cartella, un file, tutto ciò che è possibile cambiare i permessi. Quindi, per vedere i permessi dei file, digitiamo il comando ls, lista, -l. E quando si digita questo, abbiamo di solito vedere alcune autorizzazioni quello sguardo un po 'come questo davanti ad un nome di directory. Così d si riferisce alla directory. E poi abbiamo tre triadi che in fondo fare riferimento alle autorizzazioni di entrambi un utente, un gruppo, o il mondo. I tipi di autorizzazioni che possiamo hanno per tali tre gruppi di persone sono o R per la lettura, w per scrittura ed x da eseguire. E possiamo avere quelli per il gruppo e mondo pure. La cosa difficile è che a volte quando si digita il comando chmod, dovremmo inserire qualche numero che consisteva di tre bit. Così abbiamo potuto fare come 777 e che fondamentalmente riferita al valore aggiunto di ciascuna di queste triadi perché r rimanda alle 4, w sarebbe riferiscono a 2, e x si riferirebbe a 1, così quando sommati, ciascuno dei numeri sarebbe venuto fino a un numero cumulativo ad un valore cumulativo tra 0 e 7. Così potremmo anche avere 0 per nessuna autorizzazione a tutti. E che sarebbe fondamentalmente ci darà le autorizzazioni per l'utente, sia il gruppo o il mondo. Tutte le domande su questo fino ad ora? PUBBLICO: Lei ha detto letto era 4? MARIA ZLATKOVA: Sì. PUBBLICO: [incomprensibile]. HANNAH BLUMBERG: Yup. PUBBLICO: E poi con l'aggiunta di tutti coloro altri avrebbero indicare il proprio numero. MARIA ZLATKOVA: Sì. Già. Queste sono grandi questioni. Bello. Successivamente, ci siamo buttati in HTML e un po 'di più circa web development. Quindi HTML significa solo Hyper Text Markup Language. E questo è il markup linguaggio che è uno standard che viene utilizzato per creare pagine web. Si chiama un linguaggio di markup perché non è in realtà redatto. Non dire come codice dovrebbe essere eseguito o qualcosa di simile. Si delinea solo e descrive come un web pagina deve essere impostata con ciascuno dei suoi elementi e come dovrebbero guardare per l'utente. Alcuni dei tag HTML che abbiamo è andato sopra sono i seguenti. Tutti i nostri documenti HTML iniziato con il codice HTML DOCTYPE. Poi abbiamo sempre il tag html. Abbiamo una testa e un corpo. Ed è importante che HTML ha questo tipo di struttura nidificata perché è molto chiaro. E allora diventa molto chiaro quando ci bisogno di aprire e chiudere i tag realmente. E abbiamo sempre bisogno di chiudere tag che abbiamo aperto. E qui abbiamo alcuni dei tipi di cose a venire che vogliamo avere. Così abbiamo, per esempio, il titolo di CS50. E poi abbiamo effettivamente può collegare un foglio di stile che definisce il modo in cui lo stile il nostro sito web. Questo è il CSS. Stiamo per andare su di esso in un paio di scivoli pure. All'interno del corpo, abbiamo impostato alcune classi e ID. E come ricordo, ancora una volta, Gli ID sono unici e le classi può essere assegnato a più elementi. E questo significa solo che possiamo usare le classi e gli ID all'interno di altri structures-- così, per ad esempio, all'interno di file CSS o stile sheets-- per fare riferimento a elementi specifici e fondamentalmente diciamo che vogliamo per lo stile o disegnare qualche elemento in qualche modo particolare. E ci riferiamo a loro da loro ID e classi. E possiamo anche fare riferimento a cose diverse da tag così, ma gli ID e le classi solo ci danno un po ' versatilità e che cosa specificamente noi voglia di fare riferimento. Quindi, solo un esempio. Possiamo, di nuovo, entro un file CSS dove siamo vuole definire alcuni style-- così colori, i font, e cose del genere che-- possiamo definire lo stile per un corpo. In modo che definirei per tutto il tag body. Ma allora possiamo anche definire uno stile per una #title. E ancora, l'hashtag riferisce alla nostra ID e il punto si riferisce alla nostra classe. E poi per i .info, abbiamo possono anche impostare alcuni attributi. E ancora, quando torneremo, abbiamo avuto la nostra classe chiamata informazioni e il nostro titolo ID. E possiamo vedere che ci riferiamo a loro da #title e .info. PUBBLICO: Vuoi dire hashtag [? Adottami? ?] MARIA ZLATKOVA: Siamo spiacenti? PUBBLICO: Vuoi dire hashtag [? Adottami? ?] MARIA ZLATKOVA: hashtag significa ID, così #title si riferisce a qualunque elementi avere questo ID chiamata titolo. E poi il punto si riferisce ad una classe. Quindi, .info si riferisce a questo elemento perché ha la classe di informazioni. Sì. PUBBLICO: Perché ti distinguerle nel codice HTML? Perché dici certe cose sono ID e certe cose sono di classe? MARIA ZLATKOVA: Questo è solo fino a you-- HANNAH BLUMBERG: ripetere la domanda. MARIA ZLATKOVA: Oh, mi dispiace. Perché si distinguono alcuni elementi come ID e altri elementi come le classi? Questo è solo perché è davvero spesso una scelta progettuale. Ti dà un sacco di versatilità nell'essere in grado di dire che voglio questa specifica voce per avere questo ID perché vogliono a fare un sacco di cose con essa, e solo vuole definire uno stile, certo stile o il colore qualunque cosa per tale voce. E il modo per farlo è solo dandogli un ID. E poi se voglio avere un paio di elementi diversi avendo che, invece di andare e impostazione their-- invece di farlo da etichetta perché il tag sarebbe impostare la cella per tutta tag per ogni volta che viene utilizzata tale tag, è possibile impostare una classe a più elementi. E poi basta accedere a tale classe e dire Voglio per lo stile di questa classe in quel modo. E ancora, la classe può essere più elementi diversi e l'ID deve essere univoco. Grandi domande. Qualsiasi altra domanda? OK, impressionante. Ancora una volta, questo è come questi selettori si fa riferimento in CSS, con hashtag, con il puntino, o senza nulla per assegnare lo stile di qualche modifica, come il corpo. E qui abbiamo il generale sintassi come questo è fatto. Per ripetere alcuni meglio pratiche per HTML e CSS, dobbiamo, ancora una volta, chiudere tutte le i tag HTML che abbiamo aperto. E quello che hai consigliato fare per i vostri progetti finali, così come per CS50 Finance, è quello di rendere Assicurarsi che tutto il codice HTML convalida. E questo è fatto con il W3 Validator. E poi quello che abbiamo fatto e quello che vi consigliamo di fare è separare stile, in modo CSS da codice HTML. Quindi tutto ciò che si riferisce a come la tua pagina è andare a guardare visivamente e come sta andando essere modificato dovrebbe andare in un documento CSS. E poi il tuo markup dire come le cose sono in relazione tra loro è HTML, e che dovrebbe andare dentro dei vostri documenti HTML. Qualsiasi domanda? Mhm. PUBBLICO: Che cosa sta succedendo con la convalida pagina quando stiamo convalidando la HTML che [incomprensibile] ha creato? MARIA ZLATKOVA: Così cosa-- pensi. Così che cosa esattamente sta succedendo sulla pagina con la convalida e perché abbiamo bisogno di farlo? Fondamentalmente, abbiamo bisogno di farlo perché un sacco di volte, il tuo browser, se non si chiude un tag o qualcosa di simile, il browser è ancora in corso di rendering di una pagina e potrebbe ancora funzionare, ma è buona norma assicurarsi che hai, ancora una volta, ha chiuso tutti i tag, che tutti gli elementi siano il modo in cui dovrebbero essere, e fondamentalmente che è dal convenzioni che sono preimpostati. È, di nuovo, solo cosa che si dovrebbe essere imparare a fare, al contrario di avere codice sloppier e cose del genere. Già. Oh scusa. Credevo che alzando la mano. PUBBLICO: No, ero solo [incomprensibile]. MARIA ZLATKOVA: OK. PUBBLICO: Grazie. MARIA ZLATKOVA: Certo, grazie. Quindi, di nuovo, in corso in quanto informazione è trasferita e modelli di comunicazione per trasferire informazioni. TCP / IP. TCP significa solo trasmissione Control Protocol e IP si riferisce a Internet Protocol. E che si riferisce solo a il dato modo in cui viene consegnato. Se abbiamo alcuni dati che ha bisogno di consegnare a you-- così si effettua una richiesta per un determinato server. Ad esempio, quando provare ad accedere cs50.net, facciamo una richiesta di il server CS50 e noi vediamo che vogliamo ottenere questo tipo di informazioni. E poi si basano su questo protocollo per come viene fornito queste informazioni, il server fornisce informazioni di nuovo a noi, il cliente. E poi siamo in grado di visualizzare le informazioni per la pagina e quindi utilizzarlo. Allora Hypertext Transfer Protocol è solo un altro protocollo o set di convenzioni che definisce come il browser web e il web server dovrebbe comunicare. E mettendo tutto questo insieme, HTTP, di nuovo, solo definisce come questo ipertesto definito per il codice HTML che abbiamo lavorato esso, come dovrebbe essere consegnato a voi e come che i dati che viene consegnato a voi arriva a voi. Ed è per questo che, se voi ragazzi ricordate da una classe, abbiamo avuto un sacco di richieste e abbiamo avuto un sacco di sintassi per queste richieste che siamo intenzione di andare oltre in questo momento. Quindi, di nuovo, quando inviamo una richiesta a un server, dobbiamo definire un paio di cose. Quindi abbiamo bisogno di trovare il tipo di richiesta che stiamo impostando. E ancora, abbiamo, per esempio, GET è un tipo di metodo che abbiamo nel nostro richiesta. E poi HTTP / 1.1 è solo la protocollo che stiamo usando al momento. La maggior parte del tempo, che sta andando il protocollo che stiamo usando. Quindi, se avete una domanda come quella sul vostro quiz. Ecco le convenzioni che abbiamo finora. Backslash si riferisce a quale tipo di cose che stiamo chiedendo. Poi, il nostro ospite è, per esempio, in questo caso, stiamo cercando di andare a google.com. Quindi questo è il valore di un host. Questo è un tipo di richiesta che potrebbe essere inviato. E poi un tipo di risposta che potrebbe inviare, ancora, sulla base di questo protocollo, è di nuovo, HTTP / 1.1. Ecco, questo è ancora una volta la versione HTTP. 200 OK è solo il codice di stato. E che OK è solo una frase in base a tale codice di stato. E poi il Content-Type si riferisce al tipo che vengono restituiti a voi che è per quella pagina web che si riceve e che il browser può rendere in seguito. E questo è text / html. PUBBLICO: Che cosa vuol dire 1.1? MARIA ZLATKOVA: Questo è solo il versione di-- oh, cosa vuol 1.1 significa? Questa è solo la versione, il HTTP versione di un protocollo che stiamo usando. Grande domanda. Altre domande? PUBBLICO: Potresti riassumere Content-Type reale veloce? MARIA ZLATKOVA: In modo che ciò è il server. il tipo di informazioni inclusi ciò è tipo di contenuto era le domande. Così che era il tipo di informazioni che si ottiene indietro dal server, il tipo di i dati che il browser può quindi rendering che si sta utilizzando. PUBBLICO: E 'di questo che si protocollo che si sta dicendo di fare? MARIA ZLATKOVA: Siamo spiacenti? PUBBLICO: È questo che dicono il protocollo? MARIA ZLATKOVA: Il protocol-- AUDIENCE: --che il Content-Type è o cosa-- MARIA ZLATKOVA: Il protocollo si basa on-- qual è il protocollo che si dice? Questo è solo il modo in cui che questa informazione è stato consegnato a voi sulla base dal tipo di protocollo Queste informazioni sono state ottenuto consegnato a te. Questo fa senso sorta di? HANNAH BLUMBERG: Si può pensare di protocollo come a-- Penso che il professor Malan descrisse in classe come un po 'come a-- è come l'equivalente di handshaking umana. Dire, come, hey, io sono una richiesta e io saper gestire HTTP versione 1.1. E poi il server dice, oh, OK, io-- ed entrambi esistono. So anche come trattare con HTTP / 1.1. E ho intenzione di dare si esegue il backup alcuni contenuti. In questo caso, sta andando essere di tipo text / html. Quindi è una specie di solo un modo di loro per communicating-- MARIA ZLATKOVA: E 'solo confermando che sei sia seguendo la stessa protocollo e che sia il client e il server-- così il browser e il server-- tipo di sapere cosa si sta parlando e hanno la convenzione per il passaggio nei dati. AUDIENCE: Così il Content-Type part-- il testo Content-Type / html-- che è una parte separata dello stesso messaggio? O è parte di, diciamo, 200? Vuol dire loro che 200 o è-- MARIA ZLATKOVA: 200 dice che tutto è andato bene. E poi tipo di contenuto è una sorta di parte separata dello stesso messaggio, e dire la cosa che mi restituito ha questo tipo di text / html. E 'solo dare più informazioni. Hanno qualcosa da aggiungere? OK. Altre domande su questo? Eccezionale. Così alcuni altri stati HTTP che potremmo ottenere in aggiunta a 200 OK, quelli che abbiamo visto forse forse molti sono 403 e 404. Così 404, se si stava tentando di accesso qualcosa che non esiste. Così, per esempio, in Pset CS50 Finanza, se tu fossi stato renderizzando quote.html e non avevate quel file, ma invece hai avuto quote.php, che si tradurrebbe in un 404 Not Found perché il file potrebbe non esistere. Per un 403 proibito, che si riferisce alle autorizzazioni. Quindi, se alcuni file non è leggibile dal mondo, si potrebbe ottenere un 403 restituito. Alcuni altri che si potrebbe get-- 301, Spostato in modo permanente; 302, Trovato; 304, modificata; 400, Bad Request; e poi Errore interno del server per 500 e 503, Servizio non disponibile. Sì. PUBBLICO: Will ci aspettavamo di memorizzare tutti questi stati? MARIA ZLATKOVA: Avrei sul vostro foglietto. [Risata] PUBBLICO: Are ci aspettavamo sapere che cosa fa scattare ognuno? MARIA ZLATKOVA: Sono? HANNAH BLUMBERG: Per quelli che abbiamo eseguire into-- quindi la domanda era-- MARIA ZLATKOVA: Sono tenuti a sapere che cosa ognuno di questi di stato codici potrebbe essere innescato da? Così per quelli che abbiamo usato e corse in, direi, sì. Così abbiamo sicuramente visto 200 OK e tenuto conferenze in pset. Abbiamo visto 403, 404. Per altri? HANNAH BLUMBERG: vorrei dicono 500 sembra giusto gioco. MARIA ZLATKOVA: 500, sì. HANNAH BLUMBERG: Sì. Basta avere un senso generale di ciò che li provoca. E anche solo da questi nomi, è possibile tipo di come fare un'ipotesi come a ciò che effettivamente loro causato. Ad esempio, spostare in modo permanente, probabilmente il file è stato spostato in modo permanente. PUBBLICO: Ma su un precedente esame, c'era una così Come ci si aspetta di rispondere? HANNAH BLUMBERG: Che valeva zero punti. La domanda sulla 418 sulla teiera è tecnicamente un stato HTTP, ma ne valeva la pena zero punti. Ovviamente, non si è dovrebbe conoscerli. PUBBLICO: E 'una vera e propria? HANNAH BLUMBERG: E 'un vero uno, ma non significa nulla. È solo uno scherzo. Popolo di Internet sono divertenti. MARIA ZLATKOVA: Grandi domande, ragazzi. Qualsiasi altra domanda? PUBBLICO: Che cosa è l'errore interno del server? MARIA ZLATKOVA: Interno Errore del server solo significa che sei stato incapaci di comunicare con il server per qualche motivo. Quindi non è necessariamente qualcosa che ha a che fare con il cliente o qualcosa del genere. Io non conosco nessun esempio specifico che siamo andati oltre a spiegare, ma sì. HANNAH BLUMBERG: Certo. Così, per esempio, come facciamo dici si stava lavorando mashup e un server di Google è andato giù per un po ' ragione, un'interruzione di corrente, diciamo. Sarebbe un server interno errore o una sorta di-- come te non sarebbe ottenere una risposta indietro. MARIA ZLATKOVA: Sì. E 'solo quando si è incapaci di comunicare con il server per qualche motivo perché di farlo andare verso il basso o qualche altra ragione. Così saltare in PHP. PHP, a differenza di HTML, è un linguaggio di programmazione. E abbiamo iniziato ad usare perché è molto utile per lo sviluppo web. In primo luogo abbiamo usato in CS50 Finanza. E aiuta fondamentalmente ci portano insieme questo markup, la progettazione, e il modo in cui utilizziamo le informazioni realmente per visualizzare le cose su una pagina web. Così lo stesso PHP significa PHP Hypertext Preprocessor, quindi è un backnorym ricorsivo di per sé. E l'apertura di tag per PHP che la sinistra e le frecce giuste con i punti interrogativi e php. Quindi abbiamo già visto un sacco di esso. Ora, stiamo solo andando ad andare oltre alcune delle cose di base su di esso. Quindi, con PHP, la variabile nomi iniziano con il simbolo del dollaro. Noi non specifichiamo, ancora una volta, una variabile di tipo più. Proprio come abbiamo fatto con C, non abbiamo bisogno di farlo. Possiamo fare un mucchio di diverso roba con le variabili. Possiamo mettere insieme da loro concatenando con la notazione punto, che non siamo riusciti a fare in C di nuovo. Ancora una volta, abbiamo un po 'più versatilità con PHP in termini di variabili. Ancora una volta, non abbiamo una funzione principale. E PHP è interpretato al contrario di compilazione, Quindi, solo come abbiamo fatto per i file C, non dobbiamo farlo per PHP. Ma piuttosto, il modo in cui la lingua è gestito da sé, viene interpretato. E poi debolmente tipizzato significa solo che noi non c'è bisogno di specificare una variabile tipo e i tipi di variabili si intendono in fase di esecuzione. PUBBLICO: Ma che cosa hai fatto dire con la concatenazione di punti? MARIA ZLATKOVA: Certo. Quando vogliamo mettere le cose together-- quindi se abbiamo avuto qualche variabile aveva il valore di 3 e abbiamo avuto un'altra variabile che aveva il valore di stringa potremmo mettere insieme le variabili mettendo un punto tra loro e loro concatenazione. O potremmo creare un chiamato nome della variabile e mettere insieme da concatenare due stringhe. Quindi, se avessimo una stringa in doppio citazioni e abbiamo messo un punto dopo che, e poi abbiamo avuto un'altra stringa, che creerebbe una stringa del tutto. PUBBLICO: OK. MARIA LETTONIA: Was chiaro? PUBBLICO: Sì. MARIA ZLATKOVA: OK. Sì. PUBBLICO: Quando si dice interpretato piuttosto che compilato, stai parlando non fare hanno bisogno di essere il più specifico quando si tratta di PHP vs C? MARIA ZLATKOVA: Quando si dice interpretato in contrasto compilato, cosa intendiamo? Quindi questo significa che non abbiamo bisogno di file eseguibili per eseguire PHP. Vuol dire che funziona come va. Questo fa senso? Un po 'di più. HANNAH BLUMBERG: Così si può pensare di un interprete come un altro programma che è responsabile per andare riga per riga con PHP ed effettivamente eseguito, a differenza per compilarlo tutta una questione di binario. In realtà non significa nulla su how specifico abbiamo bisogno di essere. Abbiamo ancora bisogno di essere precisi, e non lo facciamo dimenticare la virgola, e assicurarsi che avete il vostro segno di dollaro, e cose del genere. Bella domanda. MARIA ZLATKOVA: Sì. Quindi, linea per linea, come invece di con file C, dobbiamo fare tutto il finale prima di poter effettivamente eseguirlo. Questa è la differenza principale. Ma ancora una volta, non possiamo davvero essere meno specifici. Così gli array in PHP rappresentano in realtà una mappa ordinata. Quindi i valori array associati ai tasti. I due modi per dichiarare un array, basato su questa sintassi, possiamo essere più esplicito nel dire che abbiamo un array e abbiamo questa key1 che mappa questo valore1, chiave2 che mappa valore2. Oppure possiamo semplicemente creare un array che contiene i valori si e quindi le chiavi sono inteso in modo. Tutte le domande su questo? Pubblico: Quale sarebbe il chiavi essere nel secondo esempio? 0, 1, 2, 3? MARIA ZLATKOVA: ad esempio, è solo le chiavi di questo non lo fanno necessariamente fare la differenza. Hanno appena definire come si può utilizzare i valori all'interno di esso. Quindi, se avessimo un foreach ciclo in PHP che avrebbe ci permettono di passare attraverso tutti i valori, possiamo passare attraverso tutti i valori, anche se avessimo o non avevamo definito una chiave specifica all'interno del sito del sintassi precedente. Quindi, anche con questo tipo di array, abbiamo potuto ancora hanno un ciclo foreach che attraversa ogni dei valori nella chiave nell'array. Così la sintassi di un foreach cappio, iniziamo con una serie. Questa variabile $ arr è la nostra gamma attuale che abbiamo definito nella diapositiva precedente come valore che va letteralmente attraverso ciascuno dei valori, indipendentemente dal fatto che abbiamo avuto una chiave o meno. E allora possiamo fare qualcosa con il valore all'interno del ciclo foreach. Così ancora una volta, se avessimo un array come questo qui created-- così abbiamo la chiave di foo e il valore di bar, la chiave di baz e il valore di qux-- possiamo avere un ciclo foreach che passa attraverso matrice come valore della chiave e poi fare qualcosa con la chiave e / o il valore. Ma non lo facciamo necessariamente sempre avere un foreach loop che passa attraverso matrice come mappa chiave per il valore. Siamo in grado di passare attraverso la matrice ciclo foreach come valore. HANNAH BLUMBERG: E penso che a-- era la tua domanda, cosa è l'indice implicito? PUBBLICO: Kinda. MARIA ZLATKOVA: Oh. HANNAH BLUMBERG: Sì, sì. Quindi, fondamentalmente, se non si specifica una chiave, che sta per essere 01. MARIA ZLATKOVA: Sì. Proprio come con C, è pari a zero indicizzati se non si specifica una chiave. PUBBLICO: Siamo spiacenti. Potresti provare a parlare un po 'più forte? Sto avendo un po 'di problemi nel sentire tutto. MARIA ZLATKOVA: mi dispiace. Si, certo. Quindi vuoi me per andare oltre questo di nuovo? O è questo-- PUBBLICO: Così il slide-- precedente se si può solo tornare indietro per un secondo. MARIA ZLATKOVA: Certo, mi dispiace. AUDIENCE: Così il secondo matrice qui non lo fa sembrano avere un valore a chiave, una specie di [? causalità. ?] MARIA ZLATKOVA: Giusto, giusto. PUBBLICO: Quindi, come funziona quando si dice che è tutto o niente. Per me, che sembra un [? pippo?] già. MARIA ZLATKOVA: Sì, sì. Quindi, di nuovo, questo è un mappa ordinata in questo senso che non vi sono compresi, per esempio, gli indici qui può essere inteso come 0, 1, 2, 3. Ancora una volta, questo è avendo quelli indici è il nostro equivalente di avere tasti mappati sui valori. Quindi, se la nostra chiave era 0-- dispiaciuto. HANNAH BLUMBERG: No, C'è gesso qui. In realtà è davvero bello. MARIA ZLATKOVA: E 'fantastico. OK. Quindi, di nuovo, $ arr 0 sarebbe la chiave per il valore 1. 0 sarebbe la chiave per il valore 1. PUBBLICO: Mi dispiace. E 'invisibile. HANNAH BLUMBERG: Va bene, non importa. Gesso era una cattiva idea. Lo porto indietro. Si può pensare di chiavi come 0 viene mappato sul valore 1. MARIA ZLATKOVA: Sì. Quindi questo è 0, questo è 1, 2, 3. Questi possono essere le chiavi. Si può pensare a loro as-- sì. Così, invece di avere chiavi esplicite, sono sorta di intesa come gli indici a partire da 0. Il gesso non ha aiutato. Già. Destinatari: per il ciclo foreach, se volessimo visualizzare il valore di come, sarebbe solo indice automaticamente a 0? MARIA ZLATKOVA: Sì. Andrebbe attraverso ciascuno dei valori. PUBBLICO: [incomprensibile] come 0 o vorrei che semplicemente fare 0? MARIA ZLATKOVA: Avresti dire come simbolo del dollaro e quindi qualche nome variabile, un valore. PUBBLICO: [incomprensibile]. MARIA ZLATKOVA: Siamo spiacenti? PUBBLICO: Scusa, sono solo cercando di ricordare. Come l'hai fatto, se si può fare automaticamente l'indicizzazione è solo 0 di? MARIA ZLATKOVA: Così come l'hai fatto se non aveste nomi delle chiavi specifiche? PUBBLICO: Sì. MARIA ZLATKOVA: Si sarebbe solo define-- solo dire voi stessi come un nome. Quindi nel tuo pset, ragazzi potrebbero ricordare $ row foreach da $ righe, abbiamo creato noi stessi questo $ riga dicendo vogliamo andare attraverso la fila come $ righe. Anche se non abbiamo avuto questo $ esplicito righe definiti, possiamo solo andare a dicono che questo può essere la nostra chiave, e solo passare attraverso ognuno dei valori. PUBBLICO: Quindi è il valore di una nuova variabile stiamo creando per memorizzare [incomprensibile]? MARIA ZLATKOVA: Quindi non è intrinsecamente una nuova variabile. È una variabile che fa riferimento alla all'interno della matrice a ciascuno di essi. HANNAH BLUMBERG: E ' un nuovo nome di variabile. MARIA ZLATKOVA: Sì, si tratta di un nuovo nome di variabile, ma non è inherently-- sì. E 'solo una nuova variabile che si può fare. Così appena come abbiamo fatto noi $ remare da $ righe, righe era un nuovo nome di variabile che abbiamo potrebbe creare nel nostro ciclo foreach. Essa non deve preesiste prima. PUBBLICO: Potrebbe passare attraverso la logica per ciascuno, usando l'esempio ci? MARIA ZLATKOVA: Mhm. Oh scusa. Ecco l'esempio. Certo. Quindi per ogni array-- così questo significa andare a questo array come chiave value-- che sta andando passare attraverso questo array e prima andare a prendere foo, il foo chiave e la barra di valore. E poi sulla seconda iterazione del ciclo for, che sta per passare attraverso e prendere il baz chiave e il valore qux. E poi si può fare qualcosa con uno di essi o entrambi. AUDIENCE: Così l'idea che sta dietro avente un punto chiave per il valore, che cosa si finisce per l'accesso? MARIA ZLATKOVA: Qual è l'idea di avere una punta chiave per valorizzare? E 'solo un'altra convenzione, un altro modo di passare attraverso la matrice ed essere in grado di accedere sia alla chiave o il valore o di entrambi e li usa. PUBBLICO: Qual è il ruolo per il ordinare che il foreach viene eseguito in? Quindi, se dovessimo aggiungere elementi all'array tardi, sarebbero quelli essere i primi chiamato nella matrice foreach, o sarebbe più tardi? MARIA ZLATKOVA: Allora, qual è l'ordine che il foreach ciclo passa attraverso un array in? Si passa attraverso il primo elemento all'ultimo elemento, all'ultimo elemento aggiunto. Se si aggiungono gli elementi in seguito, avrebbero essere accessed-- i primi elementi sarebbero accedere come prima elementi dell'array, e poi devi andare attraverso ciascuno dei gli elementi come una sorta di ordered-- non un ordinata, ma il modo in cui essi sono stati messi in matrice. PUBBLICO: così nuovi elementi sono aggiunti più tardi? Così stanno added-- essi saranno il ultimi in [? iterazione. ?] MARIA ZLATKOVA: Nuovi elementi can-- fondamentalmente, quando vengono aggiunti nuovi elementi, essi vengono aggiunti alla fine della matrice? PUBBLICO: Sì. MARIA ZLATKOVA: Credo di sì. Sì. E poi con il ciclo foreach, dopo aver aggiunto nuovi elementi e si passa attraverso di loro, i nuovi elementi sarebbero essere accessed-- il nuovo elemento, se è aggiunto scorso, sarebbe accessibile scorso. PUBBLICO: Si può solo dare un esempio di qualcosa che [incomprensibile] con qualcosa di valore come [incomprensibile] o valore, Come come si sarebbe formato? MARIA ZLATKOVA: Certo. Posso dare un esempio di ciò che vorremmo fare con il valore? Così che cosa voi ragazzi potrebbe avere familiarità con è che siamo passati attraverso una serie e fondamentalmente stampato ciascuno degli elementi, per esempio, come parte di un elenco ordinato o qualcosa che. Questo fa senso o vogliamo a-- PUBBLICO: Possiamo stampare questi valori fuori? MARIA ZLATKOVA: Sì, potremmo stampare e poi fondamentalmente $ valore perché in tale valore specifico, ci sarebbe stampare il valore all'interno di esso. Quindi, se fossimo alla nostra prima iterazione di esso e abbiamo stampato $ value, saremmo stampiamo bar. PUBBLICO: sono ci sono anche per loop in PHP o solo loop foreach? MARIA ZLATKOVA: Non c'è anche per i cicli in PHP. E la loro logica è per lo più il stesso di quello che siete stati abituati. PUBBLICO: Quindi il suo valore è nullo. MARIA ZLATKOVA: E 'come la stessa. Già. PUBBLICO: Sto solo andando a chiedere. Quindi, quando si dichiara un array, non è necessario per dire che dimensione sta andando essere, il che significa che si può solo aggiungere e togliere elementi [incomprensibile]. MARIA ZLATKOVA: Yup. Sì. Di preciso. Quando si dichiara un array, abbiamo non c'è bisogno di dire che cosa dimensioni, è, in modo che possiamo solo aggiungere elementi su di esso in seguito pure. Altre domande? Così portando PHP e HTML insieme, ciò che abbiamo seen-- bene, per esempio, in questo esempio, abbiamo un modulo HTML che dispone di un campo di input. E il campo di input è solo nome e poi ha un pulsante Invia. E quando si preme il Submit Pulsante, nel nostro file hello.php, perché il metodo per la forma è ottenere, si può accedere a tutto ciò che è nome da questo ottenere variabile globale che è-- la sintassi perché è $ _GET. E poi siamo in grado di accedere in qualsiasi input dell'utente all'interno di quella forma per nome specificando il nome di quel campo. Tutte le altre domande o qualunque domande su questo esempio specifico? PUBBLICO: Dove si trova il PHP? MARIA ZLATKOVA: Qui. Quindi questo è il nostro tag di apertura per il PHP. PUBBLICO: Oh, giusto. MARIA ZLATKOVA: Sì. HANNAH BLUMBERG: Il = è stenografia per questo è PHP e proprio eco. PUBBLICO: Oh. MARIA ZLATKOVA: Sì, mi dispiace. Avrei dovuto chiaro. HANNAH BLUMBERG: Stampa. MARIA ZLATKOVA: E 'solo la funzione di che ci permette di stampare qualcosa. Grande domanda. Così going-- sì. PUBBLICO: ci sarà abbastanza un po 'di codifica manuale di PHP e HTML il quiz 1? MARIA ZLATKOVA: Ci può essere un buona dose di interpretazione PHP e HTML, non necessariamente come una quantità enorme di codifica, anche se potrebbe essere necessario scrivere un ciclo foreach, però, un ciclo for. Qualsiasi delle anse che coprire qui è un gioco equo. E questo è in gran parte di esso. HANNAH BLUMBERG: mi sarebbe disposto. Nello stesso modo in cui vi abbiamo chiesto di scrivere un sacco di funzioni C su quiz 0, Sarei disposta a fare stesso in PHP e JavaScript. MARIA ZLATKOVA: Sì. HANNAH BLUMBERG: Direi un little-- come noi non siamo andando a fare si scrive un enorme HTML pagina solo perché questo è un po ' noioso, ma si potrebbe avere parti. Questo è del tutto giusto gioco. Come piccola pagina HTML, totalmente fiera. PUBBLICO: OK. Che ne dite in JavaScript come bene? HANNAH BLUMBERG: Sì. Fair Game di JavaScript. MARIA ZLATKOVA: Sì. Questo è completamente gioco equo. HANNAH BLUMBERG: Otterremo a quello come 10 minuti. MARIA ZLATKOVA: SQL, ancora una volta, Structured Query Language. Esso permette in sostanza di gestire i dati in una gestione di database relazionali sistema. Ciò significa che solo in fondo che abbiamo da qualche parte per memorizzare alcuni dati che si potrebbe desiderare di utilizzare in un sito o in qualche altra forma. E poi abbiamo query per ottenere informazioni dal nostro database, oppure per inserire le informazioni in esse. Un sacco di UPDATE ones-- comuni, INSERT, SELECT e DELETE. Così per UPDATE, questo è la sintassi per l'aggiornamento di dati in un database. Aggiornando questa tabella denominata tavolo dicendo SET, siamo in grado di impostare alcuni valori in tutto righe alla parità di qualcosa d'altro. Così possiamo anche specificare alcune specifiche voci che vogliamo modificare e che può essere utilizzando WHERE. E possiamo specificare che vogliamo solo modificare alcune righe in cui la casa per, se abbiamo avuto un tavolo di studenti e tutti gli studenti avevano casa, così avremmo modificare solo alcuni valori dove una casa è uguale a Currier, per esempio. Per INSERT, possiamo inserire certi valori in una tabella. Quindi inserire dati nella tabella, e poi i valori, e poi tra parentesi, specifichiamo che i valori si desidera inserire. Così INSERT INTO tavolo, col1 e col2, il valore è val1 e val2. Quindi, questo inserisce in pratica una nuova riga nella una tabella contenente i valori 1 e 2 sotto le colonne 1 e 2. E poi stiamo per andare oltre un rapido esempio di come questo aspetto come in un po 'nostro database. Ma questa domanda finale che mi che stiamo andando ad andare oltre, SELECT, ci permette solo per selezionare i dati da una tabella utilizzare eventualmente in seguito. E il modo in cui lo facciamo è che appena memorizzarlo in una variabile. E allora possiamo eventualmente utilizzare di nuovo. Così SELEZIONA stella significa selezionare tutto. Questo è solo una scorciatoia per la selezione di tutti. FROM tabella WHERE, siamo alla ricerca per alcune specifiche condizioni, così dove la colonna è uguale qualcosa, per esempio. Se volevamo solo seleziona tutto da tavolo, questo seleziona solo tutte le colonne e tutte le righe da una tabella. E poi DELETE FROM tabella DOVE col uguale a qualcosa, questo solo elimina alcuni riga dal nostro tavolo dove abbiamo alcune condizioni specifiche. In questo caso, le condizioni sono colonna uguale qualcosa. Quindi, solo un rapido esempio di questo. Se abbiamo questo tavolo qui e noi inserirlo in una tabella, questi valori, che sarebbe inserire una nuova riga. E se avessimo incremento automatico, questo sarebbe basta incrementare nostro ID da 0 a 1 per 2. Se abbiamo selezionato tutto da parte degli studenti che, semplicemente restituisce tutti i campi e tutte le righe. Dove anno è maggiore o uguale a 2016, che sarebbe solo tornare Hannah e me stesso. E poi se abbiamo appena selezionato id anno e l'anno da parte degli studenti dove la casa è Cabot House, che sarebbe, ancora una volta, tornare Hannah e me stesso. Poi se abbiamo cancellato dagli studenti dove nome è uguale a Rob, che sarebbe cancellare l'intera riga. E poi se si imposta la nome, studenti UPDATE Nome SET equivale a Daven DOVE casa è uguale Cabot House, che sta per andare a le righe e quindi aggiornare il nome. E poi un paio di tipi di dati SQL sono CHAR, VARCHAR, INT, e FLOAT. Si tratta di gioco equo. Vorrei andare di nuovo e assicurarsi di sapere e li hanno sul foglietto, ciò che ciascuno di quei personaggi sono stati utilizzati per, cosa li usato sui vostri pset, e assicurarsi che si ha familiarità e comodo con dover scegliere da diversi tipi di dati in vostro pset. Sì. PUBBLICO: Che cosa è stato memorizzato quel tavolo? Gia ', in cui è memorizzato questo tavolo? MARIA ZLATKOVA: Beh, in questo momento, non è memorizzato. In ogni caso, in cui è memorizzato questo tavolo? Ma può essere memorizzato in un database SQL. PUBBLICO: E dove è il database SQL? Nel computer, linea da qualche parte, il server? MARIA ZLATKOVA: Può essere un numero di cose diverse. HANNAH BLUMBERG: Abbiamo interfacciato con Tabelle SQL per lo più con phpMyAdmin. Così abbiamo potuto chiedere un server memorizzarli per noi. Potremmo memorizzare sul nostro computer. MARIA ZLATKOVA: Dipende solo su come vuoi farlo per te. Ma abbiamo conservato li, come Hannah accennato, su phpMyAdmin, che è in linea. E poi il modo in cui usiamo PHP e SQL, noi conservarlo in qualche variabile quello che abbiamo interrogato per. Quindi, se Seleziona tutto dal storia dove user_id è uguale al ID di sessione, che avrebbe selezionare tutte le righe per la persona specifica che viene registrato nel dalla storia tavolo e ordinarli in righe. Un 'interessante da sapere è che la funzione di query di CS50 protegge contro i tag di SQL injection. Questo significa solo che si assicura l'input che viene inserito è corretto e che la persona che sta entrando ingresso Non sta cercando di inserire qualche maligno codice a uno cadere nostre tavole o cancellare tutto all'interno del nostro database. Una rapida panoramica della Modello Model View Controller, è solo un modo di organizzare e pensare a codice. E 'ancora una volta, un paradigma di progettazione. Ciò significa che noi can-- ed è buona pratica separare parti differenti del nostro codice e quello che controllare in questi tre paradigmi. Così il nostro punto di vista è il più delle volte il nostro modelli, il nostro layout, il modo in cui che ci siamo posti come il nostro codice è. Questo è per lo più i nostri file CSS e il modo che abbiamo definito il disegno del nostro codice, fondamentalmente. Il nostro controllo è in gran parte quello che abbiamo fatto con i file PHP. Quindi, di nuovo, lavorando con il informazioni che abbiamo e definire come tale informazioni sono utilizzate, e poi passare le informazioni sia sulla la vista o il modello. E il modello, il modo in cui abbiamo state utilizzando è è stata la nostra base di dati, così dove la nostra informazione è memorizzata quindi ha qualche parte a vivere, con una delle caratteristiche codice che si riferisce al modo in cui che otteniamo che le informazioni o il modo che aggiorniamo tali informazioni. Così nel modello MVC, HTTP le richieste vengono inviate a un server web. Poi, le interpreta regolatore la richiesta da parte dell'utente e poi convalida l'input dell'utente. E 'opzionale che abbiamo il controllore comunica con un modello, quindi qualcosa come nostro database o qualche altra funzionalità che trasmette informazioni. E infine, il controllore passa informazioni sulla vista in modo che possa essere resa e che si può diventare visibile a qualsiasi persona l'accesso alla pagina web. Qualsiasi domanda? Eccezionale. Così ancora una volta, il modello, la sua funzione, di nuovo, è memoria persistente di informazioni, la gestione e l'organizzazione dei dati. E quello che abbiamo visto così di gran lunga è il database MySQL e tutti i file di dati che possono utilizzare. Vista, la presentazione di informazioni per l'utente, l'interfaccia utente, o l'interfaccia utente. E l'esempio di questo è HTML. E allora potremmo avere minimo PHP. Quindi un ciclo for che scorre sui dati che vengono stampati fuori è parte della vista, come opposto al regolatore. E poi un sacco di nostri file PHP rientrano nella categoria di controllo. Gestisce solo le richieste degli utenti e ottiene informazioni dal modello. Saltando nel Documento Object Model, questo solo si riferisce al modo HTML i documenti sono organizzati. E sono organizzati in un albero struttura che ha una gerarchia. Quindi, se abbiamo accesso a [incomprensibile] rappresentazione del documento, possiamo lavorare con il documento, come noi manipoliamo oggetti fondamentalmente. E per rendere questo un po 'più chiaro, quando abbiamo un sacco di nostra diversi tag rispondono per percorsi diversi nel nostro albero. E poi per questo esempio, avere il nodo documento di partenza. Abbiamo, dunque, il nostro nodo HTML che si divide in testa e il corpo. Head ha titolo e poi titolo contiene ciao, mondo. E il nostro corpo contiene solo ciao, mondo pure. Quindi tutte le domande su una delle cose che abbiamo coperto finora? E se no, Hannah sarà prendere il sopravvento con JavaScript. Eccezionale. HANNAH BLUMBERG: OK, fresco. Se qualcosa si presenta con PHP o HTML, o qualsiasi delle cose Maria coperto, possiamo sempre mettere in pausa. Stiamo facendo meglio su più volte, in modo impressionante. E proprio per tornare indietro molto velocemente a questa, se si guarda a ogni Esame anno passato, questo esce either-- ecco alcuni HTML, fanno di questo schema. Oppure ecco questo diagramma, fare un po ' HTML, quindi sicuramente pratica che. E poi questa è una garantita solo domanda che si può ottenere. Raffreddare. Quindi parliamo di JavaScript e come è un po ' diverso da linguaggi come PHP e C, le due lingue che abbiamo visto in precedenza. Così il numero uno, è liberamente digitato. Cioè come PHP, ma a differenza di C. E 'un linguaggio interpretato. Anche in questo caso, che è come PHP, a differenza C. E questo sta per permetterci di use-- esso funziona davvero bene con le pagine web. E 'intenzione di consentire di manipolare il contenuto e come appare e cosa fa. Stiamo andando a vedere un po 'di Ajax. Esso ci permette di comunicare in modo asincrono con diversi server e ottenere informazioni. E questa è la cosa che davvero separa Javascript da PHP e C è che è lato client. Sia PHP e C sono tipicamente sul lato server. Per la maggior parte, e quasi interamente quello abbiamo visto, almeno in questa classe, JavaScript agisce sul lato client, il che significa che il browser è in realtà responsabile per la sua esecuzione. E questo significa che non lo facciamo necessario interagire con il server. Quindi significa che può essere molto più veloce perché in realtà è solo che è Chrome, è Safari, è Firefox, qualunque cosa utilizzare effettivamente in esecuzione il tuo JavaScript. PUBBLICO: Cosa asincrono significa? HANNAH BLUMBERG: Ah, cosa non in modo asincrono significa? Grande domanda. Asincrono means-- bene, il contenuto in cui usiamo lo è, OK, abbiamo stanno creando una pagina web e abbiamo bisogno di ottenere alcune informazioni. Quindi, con l'esempio di mashup, alcune informazioni che si potrebbe desiderare è titoli degli articoli. Ora, noi could-- un'opzione è quello di farlo in modo sincrono e questo significa LET'S fermare, andare a prendere l'articolo, ottenere la schiena articolo, e poi rendering, ma che sarebbe molto lento. Questa sarebbe una brutta esperienza utente perché si sarebbe solo essere seduto lì in attesa di qualcosa da rispondere. Significa asincrono faremo continuare ad andare sulla nostra attività, il rendering della pagina, e ti invieremo una richiesta via Questo è il tipo di andare a accadere in background. Penso che usiamo l'esempio lezione di chiamare Rob e dicendo: Ehi, puoi guardare questo in su per me e tornare a me, in contrasto con appena me in attesa al telefono. Quindi significa asincrono succede in background lontano da noi in parallelo. Grande domanda. Qualunque altra cosa? Grande. Faremo saltare molto più in richieste asincrone con l'Ajax. PUBBLICO: Fa Javascript-- da dove viene cadere con il modello-View-Controller? HANNAH BLUMBERG: Grande domanda. Da dove viene JavaScript caduta con il modello-View-Controller? Hm. Immagino che possa fall-- quindi non solito fare piacerebbe squish in che paradigma, ma credo che vorrei dire, OK, così JavaScript in realtà sta per consentire di raccogliere dati, interpretare i dati, effettivamente fare cose significative con i dati. In questo modo, è molto simile a controllo. Ma è anche andando a permetterci di visualizzare le cose e le cose di stampa. In questo modo, è molto simile a vista. Già. Quindi è un po 'come in PHP dove può essere sia di tipo. Bella domanda. Qualunque altra cosa? Va bene, impressionante. Spostare a destra lungo. Vediamo quindi un esempio di come possiamo utilizzare JavaScript in uno dei nostri programmi web. Così io considero questo index.html con un mazzo di HTML. E la cosa che si vuole concentrarsi su questo tag script. E questo la dice, OK, voglio correre qualche JavaScript e qui è dove vive. Vive in hello.js. E molto simile a CSS, potremmo mettere JavaScript all'interno del codice HTML. Perché si potrebbe desiderare di separare fuori? Già. PUBBLICO: Più facile da riscrivere? HANNAH BLUMBERG: Sì. E 'più facile da usare attraverso diverse pagine web. Essa mantiene le cose più pulito. E 'solo una buona pratica. Eccezionale. Buona risposta. Così bene, quindi questo sta andando per essere il nostro index.html. E poi qui è la nostra piccolo piccolo file JavaScript. E tutto ciò che dice è vigile Ciao, mondo. Che cosa accade è quando questa pagina renders-- quindi se andate a qualunque sito web questo è-- tutto quello che sta per accadere è che sta per dire, OK, io sono andando a eseguire questo codice JavaScript. E questo codice JavaScript dice solo allarme Ciao, mondo. Quindi ho intenzione di ottenere questo accogliente piccolo pop-up. Raffreddare? Questo è un po 'come il nostro molto prima JavaScript programma, il nostro Ciao, mondo. Guardiamo un po 'di più su ciò che la sintassi di JavaScript sembra. E in particolare, confrontiamo a C e PHP, che abbiamo visto prima. In JavaScript, stiamo andando ad avere var, il nome della variabile, e quindi il suo valore attuale. E noi non specifichiamo un tipo, semplicemente come in PHP, ma molto diverso in C. Così, per esempio, se volessimo memorizzare il valore 50, in C, ci sarebbe da dire, ehi, C, io voglio un intero, Io vado a chiamare i, e il suo valore è di 50. In PHP, è un po 'più facile. Noi diciamo, ehi, io voglio una variabile chiamato i e il suo valore è 50. Molto simile, in JavaScript, abbiamo dire ehi, io voglio una variabile denominata i, il suo valore è 50. Ogni volta successiva che uso Io, non ho bisogno di scrivere var. E 'solo che da quel punto in poi. Allo stesso modo, in C, dove una volta diciamo int i, usiamo solo i. Raffreddare? Tutto ok. Passando alle reti, per fortuna, questi quasi Guardo exactly-- Penso che siano esattamente la stessa cosa cicli stanno andando a guardare come in qualcosa come C dove il vostro ciclo for sta per avere tre parts-- una inizializzazione, una condizione, e un aggiornamento. Un ciclo while, sembra esattamente lo stesso. Abbiamo appena diamo una condizione. E un do while, di nuovo, esattamente la stessa. Diamo una condizione. Diciamo che ho voluto iterare over-- Volevo fare qualcosa per cinque volte. In C, potremmo scrivere per init i è uguale a 0. i è inferiore a 5, i ++. L'unica differenza, in JavaScript, invece di dire int i è uguale a 0, diciamo var i è uguale a 0. Bellissimo. Questa è l'unica differenza. Tutte le domande di nulla di tutto ciò? Sì. PUBBLICO: Quindi, in PHP, è la stessa cosa, tranne ma come una variabile? O era un esempio var? HANNAH BLUMBERG: Sì. Così in PHP, sta andando per essere un segno di dollaro. Così sta andando a $ i eguali 0, $ i è minore di 5, $ i ++. Grande domanda. Ora parliamo di dichiarazioni di funzione. In C, quando abbiamo dichiarato un la funzione, abbiamo dato un nome e abbiamo dato alcuni parametri. E, all'inizio, abbiamo scritto il tipo. In JavaScript, tutto quello che hanno a che fare è scrivere la funzione di parola chiave che dice, hey, JavaScript, Sto per definire una funzione. In questo caso, si ha il nome somma. E ci vogliono due argomenti, xe y. Si noti che non ci interessa sui tipi di x ed y. E proprio come C, abbiamo questo ritorno parola chiave, in modo che possiamo fare qualcosa come ritorno xe y. E ora una volta che abbiamo scritto questo primo la funzione, possiamo usare somma ovunque. E questo è tutto bene. Una cosa veramente interessante di JavaScript che è molto a differenza di C è che le funzioni possono essere trattati come valori. Così possiamo fare qualcosa di simile qui dove Suppongo copro questo up-- Ho coperto la somma var part-- e abbiamo appena detto funzione xy è uguale ritorno x + y. Questo è ciò che sarebbe stato chiamato una funzione anonima. Si tratta di una funzione senza un nome. Considerando che tale dice funzione somma, bla, bla, bla, questo sarebbe solo dire la funzione. Ma ora anche se ho questa funzione anonima, che la funzione è in realtà solo un valore. Siamo in grado di trattarlo come un valore. Così siamo in grado di salvare in una variabile dello stesso modo abbiamo potuto conservare il 50 in una variabile. Quindi possiamo dire, va bene, voglio un variabile, si chiama somma, ed è questa funzione. Così queste due cose sono in realtà intenzione di fare la stessa cosa, ma la sintassi è un po ' diverso tipo e di una nota di divertimento. Già. PUBBLICO: Così si potrebbe chiamare un funzione che era anonimo dicendo: staffe somma 2, 5? HANNAH BLUMBERG: Sì. È possibile chiamare questo anonimo funzionano nello stesso modo. Fareste somma (2, 5) ;. Sarebbe del tutto bene. Se non ho fatto var somma uguale la funzione, se ho appena cancellato questo-- So che è sulla mia mano, ma finta ho cancellato questo-- poi tale funzione è una specie di appena andato. Non si può mai usare di nuovo perché non si dispone di un nome per questo. E 'difficile per riferirsi a qualcosa non si sa come chiamarla. Bella domanda. Già. PUBBLICO: Si può fare riferimento somma in altri luoghi con il valore di x più y? HANNAH BLUMBERG: Può voi sum riferimento in altri luoghi con il valore x più y? Io non sono del tutto sicuro di cosa vuoi dire. PUBBLICO: Così il vostro passato semi-anonimo funzione somma è uguale a questo funzione anonima, quindi somma è ora una variabile che si can-- HANNAH BLUMBERG: Giusto. Così somma è la variabile, ma è actually-- quindi somma è una variabile il cui valore è la funzione. Quindi è una funzione, che è di tipo una cosa strana per avvolgere la testa intorno da quando abbiamo giocato con C e non è possibile farlo in C. Ma ora possiamo chiamare sommare il Allo stesso modo potremmo chiamare somma qui. PUBBLICO: OK. HANNAH BLUMBERG: Sì. Bella domanda. Già. PUBBLICO: Quindi non usiamo il prototipi in PHP o JavaScript? HANNAH BLUMBERG: No, non è necessario utilizzare i prototipi, soprattutto in JavaScript. Così una pratica cosa negativa che sto andare a dire che non si deve fare è che non è necessario scrivere var i = 50. Si può solo iniziare a fare i = 50. E sarebbe solo fare i una variabile globale. E 'molto cattiva pratica di mai dire esplicitamente var i, ma è qualcosa che si può fare. L'interprete non è andando a urlare contro di voi. JavaScript è abbastanza simile, Puoi fare quello che vuoi. Oh scusa. Ce ne sono due. Nei pantaloni arancioni. Vai avanti. PUBBLICO: No, si va prima. PUBBLICO: No, stavo solo dicendo Non ho avuto la mia mano. OK. Quindi, se si dovesse chiamare quella prima volta, ora somma, noi lo chiamiamo allo stesso modo, X, y, come ogni singola volta? HANNAH BLUMBERG: Sì. Quindi questi due essenzialmente fare la stessa cosa. PUBBLICO: E qual è il vantaggio di utilizzare l'uno o l'altro? HANNAH BLUMBERG: Nessun vantaggio di utilizzare uno o l'altro. Volevo solo mostrarti due diversi pezzi di sintassi. Un sacco di volte in cui anonimi funzioni hanno uno scopo è se l'argomento ad un altro funzione dovrebbe essere una funzione. E vedremo che in solo un secondo con l'Ajax. Quindi, se questo non ha alcun senso, memorizzarlo nella parte posteriore della testa. Ecco dove un anonimo funzione potrebbe essere utile perché non è davvero la pena dandogli un nome dal momento che siamo solo intenzione di usarlo una volta. Già. PUBBLICO: Se x e y cambiamento più tardi su, si somma cambiare così? HANNAH BLUMBERG: Se x e y cambiamento in seguito, si somma cambiare così? Quindi, questo è in realtà io pensare qualcosa che è, ancora una volta, ci si sente proprio molto diverso da C. Questo non è un valore. Non è 5. E 'solo la funzione stessa. Quindi, non appena si dà parametri, allora ci troveremo a calcolare un valore. MARIA ZLATKOVA: E poi è possibile chiamare la funzione e usarla per ottenere un certo valore. HANNAH BLUMBERG: Giusto. Di preciso. Già. PUBBLICO: Quindi, se solo memorizzarlo nella variabile, come var x è uguale somma di due values-- HANNAH BLUMBERG: Sì. Quindi si può solo fare var sum uguale somma dei due valori. Già. Qualsiasi altra domanda? Già. Pubblico: Ma vorrei che confondere somma e la somma? Come se si chiama il vostro somma variabile, vuoi chiamare la funzione sum? HANNAH BLUMBERG: Mm. Mm. Se hai fatto qualcosa come, somma risulti somma 2, 5? PUBBLICO: Sì. HANNAH BLUMBERG: credo che sarebbe sovrascrivere il valore della somma. Così un altro interessante cosa su JavaScript è che una singola variabile può assumere su un mazzo di tipi diversi. Cattiva pratica. Non si dovrebbe fare qualcosa come quello che hai appena detto. Ma in C, se i viene impostata pari ad un numero intero, noi sappiamo che non è mai sta per diventare una stringa. Questo non è il caso in JavaScript. Sì, buona domanda. Qualunque altra cosa? Tutto ok. Fare tutto in perfetto orario. Mantenere in corso. Tutto ok. Se guardiamo un array in JavaScript, ecco un rapido esempio di un array di stringhe. E array possono crescere in modo dinamico. Non hanno un dimensione fissa allo stesso modo che fanno in C. Si può accedere al elementi con solo le parentesi quadre. Che sembra un po 'come PHP e un sacco come il C, dove si può dire, in questo caso, se volevo la parola JavaScript, vorrei non arr parentesi quadre con 0, 1, 2. E poi se ti ricordi in C quando abbiamo voleva ottenere la lunghezza di un array, è stato davvero fastidioso. Ma in JavaScript, super facile. Tutto quello che facciamo, .length. Dà le lunghezze. Questo è tutto. PUBBLICO: Che è semplice. HANNAH BLUMBERG: Sì, fa la vostra vita molto più facile. OK, non object-- lì. Oggetti in atmosfera JavaScript un po 'come le strutture in C e array associativi in ​​PHP. Quindi quello che abbiamo visto un molto è JSON, che sta per JavaScript Object Notation. Ed è fondamentalmente un modo di strutturare i nostri dati. Vediamo quindi un esempio, probabilmente il più facile. Quindi, ecco un esempio di un oggetto che memorizza la classe, CS50. E quando dico classe, intendo ovviamente, Non like-- sì, il corso, CS50. E vedrai che tutto nell'oggetto sta per essere contenuta tra parentesi graffe. E cominciamo ad associare i nomi di campo o chiavi con i diversi valori. Così si può iniziare a vedere come questo tipo di si sente come un array associativo in PHP. Così stiamo andando ad associare il campo o il nome della chiave, naturalmente, con la stringa, CS50. Stiamo per avere un istruttore. Stiamo per avere TF. Stiamo per avere il numero di pset e abbiamo intenzione di avere registrato. E una cosa interessante da notare è tutto queste cose hanno diversi tipi, e questo è tutto bene. Va bene per un oggetto, infatti, è probabilmente previsto per un oggetto avere una combinazione di stringhe e numeri e booleani e array e qualsiasi altra cosa si potrebbe vogliono avere all'interno del vostro oggetto. E notare che queste stanno per essere i nomi o le chiavi, e poi abbiamo appena impostarlo parità con un po 'di punti. PUBBLICO: Che cosa fa esattamente JSON significa? HANNAH BLUMBERG: Che cosa significa esattamente JSON significa? JSON solo l'acronimo di JavaScript Object Notation. E 'solo un modo di formattazione. Già. E 'un modo di formattare i nostri dati. In C, è struct. In PHP, è array associativi. In JavaScript, abbiamo oggetti. PUBBLICO: Quindi CS50 è un oggetto? HANNAH BLUMBERG: CS50 è l'oggetto in questo caso. Ora, come si fa in realtà l'accesso quei campi o modificare questi campi. Ad esempio, supponiamo abbiamo deciso che si voleva uno in meno pset questo semestre. Invece di nove, siamo solo andando ad avere otto. Come possiamo cambiare la situazione? Oh, modo sbagliato. Ci sono due modi che possiamo fare quello. Il numero uno è con il punto notazione e numero due è con la notazione parentesi quadra. Così, per esempio, se ha voluto cambiare o accesso il campo pset nel nostro oggetto CS50, quello che vorrei fare è CS50.psets, quindi il nome del punto dell'oggetto il nome del campo o il tasto. In modo molto simile, è esattamente equivalente a fare CS50, e poi tra parentesi quadre, p-set. Raffreddare? Già. PUBBLICO: Così è JSON tecnicamente JavaScript ancora, anche se negli pset noi separare fuori [incomprensibile]? HANNAH BLUMBERG: Certo. Quindi la domanda è, sono JavaScript e JSON equivalente? Così è la notazione JSON, fondamentalmente il modo in cui scriviamo fuori un oggetto da JavaScript. Quindi non sono esattamente la stessa cosa. Direi JavaScript, ci sono oggetti in JavaScript. JSON prende quegli oggetti e li stampa e li visualizza o li memorizza in un modo carino. Quindi JSON non è una programmazione il modo in cui il linguaggio JavaScript è. E 'solo la notazione per i nostri oggetti in JavaScript. Già. PUBBLICO: Così che cosa esattamente [Incomprensibile] completare? HANNAH BLUMBERG: Certo. Quindi, questo in realtà non fa nulla. Questo è solo un modo per accedere. Quindi diciamo che abbiamo deciso di cambiare il numero di set di problemi 9-8. Quello che facciamo è fare qualcosa come CS50.psets = 8 ;. Sì, grande domanda. Questo è solo per mostrarvi la sintassi. In realtà non fare qualcosa di utile. Qualsiasi domanda? Spostare a destra lungo. Quindi diamo un'occhiata a un rapido esempio di come JavaScript funziona perché ti ho detto che fa tutte queste cose interessanti e ci permette di modificare le pagine web. Andiamo in realtà vederlo in azione. Quindi prendere, per esempio, questo file HTML. E la cosa che voglio mettere a fuoco è questa particolare etichetta, che è un pulsante, con id search_button. E 'solo nella pagina. Così ora vediamo cosa possiamo effettivamente fare. Bene, supponiamo quando si fa clic su tale pulsante, vogliamo fare un alert-- si è fatto clic sul pulsante. Vediamo come possiamo farlo. Quindi window.onload-- questo non è qualcosa che hai visto in classe, quindi, Non avrà bisogno di sapere che per il quiz. Ma questo in pratica dice, OK, chiamata questa funzione quando i carichi finestra. Ecco, questo è solo tipo di codice di installazione. Non preoccupatevi tanto di questo. Quello che voglio mettere a fuoco è di qui. Diciamo var SearchButton uguale document.getElementById search_button. Quindi, come si può immaginare, Quello che fa è che dice, OK, andare a trovare l'elemento con ID search_button. E ora abbiamo che elemento reale e sono andando a memorizzare in un SearchButton variabile. Ed ora possiamo effettivamente utilizzare quell'elemento e modificarlo, o accedere ai suoi valori, Cose così. Possiamo effettivamente iniziare a impegnarsi con la pagina web. Così qui dire, OK, ora che ho quel pulsante, quando si fa clic, chiamare questa funzione anonima. Quindi questo è dove anonimo funzioni diventano utili. E cosa fa la funzione di fare? Beh, chiama proprio questo funzione di allarme e dice, si è fatto clic sul pulsante Cerca. Quindi cosa succederà se vado ovunque vive questo HTML e ho clicca il pulsante Prendo un po 'di fantasia allarme che dice si è fatto clic sul pulsante. Così le cose di concentrarsi su qui-- document.getElementById ottiene un particolare HTML elemento con l'ID dato. E ora possiamo impostare cosa dovrebbe accadere quando quel particolare elemento viene cliccato. PUBBLICO: Dobbiamo mettere tutto questo in? HANNAH BLUMBERG: Siamo spiacenti? PUBBLICO: Dobbiamo codificare fisicamente tutto questo? HANNAH BLUMBERG: Dobbiamo codificare fisicamente tutto questo? Sì. Non è questo tipo di fastidioso? Si tratta di un sacco di codice. PUBBLICO: Si potrebbe importare qualcosa. HANNAH BLUMBERG: Giusto. Potremmo usare qualcosa. E in particular-- oh, è mi dice che devo insegnare a sezione. In particolare, cerchiamo di utilizzare la libreria jQuery, perché quella era davvero lungo e davvero fastidioso e voglio essere in grado di semplificare e renderlo più breve e più facile scrivere. Così jQuery è una libreria JavaScript. Così JavaScript è programmazione lingua; jQuery è una libreria. E fa un sacco di cose più facili. Rende cambiando e attraversando un documento HTML molto più facile. Rende più facile la gestione di eventi. Rende l'animazione più facile e rende più facile Ajax. Quindi facciamo un salto in due queste cose adesso. Mi scusi. Prima di farlo, qualche sintassi di base. Questo è ciò che più chiamate a la libreria jQuery assomigliare. Usiamo questo dollaro sign-- nessun segno collegamento a PHP, solo inconvenient-- il nome di un selettore, dot, e quindi un'azione. Vediamo quindi alcuni esempi concreti di questo. Quindi questo è in realtà lo stesso codice dalla diapositiva evento. Quindi questa lunga, brutta cosa diventa questo molto più bello, più piccola cosa. Quindi cerchiamo di scomposizione. Questo dice, OK, jQuery-- questo dollaro sign-- jQuery, mi trovare la finestra. Ecco, questo è il selettore. Quando viene caricato, chiamare questa funzione. Ecco, questo è tutto dentro. OK. Fin qui tutto bene? Tutto ok. Ora, jQuery, mi trovare il cosa con ID search_button. E ciò che viene cliccato, chiamare questa funzione. E poi questa funzione di esattamente la stessa. Basta fare un po 'di allarme, si è fatto clic sul pulsante Cerca. Quindi è davvero bello. Condensa davvero e semplifica il nostro codice. Come facevo a sapere che è ID search_button e non come classe search_button? PUBBLICO: Hashtag? HANNAH BLUMBERG: Sì. Questo simbolo cancelletto, è proprio come CSS. Quindi ricorda, con i CSS, quando ha voluto selezionare qualcosa per ID, abbiamo usato il simbolo di cancelletto. E quando abbiamo deciso di selezionare qualcosa per classe, si usa il punto. Grande. Ha senso? Così jQuery dovrebbe solo rendere la nostra vita più facile. Già. PUBBLICO: Quindi sono un po 'confuso per come funziona la funzione anonima. Si fa il nome questo Anonymouse la funzione, funzione? Come si chiama? HANNAH BLUMBERG: Certo. Quindi la funzione è solo una parola chiave che dice, sto per definire una funzione. PUBBLICO: Oh, OK. HANNAH BLUMBERG: OK? E poi si passa come un argomento a-- diamo questo tra-- interiore per la funzione di clic. Quindi sì, in modo che la funzione, questa funzione anonima, diventa un argomento attuale. Quindi ricorda in JavaScript, abbiamo può trattare le funzioni come valori. PUBBLICO: Oh, OK. HANNAH BLUMBERG: Sì. Mi piace che "oh". Bello. Altre domande? Orario? MARIA ZLATKOVA: Good. Bene. HANNAH BLUMBERG: Awesome. Alcuni jQuery utili rapido. Non ho intenzione di andare attraverso tutti questi. Queste diapositive saranno up on-line un po ' più tardi, quindi è possibile controllare fuori un po 'più tardi. Ma in fondo, il generale modello tiene dove si dice, OK, ehi, jQuery, ecco la mia selettore e poi qui è un'azione. E si possono fare cose come l'accesso alla il valore di un modulo, accedere ad alcuni HTML, controllare ciò che accade quando l'utente invia un modulo, cose del genere. Sì. PUBBLICO: Così nel esame, stiamo andando ad avere bisogno di conoscere un bel po 'da la documentazione di jQuery. Quindi, dato che copiamo / incolla il jQuery documentazione al nostro foglietto, dove è la linea tracciata? Come quanti abbiamo bisogno di sapere? HANNAH BLUMBERG: Grande domanda. La domanda è in sostanza, dato che si non possono accedere alla documentazione jQuery durante il test, quanto si dovrebbe sapere? Non ci aspetteremmo a venire con qualche funzione random che ci si aspetterebbe di Google. Le cose che sono gioco equo sono lo farei dire solo tipo di sintassi generale, poter selezionare da ID e da class-- così come CSS. E poi le funzioni reali themself, ci sarà probabilmente dirà. Già. PUBBLICO: Quindi, quando si seleziona per classe significherebbe punto. HANNAH BLUMBERG: Sì, esattamente. Bene. Quando si seleziona per classe, sta andando da dot posto del cancelletto. Sì. PUBBLICO: Volete andare oltre la differenza tra la selezione per ID e per classe? HANNAH BLUMBERG: Certo. La differenza tra la selezione ID e selezionando per classe. Quindi, come ha detto Maria a po 'prima, ci può essere solo un elemento HTML con un dato ID, che classe, ci permette di raggruppare un gruppo di diversi elementi insieme, quindi le cose che sono correlati, ma non esattamente la stessa. Questo risponde alla domanda? Eccezionale. Sì. PUBBLICO: Che cosa succede se si dispone di più cose che sono nella stessa classe? HANNAH BLUMBERG: Cosa succede se si dispone di più le cose che sono la stessa classe? Così, per esempio, se siamo usando solo puro JavaScript, vorremmo fare qualcosa di simile document.getElementsByClass. E poi cosa che in realtà fa è restituisce un array di elementi. E si deve o iterare loro o trovare quello che si desidera. Non sta andando a dare un singolo elemento. Sta andando a darvi un array di elementi. Grande domanda. Qualunque altra cosa? Eccezionale. Quindi penso che se si ha familiarità con qualsiasi jQuery avete visto nel pset, si dovrebbe essere pronti per partire. Domanda? Oh, no. Devo proprio insegnare. Relax. Andrà bene. Prendo lì. Parliamo di Ajax. Così Ajax sta per essere a-- bene, cominciamo con ciò che essa rappresenta. Si tratta di un acronimo. E 'l'acronimo di Asynchronous JavaScript e XML. E XML è fondamentalmente sta per essere [Incomprensibile] con un tipo dei nostri dati. Ma non abbiamo effettivamente utilizzato XML. Invece, basta usare JSON. Quindi, fondamentalmente, è alcune data-- asincrono, JavaScript, e dei dati, in questo caso, JSON. E il nostro obiettivo, come abbiamo detto un po 'prima, è in grado di effettuare una richiesta, hanno che fare richiesta la sua cosa al sfondo, ma continua fare quello che intendevano fare. E poi, quando che l'informazione è pronto, poi ci incorporiamo esso. Quindi cerchiamo di vedere cosa questo in realtà sembra. E questo, si dovrebbe essere un po 'familiare dal pset8, quello appena disputato. Quindi, ecco un jQuery valida funzione che potremmo vogliono sapere about-- questo simbolo del dollaro. Così dice la funzione jQuery, GetJSON. E che questa funzione non fa altro che prende un URL e un po 'parameters-- quindi penso che nel caso di pset8, era come, l'URL è stato articles.php e la Parametri era go = codice postale. E dice, OK, fare una richiesta di questo URL con i parametri indicati. E questo succede solo. Quando finisce, è sia andando a completare con successo o sta andando a fallire. Quindi questo è l'equivalente di chiamata Rob e chiedergli di fare qualcosa. E poi quando si richiama, lui è uno per dire ho finito o non sono riuscito. Quindi, nel caso in cui tu sei fatto, si dice, OK, ho finito. E allora si chiama questa funzione. In questo caso, sarà un funzione che prende un po 'di informazioni. Quello che di solito interessa è dati, i dati che ci sono stati effettivamente tornati come conseguenza della chiamata GetJSON. E si può fare qualcosa con esso. Così, nel caso di pset8, abbiamo esposto come una lista. Fail sta per essere una funzione che si chiama, se la richiesta non riesce per qualsiasi ragione. E nel caso di pset8, abbiamo appena console.log esso. Tutte le domande su questo? Già. PUBBLICO: Possiamo solo utilizzare funzioni theta invece della funzione, textStatus, jqHXR. HANNAH BLUMBERG: Certo. Quindi sì, penso che in pset, abbiamo appena visto i dati di funzione. Quindi è solo the-- sì, OK. Questo è quello che abbiamo visto nel pset. Questo è totalmente bene. Questi sono solo se si voleva per estrarre ulteriori informazioni, queste sono le cose che si potrebbe ottenere da GetJSON. Bella domanda. Qualunque altra cosa? Già. PUBBLICO: Così GetJSON è Ajax? HANNAH BLUMBERG: OK. Quindi questo è il tipo di parte difficile. Si tratta di una funzione che consente jQuery di fare chiamate asincrone. E quelle chiamate asincrone, che è quello che abbiamo riferendo come l'Ajax. Già. Questo mi ha portato un sacco di tempo per tirare a parte quando ero studente. PUBBLICO: Si può dire che ancora una volta? HANNAH BLUMBERG: Sì. Posso dire che ancora una volta? Questa funzione GetJSON, è una funzione jQuery. E sta andando a fare una chiamata asincrona. E queste chiamate asincrone, abbiamo stato riferendosi a quelli come l'Ajax. Qualsiasi altra domanda? Abbiamo solo un paio di minuti dalla fine. E Maria sta per concludere con la sicurezza e poi andremo da quasi fatto. MARIA ZLATKOVA: Awesome, OK. Quindi questo è-- basta prendere un paio di secondi per guardare oltre questo. E questo non è qualcosa di veramente grande. E qualcuno può dirmi perché? Cosa sta succedendo in foo e maggio potrebbe potenzialmente causare qualcosa di brutto, e ciò che si chiama? Già. AUDIENCE: Se l'argomento che è è passato in più di 12 caratteri, potrebbe traboccare. MARIA ZLATKOVA: Giusto. Perfezionare. Che cosa è chiamato? Hai appena parlato. PUBBLICO: Buffer overflow. MARIA ZLATKOVA: Yup, overflow del buffer. Quindi questo è qualcosa che noi riferirsi a come buffer overflow. E vediamo che dentro di foo, abbiamo definito il nostro tampone, c, con una dimensione di 12. Tuttavia, in principale, non lo facciamo il check-in qualsiasi modo a tutti se il argv1-- in modo che è stato il secondo argomento. Non si controlla se il dimensione è opportuno. Quindi, se abbiamo avuto un utente malintenzionato soprattutto che ha messo in qualche argomento che era più di 12, e quindi potenzialmente al di là dei limiti di tale argomento, aveva qualche codice eseguibile che stava cercando di fare qualcosa di brutto con esso; allora questo, che cosa sarebbe successo, sarebbe ignorare il ritorno indirizzo della funzione foo, causando la funzione quando tornando per eseguire tale codice. E poi le cose cattive potrebbe accadere. Questo senso per tutti? E come possiamo proteggere contro questo? Eventuali suggerimenti? Fondamentalmente, all'interno di potenzialmente foo, come possiamo controllare per assicurarsi che questo non può accadere? AUDIENCE: Se la dimensione 12 è superato, si potrebbe allocare memoria aggiuntiva? MARIA ZLATKOVA: suggerimento è, allocare memoria aggiuntiva delle dimensioni superato. In realtà, siamo in grado di fare qualcosa di un molto più semplice di quello. Possiamo solo ottenere la lunghezza della stringa l'argomento che viene immesso, verificare se questo è meno o uguale a 12-- che è quello che vogliamo di essere perché non vogliamo ai oltrepassato i limiti del nostro tampone. E poi se non lo fa, noi può funzionare con l'argomento. E poi se lo fa, vogliamo davvero di Yello potenzialmente presso l'utente. Ma questo è il modo dovremmo farlo. Sì. PUBBLICO: Potresti spiegare memcpy reale veloce? MARIA ZLATKOVA: Oh, mi dispiace. Sì. Memcpy prende qualunque è-- dispiace, OK. Memcpy prende tutto ciò che è in bar, qualunque è passato sul foo come argomento della riga di comando. Così sta andando a prendere argv1. Argv1 si chiama bar qui. Così sta andando a prendere un bar e sta andando a copiarlo in c. PUBBLICO: OK. MARIA ZLATKOVA: E sta andando a copy-- il terzo argomento si riferisce solo a quanto sta andando a copiare in c. PUBBLICO: Ah. Quindi di questo copia tutto questo allora. MARIA ZLATKOVA: Sì, che sta copiando tutto. Sì. In primo luogo, ci assicuriamo che il bar non è uguale a null perché è un puntatore. Poi abbiamo la lunghezza della stringa di bar. Facciamo in modo che sia minore o uguale a 12. E allora perché abbiamo fatto in modo, possiamo in realtà memcpy ed essere sicuri che questo è OK. Qualsiasi domanda? Grande. Ho due domande vere o false. Qualcuno può dirmi subito se queste sono vere o false? Sì, è falso. Di preciso. Entrambi sono false. Quindi, utilizzando una sola password non è mai davvero una buona idea perché se qualcuno sa la password, possono solo accedere a tutti gli altri account. E poi le icone non fare nulla per garantire la sicurezza. Dovremmo cercare di solito per HTTPS invece di HTTP e l'URL. E alcuni altri tipi di attacchi che abbiamo menzionato, che David ha menzionato in conferenza, attacchi SQL injection. Abbiamo già visto che se la don't-- Funzione di query CS50 fa in modo che SQL non possono verificarsi attacchi di iniezione. Ma se non stessimo usando CS50, citazione, unquote "in ricerca", avremmo dovuto fare in modo che il l'input dell'utente non è in realtà un po 'di SQL query che causerà tutto nostre tavole per essere eliminato o qualcosa di brutto accadere con il nostro database. Dirottamento di sessione è un altro tipo di attacco ciò accade quando qualche cattivo persona usa la sessione un po 'della vittima ID per accedere alle informazioni di accesso. Così un banale esempio di ciò è come se abbiamo un computer pubblico, poi la persona cattiva accede e poi hanno cookie che vengono salvati. E i cookies non cambiano per la sessione. Poi abbiamo la vittima andare in e poi accedere al sito web. I cookies non cambiano per un certo sessione. E poi la vittima accede al il sito e poi se ne va. E poi la persona che va indietro possono poi utilizzare ancora il loro ID di sessione per accedere alle informazioni. Ecco, questo è un esempio di come sia potuto accadere. E poi io non mi preoccuperei troppo di codice o qualcosa di specifico come quella che potrebbe causare questo, ma avere una sorta di idea di cosa le variabili coinvolte in questo sono. E poi manipolando intestazione dati è un altro tipo di attacco che ha David ha parlato. E si riferisce solo cosa può accadere quando la risposta, l'HTTP risposta all'interno della nostra testata non è sterilizzata correttamente. E una delle fields-- per esempio, se qualcuno sovrascrive uno dell'intestazione I valori di contenere qualcosa di più di cosa dovrebbero contain-- e realtà contenere, per esempio, un 200 Codice di stato OK, allora potrebbero potenzialmente fare dannoso le cose quando non si suppone che. Ma io non mi preoccuperei troppo molto circa il codice specifico che potrebbe causare questo, appena sorta di comprensione cose di alto livello come quella. Penso che questo sia tutto che dobbiamo coprire. Incredibile. Chiunque ha tutte le domande su qualsiasi delle cose che abbiamo coperto? Sì. PUBBLICO: Così una sorta di domanda più logistico. E 'il contenuto principalmente focalizzata sulle cose dopo il quiz 1? MARIA ZLATKOVA: So domanda è, è il contenuto principalmente focalizzata sulle cose dopo quiz 1? Così l'attenzione è rivolta dopo quiz 1, ad eccezione che abbiamo bisogno di concentrarsi sulle cose a pset5 e un sacco di strutture di dati che abbiamo coperto. E non si può dire che siamo può ignorare nulla prima che, dato che costruisce su di essa come bene. Quindi concentrarsi su questo, oltre a materiale pset5 come compresi collegate liste, pile, code e tutto Hannah è andato oltre. HANNAH BLUMBERG: Giusto. Sì, siamo andati oltre tutte le cose C proprio all'inizio molto rapidamente. Ma assicuratevi di rivedere tale. Torna indietro e guardare il quiz 0 recensione. Un paio note più logistici, proprio mentre noi abbiamo la tua attenzione. Stiamo per avere gli orari d'ufficio sia il Lunedi e Martedì sera. Stanno andando essere nel DM 119. Questo è tutto sul sito, così se non si sente, non preoccuparti. MARIA ZLATKOVA 8:30 alle 11:00. HANNAH BLUMBERG: Sì, dalle 8:30 alle 11:00. Ci saremo. Saremo lì per rispondere alle domande. E 'piuttosto freddo e divertente. Voi potete fare tutte le domande che avete sul quiz 1. E quiz 1 è in Mercoledì, quindi buona fortuna. Se avete domande, forse venire a parlare con noi quassù uno-contro-uno. Raffreddare. Grazie mille. MARIA ZLATKOVA: Grazie mille, ragazzi. PUBBLICO: Yay. [APPLAUSI]