1 00:00:00,000 --> 00:00:01,940 >> [MUSIC JOC] 2 00:00:01,940 --> 00:00:11,130 3 00:00:11,130 --> 00:00:14,620 >> DAVID MALAN: Aceasta este CS 50, și acesta este începutul săptămânii nouă. 4 00:00:14,620 --> 00:00:18,240 Și ceea ce ne-am gândit facem astăzi nu este închide doar capitolul privind ultima saptamana 5 00:00:18,240 --> 00:00:22,670 material în care ne-am concentrat pe serverul partea de programare web cu PHP si SQL, 6 00:00:22,670 --> 00:00:23,549 unele chestii de baze de date. 7 00:00:23,549 --> 00:00:25,590 Vom vorbi despre un pic de astăzi securitate și apoi 8 00:00:25,590 --> 00:00:29,590 tranziția la o programare partea de client Limba cunoscut sub numele de JavaScript. 9 00:00:29,590 --> 00:00:31,330 Dar, mai întâi, unele răscumpărare. 10 00:00:31,330 --> 00:00:35,030 >> Aveți dreptul să reamintească faptul că pe Miercuri, am stabilit 11 00:00:35,030 --> 00:00:37,550 pentru a scrie un site web care a luat în datele introduse de utilizator de 12 00:00:37,550 --> 00:00:41,120 de o forma HTML care apoi stocate că numele de intrare utilizator, telefon 13 00:00:41,120 --> 00:00:43,124 numere, și cellphone transportatorii din baza de date. 14 00:00:43,124 --> 00:00:45,540 Și apoi am avut un pic de comandă script line, scris în PHP 15 00:00:45,540 --> 00:00:47,956 care ar fi trebuit să itera peste rândurile din baza de date 16 00:00:47,956 --> 00:00:49,400 și trimite mesaje text. 17 00:00:49,400 --> 00:00:53,870 În ciuda mai multor mai multe încercări, am nu am primit că de lucru până la sfârșitul anului. 18 00:00:53,870 --> 00:00:57,820 >> Așa că mi-am petrecut toată această săptămână de lucru pe care cod pentru a ne trece la punctul 19 00:00:57,820 --> 00:01:01,220 de unde am rămas, în care toate Am primit până la sfârșitul anului miercuri 20 00:01:01,220 --> 00:01:05,500 a fost acest mesaj de tip text de la Margo ca m-am luptat, 21 00:01:05,500 --> 00:01:09,940 urmată de un mesaj text de la un alt coleg de clasa, Ai această David. 22 00:01:09,940 --> 00:01:14,030 Urmat de acesta, minunat încurajator. 23 00:01:14,030 --> 00:01:15,840 Păstrate în curs de desfășurare, foarte încurajator. 24 00:01:15,840 --> 00:01:20,960 Aproape am ajuns până la then-- și asta e nota ne-am încheiat miercuri. 25 00:01:20,960 --> 00:01:25,850 Și apoi, de fapt, probabil, favorita mea, o clipă mai târziu, aceasta a venit în. 26 00:01:25,850 --> 00:01:27,000 Al naibii de live stream. 27 00:01:27,000 --> 00:01:31,080 >> Așa că astăzi, ne-am stabili acest lucru cu o rapidă uita-te la ceea ce am făcut de atunci. 28 00:01:31,080 --> 00:01:35,440 Deci, toate de acest cod este disponibil on-line de săptămâna trecută, opt saptamani, 29 00:01:35,440 --> 00:01:36,300 codul sursă. 30 00:01:36,300 --> 00:01:39,425 Și veți vedea că am trecut, și de fapt am curățat lucrurile un pic. 31 00:01:39,425 --> 00:01:42,080 Am introdus un cuplu alt caracteristici ale unei baze de date SQL. 32 00:01:42,080 --> 00:01:45,300 De exemplu, mai degrabă decât doar face purtător de var char 33 00:01:45,300 --> 00:01:47,310 așa cum cred că am făcut-o pe zbor săptămâna trecută. 34 00:01:47,310 --> 00:01:49,820 Am loc să-l definiți ca ceea ce se numește o enumerare. 35 00:01:49,820 --> 00:01:53,310 >> Și unii dintre voi s-ar fi văzut acest lucru așa cum am explorat C. Enum este, de fapt 36 00:01:53,310 --> 00:01:56,820 o caracteristică a C, unde puteți enumera o grămadă de constante 37 00:01:56,820 --> 00:01:59,640 și să le atribuie valori automate, ca unul, doi, trei, patru 38 00:01:59,640 --> 00:02:01,330 fără a fi nevoie să numere de cod dure. 39 00:02:01,330 --> 00:02:04,780 Deci, SQL susține același lucru, prin care în cazul în care aveți un câmp de bază de date pe care doar tu 40 00:02:04,780 --> 00:02:09,389 doresc să ia pe unul dintre finit Valorile puteti specifica literalmente 41 00:02:09,389 --> 00:02:13,120 așa cum am făcut acolo pentru patru transportatorii populare telefoane mobile din SUA. 42 00:02:13,120 --> 00:02:13,819 >> Așa că am făcut asta. 43 00:02:13,819 --> 00:02:16,610 Și am făcut o serie de modificări ca bine, din care cel mai important 44 00:02:16,610 --> 00:02:20,090 a fost de a se lucra e-mail deoarece rechemare, că acest program bazat pe care 45 00:02:20,090 --> 00:02:23,470 în general, numit un e-mail la SMS gateway, care este doar 46 00:02:23,470 --> 00:02:27,670 un mod fantezist de a spune că Verizon, și AT & T, precum și alte persoane să sprijine un server, 47 00:02:27,670 --> 00:02:30,740 prin care în cazul în care primește e-mail, acesta se convertește la SMS 48 00:02:30,740 --> 00:02:33,290 și trimite un text Mesajul pe telefonul cuiva. 49 00:02:33,290 --> 00:02:37,010 Deci, dacă am făcut acest lucru în mod corect, aici este o formă nouă și îmbunătățită 50 00:02:37,010 --> 00:02:39,259 care este de gând să vorbesc cu Codul noi și îmbunătățite, care 51 00:02:39,259 --> 00:02:40,300 poți să te joci cu on-line. 52 00:02:40,300 --> 00:02:44,140 Și-l va face, sperăm meu bip telefon intr-o clipa. 53 00:02:44,140 --> 00:02:47,240 >> Deci, în primul rând, am de gând să tastați în numele meu. 54 00:02:47,240 --> 00:02:51,400 În al doilea rând, eu nu am de gând pentru a face acest lucru acest moment. 55 00:02:51,400 --> 00:02:53,920 Am de gând să-mi Controlați Element. 56 00:02:53,920 --> 00:02:56,710 Iar acesta este doar un lucru mic, așa că nu 57 00:02:56,710 --> 00:02:59,250 crea de ore de post-productie lucra așa cum am făcut data trecută. 58 00:02:59,250 --> 00:03:02,300 Există acum este numărul meu de telefon. 59 00:03:02,300 --> 00:03:03,560 >> O să selectați Verizon. 60 00:03:03,560 --> 00:03:10,260 Și aici, să porniți acest microfon aici, și vizează acest lucru la telefonul meu aici. 61 00:03:10,260 --> 00:03:13,130 Am de gând să faceți clic pe Înregistrare, care ar trebui să sperăm 62 00:03:13,130 --> 00:03:14,530 pune-l în baza de date. 63 00:03:14,530 --> 00:03:16,780 Acum am de gând să merg la program de linie de comandă, care 64 00:03:16,780 --> 00:03:20,825 rechemare a fost numit slash punct text, și cruce degetele. 65 00:03:20,825 --> 00:03:24,092 66 00:03:24,092 --> 00:03:26,527 Aici vom merge. 67 00:03:26,527 --> 00:03:27,501 >> [Faliment telefon] 68 00:03:27,501 --> 00:03:28,962 >> [Aplauze] 69 00:03:28,962 --> 00:03:31,815 70 00:03:31,815 --> 00:03:34,940 DAVID MALAN: Deci, mult mai distractiv decât asta: e distractiv, desigur, dacă am lua în ea. 71 00:03:34,940 --> 00:03:38,004 Dar e mult mai distractiv, m-am gândit, dacă am a creat unul dintre acele momente din filme 72 00:03:38,004 --> 00:03:40,420 în cazul în care ca și cum ceva cu adevarat rău sa întâmplat în lume, 73 00:03:40,420 --> 00:03:42,860 și la fel ca toți oamenii NSA telefoane mobile începe bip 74 00:03:42,860 --> 00:03:44,860 cu mesaje text alertarea-le la acest fapt. 75 00:03:44,860 --> 00:03:47,026 Așa că am crezut că vom încerca pentru a recrea la fel aici, 76 00:03:47,026 --> 00:03:49,610 care nu folosesc o bază de date, Eu în schimb în avans 77 00:03:49,610 --> 00:03:51,490 a scris un program care arata ca acest lucru. 78 00:03:51,490 --> 00:03:53,660 >> Aceasta este o index.php-- și am pus on-line de acest cod 79 00:03:53,660 --> 00:03:56,710 ca well-- care, aparent, doar face form.php, 80 00:03:56,710 --> 00:04:00,990 folosind un stil de paradigmă MVC pe care le vorbim despre mai în detaliu în set problemă 81 00:04:00,990 --> 00:04:01,650 șapte. 82 00:04:01,650 --> 00:04:02,910 Această formă este destul de simplu. 83 00:04:02,910 --> 00:04:06,634 Se va prezenta la un fișier numit here.php prin poștă. 84 00:04:06,634 --> 00:04:09,300 Și se pare că o să întreb pentru un nume, și un număr de telefon, 85 00:04:09,300 --> 00:04:11,400 și apoi prin așa-numitul Selectați meniu, e 86 00:04:11,400 --> 00:04:14,250 O să vă dau cel puțin patru transportatorii populare telefoane mobile din SUA, 87 00:04:14,250 --> 00:04:17,470 și apoi vă permit să eficient ia prezență click aici. 88 00:04:17,470 --> 00:04:20,471 >> Și aici, între timp, se va împrumuta o parte din codul de ultima ora. 89 00:04:20,471 --> 00:04:22,553 Și dacă tocmai ați degresat acest lucru, veți vedea că nu există 90 00:04:22,553 --> 00:04:23,900 o grămadă de verificarea erorilor. 91 00:04:23,900 --> 00:04:26,640 Dar frumusetea de la final este că noi nu scriem pentru o bază de date de astăzi. 92 00:04:26,640 --> 00:04:29,130 Suntem o ține simplu și doar trimiterea sperăm 93 00:04:29,130 --> 00:04:32,190 un mesaj text prin intermediul funcției I a scris în ultimii câteva zile apelul 94 00:04:32,190 --> 00:04:36,270 Text, care este în Funcții. php, care este din nou disponibil on-line. 95 00:04:36,270 --> 00:04:38,210 >> Deci, dacă doriți să ia parte în acest sens. 96 00:04:38,210 --> 00:04:40,190 Noi nu vom fi stocarea nimic. 97 00:04:40,190 --> 00:04:43,809 Du-te la această adresă URL aici, în timp real. 98 00:04:43,809 --> 00:04:46,850 Nu-l prezinte doar încă, dar hai sa a se vedea dacă putem avea una dintre aceste film 99 00:04:46,850 --> 00:04:49,830 momente în care telefonul mobil toată lumea începe bip, sperăm, doar 100 00:04:49,830 --> 00:04:53,580 o dată în acest an, spre deosebire de 2011 în cazul în care aceasta a mers oribil razna. 101 00:04:53,580 --> 00:04:58,910 Și odată ce te duci la acea adresă, ar trebui să vedeți o formă super-simplu 102 00:04:58,910 --> 00:05:03,884 că, dacă aveți un nume, un telefon mobil număr, și un purtător telefon mobil care 103 00:05:03,884 --> 00:05:06,175 Meciuri lista de acolo, du-te înainte și completați formularul. 104 00:05:06,175 --> 00:05:07,880 Dar nu a lovit prezintă încă. 105 00:05:07,880 --> 00:05:10,850 >> Forma va arata asa. 106 00:05:10,850 --> 00:05:13,660 Du-te și tastați numele, numărul de telefon. 107 00:05:13,660 --> 00:05:17,670 OOP, cineva va inainte de curba. 108 00:05:17,670 --> 00:05:18,170 E în regulă. 109 00:05:18,170 --> 00:05:19,340 OK, toată lumea e completat formularul. 110 00:05:19,340 --> 00:05:21,400 Acest lucru ar trebui să funcționeze pe o telefon, de asemenea, dacă doriți. 111 00:05:21,400 --> 00:05:23,695 Bine, pe locuri, fiți gata, start. 112 00:05:23,695 --> 00:05:24,195 Lovit aici. 113 00:05:24,195 --> 00:05:27,275 114 00:05:27,275 --> 00:05:27,775 Ce? 115 00:05:27,775 --> 00:05:31,140 116 00:05:31,140 --> 00:05:31,640 Nu. 117 00:05:31,640 --> 00:05:34,410 118 00:05:34,410 --> 00:05:40,250 Jur pe Dumnezeu, am testat aceasta de mai multe ori astăzi. 119 00:05:40,250 --> 00:05:41,720 Te-ai prins? 120 00:05:41,720 --> 00:05:43,145 >> [Interpunerea VOCI] 121 00:05:43,145 --> 00:05:46,470 122 00:05:46,470 --> 00:05:49,560 >> DAVID MALAN: OK, eroare utilizator poate. 123 00:05:49,560 --> 00:05:50,550 Asta-i două. 124 00:05:50,550 --> 00:05:53,300 Ea a lucrat pentru doi dintr-un câteva sute, trei, patru. 125 00:05:53,300 --> 00:05:55,940 OK, asta e bine. 126 00:05:55,940 --> 00:05:58,520 Patru din cinci pentru corectitudine cum despre. 127 00:05:58,520 --> 00:05:59,810 >> Deci, ce sa întâmplat? 128 00:05:59,810 --> 00:06:02,727 Deci, probabil, fără să vadă tău ecrane, de ce s-ar putea fi errored? 129 00:06:02,727 --> 00:06:05,518 Este, probabil, că am fost pur și simplu încercarea de a face prea multe conexiuni 130 00:06:05,518 --> 00:06:08,110 la serverul e-mail de la Harvard tot la dată de la aceeași adresă IP. 131 00:06:08,110 --> 00:06:10,740 Sunt doar ghicitul, deoarece nu am făcut- au luxul de testare 132 00:06:10,740 --> 00:06:13,220 acest cod cu unele 300 de persoane in avans 133 00:06:13,220 --> 00:06:16,040 dar de acum seama că că cel puțin ar trebui 134 00:06:16,040 --> 00:06:18,250 au ajuns treaba acest moment. 135 00:06:18,250 --> 00:06:22,880 >> Bine, deci de ce este asta tot mai mult Germane a ceea ce se întâmplă? 136 00:06:22,880 --> 00:06:24,900 Ei bine în primul rând, o rapidă cuplu de anunțuri. 137 00:06:24,900 --> 00:06:29,350 Deci, unul, dacă doriți să se alăture Chang, și Nick, și alții la masa de prânz vineri, 138 00:06:29,350 --> 00:06:32,400 face RSVP la URL-ul obișnuit acolo. 139 00:06:32,400 --> 00:06:35,650 Dacă sunteți de gândire de concentrare sau a face un secundar în CS, 140 00:06:35,650 --> 00:06:38,941 dacă ești un al doilea de studentie, sau student în anul întâi, sau chiar junior sau senior în acest moment 141 00:06:38,941 --> 00:06:42,490 și poate stoarce încă la cursuri, dau seama că școala de inginerie 142 00:06:42,490 --> 00:06:45,620 este colectarea gratuit Ben și Înghețată Jerry și consultanță 143 00:06:45,620 --> 00:06:48,910 acest miercuri la scurt timp după clasă la 04:00 în clădirea CS 144 00:06:48,910 --> 00:06:49,771 la Maxwell Dworkin. 145 00:06:49,771 --> 00:06:51,520 În cazul în care acest lucru este prea rapid pe ecran, du-te 146 00:06:51,520 --> 00:06:55,260 a cs50.harvard.edu pentru o link către eveniment Facebook 147 00:06:55,260 --> 00:06:57,140 unde puteți vedea mai multe detalii. 148 00:06:57,140 --> 00:07:01,390 >> Între timp, m-am gândit mi-ar corecta un alt lucru pe care mi goofed miercuri. 149 00:07:01,390 --> 00:07:04,400 Se pare că ID-ul lui Mark pe Facebook nu a fost trei. 150 00:07:04,400 --> 00:07:05,230 A fost patru. 151 00:07:05,230 --> 00:07:08,330 Se pare că el a avut mai multe încercare Conturile decât îmi amintesc. 152 00:07:08,330 --> 00:07:12,400 Dar ceea ce a simțit acest lucru ca o oportunitate să faci este să trage un URL de genul asta. 153 00:07:12,400 --> 00:07:16,680 >> Deci, se dovedește că Facebook are un API, Application Programming Interface, 154 00:07:16,680 --> 00:07:20,070 care este un mecanism prin care voi pot solicita date prin programare 155 00:07:20,070 --> 00:07:24,480 la Facebook și să se întoarcă mașină informații care pot fi citite, nu pagini web 156 00:07:24,480 --> 00:07:28,690 dar doar text crud, ceva numita JavaScript Object Notation. 157 00:07:28,690 --> 00:07:32,150 Și de fapt, dacă am vizita acest URL-ul, și zoom in, în mod implicit, 158 00:07:32,150 --> 00:07:34,960 acest lucru este Mark public informații accesibile. 159 00:07:34,960 --> 00:07:37,430 >> Și interesant Detalii aici este doar faptul că ID-ul său 160 00:07:37,430 --> 00:07:40,670 este într-adevăr, numărul patru, pe care am a dat seama imediat ce am făcut asta. 161 00:07:40,670 --> 00:07:44,260 Puteți face acest lucru singuri, dacă știi numele de utilizator Facebook, dacă aveți unul. 162 00:07:44,260 --> 00:07:45,440 Doar introduceți-o până sus acolo. 163 00:07:45,440 --> 00:07:46,640 Și nimic din toate acestea este privat. 164 00:07:46,640 --> 00:07:48,670 Eu doar fac acest lucru chiar în modul incognito. 165 00:07:48,670 --> 00:07:49,900 Deci, eu nici măcar nu mă autentificat. 166 00:07:49,900 --> 00:07:54,440 Și tu văzând că eu se pare că a fost numărul utilizator 6454 167 00:07:54,440 --> 00:07:56,480 pe Facebook, care nu este prea rău în aceste zile. 168 00:07:56,480 --> 00:07:59,900 Deci, oricum, veți vedea, de asemenea, informații suplimentare acolo. 169 00:07:59,900 --> 00:08:02,150 >> Și aspectul util de care este că 170 00:08:02,150 --> 00:08:06,890 ar putea scrie software-ul propriu că integrează într-un fel de date, cum ar fi acest lucru 171 00:08:06,890 --> 00:08:08,170 în propria aplicație. 172 00:08:08,170 --> 00:08:10,650 Puteți împuternici utilizatori la conectați la site-ul dvs., 173 00:08:10,650 --> 00:08:14,190 nu folosind propriul lor nume de utilizator personalizat și Ați dar poate de conectare de Facebook 174 00:08:14,190 --> 00:08:16,170 și obține informații chiar despre prietenii lor, 175 00:08:16,170 --> 00:08:18,740 în cazul în care aprobă astfel de, sau similar. 176 00:08:18,740 --> 00:08:21,430 Astfel act de faptul că CS50, de asemenea, are ceva din propriile API-uri, 177 00:08:21,430 --> 00:08:24,620 una pentru datele catalog desigur, unii pentru meniurile care se îmbrățișări din mese 178 00:08:24,620 --> 00:08:26,730 hale, tot de la clădiri și locații 179 00:08:26,730 --> 00:08:30,930 în campus, avem un API pentru la fel de bine pe care le puteți interoga în mod similar și de a lua 180 00:08:30,930 --> 00:08:35,520 Date textual spate pe care le puteți integra într-o PHP, JavaScript sau, sau chiar, 181 00:08:35,520 --> 00:08:38,320 deși mai puțin frecvent, o C pe bază de proiect final. 182 00:08:38,320 --> 00:08:41,190 >> Într-adevăr, înainte de finala proiect sunt câteva repere. 183 00:08:41,190 --> 00:08:42,980 Ai un e-mail de la noi ieri. 184 00:08:42,980 --> 00:08:45,761 Dau seama că propunerea acest lucru se datorează luni care vine. 185 00:08:45,761 --> 00:08:49,010 Nu e neaparat obligatoriu, dar te aveți nevoie pentru a primi semenii didactice 186 00:08:49,010 --> 00:08:51,260 aprobare înainte de a face ulterior, orice modificări. 187 00:08:51,260 --> 00:08:54,280 Și apoi mai departe constitue un număr de alte repere. 188 00:08:54,280 --> 00:08:56,542 >> Deci, pentru a te tachineze, de asemenea, cu unele posibilități, 189 00:08:56,542 --> 00:08:58,250 avem o grămadă de aceste becuri nuanță. 190 00:08:58,250 --> 00:09:01,190 Și unii dintre voi au acum unele dintre acestea în camera ta de cămin, de asemenea. 191 00:09:01,190 --> 00:09:02,920 Și ei au prea o API. 192 00:09:02,920 --> 00:09:07,300 Deci, amintesc acele săptămâni becuri binare Acum că Dan Bradley și Ansel 193 00:09:07,300 --> 00:09:08,780 Duff a creat pentru noi. 194 00:09:08,780 --> 00:09:12,560 Ei au folosit o interfață software pentru a acest bec, care în acest moment 195 00:09:12,560 --> 00:09:15,232 este conectată la energie electrică și apoi prin wireless 196 00:09:15,232 --> 00:09:17,690 este conectat la un lucru mic numit Podul aici, 197 00:09:17,690 --> 00:09:21,280 ca un mic de proprietate router la acest aparat. 198 00:09:21,280 --> 00:09:26,540 >> Dar se pare că dacă știu cum să trimite mesaje HTTP, ca noi toți acum facem, 199 00:09:26,540 --> 00:09:31,670 Pot trimite un mesaj ca aceasta să acest bec pentru a porni sau opri 200 00:09:31,670 --> 00:09:34,000 sau de a face orice număr de alte operațiuni pe ea. 201 00:09:34,000 --> 00:09:36,110 Observați că nu este înțeles, nu este posta. 202 00:09:36,110 --> 00:09:37,760 Mai este unul numit put. 203 00:09:37,760 --> 00:09:39,630 Nu e de fapt alte câteva astfel de verbe. 204 00:09:39,630 --> 00:09:42,920 Dar observați există o cale acolo, slash API, slash nou dezvoltator, 205 00:09:42,920 --> 00:09:44,990 slash lumina, slash unul, slash stat. 206 00:09:44,990 --> 00:09:49,060 >> Asta e aparent doar cale că societatea, Philips, 207 00:09:49,060 --> 00:09:51,640 a decis că trebuie să lovi cu o cerere HTTP 208 00:09:51,640 --> 00:09:55,010 dacă doriți să modificați starea a bulbului prin HTTP 1.1. 209 00:09:55,010 --> 00:09:56,380 Apoi observați linia de gol. 210 00:09:56,380 --> 00:10:00,170 Și apoi în cele din urmă ceea ce arata ca un fel de tablou de un anumit fel, 211 00:10:00,170 --> 00:10:04,730 aceasta din nou, va fi numit JavaScript Object Notation, sau Jason. 212 00:10:04,730 --> 00:10:08,000 Și ceea ce vedeți aici este că există trei perechi de valori-cheie. 213 00:10:08,000 --> 00:10:09,115 >> O cheie este numit pe. 214 00:10:09,115 --> 00:10:10,990 Și valoarea ei aparent va fi adevărat. 215 00:10:10,990 --> 00:10:13,612 Luminozitatea este de 128, ceea ce este un fel de int. 216 00:10:13,612 --> 00:10:15,820 Și apoi timp de tranziție este zero, ceea ce este aparent 217 00:10:15,820 --> 00:10:17,970 cât de mult o să să ia pentru a transforma acest lucru pe. 218 00:10:17,970 --> 00:10:19,890 >> Deci, chiar acum acest bec este oprit. 219 00:10:19,890 --> 00:10:22,880 Dar dacă am face exact asta: lasa mă să merg la o foaie de ieftin mic 220 00:10:22,880 --> 00:10:25,200 că Dan înființat în advance-- și am de gând 221 00:10:25,200 --> 00:10:27,920 a merge mai departe și copiere comanda de mai jos. 222 00:10:27,920 --> 00:10:30,200 Curl, așa cum unii dintre voi ar fi spicuite pe CS50 223 00:10:30,200 --> 00:10:35,080 Discutați este un utilitar ca Telnet astfel de pe care le puteți simula cereri HTTP, 224 00:10:35,080 --> 00:10:36,360 pune în mod special. 225 00:10:36,360 --> 00:10:39,710 Pot trimite datele, exact ceea ce tocmai am 226 00:10:39,710 --> 00:10:43,430 a văzut o clipă în urmă specific pentru această adresă URL aici. 227 00:10:43,430 --> 00:10:46,310 Și apoi Curl este de gând să se ocupe de toate antetele necesare 228 00:10:46,310 --> 00:10:47,600 și parsarea acolo de. 229 00:10:47,600 --> 00:10:54,700 >> Deci tot ce trebuie să faceți este să copiați acest lucru în o fereastră terminal și apoi apăsați Enter. 230 00:10:54,700 --> 00:10:56,000 Și becul merge mai departe. 231 00:10:56,000 --> 00:10:59,060 Și acest lucru este tot trece printr- calculatorul meu fără fir 232 00:10:59,060 --> 00:11:01,960 într-un fel în jos pe punte, care este apoi vorbesc cu acest bec. 233 00:11:01,960 --> 00:11:02,960 Pot să fac altceva. 234 00:11:02,960 --> 00:11:07,050 Pot face acest lucru du-te roșu, de exemplu. 235 00:11:07,050 --> 00:11:11,040 Eu pot face, de exemplu, acest lucru du-te verde. 236 00:11:11,040 --> 00:11:12,220 Pot face să meargă albastru. 237 00:11:12,220 --> 00:11:14,760 >> Și observa in fiecare dintre acestea instanțe, toate că eu sunt în schimbare 238 00:11:14,760 --> 00:11:18,540 este așa-numita valoare de nuanță de fapt da unele de culoare. 239 00:11:18,540 --> 00:11:20,320 Așa că lasă-mă să inserați acesta în la fel de bine. 240 00:11:20,320 --> 00:11:21,000 Acum e albastru. 241 00:11:21,000 --> 00:11:24,672 >> Și tu poți face chiar crescator lucrurile where-- să mergem la verde. 242 00:11:24,672 --> 00:11:26,630 Și am putea face acest lucru de desigur, cu propriul meu cod. 243 00:11:26,630 --> 00:11:30,670 Dar chiar și API-ul în sine sprijină operațiunile funky, 244 00:11:30,670 --> 00:11:35,510 ca aceasta, care va deranja acum ne pentru următoarele 30 secunde. 245 00:11:35,510 --> 00:11:39,170 >> Deci, asta e una gust de ceea ce s-ar putea face cu un API, aceasta implicând 246 00:11:39,170 --> 00:11:40,010 becuri. 247 00:11:40,010 --> 00:11:42,510 Rețineți că CS50 are un cuplu perechi de Google Glass dacă doriți 248 00:11:42,510 --> 00:11:45,380 Vrei să abordeze ceva de-a lungul aceste linii, Arduino Unos, care 249 00:11:45,380 --> 00:11:48,670 sunt calculatoare minuscule, în esență, pe o placă de circuit mic 250 00:11:48,670 --> 00:11:50,470 pe care le puteți conecta cabluri și alte lucruri 251 00:11:50,470 --> 00:11:52,732 a și efectiv de control -ul mediu din lumea reală. 252 00:11:52,732 --> 00:11:54,940 Și apoi există un cuplu de jucării noi pe care le avem. 253 00:11:54,940 --> 00:11:59,294 Acesta literalmente tocmai a sosit altă zi prin e-mail, un Myo banderolă. 254 00:11:59,294 --> 00:12:01,710 Și m-am gândit că e un mod de a te excitat despre proiectele 255 00:12:01,710 --> 00:12:03,720 care v-ar folosi cu acest hardware ar 256 00:12:03,720 --> 00:12:08,900 fie pentru a juca acest clip scurt pe care le folosesc pentru a tachineze oameni 257 00:12:08,900 --> 00:12:10,500 că suntem acum trăiesc în viitor. 258 00:12:10,500 --> 00:12:13,494 259 00:12:13,494 --> 00:12:15,490 >> [MUSIC JOC] 260 00:12:15,490 --> 00:13:33,410 261 00:13:33,410 --> 00:13:37,109 >> DAVID MALAN: Deci, în doar câteva săptămâni, voi prea poate ca rece la târg CS50. 262 00:13:37,109 --> 00:13:39,150 Un alt dispozitiv care le au o grămadă de care suntem 263 00:13:39,150 --> 00:13:42,090 fericit pentru împrumut pentru proiectele este numit un controler de mișcare. 264 00:13:42,090 --> 00:13:45,030 Acesta este un dispozitiv USB pic vă conectați la un calculator care 265 00:13:45,030 --> 00:13:47,520 vă permite de a interacționa cu laptop-ul, Mac sau PC, 266 00:13:47,520 --> 00:13:51,570 ca și cum ai avut ca un Xbox Kinect și de fapt, face propuneri fizice mult 267 00:13:51,570 --> 00:13:54,509 așa cum vom vedea în acest viziune a viitorului. 268 00:13:54,509 --> 00:13:56,505 >> [MUSIC JOC] 269 00:13:56,505 --> 00:15:03,380 270 00:15:03,380 --> 00:15:06,260 >> DAVID MALAN: Deci, chiar dacă aveți nici o idee cum ceva de genul asta 271 00:15:06,260 --> 00:15:10,050 ar putea fi inventate sau locul de muncă la un nivel hardware, indiferent. 272 00:15:10,050 --> 00:15:13,520 Chiar și după doar câteva luni de CS50, și o înțelegere de programare 273 00:15:13,520 --> 00:15:19,460 mai mult, în general, și programare web mai mult recent, și apoi, de asemenea, API-uri, și HTTP, 274 00:15:19,460 --> 00:15:21,830 veți avea acces, prin intermediul API-uri de software, dacă 275 00:15:21,830 --> 00:15:24,680 vreau să împrumute una dintre acestea dispozitive pentru a vorbi de fapt să-l 276 00:15:24,680 --> 00:15:27,180 și nu trebuie să vă faceți griji cu privire la punerea în aplicare care stau la baza 277 00:15:27,180 --> 00:15:30,220 detalii, care este complet în conformitate cu această noțiune de stratificare 278 00:15:30,220 --> 00:15:33,610 o abstracție care ne-am văzut de-a lungul semestrului. 279 00:15:33,610 --> 00:15:37,990 >> Deci, de asemenea, peste week-end, a văzut câteva bucăți de știri. 280 00:15:37,990 --> 00:15:40,640 Du-te în primul rând, du-te la seminarii, dacă ar dori să învețe ceva 281 00:15:40,640 --> 00:15:42,160 mai mult pe orice număr de subiecte. 282 00:15:42,160 --> 00:15:43,340 A se vedea URL-ul acolo. 283 00:15:43,340 --> 00:15:45,890 Și acesta a fost trimis la mă de Chang, cine cunoști, 284 00:15:45,890 --> 00:15:47,850 cine imprimarea armata noastră de elefanți. 285 00:15:47,850 --> 00:15:49,910 Și a fost un titlu, după cum urmează. 286 00:15:49,910 --> 00:15:51,280 Sunt îngrozit de noua mea TV. 287 00:15:51,280 --> 00:15:54,301 De ce mi-e frică de a transforma acest lucru pe și ai fi prea. 288 00:15:54,301 --> 00:15:56,050 Deci, suntem acum la punct în semestrul, 289 00:15:56,050 --> 00:15:58,860 de asemenea, în cazul în care chiar dacă aveți cea mai mică de înțelegere 290 00:15:58,860 --> 00:16:02,620 de cum functioneaza web, și HTTP, și de securitate, lucruri de genul asta 291 00:16:02,620 --> 00:16:03,980 ar trebui să înceapă pentru a prinde ochi. 292 00:16:03,980 --> 00:16:07,450 Dar, de asemenea, veți înțelege dacă aceste lucruri sunt sau nu sunt 293 00:16:07,450 --> 00:16:08,430 amenințări reale. 294 00:16:08,430 --> 00:16:10,940 >> Așa că am luat cateva extrase din acest articol aici. 295 00:16:10,940 --> 00:16:12,540 Iar povestea este după cum urmează. 296 00:16:12,540 --> 00:16:14,300 Eu sunt acum proprietarul un nou televizor inteligent, care 297 00:16:14,300 --> 00:16:18,470 promite să livreze de streaming conținut multimedia, jocuri, app, 298 00:16:18,470 --> 00:16:21,450 social media, și internet navigare, oh și TV prea. 299 00:16:21,450 --> 00:16:24,410 Singura problemă este că eu sunt acum frică să-l folosească, spune autorul. 300 00:16:24,410 --> 00:16:29,592 Te-ar fi, de asemenea, dacă ai citit prin politica de confidențialitate 46 pagina pentru TV. 301 00:16:29,592 --> 00:16:31,800 Cantitatea de date acest colectează lucru este uimitor. 302 00:16:31,800 --> 00:16:35,710 Aceasta jurnalele de unde, când, cum, și pentru cât timp utilizați televizorul. 303 00:16:35,710 --> 00:16:38,190 Aceasta stabilește de urmărire cookie-uri, așa cum am discutat, 304 00:16:38,190 --> 00:16:40,560 și balize proiectat pentru a detecta atunci când aveți 305 00:16:40,560 --> 00:16:43,185 conținut special vizualizate sau un anumit mesaj de e-mail 306 00:16:43,185 --> 00:16:45,230 dacă doriți să verificați e-mail pe televizor. 307 00:16:45,230 --> 00:16:48,430 Acesta înregistrează aplicațiile pe care le utilizați, site-urile pe care le vizitați, 308 00:16:48,430 --> 00:16:52,280 și modul în care interacționează cu conținutul, a face toate acestea prin intermediul televizorului inteligent. 309 00:16:52,280 --> 00:16:55,470 De asemenea, yet-- mai ciudat asta e addition-- meu 310 00:16:55,470 --> 00:16:58,140 are o construit în aparat de fotografiat cu recunoaștere facială. 311 00:16:58,140 --> 00:17:01,010 >> Scopul este de a oferi de control gest pentru TV 312 00:17:01,010 --> 00:17:05,490 și vă permite să vă conectați la personalizate cont folosind fata ta. 313 00:17:05,490 --> 00:17:08,940 În sensul creșterii, imaginile sunt salvate pe televizor, în loc de încărcat 314 00:17:08,940 --> 00:17:09,940 la un server de firmă. 315 00:17:09,940 --> 00:17:12,520 Pe de dezavantaj, pe internet Conexiune face ca întreaga TV 316 00:17:12,520 --> 00:17:14,811 vulnerabile la hackeri care au demonstrat capacitatea 317 00:17:14,811 --> 00:17:16,700 să preia controlul complet al mașinii. 318 00:17:16,700 --> 00:17:20,880 >> Mai îngrijorător, ca și în cazul în care nu a fost destul de inteligent, este microfonul. 319 00:17:20,880 --> 00:17:23,599 Televizorul are o voce facilitate de recunoaștere 320 00:17:23,599 --> 00:17:26,859 care permite utilizatorilor să controleze ecranul cu comenzi vocale. 321 00:17:26,859 --> 00:17:30,290 Dar serviciul vine cu un avertisment destul de rău augur. 322 00:17:30,290 --> 00:17:33,030 Vă rugăm să fiți conștienți de faptul că în cazul în care cuvintele tale vorbite includ 323 00:17:33,030 --> 00:17:36,210 personal sau în alte sensibil informații, aceste informații 324 00:17:36,210 --> 00:17:40,310 va fi printre datele capturate și transmise către o terță parte. 325 00:17:40,310 --> 00:17:40,870 Ai înțeles? 326 00:17:40,870 --> 00:17:45,860 Nu spune personal sau sensibil chestii in fata televizorului. 327 00:17:45,860 --> 00:17:47,280 >> Deci, aceasta este de fapt real. 328 00:17:47,280 --> 00:17:50,530 Și e greu să nu pentru a vedea dacă Mergi la Best Buy sau altele asemenea pentru televizoare 329 00:17:50,530 --> 00:17:51,030 aceste zile. 330 00:17:51,030 --> 00:17:52,540 Sunt toți inteligent într-un fel. 331 00:17:52,540 --> 00:17:54,740 Și ei asistent inteligentă și mai ciudat. 332 00:17:54,740 --> 00:17:57,490 Și acestea sunt pur și simplu de colectare a datelor în moduri pe care le-am vorbit despre 333 00:17:57,490 --> 00:18:01,840 și apoi încărcarea prin HTTP sau un alt protocol la un server. 334 00:18:01,840 --> 00:18:05,720 >> Deci, aceasta a fost de un articol distracție în acest website on-line 335 00:18:05,720 --> 00:18:08,940 aici, care a vorbit despre o special bug sau cod greșit 336 00:18:08,940 --> 00:18:11,340 pe care le putem lega de fapt în discuție săptămâna trecută. 337 00:18:11,340 --> 00:18:15,730 Deci, acest titlu a fost la fel de urmează, povestea merge aici, 338 00:18:15,730 --> 00:18:18,720 Josh Breckman a lucrat pentru o companie care a aterizat un contract 339 00:18:18,720 --> 00:18:22,390 pentru a dezvolta un management de conținut sistem, sau CMS, așa cum se numesc, 340 00:18:22,390 --> 00:18:24,380 pentru un site web guvern destul de mare. 341 00:18:24,380 --> 00:18:27,300 O mare parte a proiectului a implicat dezvoltarea unui sistem de management de conținut 342 00:18:27,300 --> 00:18:29,840 astfel că angajații ar fi capabil de a construi și menține 343 00:18:29,840 --> 00:18:31,877 în continuă schimbare de conținut pentru site-ul lor. 344 00:18:31,877 --> 00:18:34,210 Lucrurile au mers destul de bine pentru la câteva zile după întâmplă în direct. 345 00:18:34,210 --> 00:18:37,020 Dar, în ziua de șase, lucrurile nu au mers atât de bine. 346 00:18:37,020 --> 00:18:39,500 Toate conținut de pe site-ul a dispărut complet. 347 00:18:39,500 --> 00:18:42,950 Și toate paginile dus la implicit, Vă rugăm introduceți pagina web conținut. 348 00:18:42,950 --> 00:18:43,810 Ne pare rău. 349 00:18:43,810 --> 00:18:46,080 Josh a fost chemat pentru a investiga și a observat 350 00:18:46,080 --> 00:18:49,390 că unul deosebit de suparatoare adresă IP externă a avut 351 00:18:49,390 --> 00:18:53,380 căzut în și elimină toate conținutul de pe sistem. 352 00:18:53,380 --> 00:18:56,290 >> Adresa IP nu aparținea la unele îndoit hacker de peste mări 353 00:18:56,290 --> 00:18:58,340 pe distrugerea de ajutor informații guvernamentale. 354 00:18:58,340 --> 00:19:05,190 Se hotărî să googlebot.com, Foarte proprii de web crawling păianjen Google. 355 00:19:05,190 --> 00:19:06,010 Ne pare rău. 356 00:19:06,010 --> 00:19:09,150 După un pic de cercetare și codare în jurul a găsi o copie de rezervă noncorrupt, 357 00:19:09,150 --> 00:19:10,180 Josh găsit problema. 358 00:19:10,180 --> 00:19:12,700 >> Un utilizator a copiat și lipite unele de conținut de la un 359 00:19:12,700 --> 00:19:15,670 pagină la alta, inclusiv o Edit Hyperlink 360 00:19:15,670 --> 00:19:17,577 pentru a edita conținutul de pe pagina. 361 00:19:17,577 --> 00:19:20,160 În mod normal, acest lucru nu ar fi o emisiune de la un utilizator din afara ar fi 362 00:19:20,160 --> 00:19:24,320 Trebuie să introduceți un nume și o parolă, dar sistemul de autentificare CMS, 363 00:19:24,320 --> 00:19:27,520 sistemul de conectare, nu a luat în considerare 364 00:19:27,520 --> 00:19:30,980 hacking sofisticat tehnici de Google Spider. 365 00:19:30,980 --> 00:19:31,700 Ne pare rău. 366 00:19:31,700 --> 00:19:33,610 >> După cum se pare, Google Spider nu utilizează 367 00:19:33,610 --> 00:19:36,950 cookie-uri, ceea ce înseamnă că se poate trece cu ușurință un cec pentru 368 00:19:36,950 --> 00:19:39,840 este conectat la set cookie a fi false. 369 00:19:39,840 --> 00:19:42,620 De asemenea, nu acorde atenție la JavaScript, care ar fi în mod normal 370 00:19:42,620 --> 00:19:45,170 prompte și redirecționeze utilizatorii care nu ai autentificat. 371 00:19:45,170 --> 00:19:48,610 Aceasta nu însă urmează fiecare hyperlink pe fiecare pagină în care constată, 372 00:19:48,610 --> 00:19:51,700 inclusiv a celor cu Șterge Page în titlu. 373 00:19:51,700 --> 00:19:52,650 Ne pare rău. 374 00:19:52,650 --> 00:19:56,070 >> Deci, ce înseamnă acest lucru în mai multe punct de vedere tehnic dar destul de accesibile? 375 00:19:56,070 --> 00:19:58,340 Aceasta înseamnă doar că de-a lungul site-ul lor, 376 00:19:58,340 --> 00:20:02,287 au avut URL-uri nu spre deosebire de acesta, care s-ar putea vedea în probleme stabilit șapte. 377 00:20:02,287 --> 00:20:04,620 Reamintim în problema seta șapte sau stiti în probleme stabilit șapte 378 00:20:04,620 --> 00:20:06,411 că ești provocat, printre altele, 379 00:20:06,411 --> 00:20:08,570 să-și vândă stocurile în numele utilizatorilor. 380 00:20:08,570 --> 00:20:14,010 Dar de punere în aplicare care facilitate de cale a obține prin intermediul hyperlink-uri în utilizare tău 381 00:20:14,010 --> 00:20:16,880 interfață, probabil Nu mai deștept ideea 382 00:20:16,880 --> 00:20:20,300 pentru că în cazul în care site-ul dvs. este într-un fel accesibil fie de către un om 383 00:20:20,300 --> 00:20:23,577 cine clic în jurul sau să cumpere un bot cum ar fi Google sau un Spider 384 00:20:23,577 --> 00:20:26,160 cum se numesc asta e doar crawling web încearcă să indice 385 00:20:26,160 --> 00:20:29,060 web ca un motor de căutare, acestea ar putea foarte ușor 386 00:20:29,060 --> 00:20:31,340 lovit prin a obține acest tip de URL. 387 00:20:31,340 --> 00:20:33,770 Și asta e funcțional echivalent cu, în acest caz, 388 00:20:33,770 --> 00:20:37,000 vinde toate acțiunile de Google. 389 00:20:37,000 --> 00:20:40,030 >> Acum sincer, e complet asinine că CMS 390 00:20:40,030 --> 00:20:43,240 second-hand JavaScript și cookie-uri să pună în aplicare sistemul de autentificare 391 00:20:43,240 --> 00:20:47,100 și nu fac asta pe partea de server, cum voi face și va fi, în PSET 7-- 392 00:20:47,100 --> 00:20:49,940 există o login.php file-- mereu, mereu, 393 00:20:49,940 --> 00:20:52,789 mereu de securitate ar trebui să fie face pe partea de server, 394 00:20:52,789 --> 00:20:56,080 nu pe partea de client pentru că, așa cum aceasta articol sugerează și s-ar putea te 395 00:20:56,080 --> 00:20:59,600 a se vedea la un moment dat, ea este banal pentru un utilizator, bun sau rău, 396 00:20:59,600 --> 00:21:02,860 la rândul său, doar off de activarea JavaScript- nu mai vorbim de cookie-uri. 397 00:21:02,860 --> 00:21:06,020 Astfel că este WTF de zi cu zi. 398 00:21:06,020 --> 00:21:07,970 >> Nu e una mai mult, care este doar un fel de înfricoșător, 399 00:21:07,970 --> 00:21:11,360 așa că am să-l menționez în cazul în care doar ca o lectie de viata. 400 00:21:11,360 --> 00:21:14,850 Ori de câte ori utilizați o aplicație numit ca Snapchat sau altele asemenea 401 00:21:14,850 --> 00:21:19,380 care spune că aceste fotografii dura doar pentru cinci secunde, zece secunde sau fleacuri. 402 00:21:19,380 --> 00:21:21,680 Sunt efemer Aceasta este absolut nu este cazul. 403 00:21:21,680 --> 00:21:25,670 Ca nu exista nici o cale, digital, să pună în aplicare o formă de video, 404 00:21:25,670 --> 00:21:30,150 sau imagine, text sau schimbul de astfel de ca un destinatar de la celălalt capăt 405 00:21:30,150 --> 00:21:31,660 nu se poate salva într-un fel de date. 406 00:21:31,660 --> 00:21:34,300 >> În modul cel mai naiv, cineva ar putea lua telefonul lor. 407 00:21:34,300 --> 00:21:36,850 Și ei au o fereastră de 10 secunde în timp ce se uită la unele anticipate 408 00:21:36,850 --> 00:21:39,410 pentru a lua doar un alt telefon și-l fotografieze, în mod evident. 409 00:21:39,410 --> 00:21:41,660 Astfel încât să puteți păstra ceva digital în acest fel. 410 00:21:41,660 --> 00:21:44,620 Unii dintre voi știu cum să ia capturi de ecran de pe telefon. 411 00:21:44,620 --> 00:21:49,290 De fapt, dacă nu știți acest lucru, dau seama că, cel puțin Snapchat, 412 00:21:49,290 --> 00:21:51,040 și cred că alte aplicații în aceste zile, 413 00:21:51,040 --> 00:21:53,720 cel puțin tine daca spun destinatar are de fapt 414 00:21:53,720 --> 00:21:55,310 ia o captură de ecran a imaginii. 415 00:21:55,310 --> 00:22:00,870 >> Dar mai rău încă, aceasta a fost snappening, ca cineva a inventat recent, 416 00:22:00,870 --> 00:22:04,680 în cazul în care unele 100000 snaps a fost eliberat 417 00:22:04,680 --> 00:22:09,310 în ceea ce se numește un fișier torrent pe diferite site-uri în cele din urmă. 418 00:22:09,310 --> 00:22:12,000 Iar acestea conținea o grămadă de mesaje private și posturi. 419 00:22:12,000 --> 00:22:15,210 Se pare ca cele mai multe dintre ele benigne, deci nu este ceea ce s-ar putea aștepta. 420 00:22:15,210 --> 00:22:17,580 Dar, pentru că oamenii au avut a folosit un site web terț, 421 00:22:17,580 --> 00:22:20,270 logare cu Snapchat lor numele de utilizator și parola și apoi 422 00:22:20,270 --> 00:22:23,470 economisire toate snaps lor pe acest site terță parte. 423 00:22:23,470 --> 00:22:26,130 Și a fost că parte terță site-ul care a fost spart, 424 00:22:26,130 --> 00:22:30,710 care cineva tocmai a însemnat dat seama cum pentru a obține toate 100.000 plus de acele imagini 425 00:22:30,710 --> 00:22:33,822 în propriul lor hard disk pentru partajare ulterioară. 426 00:22:33,822 --> 00:22:36,030 Sincer, aici, e un fel de asinine care Snapchat 427 00:22:36,030 --> 00:22:39,360 este pus în aplicare în așa fel încât o terță parte poate sorta de interceptare 428 00:22:39,360 --> 00:22:43,310 datele și care nu este legat de dumneavoastră aplicație proprie care rulează pe telefon. 429 00:22:43,310 --> 00:22:46,947 Dar aici, de asemenea, seama că acestea lucrurile nu ar trebui să te prind prin surprindere, 430 00:22:46,947 --> 00:22:49,030 sau cel puțin nu ar trebui fie o lectie de viata aici. 431 00:22:49,030 --> 00:22:52,220 Dacă doriți tehnice detalii, du-te la faptul că URL-ul acolo 432 00:22:52,220 --> 00:22:53,570 care este în diapozitive de astăzi. 433 00:22:53,570 --> 00:23:00,960 În regulă, orice întrebări cu privire la lecții de viață de astăzi din CS? 434 00:23:00,960 --> 00:23:02,710 Rândul său, că off. 435 00:23:02,710 --> 00:23:04,970 Ceva? 436 00:23:04,970 --> 00:23:06,301 Ceva? 437 00:23:06,301 --> 00:23:09,050 Am o mulțime de oameni verificare Snapchat sau ceva de acum. 438 00:23:09,050 --> 00:23:11,690 >> În regulă, așa SQL, Structured Query Language. 439 00:23:11,690 --> 00:23:12,509 Hai să terminăm. 440 00:23:12,509 --> 00:23:14,300 Și, de asemenea, cu toate că suntem doar zgarierea 441 00:23:14,300 --> 00:23:16,310 suprafața acestui limbă, vă vom da 442 00:23:16,310 --> 00:23:18,930 destul de limba sub formă de PSET 7 443 00:23:18,930 --> 00:23:22,140 astfel încât să puteți aborda unele funcționalitate destul de comune. 444 00:23:22,140 --> 00:23:24,912 Dar dați seama că există un cuplu lucruri pe care nu necesită de voi, 445 00:23:24,912 --> 00:23:27,120 dar ei vor să fie importantă veni proiecte finale 446 00:23:27,120 --> 00:23:30,760 și, desigur, vin de luare real site-uri cu utilizatori reale 447 00:23:30,760 --> 00:23:32,040 este această decizie de design. 448 00:23:32,040 --> 00:23:34,460 >> Se pare că în o bază de date MySQL, tu 449 00:23:34,460 --> 00:23:37,460 au ciorchini de opțiuni, cum ar fi tipurile de date pentru coloanele 450 00:23:37,460 --> 00:23:41,670 și alte lucruri, dar trebuie, de asemenea, alegerea unui așa-numit de stocare 451 00:23:41,670 --> 00:23:44,570 motor pentru toate datele, un fel de sistem de fișiere, 452 00:23:44,570 --> 00:23:46,700 daca esti familiar, pentru toate datele. 453 00:23:46,700 --> 00:23:48,830 Ce format este aceasta în cele din urmă stocate în? 454 00:23:48,830 --> 00:23:53,300 Și cele mai comune, poate, a fost MyISAM și InnoDB, termeni tehnici 455 00:23:53,300 --> 00:23:56,060 că vom pasa numai în măsura în care unul are 456 00:23:56,060 --> 00:23:58,500 și nu are următoarea caracteristică. 457 00:23:58,500 --> 00:24:00,390 >> Să presupunem că aveți un pic frigider cămin. 458 00:24:00,390 --> 00:24:03,030 Și să presupunem că tu și dumneavoastră coleg de cameră, care împărtășesc acest frigider, 459 00:24:03,030 --> 00:24:04,682 sunt într-adevăr pasionat de lapte cuvânt de spus. 460 00:24:04,682 --> 00:24:07,140 Și acest lucru este, de fapt, modul în care Povestea sa spus să-mi drumul înapoi 461 00:24:07,140 --> 00:24:10,890 în ziua când am luat un curs denumit CS 161 sisteme de operare, care 462 00:24:10,890 --> 00:24:12,580 explorează în mod similar acest subiect. 463 00:24:12,580 --> 00:24:13,760 Deci, v-ați luat acest frigider. 464 00:24:13,760 --> 00:24:14,630 Ai ieșit din lapte. 465 00:24:14,630 --> 00:24:17,000 Și ai venit acasă, colegul tău de cameră a lui încă la clasă sau orice altceva, 466 00:24:17,000 --> 00:24:19,208 și vă decideți voi du-te afară și a lua niște lapte. 467 00:24:19,208 --> 00:24:22,630 Astfel încât să închideți frigider, blocare camera de camin, du-te peste drum 468 00:24:22,630 --> 00:24:25,330 la CVS sau ori de câte ori, și de a lua în linie pentru a cumpăra niște lapte. 469 00:24:25,330 --> 00:24:28,960 >> Între timp, colegul tău de cameră ajunge acasa de la clasă, ajunge in camera de camin, 470 00:24:28,960 --> 00:24:31,802 deschide frigiderul, de asemenea, își dă seama ooph, nu mai avem lapte. 471 00:24:31,802 --> 00:24:33,760 Deci, el sau ea închide frigider și apoi se întâmplă 472 00:24:33,760 --> 00:24:35,610 pentru a merge la cealaltă CVS, care se întâmplă să fie 473 00:24:35,610 --> 00:24:38,470 un bloc departe de alte CVS în piață, și devine în linie 474 00:24:38,470 --> 00:24:40,230 acolo pentru a obține niște lapte. 475 00:24:40,230 --> 00:24:42,524 Acum, desigur, câteva minute mai târziu, amândoi primi înapoi, 476 00:24:42,524 --> 00:24:44,690 și cel mai rău dintre toate posibile rezultatele sa întâmplat. 477 00:24:44,690 --> 00:24:45,792 Ambele aveți lapte. 478 00:24:45,792 --> 00:24:47,500 Și tu nu prea cum ar fi lapte atât de mult. 479 00:24:47,500 --> 00:24:49,625 Deci, una dintre ele este doar O să se înrăutățească la un moment dat. 480 00:24:49,625 --> 00:24:55,941 Deci, acum aveți o cantitate excesivă de lapte în frigider toate că de ce? 481 00:24:55,941 --> 00:24:57,072 >> [Inaudibil] 482 00:24:57,072 --> 00:24:59,780 DAVID MALAN: Da, nu- comunica între ele într-un fel 483 00:24:59,780 --> 00:25:00,904 că au fost obtinerea de lapte. 484 00:25:00,904 --> 00:25:04,320 Deci, în cele mai simple moduri în lumea umană, 485 00:25:04,320 --> 00:25:08,390 cum s-ar putea să evitați această prostie scenariu să se întâmple astfel de 486 00:25:08,390 --> 00:25:09,750 să ajungi doar cu unul. 487 00:25:09,750 --> 00:25:10,840 Le Text, da bine. 488 00:25:10,840 --> 00:25:12,877 Dar cum altfel? 489 00:25:12,877 --> 00:25:13,460 Post-it-uri. 490 00:25:13,460 --> 00:25:14,626 DAVID MALAN: O notă post-it. 491 00:25:14,626 --> 00:25:17,150 Orice formă de comunicare care spune colegului tău de cameră 492 00:25:17,150 --> 00:25:18,670 nu merg în frigider pentru lapte. 493 00:25:18,670 --> 00:25:20,440 Am de gând să merg repopula pe cont propriu. 494 00:25:20,440 --> 00:25:22,770 Deci, aveți nevoie într-un fel pentru a bloca această resursă. 495 00:25:22,770 --> 00:25:27,180 Deci, putem face asta: putem fel de ruina povestea și transforme într-o poveste CS 496 00:25:27,180 --> 00:25:30,360 care cred că de acest lucru ca la fel ca o variabilă, care este stocarea o anumită valoare. 497 00:25:30,360 --> 00:25:32,570 Și chiar acum, Valoarea de lapte este zero, 498 00:25:32,570 --> 00:25:35,410 care nu doriți dumneavoastră coleg de cameră pentru a inspecta variabila 499 00:25:35,410 --> 00:25:38,730 si apoi ia o decizie el sau ea bazat pe starea de care variabila 500 00:25:38,730 --> 00:25:42,430 dacă sunteți în procesul de schimbarea stării de care variabila. 501 00:25:42,430 --> 00:25:46,140 >> Deci una dintre liniile de SQL pe care le vă dau în PSET 7 caietul de sarcini 502 00:25:46,140 --> 00:25:47,310 Este aceasta o aici. 503 00:25:47,310 --> 00:25:49,740 Iar noi nu cheltui un imens perioada de timp vorbesc despre asta. 504 00:25:49,740 --> 00:25:55,100 Dar se pare că, dacă încercați pentru a cumpăra niște acțiuni în finanțe CS50 505 00:25:55,100 --> 00:25:58,000 că aveți deja unele acțiuni ale, tu 506 00:25:58,000 --> 00:26:01,750 doresc să fie capabil să facă un număr de lucruri instantaneu împreună. 507 00:26:01,750 --> 00:26:04,360 Vrei să fii în stare să în mod eficient, la un nivel ridicat, 508 00:26:04,360 --> 00:26:06,700 verifica în regulă, dacă vreau pentru a cumpara mai multe actiuni ale gratuită, 509 00:26:06,700 --> 00:26:08,780 WE penny stoc vorbesc despre în spec, 510 00:26:08,780 --> 00:26:10,660 Vreau să verificați mai întâi cât de multe acțiuni am. 511 00:26:10,660 --> 00:26:11,810 Și să presupunem că e cinci. 512 00:26:11,810 --> 00:26:14,600 Și să presupunem că vreau să cumpara 10 mai, am în cele din urmă 513 00:26:14,600 --> 00:26:17,069 doresc să aibă 15 parts de stoc. 514 00:26:17,069 --> 00:26:18,360 Deci, am să întreb două întrebări. 515 00:26:18,360 --> 00:26:20,230 Care este starea de variabila? 516 00:26:20,230 --> 00:26:21,470 Care este starea de rând? 517 00:26:21,470 --> 00:26:22,970 Câte acțiuni se în prezent am? 518 00:26:22,970 --> 00:26:24,636 Apoi vrei să mergi mai departe și să o actualizați. 519 00:26:24,636 --> 00:26:27,720 Deci, asta e analogic la lapte în care vă verificați rând, 520 00:26:27,720 --> 00:26:30,730 și apoi doriți să-l actualizați pentru că, dacă doriți să cumpere 10 parts, 521 00:26:30,730 --> 00:26:32,521 nu vrei să se schimbe rândul la 10, vă 522 00:26:32,521 --> 00:26:35,300 vrea să-l schimbe la 5 plus 10 sau, desigur, 15. 523 00:26:35,300 --> 00:26:40,030 >> Această linie de cod asigură că aceste două idei conceptuale 524 00:26:40,030 --> 00:26:42,810 întâmpla împreună sau deloc. 525 00:26:42,810 --> 00:26:46,920 Nimeni, inclusiv unele alt utilizator care a autentificat în aceeași site-ul, 526 00:26:46,920 --> 00:26:49,900 poate întrerupe într-un fel verificarea rândului 527 00:26:49,900 --> 00:26:52,960 și actualizarea rând, selectați și actualizarea dacă vrei. 528 00:26:52,960 --> 00:26:57,360 Și sintaxa nu este super evident, dar aceasta linie, lung este cum este, 529 00:26:57,360 --> 00:27:01,150 garantează faptul că aceste două operațiuni verifica variabila sau verificați rândul 530 00:27:01,150 --> 00:27:04,660 și să actualizeze rândul întâmpla atomic. 531 00:27:04,660 --> 00:27:06,849 >> Oh, aici vom merge din nou. 532 00:27:06,849 --> 00:27:07,890 Mesaj text pe telefonul meu. 533 00:27:07,890 --> 00:27:09,954 Așa că haideți să facem acest lucru o puțin mai concret. 534 00:27:09,954 --> 00:27:12,120 Să presupunem că nu ești punerea în aplicare a unui frigider, 535 00:27:12,120 --> 00:27:16,400 și tu nu ești de punere în aplicare PSET 7, dar o bancă real, 536 00:27:16,400 --> 00:27:20,000 sau un bancomat, un Teller automat Mașină, în care tu cumva 537 00:27:20,000 --> 00:27:22,960 doresc să fie în măsură de a împuternici utilizatorilor de a transfera bani 538 00:27:22,960 --> 00:27:24,500 de la un cont la altul. 539 00:27:24,500 --> 00:27:25,100 OK, stai. 540 00:27:25,100 --> 00:27:26,683 Am de gând pentru a dezactiva acest lucru acum, vă mulțumesc. 541 00:27:26,683 --> 00:27:30,450 Așa că ne-am dori să se mute bani dintr-un număr de cont 542 00:27:30,450 --> 00:27:33,600 într-un alt cont număr, în mod special de 100 $. 543 00:27:33,600 --> 00:27:37,690 Deci, aceasta este un fel de arbitrar exemplu, prin care tu, ATM-uri, 544 00:27:37,690 --> 00:27:41,060 ar putea dori să execute două SQL interogări, scade dintr-un cont, 545 00:27:41,060 --> 00:27:42,430 și se adaugă la alt cont. 546 00:27:42,430 --> 00:27:46,766 Dar doriți să vă asigurați că acestea două linii de ambele întâmpla sau nu la toate. 547 00:27:46,766 --> 00:27:48,640 Tu nu vrei ceva obtinerea întreruptă. 548 00:27:48,640 --> 00:27:51,440 Tu nu un tip deștept rău într-un fel în picioare la Bank of America 549 00:27:51,440 --> 00:27:53,270 cu două ATM-uri in fata de el și într-un fel 550 00:27:53,270 --> 00:27:55,270 un fel de tastarea în comenzi, în același timp, 551 00:27:55,270 --> 00:28:01,230 sperăm că încercarea de a deduce 200 dolari în loc de 100 dolari și doar cu 100 dolari creditat. 552 00:28:01,230 --> 00:28:04,450 Pe scurt, doriți ca acest lucru să se comporta exact așa cum vă așteptați. 553 00:28:04,450 --> 00:28:06,540 >> Și modul în care face această bază de date este în SQL 554 00:28:06,540 --> 00:28:09,350 îl înveliți în ceea ce-i numit o tranzacție. 555 00:28:09,350 --> 00:28:14,290 Literalmente în SQL, puteți apela lui CS50 Funcția de interogare cu citat start încheiat citatul 556 00:28:14,290 --> 00:28:15,370 tranzacție. 557 00:28:15,370 --> 00:28:18,640 Apoi, puteți executa orice număr de interogări SQL ulterioare, 558 00:28:18,640 --> 00:28:20,870 dar nici unul dintre ei ia efect în baza de date 559 00:28:20,870 --> 00:28:25,880 până te sun interogare citat citatul comite, în cazul în care din nou folosind PHP. 560 00:28:25,880 --> 00:28:29,810 Și în acest fel, vă puteți asigura că chiar dacă aveți de 1.000 de utilizatori tot 561 00:28:29,810 --> 00:28:32,080 lovind baza de date în același timp, SQL 562 00:28:32,080 --> 00:28:34,540 va promit că aceste două interogări vor fi 563 00:28:34,540 --> 00:28:36,740 pus în aplicare un drept după altul. 564 00:28:36,740 --> 00:28:40,330 Astfel încât să nu se termina cu exces de lapte sau suma greșită, în cele din urmă, 565 00:28:40,330 --> 00:28:40,830 de bani. 566 00:28:40,830 --> 00:28:43,110 >> Deci, ține minte acest lucru, nu atât de mult pentru PSET 7 567 00:28:43,110 --> 00:28:45,250 dar pentru proiecte finale daca esti de fapt 568 00:28:45,250 --> 00:28:49,690 încercarea de a muta date în jurul valorii de peste mese ca s-ar putea aici. 569 00:28:49,690 --> 00:28:53,980 Dar poate chiar mai simple și mai evident pentru a înțelege cu un exemplu 570 00:28:53,980 --> 00:28:54,860 Este aceasta o aici. 571 00:28:54,860 --> 00:28:57,760 Și cineva ne prin e-mail despre aceasta doar de altă zi 572 00:28:57,760 --> 00:28:59,600 când a văzut ceva asemănător on-line. 573 00:28:59,600 --> 00:29:03,480 >> Deci, după știința mea, sistemul de pin nu este vulnerabil la acest atac. 574 00:29:03,480 --> 00:29:06,637 Și nu am nici o idee în cazul în care chiar utilizări baza de date SQL sub capota. 575 00:29:06,637 --> 00:29:08,470 Dar să-l utilizați pentru dragul discuției. 576 00:29:08,470 --> 00:29:10,178 Iată pe ecran care Oameni buni de la Harvard au tendința de 577 00:29:10,178 --> 00:29:13,620 pentru a vedea când vă conectați cu lor Numărul Harvard ID-ul și PIN-ul lor. 578 00:29:13,620 --> 00:29:19,020 Și să presupunem că sistemul de pin au fost implementat în PHP și cu o MySQL 579 00:29:19,020 --> 00:29:22,000 baza de date, codul care cineva de ani în urmă s-ar fi scris 580 00:29:22,000 --> 00:29:23,270 ar putea arata ca aceasta. 581 00:29:23,270 --> 00:29:25,230 În primul rând, să declare o variabilă numită nume de utilizator. 582 00:29:25,230 --> 00:29:27,560 Și tocmai asta de la superglobale POST. 583 00:29:27,560 --> 00:29:30,140 Apoi a obține o altă variabilă denumit parola și facă același lucru. 584 00:29:30,140 --> 00:29:33,080 Și apoi doar executa această interogare mult timp aici, 585 00:29:33,080 --> 00:29:36,690 selectați stea de la utilizatori în cazul în care numele de utilizator este egal cu cutare 586 00:29:36,690 --> 00:29:38,510 și parola este egal cu cutare și cutare. 587 00:29:38,510 --> 00:29:40,660 >> Observați că cret bretele Am folosit aici 588 00:29:40,660 --> 00:29:42,880 Adică doar la PHP, du-te înainte și substitut 589 00:29:42,880 --> 00:29:45,400 valoarea acestor două variabile acolo. 590 00:29:45,400 --> 00:29:50,090 Ei nu sunt strict necesare, dar ei au tendința de a evita erorile de sintaxă subtile. 591 00:29:50,090 --> 00:29:53,650 Deci, acest lucru arata complet corect la prima vedere. 592 00:29:53,650 --> 00:29:54,240 Și este. 593 00:29:54,240 --> 00:29:56,680 Ai putea pună în aplicare Sistemul dată în acest fel. 594 00:29:56,680 --> 00:30:00,460 >> Dar să presupunem că un super- elev inteligent și rău intenționat 595 00:30:00,460 --> 00:30:03,020 Intrare acest lucru ca dată lui sau a ei. 596 00:30:03,020 --> 00:30:05,550 Așa că m-am îndepărtat glonțul semne aici, în macheta sus, 597 00:30:05,550 --> 00:30:08,760 și l-am descoperit de fapt ceea ce el sau ea ar putea fi dactilografiere. 598 00:30:08,760 --> 00:30:10,350 Și e un pic ciudat. 599 00:30:10,350 --> 00:30:13,850 Dar ce sare la tine la potențial îngrijorătoare despre intrarea utilizatorului, 600 00:30:13,850 --> 00:30:16,450 chiar dacă nu aveți nici o idee ce un atac SQL Injection înseamnă. 601 00:30:16,450 --> 00:30:20,300 De ce acest lucru sa te uiti un pic de pește? 602 00:30:20,300 --> 00:30:21,050 Ce-i asta? 603 00:30:21,050 --> 00:30:21,550 [Inaudibil] 604 00:30:21,550 --> 00:30:24,260 DAVID MALAN: sau se află în un pic suspect. 605 00:30:24,260 --> 00:30:26,310 De fapt, asta e un cuvânt cheie din SQL. 606 00:30:26,310 --> 00:30:28,105 Așa că nu este de bun augur. 607 00:30:28,105 --> 00:30:29,980 Faptul că nu există toate aceste ghilimele simple 608 00:30:29,980 --> 00:30:32,646 there--, de fapt, una dintre cel mai ușor moduri de a rupe unele baze de date 609 00:30:32,646 --> 00:30:35,880 este prin tastarea într-un nume ca O'Reilly care are un apostrof în ea 610 00:30:35,880 --> 00:30:38,600 pentru că dacă omul care a scris codul din spatele scenei 611 00:30:38,600 --> 00:30:41,570 nu ia în considerare faptul că există ar putea fi ghilimele simple într-un utilizator 612 00:30:41,570 --> 00:30:45,060 de intrare, și el sau ea este folosind ghilimele simple în codul lor, 613 00:30:45,060 --> 00:30:46,040 lucruri rele se pot întâmpla. 614 00:30:46,040 --> 00:30:47,870 >> De fapt, mai rău încă, ia în considerare acest lucru. 615 00:30:47,870 --> 00:30:50,600 În cazul în care acest lucru a fost din nou codul că cineva de la Harvard ani 616 00:30:50,600 --> 00:30:53,100 în urmă a scris pentru PIN-ul sistem, observați ceea ce este 617 00:30:53,100 --> 00:30:56,220 pe cale de a obține substituit pentru numele de utilizator și parola 618 00:30:56,220 --> 00:30:59,780 în cazul în care utilizatorul scrie din nou skroob ar fi numele de utilizator 619 00:30:59,780 --> 00:31:03,960 și apoi unul, doi, trei, patru, cinci, citat sau citat citatul unul egali 620 00:31:03,960 --> 00:31:04,660 citez unul. 621 00:31:04,660 --> 00:31:07,220 Și observați ceea ce este esențial aici este utilizatorul nu a 622 00:31:07,220 --> 00:31:09,900 a început parola sau pini cu un citat. 623 00:31:09,900 --> 00:31:12,610 Iar ei nu l-au încheiat cu un citat pentru că el sau ea 624 00:31:12,610 --> 00:31:16,315 Se presupune că, dacă programator nu a fost atât de clare, 625 00:31:16,315 --> 00:31:18,690 acestea sunt de gând să aibă cele ghilimele simple în codul lor. 626 00:31:18,690 --> 00:31:19,860 >> Deci, aici e codul. 627 00:31:19,860 --> 00:31:23,820 Și schimbarea care s-ar putea întâmpla acum este aceasta. 628 00:31:23,820 --> 00:31:26,350 Și am subliniat ceea ce utilizatorul a tastat. 629 00:31:26,350 --> 00:31:28,480 Deci, înainte, după. 630 00:31:28,480 --> 00:31:33,330 Și observați ce e ușor îngrijorătoare acum despre jumătatea din dreapta a acestui cod SQL? 631 00:31:33,330 --> 00:31:36,300 E un pic mai complex, desigur, decât interogările care le-am văzut. 632 00:31:36,300 --> 00:31:38,550 Dar acest lucru nu se poate, eventual, fi un lucru bun dacă ești 633 00:31:38,550 --> 00:31:42,240 a zis selectați stele, care este selectați totul, de la masa utilizatorului 634 00:31:42,240 --> 00:31:46,630 în cazul în care numele de utilizator este egal cu skroob și parola este egal unu, doi, trei, patru, 635 00:31:46,630 --> 00:31:49,610 cinci sau unu este egal cu unu. 636 00:31:49,610 --> 00:31:53,860 Care este implicația logică de ultima clauză probabil? 637 00:31:53,860 --> 00:31:55,650 E doar întotdeauna adevărat. 638 00:31:55,650 --> 00:31:59,930 >> Si pentru ca am un fel de ghicit sau a dat seama prin încercare și eroare 639 00:31:59,930 --> 00:32:02,760 că programatorul care a scris acest cod nu a făcut- 640 00:32:02,760 --> 00:32:07,250 anticipa o persoană umană sau rău tastarea în ghilimele simple, de asemenea, 641 00:32:07,250 --> 00:32:10,350 putem sintactic a finaliza interogarea SQL 642 00:32:10,350 --> 00:32:12,260 cu ceva fără sens dar ceva care 643 00:32:12,260 --> 00:32:15,930 este sintactic incorect care evaluează întotdeauna adevărat. 644 00:32:15,930 --> 00:32:19,130 Deci, în cazul în care acest cod este folosit pentru a răspunde întrebarea adevărată sau falsă ar trebui să 645 00:32:19,130 --> 00:32:22,930 acest utilizator să li se permită să treacă, Răspunsul este întotdeauna aparent întâmplă 646 00:32:22,930 --> 00:32:26,930 pentru a fi adevărat, pentru că acest lucru se întâmplă întotdeauna pentru a selecta ceva din baza de date 647 00:32:26,930 --> 00:32:29,280 pentru că unul, desigur, este egal întotdeauna unul. 648 00:32:29,280 --> 00:32:30,360 >> Deci, care este solutia? 649 00:32:30,360 --> 00:32:33,290 Ei bine, în PSET 7, noi de fapt evita toate astea împreună. 650 00:32:33,290 --> 00:32:37,360 Noi vă oferim o funcție de interogare, și noi vă recomandăm să utilizați semne de întrebare 651 00:32:37,360 --> 00:32:40,430 ca substituenți, în mod similar în spirit printf lui% s, 652 00:32:40,430 --> 00:32:43,710 dar ceea ce este esențial despre semnele de intrebare aici este dacă ai citit de fapt prin 653 00:32:43,710 --> 00:32:46,950 functions.php, unde ne Funcția de interogare este pusă în aplicare, 654 00:32:46,950 --> 00:32:52,780 aceste semne de întrebare sunt scăpat, prin care orice potențial periculos 655 00:32:52,780 --> 00:32:58,210 ca un singur citat este pornit într-un singur citat scăpat. 656 00:32:58,210 --> 00:33:00,590 >> Deci, aceasta este ceea ce este întâmplă cu adevărat, dacă 657 00:33:00,590 --> 00:33:04,850 utilizați funcția de interogare CS50 sau orice număr de biblioteci gratuite terțe părți care 658 00:33:04,850 --> 00:33:06,000 face același lucru. 659 00:33:06,000 --> 00:33:09,850 Nu contează în acest caz, în verde, în cazul în care utilizatorul a introdus într-un singur citat 660 00:33:09,850 --> 00:33:12,070 deoarece interogarea Funcția pe care am scris este 661 00:33:12,070 --> 00:33:15,120 O să adăugați backslash înainte orice astfel de citat periculos. 662 00:33:15,120 --> 00:33:17,360 Deci, acest lucru nu este, în De fapt, o să fie legal. 663 00:33:17,360 --> 00:33:20,910 Acest lucru este ca tastarea într-un nebun în căutarea parolă care este, desigur, nu merge 664 00:33:20,910 --> 00:33:23,490 să fie parola real skroob lui. 665 00:33:23,490 --> 00:33:28,260 >> Deci, Takeaway pentru CS50 este una, absolut folosiți întotdeauna ceva 666 00:33:28,260 --> 00:33:30,860 cum ar fi funcția de interogare CS50 lui sau biblioteca de bază, 667 00:33:30,860 --> 00:33:32,560 care se întâmplă să fie numit DOP. 668 00:33:32,560 --> 00:33:35,880 Dar niciodată, niciodată, Nu face codul ca aceasta 669 00:33:35,880 --> 00:33:39,472 fără a scăpa sau de spălare cum se spune intrări tale. 670 00:33:39,472 --> 00:33:42,430 Și o vei face la un moment dat, probabil, veni peste unele site ca asta. 671 00:33:42,430 --> 00:33:46,060 De fapt, se pare a fi cazul cum ar fi în aeroporturi și hoteluri din locuri 672 00:33:46,060 --> 00:33:48,880 în cazul în care acestea au Wi-Fi gratuit acces pe care va trebui sa va logati pentru, 673 00:33:48,880 --> 00:33:51,010 aceste site-uri sunt întotdeauna puse în aplicare oribil. 674 00:33:51,010 --> 00:33:55,680 Și astfel un fel de distracție la exercițiu acasă, nu în scopuri răuvoitoare sau mai mult 675 00:33:55,680 --> 00:33:59,170 de o distracție pe drum exercițiu, este să tastați doar 676 00:33:59,170 --> 00:34:02,850 un apostrof, un singur citat, într-o formă pe unele site-ul 677 00:34:02,850 --> 00:34:03,810 și să vedem ce se întâmplă. 678 00:34:03,810 --> 00:34:06,660 Și dacă serverul se blochează sau dă ai un fel de mesaj de eroare, 679 00:34:06,660 --> 00:34:09,690 ar putea fi foarte bine că cineva nu a anticipat acest lucru. 680 00:34:09,690 --> 00:34:15,239 Și atunci trebuie să vă avertizăm propriu-zis autorități și trece mai departe. 681 00:34:15,239 --> 00:34:20,843 >> Deci, acum, voi ar trebui să sperăm, înțelege un pic mai mult umor tocilar aici. 682 00:34:20,843 --> 00:34:24,120 >> [Râsete] 683 00:34:24,120 --> 00:34:27,571 684 00:34:27,571 --> 00:34:29,070 DAVID MALAN: Știi că ești un tocilar. 685 00:34:29,070 --> 00:34:30,944 Pentru următoarele câteva ani, va veti aminti 686 00:34:30,944 --> 00:34:33,520 care mici Mese Bobby este din cauza acestui desen animat aici. 687 00:34:33,520 --> 00:34:36,760 Astfel încât să păstreze în minte cum ne-am schimbare de context pentru ultima dată 688 00:34:36,760 --> 00:34:38,770 prezenți JavaScript. 689 00:34:38,770 --> 00:34:41,600 Ne-am petrecut relativ mic timp pe sintaxa PHP 690 00:34:41,600 --> 00:34:43,440 pentru că e de fapt Super similar cu C. 691 00:34:43,440 --> 00:34:47,300 Și destul de frumos, JavaScript prea este super similară cu sintaxa lui C 692 00:34:47,300 --> 00:34:49,639 precum vom vedea în doar o clipă și cum vom 693 00:34:49,639 --> 00:34:51,205 a se vedea mai târziu în această săptămână, în special. 694 00:34:51,205 --> 00:34:54,080 Ce poti face cu acest limbaj, deși, este cu atât mai puternic, 695 00:34:54,080 --> 00:34:55,790 în special cu API-uri. 696 00:34:55,790 --> 00:34:56,960 >> Dar mai întâi un tur rapid. 697 00:34:56,960 --> 00:35:00,450 Așa că unul, în JavaScript, există nici o funcție principală, ceea ce este frumos. 698 00:35:00,450 --> 00:35:02,650 Ca și în PHP, puteți scrie doar cod. 699 00:35:02,650 --> 00:35:04,310 Condiții arata ca aceasta. 700 00:35:04,310 --> 00:35:07,100 Și expresii booleene s-ar putea arata ca aceasta sau ca aceasta. 701 00:35:07,100 --> 00:35:09,530 Exista switch-uri, și ei ar putea arata ca aceasta. 702 00:35:09,530 --> 00:35:10,970 Patru bucle arata ca aceasta. 703 00:35:10,970 --> 00:35:12,390 În timp ce buclele arata ca aceasta. 704 00:35:12,390 --> 00:35:14,160 Face whiles arata ca aceasta. 705 00:35:14,160 --> 00:35:16,850 Și apoi tablouri arata ca aceasta, foarte asemănător cu PHP. 706 00:35:16,850 --> 00:35:20,740 Dar observați, că în JavaScript voi declara o variabilă nu cu un dolar 707 00:35:20,740 --> 00:35:25,190 semn, nu cu un tip de date, ci pur și simplu prin a spune var pentru variabila în fața sa. 708 00:35:25,190 --> 00:35:27,900 Acesta este de asemenea liber tipizat prin aceea că prezintă tipuri, 709 00:35:27,900 --> 00:35:29,729 dar nu le declară în mod explicit. 710 00:35:29,729 --> 00:35:31,520 Și apoi un șir de caractere, pentru exemplu, s-ar putea uita-te 711 00:35:31,520 --> 00:35:34,350 în acest fel, că șir fiind numit în acest caz. 712 00:35:34,350 --> 00:35:35,410 Și apoi un obiect. 713 00:35:35,410 --> 00:35:37,010 Și acestea, vom vedea mai înainte de mult timp. 714 00:35:37,010 --> 00:35:41,470 Și un obiect este, probabil, una dintre cele mai văzut cel mai frecvent structuri de date 715 00:35:41,470 --> 00:35:44,050 într-o bază de activarea JavaScript- Programul deoarece permite 716 00:35:44,050 --> 00:35:46,680 să se asocieze arbitrară perechi de valori-cheie locații 717 00:35:46,680 --> 00:35:51,240 ca matrice asociative PHP și la fel ca și propria tabelă de dispersie 718 00:35:51,240 --> 00:35:54,042 sau încercați așa cum ne-am pus în aplicare câteva săptămâni spate. 719 00:35:54,042 --> 00:35:56,250 Deci, haideți să vedem de fapt ce putem face cu JavaScript. 720 00:35:56,250 --> 00:35:59,410 Și în special, acest lucru este o listă lungă de caracteristici 721 00:35:59,410 --> 00:36:02,300 care browsere au ca ne permit să cârlig JavaScript 722 00:36:02,300 --> 00:36:05,470 într-un site web în felul următor. 723 00:36:05,470 --> 00:36:09,340 JavaScript este adesea folosit ca un partea de client limbaj de scripting. 724 00:36:09,340 --> 00:36:10,130 Nu este compilat. 725 00:36:10,130 --> 00:36:11,370 Se prea este interpretat. 726 00:36:11,370 --> 00:36:15,740 Dar spre deosebire de PHP, care a fost difuzate pe server, în serverul de web, 727 00:36:15,740 --> 00:36:18,220 sau în interiorul profundă a clienti, JavaScript 728 00:36:18,220 --> 00:36:22,190 este diferit prin aceea că de obicei rulează în browser. 729 00:36:22,190 --> 00:36:26,060 >> Deci, orice cod JavaScript de a începe scris pentru proiectul final PSET 8, sau, 730 00:36:26,060 --> 00:36:29,890 sau în lumea reală este, în general, merge să fie salvate pe server, absolut 731 00:36:29,890 --> 00:36:33,110 într-un HTML punct sau punct JS pentru fișier JavaScript. 732 00:36:33,110 --> 00:36:35,770 Dar browser-ul se întâmplă pentru a descărca că JavaScript 733 00:36:35,770 --> 00:36:39,530 codul pentru propriul exemplu de Chrome, sau IE, Firefox sau, sau orice altceva. 734 00:36:39,530 --> 00:36:43,870 Iar codul este de fapt mergi la a lua executat în interiorul propriului browser. 735 00:36:43,870 --> 00:36:46,560 Doar pentru a face acest lucru mult mai reale, să vedem acest lucru în formă concretă. 736 00:36:46,560 --> 00:36:50,120 >> Nu avem nici o idee despre ceea ce face acest cod fără să citească într-adevăr prin ea. 737 00:36:50,120 --> 00:36:52,670 Dar lasă-mă să merg la Facebook.com fără să vă conectați. 738 00:36:52,670 --> 00:37:00,440 Lasă-mă să merg la Controlați Element și du-te la, să zicem, de rețea și reîncărcați pagina. 739 00:37:00,440 --> 00:37:04,150 Și vom see-- permiteți-mi să schimbe Reload Pagina pentru a obține toate cererile pentru noi. 740 00:37:04,150 --> 00:37:08,850 Și primul care fișier vad este CSS, CSS. 741 00:37:08,850 --> 00:37:10,880 Iată primul JavaScript dosar, și am 742 00:37:10,880 --> 00:37:14,600 nici o idee despre ce face acest lucru, dar aici este o parte din codul JavaScript 743 00:37:14,600 --> 00:37:16,180 care conduce Facebook. 744 00:37:16,180 --> 00:37:18,400 Nu e chiar adevărat că dezvăluind pentru a mări. 745 00:37:18,400 --> 00:37:20,260 E încă la fel de lipsit de sens. 746 00:37:20,260 --> 00:37:24,341 >> Dar veți vedea chiar mai jos, nu e chiar mai multe dintre aceste fișiere JavaScript. 747 00:37:24,341 --> 00:37:24,840 Ne pare rău. 748 00:37:24,840 --> 00:37:25,440 Asta e un ping. 749 00:37:25,440 --> 00:37:28,550 Să mergem în jos un pic în plus, și mai mult, și mai mult. 750 00:37:28,550 --> 00:37:29,894 Nu e unul. 751 00:37:29,894 --> 00:37:31,238 Nu e unul. 752 00:37:31,238 --> 00:37:31,880 Nu e unul. 753 00:37:31,880 --> 00:37:35,820 >> Deci, chiar dacă Facebook, în spatele scene, este scris în parte în PHP 754 00:37:35,820 --> 00:37:39,100 și Facebook propria versiune a acestuia, există o mare cantitate de JavaScript. 755 00:37:39,100 --> 00:37:41,330 De fapt, orice a chat faci pe Facebook, 756 00:37:41,330 --> 00:37:45,520 oricare dintre actualizările inline cronologie care se întâmplă în timp real, toate din care 757 00:37:45,520 --> 00:37:47,944 este condusă de JavaScript. 758 00:37:47,944 --> 00:37:48,444 Da? 759 00:37:48,444 --> 00:37:50,235 >> Audiența: Nu sunt sigur în cazul în care acest lucru este Facebook, 760 00:37:50,235 --> 00:37:53,624 dar m-am gândit că Facebook a dezvoltat propria lor in-house limbaj cod? 761 00:37:53,624 --> 00:37:54,540 DAVID MALAN: Au făcut-o. 762 00:37:54,540 --> 00:37:58,110 Deci, de aceea spun o variație de PHP numit Hip Hop că ei de fapt 763 00:37:58,110 --> 00:38:03,440 caracteristici adăugate în astfel încât, atunci când Mark puse în aplicare în primul rând Facebook, 764 00:38:03,440 --> 00:38:04,710 a fost scris în PHP. 765 00:38:04,710 --> 00:38:07,370 Și la fel de bine a rămas un fel de limbaj front-end 766 00:38:07,370 --> 00:38:09,030 pe care le folosesc pentru mult de codificare a acestora, dar 767 00:38:09,030 --> 00:38:11,870 nu a fost o limbă care este cântare deosebit de bine la miliarde 768 00:38:11,870 --> 00:38:12,630 de oameni. 769 00:38:12,630 --> 00:38:15,300 Și astfel ei au adăugat propriile lor îmbunătățiri în spatele scenei. 770 00:38:15,300 --> 00:38:17,049 Și ei folosesc orice număr de alte limbi 771 00:38:17,049 --> 00:38:19,170 pentru diverse piese de infrastructura lor. 772 00:38:19,170 --> 00:38:24,080 Deci da, este o variație de ceea ce stim acum ca PHP. 773 00:38:24,080 --> 00:38:26,610 >> Așa că haideți să aruncăm o privire la câteva exemple 774 00:38:26,610 --> 00:38:28,890 de modul în care am putea folosi JavaScript aici. 775 00:38:28,890 --> 00:38:32,530 În codul sursă de astăzi, avem o grămadă de fișiere, dintre care primul, 776 00:38:32,530 --> 00:38:34,090 hai sa numit DOM zero. 777 00:38:34,090 --> 00:38:36,770 Deci, DOM zero, arată după cum urmează. 778 00:38:36,770 --> 00:38:40,730 Lasă-mă să merg în acest director și deschide domzero.html, 779 00:38:40,730 --> 00:38:44,970 partea de sus a care are un tip doc declarație, spunând că aici vine HTML 5. 780 00:38:44,970 --> 00:38:46,440 Și acum iată un tag HTML. 781 00:38:46,440 --> 00:38:47,540 Iată tag-ul cap. 782 00:38:47,540 --> 00:38:49,210 Și aici e ceea ce este nou astăzi. 783 00:38:49,210 --> 00:38:52,620 >> Avem acum o etichetă script în interiorul capului a paginii. 784 00:38:52,620 --> 00:38:55,290 Și acest lucru se pare că nu foarte puțin, dar aviz 785 00:38:55,290 --> 00:38:58,410 care le-am definit un script-ul, un JavaScript. 786 00:38:58,410 --> 00:39:01,050 Și, ca o paranteză, deoarece aceasta este o concepție greșită comună, 787 00:39:01,050 --> 00:39:05,220 JavaScript nu are absolut nimic de a face cu Java, limbajul 788 00:39:05,220 --> 00:39:08,010 că unii dintre voi s-ar putea au învățat în APCS. 789 00:39:08,010 --> 00:39:10,480 A fost mai mult de un marketing lucru decât orice, 790 00:39:10,480 --> 00:39:12,980 echitatie coattails de Java ani în urmă. 791 00:39:12,980 --> 00:39:17,300 Dar JavaScript, nimic de-a face cu Java, doar în mod similar, și enervant, 792 00:39:17,300 --> 00:39:18,480 confuz pe nume. 793 00:39:18,480 --> 00:39:21,890 >> Deci, aici este modul în care declara o funcție în JavaScript, spune literalmente funcție, 794 00:39:21,890 --> 00:39:24,556 apoi numele funcției, atunci orice argumente s-ar putea lua, 795 00:39:24,556 --> 00:39:25,530 la fel ca în PHP. 796 00:39:25,530 --> 00:39:28,990 Se pare că în JavaScript, una dintre cele mai Funcțiile enervant care există este alertă. 797 00:39:28,990 --> 00:39:31,392 Aceasta este o fereastră mică care va apărea și vă avertizăm 798 00:39:31,392 --> 00:39:32,600 la unele bucată de informații. 799 00:39:32,600 --> 00:39:33,766 Este, în general, se încruntă la. 800 00:39:33,766 --> 00:39:35,980 Dar o vom folosi ca nostru primul exercițiu aici. 801 00:39:35,980 --> 00:39:37,900 >> Observați câteva caracteristici ale JavaScript. 802 00:39:37,900 --> 00:39:41,524 Ghilimele simple și ghilimele Nu mai contează de fapt. 803 00:39:41,524 --> 00:39:43,690 Ghilimele simple si duble citate pot fi schimbate, 804 00:39:43,690 --> 00:39:46,220 întrucât în ​​C, va trebui să utilizați ghilimele duble pentru siruri de caractere, 805 00:39:46,220 --> 00:39:48,150 și aveți două singur citate de caractere. 806 00:39:48,150 --> 00:39:51,150 În lumea JavaScript, mulți oameni, cei mai mulți oameni 807 00:39:51,150 --> 00:39:54,970 Folosiți ghilimele simple din jurul siruri de caractere doar pentru că este un lucru stilistic. 808 00:39:54,970 --> 00:39:58,330 Dar ceea ce este operatorul plus aici, pe care nu le-am văzut mai înainte? 809 00:39:58,330 --> 00:39:59,836 >> Audiența: Concatenarea. 810 00:39:59,836 --> 00:40:00,960 DAVID MALAN: Concatenarea. 811 00:40:00,960 --> 00:40:02,450 Deci, C nu are nici măcar acest lucru. 812 00:40:02,450 --> 00:40:04,820 PHP are operatorul punct, care face acest lucru. 813 00:40:04,820 --> 00:40:09,710 JavaScript are operatorul plus, care confuz este la fel ca Java. 814 00:40:09,710 --> 00:40:11,440 Acum, ce se întâmplă aici? 815 00:40:11,440 --> 00:40:14,260 >> Deci, aici e în cazul în care o bază înțelegerea de care imagine 816 00:40:14,260 --> 00:40:17,010 ne-am aruncat un cuplu zile în urmă intră în joc. 817 00:40:17,010 --> 00:40:19,620 Amintiți-vă atunci când am avut un simplu versiune a unui HTML page-- 818 00:40:19,620 --> 00:40:20,830 el tocmai a spus, salut lume. 819 00:40:20,830 --> 00:40:22,770 Și apoi am desenat un copac la dreapta, pe care 820 00:40:22,770 --> 00:40:27,320 a avut o grămadă de dreptunghiuri și linii conectându-le ca un arbore genealogic. 821 00:40:27,320 --> 00:40:30,820 Deci, asta e așa-numita DOM sau Document Object Model. 822 00:40:30,820 --> 00:40:36,759 Și se pare că puteți accesa dreptunghiuri în acel copac cu sintaxa 823 00:40:36,759 --> 00:40:37,550 cum ar fi următoarele. 824 00:40:37,550 --> 00:40:41,370 Tu spui pur și simplu de document, care este o Global variabilă specială într-un JavaScript 825 00:40:41,370 --> 00:40:45,890 program care are o funcție asociate cu ea pe care le puteți accesa 826 00:40:45,890 --> 00:40:50,280 similar cu un struct, dar pur și simplu spune punct si apoi numele functiei, 827 00:40:50,280 --> 00:40:52,390 a obține elementul de identificare. 828 00:40:52,390 --> 00:40:55,460 >> Elementul Vreau să ajung este aparent cita numele încheiat citatul. 829 00:40:55,460 --> 00:40:57,150 Și apoi m-am doriți să obțineți valoarea sa. 830 00:40:57,150 --> 00:40:58,330 Acum ajungem înainte de noi înșine. 831 00:40:58,330 --> 00:41:00,038 Nici măcar nu sunt sigur ce toate acestea sunt despre. 832 00:41:00,038 --> 00:41:03,000 Să înainte de rapid pentru a HTML pe pagina, care este super simplu. 833 00:41:03,000 --> 00:41:05,370 >> Observați că am definit o forma aici. 834 00:41:05,370 --> 00:41:07,940 Observați L-am dat un unic ID-ul, chiar dacă noi nu am folosit 835 00:41:07,940 --> 00:41:08,870 acest atribut înainte. 836 00:41:08,870 --> 00:41:11,300 Dar acest lucru există în HTML. 837 00:41:11,300 --> 00:41:15,570 Puteți identifica în mod unic o anumită bucată din HTML cu un identificator de genul asta. 838 00:41:15,570 --> 00:41:19,880 >> Observații acum astea-- se dovedește HTML susține, pe această listă spălătorie 839 00:41:19,880 --> 00:41:22,490 Acum un moment, un întreg buchet de Stivuitoare eveniment. 840 00:41:22,490 --> 00:41:25,060 Și acest tratare a evenimentului spune pe inscrieti. 841 00:41:25,060 --> 00:41:28,730 Privind transmiterea de utilizare a acestei formular, sunați la următorul cod. 842 00:41:28,730 --> 00:41:31,360 Și codul care va să fie numit sau executate 843 00:41:31,360 --> 00:41:35,260 este exact acest lucru, greacă Funcția urmată de fals întoarcere. 844 00:41:35,260 --> 00:41:37,360 Orice altceva ar trebui să să fie destul de familiar. 845 00:41:37,360 --> 00:41:42,050 >> Aici este o intrare de tip text, a cărui ID-ul, în acest caz, va fi numele. 846 00:41:42,050 --> 00:41:45,430 Noi nu avem un atribut nume real acest time-- și un buton de trimitere. 847 00:41:45,430 --> 00:41:48,330 Deci, pagina rezultată arata ca acest lucru. 848 00:41:48,330 --> 00:41:52,890 Și comportamentul rezultat, veți vedea, arata ca aceasta. 849 00:41:52,890 --> 00:41:56,940 Pagina găzduiește locale spune: salut David, cu greu un punct de vedere estetic 850 00:41:56,940 --> 00:41:58,340 mod de a saluta un utilizator. 851 00:41:58,340 --> 00:41:59,950 Dar ceea ce de fapt se întâmplă? 852 00:41:59,950 --> 00:42:01,360 >> Ei bine, ia în considerare ceea ce este aceasta. 853 00:42:01,360 --> 00:42:02,310 Acesta este un câmp de text. 854 00:42:02,310 --> 00:42:04,635 Și în conformitate cu HTML aici, mi-am dat 855 00:42:04,635 --> 00:42:07,350 un identificator unic chemat citat numele încheiat citatul. 856 00:42:07,350 --> 00:42:09,770 Între timp, am spus atunci când utilizatorul susține acest formular 857 00:42:09,770 --> 00:42:13,820 prin apăsarea Enter sau clic pe butonul Submit buton, apelați funcția numit Greet 858 00:42:13,820 --> 00:42:15,410 și apoi să se întoarcă Fals. 859 00:42:15,410 --> 00:42:16,870 Să considerăm cele în sens invers. 860 00:42:16,870 --> 00:42:20,590 Observați atunci când am faceți clic pe Trimiteți, URL-ul paginii nu se schimba. 861 00:42:20,590 --> 00:42:22,420 Icon a browser-ului nu a început filare. 862 00:42:22,420 --> 00:42:27,050 Nu am mers nicăieri, și asta e pur și simplu pentru că am spus return false. 863 00:42:27,050 --> 00:42:31,534 Revino scurtcircuitelor false sau de la opritoarele comportamentul implicit a unui formular. 864 00:42:31,534 --> 00:42:33,700 Așa că atunci ne lasă cu aceasta o ultimă întrebare. 865 00:42:33,700 --> 00:42:34,764 Ce face Greet? 866 00:42:34,764 --> 00:42:36,680 Ei bine, se pare că Greet solicită o funcție numită 867 00:42:36,680 --> 00:42:39,250 Alert, trece într-o singură argument lung e 868 00:42:39,250 --> 00:42:43,950 rezultatul concatenarea împreună o buchet de siruri, salut spațiu virgulă, 869 00:42:43,950 --> 00:42:45,810 atunci tot ce se întoarce acest lucru. 870 00:42:45,810 --> 00:42:51,490 Deci, document care este ca un global variabilă la acea rădăcină de copac, 871 00:42:51,490 --> 00:42:55,560 apelarea unei funcții speciale, altfel acum cunoscut ca metoda. 872 00:42:55,560 --> 00:42:57,650 O funcție care este în interiorul unei variabile este 873 00:42:57,650 --> 00:42:59,640 numit o metodă în loc de o funcție. 874 00:42:59,640 --> 00:43:01,570 >> Asa ca element de ID. 875 00:43:01,570 --> 00:43:03,940 Ce element pe care îl faci doriți să obțineți prin ID-ul său? 876 00:43:03,940 --> 00:43:06,970 Citat numele încheiat citatul și atunci valoarea specific. 877 00:43:06,970 --> 00:43:12,000 Deci, cu alte cuvinte, acel cod simplu constată câmpul de text al cărui nume este ID-ul 878 00:43:12,000 --> 00:43:13,380 și apoi devine valoarea sa. 879 00:43:13,380 --> 00:43:16,460 Deci, dacă ar fi să schimbe acest lucru și spune Davin în loc de David, 880 00:43:16,460 --> 00:43:20,670 și faceți clic pe Submit, acum ne au un salut pentru Davin. 881 00:43:20,670 --> 00:43:22,890 >> Bine, deci tot fin și bun. 882 00:43:22,890 --> 00:43:25,480 Dar să vedem dacă putem face aceasta un pic mai curat, deoarece doar 883 00:43:25,480 --> 00:43:28,190 scrie cod ca acest lucru este în general, va fi dezaprobat. 884 00:43:28,190 --> 00:43:30,060 Acest lucru se va arata infricosator. 885 00:43:30,060 --> 00:43:32,330 Dar ceea ce este primul diferență care să notați aici 886 00:43:32,330 --> 00:43:35,970 în această versiune pe lângă numele se schimbă la un DOM? 887 00:43:35,970 --> 00:43:41,110 Ce structural arată diferit despre aceasta față de celălalt? 888 00:43:41,110 --> 00:43:41,932 Da? 889 00:43:41,932 --> 00:43:43,890 Audiența: este forma pe partea de sus a script-ul acum? 890 00:43:43,890 --> 00:43:46,570 DAVID MALAN: Da, formularul este pe partea de sus a scenariului pentru un motiv oarecare curios. 891 00:43:46,570 --> 00:43:48,736 Deci, asta e primul lucru care sare la mine, de asemenea. 892 00:43:48,736 --> 00:43:50,990 Și din fericire, cel puțin, această parte este identic. 893 00:43:50,990 --> 00:43:53,470 Deci, singurul lucru care pare a fi diferit este acest lucru. 894 00:43:53,470 --> 00:43:55,296 >> Deci, aici e ceea ce e curat despre JavaScript 2. 895 00:43:55,296 --> 00:43:57,420 Și-l face greu de înțelege la prima vedere, 896 00:43:57,420 --> 00:44:00,670 în special pentru proiectele finale, după căutați la mostre de cod on-line, 897 00:44:00,670 --> 00:44:04,200 dar se reduce la o anumită caracteristici sintactice de bază. 898 00:44:04,200 --> 00:44:06,230 Aici, din nou este faptul că Document Global variabilă. 899 00:44:06,230 --> 00:44:09,540 Aici, din nou este faptul ca metodă sau funcție care spune că ajunge elementul de identificare. 900 00:44:09,540 --> 00:44:11,570 De data aceasta vreau să a obține ID-ul numit demo. 901 00:44:11,570 --> 00:44:12,490 Unde este asta? 902 00:44:12,490 --> 00:44:15,400 Asta-i aparent corect aici, forma în sine. 903 00:44:15,400 --> 00:44:20,010 >> Și acum observați că se pare că, dacă am mă întorc acel nod din pomul din care 904 00:44:20,010 --> 00:44:22,940 reprezintă forma în sine, nu un câmp de text, 905 00:44:22,940 --> 00:44:26,970 se pare că forma, care nod sau dreptunghi din copac, 906 00:44:26,970 --> 00:44:30,450 are ceea ce vom numi o proprietate, foarte, foarte, foarte asemănătoare 907 00:44:30,450 --> 00:44:35,390 în spirit la un struct în C. E doar un membru de date în interiorul acestui dreptunghi. 908 00:44:35,390 --> 00:44:38,300 >> Așa că am forma aici, și eu sunt atașarea, 909 00:44:38,300 --> 00:44:44,650 sau mă atribuirea, pentru a On său Trimite handler sau mai degrabă Trimite pe proprietate 910 00:44:44,650 --> 00:44:45,740 următoarea funcție. 911 00:44:45,740 --> 00:44:49,000 Și acest lucru este, de departe, cel mai nebun lucru până acum punct de vedere sintactic. 912 00:44:49,000 --> 00:44:53,610 Se pare în JavaScript și în PHP, și sincer pentru care contează în C, 913 00:44:53,610 --> 00:44:58,990 chiar dacă noi nu o facem, puteți adauga fără nume, anonim, sau AKA lambda 914 00:44:58,990 --> 00:45:03,000 Funcțiile care nu au un nume dar poate fi numit totuși. 915 00:45:03,000 --> 00:45:07,050 >> Deci, ce fac aici este am atribuire această Trimite pe proprietate, care 916 00:45:07,050 --> 00:45:14,330 Este în interiorul acestui nod arborelui DOM mea, o funcție, funcția de indicator dacă vrei. 917 00:45:14,330 --> 00:45:16,310 Această funcție nu are nici o nume, dar asta nu o face 918 00:45:16,310 --> 00:45:19,110 contează că vom vedea într-un moment cum să-l numesc. 919 00:45:19,110 --> 00:45:21,780 Când această funcție este numit, acest cod este executat, atunci 920 00:45:21,780 --> 00:45:24,210 fals este returnat la fel ca înainte. 921 00:45:24,210 --> 00:45:25,800 >> Dar observați ce am făcut. 922 00:45:25,800 --> 00:45:27,830 În acest moment, în poveste, am un formular. 923 00:45:27,830 --> 00:45:30,190 Are un ID unic numit demo. 924 00:45:30,190 --> 00:45:33,740 Aici, am o etichetă script care execută codul de mai jos. 925 00:45:33,740 --> 00:45:37,720 Aceasta se leagă de faptul că nod în copac pentru că e pe Submit 926 00:45:37,720 --> 00:45:40,260 proprietate această funcție aici. 927 00:45:40,260 --> 00:45:44,310 Și doar prin natura cum functioneaza browsere, când acum am faceți clic pe Trimite sau tasta Enter, 928 00:45:44,310 --> 00:45:45,889 această funcție este mergi la a lua numit. 929 00:45:45,889 --> 00:45:48,680 Ea nu are nevoie de un nume pentru că cine naiba îi pasă ce se numește. 930 00:45:48,680 --> 00:45:52,540 Singura dată când acesta este niciodată mergi la a lua chemat este atunci când am depuneti formularul de cerere. 931 00:45:52,540 --> 00:45:55,130 Nu e nevoie de mine, dezvoltator uman, 932 00:45:55,130 --> 00:45:57,330 să-i spunem de fapt în altă parte. 933 00:45:57,330 --> 00:46:00,720 >> Acum, la fel ca și un teaser, ca în cazul în care nu au fost minte îndoire suficient, 934 00:46:00,720 --> 00:46:03,330 putem face chiar acest lucru uita-te folosind mai criptic 935 00:46:03,330 --> 00:46:05,850 o bibliotecă foarte popular numit jQuery. 936 00:46:05,850 --> 00:46:08,760 De fapt, jQuery și JavaScript sunt de multe ori inclus. 937 00:46:08,760 --> 00:46:12,790 Și ce vom face, miercuri, este de pornire folosirea acestui limbaj și aceste biblioteci 938 00:46:12,790 --> 00:46:16,030 pentru a construi din ce în ce asincron și aplicații dinamice 939 00:46:16,030 --> 00:46:18,950 cum ar fi harta de asistent aplicatii, aplicatii 940 00:46:18,950 --> 00:46:22,360 că a actualiza pagina web în timp real timp, la fel ca Facebook sau Gchat 941 00:46:22,360 --> 00:46:27,130 face, și nu mai ne limităm la lovirea Trimite prin o prezentare sau doar posta 942 00:46:27,130 --> 00:46:27,630 singur. 943 00:46:27,630 --> 00:46:29,055 Așa că veți vedea miercuri. 944 00:46:29,055 --> 00:46:31,805 945 00:46:31,805 --> 00:46:35,550 >> [MUSIC JOC] 946 00:46:35,550 --> 00:48:09,728