[RIPRODUZIONE DI BRANI MUSICALI] DAVID MALAN: Questa è CS 50, e questo è l'inizio della settimana nove. E quello che abbiamo pensato di fare oggi non è solo chiudere il capitolo della scorsa settimana materiale in cui ci siamo concentrati sul server di programmazione web lato con PHP e SQL, alcune cose del database. Parleremo un po 'di oggi sicurezza e quindi transizione verso una programmazione lato client lingua conosciuta come JavaScript. Ma prima, un po 'di redenzione. Si può ricordare che il Mercoledì, ho indicato di scrivere un sito web che ha preso in ingresso dell'utente da un HTML forma che poi memorizzati che i nomi di input dell'utente, telefono numeri, e cellulare vettori nel database. E poi ho avuto un po 'di comando script della riga di scritto in PHP che avrebbe dovuto scorrere sopra le righe nel database e inviare messaggi di testo. Nonostante diversi, diversi tentativi, abbiamo non ha ottenuto che il lavoro alla fine. Così ho passato questa intera settimana di lavoro su tale codice per ottenere noi oltre il punto dove avevamo lasciato, in base al quale tutto Ho ottenuto entro la fine del Mercoledì è stato questo il messaggio di testo da Margo come ho lottato, seguito da un messaggio di testo da un altro compagno di classe, Hai questo David. Seguito da questa, meravigliosamente incoraggiante. Mantenuto in corso, molto incoraggiante. Ho quasi preso fino then-- e questa è la nota che abbiamo finito il Mercoledì. E poi in realtà forse il mio preferito, un attimo dopo, questo è venuto in. Accidenti Diretta Streaming. Così oggi, possiamo risolvere questo problema con una rapida guardare a ciò che ho fatto da allora. Quindi tutto questo codice è disponibile online da della scorsa settimana, otto settimane, codice sorgente. E vedrai che ho passato, e in realtà ho ripulito le cose un po '. Ho introdotto un paio di altri caratteristiche di un database SQL. Per esempio, piuttosto che basta fare portatore di var char come penso che ho fatto al volo la settimana scorsa. Io invece definito come quello che chiama un enum. E alcuni di voi avranno visto questo come abbiamo esplorato C. Enum è in realtà una caratteristica di C in cui è possibile elencare tutta una serie di costanti e assegnare loro valori automatici, come uno, due, tre, quattro senza dover codici principali. Così SQL supporta la stessa, per cui se si dispone di un campo di database che solo vuole prendere su una delle finita valori, si può letteralmente specificarlo come ho fatto lì per quattro popolari vettori cellulare degli Stati Uniti. Così ho fatto. E ho fatto una serie di modifiche come bene, il più importante dei quali era quello di ottenere e-mail lavorando perché il richiamo, che questo programma si basava su cui generalmente chiamato una mail a Gateway SMS, che è solo un modo elegante per dire che Verizon, e AT & T, e altre persone sostengono un server, per cui se riceve e-mail, si converte in SMS e invia un testo il messaggio ad un altro telefono. Quindi, se ho fatto questo correttamente, qui è una forma nuova e migliorata che sta per parlare con nuova e migliorata codice, che si può giocare con on-line. E, si spera, fare la mia telefono segnale acustico in un attimo. Quindi, prima, ho intenzione di digitare il mio nome. In secondo luogo, non mi va per farlo questa volta. Ho intenzione di fare Inspect Element. E questo è solo un piccola cosa così non lo faccio creare ore di post-produzione Lavoro come ho fatto l'ultima volta. Ci ora è il mio numero di telefono. Io seleziono Verizon. E qui, torniamo su questo microfono qui, e mirare questo a mio telefono qui. Io vado a fare clic su Registra, che dovrebbe auspicabilmente metterlo nel database. Ora ho intenzione di andare al programma a riga di comando, che richiamo è stato chiamato barra dot il testo, e incrocia le dita. Eccoci qui. [DINGS TELEFONO] [Applausi] DAVID MALAN: Quindi più divertente di questo-- è divertente, certo, se mi trovo in esso. Ma è più divertente, ho pensato che, se creato uno di quei momenti del cinema dove come qualcosa di veramente male è accaduto nel mondo, e come tutte le persone della NSA cellulari iniziano a emettere un segnale acustico con messaggi di testo avvertendoli di questo fatto. Così ho pensato che sarebbe provare per ricreare lo stesso qui, per cui non si utilizza un database, Io invece in anticipo ha scritto un programma che assomiglia a questo. Questo è un index.php-- e ho messo questo codice on-line come well-- che a quanto pare solo rende form.php, utilizzando un paradigma MVC stile che abbiamo parlare più in dettaglio nel set problema Sette. Quella forma è piuttosto semplice. E 'intenzione di sottoporsi a un file chiamato here.php via posta. Ed è a quanto pare intenzione di chiedere per un nome e un numero telefonico, e poi via del cosiddetto Selezionare il menu, è intenzione di darvi almeno quattro popolari vettori cellulare degli Stati Uniti, e quindi consentire di efficace le presenze cliccando qui. E qui, nel frattempo, sta per prendere in prestito parte del codice dall'ultima volta. E se proprio saltare questa, vedrai che non c'è un sacco di controllo degli errori. Ma la bellezza alla fine è che non stiamo scrivendo a un database di oggi. Stiamo mantenendo le cose semplici e semplice invio di spera un messaggio di testo tramite la funzione I ha scritto negli ultimi giorni di chiamata Testo, che è nelle funzioni. php, che è di nuovo disponibile on-line. Quindi, se si desidera partecipare a questo. Non stiamo andando a memorizzare nulla. Vai a questo URL qui in tempo reale. Non lo presenta appena ancora, ma cerchiamo di vedere se siamo in grado di avere uno di questi film momenti in cui il cellulare di tutti emette dei segnali acustici, si spera solo una volta quest'anno, a differenza del 2011 dove questo è andato terribilmente storto. E una volta che si va a questo indirizzo, si dovrebbe vedere una forma super semplice che se hai un nome, un telefono cellulare numero e un vettore cellulare che corrisponde l'elenco là, andare avanti e compilare il modulo. Ma non colpire presentare ancora. Il modulo sta andando a guardare come questo. Vai avanti e digitare il tuo nome, numero di telefono. Oop, qualcuno sta andando davanti alla curva. Va bene. OK, ognuno riempito il modulo. Questo dovrebbe funzionare su una telefono, anche, se si vuole. Va bene, Ai vostri posti, pronti, via. Hit qui. Che cosa? No. Giuro su Dio, ho provato questo più volte oggi. Hai capito? [VOCI interponendo] DAVID MALAN: OK, forse un errore dell'utente. Questo è due. Ha funzionato per due su un qualche centinaio, tre, quattro. OK, questo è un bene. Quattro su cinque per correttezza che ne dite. Quindi, quello che è appena successo? Quindi, presumibilmente, senza vedere il tuo schermi, perché potrebbe si sono errored? E 'probabilmente che eravamo solo cercando di fare troppe connessioni al server di posta di Harvard tutto in una una volta dallo stesso indirizzo IP. Sto solo cercando di indovinare da quando non l'ho fatto il lusso di test questo codice con alcune 300 persone in anticipo ma per ora rendersi conto che che almeno voglia hanno ottenuto il lavoro fatto questa volta. Va bene, e allora perché è questo tutto il più attinente a quello che sta succedendo? Beh in primo luogo, una rapida paio di annunci. Quindi uno, se vuoi partecipare Chang, e Nick, e gli altri a pranzo questo Venerdì, fare RSVP al solito URL lì. Se state pensando di concentrazione o fare una secondaria in CS, se sei al secondo anno, o matricola, o anche junior o senior, a questo punto e può ancora spremere nei corsi, rendersi conto che la scuola di ingegneria sta raccogliendo gratuitamente Ben e Gelato di Jerry e consigli questo Mercoledì poco dopo le lezioni alle 04:00 nel palazzo CS a Maxwell Dworkin. Se questo è troppo veloce sullo schermo, basta andare per cs50.harvard.edu per un Link all'evento su Facebook dove si possono vedere i dettagli. Nel frattempo, ho pensato di correggere un'altra cosa che ho preso una cantonata il Mercoledì. Risulta che ID di Mark su Facebook non era tre. Erano le quattro. Si scopre che ha avuto più di prova conti di quanto mi ricordano. Ma ciò che questo sembrava un'opportunità fare è tirare su un URL come questo. Così si scopre che Facebook ha un API, Application Programming Interface, che è un meccanismo in base al quale si può richiedere i dati di programmazione Facebook e tornare macchina le informazioni leggibili, non le pagine web ma il testo appena prima, qualcosa chiamato JavaScript Object Notation. E infatti, se dovessi visitare questo URL, e lo zoom, per impostazione predefinita, questo è Mark di pubblico informazioni accessibili. E il particolare interessante qui è solo che il suo ID è davvero, numero quattro, che io realizzato non appena ho fatto questo. È possibile farlo da soli se si sa il nome utente di Facebook se ne hai uno. Basta digitare in su cima c'è. E tutto questo non è privata. Sto solo facendo questo anche nella modalità in incognito. Quindi non sono nemmeno collegato. E si sta vedendo che io a quanto pare è stato il numero utente 6454 su Facebook, che non è troppo male in questi giorni. Quindi, in ogni caso, dove si può vedere ulteriori informazioni qui. E l'aspetto utile di che è che si potrebbe scrivere il proprio software in qualche modo integra dati come questo nella vostra applicazione. È possibile consentire agli utenti di accedere al vostro sito web, non utilizzando il proprio nome utente e una password, ma forse il loro login Facebook e ottenere informazioni anche dei loro amici, se approvare tali, o simili. Così notare che CS50, anche, ha alcune delle sue API, una per i dati di catalogo Naturalmente, un po 'per i menu abbracci in sala sale, tutte della edifici e luoghi nel campus abbiamo un API per oltre che è possibile interrogare in modo simile e ottenere dati testuali schiena che è possibile integrare in PHP o JavaScript, o anche, se meno comunemente, un C basa progetto finale. Infatti in anticipo per la finale progetto sono alcune pietre miliari. Hai ricevuto una email da noi l'altro giorno. Rendetevi conto che la proposta è dovuto il prossimo Lunedi. Non è necessariamente vincolante, ma si c'è bisogno di ricevere i vostri compagni di insegnamento l'approvazione prima di fare eventuali modifiche successivamente. E poi avanti sono un numero di altre pietre miliari. Quindi, per prendere in giro anche voi, con alcune possibilità, abbiamo un po 'di queste lampadine tonalità. E alcuni di voi ragazzi ora hanno un po ' di questi nella vostra stanza del dormitorio pure. E anche loro hanno una API. Così ricordare quelle settimane bulbi binari fa che Dan Bradley e Ansel Duff ha creato per noi. Hanno usato un software di interfaccia per questa lampadina, che al momento è inserito in energia elettrica e poi via wireless è collegato ad una piccola cosa chiamato il Ponte di quaggiù, come un piccolo router proprietario a questo particolare dispositivo. Ma si scopre se so come inviare messaggi HTTP, come tutti noi ora facciamo, Posso inviare un messaggio come questo per questa lampadina per attivare o disattivare o fare qualsiasi numero di altre operazioni su di esso. Si noti che non è arrivare, non è postare. C'è un altro chiamato put. C'è in realtà un paio di altri tali verbi. Ma notare c'è un percorso lì, API tagliare, tagliare nuovo sviluppatore, tagliare la luce, tagliare uno, ridurre drasticamente Stato. Questo è a quanto pare solo il percorso che l'azienda, Philips, deciso che si deve colpire con una richiesta HTTP se si desidera modificare lo stato della lampadina utilizzando HTTP 1.1. Poi notare la riga vuota. E poi, infine, quello che sembra tipo di un array di qualche tipo, Stati Uniti d'America sta per essere chiamato JavaScript Object Notation, o Jason. E quello che vedete qui è che ci sono tre coppie di valori chiave. Una chiave è chiamato. E il suo valore a quanto pare sta per essere vero. La luminosità è 128, che è una sorta di int. E allora è tempo di transizione zero, che è apparentemente quanto tempo sta andando a prendere per girare questa cosa. Così adesso questa lampadina è spenta. Ma se lo faccio esattamente questo-- lasciare andare a un po 'di foglietto che Dan istituito nel advance-- e ho intenzione di andare avanti e copiare il seguente comando. Curl, come alcuni di voi potrebbe aver spigolato su CS50 Discutere è un programma di utilità come ad esempio Telnet che è possibile simulare le richieste HTTP, in particolare mette. Posso inviare questi dati, in particolare quello che abbiamo appena ha visto un momento fa specificamente a questo URL qui. E poi Curl sta per gestire tutte le intestazioni necessarie e l'analisi di lì. Quindi tutto quello che devo fare è copiare questo in una finestra del terminale e quindi premere Invio. E la lampadina si accende. E questo è tutto sta attraversando il mio computer in modalità wireless in qualche modo fino al ponte, che viene poi a parlare con questa lampadina. Posso fare qualcosa di diverso. Posso fare questa cosa andare rosso per esempio. Posso per esempio fare questa cosa andare verde. Posso farlo andare blu. E notare in ciascuno di questi casi, tutto ciò che sto cambiando è il cosiddetto valore di tonalità a in realtà dargli un po 'di colore. Così mi permetta di incollare questo in pure. Ora è blu. E si può fare ancora di più elaborato cose where-- andiamo a verde. E potrei fare questo di Naturalmente con il mio codice. Ma anche la stessa API supporta le operazioni di funky in questo modo, che ora preoccuparsi noi per i prossimi 30 secondi. Ecco, questo è un assaggio di quello che si potrebbe fare con un API, questo coinvolge lampadine. Si noti che CS50 ha un paio paia di Google Glass se si desidera come affrontare qualcosa di simile quelle linee, Arduino Unos, che sono minuscoli computer, in sostanza, su un circuito poco che è possibile collegare fili e altre cose e, di fatto il controllo l'ambiente del mondo reale. E poi ci sono un paio di nuovi giocattoli che abbiamo. Questo letteralmente appena arrivato il altro giorno via e-mail, un Myo Armband. E ho pensato che è un modo per farti eccitato sui progetti che è possibile utilizzare con questo hardware sarebbe essere quello di giocare a questo breve clip che usano per prendere in giro la gente che stiamo ora vivendo nel futuro. [RIPRODUZIONE DI BRANI MUSICALI] DAVID MALAN: Quindi, nel giro di poche settimane, si Anche può essere che freddo in fiera CS50. Un altro dispositivo che avere un po 'di che siamo felice di prestito per i progetti viene chiamato un controller di movimento. Si tratta di un piccolo dispositivo USB si connette a un computer che consente di interagire con il vostro computer portatile, Mac o PC, come se tu avessi come un Xbox Kinect e in realtà fare movimenti fisici molto come vediamo in questo visione del futuro. [RIPRODUZIONE DI BRANI MUSICALI] DAVID MALAN: Quindi, anche se si dispone di idea di come qualcosa di simile potrebbe essere di fantasia o di lavoro a livello di hardware, non importa. Anche dopo pochi mesi di CS50, e la comprensione della programmazione più in generale, e programmazione web più di recente, e poi anche le API, e HTTP, avrete accesso tramite API software se si voglio prendere in prestito uno di questi dispositivi per parlare in realtà ad esso e non devono preoccuparsi di l'implementazione sottostante dettagli, completamente in linea con questo concetto di stratificazione un'astrazione che abbiamo visto tutto il semestre. Così anche durante il fine settimana, ha visto un paio di pezzi di notizie. Vai in primo luogo, andare a seminari, se si vorrei imparare qualcosa di più su qualsiasi numero di argomenti. Vedere l'URL lì. E questo è stato inviato a mi da Chang, che si sa, che è la stampa il nostro esercito di elefanti. Ed era un titolo come segue. Ho il terrore del mio nuovo televisore. Perché ho paura di trasformare questo cosa su e si sarebbe troppo. Quindi siamo ora al puntare nel semestre, troppo, dove anche se si dispone di il minimo di comprensione di come funziona il web, e HTTP, e di sicurezza, cose come questa dovrebbe iniziare a catturare l'occhio. Ma anche, capirai se queste cose sono o non sono minacce attuali. Così ho preso un paio di brani da questo articolo qui. E la storia è la seguente. Ora sono il proprietario del un nuovo televisore intelligente, che promette di consegnare in streaming contenuti multimediali, giochi, app, social media e internet navigazione, oh e TV troppo. L'unico problema è che sono ora paura di usarlo, dice l'autore. Si sarebbe, anche, se si legge attraverso il 46 pagina politica sulla privacy per il televisore. La quantità di dati presente raccoglie cosa è sconcertante. Si registra, dove, quando, come, e per quanto tempo si utilizza il televisore. Esso stabilisce tracking cookie, come abbiamo discusso, e fari progettati per rilevare quando si ha particolare contenuto visualizzato o un particolare messaggio e-mail se si desidera controllare la posta elettronica sul televisore. Registra le applicazioni che si utilizzare, i siti Web visitati, e come interagire con i contenuti, fare tutto questo tramite il televisore intelligente. Inoltre, yet-- creepier questo è il mio addition-- è dotato di una fotocamera con il riconoscimento facciale. Lo scopo è quello di fornire Controllo gesto per la TV e vi permetterà di accedere a account utilizzando il tuo volto personalizzato. Sul lato positivo, le immagini sono salvato sul televisore invece che caricato a un server aziendale. Sul lato negativo, internet collegamento rende l'intero TV vulnerabili agli hacker che hanno dimostrato la capacità di assumere il controllo completo della macchina. Più preoccupante, come se non fosse abbastanza intelligente, è il microfono. La TV dispone di una voce funzione di riconoscimento che consente agli spettatori di controllo lo schermo con comandi vocali. Ma il servizio è dotato di un avvertimento piuttosto inquietante. Si prega di essere consapevoli del fatto che, se le tue parole pronunciate sono personale o altri sensibili informazioni, che le informazioni sarà tra i dati acquisiti e trasmessi a terzi. Tutto chiaro? Non dire personali o sensibili roba di fronte al vostro televisore. Quindi, questo è in realtà per davvero. Ed è difficile non vedere se si andare a Best Buy o simili per i televisori in questi giorni. Sono tutti intelligenti in qualche modo. E che stanno ottenendo più intelligente e inquietante. E sono semplicemente la raccolta di dati in modi che abbiamo parlato e poi caricarlo tramite HTTP o qualche altro protocollo per alcuni server. Quindi questo era di un articolo di divertimento in questo sito on-line qui, che ha parlato di una particolare bug o un codice sbagliato che possiamo effettivamente legare nella discussione della scorsa settimana. Quindi, questo titolo è stato come segue, la storia va qui, Josh Breckman ha lavorato per un società che ha ottenuto un contratto di sviluppare una gestione dei contenuti sistema, o CMS come si chiamano, per un gran sito del governo. Gran parte del progetto ha coinvolto sviluppo di un sistema di gestione dei contenuti in modo che i dipendenti sarebbero in grado di costruire e mantenere il continuo cambiamento contenuti per il loro sito. Le cose sono andate abbastanza bene per pochi giorni dopo di andare in diretta. Ma il sesto giorno, le cose non andavano così bene. Tutti i contenuti sulla sito era completamente svanito. E tutte le pagine hanno portato al default, inserisci contenuto della pagina web. Ops. Josh è stato chiamato a indagare e ho notato che uno particolarmente fastidiosi indirizzo IP esterno aveva andata e cancellato tutti il contenuto di sistema. L'indirizzo IP non apparteneva in una certa all'estero degli hacker piegato a distruggere utile informazioni governative. Si decise di googlebot.com, Molto proprio web crawling spider di Google. Ops. Dopo un po 'di ricerca e di scrambling intorno per trovare un backup noncorrupt, Josh ha trovato il problema. Un utente aveva copiato e incollato alcuni contenuti da un pagina all'altra, compresa una Modifica collegamento ipertestuale per modificare il contenuto della pagina. Normalmente questo non sarebbe problema dal momento che un utente esterno sarebbe necessario immettere un nome e una password, ma il sistema di autenticazione CMS, il sistema di login, non ha preso in considerazione sofisticato di hacking tecniche di Google Spider. Ops. Come si è visto, Google Spider non fa uso di cookie, il che significa che si può bypassare facilmente un controllo per il viene registrato sul set dei cookie per essere falso. Inoltre non prestare attenzione a JavaScript, che normalmente richiedere e reindirizzare gli utenti che non è iscritto. Lo fa però seguire ogni collegamento ipertestuale su ogni pagina che trova, compresi quelli con Elimina pagina nel titolo. Ops. Che cosa significa questo in più termini tecnici ma abbastanza accessibili? Significa solo che tutto il loro sito web, avevano URL non dissimile da questa che si potrebbe vedere in problema impostare sette. Richiamo in problema impostare sette o conoscere nel problem set di sette che si sta sfidato, tra le altre cose, di vendere le scorte per conto degli utenti. Ma attuazione di tale funzione a titolo di ottenere tramite collegamenti ipertestuali nel vostro utente interfaccia, probabilmente non l'idea più intelligente perché se il sito è in qualche modo accessibile sia da un essere umano che sta cliccando in giro o comprare un bot come Google o di un ragno come si chiamano questo è solo scansione del Web cercando di indice il web come un motore di ricerca, potevano facilmente colpito con ottenere questo tipo di URL. E questo è funzionalmente equivalente, in questo caso, vendita di tutte le azioni di Google. Ora, francamente, è completamente asinine che il CMS usato JavaScript ei cookie di implementare il suo sistema di login e non fare che lato server, come ragazzi esistono ed in PSet 7-- c'è un login.php file-- sempre, sempre, sempre la sicurezza dovrebbe essere fatto sul lato server, non sul lato client perché, come questa articolo suggerisce e si potrebbe te vedere ad un certo punto, è banale per un utente, buono o cattivo, trasformare appena fuori JavaScript per non parlare di cookie. Quindi, questo è il vostro WTF quotidiano. C'è un di più, che è solo un po 'paura, così io vi ho citato, se solo come lezione di vita. Ogni volta che si utilizza un'applicazione chiamato come Snapchat o simili che dice queste foto durano solo per cinque secondi, dieci secondi, o roba del genere. Sono effimero Questo è assolutamente non è il caso. Come non c'è modo, in digitale, di attuare una qualche forma di video, o immagine, o testuale condivisione di tali che un destinatario all'altro capo non può in qualche modo salvare i dati. Nel modo più naif, qualcuno potrebbe prendere il loro telefono. E hanno una seconda finestra 10 mentre guardando qualche scatto di prendere solo un altro telefono e fotografare, ovviamente. Così si può conservare qualcosa di digitale in questo modo. Alcuni di voi sanno come prendere le immagini sul telefono. Infatti, se non si conosce questo, rendersi conto che almeno Snapchat, e credo che altri applicazioni in questi giorni, almeno dire se il destinatario ha effettivamente preso uno screenshot della vostra immagine. Ma peggio ancora, questo era il snappening, come qualcuno ha coniato di recente, dove circa 100.000 scatta era stato rilasciato in quello che è chiamato un file torrent su vari siti web in ultima analisi. E questi contenevano un sacco di messaggi privati ​​e post. Si scopre la maggior parte di loro benigna, quindi non quello che ci si potrebbe aspettare. Ma perché la gente aveva usato un sito web di terze parti, accedendo con loro Snapchat username e password e poi salvare tutti i loro scatti su questo sito web di terze parti. Ed era tale terzo sito web che è stato violato, che solo dire che qualcuno ha capito come per ottenere tutti i 100.000, più di quelle immagini nel proprio hard disk per la successiva condivisione. Francamente, anche qui, è una specie di asinine che Snapchat è implementato in modo che una terza parte può ordinare di intercettare i dati e che non è legato al vostro propria applicazione in esecuzione sul telefono. Ma anche qui, si rende conto che questi cose che non si dovrebbero prendere di sorpresa, o almeno ci dovrebbe essere una lezione di vita qui dentro. Se vuoi il tecnico dettagli, andare a tale URL lì che è nelle diapositive di oggi. D'accordo, tutte le domande su lezioni di vita di oggi per CS? Spegnerlo. Niente di niente? Niente di niente? Ho un sacco di gente controllo loro Snapchat o qualcosa adesso. Va bene, così SQL, Structured Query Language. Cerchiamo di avvolgere questo. Ed anche, benché stiamo solo graffi la superficie di questo lingua, ti daremo sufficiente della lingua sotto forma di PSet 7 in modo da poter affrontare alcuni funzionalità abbastanza comune. Ma rendo conto che ci sono un paio cose che non richiediamo di voi, ma che stanno andando a essere importante venire progetti finali e certamente venire rendere effettivo siti web con utenti reali è questa decisione di progettazione. Risulta che in un database MySQL, è hanno mazzi di scelte come i tipi di dati per le colonne e altre cose, ma si hanno anche la scelta di un cosiddetto stoccaggio motore per tutti i vostri dati, il tipo di file system, se si ha familiarità, per tutti i vostri dati. Che formato è in ultima analisi, memorizzato in? E il più comune, forse, è stato MyISAM e InnoDB, termini tecnici che ci preoccupiamo solo nella misura in cui si ha e non si ha la seguente funzione. Supponiamo di avere un piccolo frigorifero dormitorio. E pensare che voi e la vostra compagno di stanza, che condividono questo frigo, sono veramente appassionato di latte per esempio. E questo è, infatti, come il storia è stata raccontata a me via del ritorno nel giorno in cui ho seguito un corso chiamato CS 161 Sistemi operativi, che esplora allo stesso modo questo argomento. Quindi hai questo frigorifero. Sei fuori di latte. E si arriva a casa, il tuo compagno di stanza di ancora in classe o qualsiasi altra cosa, e si decide che ho intenzione di uscire e prendere un po 'di latte. Così si chiude il frigo, blocco la stanza del dormitorio, andare dall'altra parte della strada a CVS o dovunque, e ottenere in fila per comprare il latte. Nel frattempo, il tuo compagno di stanza arriva a casa dalla classe, entra nella stanza del dormitorio, apre il frigo, si rende conto anche ooph, siamo fuori di latte. Quindi lui o lei chiude la frigo e poi succede per andare verso l'altro CVS, che sembra essere un isolato di distanza dagli altri CVS in piazza, e si mette in linea lì per ottenere un po 'di latte. Ora, naturalmente, pochi minuti più tardi, entrambi tornare, e il peggiore di tutti i possibili risultati è accaduto. Tutti e due hanno il latte. E non si ha realmente come il latte più di tanto. Quindi uno di loro è solo andando a inasprire ad un certo punto. Così ora avete una quantità eccessiva di latte in frigo tutto perché perché? [Incomprensibile] DAVID MALAN: Sì, non l'hai fatto qualche modo comunicare tra loro che si stavano diventando latte. Quindi nel più semplice dei modi nel mondo umano, come si potrebbe evitare questo stupido scenario si verifichi tale che si finisce solo con uno. Li testo, sì bene. Ma in quale altro modo? Post-it. DAVID MALAN: Una nota di post-it. Ogni forma di comunicazione che dice il tuo compagno di stanza non andare in frigo per il latte. Ho intenzione di andare a rifornire per conto mio. Quindi, in qualche modo bisogno per bloccare questa risorsa. Così possiamo fare questo-- possiamo tipo di rovinare la storia e si trasformano in una storia CS per cui pensare a questo come proprio come un variabile, che sono memorizzate certo valore. E proprio ora, il valore del latte è zero, che non si desidera che il compagno di stanza per ispezionare quella variabile e poi prendere una decisione se stesso in base allo stato della variabile se siete in procinto di cambiando lo stato di quella variabile. Così una delle linee di SQL che ci dare in PSet 7 specifica è questo qui. E noi non spendiamo un enorme quantità di tempo a parlarne. Ma si scopre, se si sta cercando per comprare un po 'magazzino in finanza CS50 che hai già alcune azioni, si vogliono essere in grado di fare un numero di cose all'istante insieme. Si vuole essere in grado di efficace, a livello alto, Controllare tutto bene, se voglio di acquistare più azioni di libero, il penny stock che parlare nelle specifiche, Voglio primo controllo quante azioni ho. E supponiamo che sia cinque. E supponiamo che io voglio compro più 10, alla fine ho vogliono avere 15 parti di magazzino. Quindi devo fare due domande. Nei lo stato della variabile? Nei lo stato della riga? Quante sono le azioni non ho attualmente? Poi si vuole andare avanti e aggiornarlo. Ecco, questo è l'analogo al latte di controllare la riga, e poi si desidera aggiornarlo perché se si vuole comprare 10 azioni, non si desidera modificare la riga 10, si vuole cambiare a 5 più 10 o, naturalmente, 15. Questa linea di codice garantisce che queste due idee concettuali avvenire insieme o per niente. Nessuno, tra cui un altro utente che è registrato nello stesso sito, può in qualche modo interrompere il controllo della riga e l'aggiornamento della riga, la selezionare e l'aggiornamento se si vuole. E la sintassi non è super evidente, ma questa linea, è lunga è, assicura che queste due operazioni Controllare la variabile o controllare la riga e aggiornare la riga accadere atomicamente. Oh, ci risiamo. Messaggio di testo sul mio telefono. Quindi cerchiamo di fare questo un po 'più concreto. Supponiamo che non sei l'attuazione di un frigorifero, e non sei attuazione PSet 7 ma una banca vera e propria, o un bancomat, un Automated Teller Macchina, per cui in qualche modo vogliono essere in grado di potenziare agli utenti di trasferire i soldi da un conto ad un altro. OK, aspetta. Io vado a disattivare questa ora, grazie. Quindi vogliamo spostare denaro da un numero di conto in un altro account numero, in particolare 100 dollari. Quindi questo è una specie di un arbitrario esempio, per cui si, il bancomat, potrebbe voler eseguire due SQL query, sottrarre da un conto, e aggiungere l'altro account. Ma si vuole garantire che questi due linee entrambe accadono o per niente. Se non si desidera qualcosa essere interrotto. Non fare un po 'cattivo ragazzo intelligente in qualche modo in piedi a Bank of America con due bancomat di fronte di lui e in qualche modo sorta di digitare il comandi allo stesso tempo, si spera cercando di dedurre $ 200 invece di $ 100 e avendo solo 100 dollari accreditati. In breve, si vuole che questo si comportano esattamente come ci si aspetta. E il modo di fare questo in SQL database è si avvolge in ciò che è chiamato una transazione. Letteralmente in SQL, è possibile chiamare CS50 di funzione di interrogazione citando inizio unquote delle transazioni. Quindi è possibile eseguire qualsiasi numero di query SQL successive, ma nessuno di loro fa effettuare sul database fino alla chiamata di query tra virgolette commettere, se ancora una volta utilizzando PHP. E in questo modo, è possibile garantire che anche se si dispone di 1.000 utenti tutto colpire il database Allo stesso tempo, SQL vi prometto che questi due query saranno attuata una dopo l'altra. In modo da non finire con eccesso di latte o un importo errato, in ultima analisi, di denaro. Quindi, tenere questo in mente, non tanto per PSet 7 ma per i progetti definitivi se si sta effettivamente cercando di spostare i dati in giro attraverso le tabelle come si potrebbe qui. Ma forse ancora più semplice e più agevole capire con un esempio è questo qui. E qualcuno ci ha mandato su questo proprio l'altro giorno quando ha visto qualcosa di simile in linea. Quindi, per quanto ne so, il sistema pin non è vulnerabile a questo attacco. E non ho idea se anche usi il database SQL sotto la cappa. Ma lo si può usare per il bene della discussione. Ecco la schermata che Gente di Harvard tendono per vedere quando si accede con il loro Numero Harvard ID e il PIN. E supponiamo che il sistema perno erano implementato in PHP e MySQL banca dati, il codice che qualcuno anni avrebbe potuto scrivere fa potrebbe essere il seguente. In primo luogo, dichiarare una chiamato nome utente variabile. E solo ottenere che dal il superglobale POST. Allora un'altra variabile chiamato password e fare lo stesso. E poi basta eseguire questa lunga domanda qui, selezionare stelle da parte degli utenti dove nome utente è uguale a questo e questo e password uguale così e così. Si noti che il riccio bretelle Ho usato qui semplicemente significa PHP, andare avanti e sostituto il valore di questi due variabili proprio lì. Non sono strettamente necessari, ma essi tendono ad evitare errori di sintassi sottili. Quindi questo sembra completamente corretta a prima vista. Ed è. Si potrebbe implementare la Sistema perno in questo modo. Ma supponiamo che un super allievo astuto e maligno questo ingresso come suo perno. Così ho rimosso il proiettile segni qui nel mock up, e in realtà ho rivelato quello che lui o lei potrebbe essere la digitazione. Ed è un po 'strano. Ma ciò che salta fuori a voi in potenzialmente preoccupante su input dell'utente, anche se non avete idea di cosa un attacco di SQL injection significa. Perché questo sembra un po 'di pesce? Che cos'è? [Incomprensibile] DAVID MALAN: La o è un po 'sospettoso. In realtà, questo è una parola chiave da SQL. In modo che non fa ben sperare. Il fatto che ci sia tutte queste virgolette singole there-- infatti, uno dei più facili modi per rompere alcuni database è digitando un nome come O'Reilly che ha un apostrofo in essa perché se l'uomo che ha scritto il codice dietro le quinte non tiene conto del fatto che ci potrebbe essere virgolette singole a un utente di ingresso, e lui o lei sta usando virgolette singole nel loro codice, cose brutte possono accadere. In realtà, peggio ancora, considerare questo. Se questo è stato nuovamente il codice che qualcuno a Harvard anni fa ha scritto per il perno sistema, notare ciò che è per cominciare sostituito nome utente e password se l'utente di nuovo skroob come il loro nome utente e poi uno, due, tre, quattro, cinque, quote o tra virgolette uno uguale citare uno. E notare che cosa è chiave qui è l'utente non ha iniziato la loro password o il pin con una citazione. E non hanno finito la con una citazione perché lui o lei sta assumendo che se la programmatore non era così forte, che stanno per avere quelle virgolette singole nel loro codice. Quindi, ecco il codice. E la sostituzione che potrebbe ora accadere è questo. E ho sottolineato quanto l'utente ha digitato. Quindi, prima, dopo. E notare che cosa è leggermente preoccupante ora circa la metà destra di questo codice SQL? E 'un po' più complesso, è vero, rispetto alle richieste che abbiamo visto. Ma questo non può assolutamente essere una buona cosa se siete dicendo selezionare stella, che è selezionare tutto, dalla tabella degli utenti dove username è uguale skroob e la password è uguale a uno, due, tre, quattro, cinque o uno fa uno. Qual è l'implicazione logica di tale ultima clausola presumibilmente? E 'solo sempre vero. E perché abbiamo una sorta di intuito o capito per tentativi ed errori che il programmatore che ha scritto questo codice non ha anticipare una persona umana o cattiva digitare tra virgolette singole, come pure, siamo in grado di Sintatticamente completare la query SQL con qualcosa di assurdo ma qualcosa che è sintatticamente errata che restituisce sempre true. Quindi, se questo codice viene utilizzato per rispondere la domanda vero o falso dovrebbe questo utente è autorizzato a passare, il risposta è sempre a quanto pare sta per essere vero, perché questo sta andando sempre per selezionare qualcosa dal database perché uno, naturalmente, è sempre uguale a uno. Quindi qual è la soluzione? Bene in PSet 7, in realtà evitare questo tutti insieme. Noi vi diamo una funzione di interrogazione, e noi vi incoraggio a usare punti interrogativi come segnaposto, simile nello spirito al di printf% s, ma ciò che è fondamentale circa i punti interrogativi qui è se effettivamente letto attraverso functions.php, dove il nostro funzione di interrogazione è implementata, quei punti interrogativi sono fuggiti, per cui qualsiasi cosa potenzialmente pericolosa come una sola offerta è attiva in una sola offerta sfuggito. Quindi questo è ciò che è realmente accadendo se utilizzare la funzione di interrogazione del CS50 o un qualsiasi numero di librerie libere di terze parti che fare lo stesso. Non importa in questo caso, in verde, se l'utente ha digitato Nello stesso preventivo perché la query funzione che abbiamo scritto è andando ad aggiungere backslash prima tale citazione pericoloso. Quindi questo non è, in Infatti, sta per essere legit. Questo è come digitare in un pazzo cercando password che è, ovviamente, non andare essere password effettiva delle skroob. Così il cibo da asporto per CS50 è uno, assolutamente utilizzare sempre qualcosa come la funzione di interrogazione del CS50 o la libreria di base, che risulta essere chiamato DOP. Ma mai, mai, mai fare il codice come questo senza fuggire o lavaggio come dicono gli ingressi. E a un certo punto, probabilmente imbattersi in qualche sito come questo. In realtà, sembra essere il caso come negli aeroporti e alberghi in luoghi dove hanno la connessione Wi-Fi gratuita accesso che si effettuare l'accesso per, questi siti sono sempre orribilmente implementato. E così una sorta di divertimento a casa esercizio, non per scopi dannosi o più di un divertimento sulla strada esercizio, è quello di digitare solo un apostrofo, una sola offerta, in una forma su qualche sito e vedere cosa succede. E se il server si blocca o dà qualche tipo di messaggio di errore, può benissimo essere che qualcuno non ha previsto questo. E allora si dovrebbe avvisare il corretto autorità e procedere oltre. Così ora voi ragazzi dovrebbero auspicabilmente capire un po 'più disadattato umorismo qui. [Risate] DAVID MALAN: Lo sai che sei un geek. Per i prossimi anni, si ricorderanno che tavolini Bobby è a causa di questo cartone animato qui. Quindi, tenere a mente come noi cambio di contesto per l'ultima volta oggi a JavaScript. Abbiamo speso relativamente poco tempo sulla sintassi di PHP perché in realtà è eccellente simile a C. E abbastanza bene, anche JavaScript è super simile alla sintassi del C così come vedremo in solo un momento e come faremo vedere la fine di questa settimana in particolare. Che cosa si può fare con questo linguaggio, tuttavia, è ancora più potente, soprattutto con le API. Ma prima un breve tour. Così uno, in JavaScript, non c'è nessuna funzione principale, che è bello. Come nel caso di PHP, si può semplicemente scrivere codice. Condizioni simile a questa. E le espressioni booleane potrebbe simile a questa o come questo. Esistono switch, e potrebbe essere il seguente. Quattro anelli simile a questa. Cicli while simile a questa. Fare talora simile a questa. E poi gli array sembrano questo, molto simile a PHP. Ma si noti, che in JavaScript si dichiarare una variabile non con un dollaro segno, non con un tipo di dati, ma letteralmente dicendo var per la variabile prima di esso. Anch'esso è liberamente digitato dal fatto di presentare tipi, ma non esplicitamente dichiarate. E poi una stringa, per esempio, potrebbe apparire in questo modo, la stringa essere chiamato s in questo caso. E poi un oggetto. E questi vedremo più in breve tempo. E un oggetto è forse uno dei più comunemente visto strutture di dati in una base di JavaScript programma perché permette di associare arbitraria coppie di valori chiave solo come array associativi di PHP e proprio come la vostra tabella hash o provare come abbiamo implementato qualche settimana fa. Quindi cerchiamo di vedere cosa realmente possiamo fare con JavaScript. Ed in particolare, questo è una lunga lista di caratteristiche che i browser hanno quel ci permettono di agganciare JavaScript in un sito web nel modo seguente. JavaScript è spesso usato come un lato client linguaggio di scripting. Non è stato compilato. Anch'esso viene interpretato. Ma a differenza di PHP, che è stato in esecuzione sul server, nel server web, o profondità all'interno del clienti, JavaScript è diverso dal fatto di di solito viene eseguito nel browser. Quindi, qualsiasi codice JavaScript di iniziare la scrittura per PSet 8, o il vostro progetto finale, o nel mondo reale è generalmente in corso per essere salvati sul server, assolutamente in un punto o HTML dot JS per i file JavaScript. Ma il browser sta andando per scaricare che JavaScript codice per la propria istanza di Chrome, o IE o Firefox, o qualsiasi altra cosa. E il codice è in realtà sta per arrivare eseguito all'interno del proprio browser. Giusto per rendere questo più reale, vediamo questo in forma concreta. Non abbiamo idea di cosa fa questo codice senza veramente leggere attraverso di essa. Ma lasciami andare a Facebook.com senza effettuare il login. Lasciami andare a Inspect Element e andare, diciamo, di rete e ricaricare la pagina. E ci lasciamo see-- mi sposto Ricaricare il Pagina per ottenere tutte le richieste al nuovo. E la prima il file che vedo è CSS, CSS. Ecco la prima File JavaScript, e ho idea di cosa fa, ma qui è parte del codice JavaScript che spinge Facebook. Non è nemmeno poi tanto rivelando per ingrandire. E 'ancora altrettanto priva di senso. Ma vedrete anche in basso, c'è ancor più di questi file JavaScript. Ops. Questo è un ping. Scendiamo un po ' inoltre, più ulteriormente. Ce n'è uno. Ce n'è uno. Ce n'è uno. Così, anche se Facebook, dietro la scene, è scritto in parte in PHP e di Facebook propria versione dello stesso, c'è una quantità enorme di JavaScript. Infatti, una delle caratteristiche chat si fa su Facebook, qualsiasi degli aggiornamenti in linea della timeline che accadono in tempo reale, tutto questo è guidato da JavaScript. Sì? PUBBLICO: Non sono sicuro se questo è Facebook, ma ho pensato che Facebook ha sviluppato la propria lingua in-house codice? DAVID MALAN: Lo hanno fatto. Ecco, questo è il motivo per cui dico una varianza di PHP chiamata Hip Hop che in realtà caratteristiche aggiunte a tale che, quando Mark prima applicazione Facebook, è stato scritto in PHP. E che tipo di è rimasto il tipo di linguaggio di front-end che usano per molto della codifica, ma non è stato un linguaggio che è scale particolarmente bene a miliardi di persone. E così hanno aggiunto la propria miglioramenti dietro le quinte. E usano un numero qualsiasi di altre lingue per i vari pezzi di le loro infrastrutture. Quindi sì, si tratta di una variazione di ciò che noi oggi conosciamo come PHP. Quindi, diamo uno sguardo un paio di esempi di come potremmo utilizzare JavaScript qui. Nel codice sorgente di oggi, abbiamo un gruppo di file, il primo dei quali, diamo chiamato DOM zero. Così DOM pari a zero si presenta come segue. Lasciami andare in questa directory e di aprire domzero.html, la cui sommità ha un tipo doc dichiarazione, dicendo ecco che arriva HTML 5. Ed ora ecco un tag HTML. Ecco il tag head. Ed ecco cosa c'è di nuovo oggi. Ora abbiamo un tag script all'interno della testa della pagina. E questo lo fa a quanto pare molto poco, a meno di notare che ho definito un sceneggiatura, un Javascript. E per inciso, dal momento che questo è un errore comune, JavaScript non ha assolutamente nulla a che fare con Java, il linguaggio che alcuni di voi potrebbe hanno imparato a APCS. Era più di un marketing di cosa di ogni altra cosa, cavalcando le falde di anni fa, Java. Ma JavaScript, niente a che fare con Java, proprio allo stesso modo, e fastidiosamente, confusamente chiamato. Quindi, ecco come si dichiara una funzione in JavaScript, letteralmente dire la funzione, quindi il nome della funzione, allora qualsiasi argomento che potrebbe prendere, proprio come in PHP. Risulta in JavaScript, uno dei più funzioni fastidiosi che esistono è vigile. Questa è una piccola finestra che si aprirà e avvisare l'utente ad una parte dell'informazione. E 'generalmente visto di buon occhio. Ma useremo come il nostro primo esercizio qui. Notate alcune caratteristiche di JavaScript. Apici singoli e doppi apici realtà non ha più importanza. Apici singoli e doppi citazioni possono essere scambiati, mentre in C, è necessario utilizzare doppi apici per le stringhe, e si dispone di due letti singoli Quotazioni caratteri. Nel mondo JavaScript, molte persone, la maggior parte delle persone utilizzare le virgolette singole intorno a corde solo perché è una cosa stilistica. Ma qual è l'operatore più qui, che non abbiamo visto prima? PUBBLICO: concatenazione. DAVID MALAN: concatenazione. Quindi C non ha nemmeno questo. PHP è l'operatore punto, che fa questo. JavaScript è l'operatore più, confusamente che è proprio come Java. Ora che cosa sta succedendo qui? Quindi qui è dove una base comprensione di quella foto abbiamo buttato un paio giorni fa entra in gioco. Ricordate quando abbiamo avuto un semplice versione di HTML page-- è appena detto, ciao mondo. E poi abbiamo disegnato un albero a destra, che ha avuto una serie di rettangoli e linee collegandoli come un albero genealogico. Ecco, questo è il cosiddetto DOM o Document Object Model. E si scopre che è possibile accedere rettangoli a quell'albero con la sintassi come il seguente. È letteralmente dici documento, che è un speciale variabile globale in Javascript programma che ha una funzione ad esso associati che è possibile accedere simile ad una struct, ma è sufficiente dire punto e poi il nome della funzione, ottenere elementi per ID. L'elemento che voglio ottenere è a quanto pare citare nome unquote. E poi voglio ottenere il suo valore. Ora stiamo andando troppo avanti di noi stessi. Non sono nemmeno sicuro di quello che tutto questo è circa. Andiamo avanti veloce al HTML pagina, che è super semplice. Si noti che ho definito una forma qui. AVVISO ho dato un unico ID, anche se non abbiamo usato questo attributo prima. Ma questo esiste in HTML. È possibile identificare in modo univoco un certo pezzo di HTML con un identificatore come questo. Notate ora questo-- risulta HTML sostiene, a tale elenco di lavanderia un momento fa, nel suo complesso gruppo di gestori di eventi. E questo gestore di eventi dice su Invia. Sulla presentazione di questo utente forma, chiamare il seguente codice. E il codice che sta andando di essere chiamato o eseguito è proprio questo, greco funzione seguito da return false. Tutto il resto dovrebbe essere abbastanza familiare. Qui è un input di tipo text, il cui ID, in questo caso, sarà nome. Non abbiamo un attributo nome effettivo questo tempo-- e un pulsante di invio. Così la pagina risultante è simile al seguente. E il comportamento risultante, vedrete, si presenta come questo. La pagina ospita locali dice, ciao David, certo un esteticamente gradevole modo di salutare un utente. Ma cosa sta realmente succedendo? Beh, considerare che cosa si tratta. Questo è un campo di testo. E secondo la HTML qui, ho dato un identificatore univoco chiamato citazione nome unquote. Nel frattempo, ho detto quando l'utente invia il modulo premendo Invio o facendo clic sul Submit pulsante, chiamare la funzione chiamata Greet e poi tornare False. Prendiamo in considerazione quelli in senso inverso. Avviso quando fa clic su Invia, il URL di questa pagina non cambia. L'icona del browser non iniziare a girare. Non sono andato da nessuna parte, e questo è letteralmente perché ho detto restituisce False. Ritorna circuiti o brevi soste False il comportamento predefinito di un modulo. In modo che poi ci lascia con questo un'ultima domanda. Che cosa fa Greet fare? Beh, a quanto pare Greet chiama una funzione chiamata Alert, passa in un lunga discussione che è il risultato di concatenare insieme un mazzo di sottostringhe, ciao spazio comma, quindi tutto ciò che questo restituisce. Così documento è come un globale variabile da quella radice di quell'albero, chiamare una funzione speciale, altrimenti ora noto come metodo. Una funzione che è all'interno di una variabile è chiamato un metodo invece di una funzione. Così ottenere elemento da ID. Quale elemento si fa vuole ottenere dal suo ID? Preventivo Nome e unquote quindi in particolare valore. In altre parole, tale codice è sufficiente trova il campo di testo il cui ID è il nome e poi prende il suo valore. Quindi, se dovessi cambiare questo e dire Davin al posto di David, e clicca su Invia, ora siamo avere un saluto per Davin. Va bene, quindi tutto bene e buono. Ma vediamo se possiamo fare questo un po 'più pulito da solo la scrittura di codice di questo tipo è in genere sta per essere visto di buon occhio. Questo sta a guardare più spaventosa. Ma qual è il primo differenza che si nota qui in questa versione oltre il nome cambia a DOM uno? Ciò che appare strutturalmente diverso questo rispetto all'altro? Sì? PUBBLICO: E 'il modulo a all'inizio dello script ora? DAVID MALAN: Sì, il modulo è in cima dello script per qualche motivo strano. Ecco, questo è la prima cosa che salta fuori a me. E per fortuna, almeno, questa parte è identica. Quindi l'unica cosa che sembra essere diverso è questo. Quindi, ecco che cosa è pulito 2 su JavaScript. E rende difficile capire a prima vista, in particolare per i progetti finali se stai guardando il codice di esempio in linea, ma si riduce a qualche caratteristiche sintattiche di base. Anche in questo caso è che documento variabile globale. Ecco ancora una volta che il metodo o la funzione che dice ottiene l'elemento di ID. Questa volta voglio ottenere l'ID chiamata demo. Dov'è? Questo è a quanto pare giusto qui, la forma stessa. E ora notare che, apparentemente, se io tornare quel nodo dall'albero che rappresenta la forma sé, un campo di testo, si scopre che forma, che nodo o un rettangolo dalla struttura ad albero, ha quello che chiameremo un immobile, molto, molto, molto simile nello spirito di una struct in C. E 'solo un membro di dati all'interno del rettangolo. Così ho preso la forma qui, e sto allegando, o sto assegnando, per la sua su Invia gestore o meglio su Invia immobili la seguente funzione. E questo è, di gran lunga, il più pazzo cosa finora sintatticamente. Risulta in JavaScript e PHP, e francamente se è per questo in C, anche se noi non lo facciamo, è possibile aggiungere senza nome, in forma anonima, o AKA lambda funzioni che non hanno un nome ma può essere chiamato comunque. Quindi quello che sto facendo qui è che sto assegnando Su questo Submit proprietà, che è all'interno di questo nodo di mio albero DOM, un funzione, puntatore a funzione, se vuoi. Tale funzione non ha nome, ma che non lo fa importa, perché vedremo in un momento come chiamarlo. Quando questa funzione viene chiamata, questo codice viene eseguito, quindi falso viene restituito come prima. A meno di notare quello che ho fatto. A questo punto del storia, ho una forma. Ha un ID univoco chiamato demo. Quaggiù, ho un tag script che esegue il codice riportato di seguito. Si attribuisce a tale nodo in l'albero ad esso è In Submit proprietà di questa funzione qui. E proprio dalla natura di come i browser funzionano, quando ho ora Clicca Invia o premere Invio, che la funzione sta per ottenere chiamato. Non ha bisogno di un nome perché chi il diavolo se ne frega come si chiama. L'unica volta che non lo sia mai sta per arrivare chiamato è quando mi inviate il formulario. Non c'è bisogno di me, lo sviluppatore umana, chiamare in realtà in qualsiasi altro luogo. Ora, come un teaser, come se questo non sono stati rompicapo abbastanza, possiamo anche fare questo guardare con più criptico una libreria super popolare chiamata jQuery. In effetti jQuery e JavaScript sono spesso conflated. E cosa faremo il Mercoledì è inizio usando questo linguaggio e queste librerie di costruire sempre più asincrona e applicazioni dinamiche come arrivare mappa applicazioni, applicazioni che aggiornare la pagina web in tempo reale tempo, proprio come Facebook o Gchat fare, e non limitarci a colpendo Invia da un get o semplicemente posta solo. Allora ci vediamo il Mercoledì. [RIPRODUZIONE DI BRANI MUSICALI]