1 00:00:00,000 --> 00:00:11,330 2 00:00:11,330 --> 00:00:12,360 >> DAVID MALAN: Va bene. 3 00:00:12,360 --> 00:00:15,970 Questo è CS50, e questo è la fine della settimana nove. 4 00:00:15,970 --> 00:00:18,560 E 'stata una tromba d'aria sopra Negli ultimi giorni. 5 00:00:18,560 --> 00:00:21,580 E problema impostare sette, se siete ginocchio profondità in esso, si rendono conto c'è un bel 6 00:00:21,580 --> 00:00:23,340 bit di nuovo che è in là. 7 00:00:23,340 --> 00:00:26,660 Ma vediamo se non possiamo piece tutto insieme qui brevemente 8 00:00:26,660 --> 00:00:29,230 prima di allora divagare in ancora un'altra direzione e vedere 9 00:00:29,230 --> 00:00:30,510 dove altro possiamo andare. 10 00:00:30,510 --> 00:00:32,630 >> Quindi finora, abbiamo parlato HTML. 11 00:00:32,630 --> 00:00:33,740 Abbiamo parlato CSS. 12 00:00:33,740 --> 00:00:34,705 Abbiamo parlato di PHP. 13 00:00:34,705 --> 00:00:36,520 Hai iniziato a sperimentare SQL. 14 00:00:36,520 --> 00:00:38,360 Oggi parleremo un po ' su JavaScript. 15 00:00:38,360 --> 00:00:41,230 Ma come fanno tutte queste disparate lingue incastrano? 16 00:00:41,230 --> 00:00:44,970 >> Così abbiamo parlato la settimana scorsa circa la idea di avere un server. 17 00:00:44,970 --> 00:00:48,470 Così facciamo solo disegnare questo rettangolo come un server web qui. 18 00:00:48,470 --> 00:00:52,200 E un server web serve sicuramente file. 19 00:00:52,200 --> 00:00:54,640 E alcuni di questi file può essere file HTML. 20 00:00:54,640 --> 00:00:58,270 Così una delle cose che un server web può sputare fuori potrebbe essere un file 21 00:00:58,270 --> 00:01:01,290 ci limiteremo a disegnare come questa contenente del codice HTML. 22 00:01:01,290 --> 00:01:04,786 Quindi, in parole povere, cosa Non HTML consentono di fare? 23 00:01:04,786 --> 00:01:06,036 >> AUDIENCE: Pagina bel look. 24 00:01:06,036 --> 00:01:09,670 25 00:01:09,670 --> 00:01:12,310 >> DAVID MALAN: OK, fare una pagina di aspetto gradevole, anche se penso che ho dimostrato 26 00:01:12,310 --> 00:01:13,370 che altrimenti. 27 00:01:13,370 --> 00:01:18,250 Così HTML non puoi layout di pagina strutturalmente, e ti permette di 28 00:01:18,250 --> 00:01:22,410 sorta di esteticamente segnare una pagina, contrassegnare contenuto statico, in modo che si 29 00:01:22,410 --> 00:01:23,640 può quindi visualizzare con un browser web. 30 00:01:23,640 --> 00:01:24,690 >> Ma questa è la chiave. 31 00:01:24,690 --> 00:01:26,130 E 'contenuto statico. 32 00:01:26,130 --> 00:01:28,590 Si scrive, si salva, e poi lo spedite. 33 00:01:28,590 --> 00:01:31,130 E il server web allora serve fino ai vostri ospiti. 34 00:01:31,130 --> 00:01:35,700 >> Ma noi stilizzare le cose con un diverso linguaggio del tutto. 35 00:01:35,700 --> 00:01:40,150 Abbiamo iniziato a utilizzare un attributo di stile su alcuni tag. 36 00:01:40,150 --> 00:01:43,400 E l'attributo di stile mettiamoci cose come la dimensione del carattere e il colore. 37 00:01:43,400 --> 00:01:46,460 E probabilmente avete iniziato a scoprire, oppure è presto per finale 38 00:01:46,460 --> 00:01:50,160 progetti potenzialmente, ancora altri le proprietà che è possibile utilizzare in CSS. 39 00:01:50,160 --> 00:01:54,710 E così in termini profani, cosa in realtà poi non CSS fare? 40 00:01:54,710 --> 00:01:57,810 Questi sono solo esempi della stessa. 41 00:01:57,810 --> 00:02:00,730 Cosa puoi farlo HTML non sembra da ciò 42 00:02:00,730 --> 00:02:02,606 abbiamo visto finora? 43 00:02:02,606 --> 00:02:04,850 >> AUDIENCE: Definire stili da soli. 44 00:02:04,850 --> 00:02:06,700 >> DAVID MALAN: Definire stili da soli. 45 00:02:06,700 --> 00:02:10,280 Quindi definire le cose come le classi, come si possono aver incontrato, o di carattere specificamente 46 00:02:10,280 --> 00:02:13,800 identificare i nodi in un documento in modo che è possibile stilizzare. 47 00:02:13,800 --> 00:02:16,890 Ma più precisamente, direi che i CSS davvero consente di prendere le cose 48 00:02:16,890 --> 00:02:20,790 ultimo miglio e consente di specificare più più precisamente l'estetica, 49 00:02:20,790 --> 00:02:24,340 considerando HTML per la maggior parte consente di strutturare le pagine. 50 00:02:24,340 --> 00:02:27,310 >> E anche se ci sono alcuni valori di default, come abbiamo visto il tag per 51 00:02:27,310 --> 00:02:30,690 una voce tag, che grosso modo fatto le cose in grande e in grassetto. 52 00:02:30,690 --> 00:02:34,250 Questa è una definizione abbastanza generica del tag - grande e grassetto. 53 00:02:34,250 --> 00:02:35,260 Quali sono le dimensioni del font è questo? 54 00:02:35,260 --> 00:02:36,080 Di che colore è? 55 00:02:36,080 --> 00:02:36,890 Come in grassetto è quello? 56 00:02:36,890 --> 00:02:39,830 E CSS permette più precisione tune cose del genere. 57 00:02:39,830 --> 00:02:42,150 Nonché la layout, alcuni di che avete visto. 58 00:02:42,150 --> 00:02:45,180 >> E, francamente, CSS è un po ' di un linguaggio disordinato. 59 00:02:45,180 --> 00:02:48,370 E 'molto potente che si può fare letteralmente qualsiasi sito web che hai 60 00:02:48,370 --> 00:02:51,880 visto sul web oggi con esso, ma è una specie di un dolore al collo. 61 00:02:51,880 --> 00:02:54,440 E alcuni di voi hanno sbattuto la testa contro le pareti già solo per fare 62 00:02:54,440 --> 00:02:58,560 qualcosa di stupido come centro di un menù problema impostare sette se hai ottenuto a 63 00:02:58,560 --> 00:02:59,470 quel punto già. 64 00:02:59,470 --> 00:03:01,530 >> Ma realizzare, quelle cose diventa più facile nel tempo. 65 00:03:01,530 --> 00:03:02,820 Si inizia a notare i modelli. 66 00:03:02,820 --> 00:03:06,020 E ancora, Google sarà tuo amico per i vari modi in cui è possibile 67 00:03:06,020 --> 00:03:07,220 risolvere questo tipo di problemi. 68 00:03:07,220 --> 00:03:11,520 >> E oserei dire con CSS e HTML più in generale, è possibile risolvere i problemi in 69 00:03:11,520 --> 00:03:15,910 molti altri modi, ognuno dei quali potrebbe molto anche essere corretta, di quanto si possa 70 00:03:15,910 --> 00:03:18,900 in qualcosa di simile a C, anche Ora PHP o JavaScript. 71 00:03:18,900 --> 00:03:21,080 Ci sono solo molti diversi Per disporre le cose. 72 00:03:21,080 --> 00:03:22,570 >> Ma questo ha iniziato a ottenere disordinato, abbiamo detto. 73 00:03:22,570 --> 00:03:26,480 Solo tipo di commistione vostro HTML e il vostro CSS con l'attributo stile era 74 00:03:26,480 --> 00:03:27,590 un po 'sciatta. 75 00:03:27,590 --> 00:03:31,460 E così abbiamo invece detto, una sorta di astrattamente parlando, che si dovrebbe 76 00:03:31,460 --> 00:03:34,050 almeno iniziare a fattore il vostro CSS probabilmente. 77 00:03:34,050 --> 00:03:37,430 Attribuisce Non è il mio stile, ma almeno utilizzare il tag di stile all'interno di quello che 78 00:03:37,430 --> 00:03:38,840 parte della pagina web? 79 00:03:38,840 --> 00:03:39,560 >> AUDIENCE: Head. 80 00:03:39,560 --> 00:03:40,120 >> DAVID MALAN: Nella testa. 81 00:03:40,120 --> 00:03:43,270 Fino ad ora, abbiamo avuto solo il titolo fino lì, ma è anche possibile aggiungere uno stile 82 00:03:43,270 --> 00:03:47,230 tag, e si può mettere il CSS approssimativamente parlando verso la parte superiore della pagina. 83 00:03:47,230 --> 00:03:52,550 Ma poi abbiamo fatto un ulteriore passo avanti le cose e di factoring che devi sapere 84 00:03:52,550 --> 00:03:54,130 in un file separato. 85 00:03:54,130 --> 00:03:57,240 >> E così questi due file sono stati qualche ora collegati. 86 00:03:57,240 --> 00:03:59,550 Ed in effetti era la tag che ha fatto. 87 00:03:59,550 --> 00:04:02,920 E quello che era uno dei generale motivazioni per factoring il nostro CSS 88 00:04:02,920 --> 00:04:04,057 tanto più? 89 00:04:04,057 --> 00:04:05,280 >> AUDIENCE: riusabilità. 90 00:04:05,280 --> 00:04:05,785 >> DAVID MALAN: riutilizzo. 91 00:04:05,785 --> 00:04:06,150 Giusto? 92 00:04:06,150 --> 00:04:09,470 Potreste aver visto in p-set sette già che un sacco di pagine, l' 93 00:04:09,470 --> 00:04:12,260 Pagina acquisto, la pagina di vendita, il portafoglio di pagina, sono probabilmente 94 00:04:12,260 --> 00:04:13,550 strutturato un po 'allo stesso modo. 95 00:04:13,550 --> 00:04:17,579 C'è un logo finanza CS50 in alto a meno che non hai deciso di cambiarlo. 96 00:04:17,579 --> 00:04:19,839 C'è un piè di pagina al inferiore di pagine. 97 00:04:19,839 --> 00:04:24,315 E CSS permette poi di fattore fuori in un file separato in modo che se 98 00:04:24,315 --> 00:04:27,780 si vuole cambiare qualcosa a livello globale attraverso l'intero sito, si può veramente 99 00:04:27,780 --> 00:04:29,390 basta cambiare in un unico posto. 100 00:04:29,390 --> 00:04:32,750 >> Ma c'è un prezzo da pagare potenzialmente avendo fattorizzato l' 101 00:04:32,750 --> 00:04:38,380 CSS dal mio file HTML in un separato File che fa riferimento con il 102 00:04:38,380 --> 00:04:40,650 tag, che abbiamo visto il Lunedi. 103 00:04:40,650 --> 00:04:43,850 Che cosa potrebbe essere il rovescio della medaglia di questo? 104 00:04:43,850 --> 00:04:48,830 Ripensando una settimana fa da quando siamo parlando di HTTP e TCP / IP e come 105 00:04:48,830 --> 00:04:52,070 funziona Internet. 106 00:04:52,070 --> 00:04:53,530 Qualcosa di più di qui? 107 00:04:53,530 --> 00:04:54,730 >> AUDIENCE: Ci vuole più tempo. 108 00:04:54,730 --> 00:04:55,470 >> DAVID MALAN: Ci vuole più tempo. 109 00:04:55,470 --> 00:04:56,750 Perché? 110 00:04:56,750 --> 00:04:59,450 >> AUDIENCE: [incomprensibile]. 111 00:04:59,450 --> 00:04:59,750 >> DAVID MALAN: Già. 112 00:04:59,750 --> 00:05:01,240 Quindi ci vuole forse un po 'più di tempo. 113 00:05:01,240 --> 00:05:04,290 Perché uno, il CSS è ovviamente non nello stesso file. 114 00:05:04,290 --> 00:05:06,920 Così ora si deve fare non uno, ma due richieste. 115 00:05:06,920 --> 00:05:11,230 E ciascuna di tali richieste, come abbiamo visto nel Chrome nel cosiddetto ispettore, 116 00:05:11,230 --> 00:05:15,740 e abbiamo guardato la scheda di rete, ciascuna di questi file richiede una HTTP 117 00:05:15,740 --> 00:05:18,360 richiesta, che abbiamo visto si certa quantità di tempo. 118 00:05:18,360 --> 00:05:19,290 Ora, forse non è molto. 119 00:05:19,290 --> 00:05:20,670 Forse è a soli 20 millesimi di secondo. 120 00:05:20,670 --> 00:05:22,260 Forse è 200 millisecondi. 121 00:05:22,260 --> 00:05:25,530 >> Ma pensare a una pagina come Facebook, o CNN, o Google, che sono molto 122 00:05:25,530 --> 00:05:28,060 più grande degli esempi che ho guardato finora. 123 00:05:28,060 --> 00:05:32,070 Quelle pagine potrebbero avere decine di file, ciascuno dei quali potrebbe richiedere un 124 00:05:32,070 --> 00:05:33,550 scaricare di un file. 125 00:05:33,550 --> 00:05:35,800 Quindi le cose possono potenzialmente iniziare a rallentare. 126 00:05:35,800 --> 00:05:39,280 >> E soprattutto in questi giorni in cui tutti noi avere i telefoni cellulari nelle nostre tasche e 127 00:05:39,280 --> 00:05:43,010 connessione internet lenta, dovendo aspettare ancora qualche millisecondi, alcuni 128 00:05:43,010 --> 00:05:46,110 più millisecondi per ulteriore i file possono effettivamente essere lento. 129 00:05:46,110 --> 00:05:50,430 La latenza è la parola che descrive il tipo di attesa che si dispone che si 130 00:05:50,430 --> 00:05:53,110 sperimentare quando in attesa di qualche pezzo di informazione. 131 00:05:53,110 --> 00:05:54,430 >> Ma c'è un lato positivo. 132 00:05:54,430 --> 00:05:56,600 Quindi non è tutto una sorta di - 133 00:05:56,600 --> 00:05:58,170 in realtà è un po 'un altalena qui. 134 00:05:58,170 --> 00:06:02,970 Ribasso ora, ma quello che i browser possono fare se sono intelligenti al fine di evitare 135 00:06:02,970 --> 00:06:08,870 dover richiedere lo stesso styles.css file di nuovo può essere per fare cosa? 136 00:06:08,870 --> 00:06:09,390 >> Memorizzarlo nella cache. 137 00:06:09,390 --> 00:06:10,370 Così cache - 138 00:06:10,370 --> 00:06:11,690 C-A-C-H-E - 139 00:06:11,690 --> 00:06:15,810 generalmente si intende qui solo per salvare la archiviate avete richiesto la prima volta, e 140 00:06:15,810 --> 00:06:17,440 quindi controllare la cache per questo. 141 00:06:17,440 --> 00:06:20,400 Controllo siete sorta di contenitore di stoccaggio, e se si dispone già di un 142 00:06:20,400 --> 00:06:24,520 copia di styles.css, anche se qualche altro pagina nel p-set, o qualsiasi sito web, 143 00:06:24,520 --> 00:06:28,560 richieste di nuovo, giusto per dare l' utente stesso copia cache. 144 00:06:28,560 --> 00:06:30,140 Non preoccupatevi di richiedere. 145 00:06:30,140 --> 00:06:32,560 >> Unico inconveniente lì, anche se, come alcuni di voi hanno inciampato nella p-set. 146 00:06:32,560 --> 00:06:35,870 Se si apporta una modifica sul server e si torna indietro al browser e si 147 00:06:35,870 --> 00:06:39,250 ricaricare, a volte il browser fa un favore e non si preoccupa 148 00:06:39,250 --> 00:06:43,660 ri-scaricare il file styles.css perché, dai, quali sono le probabilità 149 00:06:43,660 --> 00:06:47,620 che questi stili che Facebook usa stanno per cambiare di ora in ora o di 150 00:06:47,620 --> 00:06:48,140 giorno per giorno? 151 00:06:48,140 --> 00:06:48,800 E 'piuttosto bassa. 152 00:06:48,800 --> 00:06:52,260 Essi potrebbero cambiare nel tempo, ma non al minuto o di ora in ora. 153 00:06:52,260 --> 00:06:55,810 >> Quindi un trucco, appena cronaca quando si fa web sviluppo, è spesso tenere premuto il 154 00:06:55,810 --> 00:06:59,500 spostare il tasto per esempio, e quindi fare clic su ricaricare nel browser, e che sarà 155 00:06:59,500 --> 00:07:03,280 tipicamente dire al reload del browser tutto, anche se si dispone già di 156 00:07:03,280 --> 00:07:04,180 nella cache. 157 00:07:04,180 --> 00:07:06,630 Quindi, di nuovo, pregi e svantaggi, ma tutti 158 00:07:06,630 --> 00:07:08,260 in ultima analisi, le decisioni di progettazione. 159 00:07:08,260 --> 00:07:11,520 >> Così ora, non ci siamo proprio terminare la storia qui. 160 00:07:11,520 --> 00:07:15,790 Se io ora vado avanti e indietro e indietro e indietro, abbiamo iniziato ad introdurre non solo 161 00:07:15,790 --> 00:07:18,060 HTML, ma PHP. 162 00:07:18,060 --> 00:07:20,786 Quindi, in parole povere, che cosa PHP non facciamolo? 163 00:07:20,786 --> 00:07:22,770 >> AUDIENCE: [incomprensibile]. 164 00:07:22,770 --> 00:07:24,258 >> DAVID MALAN: Cosa e 'quello? 165 00:07:24,258 --> 00:07:25,250 >> AUDIENCE: introdurre la logica nel codice. 166 00:07:25,250 --> 00:07:26,620 >> DAVID MALAN: Sì, introdurre logica nel codice. 167 00:07:26,620 --> 00:07:29,570 Quindi è un vero linguaggio di programmazione con i loop e variabili, e 168 00:07:29,570 --> 00:07:32,620 funzioni, e le condizioni, e tutte di le cose che abbiamo usato via del ritorno 169 00:07:32,620 --> 00:07:33,780 quando da zero. 170 00:07:33,780 --> 00:07:36,780 E PHP, abbiamo visto, può essere utilizzato sia a linea di comando - è 171 00:07:36,780 --> 00:07:39,190 non deve avere a che fare con il web, anche se questo è 172 00:07:39,190 --> 00:07:43,150 in realtà le sue origini e che cosa si tende di essere bravo e favorevole - 173 00:07:43,150 --> 00:07:47,130 ma è possibile utilizzare PHP semplicemente dalla natura del fatto che esso ha una stampa () 174 00:07:47,130 --> 00:07:49,660 funzione, e a) la funzione printf (, o una funzione echo (). 175 00:07:49,660 --> 00:07:52,440 Ci sono mazzi di modi può stampare il testo con PHP. 176 00:07:52,440 --> 00:07:56,540 >> Pertanto, è possibile utilizzare questa programmazione lingua per emettere esattamente 177 00:07:56,540 --> 00:07:58,460 quello che stavamo parlando prima. 178 00:07:58,460 --> 00:08:01,360 È possibile generare dinamicamente il vostro codice HTML. 179 00:08:01,360 --> 00:08:02,300 Forse non tutto. 180 00:08:02,300 --> 00:08:06,460 Forse si dure cose di codice, come il intestazione e il piè di pagina, e il logo, 181 00:08:06,460 --> 00:08:07,950 ed i fogli di stile, e tutto questo. 182 00:08:07,950 --> 00:08:11,190 Ma per qualcosa come p-set di sette, dove si sta manipolando le scorte e 183 00:08:11,190 --> 00:08:14,690 mostrando portafoglio dell'utente, che è intenzione di cambiare dinamicamente, si potrebbe 184 00:08:14,690 --> 00:08:18,960 sicuramente utilizzare PHP e la logica dà voi come un linguaggio di programmazione per 185 00:08:18,960 --> 00:08:22,320 Uscita sottoinsiemi dinamicamente della pagina. 186 00:08:22,320 --> 00:08:25,900 >> Quindi, quando si parla di siti web dinamici, o di programmazione web, questo è 187 00:08:25,900 --> 00:08:27,200 cosa si sta realmente parlando. 188 00:08:27,200 --> 00:08:31,450 Usando un linguaggio come PHP, o cose chiamato Python o Ruby, o Java, o 189 00:08:31,450 --> 00:08:35,900 ancora altre lingue, per interrogare un database spesso, o altro server, e 190 00:08:35,900 --> 00:08:38,580 poi sputare dinamicamente HTML. 191 00:08:38,580 --> 00:08:42,470 >> Ora il risultato finale, per inciso, è che il codice HTML della maggior parte dei siti web, 192 00:08:42,470 --> 00:08:45,970 compreso il vostro p-set di sette, è probabilmente sarà una grande confusione se 193 00:08:45,970 --> 00:08:48,060 si guarda il sorgente codice in un browser. 194 00:08:48,060 --> 00:08:49,010 Questo non è un grosso problema. 195 00:08:49,010 --> 00:08:51,550 A questo punto, quando ci preoccupiamo stile, ci preoccupiamo per la 196 00:08:51,550 --> 00:08:52,740 Roba che si scrive. 197 00:08:52,740 --> 00:08:56,240 Noi non preoccupano la roba che cosa i vostri uscite di codice. 198 00:08:56,240 --> 00:08:59,520 Quindi non preoccuparti di indentazione qui se si tratta di PHP che è 199 00:08:59,520 --> 00:09:01,190 effettivamente l'output roba. 200 00:09:01,190 --> 00:09:04,430 Dopo tutto, il browser non si cura, e un essere umano non sarà alla ricerca 201 00:09:04,430 --> 00:09:05,400 alla fonte comunque. 202 00:09:05,400 --> 00:09:09,000 Abbiamo il personale, per esempio, sarebbe essere guardando il tuo PHP. 203 00:09:09,000 --> 00:09:13,440 >> Quindi lasciatemi fare un rapido esempio ora del perché altrimenti questo potrebbe essere utile. 204 00:09:13,440 --> 00:09:18,620 Quindi, francamente, non riesco a ricordare l'ultima volta che ho usato C per risolvere un problema in 205 00:09:18,620 --> 00:09:19,620 il mondo reale. 206 00:09:19,620 --> 00:09:22,330 E 'stato probabilmente nella scuola di specializzazione in cui Avevo bisogno di usare un linguaggio che 207 00:09:22,330 --> 00:09:26,710 era piuttosto basso livello e mi ha dato la opportunità di fare qualcosa di molto alto 208 00:09:26,710 --> 00:09:30,720 eseguire per salvare davvero ben CPU cicli che potevo, in gran parte 209 00:09:30,720 --> 00:09:33,990 perché stavo usando grandi insiemi di dati, e ogni ciclo della CPU contato. 210 00:09:33,990 --> 00:09:37,750 E, francamente, anche in cose come i telefoni questi giorni e altri dispositivi 211 00:09:37,750 --> 00:09:39,910 dove non si dispone di molto più memoria e non si dispone di abbastanza come 212 00:09:39,910 --> 00:09:44,160 molto più CPU, utilizzando linguaggi più veloci è ancora attraente. 213 00:09:44,160 --> 00:09:47,290 >> Ma nel mondo reale, quando basta vuole buttare qualche programma insieme a 214 00:09:47,290 --> 00:09:50,340 analizzare alcuni dati, o che hai raccolto tutta una serie di registrazioni per 215 00:09:50,340 --> 00:09:53,330 qualche gruppo di studenti e si desidera molto automatizzare rapidamente l'invio di email 216 00:09:53,330 --> 00:09:56,240 uno ad uno per ogni uno di quelli dichiaranti, si sta andando a raggiungere per 217 00:09:56,240 --> 00:09:59,240 un linguaggio di livello più elevato di C per così dire. 218 00:09:59,240 --> 00:10:04,060 Qualcosa come PHP o Python o Ruby, o una mezza dozzina di altri che esistono 219 00:10:04,060 --> 00:10:04,550 in questi giorni. 220 00:10:04,550 --> 00:10:07,200 Ma quelle tre sono probabilmente il diritto più alla moda adesso. 221 00:10:07,200 --> 00:10:10,840 >> E che cosa questo significa è che si può aprire un editor di testo come gedit o 222 00:10:10,840 --> 00:10:14,030 quasi qualsiasi altra cosa e poi basta avviare scrivere codice senza doversi preoccupare 223 00:10:14,030 --> 00:10:17,800 sulla compilazione, senza dover davvero preoccuparsi della gestione della memoria, 224 00:10:17,800 --> 00:10:20,820 tenendo presente però che una piccola sciatteria finiranno per tornare 225 00:10:20,820 --> 00:10:24,790 a mordere se il set di dati viene più grande o il problema diventa grande. 226 00:10:24,790 --> 00:10:27,230 Ma cosa significa questo per noi è la seguente. 227 00:10:27,230 --> 00:10:29,860 >> Lasciami andare avanti e corro ortografico dal problema posto sei. 228 00:10:29,860 --> 00:10:33,480 Quindi questa è la mia implementazione basata su trie che ho usato sul grande 229 00:10:33,480 --> 00:10:35,500 bordo dove non eseguito così bene. 230 00:10:35,500 --> 00:10:38,720 Torneremo in una settimana di tempo e di rivisitare quelli che ha fatto finire in cima alla 231 00:10:38,720 --> 00:10:40,430 grande tavola presso la nostra ultima lezione. 232 00:10:40,430 --> 00:10:44,520 Ma per ora, lasciatemi andare avanti e basta eseguire la mia soluzione in testo, e noi faremo 233 00:10:44,520 --> 00:10:48,460 Bibbia di Re Giacomo, e ci siamo. 234 00:10:48,460 --> 00:10:51,080 >> Quindi questi sono tutti del presunto parole errate su 235 00:10:51,080 --> 00:10:52,240 Bibbia di Re Giacomo. 236 00:10:52,240 --> 00:10:55,560 E la mia applicazione ha mezzo secondo in totale. 237 00:10:55,560 --> 00:10:58,270 Quindi, non troppo male in questo particolare computer. 238 00:10:58,270 --> 00:11:01,540 Ma pensare a quanto codice che ho dovuto scrivere. 239 00:11:01,540 --> 00:11:02,880 Pensate quanto il codice si doveva scrivere. 240 00:11:02,880 --> 00:11:06,170 Pensate a quante ore avete speso nel D-hall o il vostro dormitorio o dovunque 241 00:11:06,170 --> 00:11:07,890 effettivamente codificare fino a tale soluzione. 242 00:11:07,890 --> 00:11:11,850 >> Beh, se io in realtà sono un livello superiore linguaggio come PHP, tenere presente 243 00:11:11,850 --> 00:11:13,350 che cosa posso fare qui. 244 00:11:13,350 --> 00:11:16,410 Prima, supponiamo che questo è invece il codice di distribuzione. 245 00:11:16,410 --> 00:11:17,790 Questo è un file chiamato correttore ortografico. 246 00:11:17,790 --> 00:11:20,220 E 'disponibile come parte di oggi codice di distribuzione. 247 00:11:20,220 --> 00:11:22,670 E ho intenzione di sventolare la mia mano a più dei dettagli, ma questo è in realtà 248 00:11:22,670 --> 00:11:25,500 un interessante esempio di come si potrebbe trasferire una lingua 249 00:11:25,500 --> 00:11:28,870 come C oltre a PHP. 250 00:11:28,870 --> 00:11:33,420 Ho letteralmente aperto due finestre di testo, uno con la mia versione C di speller.c, 251 00:11:33,420 --> 00:11:36,960 e ho appena iniziato a tradurre nel mio testa a PHP e scrivendo tutto, utilizzando 252 00:11:36,960 --> 00:11:38,840 i più vicini funzioni equivalenti. 253 00:11:38,840 --> 00:11:40,100 >> Quindi alcune di queste cose sono differenti. 254 00:11:40,100 --> 00:11:43,730 Abbiamo visto l'ultima volta che PHP non usa includere in tutto allo stesso modo. 255 00:11:43,730 --> 00:11:47,050 Esso utilizza tipicamente richiedono che, sebbene includere esiste. 256 00:11:47,050 --> 00:11:50,330 Definire è un po 'diverso da # Define in C, ma che è 257 00:11:50,330 --> 00:11:51,890 come facciamo una costante. 258 00:11:51,890 --> 00:11:55,860 $ Argc si scopre esiste in PHP, così che abbiamo visto prima. 259 00:11:55,860 --> 00:11:58,650 Questi sono solo variabili, tutti che iniziano con il segno del dollaro. 260 00:11:58,650 --> 00:12:00,590 Ricordiamo queste sono solo un mucchio di punti galleggianti. 261 00:12:00,590 --> 00:12:03,970 >> Quindi, per farla breve, sei il benvenuto a Sfogliando questo caso curioso, questo è 262 00:12:03,970 --> 00:12:10,010 quasi una conversione linea-per-linea della Versione C di speller.c in PHP. 263 00:12:10,010 --> 00:12:12,630 E si potrebbe farlo di nuovo per una mezza dozzina di altre lingue. 264 00:12:12,630 --> 00:12:14,910 >> Ma ciò che è interessante è questo. 265 00:12:14,910 --> 00:12:16,910 O quello che è francamente sconfortante è questo. 266 00:12:16,910 --> 00:12:20,790 Lasciami andare avanti e digitare about dictionary.php, e sostengono che io sono 267 00:12:20,790 --> 00:12:23,670 intenzione di andare avanti e di re-implementare problema definito sei qui. 268 00:12:23,670 --> 00:12:27,530 >> Quindi cerchiamo di proporre in primo luogo che in questo file, che sarà attuato in 269 00:12:27,530 --> 00:12:30,550 PHP, per cui vorrei apro le tag così. 270 00:12:30,550 --> 00:12:34,780 Permettetemi di fare io stesso un globale variabile, $ dimensione diventa zero. 271 00:12:34,780 --> 00:12:36,710 E ho intenzione di dare me una tabella hash. 272 00:12:36,710 --> 00:12:38,110 Io uso una tabella hash per questa cosa. 273 00:12:38,110 --> 00:12:42,070 Come dichiaro una tabella hash in PHP? 274 00:12:42,070 --> 00:12:42,990 Fatto. 275 00:12:42,990 --> 00:12:43,980 OK. 276 00:12:43,980 --> 00:12:48,870 >> Staffa di chiudere la parentesi in modo aperto rappresenta quello che in PHP, come abbiamo visto? 277 00:12:48,870 --> 00:12:51,850 Un array, ma un array che potrebbe essere un array associativo. 278 00:12:51,850 --> 00:12:54,320 Un array associativo è una struttura dati che 279 00:12:54,320 --> 00:12:55,860 tasti associati con i valori. 280 00:12:55,860 --> 00:12:59,430 >> Ora, nel più semplice indicizzato numericamente array, quelle chiavi che cosa sono? 281 00:12:59,430 --> 00:13:02,250 282 00:13:02,250 --> 00:13:03,960 Zero, uno, due, tre, giusto? 283 00:13:03,960 --> 00:13:08,780 Vecchia scuola roba da C. Ma può anche essere stringhe simili a foo e bar, 284 00:13:08,780 --> 00:13:12,210 o maxwell, o qualsiasi stringa. 285 00:13:12,210 --> 00:13:14,240 Così mi può far leva che in un attimo. 286 00:13:14,240 --> 00:13:17,550 >> Lasciami andare avanti e dichiaro una funzione come - 287 00:13:17,550 --> 00:13:19,020 facciamo carico () prima. 288 00:13:19,020 --> 00:13:20,690 Così carico di funzione (). 289 00:13:20,690 --> 00:13:23,440 E PHP è un po 'diverso in quanto è letteralmente tipo di funzione, ma si 290 00:13:23,440 --> 00:13:24,930 non digitare un tipo di ritorno. 291 00:13:24,930 --> 00:13:28,760 Ho intenzione di andare avanti e dire che la funzione load () dovrebbe prendere in 292 00:13:28,760 --> 00:13:31,000 argomento $ dizionario, basta come la versione C ha fatto. 293 00:13:31,000 --> 00:13:32,510 Sto facendo che dalla memoria. 294 00:13:32,510 --> 00:13:34,910 >> E propongo che io sono intenzione di fare questo. 295 00:13:34,910 --> 00:13:37,080 Sto semplicemente andando a fare foreach. 296 00:13:37,080 --> 00:13:40,710 Io vado a chiamare una funzione chiamata file (), passando il nome di quel 297 00:13:40,710 --> 00:13:44,990 file, che è la variabile $ Dizionario da $ parola. 298 00:13:44,990 --> 00:13:49,410 E poi all'interno del mio ciclo for qui, sono intenzione di andare avanti e conservare nel mio 299 00:13:49,410 --> 00:13:57,440 $ Tabella $ parola diventa vera. 300 00:13:57,440 --> 00:13:57,918 Fatto. 301 00:13:57,918 --> 00:14:01,264 Oh, aspetta. 302 00:14:01,264 --> 00:14:02,422 Fatto. 303 00:14:02,422 --> 00:14:02,760 OK. 304 00:14:02,760 --> 00:14:04,970 >> Questa è la funzione load () dire in PHP. 305 00:14:04,970 --> 00:14:05,865 Ora, perché funziona? 306 00:14:05,865 --> 00:14:07,010 E sto tipo di barare qui. 307 00:14:07,010 --> 00:14:09,980 >> Così, uno, foreach abbiamo visto brevemente l'ultima volta. 308 00:14:09,980 --> 00:14:13,680 Significa solo che è possibile iterare un array senza preoccuparsi con i 309 00:14:13,680 --> 00:14:16,150 e n piú plus, e tutto questo. 310 00:14:16,150 --> 00:14:21,350 Dictionary è, naturalmente, il nome del file, qualcosa come grande o piccolo, i due 311 00:14:21,350 --> 00:14:22,830 dizionari abbiamo usato l'ultima volta. 312 00:14:22,830 --> 00:14:26,715 File è una funzione che apre il testo il file, lo legge in riga per riga, e 313 00:14:26,715 --> 00:14:29,840 mani indietro una matrice enorme, ciascuno degli elementi di cui è un 314 00:14:29,840 --> 00:14:31,340 linea da quel file. 315 00:14:31,340 --> 00:14:36,040 Ecco, questo è la combinazione di fopen, e fread, e mentre loop, e fclose, 316 00:14:36,040 --> 00:14:37,080 e tutto questo. 317 00:14:37,080 --> 00:14:40,150 Infine, come parola significa proprio questo è il variabile ho intenzione di avere accesso a 318 00:14:40,150 --> 00:14:41,890 ad ogni iterazione in questo ciclo. 319 00:14:41,890 --> 00:14:46,910 >> Così, in breve, questa fodera qui significa aprire il file il cui nome è in 320 00:14:46,910 --> 00:14:50,750 dizionario, la variabile, iterare riga per riga, e ogni volta che si ottiene 321 00:14:50,750 --> 00:14:54,290 una linea, negozio in una parola variabile chiamata, e poi fare qualcosa con la parola. 322 00:14:54,290 --> 00:14:55,280 Cosa voglio fare? 323 00:14:55,280 --> 00:14:58,110 Voglio mettere la parola nella mia tabella hash. 324 00:14:58,110 --> 00:15:00,860 >> Beh, posso mettere qualcosa nel mio Hash Table proprio come in C 325 00:15:00,860 --> 00:15:02,140 utilizzando le parentesi quadre. 326 00:15:02,140 --> 00:15:03,660 Questo è il nome della mia tabella hash. 327 00:15:03,660 --> 00:15:07,180 Ho intenzione di indice in quella hash Tavolo in questa posizione. 328 00:15:07,180 --> 00:15:08,920 Quindi non inquadrare lo zero, non inquadrare uno. 329 00:15:08,920 --> 00:15:11,990 Citazione Staffa qualcosa unquote, qualunque cosa quella parola è. 330 00:15:11,990 --> 00:15:15,200 E proprio come si potrebbe avere nel vostro lavoro tabella hash trie, basta negozio 331 00:15:15,200 --> 00:15:17,650 effettivamente un valore booleano, implicitamente o esplicitamente. 332 00:15:17,650 --> 00:15:18,260 Fatto. 333 00:15:18,260 --> 00:15:20,000 Sto memorizzare il valore true. 334 00:15:20,000 --> 00:15:23,150 >> Ora ci sono un paio di cose Sto scorciatoie qui. 335 00:15:23,150 --> 00:15:27,720 Tecnicamente, ci sara 'un fastidioso nuova linea, / n, a fine 336 00:15:27,720 --> 00:15:28,820 ciascuna di tali parole. 337 00:15:28,820 --> 00:15:31,770 Quindi forse dovrei chiamare una funzione PHP chiamato chop (), che sarà 338 00:15:31,770 --> 00:15:33,460 letteralmente tagliare che fuori. 339 00:15:33,460 --> 00:15:35,020 E ho davvero bisogno di fare un'altra cosa. 340 00:15:35,020 --> 00:15:38,380 Probabilmente dovrei incrementare taglia su ogni iterazione, quindi sto tenendo traccia 341 00:15:38,380 --> 00:15:39,560 a livello globale di quello che è. 342 00:15:39,560 --> 00:15:43,180 E, francamente, e questo è uno dei aspetti più stupidi di PHP, se siete 343 00:15:43,180 --> 00:15:46,950 utilizzando una variabile globale, è necessario dire esplicitamente che siete. 344 00:15:46,950 --> 00:15:51,670 Quindi ho intenzione di scrivere effettivamente a livello mondiale $ Size, $ tabella globale, e ora 345 00:15:51,670 --> 00:15:52,690 la mia funzione è completa. 346 00:15:52,690 --> 00:15:57,475 >> Quindi non è così semplice come prima, ma probabilmente ha meno tempo rispetto alla C 347 00:15:57,475 --> 00:15:58,220 versione, forse? 348 00:15:58,220 --> 00:15:58,730 OK. 349 00:15:58,730 --> 00:16:00,390 >> Così ora facciamo la funzione () di controllo. 350 00:16:00,390 --> 00:16:04,300 Vediamo se almeno questo ha preso l' ore e ore che ci ha preso in C. So 351 00:16:04,300 --> 00:16:06,500 lasciatemi andare avanti e dichiaro controllare in funzione. 352 00:16:06,500 --> 00:16:09,070 Prende la parola in argomento, che è andando a venire da correttore ortografico. 353 00:16:09,070 --> 00:16:13,410 E sto solo andando a verificare se la a seguito isset variabile, tavolo 354 00:16:13,410 --> 00:16:18,400 Staffa strtolower di parola - 355 00:16:18,400 --> 00:16:20,590 cerchiamo di equilibrio tutte le mie parentesi - 356 00:16:20,590 --> 00:16:24,275 poi restituire true. 357 00:16:24,275 --> 00:16:27,020 358 00:16:27,020 --> 00:16:28,460 Else - 359 00:16:28,460 --> 00:16:30,330 che era davvero il disco parte di questo programma. 360 00:16:30,330 --> 00:16:31,940 Altrimenti, restituire false. 361 00:16:31,940 --> 00:16:32,630 Fatto. 362 00:16:32,630 --> 00:16:33,460 Ecco spunta (). 363 00:16:33,460 --> 00:16:34,520 >> Ora, perché questo funziona? 364 00:16:34,520 --> 00:16:37,040 Beh, quello che ho passato in una parola, che è una stringa. 365 00:16:37,040 --> 00:16:41,400 Due, sto controllando all'interno del hash tavolo, che si chiama $ tabella. 366 00:16:41,400 --> 00:16:45,470 Sto costringendolo a caratteri minuscoli chiamando una funzione molto simile tolower () in 367 00:16:45,470 --> 00:16:48,580 C, ma questo non fa l'intera parola, Non un singolo carattere. 368 00:16:48,580 --> 00:16:52,680 E se è impostata, in altre parole non è un valore impostato, in altre parole, 369 00:16:52,680 --> 00:16:54,880 se è vero, allora sì, questa è una parola. 370 00:16:54,880 --> 00:16:56,530 Perché ho messo lì con load (). 371 00:16:56,530 --> 00:16:59,100 E se no, io vado a restituire false. 372 00:16:59,100 --> 00:17:00,090 >> Ora gli altri sono facili. 373 00:17:00,090 --> 00:17:03,570 Dimensioni funzione (), come posso fare questo? 374 00:17:03,570 --> 00:17:05,230 Io essenzialmente faccio ritorno $ size. 375 00:17:05,230 --> 00:17:07,770 Ma ho tecnicamente bisogno di fare questa cosa fastidiosa. 376 00:17:07,770 --> 00:17:10,640 E in realtà up sentire, stavo tagliando un angolo di troppo. 377 00:17:10,640 --> 00:17:12,920 Ho davvero bisogno di fare $ tabella globale. 378 00:17:12,920 --> 00:17:16,260 >> Ma detto questo, scarico). 379 00:17:16,260 --> 00:17:17,380 Scaricare () è incredibile. 380 00:17:17,380 --> 00:17:20,500 Funzione di scarico (). 381 00:17:20,500 --> 00:17:23,990 Come voglio implementare scarico ()? 382 00:17:23,990 --> 00:17:25,079 Fatto. 383 00:17:25,079 --> 00:17:25,450 OK. 384 00:17:25,450 --> 00:17:28,900 >> Così scarico (), la gestione della memoria è completamente preso cura di voi in 385 00:17:28,900 --> 00:17:31,800 qualcosa come PHP e un sacco dei linguaggi di alto livello. 386 00:17:31,800 --> 00:17:32,600 Quindi questo è incredibile. 387 00:17:32,600 --> 00:17:36,080 Come perché diavolo abbiamo trascorso il passato otto più settimane C scrittura 388 00:17:36,080 --> 00:17:41,030 a quanto pare molto lento, molto tempo consumano problemi con decine di ore 389 00:17:41,030 --> 00:17:42,530 di lavorare sotto le nostre cinture? 390 00:17:42,530 --> 00:17:46,110 >> Beh, per prima cosa, questo può funzionare bene per piccoli programmi. 391 00:17:46,110 --> 00:17:47,840 Certamente accelerato la mia i tempi di sviluppo. 392 00:17:47,840 --> 00:17:49,790 Ma vediamo cosa succede nel mondo reale. 393 00:17:49,790 --> 00:17:52,370 >> Lasciami andare in questa directory in una finestra di terminale. 394 00:17:52,370 --> 00:17:53,370 C'è correttore ortografico. 395 00:17:53,370 --> 00:17:56,570 E notare per inciso, e si potrebbe hanno incontrato questo problema impostare 396 00:17:56,570 --> 00:17:58,190 sei o problema impostare sette. 397 00:17:58,190 --> 00:18:01,610 Non è strettamente necessario terminare file PHP con. php. 398 00:18:01,610 --> 00:18:05,250 Se mettete una riga come quella prima a la cima, che è una linea speciale 399 00:18:05,250 --> 00:18:10,980 di sintassi che significa essenzialmente trovare il programma chiamato PHP e usarlo per 400 00:18:10,980 --> 00:18:12,270 interpretare questo file. 401 00:18:12,270 --> 00:18:15,410 Così ora nessuno sa veramente che Sono in esecuzione di un programma PHP. 402 00:18:15,410 --> 00:18:19,860 Posso farlo funzionare proprio come se sono stati qualcosa compilato in C. 403 00:18:19,860 --> 00:18:20,650 >> Ma ecco la cosa. 404 00:18:20,650 --> 00:18:21,600 In realtà, facciamolo di nuovo. 405 00:18:21,600 --> 00:18:23,530 Dropbox/pset6 /. 406 00:18:23,530 --> 00:18:25,390 C'è correttore ortografico. 407 00:18:25,390 --> 00:18:26,720 OK, 0,44 secondi. 408 00:18:26,720 --> 00:18:28,080 Ha ottenuto più veloce questa volta. 409 00:18:28,080 --> 00:18:29,745 >> Ora andiamo nella versione di PHP. 410 00:18:29,745 --> 00:18:43,070 411 00:18:43,070 --> 00:18:44,320 Bel tocco. 412 00:18:44,320 --> 00:18:50,830 413 00:18:50,830 --> 00:18:53,285 Ma basta pensare quanto tempo Ho salvato in orario di ufficio. 414 00:18:53,285 --> 00:18:56,990 415 00:18:56,990 --> 00:18:57,790 OK. 416 00:18:57,790 --> 00:19:01,020 >> Così 3,59 secondi, che in realtà non suona accurata sia. 417 00:19:01,020 --> 00:19:03,710 Ma è perché lunga storia breve, quando si sta stampando una quantità enorme 418 00:19:03,710 --> 00:19:06,840 di roba sullo schermo, che si rallenta le cose. 419 00:19:06,840 --> 00:19:11,260 Quello che veramente preso la CPU in apparecchio era 3,59 secondi, in 420 00:19:11,260 --> 00:19:15,260 Contrariamente a C, che ha avuto 0,44 secondi più di recente. 421 00:19:15,260 --> 00:19:17,620 Questo è veramente un ordine di grandezza diversa. 422 00:19:17,620 --> 00:19:20,280 >> Allora, dove sta quel prezzo provenienti da? 423 00:19:20,280 --> 00:19:21,790 Perché è così molto più lento? 424 00:19:21,790 --> 00:19:24,220 Perché PHP esegue così male? 425 00:19:24,220 --> 00:19:25,242 Danielle? 426 00:19:25,242 --> 00:19:26,550 >> AUDIENCE: Non l'hai fatto davvero utilizzare una tabella hash. 427 00:19:26,550 --> 00:19:27,710 >> DAVID MALAN: non ho davvero utilizzare una tabella hash. 428 00:19:27,710 --> 00:19:28,760 Così ho sorta di fatto. 429 00:19:28,760 --> 00:19:29,870 Quindi è un array associativo. 430 00:19:29,870 --> 00:19:33,650 Molto probabilmente se la gente in PHP sono davvero intelligente, hanno usato sotto la 431 00:19:33,650 --> 00:19:39,520 cofano di una tabella hash concretamente attuato in qualcosa come C o C + +. 432 00:19:39,520 --> 00:19:41,290 Ma. 433 00:19:41,290 --> 00:19:42,760 Già. 434 00:19:42,760 --> 00:19:44,010 >> AUDIENCE: [incomprensibile]. 435 00:19:44,010 --> 00:19:46,690 436 00:19:46,690 --> 00:19:47,080 >> DAVID MALAN: Già. 437 00:19:47,080 --> 00:19:50,780 Così ciascuna delle funzioni che ho scritto ora - in realtà, si può dire che una volta di più di un 438 00:19:50,780 --> 00:19:51,480 po 'più forte? 439 00:19:51,480 --> 00:19:54,509 >> PUBBLICO: Le funzioni che hai incluso ha molto più completo 440 00:19:54,509 --> 00:19:56,610 capacità di - 441 00:19:56,610 --> 00:19:57,550 >> DAVID MALAN: Ecco, questo è molto vero. 442 00:19:57,550 --> 00:20:01,490 C'è molto di più in testa che siamo non proprio visto e concentrarsi solo su 443 00:20:01,490 --> 00:20:03,730 dictionary.php, che ho appena scritto. 444 00:20:03,730 --> 00:20:08,020 Al contrario, c'è un intero interprete andare in background. 445 00:20:08,020 --> 00:20:12,040 In effetti, quando ho eseguito questo programma, non era in esecuzione zeri compilati e quelli 446 00:20:12,040 --> 00:20:14,290 progettato per la mia CPU Intel. 447 00:20:14,290 --> 00:20:19,270 Piuttosto, era in esecuzione riga per riga Codice PHP che appare esattamente 448 00:20:19,270 --> 00:20:20,350 Come abbiamo digitato. 449 00:20:20,350 --> 00:20:22,475 E così ogni volta che si utilizza un linguaggio interpretato, è 450 00:20:22,475 --> 00:20:23,850 effettivamente fare pagare questo prezzo. 451 00:20:23,850 --> 00:20:27,010 Sta andando a prendere un po 'di tempo per leggere il tuo superiore del file in basso, da sinistra a 452 00:20:27,010 --> 00:20:30,740 a destra, e poi eseguire ogni line di nuovo e di nuovo. 453 00:20:30,740 --> 00:20:34,250 >> Ora, in realtà, soprattutto sul web, si può effettivamente accelerare questo processo 454 00:20:34,250 --> 00:20:38,660 mettendo in cache i risultati del Il codice PHP viene interpretata. 455 00:20:38,660 --> 00:20:41,640 E questo ha un senso sul web, perché se non hai un utente come 456 00:20:41,640 --> 00:20:46,300 me qui, ma 1.000 o 10.000 utenti, quindi forse la prima volta che il file è 457 00:20:46,300 --> 00:20:49,050 accesso è lento, ma da allora in poi è molto più veloce. 458 00:20:49,050 --> 00:20:51,000 >> Ma anche questo, di nuovo, è un compromesso. 459 00:20:51,000 --> 00:20:53,870 E per qualcosa come un dato di ricerca impostare, o anche qualcosa di grande come 460 00:20:53,870 --> 00:20:58,330 questo, gli utenti alla fine iniziare a sentire che rallentamento. 461 00:20:58,330 --> 00:21:02,670 >> Lingue Così, in breve, sono interpretati molto in voga, molto popolare, e 462 00:21:02,670 --> 00:21:06,710 francamente sono probabilmente le lingue dovrebbe raggiungere per quando la risoluzione dei problemi 463 00:21:06,710 --> 00:21:08,200 successivamente alla CS50. 464 00:21:08,200 --> 00:21:12,720 Ma rendi conto di quanto sei veramente dando per scontato sotto la cappa 465 00:21:12,720 --> 00:21:15,910 proprio quelle ultime settimane di hash tavoli, e alberi, e cerca, 466 00:21:15,910 --> 00:21:20,770 che vengono utilizzati in definitiva effettivamente implementare cose come parentesi aperta, 467 00:21:20,770 --> 00:21:24,200 parentesi quadra, che possiamo ora gratitudine per scontato. 468 00:21:24,200 --> 00:21:26,360 >> Quindi, diamo uno sguardo ora in questo contesto web. 469 00:21:26,360 --> 00:21:29,890 E ho detto l'ultima volta che non c'è un mazzo di superglobals in PHP che 470 00:21:29,890 --> 00:21:32,490 non sono davvero rilevanti nella riga di comando. 471 00:21:32,490 --> 00:21:36,210 Sono più rilevante nel contesto di usare PHP in un contesto web. 472 00:21:36,210 --> 00:21:41,220 Quindi, in esecuzione di PHP su un server web in modo per generare cose come HTML. 473 00:21:41,220 --> 00:21:44,540 >> E ci lanciò un'occhiata a $ _GET e $ _POST, e è lì che gli utenti automaticamente ' 474 00:21:44,540 --> 00:21:49,100 Ingresso finisce semplicemente se si invia un formare in un file con estensione. php su un web 475 00:21:49,100 --> 00:21:50,460 server, come l'apparecchio. 476 00:21:50,460 --> 00:21:53,310 Ma vediamo brevemente _COOKIE $ E $ _SESSION. 477 00:21:53,310 --> 00:21:56,670 >> In parole povere, che cosa è un cookie come lo si capisce nel contesto di 478 00:21:56,670 --> 00:21:58,220 utilizzando il web? 479 00:21:58,220 --> 00:21:59,450 >> AUDIENCE: file sul computer. 480 00:21:59,450 --> 00:21:59,920 >> DAVID MALAN: Già. 481 00:21:59,920 --> 00:22:03,500 Si tratta di un file sul computer dell'utente piantato da qualunque sito 482 00:22:03,500 --> 00:22:04,410 vi capita di visitare. 483 00:22:04,410 --> 00:22:07,334 Quindi, quando si va a Facebook, quando si va a bankofamerica.com, quando si va 484 00:22:07,334 --> 00:22:10,330 a google.com, quando si va a quasi tutta la sito web nel mondo in questi giorni, 485 00:22:10,330 --> 00:22:14,850 compreso cs50.net, un cookie è piantato sul vostro computer, che è 486 00:22:14,850 --> 00:22:19,800 sia un valore memorizzato nella RAM del vostro computer nella memoria del browser, o 487 00:22:19,800 --> 00:22:22,800 talvolta effettivamente un file memorizzato sul disco rigido. 488 00:22:22,800 --> 00:22:26,960 >> E ciò che è di solito memorizzato in quel file non è il tuo nome utente, non il tuo 489 00:22:26,960 --> 00:22:31,060 la password, in genere non è qualcosa sensibili a meno che il sito non è così 490 00:22:31,060 --> 00:22:35,040 buona con la loro sicurezza, ma piuttosto è un grande identificatore unico tra 491 00:22:35,040 --> 00:22:35,680 altre cose. 492 00:22:35,680 --> 00:22:38,920 E 'un grande numero casuale piantato sul vostro computer, ma si può pensare come 493 00:22:38,920 --> 00:22:42,740 una sorta di mano virtuale bollo come da un club o qualche parco divertimenti che 494 00:22:42,740 --> 00:22:47,160 consente al personale, i proprietari di quella servizio, per ricordare chi sei. 495 00:22:47,160 --> 00:22:51,030 Quindi se il numero casuale è grande come 12345678, anche se questo è ovviamente 496 00:22:51,030 --> 00:22:54,180 non troppo casuale, pensare a questo come il timbro mano che quando si visita 497 00:22:54,180 --> 00:22:57,930 facebook.com per la prima volta, timbro che il numero sulla vostra mano. 498 00:22:57,930 --> 00:23:01,510 E allora perché si parla HTTP, è essendo un browser, e perché Facebook 499 00:23:01,510 --> 00:23:06,440 ovviamente parla lo stesso di un sito server, il protocollo HTTP dice che 500 00:23:06,440 --> 00:23:09,930 in qualsiasi momento successivamente visita facebook.com, che si tratti di un secondo 501 00:23:09,930 --> 00:23:13,560 più tardi, un'ora più tardi, anche il giorno dopo, fino a quando si dispone di non esplicitamente 502 00:23:13,560 --> 00:23:17,050 disconnesso, che di fatto è come lavare le mani. 503 00:23:17,050 --> 00:23:20,280 HTTP dice che si dovrebbe presentare il timbro a mano ogni volta che si 504 00:23:20,280 --> 00:23:22,020 tornare a quel sito. 505 00:23:22,020 --> 00:23:24,390 >> Cosa Facebook poi non è che guardare quel timbro mano e 506 00:23:24,390 --> 00:23:26,850 dicono, oh, 123456789. 507 00:23:26,850 --> 00:23:30,260 Non so a prima vista che questa è David Malan a Cambridge, 508 00:23:30,260 --> 00:23:34,690 Massachusetts, ma possono controllare la loro banca dati e dire, oh, la persona 509 00:23:34,690 --> 00:23:39,930 sul cui computer abbiamo piantato 123456789 è David Malan da Cambridge, 510 00:23:39,930 --> 00:23:40,440 Massachusetts. 511 00:23:40,440 --> 00:23:46,000 Facciamo vedere che l'utente poi il suo profilo pagina o il suo News Feed. 512 00:23:46,000 --> 00:23:49,660 >> Ma c'è un problema qui se questo Ecco come il web funziona davvero. 513 00:23:49,660 --> 00:23:51,390 Diamo un'occhiata a un esempio veloce. 514 00:23:51,390 --> 00:23:55,190 Andiamo in realtà andare a dire facebook.com. 515 00:23:55,190 --> 00:23:58,130 Ma prima che potessimo andarci, lasciare andare avanti e di aprire Chrome 516 00:23:58,130 --> 00:23:59,790 Ispettore qui. 517 00:23:59,790 --> 00:24:01,140 Fammi vedere la scheda di rete. 518 00:24:01,140 --> 00:24:06,020 E ora andiamo avanti e digitare in https://facebook.com. 519 00:24:06,020 --> 00:24:09,410 E io sto facendo in modo che non vediamo tutti questi reindirizzamenti e rifiuti 520 00:24:09,410 --> 00:24:10,660 tempo guardando attraverso quelli. 521 00:24:10,660 --> 00:24:12,690 Lasciami entrare colpito. 522 00:24:12,690 --> 00:24:13,130 >> Bene. 523 00:24:13,130 --> 00:24:14,580 Vediamo un sacco di richieste. 524 00:24:14,580 --> 00:24:15,640 Arriva Facebook. 525 00:24:15,640 --> 00:24:16,930 C'è un intero gruppo di file. 526 00:24:16,930 --> 00:24:19,290 E qui, per la mia menzione di la latenza ultima volta, che è 527 00:24:19,290 --> 00:24:21,240 un sacco di richieste HTTP. 528 00:24:21,240 --> 00:24:23,700 Ma il primo è probabilmente il più interessante. 529 00:24:23,700 --> 00:24:26,420 >> Quindi cerchiamo di scorrere verso il basso qui, e Io lo zoom in un secondo. 530 00:24:26,420 --> 00:24:29,090 Questo sta per essere una sorta di un pasticcio, ma vediamo. 531 00:24:29,090 --> 00:24:31,660 Facebook ci sta inviando un sacco di roba. 532 00:24:31,660 --> 00:24:33,490 >> Ma ehi, interessante. 533 00:24:33,490 --> 00:24:37,880 Stanno piantando non uno, ma quattro Stamp mano sul mia mano qui. 534 00:24:37,880 --> 00:24:40,400 Set-Cookie, Set-Cookie, set-biscotto, Set-Cookie. 535 00:24:40,400 --> 00:24:44,030 E ci sono alcune caratteristiche qui. 536 00:24:44,030 --> 00:24:46,170 Tutti loro citare alcuni tipo di scadenza. 537 00:24:46,170 --> 00:24:50,090 E sembra che Facebook si spera per ricordare me fino al 2015. 538 00:24:50,090 --> 00:24:53,670 Ecco, questo è probabilmente il momento in cui Devo uscire o faranno solo 539 00:24:53,670 --> 00:24:55,710 Presumo automaticamente Sono non tornare. 540 00:24:55,710 --> 00:24:57,840 Ecco, questo è in realtà un dignitoso quantità di tempo. 541 00:24:57,840 --> 00:24:59,170 >> E ci sono alcuni altri cosa sta succedendo qui. 542 00:24:59,170 --> 00:25:03,036 Questo cookie sembra essere forzatamente cancellato dallo dicendo che è scaduto nel 1970 543 00:25:03,036 --> 00:25:04,460 prima esistevano i cookie. 544 00:25:04,460 --> 00:25:06,510 Così il browser è solo andare assumere OK, è come 545 00:25:06,510 --> 00:25:07,910 lavaggio del timbro mani. 546 00:25:07,910 --> 00:25:11,240 >> Ma ora, quando il browser fa una successiva richiesta - 547 00:25:11,240 --> 00:25:14,340 mi permetta di andare avanti e fare questo ancora e reload. 548 00:25:14,340 --> 00:25:18,170 Ora vorrei scorrere alla top richiesta e scendere 549 00:25:18,170 --> 00:25:20,760 qui, intestazioni di richiesta. 550 00:25:20,760 --> 00:25:21,390 Notare questo. 551 00:25:21,390 --> 00:25:25,280 Così ora sono sotto non intestazioni di risposta, ma notate che dice intestazioni di richiesta. 552 00:25:25,280 --> 00:25:29,220 E notare che il mio browser come parte di la sua richiesta dopo aver colpito reload ha 553 00:25:29,220 --> 00:25:32,780 inviato almeno le seguenti informazioni. 554 00:25:32,780 --> 00:25:34,670 Non impostato-biscotto, ma biscotto. 555 00:25:34,670 --> 00:25:38,750 Quindi questa è la linea, l'intestazione HTTP così a parlare, dove il mio browser è una sorta 556 00:25:38,750 --> 00:25:43,340 della mia insaputa presentazione la mia mano per l'ispezione di Facebook. 557 00:25:43,340 --> 00:25:46,020 >> Così questi cookie possono essere utilizzato poi per cosa? 558 00:25:46,020 --> 00:25:49,420 Per ricordare chi sei, o ricordare come molte volte ci sei stato, o 559 00:25:49,420 --> 00:25:50,280 davvero nulla. 560 00:25:50,280 --> 00:25:52,742 >> Così qui è counter.php. 561 00:25:52,742 --> 00:25:53,780 E mi permetta di ingrandire il font. 562 00:25:53,780 --> 00:25:58,380 E ogni volta che mi ricarica questa pagina, avviso sta ricordando quante volte 563 00:25:58,380 --> 00:25:59,250 Io ci sono stato. 564 00:25:59,250 --> 00:26:00,570 Beh, non è tutto così impressionante. 565 00:26:00,570 --> 00:26:03,140 Diciamo solo chiudere quella scheda, e ora torniamo a 566 00:26:03,140 --> 00:26:07,860 http://localhost/counter.php. 567 00:26:07,860 --> 00:26:08,970 >> Oh, questo è interessante. 568 00:26:08,970 --> 00:26:10,960 Si ricordava ancora, anche anche se ho chiuso la scheda. 569 00:26:10,960 --> 00:26:14,010 E francamente, se chiudo il browser, se attuata nel modo giusto, io 570 00:26:14,010 --> 00:26:18,950 potrebbe ancora ricordare che questo utente sia che lui o lei era la prima volta, e 571 00:26:18,950 --> 00:26:22,840 solo una volta che vado nel menu di Chrome, che qui è qui, e andare a 572 00:26:22,840 --> 00:26:25,990 Storia, e fare clic su Cancella dati di navigazione, come alcuni di voi potrebbero avere in 573 00:26:25,990 --> 00:26:33,050 passato, solo allora i cookie in realtà l'eliminazione nel corso web 574 00:26:33,050 --> 00:26:33,970 sviluppo. 575 00:26:33,970 --> 00:26:35,340 >> Quindi, se andiamo - 576 00:26:35,340 --> 00:26:37,080 cerchiamo di close up gedit qui. 577 00:26:37,080 --> 00:26:38,910 E se andiamo ora a questo file. 578 00:26:38,910 --> 00:26:44,210 Lasciami andare nel nostro vhosts / localhost / pubblico, e lasciami fare 579 00:26:44,210 --> 00:26:46,340 counter.php. 580 00:26:46,340 --> 00:26:48,350 Si noti che questo è un bel semplice programma. 581 00:26:48,350 --> 00:26:50,250 E 'un sito molto semplice. 582 00:26:50,250 --> 00:26:51,770 >> Così all'inizio del file è solo commenti. 583 00:26:51,770 --> 00:26:54,930 Ma ecco una nuova linea che si può hanno visto già in p-set di sette, 584 00:26:54,930 --> 00:26:56,000 session_start (). 585 00:26:56,000 --> 00:27:00,380 Questa è una riga di codice PHP che dice in sostanza il server web, rendono 586 00:27:00,380 --> 00:27:03,400 Assicurati di timbrare le mani e fare Assicuratevi di controllare francobolli mano. 587 00:27:03,400 --> 00:27:06,810 Questo è tutto ciò che la linea fa, e fa tutto questo processo per noi. 588 00:27:06,810 --> 00:27:09,510 Poi accorgo che ho appena ricevuto due rami qui. 589 00:27:09,510 --> 00:27:14,150 Se la chiave del contatore interno di questo speciale variabile globale chiamata 590 00:27:14,150 --> 00:27:18,010 $ _SESSION È impostato - in altre parole, se c'è qualche valore lì - 591 00:27:18,010 --> 00:27:22,440 andiamo e conservarla in un locale variabile denominata $ contatore. 592 00:27:22,440 --> 00:27:27,000 Altrimenti, si assegni $ contatore il valore predefinito di 0. 593 00:27:27,000 --> 00:27:30,320 >> Ora qui è un aspetto di PHP che è sia una benedizione e una maledizione. 594 00:27:30,320 --> 00:27:32,080 PHP è un po 'sciatta. 595 00:27:32,080 --> 00:27:35,160 Così, mentre in C, quale sarebbe la campo di applicazione del contatore sono stati 596 00:27:35,160 --> 00:27:36,725 o qui o qui? 597 00:27:36,725 --> 00:27:39,270 598 00:27:39,270 --> 00:27:41,690 >> Sarebbe stato confinato a quelle parentesi graffe. 599 00:27:41,690 --> 00:27:42,090 Indovinate un po? 600 00:27:42,090 --> 00:27:46,920 In PHP, esiste anche al di fuori di quelle parentesi graffe, qui, e qui, 601 00:27:46,920 --> 00:27:49,120 e qui, e qui, e anche in basso. 602 00:27:49,120 --> 00:27:52,400 Allora io dico questo è una benedizione, nel senso che non si deve pensare come 603 00:27:52,400 --> 00:27:54,070 duro come abbiamo fatto settimane fa. 604 00:27:54,070 --> 00:27:56,880 Ma è anche un po 'una maledizione che non importa dove si utilizza una variabile in 605 00:27:56,880 --> 00:28:00,020 PHP, almeno in un programma come questo, è accessibile a livello globale per 606 00:28:00,020 --> 00:28:01,170 meglio o in peggio. 607 00:28:01,170 --> 00:28:06,130 Quindi bisogna tenere a mente ora che le variabili non possono essere undefined. 608 00:28:06,130 --> 00:28:07,640 Potreste averli definiti altrove. 609 00:28:07,640 --> 00:28:09,460 >> Ma cosa sto andando a fare in definitiva? 610 00:28:09,460 --> 00:28:13,160 Ho intenzione di memorizzare all'interno di quella globale variabile come valore del 611 00:28:13,160 --> 00:28:17,060 contatore a chiave il risultato di facendo contatore più 1. 612 00:28:17,060 --> 00:28:18,910 Quindi questo è solo l'aritmetica che fa il 613 00:28:18,910 --> 00:28:20,590 Incremento di quel contatore. 614 00:28:20,590 --> 00:28:24,850 E il fatto che sto memorizzazione che Valore tornare qui significa per 615 00:28:24,850 --> 00:28:29,970 aggiornare il database essenzialmente a ricordate che 123456789 utente è stato 616 00:28:29,970 --> 00:28:31,010 qui due volte. 617 00:28:31,010 --> 00:28:33,780 E quando lo faccio di nuovo la prossima volta che ricaricare la pagina, è andare a controllare 618 00:28:33,780 --> 00:28:36,710 il mio timbro di mano e dire, oh, 123456789 utente ora 619 00:28:36,710 --> 00:28:38,410 stati qui tre volte. 620 00:28:38,410 --> 00:28:43,390 >> E così quello che PHP e linguaggi simili stanno facendo per noi è che stanno capire 621 00:28:43,390 --> 00:28:47,720 come e dove e per quanto tempo memorizzare i valori in questo speciale 622 00:28:47,720 --> 00:28:48,830 superglobale. 623 00:28:48,830 --> 00:28:52,750 E questo superglobale la prossima volta che visitare la pagina è una specie di magia 624 00:28:52,750 --> 00:28:57,440 pre-popolato, pieno di valori che c'erano l'ultima volta che hai visitato, 625 00:28:57,440 --> 00:29:02,310 se era un secondo fa, una settimana fa, o nel 2013 e ora stiamo parlando 626 00:29:02,310 --> 00:29:03,790 circa 2015. 627 00:29:03,790 --> 00:29:07,600 PHP e il prendersi cura server web di tutto questo per voi. 628 00:29:07,600 --> 00:29:08,850 >> AUDIENCE: [incomprensibile]. 629 00:29:08,850 --> 00:29:11,900 630 00:29:11,900 --> 00:29:15,760 >> DAVID MALAN: Le variabili in PHP sono in sostanza, sempre a livello mondiale a meno che non 631 00:29:15,760 --> 00:29:18,400 dichiararle all'interno di una funzione, e poi sono locali rispetto a 632 00:29:18,400 --> 00:29:19,420 solo la funzione. 633 00:29:19,420 --> 00:29:22,300 Ma perché io non ho scritto alcun funzioni, sono ora effettivamente 634 00:29:22,300 --> 00:29:25,090 globale in tutto il mio file qui. 635 00:29:25,090 --> 00:29:26,040 >> AUDIENCE: C'è un modo per renderli locale? 636 00:29:26,040 --> 00:29:28,470 >> DAVID MALAN: C'è qualche modo per farli locale? 637 00:29:28,470 --> 00:29:30,680 Solo avvolgendoli in funzioni. 638 00:29:30,680 --> 00:29:32,790 Che nella sua ultima versione di PHP, si può fare questo con 639 00:29:32,790 --> 00:29:34,130 una funzione anonima. 640 00:29:34,130 --> 00:29:35,930 Ma più che nella contesto di JavaScript. 641 00:29:35,930 --> 00:29:37,260 Ma la risposta breve è no. 642 00:29:37,260 --> 00:29:40,888 Una risposta è più sì. 643 00:29:40,888 --> 00:29:42,380 Nizza. 644 00:29:42,380 --> 00:29:43,380 Buona domanda quiz. 645 00:29:43,380 --> 00:29:43,930 Bene. 646 00:29:43,930 --> 00:29:47,760 >> Così, infine, la pagina stessa è in realtà piuttosto semplice. 647 00:29:47,760 --> 00:29:51,470 Si noti che una volta che esco modalità PHP, richiamo che tutto questo roba giù 648 00:29:51,470 --> 00:29:53,700 di seguito è solo andando a farsi sputare Crudo al browser. 649 00:29:53,700 --> 00:29:57,050 Il che va bene, perché io voglio inviare all'utente un codice HTML, ma voglio 650 00:29:57,050 --> 00:29:59,140 per aggiornare dinamicamente che l'HTML. 651 00:29:59,140 --> 00:30:03,930 E un modo per farlo è quello di ordinare di diminuire molto rapidamente indietro in PHP 652 00:30:03,930 --> 00:30:07,730 modalità, l'uso staffa aperto il punto interrogativo segno di uguale, e poi l'uscita il valore 653 00:30:07,730 --> 00:30:08,650 di contro. 654 00:30:08,650 --> 00:30:12,360 >> Oppure, se questo sembra un po 'criptico, questo segno di uguale è in realtà solo alcuni 655 00:30:12,360 --> 00:30:16,190 zucchero sintattico per questo printf ($ contatore). 656 00:30:16,190 --> 00:30:19,160 Ma francamente, questo è solo un po 'brutto e un po 'fastidioso per digitare. 657 00:30:19,160 --> 00:30:23,660 Così PHP offre molto bene questa caratteristica dove si può solo dire più 658 00:30:23,660 --> 00:30:25,450 succintamente nello stesso modo. 659 00:30:25,450 --> 00:30:26,940 >> Allora, cosa sta succedendo sotto il cofano? 660 00:30:26,940 --> 00:30:31,210 Diamo un'occhiata rapida alla rete scheda qui per counter.php. 661 00:30:31,210 --> 00:30:35,090 E lasciatemi andare avanti e prima cerchiamo di chiarire i cookie. 662 00:30:35,090 --> 00:30:38,670 Facciamo Cancella dati di navigazione da l'inizio del tempo. 663 00:30:38,670 --> 00:30:39,680 Ora torniamo qui. 664 00:30:39,680 --> 00:30:41,340 Ora cerchiamo di ricaricare la pagina. 665 00:30:41,340 --> 00:30:42,170 E sono di nuovo a zero. 666 00:30:42,170 --> 00:30:44,810 Perché il mio timbro di mano è stato lavato, Io ora ottenere un nuovo cookie. 667 00:30:44,810 --> 00:30:48,780 >> Infatti, se guardo la scheda di rete e guardare intestazioni di risposta, l'avviso 668 00:30:48,780 --> 00:30:51,960 che l'apparecchio mi manda un cookie il cui nome è un po ' 669 00:30:51,960 --> 00:30:55,820 arbitrariamente, ma tipo di ragionevolmente, PHPSESSID. 670 00:30:55,820 --> 00:30:58,440 E mi sta mandando davvero grande numero casuale. 671 00:30:58,440 --> 00:30:59,440 Non è un bel numero. 672 00:30:59,440 --> 00:31:00,390 Non è esadecimale abbastanza. 673 00:31:00,390 --> 00:31:03,600 E 'una sorta di stringa alfanumerica, ma presumibilmente è casuale. 674 00:31:03,600 --> 00:31:06,830 E questo è il timbro mano in modo da Parlo che mi riferisco a. 675 00:31:06,830 --> 00:31:11,960 >> Nel frattempo, se clicco reload e poi guardare a questa seconda linea per il mio secondo 676 00:31:11,960 --> 00:31:17,600 richiesta, avviso, ora che la mia richiesta intestazioni includono PHPSESSID uguale a questo, 677 00:31:17,600 --> 00:31:19,390 Non set-biscotto, ma solo biscotto. 678 00:31:19,390 --> 00:31:22,950 E questa è la presentazione del mio browser del mio timbro mano. 679 00:31:22,950 --> 00:31:28,820 >> Quindi, ora come un teaser, e parleremo più su questo in una settimana o giù di lì, ma 680 00:31:28,820 --> 00:31:31,590 in che modo questo si fa vulnerabile, il tuo account Facebook 681 00:31:31,590 --> 00:31:34,137 vulnerabile, e di altri come conti vulnerabile? 682 00:31:34,137 --> 00:31:35,510 >> AUDIENCE: Se qualcuno ha il cookie. 683 00:31:35,510 --> 00:31:36,750 >> DAVID MALAN: Sì, se qualcuno ha il cookie. 684 00:31:36,750 --> 00:31:39,920 Voglio dire veramente, proprio come alcuni di voi potrebbe aver provato a come un club o di un 685 00:31:39,920 --> 00:31:44,030 parco divertimenti, se si cerca qualcosa come questo per copiare il timbro, anche se 686 00:31:44,030 --> 00:31:47,560 indietro sulla mano di un'altra persona, e poi lui o lei presenta come 687 00:31:47,560 --> 00:31:53,250 loro, se effettivamente ha un aspetto identico, 123456789, allora il web 688 00:31:53,250 --> 00:31:57,980 server è apparentemente solo andare a fiducia che l'utente è si. 689 00:31:57,980 --> 00:32:01,450 >> E questo è davvero un fondamentale minaccia ogni volta che si utilizza cookie 690 00:32:01,450 --> 00:32:05,420 perché se qualcuno falsifica così da parla il cookie, figure di cosa si 691 00:32:05,420 --> 00:32:08,660 è, sia veramente copiandolo cercando al computer 692 00:32:08,660 --> 00:32:09,890 ed essendo simili, OK. 693 00:32:09,890 --> 00:32:14,520 Biscotto di David è JJ3JIK e così via, e poi sono abbastanza intelligente da sapere 694 00:32:14,520 --> 00:32:18,080 come una sorta di inviare manualmente che cookie di un browser o da un 695 00:32:18,080 --> 00:32:22,350 programma scrivono, che potevano totalmente accedere a un sito web come te. 696 00:32:22,350 --> 00:32:28,560 Non è così difficile far finta di essere qualcun altro a meno che non rivisitare p-set 697 00:32:28,560 --> 00:32:30,790 due, che ha introdotto quello che? 698 00:32:30,790 --> 00:32:32,065 >> AUDIENCE: Crittografia. 699 00:32:32,065 --> 00:32:33,860 >> DAVID MALAN: Un po ' bit di crittografia. 700 00:32:33,860 --> 00:32:36,550 Semplice crittografia, almeno nella edizione standard, ma crypto 701 00:32:36,550 --> 00:32:36,870 comunque. 702 00:32:36,870 --> 00:32:37,410 meno. 703 00:32:37,410 --> 00:32:41,440 Così si scopre se si crittografa tutti queste intestazioni con qualcosa che si 704 00:32:41,440 --> 00:32:48,770 potrebbe ora conoscere più familiarmente come SSL, secure socket layer, o https:// URL, 705 00:32:48,770 --> 00:32:51,890 allora tutte queste cose che abbiamo guardando sono in realtà crittografata, 706 00:32:51,890 --> 00:32:54,800 il che significa che è come te non può leggere il timbro mano. 707 00:32:54,800 --> 00:32:59,350 Solo facebook.com può, o google.com, o in questo caso, l'apparecchio può 708 00:32:59,350 --> 00:33:00,550 leggere quel timbro di mano. 709 00:33:00,550 --> 00:33:04,020 >> Tragicamente, però, e di nuovo, questo è troppo appropriata con la roba NSA 710 00:33:04,020 --> 00:33:06,410 negli ultimi tempi, anche SSL è fragile. 711 00:33:06,410 --> 00:33:09,850 E in realtà non è così difficile per rompere anche quello di crittografia. 712 00:33:09,850 --> 00:33:12,040 Non tanto per rompere la cifratura, ma ingannando il 713 00:33:12,040 --> 00:33:15,720 il browser in decrittografia i dati prematuramente. 714 00:33:15,720 --> 00:33:17,880 Ma ancora una volta, ci prendono in giro voi con che tra non molto. 715 00:33:17,880 --> 00:33:21,242 Per ora, basta avere paura. 716 00:33:21,242 --> 00:33:23,070 E 'tragicamente sorta di vero. 717 00:33:23,070 --> 00:33:23,760 >> Bene. 718 00:33:23,760 --> 00:33:27,910 Allora, da dove viene questo ora ci lascia? 719 00:33:27,910 --> 00:33:29,010 Bene, facciamolo. 720 00:33:29,010 --> 00:33:31,790 Andiamo avanti e dare un rapido occhiolino prima di prendere una pausa. 721 00:33:31,790 --> 00:33:33,790 E penso che ci soffermiamo un po 'di più oggi, ma stiamo andando a tuffarsi 722 00:33:33,790 --> 00:33:37,850 qualcosa di nuovo e sexy, che sarà stuzzicare il vostro appetito per ancora di più. 723 00:33:37,850 --> 00:33:38,950 Ecco, questo è il teaser. 724 00:33:38,950 --> 00:33:41,520 >> Così SQL, abbiamo iniziato a parlare mai così brevemente l'ultima volta. 725 00:33:41,520 --> 00:33:44,670 Si può davvero mettere le mani sporche con alcuni di essi in p-set sette. 726 00:33:44,670 --> 00:33:46,480 E in termini profani, che cosa SQL - 727 00:33:46,480 --> 00:33:47,110 S-Q-L - 728 00:33:47,110 --> 00:33:49,850 fare per voi? 729 00:33:49,850 --> 00:33:50,310 Che cos'è? 730 00:33:50,310 --> 00:33:51,546 Già. 731 00:33:51,546 --> 00:33:53,240 >> AUDIENCE: Diamo i tuoi dati di accesso. 732 00:33:53,240 --> 00:33:53,360 >> DAVID MALAN: Già. 733 00:33:53,360 --> 00:33:55,120 E ti permette di dati di accesso in un database. 734 00:33:55,120 --> 00:33:56,710 Structured Query Language. 735 00:33:56,710 --> 00:33:59,890 E questo è essenzialmente un linguaggio di programmazione. 736 00:33:59,890 --> 00:34:03,400 Ci sono caratteristiche di esso che non useremo anche in classe. 737 00:34:03,400 --> 00:34:04,710 Ma si può efficacemente definire le funzioni. 738 00:34:04,710 --> 00:34:06,870 Si chiamano stored procedure in SQL. 739 00:34:06,870 --> 00:34:09,860 Ma noi terremo abbastanza semplice e basta usare per alcune operazioni di base 740 00:34:09,860 --> 00:34:14,320 come la selezione dei dati, inserimento dati, aggiornamento dei dati, e l'eliminazione di dati. 741 00:34:14,320 --> 00:34:17,400 >> E si può davvero pensare di un database, come un database SQL, come appena 742 00:34:17,400 --> 00:34:18,800 essendo Microsoft Excel. 743 00:34:18,800 --> 00:34:21,989 Poiché SQL si riferisce ad una relazionale database, in cui 744 00:34:21,989 --> 00:34:23,480 relazione significa solo tabelle. 745 00:34:23,480 --> 00:34:24,739 Righe e colonne. 746 00:34:24,739 --> 00:34:27,929 Quindi tutto si può mettere in un foglio di calcolo come questo o Google Docs, 747 00:34:27,929 --> 00:34:32,460 si potrebbe mettere in un database SQL dichiarando un tavolo. 748 00:34:32,460 --> 00:34:34,800 >> Ora, come si fa effettivamente accedere queste informazioni? 749 00:34:34,800 --> 00:34:38,239 Beh, con i comandi o domande come questa. 750 00:34:38,239 --> 00:34:40,199 SELECT, INSERT, UPDATE e DELETE. 751 00:34:40,199 --> 00:34:44,489 E per la maggior parte, questi sono l' quattro solo ingredienti avrete bisogno di 752 00:34:44,489 --> 00:34:47,370 fare qualcosa di molto potente in problema di set sette. 753 00:34:47,370 --> 00:34:49,940 >> Ora torna in giornata, si sarebbe in realtà interagire con un database in un 754 00:34:49,940 --> 00:34:52,730 finestra di terminale in bianco e nero a un prompt lampeggiante come questo. 755 00:34:52,730 --> 00:34:56,370 E il database che stiamo in esecuzione sulla apparecchio è chiamato MySQL, che è 756 00:34:56,370 --> 00:34:58,560 motore libero e open database di origine. 757 00:34:58,560 --> 00:35:02,240 Se Google e leggere la Wikipedia articolo, saprete che il nome è 758 00:35:02,240 --> 00:35:05,060 un bit di transizione per alcuni versioni di Linux. 759 00:35:05,060 --> 00:35:10,460 Database di Maria è in realtà un forchetta per così dire di MySQL. 760 00:35:10,460 --> 00:35:12,740 >> Lunga storia breve, Oracle ha acquistato MySQL. 761 00:35:12,740 --> 00:35:13,870 Oracle è una grande azienda. 762 00:35:13,870 --> 00:35:17,010 Persone sono state preoccupato che sarebbe più rimanere piuttosto come open source, 763 00:35:17,010 --> 00:35:20,930 quindi questa è solo una copia di MySQL che è ancora libero, ancora open source, e 764 00:35:20,930 --> 00:35:23,550 installato in Fedora Linux di default. 765 00:35:23,550 --> 00:35:26,130 >> Ma questa è una specie di dolore in collo per fare la conoscenza con un 766 00:35:26,130 --> 00:35:27,310 database in questo modo. 767 00:35:27,310 --> 00:35:30,560 Quindi includiamo nel dell'apparecchio CS50 uno strumento open source gratuito chiamato 768 00:35:30,560 --> 00:35:31,700 phpMyAdmin. 769 00:35:31,700 --> 00:35:33,940 Solo una coincidenza che è scritto in PHP. 770 00:35:33,940 --> 00:35:36,450 Non c'è fondamentali necessità di PHP qui. 771 00:35:36,450 --> 00:35:40,090 Ma questo è solo uno strumento web-based che abbiamo scaricato gratuitamente, installato in 772 00:35:40,090 --> 00:35:43,850 l'apparecchio, che ci permette di avere un interfaccia grafica utente con cui 773 00:35:43,850 --> 00:35:48,610 per esplorare il database di sette p-set con cui creare nuovi database, 774 00:35:48,610 --> 00:35:51,980 dire per il proprio progetto finale se vuoi come, e, infine, creare 775 00:35:51,980 --> 00:35:55,900 siti web dinamici come CS50 Finanza che consentono di interrogare i dati e 776 00:35:55,900 --> 00:35:58,140 aggiornare i dati in modo dinamico. 777 00:35:58,140 --> 00:36:01,420 >> Tu non stai andando ad avere per utilizzare solo un semplice file di testo o CSV. 778 00:36:01,420 --> 00:36:05,950 Si può effettivamente utilizzare un database intelligente programma in modo che è possibile eseguire più 779 00:36:05,950 --> 00:36:10,240 query sofisticati che solo la lettura attraverso tutto lineare. 780 00:36:10,240 --> 00:36:14,150 >> Così, per esempio, questo è ciò che diamo fuori dalla scatola per p-set sette. 781 00:36:14,150 --> 00:36:18,280 Questa è una tabella con almeno apparentemente tre colonne, una delle quali è 782 00:36:18,280 --> 00:36:21,450 username, uno dei quali è hash, e l'altro dei quali è ID. 783 00:36:21,450 --> 00:36:26,200 >> Ma la cosa interessante, e solo per prendere in giro un pensiero qui, il nome utente 784 00:36:26,200 --> 00:36:29,270 è presumibilmente già unico, giusto? 785 00:36:29,270 --> 00:36:31,190 Voglio dire, la maggior parte qualsiasi sito web, se si dispone di un nome utente, vi 786 00:36:31,190 --> 00:36:32,370 non può essere di due Cesari. 787 00:36:32,370 --> 00:36:33,440 Non ci possono essere due malans. 788 00:36:33,440 --> 00:36:34,950 Non ci possono essere due jharvards. 789 00:36:34,950 --> 00:36:35,600 Il suo unico. 790 00:36:35,600 --> 00:36:38,610 In caso contrario, non sanno che jharvard che effettivamente è. 791 00:36:38,610 --> 00:36:42,710 Quindi, quale potrebbe essere la motivazione per anche avente una terza colonna di sinistra 792 00:36:42,710 --> 00:36:46,970 ci chiama ID, che sembra un numero che è parimenti unico? 793 00:36:46,970 --> 00:36:51,300 Ci si sente un po 'ridondante a me a prima vista. 794 00:36:51,300 --> 00:36:54,910 Perché potrebbe essere interessante avere non solo nomi utente unici, 795 00:36:54,910 --> 00:36:56,837 ma anche i numeri unici? 796 00:36:56,837 --> 00:36:59,460 >> AUDIENCE: Avrebbero potuto la stessa password. 797 00:36:59,460 --> 00:37:01,720 >> DAVID MALAN: La gente potrebbe avere la stessa password, certo. 798 00:37:01,720 --> 00:37:03,900 Che potrebbe assolutamente succedere. 799 00:37:03,900 --> 00:37:08,270 Ma se hanno questo nome utente unica, mi sosterrebbero che che in realtà non 800 00:37:08,270 --> 00:37:11,630 importa, perché se si digita nella loro username, ho solo bisogno di controllare la loro 801 00:37:11,630 --> 00:37:15,060 la password, il loro hash della stessa. 802 00:37:15,060 --> 00:37:15,970 Per quale altro motivo? 803 00:37:15,970 --> 00:37:17,950 >> AUDIENCE: Più veloce la ricerca. 804 00:37:17,950 --> 00:37:18,680 >> DAVID MALAN: più veloce la ricerca. 805 00:37:18,680 --> 00:37:19,548 Perché? 806 00:37:19,548 --> 00:37:21,460 >> PUBBLICO: ID è solo uno. 807 00:37:21,460 --> 00:37:24,040 >> DAVID MALAN: ID è solo un personaggio, o per essere più precisi, si tratta di un numero, 808 00:37:24,040 --> 00:37:26,910 quindi è probabilmente 32 bit o qualcosa di simile. 809 00:37:26,910 --> 00:37:30,270 Considerando che il nome, a quanto pare Jason Up di Hirschhorn c'è una sorta di 810 00:37:30,270 --> 00:37:33,900 assurdamente lunghi, e sta andando a mi vorrà molto più tempo per stringa 811 00:37:33,900 --> 00:37:40,910 confronta H-I-R-S-C-H-H-O-R-N, e forse un qualcosa / 0 o simile, al fine di 812 00:37:40,910 --> 00:37:45,100 per cercare Jason, piuttosto che semplicemente dicendo: dammi il numero due utenti. 813 00:37:45,100 --> 00:37:46,510 Questo è 32 bit. 814 00:37:46,510 --> 00:37:48,550 Si tratta di un unico INT che si deve confrontare. 815 00:37:48,550 --> 00:37:52,150 E in effetti, questo è esattamente il motivo per cui i database tendono ad assegnare gli ID univoci per 816 00:37:52,150 --> 00:37:53,710 righe in loro. 817 00:37:53,710 --> 00:37:56,280 >> Ora, ciò che altri tipi di dati ci sono oltre INT e apparentemente 818 00:37:56,280 --> 00:37:57,160 stringhe come questo? 819 00:37:57,160 --> 00:37:59,700 Ebbene, per essere più corretto, Database SQL, come 820 00:37:59,700 --> 00:38:02,060 MySQL, hanno campi CHAR. 821 00:38:02,060 --> 00:38:05,320 E salmerini un po 'fuorviante non è un singolo carattere. 822 00:38:05,320 --> 00:38:10,290 Un campo CHAR in un database MySQL è uno o più caratteri, ma è un 823 00:38:10,290 --> 00:38:11,780 numero fisso di caratteri. 824 00:38:11,780 --> 00:38:15,710 >> Così, per esempio, se vado verso phpMyAdmin come si può avere già, o 825 00:38:15,710 --> 00:38:21,340 presto sarà un problema di set di sette, e vado a mio database, e solo per divertimento, 826 00:38:21,340 --> 00:38:25,700 creiamo una nuova tabella denominata prova con solo due colonne. 827 00:38:25,700 --> 00:38:27,160 Io quindi fare clic su Go. 828 00:38:27,160 --> 00:38:30,070 E questo diventerà abbastanza familiarità, soprattutto come si armeggiare 829 00:38:30,070 --> 00:38:31,130 in giro da soli. 830 00:38:31,130 --> 00:38:34,140 Qui potrei digitare ID per creare una nuova tabella di tipo INT. 831 00:38:34,140 --> 00:38:37,770 Ma qui potrei digitare nome utente ricreare quel tavolo precedenza. 832 00:38:37,770 --> 00:38:40,700 E notare ho un sacco di tipi tra cui scegliere. 833 00:38:40,700 --> 00:38:43,610 >> E anche questo è il motivo per cui phpMyAdmin è una specie di piacevole. 834 00:38:43,610 --> 00:38:46,770 È una specie di auto-apprendimento in che può solo tipo di punto e scegliere, e 835 00:38:46,770 --> 00:38:50,730 guardare i menu a discesa, e dedurre da che ciò che i poteri SQL ti dà. 836 00:38:50,730 --> 00:38:54,090 >> E in effetti, se scelgo CAR, ho poi necessario specificare la lunghezza, o come 837 00:38:54,090 --> 00:38:55,940 tanti valori, quanti caratteri. 838 00:38:55,940 --> 00:39:00,090 Valori in modo molto comuni sono cose come 255, ma questo è un po 'lungo. 839 00:39:00,090 --> 00:39:02,250 Comunemente è otto per un nome utente. 840 00:39:02,250 --> 00:39:03,590 Ma questo è un po 'piccola in questi giorni. 841 00:39:03,590 --> 00:39:05,430 Quindi questa è una decisione di progettazione. 842 00:39:05,430 --> 00:39:08,630 E 'di 8 caratteri max, 32, 255, 1000? 843 00:39:08,630 --> 00:39:09,830 E 'davvero a te. 844 00:39:09,830 --> 00:39:12,350 Ma un campo CHAR è un numero fisso. 845 00:39:12,350 --> 00:39:16,420 In modo da scegliere troppo pochi e sei specie di avvitato se volete un nome utente più lungo. 846 00:39:16,420 --> 00:39:19,132 Scegli troppi e ciò che è il rovescio della medaglia? 847 00:39:19,132 --> 00:39:20,820 >> AUDIENCE: [incomprensibile]. 848 00:39:20,820 --> 00:39:21,620 >> DAVID MALAN: E 'uno spreco. 849 00:39:21,620 --> 00:39:24,835 Proprio come in C, se si dispone di un grande pezzo di memoria di cui avete bisogno, sei 850 00:39:24,835 --> 00:39:27,190 basta perdere tempo e spreco di spazio. 851 00:39:27,190 --> 00:39:31,430 Così come alternativa, esiste VARCHAR, che risolve questo problema 852 00:39:31,430 --> 00:39:36,390 trattare lunghezza non come una lunghezza fissa, bensì come una lunghezza massima e utilizzando un 853 00:39:36,390 --> 00:39:40,990 numero variabile di caratteri, che poi tende ad utilizzare solo come molti CHARs come si 854 00:39:40,990 --> 00:39:42,710 effettivamente bisogno. 855 00:39:42,710 --> 00:39:43,670 Che suona perfetto. 856 00:39:43,670 --> 00:39:45,640 >> Perché non ci liberiamo del Tipo allora i dati CHAR? 857 00:39:45,640 --> 00:39:48,500 Quale potrebbe essere il rovescio della medaglia utilizzando VARCHAR, che suona 858 00:39:48,500 --> 00:39:51,644 come se fosse una bella vittoria? 859 00:39:51,644 --> 00:39:52,596 Sì? 860 00:39:52,596 --> 00:39:53,846 >> AUDIENCE: [incomprensibile]. 861 00:39:53,846 --> 00:39:57,360 862 00:39:57,360 --> 00:39:57,790 >> DAVID MALAN: OK, bene. 863 00:39:57,790 --> 00:40:01,101 Quindi, se tutti i dati è la stessa lunghezza, qual è la preoccupazione? 864 00:40:01,101 --> 00:40:05,250 >> AUDIENCE: Perché stai sprecando dati da parte di tutti dicendo. 865 00:40:05,250 --> 00:40:09,060 >> DAVID MALAN: Quindi, se tutti i dati sono la stessa lunghezza, però, mi sosterrebbe 866 00:40:09,060 --> 00:40:12,300 che specifica una lunghezza massima su VARCHAR non è diverso da 867 00:40:12,300 --> 00:40:16,070 specificando una lunghezza fissa su se CHAR si sa che il numero in anticipo. 868 00:40:16,070 --> 00:40:19,500 Ma c'è davvero, e io sorta di estrarre da quella risposta realtà 869 00:40:19,500 --> 00:40:22,610 che c'è ancora un max, che potrebbe essere fastidioso, soprattutto se si 870 00:40:22,610 --> 00:40:25,920 incontrare il nome di una persona che è insolitamente lungo che non hai fatto 871 00:40:25,920 --> 00:40:26,860 anticipare. 872 00:40:26,860 --> 00:40:31,420 Ed è anche un po 'meno efficiente per cercare in realtà su VARCHAR come 873 00:40:31,420 --> 00:40:35,620 al contrario di CHARs ricerca, in particolare per lunghi tavoli che hanno un sacco e 874 00:40:35,620 --> 00:40:36,510 grandi quantità di dati. 875 00:40:36,510 --> 00:40:40,060 Quindi anche qui, tematica è di nuovo scelta ovvia. 876 00:40:40,060 --> 00:40:42,870 >> Quindi, solo per dare un senso di altri tipi di dati che potrebbero essere di interesse 877 00:40:42,870 --> 00:40:45,400 sia per p-set sette o in il futuro, c'è INT. 878 00:40:45,400 --> 00:40:47,270 C'è BIGINT, che è come long long. 879 00:40:47,270 --> 00:40:48,880 Essa tende ad essere di 64 bit. 880 00:40:48,880 --> 00:40:51,640 C'è DECIMAL, che vedrete in il set problema, che è una molto 881 00:40:51,640 --> 00:40:55,300 risposta più pulito per i problemi che abbiamo incontrato con galleggiante e galleggianti 882 00:40:55,300 --> 00:40:55,980 punto imprecisione. 883 00:40:55,980 --> 00:40:57,390 E poi c'è DATETIME. 884 00:40:57,390 --> 00:41:01,530 C'è letteralmente un tipo di dati che ha a guardare come un anno, un mese, un giorno, 885 00:41:01,530 --> 00:41:03,730 e ora, minuto e secondo. 886 00:41:03,730 --> 00:41:07,470 >> Ma database SQL hanno anche cose che chiameremo indici. 887 00:41:07,470 --> 00:41:11,630 E un indice è qualcosa che si specificare al momento della creazione della tabella di 888 00:41:11,630 --> 00:41:15,720 effettuare ricerche e altre operazioni più efficiente. 889 00:41:15,720 --> 00:41:18,550 In particolare, c'è qualcosa che si chiama l'indice PRIMARY che si potrebbe 890 00:41:18,550 --> 00:41:19,440 dichiarare quanto segue. 891 00:41:19,440 --> 00:41:22,330 >> Abbiamo fatto questo per voi con l' Tavolo utenti vi diamo. 892 00:41:22,330 --> 00:41:26,160 Ma notare se fossi ricreare manualmente la tabella utenti qui dando 893 00:41:26,160 --> 00:41:27,110 un nome di utenti. 894 00:41:27,110 --> 00:41:28,125 Ho già specificato ID. 895 00:41:28,125 --> 00:41:29,330 Ho specificato INT. 896 00:41:29,330 --> 00:41:32,000 Ho specificato il nome utente con massimo 32 caratteri. 897 00:41:32,000 --> 00:41:36,140 Ma se continuare a scorrere in questo abbastanza ampia finestra, avviso c'è un 898 00:41:36,140 --> 00:41:38,260 mucchio di altre cose che posso specificare. 899 00:41:38,260 --> 00:41:40,950 >> Uno, posso specificare attributi come, sai cosa, questa 900 00:41:40,950 --> 00:41:42,190 INT dovrebbe essere UNSIGNED. 901 00:41:42,190 --> 00:41:45,510 Non voglio che i numeri negativi, quindi cerchiamo di renderlo UNSIGNED. 902 00:41:45,510 --> 00:41:48,660 Null non è pertinente perché Io voglio che ogni utente 903 00:41:48,660 --> 00:41:49,640 avere un numero univoco. 904 00:41:49,640 --> 00:41:50,830 Io non voglio che sia nullo. 905 00:41:50,830 --> 00:41:52,330 >> Ma questo è interessante. 906 00:41:52,330 --> 00:41:57,780 Posso specificare che ID è o il chiave primaria di questo database, o è 907 00:41:57,780 --> 00:42:00,620 unico, o è indicizzato, o il testo integrale. 908 00:42:00,620 --> 00:42:05,630 Così, per scopi di oggi, lunga storia Insomma, PRIMARY significa che questo deve 909 00:42:05,630 --> 00:42:10,570 essere sia concettualmente e tecnicamente il campo che usiamo per univocamente 910 00:42:10,570 --> 00:42:12,140 identificare gli utenti. 911 00:42:12,140 --> 00:42:16,140 >> Così, quando guardiamo gli utenti, questa è una sorta di una promessa di guardare in su per lo più da 912 00:42:16,140 --> 00:42:17,370 tale identificatore univoco. 913 00:42:17,370 --> 00:42:21,930 E il database in modo che se si disporre di un numero utente 3, non è possibile 914 00:42:21,930 --> 00:42:25,400 inserire fisicamente un altro utente con lo stesso numero 3. 915 00:42:25,400 --> 00:42:28,380 Il database sarà solo rifiuta per salvare le modifiche. 916 00:42:28,380 --> 00:42:32,310 Che è una buona cosa, perché si può proteggersi da te stesso. se stesso 917 00:42:32,310 --> 00:42:34,270 >> In alternativa, per il nome utente. 918 00:42:34,270 --> 00:42:37,670 Quindi la seconda fila, richiamo, è il campo nome utente. 919 00:42:37,670 --> 00:42:41,860 Quindi la seconda fila: ecco il nome utente, come abbiamo fatto in fondo lasciato lì. 920 00:42:41,860 --> 00:42:43,940 >> Quindi, che cosa potrei voler specificare? 921 00:42:43,940 --> 00:42:47,840 Non mi è permesso, secondo SQL, per specificare due chiavi primarie. 922 00:42:47,840 --> 00:42:50,750 è possibile specificare una chiave comune in cui si guardare entrambi i campi, ma non possono 923 00:42:50,750 --> 00:42:52,260 singolarmente chiavi primarie. 924 00:42:52,260 --> 00:42:54,750 Ecco, questo è fuori discussione. 925 00:42:54,750 --> 00:42:56,040 Così che potrei desiderare di scegliere? 926 00:42:56,040 --> 00:42:59,710 >> Beh, UNIQUE è simile nello spirito a una chiave primaria dove si specifica questo 927 00:42:59,710 --> 00:43:03,570 campo deve essere unico, ma è non andare a essere quello 928 00:43:03,570 --> 00:43:04,410 Io uso per tutto il tempo. 929 00:43:04,410 --> 00:43:08,450 E noi non stiamo andando a utilizzare questo tutti il tempo per quale motivo ancora? 930 00:43:08,450 --> 00:43:10,490 E 'più lento potenzialmente se è un lungo nome utente. 931 00:43:10,490 --> 00:43:11,740 E 'solo una perdita di tempo. 932 00:43:11,740 --> 00:43:16,140 >> INDEX, intanto, precisa che si tratta di non intenzione di essere unico, ma mi piacerebbe 933 00:43:16,140 --> 00:43:19,470 di lavorare la tua magia sotto la Cappa per renderlo più veloce per me 934 00:43:19,470 --> 00:43:21,420 ricerca su questo campo. 935 00:43:21,420 --> 00:43:23,320 Quindi, questo probabilmente non è pertinente. 936 00:43:23,320 --> 00:43:26,500 Per il nome utente, direi che UNIQUE è una buona risposta. 937 00:43:26,500 --> 00:43:31,200 Ma supponiamo che abbiamo fatto gli utenti più interessante non solo nomi utente, 938 00:43:31,200 --> 00:43:32,430 hash e numeri di identificazione. 939 00:43:32,430 --> 00:43:33,860 Che cosa succede se abbiamo dato i nomi di persone? 940 00:43:33,860 --> 00:43:37,700 Che cosa succede se abbiamo dato loro indirizzi e altri dati su di loro? 941 00:43:37,700 --> 00:43:43,360 >> Beh, se si specifica che una colonna in un database è indicizzato, il che significa che 942 00:43:43,360 --> 00:43:47,730 MySQL o Oracle, o qualsiasi altra cosa di database si sta utilizzando, dovrebbe funzionare la sua magia 943 00:43:47,730 --> 00:43:51,300 e utilizzare un qualche tipo di dati di fantasia struttura come un albero, o un trie, o un 944 00:43:51,300 --> 00:43:55,940 hash table, o qualcosa di garantire che quando si cerca di dati utilizzando 945 00:43:55,940 --> 00:43:58,150 selezionate da quel particolare settore - 946 00:43:58,150 --> 00:44:01,310 come me dimostrare a tutti che vive a Oxford Street. 947 00:44:01,310 --> 00:44:02,540 Una query del genere. 948 00:44:02,540 --> 00:44:06,250 Se è stato specificato in anticipo che volete un indice su quel campo, la 949 00:44:06,250 --> 00:44:09,050 le ricerche saranno molto, molto più veloce. 950 00:44:09,050 --> 00:44:12,090 >> Se non si specifica un indice, il migliore si può fare è una ricerca lineare, se 951 00:44:12,090 --> 00:44:13,030 non è risolto. 952 00:44:13,030 --> 00:44:16,220 Ma se viene specificato INDEX, la smart gente che ha fatto il database - 953 00:44:16,220 --> 00:44:19,340 persone come voi che ora conoscono alberi e paesi e tabelle hash - 954 00:44:19,340 --> 00:44:23,220 costruirà automaticamente tali dati struttura in RAM per assicurarsi che 955 00:44:23,220 --> 00:44:26,050 queste ricerche sono molto più veloci. 956 00:44:26,050 --> 00:44:29,660 >> FULLTEXT nel frattempo è simile nello spirito, ma ti permette di fare jolly 957 00:44:29,660 --> 00:44:35,480 ricerche, come me, mostrano a tutti che vive a strade che iniziano con la 958 00:44:35,480 --> 00:44:36,960 lettera O per qualunque motivo. 959 00:44:36,960 --> 00:44:38,850 È possibile effettuare ricerche con caratteri jolly così. 960 00:44:38,850 --> 00:44:45,880 Oppure, le cose più interessanti, come mostra me tutti coloro che hanno la parola - 961 00:44:45,880 --> 00:44:49,400 Mi mostrare a tutti il ​​cui nome inizia con una particolare lettera. 962 00:44:49,400 --> 00:44:51,880 È possibile cercare per parole chiave in questo modo. 963 00:44:51,880 --> 00:44:52,630 Bene. 964 00:44:52,630 --> 00:44:55,760 >> Così, opportunità di design Ci potenzialmente. 965 00:44:55,760 --> 00:44:57,740 Ci sono altri che io onda mie mani. 966 00:44:57,740 --> 00:45:00,530 Si scopre che si può avere diversi motori di archiviazione. 967 00:45:00,530 --> 00:45:04,390 E questo è più arcano di cui abbiamo bisogno certamente per un problema impostato sette. 968 00:45:04,390 --> 00:45:06,920 Per impostazione predefinita, voi ragazzi state usando qualcosa chiamato InnoDB. 969 00:45:06,920 --> 00:45:10,910 Vedrete menzione di questo da qualche parte in L'interfaccia di phpMyAdmin più probabile. 970 00:45:10,910 --> 00:45:14,130 Ma sapere che ci sono altri design decisioni che sono di potenziale 971 00:45:14,130 --> 00:45:18,030 interesse vieni progetti finali se fai qualcosa di web-based. 972 00:45:18,030 --> 00:45:19,330 >> Ma facciamolo. 973 00:45:19,330 --> 00:45:23,130 Andiamo avanti e mettere questo sul schermo come un teaser per una storia 974 00:45:23,130 --> 00:45:26,330 coinvolgendo voi, un compagno di stanza, e un bicchiere di latte. 975 00:45:26,330 --> 00:45:28,240 Facciamo un due minuti o così rompere qui. 976 00:45:28,240 --> 00:45:31,060 E se si può attaccare in giro, veniamo indietro, guardare un po 'più a SQL, e 977 00:45:31,060 --> 00:45:35,160 poi un po 'di JavaScript con p-set di otto in mente. 978 00:45:35,160 --> 00:45:36,120 >> Bene. 979 00:45:36,120 --> 00:45:40,420 Quindi, cerchiamo di farti pensare a una caso d'angolo che può facilmente verificarsi 980 00:45:40,420 --> 00:45:44,240 nel contesto di utilizzo di un database, o francamente, anche con le cose del mondo reale 981 00:45:44,240 --> 00:45:46,280 come bancomat per ottenere denaro. 982 00:45:46,280 --> 00:45:47,640 Quindi, ecco un frigorifero. 983 00:45:47,640 --> 00:45:50,040 Supponiamo hai uno anche in dormitorio o la vostra casa. 984 00:45:50,040 --> 00:45:54,990 E hai un compagno di stanza, ed entrambi vi piace il latte, per esempio. 985 00:45:54,990 --> 00:45:57,210 >> Così si arriva a casa dalla classe un giorno. 986 00:45:57,210 --> 00:45:58,490 Lui o lei non è ancora indietro. 987 00:45:58,490 --> 00:45:59,180 Si apre il frigorifero. 988 00:45:59,180 --> 00:46:00,870 Si vuole veramente un grande bicchiere di latte. 989 00:46:00,870 --> 00:46:01,820 Non c'è latte. 990 00:46:01,820 --> 00:46:02,920 Allora cosa fai? 991 00:46:02,920 --> 00:46:03,840 Si chiude il frigorifero. 992 00:46:03,840 --> 00:46:04,670 Si afferra le chiavi. 993 00:46:04,670 --> 00:46:05,930 Si va verso la piazza. 994 00:46:05,930 --> 00:46:09,240 E si ottiene in fila al CVS a quelli cose di self-checkout, che sempre 995 00:46:09,240 --> 00:46:11,180 richiedere più tempo effettivamente avendo cassieri. 996 00:46:11,180 --> 00:46:11,820 Comunque. 997 00:46:11,820 --> 00:46:15,490 >> Allora, nel frattempo, punto punto punto, il vostro compagno di stanza torna a casa e lui o lei 998 00:46:15,490 --> 00:46:17,440 ha parimenti un desiderio per il latte. 999 00:46:17,440 --> 00:46:20,380 Così lui o lei apre il frigo, guarda dentro, e oh, accidenti. 1000 00:46:20,380 --> 00:46:21,160 Nessuna latte. 1001 00:46:21,160 --> 00:46:24,750 Così lui o lei dirige, capita di andare all'altra CVS, che era solo un 1002 00:46:24,750 --> 00:46:27,900 bloccare la via per qualche ragione, e lui o lei si mette in fila per comprare il latte. 1003 00:46:27,900 --> 00:46:30,480 >> Nel frattempo, torni a casa, lui o lei torna a casa, e cosa fare 1004 00:46:30,480 --> 00:46:31,980 che in ultima analisi ha? 1005 00:46:31,980 --> 00:46:33,080 Il latte due volte tanto. 1006 00:46:33,080 --> 00:46:34,620 Ma non ti piace davvero latte tanto. 1007 00:46:34,620 --> 00:46:37,300 Così ora avete così tanto latte che ormai uno di loro è solo per andare acida 1008 00:46:37,300 --> 00:46:37,820 alla fine. 1009 00:46:37,820 --> 00:46:39,370 Quindi questo è un problema davvero male. 1010 00:46:39,370 --> 00:46:39,900 Giusto? 1011 00:46:39,900 --> 00:46:41,990 >> Allora cosa è successo? 1012 00:46:41,990 --> 00:46:44,810 Quindi, fondamentalmente, questo è una specie di un esempio ridicolo. 1013 00:46:44,810 --> 00:46:48,580 Ma sotto il cofano, quello che abbiamo avuto accadere ecco entrambi controllati 1014 00:46:48,580 --> 00:46:52,390 lo stato di qualche pezzo di memoria, il frigorifero. 1015 00:46:52,390 --> 00:46:54,420 Entrambi si verificato lo stato di alcune variabili. 1016 00:46:54,420 --> 00:46:57,360 Entrambi disegnato una conclusione che poi agito su. 1017 00:46:57,360 --> 00:47:01,420 Ma, purtroppo, il tuo compagno di stanza era al negozio, lo stato di quel 1018 00:47:01,420 --> 00:47:05,670 variabile cambiato, lui o lei è tornato e ora vuole cambiare lo stato, ma 1019 00:47:05,670 --> 00:47:07,480 è già stato cambiato su di lui o di lei. 1020 00:47:07,480 --> 00:47:11,120 E, naturalmente, lui o lei non avrebbe andato al negozio se sapessero 1021 00:47:11,120 --> 00:47:13,010 che tu eri già in rotta. 1022 00:47:13,010 --> 00:47:16,430 >> Così, nel mondo reale, come hai potuto evitare questo problema, a patto di avere 1023 00:47:16,430 --> 00:47:18,940 un frigorifero, hai un compagno di stanza, e in realtà piace il latte? 1024 00:47:18,940 --> 00:47:19,760 >> AUDIENCE: Comunicare. 1025 00:47:19,760 --> 00:47:20,580 >> DAVID MALAN: Comunicare. 1026 00:47:20,580 --> 00:47:21,160 OK. 1027 00:47:21,160 --> 00:47:22,500 Ma come si potrebbe comunicare? 1028 00:47:22,500 --> 00:47:23,990 >> AUDIENCE: lasciare una nota. 1029 00:47:23,990 --> 00:47:25,480 >> DAVID MALAN: lasciare una nota, giusto? 1030 00:47:25,480 --> 00:47:28,025 Lasciare sempre una nota, per fan dello show. 1031 00:47:28,025 --> 00:47:31,580 Va bene, quindi lasciare sempre una nota, o mettere veramente come un lucchetto o qualcosa 1032 00:47:31,580 --> 00:47:35,440 sul frigorifero che mantiene il vostro compagno di stanza di ispezionare lo stato di 1033 00:47:35,440 --> 00:47:36,540 quella variabile. 1034 00:47:36,540 --> 00:47:40,800 >> Ora, perché questo potrebbe essere pertinente problema insieme sette, o di sportelli automatici. 1035 00:47:40,800 --> 00:47:46,780 Bene, immaginate un mondo in un bancomat dove si potrebbe essere in grado di andare fino a un bancomat 1036 00:47:46,780 --> 00:47:48,920 macchina qui, e un altro bancomat qui. 1037 00:47:48,920 --> 00:47:50,680 E questo accade abbastanza spesso. 1038 00:47:50,680 --> 00:47:54,150 E supponi di avere due carte bancomat, che è possibile ottenere. 1039 00:47:54,150 --> 00:47:57,420 E si accede a entrambe le macchine efficacemente contemporaneamente, si spera 1040 00:47:57,420 --> 00:47:58,660 mentre nessuno sta guardando. 1041 00:47:58,660 --> 00:48:01,260 E poi si digita il PIN approssimativamente simultaneamente. 1042 00:48:01,260 --> 00:48:06,280 E allora che fai una query equilibrio per vedere quanti soldi hai. 1043 00:48:06,280 --> 00:48:08,920 E diciamo che hai 100 $ lasciato nel tuo account. 1044 00:48:08,920 --> 00:48:13,310 Quindi, in sostanza allo stesso tempo, è dire uno, zero, zero, immettere. 1045 00:48:13,310 --> 00:48:16,000 E si spera torni un po 'di soldi. 1046 00:48:16,000 --> 00:48:18,440 >> Ma quanti soldi potreste tornare indietro? 1047 00:48:18,440 --> 00:48:21,710 Ora i computer alla fine della giornata, soprattutto se si sta parlando di 1048 00:48:21,710 --> 00:48:27,360 server, non necessariamente fanno cose secondo l'ordine che è previsto. 1049 00:48:27,360 --> 00:48:30,860 >> Così supporre che succede, a causa di qualunque problemi di velocità della rete non 1050 00:48:30,860 --> 00:48:34,530 sono, o problemi di CPU ci sono, o qualcosa di simile, si supponga che il 1051 00:48:34,530 --> 00:48:38,530 primo ATM controlla il vostro equilibrio e vede, oh, questa persona ha $ 100. 1052 00:48:38,530 --> 00:48:41,840 Ma poi si distrae perché forse un backup sta accadendo e quindi è 1053 00:48:41,840 --> 00:48:42,500 rallentamento. 1054 00:48:42,500 --> 00:48:45,080 O forse durante il controllo, la rete connessione ha un po 'più lento, perché 1055 00:48:45,080 --> 00:48:45,910 questo accade solo. 1056 00:48:45,910 --> 00:48:47,100 Sono dispositivi fisici. 1057 00:48:47,100 --> 00:48:49,330 Così nel frattempo, il secondo è ATM la stessa domanda. 1058 00:48:49,330 --> 00:48:53,030 Quanto guadagna David ha? $ 100 è la risposta. 1059 00:48:53,030 --> 00:48:58,930 Ma perché il primo ATM non è ancora inviato il messaggio sottrarre $ 100, sia 1060 00:48:58,930 --> 00:49:03,000 ATM hanno ispezionato caveau della banca, vedendo c'è $ 100 lì, e ora 1061 00:49:03,000 --> 00:49:07,160 entrambe le macchine potenzialmente sono andando a sputare una risposta. 1062 00:49:07,160 --> 00:49:12,240 >> Ora, questo è grande per voi in un certo senso se ciò che la banca non definitiva 1063 00:49:12,240 --> 00:49:17,200 è modificare la quantità di meno 100 da impostare la variabile pari al 1064 00:49:17,200 --> 00:49:21,570 conto corrente uguale a 0, in contrapposizione a fare meno 100. 1065 00:49:21,570 --> 00:49:24,410 Ora, nel caso peggiore per la banca - 1066 00:49:24,410 --> 00:49:27,470 o nella migliore per la banca, nel frattempo, ti danno $ 200, e 1067 00:49:27,470 --> 00:49:31,690 il vostro conto in banca ora mostra negativo $ 100, che in realtà non 1068 00:49:31,690 --> 00:49:32,950 ti beneficio a tutti. 1069 00:49:32,950 --> 00:49:36,500 Ma il punto è che questa gara condizione per ottenere due compagni di stanza 1070 00:49:36,500 --> 00:49:40,660 latte, o per due bancomat cercando di ottenere denaro contante e cambiare lo stato di un classificatore 1071 00:49:40,660 --> 00:49:44,510 Allo stesso tempo esiste alcuna volta che si dispone di un database. 1072 00:49:44,510 --> 00:49:48,290 >> Ora nel problema impostare sette, questo problema si pone, nel senso che se si acquista un 1073 00:49:48,290 --> 00:49:52,110 Condividi su Facebook magazzino, e poi per esempio si acquista una seconda quota di 1074 00:49:52,110 --> 00:49:55,160 Facebook magazzino, è necessario fare una decisione come programmatore. 1075 00:49:55,160 --> 00:49:58,710 Per decidere come aggiornare il banca dati, le vincite sono state andando 1076 00:49:58,710 --> 00:50:02,250 avere una riga per quello stock, e questo è un modo per attuarla. 1077 00:50:02,250 --> 00:50:06,640 E si sta andando ad avere una azione della FB, che è il loro simbolo ticker 1078 00:50:06,640 --> 00:50:10,120 per questo nome utente, o di questo utente ID, l'identificativo unico. 1079 00:50:10,120 --> 00:50:12,340 >> Ma la stessa storia può succedere qui. 1080 00:50:12,340 --> 00:50:15,800 Se un prescelto in SQL, come si vedrà nel problema di impostare sette quando si vede, 1081 00:50:15,800 --> 00:50:18,460 oh, David ha una sola di Facebook magazzino. 1082 00:50:18,460 --> 00:50:23,240 Permettetemi ora di cambiare questo di essere due parti, perché vuole comprare un 1083 00:50:23,240 --> 00:50:24,120 seconda quota. 1084 00:50:24,120 --> 00:50:27,860 Ma supponiamo che David in realtà aveva due finestre del browser aperte, o supporre che 1085 00:50:27,860 --> 00:50:32,150 si tratta di un conto cointestato con due coniugi, ed entrambi stanno cercando di eseguire 1086 00:50:32,150 --> 00:50:36,770 la stessa operazione, anche lì, la potenziale esiste per una decisione di essere 1087 00:50:36,770 --> 00:50:39,670 fatta sulla base della precedente stato del mondo - 1088 00:50:39,670 --> 00:50:41,290 l'account dispone di una azione - 1089 00:50:41,290 --> 00:50:45,630 ed entrambe le persone, o entrambi i server, ora provare a dire incrementarlo a due parti. 1090 00:50:45,630 --> 00:50:49,020 Ma in questo caso, potrebbe essere addebitato me i soldi per entrambe le parti, ma 1091 00:50:49,020 --> 00:50:50,830 incrementato solo quella volta. 1092 00:50:50,830 --> 00:50:54,730 >> Così, in breve, il problema fondamentale qui, come con la battuta di lasciare un 1093 00:50:54,730 --> 00:50:58,750 nota, o di mettere un lucchetto su di esso, è se due persone, o due threads - 1094 00:50:58,750 --> 00:50:59,930 ripensare a graffiare - 1095 00:50:59,930 --> 00:51:03,220 può ispezionare lo stato di alcune variabili e poi cercare di cambiare questa variabile, 1096 00:51:03,220 --> 00:51:07,950 ma queste due cose non accadono in stesso tempo, ma possono ottenere interrotto 1097 00:51:07,950 --> 00:51:11,500 da altre cose accadendo, i dati possono entrare in uno stato molto strano. 1098 00:51:11,500 --> 00:51:15,450 E si può beneficiare o si può soffrire nel senso dell'esempio denaro. 1099 00:51:15,450 --> 00:51:18,110 >> Così nel problema insieme sette, vi diamo questa riga di codice, che lungo 1100 00:51:18,110 --> 00:51:21,000 storia breve, risolve questo problema in MySQL. 1101 00:51:21,000 --> 00:51:24,950 Questo molto lunga istruzione che non anche inserirle in un unico linea sulla 1102 00:51:24,950 --> 00:51:30,370 schermata qui assicura che il funzionamento è ciò che è chiamato atomica. 1103 00:51:30,370 --> 00:51:33,720 Succede tutto in una volta, o non succede a tutti. 1104 00:51:33,720 --> 00:51:37,530 Questa frase molto lunga non può ottenere interrotto parzialmente. 1105 00:51:37,530 --> 00:51:39,840 >> E ciò che fa è letteralmente quello che dice. 1106 00:51:39,840 --> 00:51:44,200 Inserire in qualche tabella seguente tre campi di quei valori specifici, 1107 00:51:44,200 --> 00:51:47,280 ma sulla chiave duplicata, non fare un inserto. 1108 00:51:47,280 --> 00:51:48,280 Fare un aggiornamento. 1109 00:51:48,280 --> 00:51:52,450 Quindi questo è come fare una SELECT e un INSERISCI così dire, allo stesso tempo. 1110 00:51:52,450 --> 00:51:55,150 E qual è la chiave che probabilmente è stata sottoposta a qui? 1111 00:51:55,150 --> 00:51:58,300 1112 00:51:58,300 --> 00:52:01,380 >> Si scopre, e vedrete questo problema set spec sette di, perché 1113 00:52:01,380 --> 00:52:06,040 abbiamo dichiarato che ci sia una chiave univoca su questa particolare tabella tale che 1114 00:52:06,040 --> 00:52:08,480 Non è possibile avere più righe per lo stesso utente con l' 1115 00:52:08,480 --> 00:52:10,150 penny stesso simbolo azionario - 1116 00:52:10,150 --> 00:52:13,780 in questo esempio qui, è DVN.V una penny stock stupido che abbiamo 1117 00:52:13,780 --> 00:52:14,980 fare riferimento nelle specifiche. 1118 00:52:14,980 --> 00:52:17,860 Perché abbiamo dichiarato di essere unico, ciò significa che se si 1119 00:52:17,860 --> 00:52:23,580 tenta di inserire una riga duplicata, sei invece di andare ad aggiornare senza 1120 00:52:23,580 --> 00:52:27,020 chiunque altro avere la possibilità di cambiare lo stato del mondo sia. 1121 00:52:27,020 --> 00:52:29,400 Così, in breve, questo assicura le cose sono atomiche. 1122 00:52:29,400 --> 00:52:32,530 >> Più in generale, però, i database come MySQL - 1123 00:52:32,530 --> 00:52:35,460 e non hai bisogno di questa caratteristica per p-set di sette, ma tenerlo in mente per 1124 00:52:35,460 --> 00:52:36,200 il futuro - 1125 00:52:36,200 --> 00:52:38,870 sostenere quelli che vengono chiamati transazioni, dove si può dire 1126 00:52:38,870 --> 00:52:40,990 Avviare la transazione letteralmente. 1127 00:52:40,990 --> 00:52:43,270 È quindi possibile eseguire due istruzioni SQL. 1128 00:52:43,270 --> 00:52:45,710 E un'istruzione SQL, come si vedrà in p-set di sette, sembra un po ' 1129 00:52:45,710 --> 00:52:46,750 qualcosa di simile. 1130 00:52:46,750 --> 00:52:48,820 Aggiornare una tabella denominata account. 1131 00:52:48,820 --> 00:52:52,550 Impostare la colonna saldo pari a qualsiasi la colonna saldo attualmente 1132 00:52:52,550 --> 00:52:57,280 è meno 1.000 dove il numero, la numero di conto, come l'ID utente, 1133 00:52:57,280 --> 00:53:00,830 uguale a 2, e quindi aggiornare conto dot dot dot. 1134 00:53:00,830 --> 00:53:04,350 >> Quindi, in parole povere, che cosa fanno questi due query sembrano fare in 1135 00:53:04,350 --> 00:53:05,840 vero senso del mondo bancario? 1136 00:53:05,840 --> 00:53:07,440 >> PUBBLICO: Trasferimento al risparmio. 1137 00:53:07,440 --> 00:53:08,020 >> DAVID MALAN: Esattamente. 1138 00:53:08,020 --> 00:53:10,470 Trasferimento di fondi da un conto all'altro. 1139 00:53:10,470 --> 00:53:14,400 E questo è un altro esempio in cui si vuole veramente queste due cose accadano 1140 00:53:14,400 --> 00:53:15,570 o non accadere. 1141 00:53:15,570 --> 00:53:18,880 Se non si desidera qualcosa per ottenere in mezzo a loro e potenzialmente rovinare 1142 00:53:18,880 --> 00:53:22,220 la matematica, o rovinare quanto soldi che hai, o quanto 1143 00:53:22,220 --> 00:53:23,170 soldi la banca ha. 1144 00:53:23,170 --> 00:53:26,890 Così che cosa è veramente bello sulle transazioni in MySQL è che, e 1145 00:53:26,890 --> 00:53:30,160 database più in generale, è che e le persone intelligenti che hanno implementato 1146 00:53:30,160 --> 00:53:33,670 queste caratteristiche capire come fare Assicurarsi che entrambe queste cose accadono 1147 00:53:33,670 --> 00:53:35,120 o per niente. 1148 00:53:35,120 --> 00:53:38,580 >> E se siete veramente aspirano a fare un sito web che viene usato da persone su 1149 00:53:38,580 --> 00:53:41,490 campus, le persone nel mondo reale, facendo qualcosa nel senso di avvio, 1150 00:53:41,490 --> 00:53:43,300 questi sono i tipi di decisioni di progettazione che 1151 00:53:43,300 --> 00:53:45,020 diventare sempre così importante. 1152 00:53:45,020 --> 00:53:48,240 In caso contrario, si inizia a perdere i dati, perdere utenti, o nel caso peggiore come 1153 00:53:48,240 --> 00:53:51,800 abbiamo visto qui, potenzialmente perdere denaro. 1154 00:53:51,800 --> 00:53:56,180 Quindi, di nuovo, più che nel set problema sette, e forse per alcuni 1155 00:53:56,180 --> 00:53:57,530 si in progetti finali. 1156 00:53:57,530 --> 00:54:01,870 >> Quindi cerchiamo di cambiare quella foto che abbiamo avuto un momento fa solo in un altro modo. 1157 00:54:01,870 --> 00:54:04,070 Così mi permetta effettivamente vedere se posso - 1158 00:54:04,070 --> 00:54:06,030 no, quello è andato. 1159 00:54:06,030 --> 00:54:06,690 Eccolo. 1160 00:54:06,690 --> 00:54:09,020 >> Quindi questo è dove abbiamo lasciato l'ultima volta. 1161 00:54:09,020 --> 00:54:12,390 E si scopre che andremo a lanciare una cosa nel mix qui - 1162 00:54:12,390 --> 00:54:14,510 un linguaggio chiamato JavaScript. 1163 00:54:14,510 --> 00:54:18,060 Così JavaScript realtà si adatta in questo pezzo - 1164 00:54:18,060 --> 00:54:22,086 e non ho abbastanza lasciare spazio sufficiente, quindi questo non è ora in scala. 1165 00:54:22,086 --> 00:54:23,900 OK, questo è davvero patetico. 1166 00:54:23,900 --> 00:54:27,075 OK, così che è JavaScript. 1167 00:54:27,075 --> 00:54:27,340 Bene. 1168 00:54:27,340 --> 00:54:28,760 Sto davvero facendo un cattivo servizio. 1169 00:54:28,760 --> 00:54:29,390 Bene. 1170 00:54:29,390 --> 00:54:34,790 >> Così JavaScript è un'altra programmazione lingua, e la nostra ultima, se questo aiuta 1171 00:54:34,790 --> 00:54:37,770 rassicurare che non c'è molto di più degli idranti qui. 1172 00:54:37,770 --> 00:54:41,100 Così JavaScript è anche interpretato linguaggio, il che significa che non lo fanno 1173 00:54:41,100 --> 00:54:42,670 compilarlo in zeri e uno. 1174 00:54:42,670 --> 00:54:43,690 Basta eseguirlo. 1175 00:54:43,690 --> 00:54:47,680 Ma cosa c'è di fondamentalmente diverso con JavaScript solito è che si 1176 00:54:47,680 --> 00:54:49,815 non eseguirlo sul vostro server web. 1177 00:54:49,815 --> 00:54:52,570 Esso non viene eseguito nella apparecchio per sé. 1178 00:54:52,570 --> 00:54:57,490 Piuttosto, esso viene scaricato da un utente via HTTP nel browser - 1179 00:54:57,490 --> 00:55:00,260 Chrome, Safari, Internet Explorer, Firefox, qualunque sia - 1180 00:55:00,260 --> 00:55:03,860 ed è il browser che esegue questo particolare linguaggio di programmazione. 1181 00:55:03,860 --> 00:55:08,000 >> Quindi, per essere chiari, PHP finora è stato eseguito sia a riga di comando in 1182 00:55:08,000 --> 00:55:11,290 la nostra finestra in bianco e nero, su un server come l'apparecchio, un computer 1183 00:55:11,290 --> 00:55:14,490 come l'apparecchio, o è stato eseguito da un server web 1184 00:55:14,490 --> 00:55:15,860 esecuzione su un computer. 1185 00:55:15,860 --> 00:55:20,490 Ma il tema qui è che PHP finora è stato eseguito sul lato server, così 1186 00:55:20,490 --> 00:55:24,820 l'utente e browser dell'utente non vede mai una riga di codice PHP. 1187 00:55:24,820 --> 00:55:28,530 >> Infatti, se avete mai aperto un browser per il tuo sito web o in un altro e 1188 00:55:28,530 --> 00:55:32,400 effettivamente vedere il codice PHP nella finestra, qualcuno ha avvitato. 1189 00:55:32,400 --> 00:55:34,950 Perché non è destinata ad essere inviato direttamente a un browser. 1190 00:55:34,950 --> 00:55:38,150 Si suppone che deve essere eseguito e si voltò in qualcosa come HTML. 1191 00:55:38,150 --> 00:55:40,120 >> Ma JavaScript è essenzialmente il contrario. 1192 00:55:40,120 --> 00:55:44,350 E 'pensato per essere eseguito in genere all'interno della finestra del browser di un utente. 1193 00:55:44,350 --> 00:55:46,840 E che tipo di siti web uso JavaScript poi in questi giorni? 1194 00:55:46,840 --> 00:55:49,640 1195 00:55:49,640 --> 00:55:52,180 >> Come letteralmente ogni popolare sito web. 1196 00:55:52,180 --> 00:55:55,430 Ogni sito web che voi ragazzi probabilmente utilizzare l'uso quotidiano JavaScript per il 1197 00:55:55,430 --> 00:55:57,330 semplice e anche la caratteristiche più sexy. 1198 00:55:57,330 --> 00:55:59,800 >> Quindi, qualcosa come Facebook Chat se si utilizza tale. 1199 00:55:59,800 --> 00:56:01,040 Come si fa che funzionano davvero? 1200 00:56:01,040 --> 00:56:05,090 Bene finora, tutte le cose che abbiamo fatto con HTML e PHP presume che 1201 00:56:05,090 --> 00:56:08,750 si tira su un URL, e si preme Invio, e si vede alcuni contenuti HTML. 1202 00:56:08,750 --> 00:56:11,970 E si fa clic sul collegamento, che cambia il URL, cambia la pagina e ricariche 1203 00:56:11,970 --> 00:56:12,740 alcuni nuovi contenuti. 1204 00:56:12,740 --> 00:56:16,340 Fare clic su un URL o inviare un modulo, è ottenere sbattuto a un'altra pagina e 1205 00:56:16,340 --> 00:56:17,420 si vede qualche nuovo contenuto. 1206 00:56:17,420 --> 00:56:22,710 >> Ma usando qualcosa come Facebook Chat, o Gchat, o Google Maps, raramente 1207 00:56:22,710 --> 00:56:27,350 fa tutto il refresh della pagina in modo tale che si vede uno schermo bianco momentaneamente e 1208 00:56:27,350 --> 00:56:28,470 poi nuovi contenuti. 1209 00:56:28,470 --> 00:56:32,610 Piuttosto, pagine web oggi sono dinamicamente sempre aggiornato di nuovo e 1210 00:56:32,610 --> 00:56:35,570 ancora e ancora ogni sorta del dietro le quinte. 1211 00:56:35,570 --> 00:56:38,560 E si scopre che quando si va a qualcosa di simile a Facebook, o Gchat, 1212 00:56:38,560 --> 00:56:43,050 o Gmail, e gli aggiornamenti della pagina automaticamente senza ricaricare la 1213 00:56:43,050 --> 00:56:47,630 schermo intero, quello che è successo è che il tuo browser ha fatto una sorta di segreto 1214 00:56:47,630 --> 00:56:49,410 richieste HTTP aggiuntivi - 1215 00:56:49,410 --> 00:56:52,740 non per le pagine web intere, ma solo per piccoli blocchi di dati, come il 1216 00:56:52,740 --> 00:56:55,740 messaggio istantaneo che il tuo amico appena trasmesso voi, o l'aggiornamento di stato che 1217 00:56:55,740 --> 00:56:58,210 qualcuno solo voi, o il tweet inviato che qualcuno appena inviato. 1218 00:56:58,210 --> 00:57:02,120 E 'solo facendo piccoli richieste di dati, e quindi utilizzando JavaScript, questo 1219 00:57:02,120 --> 00:57:06,370 linguaggio di programmazione, di cambiare ciò che Nella pagina web si presenta come senza 1220 00:57:06,370 --> 00:57:09,860 server di aiutare, senza il server generazione che l'HTML. 1221 00:57:09,860 --> 00:57:13,820 >> Così, in breve, JavaScript può essere utilizzato poi per recuperare non solo nuovi dati dal 1222 00:57:13,820 --> 00:57:16,750 il server senza ricaricare tutta una La pagina o l'invio di un modulo. 1223 00:57:16,750 --> 00:57:20,060 Può essere utilizzato anche per il cambiamento il cosiddetto DOM - 1224 00:57:20,060 --> 00:57:21,520 Documento modello di oggetti - 1225 00:57:21,520 --> 00:57:24,620 che è solo il modo di fantasia per dicendo che l'albero di HTML 1226 00:57:24,620 --> 00:57:26,220 che abbiamo visto l'ultima volta. 1227 00:57:26,220 --> 00:57:31,640 >> Quindi, per rassicurare, JavaScript è sintatticamente in modo simile a C pure. 1228 00:57:31,640 --> 00:57:32,820 Non c'è alcuna funzione principale. 1229 00:57:32,820 --> 00:57:35,430 Basta iniziare a scrivere il codice e si otterrà eseguito, o 1230 00:57:35,430 --> 00:57:36,900 interpretato più correttamente. 1231 00:57:36,900 --> 00:57:38,660 Condizioni sarà simile a questa. 1232 00:57:38,660 --> 00:57:41,230 Non è diverso da C o PHP per quella materia. 1233 00:57:41,230 --> 00:57:43,890 Espressioni booleane o-ed insieme sarà simile a questa. 1234 00:57:43,890 --> 00:57:45,590 AND insieme simile a questa. 1235 00:57:45,590 --> 00:57:47,750 >> Interruttori sarà simile a questa. 1236 00:57:47,750 --> 00:57:49,440 Per i cicli sarà simile a questa. 1237 00:57:49,440 --> 00:57:51,060 Mentre i passanti potranno simile a questa. 1238 00:57:51,060 --> 00:57:53,316 Effettuare cicli while sarà simile a questa. 1239 00:57:53,316 --> 00:57:54,780 >> Questo è nuovo. 1240 00:57:54,780 --> 00:57:58,753 Così JavaScript non ha un foreach costruire per sé, ma questo costrutto 1241 00:57:58,753 --> 00:58:03,870 per la variabile i in array, e io in questo caso diventa un valore di indice. 1242 00:58:03,870 --> 00:58:06,880 Quindi è un po 'diverso da quello foreach, anche se le nuove versioni di 1243 00:58:06,880 --> 00:58:10,280 JavaScript stanno venendo fuori tutto il tempo, così anche queste caratteristiche del linguaggio 1244 00:58:10,280 --> 00:58:10,880 si stanno evolvendo. 1245 00:58:10,880 --> 00:58:16,920 >> E per inciso, JavaScript questi giorni può essere utilizzato anche su un server come 1246 00:58:16,920 --> 00:58:19,920 PHP utilizzando un framework chiamato Node.js. 1247 00:58:19,920 --> 00:58:24,670 Uno di CS50 TF, Kevin, ha portato un seminario su Node.js che è disponibile presso 1248 00:58:24,670 --> 00:58:26,440 cs50.net/seminars. 1249 00:58:26,440 --> 00:58:28,830 Quindi, se siete curiosi, sapere che si può utilizzare questo sul lato server come 1250 00:58:28,830 --> 00:58:33,870 bene, ma questa è una tendenza abbastanza recente, ma un potente a questo. 1251 00:58:33,870 --> 00:58:35,270 >> Questo è un po 'diverso. 1252 00:58:35,270 --> 00:58:37,910 Si tratta di un array in JavaScript. 1253 00:58:37,910 --> 00:58:40,115 E quello che colpisce come diverso rispetto a C o PHP? 1254 00:58:40,115 --> 00:58:43,890 1255 00:58:43,890 --> 00:58:47,420 Ci sono alcune storie veloci possiamo dire qui. 1256 00:58:47,420 --> 00:58:49,367 Cosa manca rispetto a PHP? 1257 00:58:49,367 --> 00:58:51,652 >> AUDIENCE: [incomprensibile]. 1258 00:58:51,652 --> 00:58:52,110 >> DAVID MALAN: Sì? 1259 00:58:52,110 --> 00:58:53,322 Ci dispiace dirlo di nuovo? 1260 00:58:53,322 --> 00:58:54,740 >> AUDIENCE: Non dichiara il tipo di variabile. 1261 00:58:54,740 --> 00:58:56,390 >> DAVID MALAN: Non stiamo dichiarando il tipo di variabile. 1262 00:58:56,390 --> 00:58:59,630 Quindi in realtà abbastanza come PHP, non siamo specificando i tipi di questa variabile. 1263 00:58:59,630 --> 00:59:02,670 Piuttosto, siamo più genericamente dicendo var per la variabile. 1264 00:59:02,670 --> 00:59:06,690 Non abbiamo fastidio di PHP del simbolo del dollaro, che pur noioso 1265 00:59:06,690 --> 00:59:09,160 tipo, fa di più chiaro che qualcosa è una variabile. 1266 00:59:09,160 --> 00:59:11,830 Mentre qui, siamo una sorta di tornare a L'approccio di C semplicemente chiamando un 1267 00:59:11,830 --> 00:59:14,500 variabile dal nome vogliamo per dare, come i numeri. 1268 00:59:14,500 --> 00:59:17,170 E anche come PHP, abbiamo parentesi quadre per l' 1269 00:59:17,170 --> 00:59:19,170 valori all'interno di tale matrice. 1270 00:59:19,170 --> 00:59:22,490 >> Così variabili in JavaScript anche potrebbe assomigliare a questo. 1271 00:59:22,490 --> 00:59:26,900 Si noti qui si tratta di una stringa denominata s, ma allo stesso modo abbiamo non specificato 1272 00:59:26,900 --> 00:59:28,750 che si tratta di una stringa. 1273 00:59:28,750 --> 00:59:33,160 Ecco però una caratteristica che non esistere esattamente nello stesso modo in PHP, 1274 00:59:33,160 --> 00:59:34,460 ma un po 'simile. 1275 00:59:34,460 --> 00:59:36,530 Questo è un oggetto in JavaScript. 1276 00:59:36,530 --> 00:59:42,110 E gli oggetti sono una sorta di esercito svizzero Coltello di una struttura dati in cui si 1277 00:59:42,110 --> 00:59:43,900 li possono utilizzare per qualsiasi numero di cose. 1278 00:59:43,900 --> 00:59:46,860 >> Qui, per esempio, stiamo dichiarando una variabile denominata preventivo. 1279 00:59:46,860 --> 00:59:49,110 Il tipo di quella variabile è un oggetto. 1280 00:59:49,110 --> 00:59:53,550 Si può pensare a questo come una struct C che ha le chiavi e valori. 1281 00:59:53,550 --> 00:59:55,250 Simbolo è una chiave. 1282 00:59:55,250 --> 00:59:57,350 FB è un valore, apparentemente un simbolo azionario. 1283 00:59:57,350 --> 00:59:57,930 Comma. 1284 00:59:57,930 --> 01:00:02,180 Il prezzo è un altro tasto, e il suo valore è apparentemente una virgola mobile, o un 1285 01:00:02,180 --> 01:00:06,510 il numero più in generale in JavaScript, di 49,26 dollari. 1286 01:00:06,510 --> 01:00:09,030 >> Quindi PHP non ha - 1287 01:00:09,030 --> 01:00:12,980 non abbiamo visto negli oggetti PHP abbastanza come questo, ma abbiamo fatto vedere un analogo, 1288 01:00:12,980 --> 01:00:14,093 che era quello? 1289 01:00:14,093 --> 01:00:14,980 >> AUDIENCE: [incomprensibile]. 1290 01:00:14,980 --> 01:00:16,110 >> DAVID MALAN: array associativi. 1291 01:00:16,110 --> 01:00:19,990 Quindi, considerando che PHP ha array associativi la cui sintassi è sempre leggermente in modo 1292 01:00:19,990 --> 01:00:20,370 diversa - 1293 01:00:20,370 --> 01:00:21,780 abbiamo visto le parentesi quadre. 1294 01:00:21,780 --> 01:00:23,860 Abbiamo visto le frecce simboli strani. 1295 01:00:23,860 --> 01:00:27,330 JavaScript ha oggetti, ma questo è prevalentemente una differenza semantica e una 1296 01:00:27,330 --> 01:00:29,260 tradurre diverso per ora. 1297 01:00:29,260 --> 01:00:35,060 Tuttavia, come una digressione, PHP ha anche oggetti in un modo che Java e altri 1298 01:00:35,060 --> 01:00:37,810 lingue hanno oggetti programmazione orientata agli oggetti. 1299 01:00:37,810 --> 01:00:40,440 Ma useremo questi solo per i tipi di dati per ora. 1300 01:00:40,440 --> 01:00:42,170 Oggetti e array associativi. 1301 01:00:42,170 --> 01:00:44,140 >> Questo potrebbe rendere un po 'più chiaro. 1302 01:00:44,140 --> 01:00:45,890 Ecco perché un oggetto è utile. 1303 01:00:45,890 --> 01:00:48,760 Quando si desidera dichiarare uno studente, come Zamyla, possiamo effettivamente 1304 01:00:48,760 --> 01:00:52,630 incapsulare così dire all'interno di tale oggetto utilizzando le parentesi graffe come 1305 01:00:52,630 --> 01:00:55,060 prima di un intero mazzo di chiavi e valori in qui. 1306 01:00:55,060 --> 01:00:59,150 Abbiamo un ID, una casa e un nome Zamyla, seguito da una virgola come 1307 01:00:59,150 --> 01:01:00,690 solito alla fine. 1308 01:01:00,690 --> 01:01:04,840 >> Giù anche qui, questa è leggermente diverso, ma anche molto potente 1309 01:01:04,840 --> 01:01:05,690 in questi giorni. 1310 01:01:05,690 --> 01:01:08,780 Ecco un array, e so che a causa c'è una parentesi quadra up 1311 01:01:08,780 --> 01:01:11,090 superiore e una parentesi quadra nella parte inferiore. 1312 01:01:11,090 --> 01:01:16,050 E questo è un array di quali dati digitare apparentemente in JavaScript? 1313 01:01:16,050 --> 01:01:21,260 Questo è un array di sembra come tre oggetti. 1314 01:01:21,260 --> 01:01:24,580 E so che è solo un oggetto a causa delle parentesi graffe. 1315 01:01:24,580 --> 01:01:28,760 E notate c'è aperta parentesi graffa, alcune cose, chiudere parentesi graffa, virgola, 1316 01:01:28,760 --> 01:01:31,180 poi alcuni di più, virgola, e poi ancora un po '. 1317 01:01:31,180 --> 01:01:33,800 Ecco, questo è tre argomenti separati da due virgole. 1318 01:01:33,800 --> 01:01:36,810 >> Quindi questo è un array di tre oggetti. 1319 01:01:36,810 --> 01:01:39,940 E ciascuno di questi oggetti sembra essere membro studente o del personale di alcune 1320 01:01:39,940 --> 01:01:42,370 ordinamento, ciascuno con un ID, casa, e il nome. 1321 01:01:42,370 --> 01:01:45,060 Ma ho chiamato questo qualcosa chiamato JSON - 1322 01:01:45,060 --> 01:01:47,450 JavaScript Object Notation. 1323 01:01:47,450 --> 01:01:52,060 E questo è un formato di dati che effettivamente è così molto popolare e in 1324 01:01:52,060 --> 01:01:55,100 voga in questi giorni che se si scrive un applicazione che utilizza il Facebook 1325 01:01:55,100 --> 01:01:59,150 API, l'API di Twitter, davvero quasi qualsiasi API là fuori in questi giorni, 1326 01:01:59,150 --> 01:02:02,820 tra cui alcuni dei propri del CS50, l' i dati si torna non è in 1327 01:02:02,820 --> 01:02:04,720 vecchio formato CSV scuola. 1328 01:02:04,720 --> 01:02:06,780 >> Perché ricordiamo che CSV è super semplice. 1329 01:02:06,780 --> 01:02:10,230 Si trova a soli colonne separate da virgole. 1330 01:02:10,230 --> 01:02:13,190 Dati JSON ti dà più metadati. 1331 01:02:13,190 --> 01:02:17,800 Si associa una chiave con ogni valore in modo essi non devono assumere solo che 1332 01:02:17,800 --> 01:02:22,460 colonna zeroth è un valore, colonna uno è un altro, colonna due è un altro. 1333 01:02:22,460 --> 01:02:26,790 Tutto in un oggetto JSON qui è una sorta di auto-descrizione, perché ogni 1334 01:02:26,790 --> 01:02:30,940 uno dei nomi in questo file ha letteralmente nome di fronte come 1335 01:02:30,940 --> 01:02:32,510 stringa tra virgolette. 1336 01:02:32,510 --> 01:02:34,950 >> Quindi diamo un'occhiata a un paio di esempi qui. 1337 01:02:34,950 --> 01:02:36,800 Lasciami andare all'interno dell'apparecchio. 1338 01:02:36,800 --> 01:02:41,000 E lasciatemi andare nella nostra vhost directory in pubblico. 1339 01:02:41,000 --> 01:02:45,590 E mi permetta di andare in JavaScript directory. 1340 01:02:45,590 --> 01:02:49,610 E andiamo avanti e aprono dom-0.html, dove DOM significa solo 1341 01:02:49,610 --> 01:02:51,010 document object model. 1342 01:02:51,010 --> 01:02:53,490 E 'la roba albero a cui Ho fatto riferimento in precedenza. 1343 01:02:53,490 --> 01:02:54,950 >> E mi permetta di proporre le seguenti. 1344 01:02:54,950 --> 01:02:57,720 Ecco una pagina web il cui corpo è abbastanza semplice. 1345 01:02:57,720 --> 01:03:00,170 Quindi, qui in basso, notare Ho una forma. 1346 01:03:00,170 --> 01:03:01,500 Abbiamo visto quelli prima. 1347 01:03:01,500 --> 01:03:07,600 Ha due ingressi, uno dei quali ha un ID di nome, uno dei quali ha un tipo di 1348 01:03:07,600 --> 01:03:09,830 presentare, e il primo il suo tipo è il testo. 1349 01:03:09,830 --> 01:03:11,900 Quindi, questo in realtà sembra piuttosto semplice. 1350 01:03:11,900 --> 01:03:13,090 >> Andiamo qui. 1351 01:03:13,090 --> 01:03:15,390 Torniamo a questa pagina qui. 1352 01:03:15,390 --> 01:03:21,030 Andiamo in localhost, e andare in la nostra directory JavaScript e andare a 1353 01:03:21,030 --> 01:03:24,640 dom-0, e qui abbiamo questo modulo. 1354 01:03:24,640 --> 01:03:26,550 Ecco, questo è apparentemente tutto questa pagina fa. 1355 01:03:26,550 --> 01:03:28,740 Ha un campo di nome con un pulsante Invia. 1356 01:03:28,740 --> 01:03:30,340 Ma io non ho intenzione di utilizzare PHP qui. 1357 01:03:30,340 --> 01:03:34,310 Io vado a fare lato client tutto così dire in JavaScript come segue. 1358 01:03:34,310 --> 01:03:39,100 >> Notate che ho davvero dato il nome campo di questo ingresso un unico 1359 01:03:39,100 --> 01:03:42,350 identificativo, che sarà effettivamente Mi risparmiare un po 'di tempo in un attimo. 1360 01:03:42,350 --> 01:03:45,480 E accorgo che ho presentato un altro tag nella testa della mia pagina web, l' 1361 01:03:45,480 --> 01:03:46,565  tag. 1362 01:03:46,565 --> 01:03:50,120 >> Quindi è in questo senso che JavaScript sia un linguaggio di programmazione lato client. 1363 01:03:50,120 --> 01:03:55,020 In questo caso, come CSS, ho messo dritto dentro la mia HTML. 1364 01:03:55,020 --> 01:03:58,810 Ma notate ho dichiarato una funzione che sembra un po 'come PHP 1365 01:03:58,810 --> 01:04:01,530 sintatticamente, ma questo è in realtà JavaScript, perché ancora una volta, è 1366 01:04:01,530 --> 01:04:03,920 lato client nel browser. 1367 01:04:03,920 --> 01:04:07,590 E prendere una congettura che cosa questo sta andando a fare, anche se alcuni di sintassi 1368 01:04:07,590 --> 01:04:09,338 qui è nuovo. 1369 01:04:09,338 --> 01:04:11,760 >> AUDIENCE: Dite ciao a chiunque. 1370 01:04:11,760 --> 01:04:14,020 >> DAVID MALAN: Sta per dire ciao a chi visita questa pagina. 1371 01:04:14,020 --> 01:04:15,120 Quindi, in che modo? 1372 01:04:15,120 --> 01:04:18,070 >> Quindi notare, si scopre in JavaScript c'è una funzione di () di allarme. 1373 01:04:18,070 --> 01:04:22,840 Questa è una funzione molto sorta di triste che in realtà tende solo per infastidire gli utenti. 1374 01:04:22,840 --> 01:04:25,440 Non è quello che si dovrebbe davvero usare in genere, ma è un rapido e sporco 1375 01:04:25,440 --> 01:04:27,710 modo di una sorta di stampare qualcosa ad un utente grafica 1376 01:04:27,710 --> 01:04:29,180 interfaccia, come un browser. 1377 01:04:29,180 --> 01:04:31,400 Si noti qui che ho un stringa tra virgolette singole. 1378 01:04:31,400 --> 01:04:36,010 Si scopre che a differenza di C, JavaScript può effettivamente essere utilizzate solo 1379 01:04:36,010 --> 01:04:38,730 cita, e francamente è solo un po ' della convenzione stilistica tra 1380 01:04:38,730 --> 01:04:41,180 JavaScript programmatori di utilizzare le virgolette singole. 1381 01:04:41,180 --> 01:04:43,750 PHP, in realtà hanno un po ' significato differente. 1382 01:04:43,750 --> 01:04:45,810 Ma per ora, è sufficiente sapere che questa è l'unica ragione. 1383 01:04:45,810 --> 01:04:49,270 La convenzione in JavaScript è spesso utilizzare le virgolette singole, ma potremmo usare 1384 01:04:49,270 --> 01:04:50,950 doppie virgolette in entrambi i posti. 1385 01:04:50,950 --> 01:04:52,610 >> Quindi questo è interessante. 1386 01:04:52,610 --> 01:04:56,430 Ricordiamo l'ultima volta che abbiamo avuto che immagine sullo schermo che ha attirato un albero 1387 01:04:56,430 --> 01:04:59,720 dove si aveva il nodo HTML, e la testa nodo e il nodo di body, 1388 01:04:59,720 --> 01:05:00,800 e poi alcuni testi. 1389 01:05:00,800 --> 01:05:04,700 Ma c'era un nodo speciale al molto alto che ho chiamato il documento. 1390 01:05:04,700 --> 01:05:08,260 Beh, si scopre in JavaScript, qualsiasi volta che si scrive un programma in JavaScript 1391 01:05:08,260 --> 01:05:11,040 in un browser, si ha accesso a una speciale variabile globale. 1392 01:05:11,040 --> 01:05:14,130 Simile nello spirito a superglobals di PHP, questo viene chiamato in 1393 01:05:14,130 --> 01:05:16,050 tutti i documenti in minuscolo. 1394 01:05:16,050 --> 01:05:21,480 >> E 'come una struct, ma questa struct ha anche funzioni all'interno di esso. 1395 01:05:21,480 --> 01:05:23,790 Quindi una struct C ha appena dati in genere. 1396 01:05:23,790 --> 01:05:29,060 Ma un oggetto JavaScript come questo tecnicamente è anche dotato di funzioni, 1397 01:05:29,060 --> 01:05:31,830 altrimenti noto come metodi, all'interno di esso. 1398 01:05:31,830 --> 01:05:35,750 E si può chiamare una funzione all'interno di questo oggetto letteralmente facendo il suo 1399 01:05:35,750 --> 01:05:39,610 nome, puntino, e poi il nome di la funzione, o ancora metodo. 1400 01:05:39,610 --> 01:05:41,160 E 'solo un sinonimo, davvero. 1401 01:05:41,160 --> 01:05:42,450 >> E cosa fa questa funzione? 1402 01:05:42,450 --> 01:05:43,840 È possibile tipo di intuire dal suo nome. 1403 01:05:43,840 --> 01:05:45,590 Prendi elemento da ID. 1404 01:05:45,590 --> 01:05:50,040 Quindi questo sta andando a cercare la pagina web, verificare che l'albero, cercando 1405 01:05:50,040 --> 01:05:55,210 qualunque nodo, elemento AKA, ha una ID univoco del preventivo nome unquote. 1406 01:05:55,210 --> 01:05:56,560 E allora che cosa sto andando a fare? 1407 01:05:56,560 --> 01:06:00,350 Ho intenzione di ottenere il valore all'interno di quel nodo nell'albero, e sto andando 1408 01:06:00,350 --> 01:06:02,580 per dire in qualche modo ciao a quel nome. 1409 01:06:02,580 --> 01:06:05,360 >> Quindi prendere una supposizione, anche se non abbiamo visto ancora, cosa fare il più 1410 01:06:05,360 --> 01:06:07,396 significano qui e qui, probabilmente? 1411 01:06:07,396 --> 01:06:08,230 >> AUDIENCE: Concatenare. 1412 01:06:08,230 --> 01:06:09,220 >> DAVID MALAN: Concatenare. 1413 01:06:09,220 --> 01:06:11,290 A destra, e questi sono solo tipo di decisioni di progettazione 1414 01:06:11,290 --> 01:06:12,280 persone hanno fatto anni fa. 1415 01:06:12,280 --> 01:06:15,190 In PHP, si concatena cose con puntini. 1416 01:06:15,190 --> 01:06:18,800 In C, si passa attraverso una serie di cerchi e funzioni come StrCopy (call) o 1417 01:06:18,800 --> 01:06:20,600 strcat () o altre funzioni. 1418 01:06:20,600 --> 01:06:22,060 Ma in JavaScript, è possibile utilizzare plus. 1419 01:06:22,060 --> 01:06:24,770 Quindi questo è solo concatenazione tre corde - 1420 01:06:24,770 --> 01:06:27,850 ciao, un nome, e quindi un punto esclamativo. 1421 01:06:27,850 --> 01:06:30,390 >> Così, quando e perché è questa funzione chiamato però? 1422 01:06:30,390 --> 01:06:33,150 Bene, prendete una congettura dalla HTML nella parte inferiore. 1423 01:06:33,150 --> 01:06:35,810 Perché è salutare () chiamata, o quando? 1424 01:06:35,810 --> 01:06:39,730 1425 01:06:39,730 --> 01:06:44,030 >> A quanto pare, come meglio posso dire, su presentare, al momento della presentazione di questo modulo, 1426 01:06:44,030 --> 01:06:47,200 Ho intenzione di fare tutto ciò che è all'interno di queste citazioni. 1427 01:06:47,200 --> 01:06:50,900 E in particolare, ho intenzione di chiamare salutare () e poi tornare false. 1428 01:06:50,900 --> 01:06:53,090 >> Bene, vediamo cosa la rete effetto è di prima qualità. 1429 01:06:53,090 --> 01:06:58,290 Allora lasciami andare avanti e digito , per esempio, Loren, Submit. 1430 01:06:58,290 --> 01:06:59,440 Ciao Loren. 1431 01:06:59,440 --> 01:07:02,990 Vediamo se forse questo era solo un'implementazione fortunato. 1432 01:07:02,990 --> 01:07:03,200 Nope. 1433 01:07:03,200 --> 01:07:05,990 Quindi è digitando qualunque nomino Io in realtà messo lì. 1434 01:07:05,990 --> 01:07:07,970 >> Ma notare ciò che non sta cambiando. 1435 01:07:07,970 --> 01:07:10,360 L'URL è ancora dom-0.html. 1436 01:07:10,360 --> 01:07:11,820 Non c'è register.php. 1437 01:07:11,820 --> 01:07:13,110 Non c'è nessun secondo file. 1438 01:07:13,110 --> 01:07:14,930 Non c'è nessun attributo action. 1439 01:07:14,930 --> 01:07:19,720 Così che cosa è questo ritorno falso presumibilmente facendo? 1440 01:07:19,720 --> 01:07:23,660 Perché sto chiamando salutare () e poi tornando falso probabilmente? 1441 01:07:23,660 --> 01:07:26,420 Quello che normalmente succede quando si fa clic su Invia una forma che anche noi abbiamo 1442 01:07:26,420 --> 01:07:27,854 visto la scorsa settimana? 1443 01:07:27,854 --> 01:07:29,900 >> AUDIENCE: [incomprensibile]. 1444 01:07:29,900 --> 01:07:30,860 >> DAVID MALAN: Si va da qualche parte, giusto? 1445 01:07:30,860 --> 01:07:32,720 Si va ad alcuni URL di destinazione. 1446 01:07:32,720 --> 01:07:34,120 Ma io non voglio che ciò accada qui. 1447 01:07:34,120 --> 01:07:37,620 Voglio che la mia pagina web, per essere completamente dinamico come Gmail, dove una volta che sei 1448 01:07:37,620 --> 01:07:38,650 lì, rimani lì. 1449 01:07:38,650 --> 01:07:42,900 L'URL non cambia in modo che indica l'intera pagina sta caricando. 1450 01:07:42,900 --> 01:07:46,680 Piuttosto, voglio solo cambiare qualcosa come stampare qualcosa 1451 01:07:46,680 --> 01:07:48,320 qui sullo schermo. 1452 01:07:48,320 --> 01:07:49,630 >> Ebbene vorrei pulire questo un po '. 1453 01:07:49,630 --> 01:07:55,370 Lasciatemi apro non dom-0, ma fammi apro dom-2. 1454 01:07:55,370 --> 01:07:57,350 Solo così hai visto una sintassi qui. 1455 01:07:57,350 --> 01:08:02,080 >> Si scopre che quello che abbiamo appena ha sta usando JavaScript crudo. 1456 01:08:02,080 --> 01:08:04,420 Quindi questo è veramente il linguaggio JavaScript. 1457 01:08:04,420 --> 01:08:07,340 Alcuni di voi potrebbe sapere di una libreria chiamata jQuery. 1458 01:08:07,340 --> 01:08:09,980 >> Quindi jQuery non è la stessa cosa come JavaScript. 1459 01:08:09,980 --> 01:08:14,110 E 'solo una libreria che davvero intelligente ragazzo ha scritto e diffuso tale 1460 01:08:14,110 --> 01:08:18,100 che quasi tutti nel mondo ora utilizza jQuery quando si utilizza JavaScript. 1461 01:08:18,100 --> 01:08:20,890 E a prima vista, onestamente, sembra un po 'più criptico. 1462 01:08:20,890 --> 01:08:24,990 Ma troverete, soprattutto se si va lì per il progetto finale con il web 1463 01:08:24,990 --> 01:08:29,029 sviluppo, vi accorgerete che questo pulisce le cose e consente di risparmiare un bel 1464 01:08:29,029 --> 01:08:30,229 poche righe di codice. 1465 01:08:30,229 --> 01:08:33,189 >> Così facciamo solo colpo d'occhio a come questa forma sta funzionando. 1466 01:08:33,189 --> 01:08:35,664 Notate cosa ho rimuovo apparentemente dal mio HTML? 1467 01:08:35,664 --> 01:08:38,240 1468 01:08:38,240 --> 01:08:40,630 Non c'è il submit handler per così dire. 1469 01:08:40,630 --> 01:08:41,470 Non c'è nessun attributo. 1470 01:08:41,470 --> 01:08:43,359 Perché si sa, cosa Non mi piace molto? 1471 01:08:43,359 --> 01:08:45,640 Mi sentivo come se fossimo cadendo nelle vecchie abitudini lì. 1472 01:08:45,640 --> 01:08:49,340 Proprio come stava cominciando a sentire sciatta a mescolarsi sia i CSS con 1473 01:08:49,340 --> 01:08:52,149 HTML, perché sei specie di buttare diverse lingue in tutto il 1474 01:08:52,149 --> 01:08:56,180 posto, allo stesso modo ha fatto questo inizia a sentire come una cattiva strada per andare giù dove 1475 01:08:56,180 --> 01:09:01,069 Sto mettendo codice JavaScript all'interno del mio HTML invece di factoring fuori. 1476 01:09:01,069 --> 01:09:02,279 >> Ecco, questo è la lezione qui. 1477 01:09:02,279 --> 01:09:05,080 In dom-2.html, sto factoring fuori. 1478 01:09:05,080 --> 01:09:07,399 E sto facendo le cose un po ' diversamente. 1479 01:09:07,399 --> 01:09:09,630 Per ora, ho intenzione di sventolare le mie mani a ciò che questo fa davvero 1480 01:09:09,630 --> 01:09:10,590 sotto la cappa. 1481 01:09:10,590 --> 01:09:14,210 Ma solo per ora supporre che quel primo riga di codice in questa biblioteca 1482 01:09:14,210 --> 01:09:18,170 chiamato jQuery significa solo quando la documento è pronto, fare quanto segue. 1483 01:09:18,170 --> 01:09:20,080 >> Perché le pagine web possono prendere po 'di tempo a caricare. 1484 01:09:20,080 --> 01:09:23,029 Potreste essere in un internet lenta connessione, e potrebbe essere la filatura 1485 01:09:23,029 --> 01:09:25,290 e la filatura, e, infine, è caricato. 1486 01:09:25,290 --> 01:09:29,060 Quella riga di codice dice solo attendere l'intera pagina è pronta, il documento 1487 01:09:29,060 --> 01:09:31,189 è pronto, prima di eseguire questo codice. 1488 01:09:31,189 --> 01:09:34,390 >> E ora notate, questo è probabilmente la più utile prima 1489 01:09:34,390 --> 01:09:36,189 togliere da jQuery. 1490 01:09:36,189 --> 01:09:42,140 Questa linea qui è molto simile nello spirito a questa linea molto più a lungo qui. 1491 01:09:42,140 --> 01:09:46,920 Considerando che nel codice JavaScript crudo, ci esiste un oggetto globale documento che 1492 01:09:46,920 --> 01:09:50,460 ha una funzione chiamata getElementById (), le persone che hanno scritto 1493 01:09:50,460 --> 01:09:55,720 jQuery semplificato che al solo dire simbolo del dollaro, e poi all'interno di 1494 01:09:55,720 --> 01:10:00,250 tra parentesi messo due citazioni, e poi mettere un cancelletto seguito dal 1495 01:10:00,250 --> 01:10:02,250 ID univoco si vuole afferrare. 1496 01:10:02,250 --> 01:10:06,170 Quindi questo è equivalente a document.getElementById. 1497 01:10:06,170 --> 01:10:11,090 >> Nel frattempo,. Inviare significa semplicemente su presentazione di qualsiasi forma sei 1498 01:10:11,090 --> 01:10:14,240 riferendosi a sinistra, andare avanti ed eseguire questa. 1499 01:10:14,240 --> 01:10:16,600 Ma questa è ormai la curiosità anche. 1500 01:10:16,600 --> 01:10:19,560 Cosa c'è di strano in ciò che Ho evidenziato qui? 1501 01:10:19,560 --> 01:10:23,840 1502 01:10:23,840 --> 01:10:28,594 Non solo è sorta di sintatticamente nuovo, c'è anche qualcosa che manca. 1503 01:10:28,594 --> 01:10:29,558 >> PUBBLICO: È appena chiamato funzione? 1504 01:10:29,558 --> 01:10:31,970 Non è chiamato avviso? 1505 01:10:31,970 --> 01:10:32,440 >> DAVID MALAN: Già. 1506 01:10:32,440 --> 01:10:35,450 Bene, così alert () è giù qui, ad essere sinceri. 1507 01:10:35,450 --> 01:10:39,520 Ma non vi è alcuna menzione di un nome, come si sa, foo o 1508 01:10:39,520 --> 01:10:40,980 qualcosa qui. 1509 01:10:40,980 --> 01:10:43,830 Ed in effetti, questa è una delle caratteristiche di JavaScript che è abbastanza 1510 01:10:43,830 --> 01:10:45,370 potente, ma anche abbastanza nuovo. 1511 01:10:45,370 --> 01:10:47,460 E PHP ha in realtà anche questo. 1512 01:10:47,460 --> 01:10:49,500 >> Lasciatemi andare avanti e fare qualcosa di reale veloce. 1513 01:10:49,500 --> 01:10:52,030 Lasciami andare avanti e mettere questo qui. 1514 01:10:52,030 --> 01:10:52,600 Permettetemi di fare questo. 1515 01:10:52,600 --> 01:10:53,690 Funzione. 1516 01:10:53,690 --> 01:10:56,455 Chiamiamo questo gestore (). 1517 01:10:56,455 --> 01:10:58,290 Una funzione del gestore per così dire. 1518 01:10:58,290 --> 01:11:00,110 Qualcosa che gestisce alcune operazioni. 1519 01:11:00,110 --> 01:11:02,700 Permettetemi di ripulire il mio rientro. 1520 01:11:02,700 --> 01:11:04,380 E mettere questo qui. 1521 01:11:04,380 --> 01:11:06,090 E mettere qui. 1522 01:11:06,090 --> 01:11:06,470 Yep. 1523 01:11:06,470 --> 01:11:07,060 OK. 1524 01:11:07,060 --> 01:11:10,300 >> Così ora ho una funzione chiamata handler () che io non so davvero 1525 01:11:10,300 --> 01:11:10,890 cosa fa ancora. 1526 01:11:10,890 --> 01:11:12,710 E 'solo ancora quella roba. 1527 01:11:12,710 --> 01:11:13,900 Whoops. 1528 01:11:13,900 --> 01:11:15,820 Ha preso troppo. 1529 01:11:15,820 --> 01:11:18,490 Cerchiamo di fare questo. 1530 01:11:18,490 --> 01:11:18,990 Bene. 1531 01:11:18,990 --> 01:11:20,240 Mi dispiace. 1532 01:11:20,240 --> 01:11:23,140 1533 01:11:23,140 --> 01:11:23,690 Bene. 1534 01:11:23,690 --> 01:11:24,720 Permettetemi di fare questo. 1535 01:11:24,720 --> 01:11:25,020 OK. 1536 01:11:25,020 --> 01:11:27,040 Che sembra piacevole e dritto avanti ora. 1537 01:11:27,040 --> 01:11:29,090 Permettetemi di fare questo. 1538 01:11:29,090 --> 01:11:29,860 Fate questo. 1539 01:11:29,860 --> 01:11:30,950 E OK. 1540 01:11:30,950 --> 01:11:33,080 Così ora, mettiamo questo qui. 1541 01:11:33,080 --> 01:11:35,840 1542 01:11:35,840 --> 01:11:37,270 Non più di programmazione al volo. 1543 01:11:37,270 --> 01:11:37,900 OK. 1544 01:11:37,900 --> 01:11:40,000 >> Così ora, torniamo a dove la storia ha avuto inizio. 1545 01:11:40,000 --> 01:11:43,530 In precedenza, ho detto che questa linea qui significa che quando il documento è pronto, andare 1546 01:11:43,530 --> 01:11:44,380 avanti e farlo. 1547 01:11:44,380 --> 01:11:45,660 Cosa voglio fare? 1548 01:11:45,660 --> 01:11:49,070 Bene in particolare, io voglio andare avanti e fare quanto segue. 1549 01:11:49,070 --> 01:11:53,700 Eseguire questa riga di codice, e quindi quello che voglio fare è chiamare questa 1550 01:11:53,700 --> 01:11:56,370 funzionare quando il modulo viene inviato. 1551 01:11:56,370 --> 01:11:57,730 >> Ora, questo è ciò che è interessante. 1552 01:11:57,730 --> 01:11:59,170 Questo non è esso stesso una funzione. 1553 01:11:59,170 --> 01:12:02,540 Notate che non sto mettendo tra parentesi qui in modo normale. 1554 01:12:02,540 --> 01:12:06,800 Sto letteralmente passando una funzione chiamata gestore () ad un'altra funzione 1555 01:12:06,800 --> 01:12:10,800 chiamato submit () come argomento come se è come una variabile. 1556 01:12:10,800 --> 01:12:14,290 E questa è una delle caratteristiche di JavaScript, è funzioni stesse 1557 01:12:14,290 --> 01:12:15,710 sono in realtà oggetti solo. 1558 01:12:15,710 --> 01:12:18,350 In realtà, sono in realtà solo variabili di qualche tipo. 1559 01:12:18,350 --> 01:12:21,340 E se il nome della funzione è handler (), non vi è alcun motivo per cui non posso 1560 01:12:21,340 --> 01:12:23,390 passarlo come argomento qui. 1561 01:12:23,390 --> 01:12:27,530 E questo significa che quando il modulo con l'ID di demo è 1562 01:12:27,530 --> 01:12:29,320 presentata, chiamare questa funzione. 1563 01:12:29,320 --> 01:12:32,770 >> Ma ora, se io sciolgo tutto questo, perché allora ho forse io 1564 01:12:32,770 --> 01:12:34,850 questo un momento fa? 1565 01:12:34,850 --> 01:12:36,840 Bene, questa è una funzione anonima. 1566 01:12:36,840 --> 01:12:41,080 Perché, francamente, ho capito perché sono io preoccuparsi di perdere tempo, che dichiara una 1567 01:12:41,080 --> 01:12:45,540 funzione chiamata handler () solo per chiamare in uno e un solo posto? 1568 01:12:45,540 --> 01:12:48,640 Se non ho bisogno del nome, e io non lo faccio bisogno di chiamare più di un luogo, 1569 01:12:48,640 --> 01:12:51,200 facciamo solo implementare la funzione proprio dove ne ho bisogno. 1570 01:12:51,200 --> 01:12:55,190 E così JavaScript e PHP sostenere quello sono chiamati funzioni anonime che 1571 01:12:55,190 --> 01:12:57,900 mi permetta di fare esattamente questo qui. 1572 01:12:57,900 --> 01:12:59,570 >> Ma stiamo solo grattando la superficie. 1573 01:12:59,570 --> 01:13:02,430 Diciamo stuzzicare con solo un paio ultimi esempi qui. 1574 01:13:02,430 --> 01:13:04,600 >> Se vado in quote.php. 1575 01:13:04,600 --> 01:13:07,160 1576 01:13:07,160 --> 01:13:11,870 Si noti che questo è in realtà un PHP funzione, un programma PHP, che ho scritto 1577 01:13:11,870 --> 01:13:15,270 che si aspetta un parametro chiamato HTTP simbolo, e posso passare 1578 01:13:15,270 --> 01:13:16,730 un valore come FB. 1579 01:13:16,730 --> 01:13:20,010 E se in realtà guardiamo alla fonte codice, questo sta interrogando un sito web gratuito 1580 01:13:20,010 --> 01:13:23,680 chiamato Yahoo Finance, proprio come p-set sette, e sta tornando a me 1581 01:13:23,680 --> 01:13:26,580 qualcosa a quanto pare il formato noto è JSON - 1582 01:13:26,580 --> 01:13:28,010 JavaScript Object Notation. 1583 01:13:28,010 --> 01:13:28,810 E 'solo un oggetto. 1584 01:13:28,810 --> 01:13:32,500 Notate le parentesi graffe, le citazioni, il colon, e le virgole. 1585 01:13:32,500 --> 01:13:34,720 >> Ora invece, questo è piuttosto fresco. 1586 01:13:34,720 --> 01:13:38,520 Perché io posso probabilmente usare una programmazione linguaggio per generare URL 1587 01:13:38,520 --> 01:13:40,370 che simile a questa dinamica, vero? 1588 01:13:40,370 --> 01:13:43,340 Posso cambiare questo a Google e tornare Google 1589 01:13:43,340 --> 01:13:47,930 prezzo delle azioni di $ 1,017.55. 1590 01:13:47,930 --> 01:13:49,640 Così vediamo se non possiamo usare questo momento. 1591 01:13:49,640 --> 01:13:56,590 >> Lasciami andare a ajax-0 qui, che appare come il seguente. 1592 01:13:56,590 --> 01:13:59,750 E 'solo un sito web che ha un form con un pulsante. 1593 01:13:59,750 --> 01:14:05,860 Lasciatemi qui andare avanti e digitare in YHOO per il simbolo azionario di Yahoo, fare clic su Get 1594 01:14:05,860 --> 01:14:10,530 Quote e ora accorgo ho ottenuto un avviso con 32.86. 1595 01:14:10,530 --> 01:14:14,050 >> Lasciatemi in realtà andare a una versione più elaborata di questa pagina, la versione due, e 1596 01:14:14,050 --> 01:14:17,530 digitare in diciamo Microsoft, MSFT. 1597 01:14:17,530 --> 01:14:18,410 Preventivo. 1598 01:14:18,410 --> 01:14:19,850 E ora notare, nessun allarme. 1599 01:14:19,850 --> 01:14:22,770 Notate dove si dice prezzo da determinarsi? 1600 01:14:22,770 --> 01:14:27,060 Vi è il più semplice degli esempi che allude a ciò che Gchat, e Facebook 1601 01:14:27,060 --> 01:14:30,070 Chat, e Gmail, e di altri come siti web stanno facendo da realtà 1602 01:14:30,070 --> 01:14:31,290 cambiare la pagina web. 1603 01:14:31,290 --> 01:14:31,800 >> Notare questo. 1604 01:14:31,800 --> 01:14:33,120 Lasciatemi ricaricare la pagina. 1605 01:14:33,120 --> 01:14:35,080 Lasciatemi apro ispettore di Chrome. 1606 01:14:35,080 --> 01:14:36,890 Lasciami andare agli elementi scheda qui. 1607 01:14:36,890 --> 01:14:42,310 Ora notare se lo zoom in qui e aprire questo, si noti che questo è il mio 1608 01:14:42,310 --> 01:14:44,500 HTML DOM - la mia document object model. 1609 01:14:44,500 --> 01:14:45,920 Questo è il mio HTML. 1610 01:14:45,920 --> 01:14:48,750 Ma ora notate, anche se sta andando essere un po 'difficile da vedere in entrambi 1611 01:14:48,750 --> 01:14:52,080 posti contemporaneamente, se digito FB qui, guardare il fondo 1612 01:14:52,080 --> 01:14:54,110 del campo inquadrato. 1613 01:14:54,110 --> 01:14:57,720 >> In realtà cambiando il mio HTML al volo. 1614 01:14:57,720 --> 01:15:01,670 E che sta facendo questo semplicemente facendo qualcosa di simile. 1615 01:15:01,670 --> 01:15:06,800 Se apro ajax-2, l'avviso di esecuzione qualcosa di sexy come 1616 01:15:06,800 --> 01:15:09,560 che, anche se è abbastanza brutto, ma sofisticato come quello 1617 01:15:09,560 --> 01:15:11,910 funzionalmente, ha qualche HTML nella parte inferiore. 1618 01:15:11,910 --> 01:15:13,810 Ma accorgo che ho usato per etichettare. 1619 01:15:13,810 --> 01:15:16,640 Noi non abbiamo usato prima, ma questo è come, ma non forza 1620 01:15:16,640 --> 01:15:17,840 tutto su una nuova linea. 1621 01:15:17,840 --> 01:15:20,830 Si fa solo una regione rettangolare sulla stessa linea sostanzialmente. 1622 01:15:20,830 --> 01:15:22,870 >> Si noti che ho dato un ID di prezzo. 1623 01:15:22,870 --> 01:15:26,800 E si scopre utilizzando lo stesso JavaScript biblioteca, ho una funzione 1624 01:15:26,800 --> 01:15:30,440 chiamato citazione (), che chiama ogni volta il modulo viene inviato. 1625 01:15:30,440 --> 01:15:31,800 E quello che sto facendo è questo. 1626 01:15:31,800 --> 01:15:35,730 Sto dichiarare una variabile in JavaScript chiamato url, salvando il valore 1627 01:15:35,730 --> 01:15:38,650 quote.php simbolo? =. 1628 01:15:38,650 --> 01:15:44,220 In altre parole, mi sto cominciando per preparare una richiesta HTTP, e quindi 1629 01:15:44,220 --> 01:15:49,250 Sto concatenando su quella con un plus qualunque sia l'elemento con l'ID 1630 01:15:49,250 --> 01:15:54,190 di simbolo è, che l'avviso è che campo di testo fino qui. 1631 01:15:54,190 --> 01:15:56,630 Quindi, proprio come abbiamo avuto forme del passato. 1632 01:15:56,630 --> 01:16:01,450 >> E poi si scopre in jQuery, se chiamare. val (), che chiama di val 1633 01:16:01,450 --> 01:16:05,900 funzione, una funzione di valore, che ottiene tutto ciò che l'utente ha digitato dentro 1634 01:16:05,900 --> 01:16:08,920 E allora tutto il traffico di rete ciò che accade è questo. 1635 01:16:08,920 --> 01:16:11,230 $. GetJSON. 1636 01:16:11,230 --> 01:16:13,720 >> E per inciso, il simbolo del dollaro è solo una notazione abbreviata. 1637 01:16:13,720 --> 01:16:16,860 E 'davvero jQuery.getJSON. 1638 01:16:16,860 --> 01:16:21,520 Portami a JSON da questo URL, e quando la richiesta ritorna, chiamare questo 1639 01:16:21,520 --> 01:16:26,550 funzione e passare come argomento qualunque sia tornato dal server. 1640 01:16:26,550 --> 01:16:31,205 >> Quindi, in altre parole, se torno al del browser, e torno a quote.php, 1641 01:16:31,205 --> 01:16:35,590 ciò che il mio browser sta facendo è sempre questo blocco di dati. 1642 01:16:35,590 --> 01:16:38,930 E quando vado a questa pagina web qui, notare se noi invece andiamo alla rete 1643 01:16:38,930 --> 01:16:43,820 linguetta e chiaro, quindi digitare qualcosa come GOOG per Google e ottenere 1644 01:16:43,820 --> 01:16:46,340 Quote, si noti che la pagina non è cambiata. 1645 01:16:46,340 --> 01:16:50,990 Ma una richiesta HTTP è stato fatto, e ciò che tornato qui se guardiamo al 1646 01:16:50,990 --> 01:16:56,130 la risposta è un insieme di JSON che accedessimo infine con 1647 01:16:56,130 --> 01:16:58,070 questa semplice linea qui. 1648 01:16:58,070 --> 01:17:00,150 >> I dati sono ciò che è stato ottenuto dal server. 1649 01:17:00,150 --> 01:17:02,120 Il prezzo è il nome del Tasto mi preoccupo. 1650 01:17:02,120 --> 01:17:05,230 Così data.price mi dà questo. 1651 01:17:05,230 --> 01:17:07,540 >> Ora intanto, e questo è l'ultimo esempio. 1652 01:17:07,540 --> 01:17:09,280 Si può fare ancora di più con la pagina. 1653 01:17:09,280 --> 01:17:12,440 Una realtà, ben due. 1654 01:17:12,440 --> 01:17:14,780 Siamo in grado di riportare la tag, se vi ricordate questo. 1655 01:17:14,780 --> 01:17:15,850 Ecco JavaScript. 1656 01:17:15,850 --> 01:17:17,110 Possiamo farlo. 1657 01:17:17,110 --> 01:17:17,690 Molto emozionante. 1658 01:17:17,690 --> 01:17:18,800 Lasceremo che, come un cliffhanger. 1659 01:17:18,800 --> 01:17:21,590 >> Ma più eccitante, è possibile fare cose come questa. 1660 01:17:21,590 --> 01:17:25,940 Se vado a geolocalizzazione-1, si scopre che Chrome sa che siamo a 1661 01:17:25,940 --> 01:17:30,672 longitudine latitudine 42.37. -71,10. 1662 01:17:30,672 --> 01:17:32,940 Quindi c'è ancora di più ci a vostra disposizione. 1663 01:17:32,940 --> 01:17:34,290 Ma più che la prossima settimana. 1664 01:17:34,290 --> 01:17:35,540 Ci vediamo Lunedi. 1665 01:17:35,540 --> 01:17:37,558