1 00:00:00,000 --> 00:00:01,940 >> [RIPRODUZIONE DI BRANI MUSICALI] 2 00:00:01,940 --> 00:00:11,130 3 00:00:11,130 --> 00:00:14,620 >> DAVID MALAN: Questa è CS 50, e questo è l'inizio della settimana nove. 4 00:00:14,620 --> 00:00:18,240 E quello che abbiamo pensato di fare oggi non è solo chiudere il capitolo della scorsa settimana 5 00:00:18,240 --> 00:00:22,670 materiale in cui ci siamo concentrati sul server di programmazione web lato con PHP e SQL, 6 00:00:22,670 --> 00:00:23,549 alcune cose del database. 7 00:00:23,549 --> 00:00:25,590 Parleremo un po 'di oggi sicurezza e quindi 8 00:00:25,590 --> 00:00:29,590 transizione verso una programmazione lato client lingua conosciuta come JavaScript. 9 00:00:29,590 --> 00:00:31,330 Ma prima, un po 'di redenzione. 10 00:00:31,330 --> 00:00:35,030 >> Si può ricordare che il Mercoledì, ho indicato 11 00:00:35,030 --> 00:00:37,550 di scrivere un sito web che ha preso in ingresso dell'utente 12 00:00:37,550 --> 00:00:41,120 da un HTML forma che poi memorizzati che i nomi di input dell'utente, telefono 13 00:00:41,120 --> 00:00:43,124 numeri, e cellulare vettori nel database. 14 00:00:43,124 --> 00:00:45,540 E poi ho avuto un po 'di comando script della riga di scritto in PHP 15 00:00:45,540 --> 00:00:47,956 che avrebbe dovuto scorrere sopra le righe nel database 16 00:00:47,956 --> 00:00:49,400 e inviare messaggi di testo. 17 00:00:49,400 --> 00:00:53,870 Nonostante diversi, diversi tentativi, abbiamo non ha ottenuto che il lavoro alla fine. 18 00:00:53,870 --> 00:00:57,820 >> Così ho passato questa intera settimana di lavoro su tale codice per ottenere noi oltre il punto 19 00:00:57,820 --> 00:01:01,220 dove avevamo lasciato, in base al quale tutto Ho ottenuto entro la fine del Mercoledì 20 00:01:01,220 --> 00:01:05,500 è stato questo il messaggio di testo da Margo come ho lottato, 21 00:01:05,500 --> 00:01:09,940 seguito da un messaggio di testo da un altro compagno di classe, Hai questo David. 22 00:01:09,940 --> 00:01:14,030 Seguito da questa, meravigliosamente incoraggiante. 23 00:01:14,030 --> 00:01:15,840 Mantenuto in corso, molto incoraggiante. 24 00:01:15,840 --> 00:01:20,960 Ho quasi preso fino then-- e questa è la nota che abbiamo finito il Mercoledì. 25 00:01:20,960 --> 00:01:25,850 E poi in realtà forse il mio preferito, un attimo dopo, questo è venuto in. 26 00:01:25,850 --> 00:01:27,000 Accidenti Diretta Streaming. 27 00:01:27,000 --> 00:01:31,080 >> Così oggi, possiamo risolvere questo problema con una rapida guardare a ciò che ho fatto da allora. 28 00:01:31,080 --> 00:01:35,440 Quindi tutto questo codice è disponibile online da della scorsa settimana, otto settimane, 29 00:01:35,440 --> 00:01:36,300 codice sorgente. 30 00:01:36,300 --> 00:01:39,425 E vedrai che ho passato, e in realtà ho ripulito le cose un po '. 31 00:01:39,425 --> 00:01:42,080 Ho introdotto un paio di altri caratteristiche di un database SQL. 32 00:01:42,080 --> 00:01:45,300 Per esempio, piuttosto che basta fare portatore di var char 33 00:01:45,300 --> 00:01:47,310 come penso che ho fatto al volo la settimana scorsa. 34 00:01:47,310 --> 00:01:49,820 Io invece definito come quello che chiama un enum. 35 00:01:49,820 --> 00:01:53,310 >> E alcuni di voi avranno visto questo come abbiamo esplorato C. Enum è in realtà 36 00:01:53,310 --> 00:01:56,820 una caratteristica di C in cui è possibile elencare tutta una serie di costanti 37 00:01:56,820 --> 00:01:59,640 e assegnare loro valori automatici, come uno, due, tre, quattro 38 00:01:59,640 --> 00:02:01,330 senza dover codici principali. 39 00:02:01,330 --> 00:02:04,780 Così SQL supporta la stessa, per cui se si dispone di un campo di database che solo 40 00:02:04,780 --> 00:02:09,389 vuole prendere su una delle finita valori, si può letteralmente specificarlo 41 00:02:09,389 --> 00:02:13,120 come ho fatto lì per quattro popolari vettori cellulare degli Stati Uniti. 42 00:02:13,120 --> 00:02:13,819 >> Così ho fatto. 43 00:02:13,819 --> 00:02:16,610 E ho fatto una serie di modifiche come bene, il più importante dei quali 44 00:02:16,610 --> 00:02:20,090 era quello di ottenere e-mail lavorando perché il richiamo, che questo programma si basava su cui 45 00:02:20,090 --> 00:02:23,470 generalmente chiamato una mail a Gateway SMS, che è solo 46 00:02:23,470 --> 00:02:27,670 un modo elegante per dire che Verizon, e AT & T, e altre persone sostengono un server, 47 00:02:27,670 --> 00:02:30,740 per cui se riceve e-mail, si converte in SMS 48 00:02:30,740 --> 00:02:33,290 e invia un testo il messaggio ad un altro telefono. 49 00:02:33,290 --> 00:02:37,010 Quindi, se ho fatto questo correttamente, qui è una forma nuova e migliorata 50 00:02:37,010 --> 00:02:39,259 che sta per parlare con nuova e migliorata codice, che 51 00:02:39,259 --> 00:02:40,300 si può giocare con on-line. 52 00:02:40,300 --> 00:02:44,140 E, si spera, fare la mia telefono segnale acustico in un attimo. 53 00:02:44,140 --> 00:02:47,240 >> Quindi, prima, ho intenzione di digitare il mio nome. 54 00:02:47,240 --> 00:02:51,400 In secondo luogo, non mi va per farlo questa volta. 55 00:02:51,400 --> 00:02:53,920 Ho intenzione di fare Inspect Element. 56 00:02:53,920 --> 00:02:56,710 E questo è solo un piccola cosa così non lo faccio 57 00:02:56,710 --> 00:02:59,250 creare ore di post-produzione Lavoro come ho fatto l'ultima volta. 58 00:02:59,250 --> 00:03:02,300 Ci ora è il mio numero di telefono. 59 00:03:02,300 --> 00:03:03,560 >> Io seleziono Verizon. 60 00:03:03,560 --> 00:03:10,260 E qui, torniamo su questo microfono qui, e mirare questo a mio telefono qui. 61 00:03:10,260 --> 00:03:13,130 Io vado a fare clic su Registra, che dovrebbe auspicabilmente 62 00:03:13,130 --> 00:03:14,530 metterlo nel database. 63 00:03:14,530 --> 00:03:16,780 Ora ho intenzione di andare al programma a riga di comando, che 64 00:03:16,780 --> 00:03:20,825 richiamo è stato chiamato barra dot il testo, e incrocia le dita. 65 00:03:20,825 --> 00:03:24,092 66 00:03:24,092 --> 00:03:26,527 Eccoci qui. 67 00:03:26,527 --> 00:03:27,501 >> [DINGS TELEFONO] 68 00:03:27,501 --> 00:03:28,962 >> [Applausi] 69 00:03:28,962 --> 00:03:31,815 70 00:03:31,815 --> 00:03:34,940 DAVID MALAN: Quindi più divertente di questo-- è divertente, certo, se mi trovo in esso. 71 00:03:34,940 --> 00:03:38,004 Ma è più divertente, ho pensato che, se creato uno di quei momenti del cinema 72 00:03:38,004 --> 00:03:40,420 dove come qualcosa di veramente male è accaduto nel mondo, 73 00:03:40,420 --> 00:03:42,860 e come tutte le persone della NSA cellulari iniziano a emettere un segnale acustico 74 00:03:42,860 --> 00:03:44,860 con messaggi di testo avvertendoli di questo fatto. 75 00:03:44,860 --> 00:03:47,026 Così ho pensato che sarebbe provare per ricreare lo stesso qui, 76 00:03:47,026 --> 00:03:49,610 per cui non si utilizza un database, Io invece in anticipo 77 00:03:49,610 --> 00:03:51,490 ha scritto un programma che assomiglia a questo. 78 00:03:51,490 --> 00:03:53,660 >> Questo è un index.php-- e ho messo questo codice on-line 79 00:03:53,660 --> 00:03:56,710 come well-- che a quanto pare solo rende form.php, 80 00:03:56,710 --> 00:04:00,990 utilizzando un paradigma MVC stile che abbiamo parlare più in dettaglio nel set problema 81 00:04:00,990 --> 00:04:01,650 Sette. 82 00:04:01,650 --> 00:04:02,910 Quella forma è piuttosto semplice. 83 00:04:02,910 --> 00:04:06,634 E 'intenzione di sottoporsi a un file chiamato here.php via posta. 84 00:04:06,634 --> 00:04:09,300 Ed è a quanto pare intenzione di chiedere per un nome e un numero telefonico, 85 00:04:09,300 --> 00:04:11,400 e poi via del cosiddetto Selezionare il menu, è 86 00:04:11,400 --> 00:04:14,250 intenzione di darvi almeno quattro popolari vettori cellulare degli Stati Uniti, 87 00:04:14,250 --> 00:04:17,470 e quindi consentire di efficace le presenze cliccando qui. 88 00:04:17,470 --> 00:04:20,471 >> E qui, nel frattempo, sta per prendere in prestito parte del codice dall'ultima volta. 89 00:04:20,471 --> 00:04:22,553 E se proprio saltare questa, vedrai che non c'è 90 00:04:22,553 --> 00:04:23,900 un sacco di controllo degli errori. 91 00:04:23,900 --> 00:04:26,640 Ma la bellezza alla fine è che non stiamo scrivendo a un database di oggi. 92 00:04:26,640 --> 00:04:29,130 Stiamo mantenendo le cose semplici e semplice invio di spera 93 00:04:29,130 --> 00:04:32,190 un messaggio di testo tramite la funzione I ha scritto negli ultimi giorni di chiamata 94 00:04:32,190 --> 00:04:36,270 Testo, che è nelle funzioni. php, che è di nuovo disponibile on-line. 95 00:04:36,270 --> 00:04:38,210 >> Quindi, se si desidera partecipare a questo. 96 00:04:38,210 --> 00:04:40,190 Non stiamo andando a memorizzare nulla. 97 00:04:40,190 --> 00:04:43,809 Vai a questo URL qui in tempo reale. 98 00:04:43,809 --> 00:04:46,850 Non lo presenta appena ancora, ma cerchiamo di vedere se siamo in grado di avere uno di questi film 99 00:04:46,850 --> 00:04:49,830 momenti in cui il cellulare di tutti emette dei segnali acustici, si spera solo 100 00:04:49,830 --> 00:04:53,580 una volta quest'anno, a differenza del 2011 dove questo è andato terribilmente storto. 101 00:04:53,580 --> 00:04:58,910 E una volta che si va a questo indirizzo, si dovrebbe vedere una forma super semplice 102 00:04:58,910 --> 00:05:03,884 che se hai un nome, un telefono cellulare numero e un vettore cellulare che 103 00:05:03,884 --> 00:05:06,175 corrisponde l'elenco là, andare avanti e compilare il modulo. 104 00:05:06,175 --> 00:05:07,880 Ma non colpire presentare ancora. 105 00:05:07,880 --> 00:05:10,850 >> Il modulo sta andando a guardare come questo. 106 00:05:10,850 --> 00:05:13,660 Vai avanti e digitare il tuo nome, numero di telefono. 107 00:05:13,660 --> 00:05:17,670 Oop, qualcuno sta andando davanti alla curva. 108 00:05:17,670 --> 00:05:18,170 Va bene. 109 00:05:18,170 --> 00:05:19,340 OK, ognuno riempito il modulo. 110 00:05:19,340 --> 00:05:21,400 Questo dovrebbe funzionare su una telefono, anche, se si vuole. 111 00:05:21,400 --> 00:05:23,695 Va bene, Ai vostri posti, pronti, via. 112 00:05:23,695 --> 00:05:24,195 Hit qui. 113 00:05:24,195 --> 00:05:27,275 114 00:05:27,275 --> 00:05:27,775 Che cosa? 115 00:05:27,775 --> 00:05:31,140 116 00:05:31,140 --> 00:05:31,640 No. 117 00:05:31,640 --> 00:05:34,410 118 00:05:34,410 --> 00:05:40,250 Giuro su Dio, ho provato questo più volte oggi. 119 00:05:40,250 --> 00:05:41,720 Hai capito? 120 00:05:41,720 --> 00:05:43,145 >> [VOCI interponendo] 121 00:05:43,145 --> 00:05:46,470 122 00:05:46,470 --> 00:05:49,560 >> DAVID MALAN: OK, forse un errore dell'utente. 123 00:05:49,560 --> 00:05:50,550 Questo è due. 124 00:05:50,550 --> 00:05:53,300 Ha funzionato per due su un qualche centinaio, tre, quattro. 125 00:05:53,300 --> 00:05:55,940 OK, questo è un bene. 126 00:05:55,940 --> 00:05:58,520 Quattro su cinque per correttezza che ne dite. 127 00:05:58,520 --> 00:05:59,810 >> Quindi, quello che è appena successo? 128 00:05:59,810 --> 00:06:02,727 Quindi, presumibilmente, senza vedere il tuo schermi, perché potrebbe si sono errored? 129 00:06:02,727 --> 00:06:05,518 E 'probabilmente che eravamo solo cercando di fare troppe connessioni 130 00:06:05,518 --> 00:06:08,110 al server di posta di Harvard tutto in una una volta dallo stesso indirizzo IP. 131 00:06:08,110 --> 00:06:10,740 Sto solo cercando di indovinare da quando non l'ho fatto il lusso di test 132 00:06:10,740 --> 00:06:13,220 questo codice con alcune 300 persone in anticipo 133 00:06:13,220 --> 00:06:16,040 ma per ora rendersi conto che che almeno voglia 134 00:06:16,040 --> 00:06:18,250 hanno ottenuto il lavoro fatto questa volta. 135 00:06:18,250 --> 00:06:22,880 >> Va bene, e allora perché è questo tutto il più attinente a quello che sta succedendo? 136 00:06:22,880 --> 00:06:24,900 Beh in primo luogo, una rapida paio di annunci. 137 00:06:24,900 --> 00:06:29,350 Quindi uno, se vuoi partecipare Chang, e Nick, e gli altri a pranzo questo Venerdì, 138 00:06:29,350 --> 00:06:32,400 fare RSVP al solito URL lì. 139 00:06:32,400 --> 00:06:35,650 Se state pensando di concentrazione o fare una secondaria in CS, 140 00:06:35,650 --> 00:06:38,941 se sei al secondo anno, o matricola, o anche junior o senior, a questo punto 141 00:06:38,941 --> 00:06:42,490 e può ancora spremere nei corsi, rendersi conto che la scuola di ingegneria 142 00:06:42,490 --> 00:06:45,620 sta raccogliendo gratuitamente Ben e Gelato di Jerry e consigli 143 00:06:45,620 --> 00:06:48,910 questo Mercoledì poco dopo le lezioni alle 04:00 nel palazzo CS 144 00:06:48,910 --> 00:06:49,771 a Maxwell Dworkin. 145 00:06:49,771 --> 00:06:51,520 Se questo è troppo veloce sullo schermo, basta andare 146 00:06:51,520 --> 00:06:55,260 per cs50.harvard.edu per un Link all'evento su Facebook 147 00:06:55,260 --> 00:06:57,140 dove si possono vedere i dettagli. 148 00:06:57,140 --> 00:07:01,390 >> Nel frattempo, ho pensato di correggere un'altra cosa che ho preso una cantonata il Mercoledì. 149 00:07:01,390 --> 00:07:04,400 Risulta che ID di Mark su Facebook non era tre. 150 00:07:04,400 --> 00:07:05,230 Erano le quattro. 151 00:07:05,230 --> 00:07:08,330 Si scopre che ha avuto più di prova conti di quanto mi ricordano. 152 00:07:08,330 --> 00:07:12,400 Ma ciò che questo sembrava un'opportunità fare è tirare su un URL come questo. 153 00:07:12,400 --> 00:07:16,680 >> Così si scopre che Facebook ha un API, Application Programming Interface, 154 00:07:16,680 --> 00:07:20,070 che è un meccanismo in base al quale si può richiedere i dati di programmazione 155 00:07:20,070 --> 00:07:24,480 Facebook e tornare macchina le informazioni leggibili, non le pagine web 156 00:07:24,480 --> 00:07:28,690 ma il testo appena prima, qualcosa chiamato JavaScript Object Notation. 157 00:07:28,690 --> 00:07:32,150 E infatti, se dovessi visitare questo URL, e lo zoom, per impostazione predefinita, 158 00:07:32,150 --> 00:07:34,960 questo è Mark di pubblico informazioni accessibili. 159 00:07:34,960 --> 00:07:37,430 >> E il particolare interessante qui è solo che il suo ID 160 00:07:37,430 --> 00:07:40,670 è davvero, numero quattro, che io realizzato non appena ho fatto questo. 161 00:07:40,670 --> 00:07:44,260 È possibile farlo da soli se si sa il nome utente di Facebook se ne hai uno. 162 00:07:44,260 --> 00:07:45,440 Basta digitare in su cima c'è. 163 00:07:45,440 --> 00:07:46,640 E tutto questo non è privata. 164 00:07:46,640 --> 00:07:48,670 Sto solo facendo questo anche nella modalità in incognito. 165 00:07:48,670 --> 00:07:49,900 Quindi non sono nemmeno collegato. 166 00:07:49,900 --> 00:07:54,440 E si sta vedendo che io a quanto pare è stato il numero utente 6454 167 00:07:54,440 --> 00:07:56,480 su Facebook, che non è troppo male in questi giorni. 168 00:07:56,480 --> 00:07:59,900 Quindi, in ogni caso, dove si può vedere ulteriori informazioni qui. 169 00:07:59,900 --> 00:08:02,150 >> E l'aspetto utile di che è che si 170 00:08:02,150 --> 00:08:06,890 potrebbe scrivere il proprio software in qualche modo integra dati come questo 171 00:08:06,890 --> 00:08:08,170 nella vostra applicazione. 172 00:08:08,170 --> 00:08:10,650 È possibile consentire agli utenti di accedere al vostro sito web, 173 00:08:10,650 --> 00:08:14,190 non utilizzando il proprio nome utente e una password, ma forse il loro login Facebook 174 00:08:14,190 --> 00:08:16,170 e ottenere informazioni anche dei loro amici, 175 00:08:16,170 --> 00:08:18,740 se approvare tali, o simili. 176 00:08:18,740 --> 00:08:21,430 Così notare che CS50, anche, ha alcune delle sue API, 177 00:08:21,430 --> 00:08:24,620 una per i dati di catalogo Naturalmente, un po 'per i menu abbracci in sala 178 00:08:24,620 --> 00:08:26,730 sale, tutte della edifici e luoghi 179 00:08:26,730 --> 00:08:30,930 nel campus abbiamo un API per oltre che è possibile interrogare in modo simile e ottenere 180 00:08:30,930 --> 00:08:35,520 dati testuali schiena che è possibile integrare in PHP o JavaScript, o anche, 181 00:08:35,520 --> 00:08:38,320 se meno comunemente, un C basa progetto finale. 182 00:08:38,320 --> 00:08:41,190 >> Infatti in anticipo per la finale progetto sono alcune pietre miliari. 183 00:08:41,190 --> 00:08:42,980 Hai ricevuto una email da noi l'altro giorno. 184 00:08:42,980 --> 00:08:45,761 Rendetevi conto che la proposta è dovuto il prossimo Lunedi. 185 00:08:45,761 --> 00:08:49,010 Non è necessariamente vincolante, ma si c'è bisogno di ricevere i vostri compagni di insegnamento 186 00:08:49,010 --> 00:08:51,260 l'approvazione prima di fare eventuali modifiche successivamente. 187 00:08:51,260 --> 00:08:54,280 E poi avanti sono un numero di altre pietre miliari. 188 00:08:54,280 --> 00:08:56,542 >> Quindi, per prendere in giro anche voi, con alcune possibilità, 189 00:08:56,542 --> 00:08:58,250 abbiamo un po 'di queste lampadine tonalità. 190 00:08:58,250 --> 00:09:01,190 E alcuni di voi ragazzi ora hanno un po ' di questi nella vostra stanza del dormitorio pure. 191 00:09:01,190 --> 00:09:02,920 E anche loro hanno una API. 192 00:09:02,920 --> 00:09:07,300 Così ricordare quelle settimane bulbi binari fa che Dan Bradley e Ansel 193 00:09:07,300 --> 00:09:08,780 Duff ha creato per noi. 194 00:09:08,780 --> 00:09:12,560 Hanno usato un software di interfaccia per questa lampadina, che al momento 195 00:09:12,560 --> 00:09:15,232 è inserito in energia elettrica e poi via wireless 196 00:09:15,232 --> 00:09:17,690 è collegato ad una piccola cosa chiamato il Ponte di quaggiù, 197 00:09:17,690 --> 00:09:21,280 come un piccolo router proprietario a questo particolare dispositivo. 198 00:09:21,280 --> 00:09:26,540 >> Ma si scopre se so come inviare messaggi HTTP, come tutti noi ora facciamo, 199 00:09:26,540 --> 00:09:31,670 Posso inviare un messaggio come questo per questa lampadina per attivare o disattivare 200 00:09:31,670 --> 00:09:34,000 o fare qualsiasi numero di altre operazioni su di esso. 201 00:09:34,000 --> 00:09:36,110 Si noti che non è arrivare, non è postare. 202 00:09:36,110 --> 00:09:37,760 C'è un altro chiamato put. 203 00:09:37,760 --> 00:09:39,630 C'è in realtà un paio di altri tali verbi. 204 00:09:39,630 --> 00:09:42,920 Ma notare c'è un percorso lì, API tagliare, tagliare nuovo sviluppatore, 205 00:09:42,920 --> 00:09:44,990 tagliare la luce, tagliare uno, ridurre drasticamente Stato. 206 00:09:44,990 --> 00:09:49,060 >> Questo è a quanto pare solo il percorso che l'azienda, Philips, 207 00:09:49,060 --> 00:09:51,640 deciso che si deve colpire con una richiesta HTTP 208 00:09:51,640 --> 00:09:55,010 se si desidera modificare lo stato della lampadina utilizzando HTTP 1.1. 209 00:09:55,010 --> 00:09:56,380 Poi notare la riga vuota. 210 00:09:56,380 --> 00:10:00,170 E poi, infine, quello che sembra tipo di un array di qualche tipo, 211 00:10:00,170 --> 00:10:04,730 Stati Uniti d'America sta per essere chiamato JavaScript Object Notation, o Jason. 212 00:10:04,730 --> 00:10:08,000 E quello che vedete qui è che ci sono tre coppie di valori chiave. 213 00:10:08,000 --> 00:10:09,115 >> Una chiave è chiamato. 214 00:10:09,115 --> 00:10:10,990 E il suo valore a quanto pare sta per essere vero. 215 00:10:10,990 --> 00:10:13,612 La luminosità è 128, che è una sorta di int. 216 00:10:13,612 --> 00:10:15,820 E allora è tempo di transizione zero, che è apparentemente 217 00:10:15,820 --> 00:10:17,970 quanto tempo sta andando a prendere per girare questa cosa. 218 00:10:17,970 --> 00:10:19,890 >> Così adesso questa lampadina è spenta. 219 00:10:19,890 --> 00:10:22,880 Ma se lo faccio esattamente questo-- lasciare andare a un po 'di foglietto 220 00:10:22,880 --> 00:10:25,200 che Dan istituito nel advance-- e ho intenzione 221 00:10:25,200 --> 00:10:27,920 di andare avanti e copiare il seguente comando. 222 00:10:27,920 --> 00:10:30,200 Curl, come alcuni di voi potrebbe aver spigolato su CS50 223 00:10:30,200 --> 00:10:35,080 Discutere è un programma di utilità come ad esempio Telnet che è possibile simulare le richieste HTTP, 224 00:10:35,080 --> 00:10:36,360 in particolare mette. 225 00:10:36,360 --> 00:10:39,710 Posso inviare questi dati, in particolare quello che abbiamo appena 226 00:10:39,710 --> 00:10:43,430 ha visto un momento fa specificamente a questo URL qui. 227 00:10:43,430 --> 00:10:46,310 E poi Curl sta per gestire tutte le intestazioni necessarie 228 00:10:46,310 --> 00:10:47,600 e l'analisi di lì. 229 00:10:47,600 --> 00:10:54,700 >> Quindi tutto quello che devo fare è copiare questo in una finestra del terminale e quindi premere Invio. 230 00:10:54,700 --> 00:10:56,000 E la lampadina si accende. 231 00:10:56,000 --> 00:10:59,060 E questo è tutto sta attraversando il mio computer in modalità wireless 232 00:10:59,060 --> 00:11:01,960 in qualche modo fino al ponte, che viene poi a parlare con questa lampadina. 233 00:11:01,960 --> 00:11:02,960 Posso fare qualcosa di diverso. 234 00:11:02,960 --> 00:11:07,050 Posso fare questa cosa andare rosso per esempio. 235 00:11:07,050 --> 00:11:11,040 Posso per esempio fare questa cosa andare verde. 236 00:11:11,040 --> 00:11:12,220 Posso farlo andare blu. 237 00:11:12,220 --> 00:11:14,760 >> E notare in ciascuno di questi casi, tutto ciò che sto cambiando 238 00:11:14,760 --> 00:11:18,540 è il cosiddetto valore di tonalità a in realtà dargli un po 'di colore. 239 00:11:18,540 --> 00:11:20,320 Così mi permetta di incollare questo in pure. 240 00:11:20,320 --> 00:11:21,000 Ora è blu. 241 00:11:21,000 --> 00:11:24,672 >> E si può fare ancora di più elaborato cose where-- andiamo a verde. 242 00:11:24,672 --> 00:11:26,630 E potrei fare questo di Naturalmente con il mio codice. 243 00:11:26,630 --> 00:11:30,670 Ma anche la stessa API supporta le operazioni di funky 244 00:11:30,670 --> 00:11:35,510 in questo modo, che ora preoccuparsi noi per i prossimi 30 secondi. 245 00:11:35,510 --> 00:11:39,170 >> Ecco, questo è un assaggio di quello che si potrebbe fare con un API, questo coinvolge 246 00:11:39,170 --> 00:11:40,010 lampadine. 247 00:11:40,010 --> 00:11:42,510 Si noti che CS50 ha un paio paia di Google Glass se si desidera 248 00:11:42,510 --> 00:11:45,380 come affrontare qualcosa di simile quelle linee, Arduino Unos, che 249 00:11:45,380 --> 00:11:48,670 sono minuscoli computer, in sostanza, su un circuito poco 250 00:11:48,670 --> 00:11:50,470 che è possibile collegare fili e altre cose 251 00:11:50,470 --> 00:11:52,732 e, di fatto il controllo l'ambiente del mondo reale. 252 00:11:52,732 --> 00:11:54,940 E poi ci sono un paio di nuovi giocattoli che abbiamo. 253 00:11:54,940 --> 00:11:59,294 Questo letteralmente appena arrivato il altro giorno via e-mail, un Myo Armband. 254 00:11:59,294 --> 00:12:01,710 E ho pensato che è un modo per farti eccitato sui progetti 255 00:12:01,710 --> 00:12:03,720 che è possibile utilizzare con questo hardware sarebbe 256 00:12:03,720 --> 00:12:08,900 essere quello di giocare a questo breve clip che usano per prendere in giro la gente 257 00:12:08,900 --> 00:12:10,500 che stiamo ora vivendo nel futuro. 258 00:12:10,500 --> 00:12:13,494 259 00:12:13,494 --> 00:12:15,490 >> [RIPRODUZIONE DI BRANI MUSICALI] 260 00:12:15,490 --> 00:13:33,410 261 00:13:33,410 --> 00:13:37,109 >> DAVID MALAN: Quindi, nel giro di poche settimane, si Anche può essere che freddo in fiera CS50. 262 00:13:37,109 --> 00:13:39,150 Un altro dispositivo che avere un po 'di che siamo 263 00:13:39,150 --> 00:13:42,090 felice di prestito per i progetti viene chiamato un controller di movimento. 264 00:13:42,090 --> 00:13:45,030 Si tratta di un piccolo dispositivo USB si connette a un computer che 265 00:13:45,030 --> 00:13:47,520 consente di interagire con il vostro computer portatile, Mac o PC, 266 00:13:47,520 --> 00:13:51,570 come se tu avessi come un Xbox Kinect e in realtà fare movimenti fisici molto 267 00:13:51,570 --> 00:13:54,509 come vediamo in questo visione del futuro. 268 00:13:54,509 --> 00:13:56,505 >> [RIPRODUZIONE DI BRANI MUSICALI] 269 00:13:56,505 --> 00:15:03,380 270 00:15:03,380 --> 00:15:06,260 >> DAVID MALAN: Quindi, anche se si dispone di idea di come qualcosa di simile 271 00:15:06,260 --> 00:15:10,050 potrebbe essere di fantasia o di lavoro a livello di hardware, non importa. 272 00:15:10,050 --> 00:15:13,520 Anche dopo pochi mesi di CS50, e la comprensione della programmazione 273 00:15:13,520 --> 00:15:19,460 più in generale, e programmazione web più di recente, e poi anche le API, e HTTP, 274 00:15:19,460 --> 00:15:21,830 avrete accesso tramite API software se si 275 00:15:21,830 --> 00:15:24,680 voglio prendere in prestito uno di questi dispositivi per parlare in realtà ad esso 276 00:15:24,680 --> 00:15:27,180 e non devono preoccuparsi di l'implementazione sottostante 277 00:15:27,180 --> 00:15:30,220 dettagli, completamente in linea con questo concetto di stratificazione 278 00:15:30,220 --> 00:15:33,610 un'astrazione che abbiamo visto tutto il semestre. 279 00:15:33,610 --> 00:15:37,990 >> Così anche durante il fine settimana, ha visto un paio di pezzi di notizie. 280 00:15:37,990 --> 00:15:40,640 Vai in primo luogo, andare a seminari, se si vorrei imparare qualcosa 281 00:15:40,640 --> 00:15:42,160 di più su qualsiasi numero di argomenti. 282 00:15:42,160 --> 00:15:43,340 Vedere l'URL lì. 283 00:15:43,340 --> 00:15:45,890 E questo è stato inviato a mi da Chang, che si sa, 284 00:15:45,890 --> 00:15:47,850 che è la stampa il nostro esercito di elefanti. 285 00:15:47,850 --> 00:15:49,910 Ed era un titolo come segue. 286 00:15:49,910 --> 00:15:51,280 Ho il terrore del mio nuovo televisore. 287 00:15:51,280 --> 00:15:54,301 Perché ho paura di trasformare questo cosa su e si sarebbe troppo. 288 00:15:54,301 --> 00:15:56,050 Quindi siamo ora al puntare nel semestre, 289 00:15:56,050 --> 00:15:58,860 troppo, dove anche se si dispone di il minimo di comprensione 290 00:15:58,860 --> 00:16:02,620 di come funziona il web, e HTTP, e di sicurezza, cose come questa 291 00:16:02,620 --> 00:16:03,980 dovrebbe iniziare a catturare l'occhio. 292 00:16:03,980 --> 00:16:07,450 Ma anche, capirai se queste cose sono o non sono 293 00:16:07,450 --> 00:16:08,430 minacce attuali. 294 00:16:08,430 --> 00:16:10,940 >> Così ho preso un paio di brani da questo articolo qui. 295 00:16:10,940 --> 00:16:12,540 E la storia è la seguente. 296 00:16:12,540 --> 00:16:14,300 Ora sono il proprietario del un nuovo televisore intelligente, che 297 00:16:14,300 --> 00:16:18,470 promette di consegnare in streaming contenuti multimediali, giochi, app, 298 00:16:18,470 --> 00:16:21,450 social media e internet navigazione, oh e TV troppo. 299 00:16:21,450 --> 00:16:24,410 L'unico problema è che sono ora paura di usarlo, dice l'autore. 300 00:16:24,410 --> 00:16:29,592 Si sarebbe, anche, se si legge attraverso il 46 pagina politica sulla privacy per il televisore. 301 00:16:29,592 --> 00:16:31,800 La quantità di dati presente raccoglie cosa è sconcertante. 302 00:16:31,800 --> 00:16:35,710 Si registra, dove, quando, come, e per quanto tempo si utilizza il televisore. 303 00:16:35,710 --> 00:16:38,190 Esso stabilisce tracking cookie, come abbiamo discusso, 304 00:16:38,190 --> 00:16:40,560 e fari progettati per rilevare quando si ha 305 00:16:40,560 --> 00:16:43,185 particolare contenuto visualizzato o un particolare messaggio e-mail 306 00:16:43,185 --> 00:16:45,230 se si desidera controllare la posta elettronica sul televisore. 307 00:16:45,230 --> 00:16:48,430 Registra le applicazioni che si utilizzare, i siti Web visitati, 308 00:16:48,430 --> 00:16:52,280 e come interagire con i contenuti, fare tutto questo tramite il televisore intelligente. 309 00:16:52,280 --> 00:16:55,470 Inoltre, yet-- creepier questo è il mio addition-- 310 00:16:55,470 --> 00:16:58,140 è dotato di una fotocamera con il riconoscimento facciale. 311 00:16:58,140 --> 00:17:01,010 >> Lo scopo è quello di fornire Controllo gesto per la TV 312 00:17:01,010 --> 00:17:05,490 e vi permetterà di accedere a account utilizzando il tuo volto personalizzato. 313 00:17:05,490 --> 00:17:08,940 Sul lato positivo, le immagini sono salvato sul televisore invece che caricato 314 00:17:08,940 --> 00:17:09,940 a un server aziendale. 315 00:17:09,940 --> 00:17:12,520 Sul lato negativo, internet collegamento rende l'intero TV 316 00:17:12,520 --> 00:17:14,811 vulnerabili agli hacker che hanno dimostrato la capacità 317 00:17:14,811 --> 00:17:16,700 di assumere il controllo completo della macchina. 318 00:17:16,700 --> 00:17:20,880 >> Più preoccupante, come se non fosse abbastanza intelligente, è il microfono. 319 00:17:20,880 --> 00:17:23,599 La TV dispone di una voce funzione di riconoscimento 320 00:17:23,599 --> 00:17:26,859 che consente agli spettatori di controllo lo schermo con comandi vocali. 321 00:17:26,859 --> 00:17:30,290 Ma il servizio è dotato di un avvertimento piuttosto inquietante. 322 00:17:30,290 --> 00:17:33,030 Si prega di essere consapevoli del fatto che, se le tue parole pronunciate sono 323 00:17:33,030 --> 00:17:36,210 personale o altri sensibili informazioni, che le informazioni 324 00:17:36,210 --> 00:17:40,310 sarà tra i dati acquisiti e trasmessi a terzi. 325 00:17:40,310 --> 00:17:40,870 Tutto chiaro? 326 00:17:40,870 --> 00:17:45,860 Non dire personali o sensibili roba di fronte al vostro televisore. 327 00:17:45,860 --> 00:17:47,280 >> Quindi, questo è in realtà per davvero. 328 00:17:47,280 --> 00:17:50,530 Ed è difficile non vedere se si andare a Best Buy o simili per i televisori 329 00:17:50,530 --> 00:17:51,030 in questi giorni. 330 00:17:51,030 --> 00:17:52,540 Sono tutti intelligenti in qualche modo. 331 00:17:52,540 --> 00:17:54,740 E che stanno ottenendo più intelligente e inquietante. 332 00:17:54,740 --> 00:17:57,490 E sono semplicemente la raccolta di dati in modi che abbiamo parlato 333 00:17:57,490 --> 00:18:01,840 e poi caricarlo tramite HTTP o qualche altro protocollo per alcuni server. 334 00:18:01,840 --> 00:18:05,720 >> Quindi questo era di un articolo di divertimento in questo sito on-line 335 00:18:05,720 --> 00:18:08,940 qui, che ha parlato di una particolare bug o un codice sbagliato 336 00:18:08,940 --> 00:18:11,340 che possiamo effettivamente legare nella discussione della scorsa settimana. 337 00:18:11,340 --> 00:18:15,730 Quindi, questo titolo è stato come segue, la storia va qui, 338 00:18:15,730 --> 00:18:18,720 Josh Breckman ha lavorato per un società che ha ottenuto un contratto di 339 00:18:18,720 --> 00:18:22,390 sviluppare una gestione dei contenuti sistema, o CMS come si chiamano, 340 00:18:22,390 --> 00:18:24,380 per un gran sito del governo. 341 00:18:24,380 --> 00:18:27,300 Gran parte del progetto ha coinvolto sviluppo di un sistema di gestione dei contenuti 342 00:18:27,300 --> 00:18:29,840 in modo che i dipendenti sarebbero in grado di costruire e mantenere 343 00:18:29,840 --> 00:18:31,877 il continuo cambiamento contenuti per il loro sito. 344 00:18:31,877 --> 00:18:34,210 Le cose sono andate abbastanza bene per pochi giorni dopo di andare in diretta. 345 00:18:34,210 --> 00:18:37,020 Ma il sesto giorno, le cose non andavano così bene. 346 00:18:37,020 --> 00:18:39,500 Tutti i contenuti sulla sito era completamente svanito. 347 00:18:39,500 --> 00:18:42,950 E tutte le pagine hanno portato al default, inserisci contenuto della pagina web. 348 00:18:42,950 --> 00:18:43,810 Ops. 349 00:18:43,810 --> 00:18:46,080 Josh è stato chiamato a indagare e ho notato 350 00:18:46,080 --> 00:18:49,390 che uno particolarmente fastidiosi indirizzo IP esterno aveva 351 00:18:49,390 --> 00:18:53,380 andata e cancellato tutti il contenuto di sistema. 352 00:18:53,380 --> 00:18:56,290 >> L'indirizzo IP non apparteneva in una certa all'estero degli hacker piegato 353 00:18:56,290 --> 00:18:58,340 a distruggere utile informazioni governative. 354 00:18:58,340 --> 00:19:05,190 Si decise di googlebot.com, Molto proprio web crawling spider di Google. 355 00:19:05,190 --> 00:19:06,010 Ops. 356 00:19:06,010 --> 00:19:09,150 Dopo un po 'di ricerca e di scrambling intorno per trovare un backup noncorrupt, 357 00:19:09,150 --> 00:19:10,180 Josh ha trovato il problema. 358 00:19:10,180 --> 00:19:12,700 >> Un utente aveva copiato e incollato alcuni contenuti da un 359 00:19:12,700 --> 00:19:15,670 pagina all'altra, compresa una Modifica collegamento ipertestuale 360 00:19:15,670 --> 00:19:17,577 per modificare il contenuto della pagina. 361 00:19:17,577 --> 00:19:20,160 Normalmente questo non sarebbe problema dal momento che un utente esterno sarebbe 362 00:19:20,160 --> 00:19:24,320 necessario immettere un nome e una password, ma il sistema di autenticazione CMS, 363 00:19:24,320 --> 00:19:27,520 il sistema di login, non ha preso in considerazione 364 00:19:27,520 --> 00:19:30,980 sofisticato di hacking tecniche di Google Spider. 365 00:19:30,980 --> 00:19:31,700 Ops. 366 00:19:31,700 --> 00:19:33,610 >> Come si è visto, Google Spider non fa uso di 367 00:19:33,610 --> 00:19:36,950 cookie, il che significa che si può bypassare facilmente un controllo per il 368 00:19:36,950 --> 00:19:39,840 viene registrato sul set dei cookie per essere falso. 369 00:19:39,840 --> 00:19:42,620 Inoltre non prestare attenzione a JavaScript, che normalmente 370 00:19:42,620 --> 00:19:45,170 richiedere e reindirizzare gli utenti che non è iscritto. 371 00:19:45,170 --> 00:19:48,610 Lo fa però seguire ogni collegamento ipertestuale su ogni pagina che trova, 372 00:19:48,610 --> 00:19:51,700 compresi quelli con Elimina pagina nel titolo. 373 00:19:51,700 --> 00:19:52,650 Ops. 374 00:19:52,650 --> 00:19:56,070 >> Che cosa significa questo in più termini tecnici ma abbastanza accessibili? 375 00:19:56,070 --> 00:19:58,340 Significa solo che tutto il loro sito web, 376 00:19:58,340 --> 00:20:02,287 avevano URL non dissimile da questa che si potrebbe vedere in problema impostare sette. 377 00:20:02,287 --> 00:20:04,620 Richiamo in problema impostare sette o conoscere nel problem set di sette 378 00:20:04,620 --> 00:20:06,411 che si sta sfidato, tra le altre cose, 379 00:20:06,411 --> 00:20:08,570 di vendere le scorte per conto degli utenti. 380 00:20:08,570 --> 00:20:14,010 Ma attuazione di tale funzione a titolo di ottenere tramite collegamenti ipertestuali nel vostro utente 381 00:20:14,010 --> 00:20:16,880 interfaccia, probabilmente non l'idea più intelligente 382 00:20:16,880 --> 00:20:20,300 perché se il sito è in qualche modo accessibile sia da un essere umano 383 00:20:20,300 --> 00:20:23,577 che sta cliccando in giro o comprare un bot come Google o di un ragno 384 00:20:23,577 --> 00:20:26,160 come si chiamano questo è solo scansione del Web cercando di indice 385 00:20:26,160 --> 00:20:29,060 il web come un motore di ricerca, potevano facilmente 386 00:20:29,060 --> 00:20:31,340 colpito con ottenere questo tipo di URL. 387 00:20:31,340 --> 00:20:33,770 E questo è funzionalmente equivalente, in questo caso, 388 00:20:33,770 --> 00:20:37,000 vendita di tutte le azioni di Google. 389 00:20:37,000 --> 00:20:40,030 >> Ora, francamente, è completamente asinine che il CMS 390 00:20:40,030 --> 00:20:43,240 usato JavaScript ei cookie di implementare il suo sistema di login 391 00:20:43,240 --> 00:20:47,100 e non fare che lato server, come ragazzi esistono ed in PSet 7-- 392 00:20:47,100 --> 00:20:49,940 c'è un login.php file-- sempre, sempre, 393 00:20:49,940 --> 00:20:52,789 sempre la sicurezza dovrebbe essere fatto sul lato server, 394 00:20:52,789 --> 00:20:56,080 non sul lato client perché, come questa articolo suggerisce e si potrebbe te 395 00:20:56,080 --> 00:20:59,600 vedere ad un certo punto, è banale per un utente, buono o cattivo, 396 00:20:59,600 --> 00:21:02,860 trasformare appena fuori JavaScript per non parlare di cookie. 397 00:21:02,860 --> 00:21:06,020 Quindi, questo è il vostro WTF quotidiano. 398 00:21:06,020 --> 00:21:07,970 >> C'è un di più, che è solo un po 'paura, 399 00:21:07,970 --> 00:21:11,360 così io vi ho citato, se solo come lezione di vita. 400 00:21:11,360 --> 00:21:14,850 Ogni volta che si utilizza un'applicazione chiamato come Snapchat o simili 401 00:21:14,850 --> 00:21:19,380 che dice queste foto durano solo per cinque secondi, dieci secondi, o roba del genere. 402 00:21:19,380 --> 00:21:21,680 Sono effimero Questo è assolutamente non è il caso. 403 00:21:21,680 --> 00:21:25,670 Come non c'è modo, in digitale, di attuare una qualche forma di video, 404 00:21:25,670 --> 00:21:30,150 o immagine, o testuale condivisione di tali che un destinatario all'altro capo 405 00:21:30,150 --> 00:21:31,660 non può in qualche modo salvare i dati. 406 00:21:31,660 --> 00:21:34,300 >> Nel modo più naif, qualcuno potrebbe prendere il loro telefono. 407 00:21:34,300 --> 00:21:36,850 E hanno una seconda finestra 10 mentre guardando qualche scatto 408 00:21:36,850 --> 00:21:39,410 di prendere solo un altro telefono e fotografare, ovviamente. 409 00:21:39,410 --> 00:21:41,660 Così si può conservare qualcosa di digitale in questo modo. 410 00:21:41,660 --> 00:21:44,620 Alcuni di voi sanno come prendere le immagini sul telefono. 411 00:21:44,620 --> 00:21:49,290 Infatti, se non si conosce questo, rendersi conto che almeno Snapchat, 412 00:21:49,290 --> 00:21:51,040 e credo che altri applicazioni in questi giorni, 413 00:21:51,040 --> 00:21:53,720 almeno dire se il destinatario ha effettivamente 414 00:21:53,720 --> 00:21:55,310 preso uno screenshot della vostra immagine. 415 00:21:55,310 --> 00:22:00,870 >> Ma peggio ancora, questo era il snappening, come qualcuno ha coniato di recente, 416 00:22:00,870 --> 00:22:04,680 dove circa 100.000 scatta era stato rilasciato 417 00:22:04,680 --> 00:22:09,310 in quello che è chiamato un file torrent su vari siti web in ultima analisi. 418 00:22:09,310 --> 00:22:12,000 E questi contenevano un sacco di messaggi privati ​​e post. 419 00:22:12,000 --> 00:22:15,210 Si scopre la maggior parte di loro benigna, quindi non quello che ci si potrebbe aspettare. 420 00:22:15,210 --> 00:22:17,580 Ma perché la gente aveva usato un sito web di terze parti, 421 00:22:17,580 --> 00:22:20,270 accedendo con loro Snapchat username e password e poi 422 00:22:20,270 --> 00:22:23,470 salvare tutti i loro scatti su questo sito web di terze parti. 423 00:22:23,470 --> 00:22:26,130 Ed era tale terzo sito web che è stato violato, 424 00:22:26,130 --> 00:22:30,710 che solo dire che qualcuno ha capito come per ottenere tutti i 100.000, più di quelle immagini 425 00:22:30,710 --> 00:22:33,822 nel proprio hard disk per la successiva condivisione. 426 00:22:33,822 --> 00:22:36,030 Francamente, anche qui, è una specie di asinine che Snapchat 427 00:22:36,030 --> 00:22:39,360 è implementato in modo che una terza parte può ordinare di intercettare 428 00:22:39,360 --> 00:22:43,310 i dati e che non è legato al vostro propria applicazione in esecuzione sul telefono. 429 00:22:43,310 --> 00:22:46,947 Ma anche qui, si rende conto che questi cose che non si dovrebbero prendere di sorpresa, 430 00:22:46,947 --> 00:22:49,030 o almeno ci dovrebbe essere una lezione di vita qui dentro. 431 00:22:49,030 --> 00:22:52,220 Se vuoi il tecnico dettagli, andare a tale URL lì 432 00:22:52,220 --> 00:22:53,570 che è nelle diapositive di oggi. 433 00:22:53,570 --> 00:23:00,960 D'accordo, tutte le domande su lezioni di vita di oggi per CS? 434 00:23:00,960 --> 00:23:02,710 Spegnerlo. 435 00:23:02,710 --> 00:23:04,970 Niente di niente? 436 00:23:04,970 --> 00:23:06,301 Niente di niente? 437 00:23:06,301 --> 00:23:09,050 Ho un sacco di gente controllo loro Snapchat o qualcosa adesso. 438 00:23:09,050 --> 00:23:11,690 >> Va bene, così SQL, Structured Query Language. 439 00:23:11,690 --> 00:23:12,509 Cerchiamo di avvolgere questo. 440 00:23:12,509 --> 00:23:14,300 Ed anche, benché stiamo solo graffi 441 00:23:14,300 --> 00:23:16,310 la superficie di questo lingua, ti daremo 442 00:23:16,310 --> 00:23:18,930 sufficiente della lingua sotto forma di PSet 7 443 00:23:18,930 --> 00:23:22,140 in modo da poter affrontare alcuni funzionalità abbastanza comune. 444 00:23:22,140 --> 00:23:24,912 Ma rendo conto che ci sono un paio cose che non richiediamo di voi, 445 00:23:24,912 --> 00:23:27,120 ma che stanno andando a essere importante venire progetti finali 446 00:23:27,120 --> 00:23:30,760 e certamente venire rendere effettivo siti web con utenti reali 447 00:23:30,760 --> 00:23:32,040 è questa decisione di progettazione. 448 00:23:32,040 --> 00:23:34,460 >> Risulta che in un database MySQL, è 449 00:23:34,460 --> 00:23:37,460 hanno mazzi di scelte come i tipi di dati per le colonne 450 00:23:37,460 --> 00:23:41,670 e altre cose, ma si hanno anche la scelta di un cosiddetto stoccaggio 451 00:23:41,670 --> 00:23:44,570 motore per tutti i vostri dati, il tipo di file system, 452 00:23:44,570 --> 00:23:46,700 se si ha familiarità, per tutti i vostri dati. 453 00:23:46,700 --> 00:23:48,830 Che formato è in ultima analisi, memorizzato in? 454 00:23:48,830 --> 00:23:53,300 E il più comune, forse, è stato MyISAM e InnoDB, termini tecnici 455 00:23:53,300 --> 00:23:56,060 che ci preoccupiamo solo nella misura in cui si ha 456 00:23:56,060 --> 00:23:58,500 e non si ha la seguente funzione. 457 00:23:58,500 --> 00:24:00,390 >> Supponiamo di avere un piccolo frigorifero dormitorio. 458 00:24:00,390 --> 00:24:03,030 E pensare che voi e la vostra compagno di stanza, che condividono questo frigo, 459 00:24:03,030 --> 00:24:04,682 sono veramente appassionato di latte per esempio. 460 00:24:04,682 --> 00:24:07,140 E questo è, infatti, come il storia è stata raccontata a me via del ritorno 461 00:24:07,140 --> 00:24:10,890 nel giorno in cui ho seguito un corso chiamato CS 161 Sistemi operativi, che 462 00:24:10,890 --> 00:24:12,580 esplora allo stesso modo questo argomento. 463 00:24:12,580 --> 00:24:13,760 Quindi hai questo frigorifero. 464 00:24:13,760 --> 00:24:14,630 Sei fuori di latte. 465 00:24:14,630 --> 00:24:17,000 E si arriva a casa, il tuo compagno di stanza di ancora in classe o qualsiasi altra cosa, 466 00:24:17,000 --> 00:24:19,208 e si decide che ho intenzione di uscire e prendere un po 'di latte. 467 00:24:19,208 --> 00:24:22,630 Così si chiude il frigo, blocco la stanza del dormitorio, andare dall'altra parte della strada 468 00:24:22,630 --> 00:24:25,330 a CVS o dovunque, e ottenere in fila per comprare il latte. 469 00:24:25,330 --> 00:24:28,960 >> Nel frattempo, il tuo compagno di stanza arriva a casa dalla classe, entra nella stanza del dormitorio, 470 00:24:28,960 --> 00:24:31,802 apre il frigo, si rende conto anche ooph, siamo fuori di latte. 471 00:24:31,802 --> 00:24:33,760 Quindi lui o lei chiude la frigo e poi succede 472 00:24:33,760 --> 00:24:35,610 per andare verso l'altro CVS, che sembra essere 473 00:24:35,610 --> 00:24:38,470 un isolato di distanza dagli altri CVS in piazza, e si mette in linea 474 00:24:38,470 --> 00:24:40,230 lì per ottenere un po 'di latte. 475 00:24:40,230 --> 00:24:42,524 Ora, naturalmente, pochi minuti più tardi, entrambi tornare, 476 00:24:42,524 --> 00:24:44,690 e il peggiore di tutti i possibili risultati è accaduto. 477 00:24:44,690 --> 00:24:45,792 Tutti e due hanno il latte. 478 00:24:45,792 --> 00:24:47,500 E non si ha realmente come il latte più di tanto. 479 00:24:47,500 --> 00:24:49,625 Quindi uno di loro è solo andando a inasprire ad un certo punto. 480 00:24:49,625 --> 00:24:55,941 Così ora avete una quantità eccessiva di latte in frigo tutto perché perché? 481 00:24:55,941 --> 00:24:57,072 >> [Incomprensibile] 482 00:24:57,072 --> 00:24:59,780 DAVID MALAN: Sì, non l'hai fatto qualche modo comunicare tra loro 483 00:24:59,780 --> 00:25:00,904 che si stavano diventando latte. 484 00:25:00,904 --> 00:25:04,320 Quindi nel più semplice dei modi nel mondo umano, 485 00:25:04,320 --> 00:25:08,390 come si potrebbe evitare questo stupido scenario si verifichi tale 486 00:25:08,390 --> 00:25:09,750 che si finisce solo con uno. 487 00:25:09,750 --> 00:25:10,840 Li testo, sì bene. 488 00:25:10,840 --> 00:25:12,877 Ma in quale altro modo? 489 00:25:12,877 --> 00:25:13,460 Post-it. 490 00:25:13,460 --> 00:25:14,626 DAVID MALAN: Una nota di post-it. 491 00:25:14,626 --> 00:25:17,150 Ogni forma di comunicazione che dice il tuo compagno di stanza 492 00:25:17,150 --> 00:25:18,670 non andare in frigo per il latte. 493 00:25:18,670 --> 00:25:20,440 Ho intenzione di andare a rifornire per conto mio. 494 00:25:20,440 --> 00:25:22,770 Quindi, in qualche modo bisogno per bloccare questa risorsa. 495 00:25:22,770 --> 00:25:27,180 Così possiamo fare questo-- possiamo tipo di rovinare la storia e si trasformano in una storia CS 496 00:25:27,180 --> 00:25:30,360 per cui pensare a questo come proprio come un variabile, che sono memorizzate certo valore. 497 00:25:30,360 --> 00:25:32,570 E proprio ora, il valore del latte è zero, 498 00:25:32,570 --> 00:25:35,410 che non si desidera che il compagno di stanza per ispezionare quella variabile 499 00:25:35,410 --> 00:25:38,730 e poi prendere una decisione se stesso in base allo stato della variabile 500 00:25:38,730 --> 00:25:42,430 se siete in procinto di cambiando lo stato di quella variabile. 501 00:25:42,430 --> 00:25:46,140 >> Così una delle linee di SQL che ci dare in PSet 7 specifica 502 00:25:46,140 --> 00:25:47,310 è questo qui. 503 00:25:47,310 --> 00:25:49,740 E noi non spendiamo un enorme quantità di tempo a parlarne. 504 00:25:49,740 --> 00:25:55,100 Ma si scopre, se si sta cercando per comprare un po 'magazzino in finanza CS50 505 00:25:55,100 --> 00:25:58,000 che hai già alcune azioni, si 506 00:25:58,000 --> 00:26:01,750 vogliono essere in grado di fare un numero di cose all'istante insieme. 507 00:26:01,750 --> 00:26:04,360 Si vuole essere in grado di efficace, a livello alto, 508 00:26:04,360 --> 00:26:06,700 Controllare tutto bene, se voglio di acquistare più azioni di libero, 509 00:26:06,700 --> 00:26:08,780 il penny stock che parlare nelle specifiche, 510 00:26:08,780 --> 00:26:10,660 Voglio primo controllo quante azioni ho. 511 00:26:10,660 --> 00:26:11,810 E supponiamo che sia cinque. 512 00:26:11,810 --> 00:26:14,600 E supponiamo che io voglio compro più 10, alla fine ho 513 00:26:14,600 --> 00:26:17,069 vogliono avere 15 parti di magazzino. 514 00:26:17,069 --> 00:26:18,360 Quindi devo fare due domande. 515 00:26:18,360 --> 00:26:20,230 Nei lo stato della variabile? 516 00:26:20,230 --> 00:26:21,470 Nei lo stato della riga? 517 00:26:21,470 --> 00:26:22,970 Quante sono le azioni non ho attualmente? 518 00:26:22,970 --> 00:26:24,636 Poi si vuole andare avanti e aggiornarlo. 519 00:26:24,636 --> 00:26:27,720 Ecco, questo è l'analogo al latte di controllare la riga, 520 00:26:27,720 --> 00:26:30,730 e poi si desidera aggiornarlo perché se si vuole comprare 10 azioni, 521 00:26:30,730 --> 00:26:32,521 non si desidera modificare la riga 10, si 522 00:26:32,521 --> 00:26:35,300 vuole cambiare a 5 più 10 o, naturalmente, 15. 523 00:26:35,300 --> 00:26:40,030 >> Questa linea di codice garantisce che queste due idee concettuali 524 00:26:40,030 --> 00:26:42,810 avvenire insieme o per niente. 525 00:26:42,810 --> 00:26:46,920 Nessuno, tra cui un altro utente che è registrato nello stesso sito, 526 00:26:46,920 --> 00:26:49,900 può in qualche modo interrompere il controllo della riga 527 00:26:49,900 --> 00:26:52,960 e l'aggiornamento della riga, la selezionare e l'aggiornamento se si vuole. 528 00:26:52,960 --> 00:26:57,360 E la sintassi non è super evidente, ma questa linea, è lunga è, 529 00:26:57,360 --> 00:27:01,150 assicura che queste due operazioni Controllare la variabile o controllare la riga 530 00:27:01,150 --> 00:27:04,660 e aggiornare la riga accadere atomicamente. 531 00:27:04,660 --> 00:27:06,849 >> Oh, ci risiamo. 532 00:27:06,849 --> 00:27:07,890 Messaggio di testo sul mio telefono. 533 00:27:07,890 --> 00:27:09,954 Quindi cerchiamo di fare questo un po 'più concreto. 534 00:27:09,954 --> 00:27:12,120 Supponiamo che non sei l'attuazione di un frigorifero, 535 00:27:12,120 --> 00:27:16,400 e non sei attuazione PSet 7 ma una banca vera e propria, 536 00:27:16,400 --> 00:27:20,000 o un bancomat, un Automated Teller Macchina, per cui in qualche modo 537 00:27:20,000 --> 00:27:22,960 vogliono essere in grado di potenziare agli utenti di trasferire i soldi 538 00:27:22,960 --> 00:27:24,500 da un conto ad un altro. 539 00:27:24,500 --> 00:27:25,100 OK, aspetta. 540 00:27:25,100 --> 00:27:26,683 Io vado a disattivare questa ora, grazie. 541 00:27:26,683 --> 00:27:30,450 Quindi vogliamo spostare denaro da un numero di conto 542 00:27:30,450 --> 00:27:33,600 in un altro account numero, in particolare 100 dollari. 543 00:27:33,600 --> 00:27:37,690 Quindi questo è una specie di un arbitrario esempio, per cui si, il bancomat, 544 00:27:37,690 --> 00:27:41,060 potrebbe voler eseguire due SQL query, sottrarre da un conto, 545 00:27:41,060 --> 00:27:42,430 e aggiungere l'altro account. 546 00:27:42,430 --> 00:27:46,766 Ma si vuole garantire che questi due linee entrambe accadono o per niente. 547 00:27:46,766 --> 00:27:48,640 Se non si desidera qualcosa essere interrotto. 548 00:27:48,640 --> 00:27:51,440 Non fare un po 'cattivo ragazzo intelligente in qualche modo in piedi a Bank of America 549 00:27:51,440 --> 00:27:53,270 con due bancomat di fronte di lui e in qualche modo 550 00:27:53,270 --> 00:27:55,270 sorta di digitare il comandi allo stesso tempo, 551 00:27:55,270 --> 00:28:01,230 si spera cercando di dedurre $ 200 invece di $ 100 e avendo solo 100 dollari accreditati. 552 00:28:01,230 --> 00:28:04,450 In breve, si vuole che questo si comportano esattamente come ci si aspetta. 553 00:28:04,450 --> 00:28:06,540 >> E il modo di fare questo in SQL database è 554 00:28:06,540 --> 00:28:09,350 si avvolge in ciò che è chiamato una transazione. 555 00:28:09,350 --> 00:28:14,290 Letteralmente in SQL, è possibile chiamare CS50 di funzione di interrogazione citando inizio unquote 556 00:28:14,290 --> 00:28:15,370 delle transazioni. 557 00:28:15,370 --> 00:28:18,640 Quindi è possibile eseguire qualsiasi numero di query SQL successive, 558 00:28:18,640 --> 00:28:20,870 ma nessuno di loro fa effettuare sul database 559 00:28:20,870 --> 00:28:25,880 fino alla chiamata di query tra virgolette commettere, se ancora una volta utilizzando PHP. 560 00:28:25,880 --> 00:28:29,810 E in questo modo, è possibile garantire che anche se si dispone di 1.000 utenti tutto 561 00:28:29,810 --> 00:28:32,080 colpire il database Allo stesso tempo, SQL 562 00:28:32,080 --> 00:28:34,540 vi prometto che questi due query saranno 563 00:28:34,540 --> 00:28:36,740 attuata una dopo l'altra. 564 00:28:36,740 --> 00:28:40,330 In modo da non finire con eccesso di latte o un importo errato, in ultima analisi, 565 00:28:40,330 --> 00:28:40,830 di denaro. 566 00:28:40,830 --> 00:28:43,110 >> Quindi, tenere questo in mente, non tanto per PSet 7 567 00:28:43,110 --> 00:28:45,250 ma per i progetti definitivi se si sta effettivamente 568 00:28:45,250 --> 00:28:49,690 cercando di spostare i dati in giro attraverso le tabelle come si potrebbe qui. 569 00:28:49,690 --> 00:28:53,980 Ma forse ancora più semplice e più agevole capire con un esempio 570 00:28:53,980 --> 00:28:54,860 è questo qui. 571 00:28:54,860 --> 00:28:57,760 E qualcuno ci ha mandato su questo proprio l'altro giorno 572 00:28:57,760 --> 00:28:59,600 quando ha visto qualcosa di simile in linea. 573 00:28:59,600 --> 00:29:03,480 >> Quindi, per quanto ne so, il sistema pin non è vulnerabile a questo attacco. 574 00:29:03,480 --> 00:29:06,637 E non ho idea se anche usi il database SQL sotto la cappa. 575 00:29:06,637 --> 00:29:08,470 Ma lo si può usare per il bene della discussione. 576 00:29:08,470 --> 00:29:10,178 Ecco la schermata che Gente di Harvard tendono 577 00:29:10,178 --> 00:29:13,620 per vedere quando si accede con il loro Numero Harvard ID e il PIN. 578 00:29:13,620 --> 00:29:19,020 E supponiamo che il sistema perno erano implementato in PHP e MySQL 579 00:29:19,020 --> 00:29:22,000 banca dati, il codice che qualcuno anni avrebbe potuto scrivere fa 580 00:29:22,000 --> 00:29:23,270 potrebbe essere il seguente. 581 00:29:23,270 --> 00:29:25,230 In primo luogo, dichiarare una chiamato nome utente variabile. 582 00:29:25,230 --> 00:29:27,560 E solo ottenere che dal il superglobale POST. 583 00:29:27,560 --> 00:29:30,140 Allora un'altra variabile chiamato password e fare lo stesso. 584 00:29:30,140 --> 00:29:33,080 E poi basta eseguire questa lunga domanda qui, 585 00:29:33,080 --> 00:29:36,690 selezionare stelle da parte degli utenti dove nome utente è uguale a questo e questo 586 00:29:36,690 --> 00:29:38,510 e password uguale così e così. 587 00:29:38,510 --> 00:29:40,660 >> Si noti che il riccio bretelle Ho usato qui 588 00:29:40,660 --> 00:29:42,880 semplicemente significa PHP, andare avanti e sostituto 589 00:29:42,880 --> 00:29:45,400 il valore di questi due variabili proprio lì. 590 00:29:45,400 --> 00:29:50,090 Non sono strettamente necessari, ma essi tendono ad evitare errori di sintassi sottili. 591 00:29:50,090 --> 00:29:53,650 Quindi questo sembra completamente corretta a prima vista. 592 00:29:53,650 --> 00:29:54,240 Ed è. 593 00:29:54,240 --> 00:29:56,680 Si potrebbe implementare la Sistema perno in questo modo. 594 00:29:56,680 --> 00:30:00,460 >> Ma supponiamo che un super allievo astuto e maligno 595 00:30:00,460 --> 00:30:03,020 questo ingresso come suo perno. 596 00:30:03,020 --> 00:30:05,550 Così ho rimosso il proiettile segni qui nel mock up, 597 00:30:05,550 --> 00:30:08,760 e in realtà ho rivelato quello che lui o lei potrebbe essere la digitazione. 598 00:30:08,760 --> 00:30:10,350 Ed è un po 'strano. 599 00:30:10,350 --> 00:30:13,850 Ma ciò che salta fuori a voi in potenzialmente preoccupante su input dell'utente, 600 00:30:13,850 --> 00:30:16,450 anche se non avete idea di cosa un attacco di SQL injection significa. 601 00:30:16,450 --> 00:30:20,300 Perché questo sembra un po 'di pesce? 602 00:30:20,300 --> 00:30:21,050 Che cos'è? 603 00:30:21,050 --> 00:30:21,550 [Incomprensibile] 604 00:30:21,550 --> 00:30:24,260 DAVID MALAN: La o è un po 'sospettoso. 605 00:30:24,260 --> 00:30:26,310 In realtà, questo è una parola chiave da SQL. 606 00:30:26,310 --> 00:30:28,105 In modo che non fa ben sperare. 607 00:30:28,105 --> 00:30:29,980 Il fatto che ci sia tutte queste virgolette singole 608 00:30:29,980 --> 00:30:32,646 there-- infatti, uno dei più facili modi per rompere alcuni database 609 00:30:32,646 --> 00:30:35,880 è digitando un nome come O'Reilly che ha un apostrofo in essa 610 00:30:35,880 --> 00:30:38,600 perché se l'uomo che ha scritto il codice dietro le quinte 611 00:30:38,600 --> 00:30:41,570 non tiene conto del fatto che ci potrebbe essere virgolette singole a un utente di 612 00:30:41,570 --> 00:30:45,060 ingresso, e lui o lei sta usando virgolette singole nel loro codice, 613 00:30:45,060 --> 00:30:46,040 cose brutte possono accadere. 614 00:30:46,040 --> 00:30:47,870 >> In realtà, peggio ancora, considerare questo. 615 00:30:47,870 --> 00:30:50,600 Se questo è stato nuovamente il codice che qualcuno a Harvard anni 616 00:30:50,600 --> 00:30:53,100 fa ha scritto per il perno sistema, notare ciò che è 617 00:30:53,100 --> 00:30:56,220 per cominciare sostituito nome utente e password 618 00:30:56,220 --> 00:30:59,780 se l'utente di nuovo skroob come il loro nome utente 619 00:30:59,780 --> 00:31:03,960 e poi uno, due, tre, quattro, cinque, quote o tra virgolette uno uguale 620 00:31:03,960 --> 00:31:04,660 citare uno. 621 00:31:04,660 --> 00:31:07,220 E notare che cosa è chiave qui è l'utente non ha 622 00:31:07,220 --> 00:31:09,900 iniziato la loro password o il pin con una citazione. 623 00:31:09,900 --> 00:31:12,610 E non hanno finito la con una citazione perché lui o lei 624 00:31:12,610 --> 00:31:16,315 sta assumendo che se la programmatore non era così forte, 625 00:31:16,315 --> 00:31:18,690 che stanno per avere quelle virgolette singole nel loro codice. 626 00:31:18,690 --> 00:31:19,860 >> Quindi, ecco il codice. 627 00:31:19,860 --> 00:31:23,820 E la sostituzione che potrebbe ora accadere è questo. 628 00:31:23,820 --> 00:31:26,350 E ho sottolineato quanto l'utente ha digitato. 629 00:31:26,350 --> 00:31:28,480 Quindi, prima, dopo. 630 00:31:28,480 --> 00:31:33,330 E notare che cosa è leggermente preoccupante ora circa la metà destra di questo codice SQL? 631 00:31:33,330 --> 00:31:36,300 E 'un po' più complesso, è vero, rispetto alle richieste che abbiamo visto. 632 00:31:36,300 --> 00:31:38,550 Ma questo non può assolutamente essere una buona cosa se siete 633 00:31:38,550 --> 00:31:42,240 dicendo selezionare stella, che è selezionare tutto, dalla tabella degli utenti 634 00:31:42,240 --> 00:31:46,630 dove username è uguale skroob e la password è uguale a uno, due, tre, quattro, 635 00:31:46,630 --> 00:31:49,610 cinque o uno fa uno. 636 00:31:49,610 --> 00:31:53,860 Qual è l'implicazione logica di tale ultima clausola presumibilmente? 637 00:31:53,860 --> 00:31:55,650 E 'solo sempre vero. 638 00:31:55,650 --> 00:31:59,930 >> E perché abbiamo una sorta di intuito o capito per tentativi ed errori 639 00:31:59,930 --> 00:32:02,760 che il programmatore che ha scritto questo codice non ha 640 00:32:02,760 --> 00:32:07,250 anticipare una persona umana o cattiva digitare tra virgolette singole, come pure, 641 00:32:07,250 --> 00:32:10,350 siamo in grado di Sintatticamente completare la query SQL 642 00:32:10,350 --> 00:32:12,260 con qualcosa di assurdo ma qualcosa che 643 00:32:12,260 --> 00:32:15,930 è sintatticamente errata che restituisce sempre true. 644 00:32:15,930 --> 00:32:19,130 Quindi, se questo codice viene utilizzato per rispondere la domanda vero o falso dovrebbe 645 00:32:19,130 --> 00:32:22,930 questo utente è autorizzato a passare, il risposta è sempre a quanto pare sta 646 00:32:22,930 --> 00:32:26,930 per essere vero, perché questo sta andando sempre per selezionare qualcosa dal database 647 00:32:26,930 --> 00:32:29,280 perché uno, naturalmente, è sempre uguale a uno. 648 00:32:29,280 --> 00:32:30,360 >> Quindi qual è la soluzione? 649 00:32:30,360 --> 00:32:33,290 Bene in PSet 7, in realtà evitare questo tutti insieme. 650 00:32:33,290 --> 00:32:37,360 Noi vi diamo una funzione di interrogazione, e noi vi incoraggio a usare punti interrogativi 651 00:32:37,360 --> 00:32:40,430 come segnaposto, simile nello spirito al di printf% s, 652 00:32:40,430 --> 00:32:43,710 ma ciò che è fondamentale circa i punti interrogativi qui è se effettivamente letto attraverso 653 00:32:43,710 --> 00:32:46,950 functions.php, dove il nostro funzione di interrogazione è implementata, 654 00:32:46,950 --> 00:32:52,780 quei punti interrogativi sono fuggiti, per cui qualsiasi cosa potenzialmente pericolosa 655 00:32:52,780 --> 00:32:58,210 come una sola offerta è attiva in una sola offerta sfuggito. 656 00:32:58,210 --> 00:33:00,590 >> Quindi questo è ciò che è realmente accadendo se 657 00:33:00,590 --> 00:33:04,850 utilizzare la funzione di interrogazione del CS50 o un qualsiasi numero di librerie libere di terze parti che 658 00:33:04,850 --> 00:33:06,000 fare lo stesso. 659 00:33:06,000 --> 00:33:09,850 Non importa in questo caso, in verde, se l'utente ha digitato Nello stesso preventivo 660 00:33:09,850 --> 00:33:12,070 perché la query funzione che abbiamo scritto è 661 00:33:12,070 --> 00:33:15,120 andando ad aggiungere backslash prima tale citazione pericoloso. 662 00:33:15,120 --> 00:33:17,360 Quindi questo non è, in Infatti, sta per essere legit. 663 00:33:17,360 --> 00:33:20,910 Questo è come digitare in un pazzo cercando password che è, ovviamente, non andare 664 00:33:20,910 --> 00:33:23,490 essere password effettiva delle skroob. 665 00:33:23,490 --> 00:33:28,260 >> Così il cibo da asporto per CS50 è uno, assolutamente utilizzare sempre qualcosa 666 00:33:28,260 --> 00:33:30,860 come la funzione di interrogazione del CS50 o la libreria di base, 667 00:33:30,860 --> 00:33:32,560 che risulta essere chiamato DOP. 668 00:33:32,560 --> 00:33:35,880 Ma mai, mai, mai fare il codice come questo 669 00:33:35,880 --> 00:33:39,472 senza fuggire o lavaggio come dicono gli ingressi. 670 00:33:39,472 --> 00:33:42,430 E a un certo punto, probabilmente imbattersi in qualche sito come questo. 671 00:33:42,430 --> 00:33:46,060 In realtà, sembra essere il caso come negli aeroporti e alberghi in luoghi 672 00:33:46,060 --> 00:33:48,880 dove hanno la connessione Wi-Fi gratuita accesso che si effettuare l'accesso per, 673 00:33:48,880 --> 00:33:51,010 questi siti sono sempre orribilmente implementato. 674 00:33:51,010 --> 00:33:55,680 E così una sorta di divertimento a casa esercizio, non per scopi dannosi o più 675 00:33:55,680 --> 00:33:59,170 di un divertimento sulla strada esercizio, è quello di digitare solo 676 00:33:59,170 --> 00:34:02,850 un apostrofo, una sola offerta, in una forma su qualche sito 677 00:34:02,850 --> 00:34:03,810 e vedere cosa succede. 678 00:34:03,810 --> 00:34:06,660 E se il server si blocca o dà qualche tipo di messaggio di errore, 679 00:34:06,660 --> 00:34:09,690 può benissimo essere che qualcuno non ha previsto questo. 680 00:34:09,690 --> 00:34:15,239 E allora si dovrebbe avvisare il corretto autorità e procedere oltre. 681 00:34:15,239 --> 00:34:20,843 >> Così ora voi ragazzi dovrebbero auspicabilmente capire un po 'più disadattato umorismo qui. 682 00:34:20,843 --> 00:34:24,120 >> [Risate] 683 00:34:24,120 --> 00:34:27,571 684 00:34:27,571 --> 00:34:29,070 DAVID MALAN: Lo sai che sei un geek. 685 00:34:29,070 --> 00:34:30,944 Per i prossimi anni, si ricorderanno 686 00:34:30,944 --> 00:34:33,520 che tavolini Bobby è a causa di questo cartone animato qui. 687 00:34:33,520 --> 00:34:36,760 Quindi, tenere a mente come noi cambio di contesto per l'ultima volta 688 00:34:36,760 --> 00:34:38,770 oggi a JavaScript. 689 00:34:38,770 --> 00:34:41,600 Abbiamo speso relativamente poco tempo sulla sintassi di PHP 690 00:34:41,600 --> 00:34:43,440 perché in realtà è eccellente simile a C. 691 00:34:43,440 --> 00:34:47,300 E abbastanza bene, anche JavaScript è super simile alla sintassi del C 692 00:34:47,300 --> 00:34:49,639 così come vedremo in solo un momento e come faremo 693 00:34:49,639 --> 00:34:51,205 vedere la fine di questa settimana in particolare. 694 00:34:51,205 --> 00:34:54,080 Che cosa si può fare con questo linguaggio, tuttavia, è ancora più potente, 695 00:34:54,080 --> 00:34:55,790 soprattutto con le API. 696 00:34:55,790 --> 00:34:56,960 >> Ma prima un breve tour. 697 00:34:56,960 --> 00:35:00,450 Così uno, in JavaScript, non c'è nessuna funzione principale, che è bello. 698 00:35:00,450 --> 00:35:02,650 Come nel caso di PHP, si può semplicemente scrivere codice. 699 00:35:02,650 --> 00:35:04,310 Condizioni simile a questa. 700 00:35:04,310 --> 00:35:07,100 E le espressioni booleane potrebbe simile a questa o come questo. 701 00:35:07,100 --> 00:35:09,530 Esistono switch, e potrebbe essere il seguente. 702 00:35:09,530 --> 00:35:10,970 Quattro anelli simile a questa. 703 00:35:10,970 --> 00:35:12,390 Cicli while simile a questa. 704 00:35:12,390 --> 00:35:14,160 Fare talora simile a questa. 705 00:35:14,160 --> 00:35:16,850 E poi gli array sembrano questo, molto simile a PHP. 706 00:35:16,850 --> 00:35:20,740 Ma si noti, che in JavaScript si dichiarare una variabile non con un dollaro 707 00:35:20,740 --> 00:35:25,190 segno, non con un tipo di dati, ma letteralmente dicendo var per la variabile prima di esso. 708 00:35:25,190 --> 00:35:27,900 Anch'esso è liberamente digitato dal fatto di presentare tipi, 709 00:35:27,900 --> 00:35:29,729 ma non esplicitamente dichiarate. 710 00:35:29,729 --> 00:35:31,520 E poi una stringa, per esempio, potrebbe apparire 711 00:35:31,520 --> 00:35:34,350 in questo modo, la stringa essere chiamato s in questo caso. 712 00:35:34,350 --> 00:35:35,410 E poi un oggetto. 713 00:35:35,410 --> 00:35:37,010 E questi vedremo più in breve tempo. 714 00:35:37,010 --> 00:35:41,470 E un oggetto è forse uno dei più comunemente visto strutture di dati 715 00:35:41,470 --> 00:35:44,050 in una base di JavaScript programma perché permette 716 00:35:44,050 --> 00:35:46,680 di associare arbitraria coppie di valori chiave solo 717 00:35:46,680 --> 00:35:51,240 come array associativi di PHP e proprio come la vostra tabella hash 718 00:35:51,240 --> 00:35:54,042 o provare come abbiamo implementato qualche settimana fa. 719 00:35:54,042 --> 00:35:56,250 Quindi cerchiamo di vedere cosa realmente possiamo fare con JavaScript. 720 00:35:56,250 --> 00:35:59,410 Ed in particolare, questo è una lunga lista di caratteristiche 721 00:35:59,410 --> 00:36:02,300 che i browser hanno quel ci permettono di agganciare JavaScript 722 00:36:02,300 --> 00:36:05,470 in un sito web nel modo seguente. 723 00:36:05,470 --> 00:36:09,340 JavaScript è spesso usato come un lato client linguaggio di scripting. 724 00:36:09,340 --> 00:36:10,130 Non è stato compilato. 725 00:36:10,130 --> 00:36:11,370 Anch'esso viene interpretato. 726 00:36:11,370 --> 00:36:15,740 Ma a differenza di PHP, che è stato in esecuzione sul server, nel server web, 727 00:36:15,740 --> 00:36:18,220 o profondità all'interno del clienti, JavaScript 728 00:36:18,220 --> 00:36:22,190 è diverso dal fatto di di solito viene eseguito nel browser. 729 00:36:22,190 --> 00:36:26,060 >> Quindi, qualsiasi codice JavaScript di iniziare la scrittura per PSet 8, o il vostro progetto finale, 730 00:36:26,060 --> 00:36:29,890 o nel mondo reale è generalmente in corso per essere salvati sul server, assolutamente 731 00:36:29,890 --> 00:36:33,110 in un punto o HTML dot JS per i file JavaScript. 732 00:36:33,110 --> 00:36:35,770 Ma il browser sta andando per scaricare che JavaScript 733 00:36:35,770 --> 00:36:39,530 codice per la propria istanza di Chrome, o IE o Firefox, o qualsiasi altra cosa. 734 00:36:39,530 --> 00:36:43,870 E il codice è in realtà sta per arrivare eseguito all'interno del proprio browser. 735 00:36:43,870 --> 00:36:46,560 Giusto per rendere questo più reale, vediamo questo in forma concreta. 736 00:36:46,560 --> 00:36:50,120 >> Non abbiamo idea di cosa fa questo codice senza veramente leggere attraverso di essa. 737 00:36:50,120 --> 00:36:52,670 Ma lasciami andare a Facebook.com senza effettuare il login. 738 00:36:52,670 --> 00:37:00,440 Lasciami andare a Inspect Element e andare, diciamo, di rete e ricaricare la pagina. 739 00:37:00,440 --> 00:37:04,150 E ci lasciamo see-- mi sposto Ricaricare il Pagina per ottenere tutte le richieste al nuovo. 740 00:37:04,150 --> 00:37:08,850 E la prima il file che vedo è CSS, CSS. 741 00:37:08,850 --> 00:37:10,880 Ecco la prima File JavaScript, e ho 742 00:37:10,880 --> 00:37:14,600 idea di cosa fa, ma qui è parte del codice JavaScript 743 00:37:14,600 --> 00:37:16,180 che spinge Facebook. 744 00:37:16,180 --> 00:37:18,400 Non è nemmeno poi tanto rivelando per ingrandire. 745 00:37:18,400 --> 00:37:20,260 E 'ancora altrettanto priva di senso. 746 00:37:20,260 --> 00:37:24,341 >> Ma vedrete anche in basso, c'è ancor più di questi file JavaScript. 747 00:37:24,341 --> 00:37:24,840 Ops. 748 00:37:24,840 --> 00:37:25,440 Questo è un ping. 749 00:37:25,440 --> 00:37:28,550 Scendiamo un po ' inoltre, più ulteriormente. 750 00:37:28,550 --> 00:37:29,894 Ce n'è uno. 751 00:37:29,894 --> 00:37:31,238 Ce n'è uno. 752 00:37:31,238 --> 00:37:31,880 Ce n'è uno. 753 00:37:31,880 --> 00:37:35,820 >> Così, anche se Facebook, dietro la scene, è scritto in parte in PHP 754 00:37:35,820 --> 00:37:39,100 e di Facebook propria versione dello stesso, c'è una quantità enorme di JavaScript. 755 00:37:39,100 --> 00:37:41,330 Infatti, una delle caratteristiche chat si fa su Facebook, 756 00:37:41,330 --> 00:37:45,520 qualsiasi degli aggiornamenti in linea della timeline che accadono in tempo reale, tutto questo 757 00:37:45,520 --> 00:37:47,944 è guidato da JavaScript. 758 00:37:47,944 --> 00:37:48,444 Sì? 759 00:37:48,444 --> 00:37:50,235 >> PUBBLICO: Non sono sicuro se questo è Facebook, 760 00:37:50,235 --> 00:37:53,624 ma ho pensato che Facebook ha sviluppato la propria lingua in-house codice? 761 00:37:53,624 --> 00:37:54,540 DAVID MALAN: Lo hanno fatto. 762 00:37:54,540 --> 00:37:58,110 Ecco, questo è il motivo per cui dico una varianza di PHP chiamata Hip Hop che in realtà 763 00:37:58,110 --> 00:38:03,440 caratteristiche aggiunte a tale che, quando Mark prima applicazione Facebook, 764 00:38:03,440 --> 00:38:04,710 è stato scritto in PHP. 765 00:38:04,710 --> 00:38:07,370 E che tipo di è rimasto il tipo di linguaggio di front-end 766 00:38:07,370 --> 00:38:09,030 che usano per molto della codifica, ma 767 00:38:09,030 --> 00:38:11,870 non è stato un linguaggio che è scale particolarmente bene a miliardi 768 00:38:11,870 --> 00:38:12,630 di persone. 769 00:38:12,630 --> 00:38:15,300 E così hanno aggiunto la propria miglioramenti dietro le quinte. 770 00:38:15,300 --> 00:38:17,049 E usano un numero qualsiasi di altre lingue 771 00:38:17,049 --> 00:38:19,170 per i vari pezzi di le loro infrastrutture. 772 00:38:19,170 --> 00:38:24,080 Quindi sì, si tratta di una variazione di ciò che noi oggi conosciamo come PHP. 773 00:38:24,080 --> 00:38:26,610 >> Quindi, diamo uno sguardo un paio di esempi 774 00:38:26,610 --> 00:38:28,890 di come potremmo utilizzare JavaScript qui. 775 00:38:28,890 --> 00:38:32,530 Nel codice sorgente di oggi, abbiamo un gruppo di file, il primo dei quali, 776 00:38:32,530 --> 00:38:34,090 diamo chiamato DOM zero. 777 00:38:34,090 --> 00:38:36,770 Così DOM pari a zero si presenta come segue. 778 00:38:36,770 --> 00:38:40,730 Lasciami andare in questa directory e di aprire domzero.html, 779 00:38:40,730 --> 00:38:44,970 la cui sommità ha un tipo doc dichiarazione, dicendo ecco che arriva HTML 5. 780 00:38:44,970 --> 00:38:46,440 Ed ora ecco un tag HTML. 781 00:38:46,440 --> 00:38:47,540 Ecco il tag head. 782 00:38:47,540 --> 00:38:49,210 Ed ecco cosa c'è di nuovo oggi. 783 00:38:49,210 --> 00:38:52,620 >> Ora abbiamo un tag script all'interno della testa della pagina. 784 00:38:52,620 --> 00:38:55,290 E questo lo fa a quanto pare molto poco, a meno di notare 785 00:38:55,290 --> 00:38:58,410 che ho definito un sceneggiatura, un Javascript. 786 00:38:58,410 --> 00:39:01,050 E per inciso, dal momento che questo è un errore comune, 787 00:39:01,050 --> 00:39:05,220 JavaScript non ha assolutamente nulla a che fare con Java, il linguaggio 788 00:39:05,220 --> 00:39:08,010 che alcuni di voi potrebbe hanno imparato a APCS. 789 00:39:08,010 --> 00:39:10,480 Era più di un marketing di cosa di ogni altra cosa, 790 00:39:10,480 --> 00:39:12,980 cavalcando le falde di anni fa, Java. 791 00:39:12,980 --> 00:39:17,300 Ma JavaScript, niente a che fare con Java, proprio allo stesso modo, e fastidiosamente, 792 00:39:17,300 --> 00:39:18,480 confusamente chiamato. 793 00:39:18,480 --> 00:39:21,890 >> Quindi, ecco come si dichiara una funzione in JavaScript, letteralmente dire la funzione, 794 00:39:21,890 --> 00:39:24,556 quindi il nome della funzione, allora qualsiasi argomento che potrebbe prendere, 795 00:39:24,556 --> 00:39:25,530 proprio come in PHP. 796 00:39:25,530 --> 00:39:28,990 Risulta in JavaScript, uno dei più funzioni fastidiosi che esistono è vigile. 797 00:39:28,990 --> 00:39:31,392 Questa è una piccola finestra che si aprirà e avvisare l'utente 798 00:39:31,392 --> 00:39:32,600 ad una parte dell'informazione. 799 00:39:32,600 --> 00:39:33,766 E 'generalmente visto di buon occhio. 800 00:39:33,766 --> 00:39:35,980 Ma useremo come il nostro primo esercizio qui. 801 00:39:35,980 --> 00:39:37,900 >> Notate alcune caratteristiche di JavaScript. 802 00:39:37,900 --> 00:39:41,524 Apici singoli e doppi apici realtà non ha più importanza. 803 00:39:41,524 --> 00:39:43,690 Apici singoli e doppi citazioni possono essere scambiati, 804 00:39:43,690 --> 00:39:46,220 mentre in C, è necessario utilizzare doppi apici per le stringhe, 805 00:39:46,220 --> 00:39:48,150 e si dispone di due letti singoli Quotazioni caratteri. 806 00:39:48,150 --> 00:39:51,150 Nel mondo JavaScript, molte persone, la maggior parte delle persone 807 00:39:51,150 --> 00:39:54,970 utilizzare le virgolette singole intorno a corde solo perché è una cosa stilistica. 808 00:39:54,970 --> 00:39:58,330 Ma qual è l'operatore più qui, che non abbiamo visto prima? 809 00:39:58,330 --> 00:39:59,836 >> PUBBLICO: concatenazione. 810 00:39:59,836 --> 00:40:00,960 DAVID MALAN: concatenazione. 811 00:40:00,960 --> 00:40:02,450 Quindi C non ha nemmeno questo. 812 00:40:02,450 --> 00:40:04,820 PHP è l'operatore punto, che fa questo. 813 00:40:04,820 --> 00:40:09,710 JavaScript è l'operatore più, confusamente che è proprio come Java. 814 00:40:09,710 --> 00:40:11,440 Ora che cosa sta succedendo qui? 815 00:40:11,440 --> 00:40:14,260 >> Quindi qui è dove una base comprensione di quella foto 816 00:40:14,260 --> 00:40:17,010 abbiamo buttato un paio giorni fa entra in gioco. 817 00:40:17,010 --> 00:40:19,620 Ricordate quando abbiamo avuto un semplice versione di HTML page-- 818 00:40:19,620 --> 00:40:20,830 è appena detto, ciao mondo. 819 00:40:20,830 --> 00:40:22,770 E poi abbiamo disegnato un albero a destra, che 820 00:40:22,770 --> 00:40:27,320 ha avuto una serie di rettangoli e linee collegandoli come un albero genealogico. 821 00:40:27,320 --> 00:40:30,820 Ecco, questo è il cosiddetto DOM o Document Object Model. 822 00:40:30,820 --> 00:40:36,759 E si scopre che è possibile accedere rettangoli a quell'albero con la sintassi 823 00:40:36,759 --> 00:40:37,550 come il seguente. 824 00:40:37,550 --> 00:40:41,370 È letteralmente dici documento, che è un speciale variabile globale in Javascript 825 00:40:41,370 --> 00:40:45,890 programma che ha una funzione ad esso associati che è possibile accedere 826 00:40:45,890 --> 00:40:50,280 simile ad una struct, ma è sufficiente dire punto e poi il nome della funzione, 827 00:40:50,280 --> 00:40:52,390 ottenere elementi per ID. 828 00:40:52,390 --> 00:40:55,460 >> L'elemento che voglio ottenere è a quanto pare citare nome unquote. 829 00:40:55,460 --> 00:40:57,150 E poi voglio ottenere il suo valore. 830 00:40:57,150 --> 00:40:58,330 Ora stiamo andando troppo avanti di noi stessi. 831 00:40:58,330 --> 00:41:00,038 Non sono nemmeno sicuro di quello che tutto questo è circa. 832 00:41:00,038 --> 00:41:03,000 Andiamo avanti veloce al HTML pagina, che è super semplice. 833 00:41:03,000 --> 00:41:05,370 >> Si noti che ho definito una forma qui. 834 00:41:05,370 --> 00:41:07,940 AVVISO ho dato un unico ID, anche se non abbiamo usato 835 00:41:07,940 --> 00:41:08,870 questo attributo prima. 836 00:41:08,870 --> 00:41:11,300 Ma questo esiste in HTML. 837 00:41:11,300 --> 00:41:15,570 È possibile identificare in modo univoco un certo pezzo di HTML con un identificatore come questo. 838 00:41:15,570 --> 00:41:19,880 >> Notate ora questo-- risulta HTML sostiene, a tale elenco di lavanderia 839 00:41:19,880 --> 00:41:22,490 un momento fa, nel suo complesso gruppo di gestori di eventi. 840 00:41:22,490 --> 00:41:25,060 E questo gestore di eventi dice su Invia. 841 00:41:25,060 --> 00:41:28,730 Sulla presentazione di questo utente forma, chiamare il seguente codice. 842 00:41:28,730 --> 00:41:31,360 E il codice che sta andando di essere chiamato o eseguito 843 00:41:31,360 --> 00:41:35,260 è proprio questo, greco funzione seguito da return false. 844 00:41:35,260 --> 00:41:37,360 Tutto il resto dovrebbe essere abbastanza familiare. 845 00:41:37,360 --> 00:41:42,050 >> Qui è un input di tipo text, il cui ID, in questo caso, sarà nome. 846 00:41:42,050 --> 00:41:45,430 Non abbiamo un attributo nome effettivo questo tempo-- e un pulsante di invio. 847 00:41:45,430 --> 00:41:48,330 Così la pagina risultante è simile al seguente. 848 00:41:48,330 --> 00:41:52,890 E il comportamento risultante, vedrete, si presenta come questo. 849 00:41:52,890 --> 00:41:56,940 La pagina ospita locali dice, ciao David, certo un esteticamente gradevole 850 00:41:56,940 --> 00:41:58,340 modo di salutare un utente. 851 00:41:58,340 --> 00:41:59,950 Ma cosa sta realmente succedendo? 852 00:41:59,950 --> 00:42:01,360 >> Beh, considerare che cosa si tratta. 853 00:42:01,360 --> 00:42:02,310 Questo è un campo di testo. 854 00:42:02,310 --> 00:42:04,635 E secondo la HTML qui, ho dato 855 00:42:04,635 --> 00:42:07,350 un identificatore univoco chiamato citazione nome unquote. 856 00:42:07,350 --> 00:42:09,770 Nel frattempo, ho detto quando l'utente invia il modulo 857 00:42:09,770 --> 00:42:13,820 premendo Invio o facendo clic sul Submit pulsante, chiamare la funzione chiamata Greet 858 00:42:13,820 --> 00:42:15,410 e poi tornare False. 859 00:42:15,410 --> 00:42:16,870 Prendiamo in considerazione quelli in senso inverso. 860 00:42:16,870 --> 00:42:20,590 Avviso quando fa clic su Invia, il URL di questa pagina non cambia. 861 00:42:20,590 --> 00:42:22,420 L'icona del browser non iniziare a girare. 862 00:42:22,420 --> 00:42:27,050 Non sono andato da nessuna parte, e questo è letteralmente perché ho detto restituisce False. 863 00:42:27,050 --> 00:42:31,534 Ritorna circuiti o brevi soste False il comportamento predefinito di un modulo. 864 00:42:31,534 --> 00:42:33,700 In modo che poi ci lascia con questo un'ultima domanda. 865 00:42:33,700 --> 00:42:34,764 Che cosa fa Greet fare? 866 00:42:34,764 --> 00:42:36,680 Beh, a quanto pare Greet chiama una funzione chiamata 867 00:42:36,680 --> 00:42:39,250 Alert, passa in un lunga discussione che è 868 00:42:39,250 --> 00:42:43,950 il risultato di concatenare insieme un mazzo di sottostringhe, ciao spazio comma, 869 00:42:43,950 --> 00:42:45,810 quindi tutto ciò che questo restituisce. 870 00:42:45,810 --> 00:42:51,490 Così documento è come un globale variabile da quella radice di quell'albero, 871 00:42:51,490 --> 00:42:55,560 chiamare una funzione speciale, altrimenti ora noto come metodo. 872 00:42:55,560 --> 00:42:57,650 Una funzione che è all'interno di una variabile è 873 00:42:57,650 --> 00:42:59,640 chiamato un metodo invece di una funzione. 874 00:42:59,640 --> 00:43:01,570 >> Così ottenere elemento da ID. 875 00:43:01,570 --> 00:43:03,940 Quale elemento si fa vuole ottenere dal suo ID? 876 00:43:03,940 --> 00:43:06,970 Preventivo Nome e unquote quindi in particolare valore. 877 00:43:06,970 --> 00:43:12,000 In altre parole, tale codice è sufficiente trova il campo di testo il cui ID è il nome 878 00:43:12,000 --> 00:43:13,380 e poi prende il suo valore. 879 00:43:13,380 --> 00:43:16,460 Quindi, se dovessi cambiare questo e dire Davin al posto di David, 880 00:43:16,460 --> 00:43:20,670 e clicca su Invia, ora siamo avere un saluto per Davin. 881 00:43:20,670 --> 00:43:22,890 >> Va bene, quindi tutto bene e buono. 882 00:43:22,890 --> 00:43:25,480 Ma vediamo se possiamo fare questo un po 'più pulito da solo 883 00:43:25,480 --> 00:43:28,190 la scrittura di codice di questo tipo è in genere sta per essere visto di buon occhio. 884 00:43:28,190 --> 00:43:30,060 Questo sta a guardare più spaventosa. 885 00:43:30,060 --> 00:43:32,330 Ma qual è il primo differenza che si nota qui 886 00:43:32,330 --> 00:43:35,970 in questa versione oltre il nome cambia a DOM uno? 887 00:43:35,970 --> 00:43:41,110 Ciò che appare strutturalmente diverso questo rispetto all'altro? 888 00:43:41,110 --> 00:43:41,932 Sì? 889 00:43:41,932 --> 00:43:43,890 PUBBLICO: E 'il modulo a all'inizio dello script ora? 890 00:43:43,890 --> 00:43:46,570 DAVID MALAN: Sì, il modulo è in cima dello script per qualche motivo strano. 891 00:43:46,570 --> 00:43:48,736 Ecco, questo è la prima cosa che salta fuori a me. 892 00:43:48,736 --> 00:43:50,990 E per fortuna, almeno, questa parte è identica. 893 00:43:50,990 --> 00:43:53,470 Quindi l'unica cosa che sembra essere diverso è questo. 894 00:43:53,470 --> 00:43:55,296 >> Quindi, ecco che cosa è pulito 2 su JavaScript. 895 00:43:55,296 --> 00:43:57,420 E rende difficile capire a prima vista, 896 00:43:57,420 --> 00:44:00,670 in particolare per i progetti finali se stai guardando il codice di esempio in linea, 897 00:44:00,670 --> 00:44:04,200 ma si riduce a qualche caratteristiche sintattiche di base. 898 00:44:04,200 --> 00:44:06,230 Anche in questo caso è che documento variabile globale. 899 00:44:06,230 --> 00:44:09,540 Ecco ancora una volta che il metodo o la funzione che dice ottiene l'elemento di ID. 900 00:44:09,540 --> 00:44:11,570 Questa volta voglio ottenere l'ID chiamata demo. 901 00:44:11,570 --> 00:44:12,490 Dov'è? 902 00:44:12,490 --> 00:44:15,400 Questo è a quanto pare giusto qui, la forma stessa. 903 00:44:15,400 --> 00:44:20,010 >> E ora notare che, apparentemente, se io tornare quel nodo dall'albero che 904 00:44:20,010 --> 00:44:22,940 rappresenta la forma sé, un campo di testo, 905 00:44:22,940 --> 00:44:26,970 si scopre che forma, che nodo o un rettangolo dalla struttura ad albero, 906 00:44:26,970 --> 00:44:30,450 ha quello che chiameremo un immobile, molto, molto, molto simile 907 00:44:30,450 --> 00:44:35,390 nello spirito di una struct in C. E 'solo un membro di dati all'interno del rettangolo. 908 00:44:35,390 --> 00:44:38,300 >> Così ho preso la forma qui, e sto allegando, 909 00:44:38,300 --> 00:44:44,650 o sto assegnando, per la sua su Invia gestore o meglio su Invia immobili 910 00:44:44,650 --> 00:44:45,740 la seguente funzione. 911 00:44:45,740 --> 00:44:49,000 E questo è, di gran lunga, il più pazzo cosa finora sintatticamente. 912 00:44:49,000 --> 00:44:53,610 Risulta in JavaScript e PHP, e francamente se è per questo in C, 913 00:44:53,610 --> 00:44:58,990 anche se noi non lo facciamo, è possibile aggiungere senza nome, in forma anonima, o AKA lambda 914 00:44:58,990 --> 00:45:03,000 funzioni che non hanno un nome ma può essere chiamato comunque. 915 00:45:03,000 --> 00:45:07,050 >> Quindi quello che sto facendo qui è che sto assegnando Su questo Submit proprietà, che 916 00:45:07,050 --> 00:45:14,330 è all'interno di questo nodo di mio albero DOM, un funzione, puntatore a funzione, se vuoi. 917 00:45:14,330 --> 00:45:16,310 Tale funzione non ha nome, ma che non lo fa 918 00:45:16,310 --> 00:45:19,110 importa, perché vedremo in un momento come chiamarlo. 919 00:45:19,110 --> 00:45:21,780 Quando questa funzione viene chiamata, questo codice viene eseguito, quindi 920 00:45:21,780 --> 00:45:24,210 falso viene restituito come prima. 921 00:45:24,210 --> 00:45:25,800 >> A meno di notare quello che ho fatto. 922 00:45:25,800 --> 00:45:27,830 A questo punto del storia, ho una forma. 923 00:45:27,830 --> 00:45:30,190 Ha un ID univoco chiamato demo. 924 00:45:30,190 --> 00:45:33,740 Quaggiù, ho un tag script che esegue il codice riportato di seguito. 925 00:45:33,740 --> 00:45:37,720 Si attribuisce a tale nodo in l'albero ad esso è In Submit 926 00:45:37,720 --> 00:45:40,260 proprietà di questa funzione qui. 927 00:45:40,260 --> 00:45:44,310 E proprio dalla natura di come i browser funzionano, quando ho ora Clicca Invia o premere Invio, 928 00:45:44,310 --> 00:45:45,889 che la funzione sta per ottenere chiamato. 929 00:45:45,889 --> 00:45:48,680 Non ha bisogno di un nome perché chi il diavolo se ne frega come si chiama. 930 00:45:48,680 --> 00:45:52,540 L'unica volta che non lo sia mai sta per arrivare chiamato è quando mi inviate il formulario. 931 00:45:52,540 --> 00:45:55,130 Non c'è bisogno di me, lo sviluppatore umana, 932 00:45:55,130 --> 00:45:57,330 chiamare in realtà in qualsiasi altro luogo. 933 00:45:57,330 --> 00:46:00,720 >> Ora, come un teaser, come se questo non sono stati rompicapo abbastanza, 934 00:46:00,720 --> 00:46:03,330 possiamo anche fare questo guardare con più criptico 935 00:46:03,330 --> 00:46:05,850 una libreria super popolare chiamata jQuery. 936 00:46:05,850 --> 00:46:08,760 In effetti jQuery e JavaScript sono spesso conflated. 937 00:46:08,760 --> 00:46:12,790 E cosa faremo il Mercoledì è inizio usando questo linguaggio e queste librerie 938 00:46:12,790 --> 00:46:16,030 di costruire sempre più asincrona e applicazioni dinamiche 939 00:46:16,030 --> 00:46:18,950 come arrivare mappa applicazioni, applicazioni 940 00:46:18,950 --> 00:46:22,360 che aggiornare la pagina web in tempo reale tempo, proprio come Facebook o Gchat 941 00:46:22,360 --> 00:46:27,130 fare, e non limitarci a colpendo Invia da un get o semplicemente posta 942 00:46:27,130 --> 00:46:27,630 solo. 943 00:46:27,630 --> 00:46:29,055 Allora ci vediamo il Mercoledì. 944 00:46:29,055 --> 00:46:31,805 945 00:46:31,805 --> 00:46:35,550 >> [RIPRODUZIONE DI BRANI MUSICALI] 946 00:46:35,550 --> 00:48:09,728