1 00:00:00,000 --> 00:00:01,940 >> [MUSIC PLAYING] 2 00:00:01,940 --> 00:00:11,130 3 00:00:11,130 --> 00:00:14,620 >> DAVID Malan: Ini adalah CS 50, dan ini adalah awal minggu sembilan. 4 00:00:14,620 --> 00:00:18,240 Dan apa yang kami pikir kami akan lakukan hari ini adalah tidak hanya menutup bab tentang minggu lalu 5 00:00:18,240 --> 00:00:22,670 materi mana kami fokus pada server pemrograman web side dengan PHP dan SQL, 6 00:00:22,670 --> 00:00:23,549 beberapa hal basis data. 7 00:00:23,549 --> 00:00:25,590 Kita akan berbicara tentang sedikit keamanan saat dan kemudian 8 00:00:25,590 --> 00:00:29,590 transisi ke pemrograman sisi klien bahasa yang dikenal sebagai JavaScript. 9 00:00:29,590 --> 00:00:31,330 Tapi pertama-tama, beberapa penebusan. 10 00:00:31,330 --> 00:00:35,030 >> Anda mungkin ingat bahwa pada Rabu, saya berangkat 11 00:00:35,030 --> 00:00:37,550 untuk menulis sebuah situs web yang mengambil input pengguna 12 00:00:37,550 --> 00:00:41,120 oleh HTML bentuk yang kemudian disimpan bahwa nama input pengguna, ponsel 13 00:00:41,120 --> 00:00:43,124 angka, dan ponsel operator dalam database. 14 00:00:43,124 --> 00:00:45,540 Dan kemudian aku perintah sedikit naskah baris yang ditulis dalam PHP 15 00:00:45,540 --> 00:00:47,956 yang seharusnya iterate atas baris dalam database 16 00:00:47,956 --> 00:00:49,400 dan mengirimkan pesan teks. 17 00:00:49,400 --> 00:00:53,870 Meskipun beberapa, beberapa upaya, kita tidak mendapatkan kerja bahwa pada akhirnya. 18 00:00:53,870 --> 00:00:57,820 >> Jadi aku menghabiskan seluruh minggu ini bekerja pada kode yang untuk mendapatkan kita melewati titik 19 00:00:57,820 --> 00:01:01,220 tempat kami tinggalkan, dimana semua Aku punya pada akhir Rabu 20 00:01:01,220 --> 00:01:05,500 adalah pesan teks ini dari Margo saat aku berjuang, 21 00:01:05,500 --> 00:01:09,940 diikuti dengan pesan teks dari yang lain teman sekelas, Anda punya David ini. 22 00:01:09,940 --> 00:01:14,030 Diikuti oleh satu ini, luar biasa menggembirakan. 23 00:01:14,030 --> 00:01:15,840 Terus terjadi, sangat menggembirakan. 24 00:01:15,840 --> 00:01:20,960 Aku hampir mendapatkannya sampai then-- dan itulah catatan kita berakhir pada hari Rabu. 25 00:01:20,960 --> 00:01:25,850 Dan kemudian benar-benar mungkin favorit saya, sesaat kemudian, ini datang. 26 00:01:25,850 --> 00:01:27,000 Sial Hidup Stream. 27 00:01:27,000 --> 00:01:31,080 >> Jadi hari ini, kami memperbaiki ini dengan cepat melihat apa yang telah saya lakukan sejak. 28 00:01:31,080 --> 00:01:35,440 Jadi semua kode ini tersedia online dari minggu lalu, minggu delapan, 29 00:01:35,440 --> 00:01:36,300 kode sumber. 30 00:01:36,300 --> 00:01:39,425 Dan Anda akan melihat bahwa saya pergi melalui, dan aku benar-benar dibersihkan hal-hal sedikit. 31 00:01:39,425 --> 00:01:42,080 Saya memperkenalkan pasangan lain fitur database SQL. 32 00:01:42,080 --> 00:01:45,300 Misalnya, daripada hanya membuat pembawa var arang 33 00:01:45,300 --> 00:01:47,310 karena saya pikir saya lakukan dengan cepat pekan lalu. 34 00:01:47,310 --> 00:01:49,820 Saya bukannya didefinisikan sebagai apa yang disebut enum. 35 00:01:49,820 --> 00:01:53,310 >> Dan beberapa dari Anda mungkin telah melihat ini seperti kami menjelajahi C. Enum sebenarnya 36 00:01:53,310 --> 00:01:56,820 fitur C di mana Anda dapat menghitung sejumlah besar konstanta 37 00:01:56,820 --> 00:01:59,640 dan menetapkan mereka nilai otomatis, seperti satu, dua, tiga, empat 38 00:01:59,640 --> 00:02:01,330 tanpa harus nomor kode keras. 39 00:02:01,330 --> 00:02:04,780 Jadi SQL mendukung sama, dimana jika Anda memiliki bidang database yang Anda hanya 40 00:02:04,780 --> 00:02:09,389 ingin mengambil salah satu terbatas nilai-nilai, Anda benar-benar dapat menentukan 41 00:02:09,389 --> 00:02:13,120 seperti yang saya lakukan di sana selama empat populer US operator ponsel. 42 00:02:13,120 --> 00:02:13,819 >> Jadi saya melakukan itu. 43 00:02:13,819 --> 00:02:16,610 Dan saya membuat beberapa perubahan sebagai baik, yang paling penting yang 44 00:02:16,610 --> 00:02:20,090 adalah untuk mendapatkan email bekerja karena ingat, bahwa program ini bergantung pada yang 45 00:02:20,090 --> 00:02:23,470 umumnya disebut email ke SMS gateway, yang hanya 46 00:02:23,470 --> 00:02:27,670 cara mewah untuk mengatakan bahwa Verizon, dan AT & T, dan orang-orang lainnya mendukung server, 47 00:02:27,670 --> 00:02:30,740 dimana jika menerima email, itu mengkonversi ke SMS 48 00:02:30,740 --> 00:02:33,290 dan mengirimkan teks pesan ke ponsel seseorang. 49 00:02:33,290 --> 00:02:37,010 Jadi jika saya melakukan ini dengan benar, di sini adalah bentuk baru dan ditingkatkan 50 00:02:37,010 --> 00:02:39,259 yang akan berbicara dengan baru dan lebih baik kode, yang 51 00:02:39,259 --> 00:02:40,300 Anda dapat bermain dengan online. 52 00:02:40,300 --> 00:02:44,140 Dan mudah-mudahan akan membuat saya bip telepon hanya dalam beberapa saat. 53 00:02:44,140 --> 00:02:47,240 >> Jadi pertama, saya akan mengetikkan nama saya. 54 00:02:47,240 --> 00:02:51,400 Kedua, aku tidak akan untuk melakukan hal ini saat ini. 55 00:02:51,400 --> 00:02:53,920 Aku akan melakukan Inspect Element. 56 00:02:53,920 --> 00:02:56,710 Dan ini hanyalah sebuah hal kecil jadi saya tidak melakukan 57 00:02:56,710 --> 00:02:59,250 membuat jam pasca produksi bekerja seperti yang saya lakukan terakhir kali. 58 00:02:59,250 --> 00:03:02,300 Ada sekarang adalah nomor telepon saya. 59 00:03:02,300 --> 00:03:03,560 >> Aku akan memilih Verizon. 60 00:03:03,560 --> 00:03:10,260 Dan di sini, mari kita menghidupkan mikrofon ini di sini, dan tujuan ini di ponsel saya di sini. 61 00:03:10,260 --> 00:03:13,130 Aku akan klik Register, yang seharusnya mudah-mudahan 62 00:03:13,130 --> 00:03:14,530 memasukkannya ke dalam database. 63 00:03:14,530 --> 00:03:16,780 Sekarang aku akan pergi ke program baris perintah, yang 64 00:03:16,780 --> 00:03:20,825 ingat disebut dot slash teks, dan lintas jari-jari Anda. 65 00:03:20,825 --> 00:03:24,092 66 00:03:24,092 --> 00:03:26,527 Di sini kita pergi. 67 00:03:26,527 --> 00:03:27,501 >> [Bantingan PHONE] 68 00:03:27,501 --> 00:03:28,962 >> [Tepuk Tangan] 69 00:03:28,962 --> 00:03:31,815 70 00:03:31,815 --> 00:03:34,940 DAVID Malan: Jadi lebih menyenangkan daripada this-- itu menyenangkan, tentu saja, jika saya mendapatkan ke dalamnya. 71 00:03:34,940 --> 00:03:38,004 Tapi itu lebih menyenangkan, saya pikir, jika kita menciptakan salah satu momen film 72 00:03:38,004 --> 00:03:40,420 mana seperti sesuatu yang benar-benar buruk telah terjadi di dunia, 73 00:03:40,420 --> 00:03:42,860 dan seperti semua NSA rakyat ponsel mulai berbunyi 74 00:03:42,860 --> 00:03:44,860 dengan pesan teks mengingatkan mereka untuk fakta ini. 75 00:03:44,860 --> 00:03:47,026 Jadi saya pikir kami akan mencoba untuk menciptakan yang sama di sini, 76 00:03:47,026 --> 00:03:49,610 dimana tidak menggunakan database, Aku bukan di muka 77 00:03:49,610 --> 00:03:51,490 menulis sebuah program yang terlihat seperti ini. 78 00:03:51,490 --> 00:03:53,660 >> Ini adalah index.php-- dan saya meletakkan kode ini secara online 79 00:03:53,660 --> 00:03:56,710 seperti baik yang tampaknya hanya membuat form.php, 80 00:03:56,710 --> 00:04:00,990 menggunakan paradigma gaya MVC yang kita berbicara tentang secara lebih rinci dalam masalah set 81 00:04:00,990 --> 00:04:01,650 tujuh. 82 00:04:01,650 --> 00:04:02,910 Bentuk yang cukup sederhana. 83 00:04:02,910 --> 00:04:06,634 Ini akan tunduk kepada file bernama here.php melalui pos. 84 00:04:06,634 --> 00:04:09,300 Dan itu tampaknya akan bertanya untuk nama, dan nomor telepon, 85 00:04:09,300 --> 00:04:11,400 dan kemudian melalui apa yang disebut- Pilih menu, itu 86 00:04:11,400 --> 00:04:14,250 akan memberikan setidaknya empat US operator ponsel populer, 87 00:04:14,250 --> 00:04:17,470 dan kemudian memungkinkan Anda untuk secara efektif mengambil kehadiran dengan mengklik di sini. 88 00:04:17,470 --> 00:04:20,471 >> Dan di sini, sementara itu, akan meminjam beberapa kode dari terakhir kali. 89 00:04:20,471 --> 00:04:22,553 Dan jika Anda hanya skim ini, Anda akan melihat bahwa ada 90 00:04:22,553 --> 00:04:23,900 sejumlah besar pengecekan error. 91 00:04:23,900 --> 00:04:26,640 Tapi keindahan di akhir adalah bahwa kita tidak menulis ke database saat ini. 92 00:04:26,640 --> 00:04:29,130 Kami menjaganya agar tetap sederhana dan hanya mengirimkan mudah-mudahan 93 00:04:29,130 --> 00:04:32,190 pesan teks melalui fungsi I menulis selama beberapa hari panggilan terakhir 94 00:04:32,190 --> 00:04:36,270 Teks, yang dalam Fungsi. php, yang lagi tersedia secara online. 95 00:04:36,270 --> 00:04:38,210 >> Jadi jika Anda ingin mengambil bagian dalam hal ini. 96 00:04:38,210 --> 00:04:40,190 Kami tidak akan menyimpan apa-apa. 97 00:04:40,190 --> 00:04:43,809 Pergi ke URL ini di sini secara real time. 98 00:04:43,809 --> 00:04:46,850 Jangan mengirimkannya dulu, tapi mari kita melihat apakah kita dapat memiliki salah satu dari film ini 99 00:04:46,850 --> 00:04:49,830 saat di mana ponsel semua orang mulai berbunyi, mudah-mudahan saja 100 00:04:49,830 --> 00:04:53,580 sekali tahun ini tidak seperti tahun 2011 di mana hal ini pergi mengerikan kacau. 101 00:04:53,580 --> 00:04:58,910 Dan setelah Anda pergi ke alamat tersebut, Anda akan melihat bentuk yang super sederhana 102 00:04:58,910 --> 00:05:03,884 bahwa jika Anda memiliki nama, ponsel nomor, dan operator ponsel yang 103 00:05:03,884 --> 00:05:06,175 cocok daftar sana, pergi depan dan mengisi formulir. 104 00:05:06,175 --> 00:05:07,880 Tapi jangan kemudian ajukan dulu. 105 00:05:07,880 --> 00:05:10,850 >> Bentuknya akan terlihat seperti ini. 106 00:05:10,850 --> 00:05:13,660 Pergi ke depan dan ketik nama, nomor telepon. 107 00:05:13,660 --> 00:05:17,670 Oop, seseorang akan di depan kurva. 108 00:05:17,670 --> 00:05:18,170 Tidak apa-apa. 109 00:05:18,170 --> 00:05:19,340 OK, semua orang mengisi formulir. 110 00:05:19,340 --> 00:05:21,400 Ini harus bekerja pada telepon, juga, jika Anda ingin. 111 00:05:21,400 --> 00:05:23,695 Baiklah, pada tanda Anda, mendapatkan set, pergi. 112 00:05:23,695 --> 00:05:24,195 Hit sini. 113 00:05:24,195 --> 00:05:27,275 114 00:05:27,275 --> 00:05:27,775 Apa? 115 00:05:27,775 --> 00:05:31,140 116 00:05:31,140 --> 00:05:31,640 Tidak. 117 00:05:31,640 --> 00:05:34,410 118 00:05:34,410 --> 00:05:40,250 Aku bersumpah demi Tuhan, saya diuji ini beberapa kali hari ini. 119 00:05:40,250 --> 00:05:41,720 Anda mendapatkannya? 120 00:05:41,720 --> 00:05:43,145 >> [Interposing SUARA] 121 00:05:43,145 --> 00:05:46,470 122 00:05:46,470 --> 00:05:49,560 >> DAVID Malan: OK, kesalahan pengguna mungkin. 123 00:05:49,560 --> 00:05:50,550 Itu dua. 124 00:05:50,550 --> 00:05:53,300 Ini bekerja untuk dua dari beberapa ratus, tiga, empat. 125 00:05:53,300 --> 00:05:55,940 OK, itu bagus. 126 00:05:55,940 --> 00:05:58,520 Empat dari lima untuk Kebenaran bagaimana. 127 00:05:58,520 --> 00:05:59,810 >> Jadi apa yang baru saja terjadi? 128 00:05:59,810 --> 00:06:02,727 Jadi mungkin, tanpa melihat Anda layar, mengapa mungkin itu telah errored? 129 00:06:02,727 --> 00:06:05,518 Ini mungkin bahwa kita hanya mencoba untuk membuat terlalu banyak koneksi 130 00:06:05,518 --> 00:06:08,110 ke server mail Harvard semua pada sekali dari alamat IP yang sama. 131 00:06:08,110 --> 00:06:10,740 Aku hanya menebak karena saya tidak memiliki kemewahan pengujian 132 00:06:10,740 --> 00:06:13,220 kode ini dengan beberapa 300 orang di muka 133 00:06:13,220 --> 00:06:16,040 tapi untuk saat ini menyadari bahwa bahwa setidaknya harus 134 00:06:16,040 --> 00:06:18,250 mendapatkan pekerjaan yang dilakukan saat ini. 135 00:06:18,250 --> 00:06:22,880 >> Baiklah, jadi mengapa ini semua lebih erat dengan apa yang terjadi? 136 00:06:22,880 --> 00:06:24,900 Yah pertama, cepat beberapa pengumuman. 137 00:06:24,900 --> 00:06:29,350 Jadi satu, jika Anda ingin bergabung Chang, dan Nick, dan lain-lain saat makan siang hari Jumat ini, 138 00:06:29,350 --> 00:06:32,400 melakukan RSVP pada URL biasa ada. 139 00:06:32,400 --> 00:06:35,650 Jika Anda berpikir untuk berkonsentrasi di atau melakukan sekunder di CS, 140 00:06:35,650 --> 00:06:38,941 apakah Anda seorang mahasiswa, atau mahasiswa, atau bahkan junior atau senior di titik ini 141 00:06:38,941 --> 00:06:42,490 dan masih bisa menekan dalam kursus, menyadari bahwa sekolah teknik 142 00:06:42,490 --> 00:06:45,620 adalah mengumpulkan secara gratis Ben dan Jerry es krim dan saran 143 00:06:45,620 --> 00:06:48,910 tak lama setelah kelas Rabu ini di 04:00 di gedung CS 144 00:06:48,910 --> 00:06:49,771 di Maxwell Dworkin. 145 00:06:49,771 --> 00:06:51,520 Jika ini terlalu cepat di layar, hanya pergi 146 00:06:51,520 --> 00:06:55,260 untuk cs50.harvard.edu untuk Link ke acara Facebook 147 00:06:55,260 --> 00:06:57,140 di mana Anda dapat melihat rincian lebih lanjut. 148 00:06:57,140 --> 00:07:01,390 >> Sementara itu, saya pikir saya akan memperbaiki satu hal lain yang saya melakukan kesalahan pada hari Rabu. 149 00:07:01,390 --> 00:07:04,400 Ternyata bahwa Markus ID di Facebook tidak tiga. 150 00:07:04,400 --> 00:07:05,230 Itu empat. 151 00:07:05,230 --> 00:07:08,330 Ternyata dia memiliki lebih banyak tes rekening daripada aku ingat. 152 00:07:08,330 --> 00:07:12,400 Tapi apa ini merasa seperti kesempatan lakukan adalah untuk menarik sebuah URL seperti ini. 153 00:07:12,400 --> 00:07:16,680 >> Jadi ternyata bahwa Facebook memiliki API, Application Programming Interface, 154 00:07:16,680 --> 00:07:20,070 yang merupakan mekanisme dimana Anda dapat meminta data pemrograman 155 00:07:20,070 --> 00:07:24,480 di Facebook dan mendapatkan kembali mesin informasi yang dapat dibaca, tidak pada halaman web 156 00:07:24,480 --> 00:07:28,690 tapi hanya teks mentah, sesuatu disebut JavaScript Object Notation. 157 00:07:28,690 --> 00:07:32,150 Dan pada kenyataannya, jika saya mengunjungi ini URL, dan zoom in, secara default, 158 00:07:32,150 --> 00:07:34,960 ini adalah Markus publik informasi yang dapat diakses. 159 00:07:34,960 --> 00:07:37,430 >> Dan detail yang menarik di sini adalah hanya bahwa ID nya 160 00:07:37,430 --> 00:07:40,670 memang, nomor empat, yang saya menyadari begitu aku melakukan ini. 161 00:07:40,670 --> 00:07:44,260 Anda dapat melakukan ini sendiri jika Anda tahu nama pengguna Facebook Anda jika Anda memiliki satu. 162 00:07:44,260 --> 00:07:45,440 Ketik saja di bagian atas sana. 163 00:07:45,440 --> 00:07:46,640 Dan semua ini adalah pribadi. 164 00:07:46,640 --> 00:07:48,670 Aku hanya melakukan hal ini bahkan dalam mode penyamaran. 165 00:07:48,670 --> 00:07:49,900 Jadi aku bahkan tidak login. 166 00:07:49,900 --> 00:07:54,440 Dan kau melihat bahwa saya rupanya pengguna nomor 6454 167 00:07:54,440 --> 00:07:56,480 di Facebook, yang tidak terlalu buruk hari ini. 168 00:07:56,480 --> 00:07:59,900 Jadi bagaimanapun, Anda juga akan melihat informasi tambahan di sana. 169 00:07:59,900 --> 00:08:02,150 >> Dan aspek yang berguna itu adalah bahwa Anda 170 00:08:02,150 --> 00:08:06,890 bisa menulis perangkat lunak Anda sendiri yang entah bagaimana mengintegrasikan data seperti ini 171 00:08:06,890 --> 00:08:08,170 ke dalam aplikasi Anda sendiri. 172 00:08:08,170 --> 00:08:10,650 Anda dapat memberdayakan pengguna untuk login ke website Anda, 173 00:08:10,650 --> 00:08:14,190 tidak menggunakan nama pengguna kustom mereka sendiri dan sandi tapi mungkin login Facebook mereka 174 00:08:14,190 --> 00:08:16,170 dan mendapatkan informasi bahkan tentang teman-teman mereka, 175 00:08:16,170 --> 00:08:18,740 jika mereka menyetujui seperti, atau serupa. 176 00:08:18,740 --> 00:08:21,430 Jadi perhatikan CS50 itu juga, memiliki beberapa API sendiri, 177 00:08:21,430 --> 00:08:24,620 satu untuk data katalog saja, beberapa untuk menu pelukan di makan 178 00:08:24,620 --> 00:08:26,730 ruang, semua bangunan dan lokasi 179 00:08:26,730 --> 00:08:30,930 di kampus kita memiliki API untuk juga bahwa Anda dapat query sama dan mendapatkan 180 00:08:30,930 --> 00:08:35,520 data tekstual kembali yang Anda dapat mengintegrasikan menjadi PHP, atau JavaScript, atau bahkan, 181 00:08:35,520 --> 00:08:38,320 meskipun kurang umum, sebuah Tugas akhir C berbasis. 182 00:08:38,320 --> 00:08:41,190 >> Memang ke depan untuk final proyek adalah beberapa tonggak. 183 00:08:41,190 --> 00:08:42,980 Anda mendapat email dari kami hari lain. 184 00:08:42,980 --> 00:08:45,761 Sadarilah bahwa proposal adalah karena ini hari Senin mendatang. 185 00:08:45,761 --> 00:08:49,010 Ini tidak selalu mengikat, tetapi Anda perlu untuk menerima rekan-rekan mengajar Anda 186 00:08:49,010 --> 00:08:51,260 persetujuan sebelum membuat perubahan setelahnya. 187 00:08:51,260 --> 00:08:54,280 Dan kemudian ke depan adalah jumlah tonggak lain. 188 00:08:54,280 --> 00:08:56,542 >> Jadi untuk menggoda Anda, juga, dengan beberapa kemungkinan, 189 00:08:56,542 --> 00:08:58,250 kami memiliki sekelompok ini lampu hue. 190 00:08:58,250 --> 00:09:01,190 Dan beberapa dari kalian sekarang memiliki beberapa ini di kamar asrama Anda juga. 191 00:09:01,190 --> 00:09:02,920 Dan mereka juga memiliki API. 192 00:09:02,920 --> 00:09:07,300 Jadi ingat mereka umbi minggu biner lalu bahwa Dan Bradley dan Ansel 193 00:09:07,300 --> 00:09:08,780 Duff diciptakan untuk kita. 194 00:09:08,780 --> 00:09:12,560 Mereka menggunakan antarmuka perangkat lunak untuk bola lampu ini, yang pada saat ini 195 00:09:12,560 --> 00:09:15,232 dicolokkan ke listrik dan kemudian melalui wireless 196 00:09:15,232 --> 00:09:17,690 terhubung ke hal kecil disebut Jembatan di sini, 197 00:09:17,690 --> 00:09:21,280 seperti milik router kecil ke perangkat tertentu. 198 00:09:21,280 --> 00:09:26,540 >> Tapi ternyata jika saya tahu bagaimana mengirim pesan HTTP, seperti yang kita semua lakukan sekarang, 199 00:09:26,540 --> 00:09:31,670 Saya dapat mengirimkan pesan seperti ini untuk bola lampu ini untuk mengaktifkan atau mematikan 200 00:09:31,670 --> 00:09:34,000 atau melakukan sejumlah operasi lain di atasnya. 201 00:09:34,000 --> 00:09:36,110 Perhatikan bahwa itu tidak mendapatkan, itu tidak posting. 202 00:09:36,110 --> 00:09:37,760 Ada satu lagi yang disebut put. 203 00:09:37,760 --> 00:09:39,630 Sebenarnya ada beberapa kata kerja seperti lainnya. 204 00:09:39,630 --> 00:09:42,920 Tapi melihat ada jalan di sana, slash API, slash pengembang baru, 205 00:09:42,920 --> 00:09:44,990 slash cahaya, slash satu, slash negara. 206 00:09:44,990 --> 00:09:49,060 >> Itu tampaknya hanya jalan yang perusahaan, Philips, 207 00:09:49,060 --> 00:09:51,640 memutuskan Anda harus memukul dengan permintaan HTTP 208 00:09:51,640 --> 00:09:55,010 jika Anda ingin mengubah negara dari bola menggunakan HTTP 1.1. 209 00:09:55,010 --> 00:09:56,380 Kemudian perhatikan baris kosong. 210 00:09:56,380 --> 00:10:00,170 Dan kemudian terakhir apa yang tampak seperti jenis array dari beberapa macam, 211 00:10:00,170 --> 00:10:04,730 ini lagi akan dipanggil JavaScript Object Notation, atau Jason. 212 00:10:04,730 --> 00:10:08,000 Dan apa yang Anda lihat di sini adalah bahwa ada tiga pasangan nilai kunci. 213 00:10:08,000 --> 00:10:09,115 >> Salah satu kuncinya adalah meminta. 214 00:10:09,115 --> 00:10:10,990 Dan nilainya rupanya akan menjadi kenyataan. 215 00:10:10,990 --> 00:10:13,612 Kecerahan adalah 128, yang adalah semacam int. 216 00:10:13,612 --> 00:10:15,820 Dan kemudian waktu transisi adalah nol, yang tampaknya 217 00:10:15,820 --> 00:10:17,970 berapa lama itu akan ambil untuk menghidupkan hal ini pada. 218 00:10:17,970 --> 00:10:19,890 >> Jadi sekarang bola lampu ini tidak aktif. 219 00:10:19,890 --> 00:10:22,880 Tapi kalau aku melakukan persis this-- membiarkan saya pergi ke contekan kecil 220 00:10:22,880 --> 00:10:25,200 bahwa Dan didirikan di advance-- dan aku akan 221 00:10:25,200 --> 00:10:27,920 untuk terus maju dan menyalin perintah berikut. 222 00:10:27,920 --> 00:10:30,200 Curl, karena beberapa dari Anda mungkin diperoleh pada CS50 223 00:10:30,200 --> 00:10:35,080 Diskusikan adalah utilitas seperti Telnet seperti Anda dapat mensimulasikan permintaan HTTP, 224 00:10:35,080 --> 00:10:36,360 khusus menempatkan. 225 00:10:36,360 --> 00:10:39,710 Aku dapat mengirim data ini, khusus apa kita hanya 226 00:10:39,710 --> 00:10:43,430 melihat beberapa saat yang lalu khusus ke URL ini di sini. 227 00:10:43,430 --> 00:10:46,310 Dan kemudian Curl akan menangani semua header yang diperlukan 228 00:10:46,310 --> 00:10:47,600 dan parsing dari sana. 229 00:10:47,600 --> 00:10:54,700 >> Jadi semua saya harus lakukan adalah menyalin ini ke jendela terminal dan kemudian tekan Enter. 230 00:10:54,700 --> 00:10:56,000 Dan bola lampu akan menyala. 231 00:10:56,000 --> 00:10:59,060 Dan ini semua akan melalui komputer saya secara nirkabel 232 00:10:59,060 --> 00:11:01,960 entah bagaimana sampai ke jembatan, yang kemudian berbicara dengan bola lampu ini. 233 00:11:01,960 --> 00:11:02,960 Saya dapat melakukan sesuatu yang lain. 234 00:11:02,960 --> 00:11:07,050 Aku bisa membuat hal ini pergi merah misalnya. 235 00:11:07,050 --> 00:11:11,040 Saya bisa misalnya membuat Hal ini go green. 236 00:11:11,040 --> 00:11:12,220 Aku bisa membuatnya pergi biru. 237 00:11:12,220 --> 00:11:14,760 >> Dan melihat di masing-masing contoh, semua yang aku berubah 238 00:11:14,760 --> 00:11:18,540 adalah apa yang disebut nilai hue ke benar-benar memberikan beberapa warna. 239 00:11:18,540 --> 00:11:20,320 Jadi biarkan aku sisipkan satu ini juga. 240 00:11:20,320 --> 00:11:21,000 Sekarang biru. 241 00:11:21,000 --> 00:11:24,672 >> Dan Anda dapat melakukan bahkan lebih menarik hal where-- mari kita pergi ke green. 242 00:11:24,672 --> 00:11:26,630 Dan aku bisa melakukan ini Tentu saja dengan kode sendiri. 243 00:11:26,630 --> 00:11:30,670 Tetapi bahkan API sendiri mendukung operasi yang funky 244 00:11:30,670 --> 00:11:35,510 seperti ini, yang sekarang akan repot-repot kami selama 30 detik berikutnya. 245 00:11:35,510 --> 00:11:39,170 >> Jadi itulah salah satu rasa dari apa yang Anda mungkin lakukan dengan API, yang satu ini melibatkan 246 00:11:39,170 --> 00:11:40,010 bola lampu. 247 00:11:40,010 --> 00:11:42,510 Perhatikan bahwa CS50 memiliki pasangan pasang Google Glass jika Anda lebih 248 00:11:42,510 --> 00:11:45,380 ingin mengatasi sesuatu bersama baris tersebut, Arduino Unos, yang 249 00:11:45,380 --> 00:11:48,670 adalah komputer kecil kecil, dasarnya, pada papan sirkuit kecil 250 00:11:48,670 --> 00:11:50,470 Anda dapat menghubungkan kabel dan hal-hal lain 251 00:11:50,470 --> 00:11:52,732 untuk dan benar-benar kontrol lingkungan dunia nyata Anda. 252 00:11:52,732 --> 00:11:54,940 Dan kemudian ada pasangan mainan baru yang kita miliki. 253 00:11:54,940 --> 00:11:59,294 Yang satu ini benar-benar hanya tiba hari melalui surat, seorang Myo Armband. 254 00:11:59,294 --> 00:12:01,710 Dan saya pikir itu adalah cara untuk membuat Anda bersemangat tentang proyek 255 00:12:01,710 --> 00:12:03,720 yang mungkin Anda gunakan dengan perangkat ini akan 256 00:12:03,720 --> 00:12:08,900 adalah untuk memainkan klip pendek ini yang mereka gunakan untuk menggoda orang-orang 257 00:12:08,900 --> 00:12:10,500 bahwa kita sekarang hidup di masa depan. 258 00:12:10,500 --> 00:12:13,494 259 00:12:13,494 --> 00:12:15,490 >> [MUSIC PLAYING] 260 00:12:15,490 --> 00:13:33,410 261 00:13:33,410 --> 00:13:37,109 >> DAVID Malan: Jadi hanya dalam beberapa minggu, Anda juga dapat bahwa dingin di pameran CS50. 262 00:13:37,109 --> 00:13:39,150 Perangkat lain yang kita memiliki banyak bahwa kita 263 00:13:39,150 --> 00:13:42,090 senang meminjamkan untuk proyek-proyek disebut motion controller. 264 00:13:42,090 --> 00:13:45,030 Ini adalah perangkat USB kecil Anda terhubung ke komputer yang 265 00:13:45,030 --> 00:13:47,520 memungkinkan Anda untuk berinteraksi dengan laptop Anda, Mac atau PC, 266 00:13:47,520 --> 00:13:51,570 seolah-olah Anda memiliki seperti Xbox Kinect dan benar-benar membuat gerakan fisik banyak 267 00:13:51,570 --> 00:13:54,509 seperti kita lihat dalam hal ini visi masa depan. 268 00:13:54,509 --> 00:13:56,505 >> [MUSIC PLAYING] 269 00:13:56,505 --> 00:15:03,380 270 00:15:03,380 --> 00:15:06,260 >> DAVID Malan: Jadi bahkan jika Anda memiliki tidak tahu bagaimana sesuatu seperti itu 271 00:15:06,260 --> 00:15:10,050 mungkin bisa diciptakan atau bekerja pada tingkat perangkat keras, tidak peduli. 272 00:15:10,050 --> 00:15:13,520 Bahkan setelah hanya beberapa bulan CS50, dan pemahaman tentang pemrograman 273 00:15:13,520 --> 00:15:19,460 lebih umum, dan pemrograman web lainnya Baru-baru ini, dan kemudian juga API, dan HTTP, 274 00:15:19,460 --> 00:15:21,830 Anda akan memiliki akses melalui API perangkat lunak jika Anda 275 00:15:21,830 --> 00:15:24,680 ingin meminjam salah satu dari ini perangkat untuk benar-benar berbicara dengan itu 276 00:15:24,680 --> 00:15:27,180 dan tidak perlu khawatir tentang pelaksanaan yang mendasari 277 00:15:27,180 --> 00:15:30,220 Rincian, yang benar-benar konsisten dengan gagasan ini layering 278 00:15:30,220 --> 00:15:33,610 abstraksi yang kita sudah dilihat sepanjang semester. 279 00:15:33,610 --> 00:15:37,990 >> Begitu juga selama akhir pekan, melihat beberapa potongan berita. 280 00:15:37,990 --> 00:15:40,640 Pergi dulu, pergi ke seminar jika Anda ingin belajar sesuatu 281 00:15:40,640 --> 00:15:42,160 lebih pada sejumlah topik. 282 00:15:42,160 --> 00:15:43,340 Melihat URL di sana. 283 00:15:43,340 --> 00:15:45,890 Dan yang satu ini dikirim ke saya oleh Chang, siapa yang kamu kenal, 284 00:15:45,890 --> 00:15:47,850 siapa yang mencetak tentara kita gajah. 285 00:15:47,850 --> 00:15:49,910 Dan itu judul sebagai berikut. 286 00:15:49,910 --> 00:15:51,280 Aku takut TV baru saya. 287 00:15:51,280 --> 00:15:54,301 Mengapa aku takut untuk mengubah ini hal dan Anda akan terlalu. 288 00:15:54,301 --> 00:15:56,050 Jadi kita sekarang di titik dalam semester, 289 00:15:56,050 --> 00:15:58,860 juga, di mana bahkan jika Anda memiliki sedikit pun dari pemahaman 290 00:15:58,860 --> 00:16:02,620 bagaimana web bekerja, dan HTTP, dan keamanan, hal-hal seperti ini 291 00:16:02,620 --> 00:16:03,980 harus mulai untuk menangkap mata Anda. 292 00:16:03,980 --> 00:16:07,450 Tapi juga, Anda akan mengerti apakah hal-hal ini atau tidak 293 00:16:07,450 --> 00:16:08,430 ancaman aktual. 294 00:16:08,430 --> 00:16:10,940 >> Jadi saya mengambil beberapa kutipan dari artikel ini di sini. 295 00:16:10,940 --> 00:16:12,540 Dan cerita ini sebagai berikut. 296 00:16:12,540 --> 00:16:14,300 Aku sekarang pemilik cerdas TV baru, yang 297 00:16:14,300 --> 00:16:18,470 menjanjikan untuk memberikan streaming yang konten multimedia, games, aplikasi, 298 00:16:18,470 --> 00:16:21,450 media sosial, dan internet browsing, oh dan TV juga. 299 00:16:21,450 --> 00:16:24,410 Satu-satunya masalah adalah bahwa aku sekarang takut untuk menggunakannya, kata penulis. 300 00:16:24,410 --> 00:16:29,592 Anda akan, juga, jika Anda membaca kebijakan privasi 46 halaman untuk TV Anda. 301 00:16:29,592 --> 00:16:31,800 Jumlah data ini Hal terkumpul sangat mengejutkan. 302 00:16:31,800 --> 00:16:35,710 Ini log di mana, kapan, bagaimana, dan untuk berapa lama Anda menggunakan TV. 303 00:16:35,710 --> 00:16:38,190 Ini set pelacakan cookie, seperti yang telah kita bahas, 304 00:16:38,190 --> 00:16:40,560 dan beacon dirancang untuk mendeteksi ketika Anda memiliki 305 00:16:40,560 --> 00:16:43,185 konten tertentu melihat atau pesan email tertentu 306 00:16:43,185 --> 00:16:45,230 jika Anda ingin memeriksa email di TV Anda. 307 00:16:45,230 --> 00:16:48,430 Ini catatan aplikasi Anda gunakan, situs web yang Anda kunjungi, 308 00:16:48,430 --> 00:16:52,280 dan bagaimana Anda berinteraksi dengan konten, melakukan semua itu melalui smart TV Anda. 309 00:16:52,280 --> 00:16:55,470 Hal ini juga, creepier yet-- itu addition-- saya 310 00:16:55,470 --> 00:16:58,140 telah built in kamera dengan pengenalan wajah. 311 00:16:58,140 --> 00:17:01,010 >> Tujuannya adalah untuk memberikan kontrol gerakan untuk TV 312 00:17:01,010 --> 00:17:05,490 dan memungkinkan Anda untuk log in ke personalisasi akun dengan menggunakan wajah Anda. 313 00:17:05,490 --> 00:17:08,940 Pada terbalik, gambar yang disimpan di TV bukan upload 314 00:17:08,940 --> 00:17:09,940 ke server perusahaan. 315 00:17:09,940 --> 00:17:12,520 Pada sisi negatifnya, internet koneksi membuat seluruh TV 316 00:17:12,520 --> 00:17:14,811 rentan terhadap hacker yang telah menunjukkan kemampuan 317 00:17:14,811 --> 00:17:16,700 untuk mengambil kontrol penuh dari mesin. 318 00:17:16,700 --> 00:17:20,880 >> Lebih mengganggu, seolah-olah itu tidak cukup pintar, adalah mikrofon. 319 00:17:20,880 --> 00:17:23,599 TV ini menawarkan suara fitur pengenal 320 00:17:23,599 --> 00:17:26,859 yang memungkinkan pemirsa untuk mengontrol layar dengan perintah suara. 321 00:17:26,859 --> 00:17:30,290 Tapi layanan datang dengan peringatan agak menyenangkan. 322 00:17:30,290 --> 00:17:33,030 Perlu diketahui bahwa jika kata-kata Anda diucapkan termasuk 323 00:17:33,030 --> 00:17:36,210 pribadi atau sensitif lainnya informasi, bahwa informasi 324 00:17:36,210 --> 00:17:40,310 akan menjadi salah satu data yang diambil dan dikirim ke pihak ketiga. 325 00:17:40,310 --> 00:17:40,870 Punya itu? 326 00:17:40,870 --> 00:17:45,860 Jangan katakan pribadi atau sensitif barang di depan TV Anda. 327 00:17:45,860 --> 00:17:47,280 >> Jadi ini benar-benar nyata. 328 00:17:47,280 --> 00:17:50,530 Dan sulit untuk tidak melihat apakah Anda pergi ke Best Buy atau sejenisnya untuk TV 329 00:17:50,530 --> 00:17:51,030 hari ini. 330 00:17:51,030 --> 00:17:52,540 Mereka semua cerdas dalam beberapa cara. 331 00:17:52,540 --> 00:17:54,740 Dan mereka mendapatkan lebih cerdas dan creepier. 332 00:17:54,740 --> 00:17:57,490 Dan mereka hanya mengumpulkan data dengan cara yang kita bicarakan 333 00:17:57,490 --> 00:18:01,840 dan kemudian meng-upload melalui HTTP atau beberapa protokol lain beberapa server. 334 00:18:01,840 --> 00:18:05,720 >> Jadi ini adalah sebuah artikel menyenangkan di situs online ini 335 00:18:05,720 --> 00:18:08,940 di sini, yang berbicara tentang bug tertentu atau kode keliru 336 00:18:08,940 --> 00:18:11,340 bahwa kita benar-benar bisa mengikat dalam diskusi pekan lalu. 337 00:18:11,340 --> 00:18:15,730 Jadi judul ini adalah sebagai berikut, menurut cerita di sini, 338 00:18:15,730 --> 00:18:18,720 Josh Breckman bekerja untuk perusahaan yang mendarat kontrak 339 00:18:18,720 --> 00:18:22,390 untuk mengembangkan manajemen konten sistem, atau CMS seperti mereka disebut, 340 00:18:22,390 --> 00:18:24,380 untuk situs web pemerintah yang cukup besar. 341 00:18:24,380 --> 00:18:27,300 Sebagian besar proyek yang terlibat mengembangkan sistem manajemen konten 342 00:18:27,300 --> 00:18:29,840 sehingga karyawan akan mampu membangun dan memelihara 343 00:18:29,840 --> 00:18:31,877 yang terus berubah konten untuk situs mereka. 344 00:18:31,877 --> 00:18:34,210 Hal berjalan cukup baik untuk beberapa hari setelah hidup. 345 00:18:34,210 --> 00:18:37,020 Tetapi pada hari keenam, hal-hal berjalan tidak begitu baik. 346 00:18:37,020 --> 00:18:39,500 Semua konten pada situs telah benar-benar menghilang. 347 00:18:39,500 --> 00:18:42,950 Dan semua halaman menyebabkan default, Cukup masukkan halaman web konten. 348 00:18:42,950 --> 00:18:43,810 Whoops. 349 00:18:43,810 --> 00:18:46,080 Josh dipanggil untuk menyelidiki dan melihat 350 00:18:46,080 --> 00:18:49,390 bahwa salah satu sangat merepotkan alamat IP eksternal memiliki 351 00:18:49,390 --> 00:18:53,380 pergi dalam dan dihapus semua konten pada sistem. 352 00:18:53,380 --> 00:18:56,290 >> Alamat IP tidak termasuk beberapa hacker membungkuk di luar negeri 353 00:18:56,290 --> 00:18:58,340 menghancurkan bermanfaat informasi pemerintah. 354 00:18:58,340 --> 00:19:05,190 Itu memutuskan untuk googlebot.com, Web merangkak spider sendiri Google. 355 00:19:05,190 --> 00:19:06,010 Whoops. 356 00:19:06,010 --> 00:19:09,150 Setelah sedikit riset dan berebut sekitar untuk menemukan cadangan noncorrupt, 357 00:19:09,150 --> 00:19:10,180 Josh menemukan masalah. 358 00:19:10,180 --> 00:19:12,700 >> Seorang pengguna telah disalin dan disisipkan beberapa konten dari satu 359 00:19:12,700 --> 00:19:15,670 halaman ke halaman lainnya, termasuk sebuah Sunting Hyperlink 360 00:19:15,670 --> 00:19:17,577 untuk mengedit konten pada halaman. 361 00:19:17,577 --> 00:19:20,160 Biasanya ini tidak akan menjadi masalah karena pengguna di luar akan 362 00:19:20,160 --> 00:19:24,320 perlu untuk memasukkan nama dan password, namun sistem otentikasi CMS, 363 00:19:24,320 --> 00:19:27,520 sistem login, tidak memperhitungkan 364 00:19:27,520 --> 00:19:30,980 hacking yang canggih teknik Spider Google. 365 00:19:30,980 --> 00:19:31,700 Whoops. 366 00:19:31,700 --> 00:19:33,610 >> Ternyata, Google Spider tidak menggunakan 367 00:19:33,610 --> 00:19:36,950 cookie, yang berarti bahwa itu dapat mudah memotong cek untuk 368 00:19:36,950 --> 00:19:39,840 login kue set menjadi false. 369 00:19:39,840 --> 00:19:42,620 Ini juga tidak memperhatikan JavaScript, yang biasanya akan 370 00:19:42,620 --> 00:19:45,170 meminta dan mengarahkan pengguna yang belum login. 371 00:19:45,170 --> 00:19:48,610 Namun itu mengikuti setiap hyperlink pada setiap halaman yang ditemukan, 372 00:19:48,610 --> 00:19:51,700 termasuk mereka yang Hapus Halaman dalam judul. 373 00:19:51,700 --> 00:19:52,650 Whoops. 374 00:19:52,650 --> 00:19:56,070 >> Jadi apa artinya ini lebih teknis tetapi cukup diakses istilah? 375 00:19:56,070 --> 00:19:58,340 Ini hanya berarti bahwa seluruh situs web mereka, 376 00:19:58,340 --> 00:20:02,287 mereka memiliki URL yang tidak berbeda satu ini yang Anda mungkin melihat dalam masalah set tujuh. 377 00:20:02,287 --> 00:20:04,620 Ingat dalam masalah set tujuh atau tahu di permasalahan yang tujuh 378 00:20:04,620 --> 00:20:06,411 bahwa Anda ditantang, antara lain, 379 00:20:06,411 --> 00:20:08,570 untuk menjual saham atas nama pengguna. 380 00:20:08,570 --> 00:20:14,010 Tapi menerapkan bahwa fitur dengan cara dari mendapatkan melalui hyperlink di pengguna Anda 381 00:20:14,010 --> 00:20:16,880 antarmuka, mungkin bukan ide cerdas 382 00:20:16,880 --> 00:20:20,300 karena jika situs Anda adalah entah bagaimana diakses baik oleh manusia 383 00:20:20,300 --> 00:20:23,577 siapa yang mengklik sekitar atau membeli bot seperti Google atau Spider sebuah 384 00:20:23,577 --> 00:20:26,160 karena mereka disebut itu hanya merangkak web mencoba untuk indeks 385 00:20:26,160 --> 00:20:29,060 web sebagai mesin pencari, mereka bisa sangat mudah 386 00:20:29,060 --> 00:20:31,340 memukul via mendapatkan jenis URL. 387 00:20:31,340 --> 00:20:33,770 Dan itu fungsional setara dengan, dalam hal ini, 388 00:20:33,770 --> 00:20:37,000 menjual seluruh saham Google. 389 00:20:37,000 --> 00:20:40,030 >> Sekarang terus terang, itu benar-benar bodoh bahwa CMS 390 00:20:40,030 --> 00:20:43,240 digunakan JavaScript dan cookie untuk menerapkan sistem login-nya 391 00:20:43,240 --> 00:20:47,100 dan tidak melakukan hal itu sisi server, seperti kalian lakukan dan akan di PSet 7-- 392 00:20:47,100 --> 00:20:49,940 ada login.php sebuah file-- selalu, selalu, 393 00:20:49,940 --> 00:20:52,789 selalu keamanan harus dilakukan pada sisi server, 394 00:20:52,789 --> 00:20:56,080 tidak di sisi klien karena, seperti ini Artikel menyarankan dan Anda mungkin sendiri 395 00:20:56,080 --> 00:20:59,600 lihat di beberapa titik, itu adalah sepele bagi pengguna, baik atau buruk, 396 00:20:59,600 --> 00:21:02,860 hanya mematikan JavaScript belum lagi cookies. 397 00:21:02,860 --> 00:21:06,020 Jadi itu adalah WTF harian Anda. 398 00:21:06,020 --> 00:21:07,970 >> Ada satu lagi, yang hanya agak menakutkan, 399 00:21:07,970 --> 00:21:11,360 jadi saya akan menyebutkan jika hanya sebagai pelajaran kehidupan. 400 00:21:11,360 --> 00:21:14,850 Setiap kali Anda menggunakan aplikasi disebut seperti Snapchat atau sejenisnya 401 00:21:14,850 --> 00:21:19,380 yang mengatakan foto-foto ini hanya berlangsung selama lima detik, sepuluh detik, atau entah apa lagi. 402 00:21:19,380 --> 00:21:21,680 Mereka fana Itu benar-benar tidak terjadi. 403 00:21:21,680 --> 00:21:25,670 Seperti tidak ada cara, digital, untuk mengimplementasikan beberapa bentuk video, 404 00:21:25,670 --> 00:21:30,150 atau gambar, atau tekstual berbagi seperti bahwa penerima di ujung lainnya 405 00:21:30,150 --> 00:21:31,660 tidak bisa entah bagaimana menyimpan data. 406 00:21:31,660 --> 00:21:34,300 >> Dengan cara yang paling naif, seseorang bisa mengambil telepon mereka. 407 00:21:34,300 --> 00:21:36,850 Dan mereka memiliki jendela 10 detik sambil melihat beberapa kancing 408 00:21:36,850 --> 00:21:39,410 untuk hanya mengambil beberapa telepon lain dan foto itu, jelas. 409 00:21:39,410 --> 00:21:41,660 Sehingga Anda dapat melestarikan sesuatu secara digital seperti itu. 410 00:21:41,660 --> 00:21:44,620 Beberapa dari Anda tahu bagaimana untuk mengambil screenshot pada ponsel Anda. 411 00:21:44,620 --> 00:21:49,290 Bahkan, jika Anda tidak mengetahui hal ini, menyadari bahwa setidaknya Snapchat, 412 00:21:49,290 --> 00:21:51,040 dan saya pikir lainnya aplikasi hari ini, 413 00:21:51,040 --> 00:21:53,720 setidaknya memberitahu Anda jika penerima telah benar-benar 414 00:21:53,720 --> 00:21:55,310 mengambil screenshot dari gambar Anda. 415 00:21:55,310 --> 00:22:00,870 >> Tapi lebih buruk lagi, ini adalah snappening tersebut, sebagai seseorang diciptakan baru-baru ini, 416 00:22:00,870 --> 00:22:04,680 di mana sekitar 100.000 snaps telah dibebaskan 417 00:22:04,680 --> 00:22:09,310 dalam apa yang disebut file torrent di berbagai website akhirnya. 418 00:22:09,310 --> 00:22:12,000 Dan ini berisi seluruh bunch pesan pribadi dan posting. 419 00:22:12,000 --> 00:22:15,210 Ternyata sebagian besar dari mereka jinak, jadi tidak apa yang Anda harapkan. 420 00:22:15,210 --> 00:22:17,580 Tapi karena orang memiliki menggunakan situs pihak ketiga, 421 00:22:17,580 --> 00:22:20,270 login dengan Snapchat mereka username dan password dan kemudian 422 00:22:20,270 --> 00:22:23,470 menyimpan semua mereka terkunci di website ini pihak ketiga. 423 00:22:23,470 --> 00:22:26,130 Dan itu adalah bahwa pihak ketiga website yang hacked, 424 00:22:26,130 --> 00:22:30,710 yang hanya berarti seseorang menemukan cara untuk mendapatkan semua 100.000 plus gambar-gambar 425 00:22:30,710 --> 00:22:33,822 ke hard drive mereka sendiri untuk berbagi berikutnya. 426 00:22:33,822 --> 00:22:36,030 Terus terang, di sini juga, itu semacam dari bodoh yang Snapchat 427 00:22:36,030 --> 00:22:39,360 diimplementasikan dalam sedemikian rupa sehingga pihak ketiga dapat mengurutkan intercept 428 00:22:39,360 --> 00:22:43,310 data dan bahwa itu tidak terikat pada Anda aplikasi sendiri yang berjalan di telepon. 429 00:22:43,310 --> 00:22:46,947 Tapi di sini, juga, menyadari bahwa ini hal seharusnya tidak menangkap Anda dengan kejutan, 430 00:22:46,947 --> 00:22:49,030 atau setidaknya harus ada menjadi pelajaran hidup di sini. 431 00:22:49,030 --> 00:22:52,220 Jika Anda ingin teknis Rincian, pergi ke URL yang ada 432 00:22:52,220 --> 00:22:53,570 yang ada di slide saat ini. 433 00:22:53,570 --> 00:23:00,960 Baiklah, pertanyaan pada pelajaran hidup hari ini di CS? 434 00:23:00,960 --> 00:23:02,710 Menghidupkan yang mati. 435 00:23:02,710 --> 00:23:04,970 Apa-apa? 436 00:23:04,970 --> 00:23:06,301 Apa-apa? 437 00:23:06,301 --> 00:23:09,050 Aku punya banyak orang memeriksa Snapchat atau sesuatu sekarang. 438 00:23:09,050 --> 00:23:11,690 >> Baiklah, jadi SQL, Structured Query Bahasa. 439 00:23:11,690 --> 00:23:12,509 Mari kita bungkus ini. 440 00:23:12,509 --> 00:23:14,300 Dan juga, meskipun kami hanya menggaruk 441 00:23:14,300 --> 00:23:16,310 permukaan ini bahasa, kami akan memberikan 442 00:23:16,310 --> 00:23:18,930 cukup bahasa dalam bentuk PSet 7 443 00:23:18,930 --> 00:23:22,140 sehingga Anda dapat mengatasi beberapa fungsionalitas yang cukup umum. 444 00:23:22,140 --> 00:23:24,912 Tapi menyadari ada pasangan hal yang kita tidak memerlukan Anda, 445 00:23:24,912 --> 00:23:27,120 tetapi mereka akan menjadi penting datang tugas akhir 446 00:23:27,120 --> 00:23:30,760 dan pasti datang membuat aktual situs dengan pengguna yang sebenarnya 447 00:23:30,760 --> 00:23:32,040 adalah keputusan desain ini. 448 00:23:32,040 --> 00:23:34,460 >> Ternyata bahwa dalam database MySQL, Anda 449 00:23:34,460 --> 00:23:37,460 memiliki tandan pilihan seperti tipe data untuk kolom Anda 450 00:23:37,460 --> 00:23:41,670 dan hal-hal lain, tetapi Anda juga memiliki pilihan yang disebut storage 451 00:23:41,670 --> 00:23:44,570 mesin untuk semua data Anda, jenis sistem file, 452 00:23:44,570 --> 00:23:46,700 jika Anda terbiasa, untuk semua data Anda. 453 00:23:46,700 --> 00:23:48,830 Format apa yang akhirnya disimpan dalam? 454 00:23:48,830 --> 00:23:53,300 Dan yang paling umum, mungkin, telah MyISAM dan InnoDB, istilah-istilah teknis 455 00:23:53,300 --> 00:23:56,060 bahwa kita akan peduli hanya sejauh satu yang memiliki 456 00:23:56,060 --> 00:23:58,500 dan seseorang tidak memiliki fitur berikut. 457 00:23:58,500 --> 00:24:00,390 >> Misalkan Anda memiliki kulkas asrama kecil. 458 00:24:00,390 --> 00:24:03,030 Dan anggaplah bahwa Anda dan Anda Teman sekamar, yang berbagi lemari es ini, 459 00:24:03,030 --> 00:24:04,682 benar-benar menyukai susu mengatakan. 460 00:24:04,682 --> 00:24:07,140 Dan ini, pada kenyataannya, bagaimana cerita diceritakan kepada saya jalan kembali 461 00:24:07,140 --> 00:24:10,890 pada hari ketika saya mengambil kursus disebut CS 161 Sistem Operasi, yang 462 00:24:10,890 --> 00:24:12,580 sama mengeksplorasi topik ini. 463 00:24:12,580 --> 00:24:13,760 Jadi Anda punya kulkas ini. 464 00:24:13,760 --> 00:24:14,630 Kau keluar dari susu. 465 00:24:14,630 --> 00:24:17,000 Dan kamu pulang, teman sekamar Anda masih di kelas atau apa pun, 466 00:24:17,000 --> 00:24:19,208 dan Anda memutuskan aku akan pergi keluar dan mendapatkan beberapa susu. 467 00:24:19,208 --> 00:24:22,630 Jadi Anda menutup lemari es, penjara kamar asrama, pergi di seberang jalan 468 00:24:22,630 --> 00:24:25,330 CVS atau di mana pun, dan mendapatkan dalam antrean untuk membeli susu. 469 00:24:25,330 --> 00:24:28,960 >> Sementara itu, teman sekamar Anda pulang ke rumah dari kelas, masuk ke kamar asrama, 470 00:24:28,960 --> 00:24:31,802 membuka lemari es, juga menyadari ooph, kami keluar dari susu. 471 00:24:31,802 --> 00:24:33,760 Jadi ia menutup kulkas dan kemudian terjadi 472 00:24:33,760 --> 00:24:35,610 untuk pergi ke yang lain CVS, yang kebetulan 473 00:24:35,610 --> 00:24:38,470 satu blok jauhnya dari CVS lainnya di alun-alun, dan mendapatkan sejalan 474 00:24:38,470 --> 00:24:40,230 ada untuk mendapatkan susu. 475 00:24:40,230 --> 00:24:42,524 Sekarang, tentu saja, beberapa menit kemudian, Anda berdua kembali, 476 00:24:42,524 --> 00:24:44,690 dan yang terburuk dari semua kemungkinan hasil yang telah terjadi. 477 00:24:44,690 --> 00:24:45,792 Anda berdua memiliki susu. 478 00:24:45,792 --> 00:24:47,500 Dan Anda tidak benar-benar seperti susu yang banyak. 479 00:24:47,500 --> 00:24:49,625 Jadi salah satu dari mereka hanya akan masam di beberapa titik. 480 00:24:49,625 --> 00:24:55,941 Jadi sekarang Anda memiliki jumlah yang berlebihan susu di lemari es semua karena mengapa? 481 00:24:55,941 --> 00:24:57,072 >> [Tidak terdengar] 482 00:24:57,072 --> 00:24:59,780 DAVID Malan: Ya, Anda tidak entah bagaimana berkomunikasi satu sama lain 483 00:24:59,780 --> 00:25:00,904 bahwa Anda mendapatkan susu. 484 00:25:00,904 --> 00:25:04,320 Jadi dalam paling sederhana cara di dunia manusia, 485 00:25:04,320 --> 00:25:08,390 bagaimana mungkin Anda menghindari hal ini konyol skenario terjadi seperti 486 00:25:08,390 --> 00:25:09,750 bahwa Anda hanya berakhir dengan satu. 487 00:25:09,750 --> 00:25:10,840 Teks mereka, ya baik. 488 00:25:10,840 --> 00:25:12,877 Tapi bagaimana lagi? 489 00:25:12,877 --> 00:25:13,460 Post-it notes. 490 00:25:13,460 --> 00:25:14,626 DAVID Malan: A Post-it note. 491 00:25:14,626 --> 00:25:17,150 Setiap bentuk komunikasi yang memberitahu teman sekamar Anda 492 00:25:17,150 --> 00:25:18,670 tidak masuk ke lemari es untuk susu. 493 00:25:18,670 --> 00:25:20,440 Aku akan pergi mengisi kembali pada saya sendiri. 494 00:25:20,440 --> 00:25:22,770 Jadi Anda entah bagaimana membutuhkan untuk mengunci sumber daya ini. 495 00:25:22,770 --> 00:25:27,180 Jadi kita bisa membuat this-- kita bisa jenis merusak cerita dan berubah menjadi sebuah cerita CS 496 00:25:27,180 --> 00:25:30,360 dimana berpikir ini sebagai hanya seperti variabel, yang menyimpan beberapa nilai. 497 00:25:30,360 --> 00:25:32,570 Dan sekarang, yang Nilai susu adalah nol, 498 00:25:32,570 --> 00:25:35,410 yang Anda tidak ingin Anda teman sekamar untuk memeriksa variabel yang 499 00:25:35,410 --> 00:25:38,730 dan kemudian membuat keputusan dirinya sendiri berdasarkan keadaan variabel yang 500 00:25:38,730 --> 00:25:42,430 jika Anda dalam proses mengubah keadaan variabel tersebut. 501 00:25:42,430 --> 00:25:46,140 >> Jadi salah satu baris SQL yang kita memberi Anda dalam PSet 7 spesifikasi 502 00:25:46,140 --> 00:25:47,310 adalah salah satu ini di sini. 503 00:25:47,310 --> 00:25:49,740 Dan kita tidak menghabiskan besar jumlah waktu berbicara tentang hal itu. 504 00:25:49,740 --> 00:25:55,100 Tapi ternyata, jika Anda mencoba untuk membeli beberapa saham di CS50 keuangan 505 00:25:55,100 --> 00:25:58,000 bahwa Anda sudah memiliki beberapa saham, Anda 506 00:25:58,000 --> 00:26:01,750 ingin dapat melakukan nomor hal langsung bersama-sama. 507 00:26:01,750 --> 00:26:04,360 Anda ingin dapat efektif, pada tingkat tinggi, 508 00:26:04,360 --> 00:26:06,700 periksa baik-baik, jika saya ingin untuk membeli lebih banyak saham dari Free, 509 00:26:06,700 --> 00:26:08,780 kita saham penny berbicara tentang di spec, 510 00:26:08,780 --> 00:26:10,660 Saya ingin cek pertama berapa banyak saham yang saya miliki. 511 00:26:10,660 --> 00:26:11,810 Dan rasa itu lima. 512 00:26:11,810 --> 00:26:14,600 Dan misalkan saya ingin membeli 10 lebih, saya akhirnya 513 00:26:14,600 --> 00:26:17,069 ingin memiliki 15 saham. 514 00:26:17,069 --> 00:26:18,360 Jadi saya harus mengajukan dua pertanyaan. 515 00:26:18,360 --> 00:26:20,230 Apa keadaan variabel? 516 00:26:20,230 --> 00:26:21,470 Apa keadaan baris? 517 00:26:21,470 --> 00:26:22,970 Berapa banyak saham yang saya miliki saat ini? 518 00:26:22,970 --> 00:26:24,636 Kemudian Anda ingin untuk terus maju dan memperbaruinya. 519 00:26:24,636 --> 00:26:27,720 Jadi itulah analog ke susu yang Anda memeriksa baris, 520 00:26:27,720 --> 00:26:30,730 dan kemudian Anda ingin memperbaruinya karena jika Anda ingin membeli 10 saham, 521 00:26:30,730 --> 00:26:32,521 Anda tidak ingin mengubah baris ke 10, Anda 522 00:26:32,521 --> 00:26:35,300 ingin mengubahnya ke 5 ditambah 10 atau, tentu saja, 15. 523 00:26:35,300 --> 00:26:40,030 >> Baris kode memastikan bahwa dua gagasan konseptual 524 00:26:40,030 --> 00:26:42,810 terjadi bersama-sama atau tidak sama sekali. 525 00:26:42,810 --> 00:26:46,920 Tidak ada satu, termasuk beberapa pengguna lain siapa yang login ke website yang sama, 526 00:26:46,920 --> 00:26:49,900 entah bagaimana dapat mengganggu pengecekan baris 527 00:26:49,900 --> 00:26:52,960 dan memperbarui baris, yang pilih dan update jika Anda mau. 528 00:26:52,960 --> 00:26:57,360 Dan sintaks tidak super jelas, tapi garis yang satu ini, panjang itu, 529 00:26:57,360 --> 00:27:01,150 memastikan bahwa kedua operasi memeriksa variabel atau periksa baris 530 00:27:01,150 --> 00:27:04,660 dan memperbarui baris terjadi atom. 531 00:27:04,660 --> 00:27:06,849 >> Oh di sini kita pergi lagi. 532 00:27:06,849 --> 00:27:07,890 Pesan teks pada ponsel saya. 533 00:27:07,890 --> 00:27:09,954 Jadi mari kita membuat ini sedikit lebih konkret. 534 00:27:09,954 --> 00:27:12,120 Misalkan Anda tidak menerapkan kulkas, 535 00:27:12,120 --> 00:27:16,400 dan Anda tidak menerapkan PSet 7 tapi bank yang sebenarnya, 536 00:27:16,400 --> 00:27:20,000 atau ATM, Automated Teller Mesin, dimana Anda entah bagaimana 537 00:27:20,000 --> 00:27:22,960 ingin dapat memberdayakan pengguna untuk mentransfer uang 538 00:27:22,960 --> 00:27:24,500 dari satu account ke account lainnya. 539 00:27:24,500 --> 00:27:25,100 OK, tunggu. 540 00:27:25,100 --> 00:27:26,683 Aku akan mematikan sekarang ini, terima kasih. 541 00:27:26,683 --> 00:27:30,450 Jadi kita ingin memindahkan uang dari satu nomor rekening 542 00:27:30,450 --> 00:27:33,600 ke akun lain jumlah, khususnya dari $ 100. 543 00:27:33,600 --> 00:27:37,690 Jadi ini adalah jenis sewenang-wenang Misalnya, dimana Anda, ATM, 544 00:27:37,690 --> 00:27:41,060 mungkin ingin mengeksekusi dua SQL query, kurangi dari satu account, 545 00:27:41,060 --> 00:27:42,430 dan menambah akun lain. 546 00:27:42,430 --> 00:27:46,766 Tapi Anda ingin memastikan bahwa ini Dua baris kedua terjadi atau tidak sama sekali. 547 00:27:46,766 --> 00:27:48,640 Anda tidak ingin sesuatu mendapatkan terganggu. 548 00:27:48,640 --> 00:27:51,440 Anda tidak melakukan beberapa orang jahat cerdas entah bagaimana berdiri di Bank of America 549 00:27:51,440 --> 00:27:53,270 dengan dua ATM di depan dia dan entah bagaimana 550 00:27:53,270 --> 00:27:55,270 semacam mengetik di perintah pada saat yang sama, 551 00:27:55,270 --> 00:28:01,230 mudah-mudahan mencoba untuk memotong $ 200 sebagai ganti $ 100 dan hanya memiliki $ 100 dikreditkan. 552 00:28:01,230 --> 00:28:04,450 Singkatnya, Anda ingin hal ini berperilaku persis seperti yang Anda harapkan. 553 00:28:04,450 --> 00:28:06,540 >> Dan seperti yang Anda lakukan ini dalam SQL database 554 00:28:06,540 --> 00:28:09,350 Anda bungkus dalam apa disebut transaksi. 555 00:28:09,350 --> 00:28:14,290 Secara harfiah dalam SQL, Anda dapat menghubungi CS50 ini fungsi permintaan dengan kutipan tanda kutip start 556 00:28:14,290 --> 00:28:15,370 transaksi. 557 00:28:15,370 --> 00:28:18,640 Kemudian Anda dapat mengeksekusi sejumlah query SQL berikutnya, 558 00:28:18,640 --> 00:28:20,870 namun tidak satupun dari mereka mengambil efek pada database 559 00:28:20,870 --> 00:28:25,880 sampai Anda menelepon permintaan kutipan tanda kutip komit, kalau lagi menggunakan PHP. 560 00:28:25,880 --> 00:28:29,810 Dan dengan cara ini, Anda dapat memastikan bahwa pengguna bahkan jika Anda memiliki 1.000 semua 561 00:28:29,810 --> 00:28:32,080 memukul database Anda pada saat yang sama, SQL 562 00:28:32,080 --> 00:28:34,540 akan berjanji bahwa ini dua pertanyaan akan 563 00:28:34,540 --> 00:28:36,740 dilaksanakan satu setelah yang lain. 564 00:28:36,740 --> 00:28:40,330 Jadi Anda tidak berakhir dengan lebih dari susu atau jumlah yang salah, pada akhirnya, 565 00:28:40,330 --> 00:28:40,830 uang. 566 00:28:40,830 --> 00:28:43,110 >> Jadi ingatlah ini, tidak begitu banyak untuk PSet 7 567 00:28:43,110 --> 00:28:45,250 tapi untuk tugas akhir jika Anda benar-benar 568 00:28:45,250 --> 00:28:49,690 mencoba untuk memindahkan data sekitar di tabel seperti yang mungkin di sini. 569 00:28:49,690 --> 00:28:53,980 Tetapi bahkan mungkin lebih sederhana dan lebih jelas untuk memahami dengan contoh 570 00:28:53,980 --> 00:28:54,860 adalah salah satu ini di sini. 571 00:28:54,860 --> 00:28:57,760 Dan seseorang diemail kami tentang hanya beberapa hari ini 572 00:28:57,760 --> 00:28:59,600 ketika ia melihat sesuatu secara online serupa. 573 00:28:59,600 --> 00:29:03,480 >> Jadi untuk pengetahuan saya, sistem pin tidak rentan terhadap serangan ini. 574 00:29:03,480 --> 00:29:06,637 Dan saya tidak tahu apakah itu bahkan menggunakan database SQL di bawah tenda. 575 00:29:06,637 --> 00:29:08,470 Tapi mari kita menggunakannya untuk kepentingan diskusi. 576 00:29:08,470 --> 00:29:10,178 Berikut layar yang Harvard orang cenderung 577 00:29:10,178 --> 00:29:13,620 untuk melihat saat login dengan mereka Nomor Harvard ID dan pin mereka. 578 00:29:13,620 --> 00:29:19,020 Dan anggaplah bahwa sistem pin yang diimplementasikan di PHP dan MySQL dengan 579 00:29:19,020 --> 00:29:22,000 Database, kode bahwa seseorang tahun mungkin telah menulis lalu 580 00:29:22,000 --> 00:29:23,270 mungkin terlihat seperti ini. 581 00:29:23,270 --> 00:29:25,230 Pertama, menyatakan variabel yang disebut nama. 582 00:29:25,230 --> 00:29:27,560 Dan hanya mendapatkan bahwa dari yang superglobal POST. 583 00:29:27,560 --> 00:29:30,140 Kemudian mendapatkan variabel lain disebut kata sandi dan melakukan hal yang sama. 584 00:29:30,140 --> 00:29:33,080 Dan kemudian hanya menjalankan query yang panjang ini di sini, 585 00:29:33,080 --> 00:29:36,690 pilih bintang dari pengguna mana nama sama ini dan itu 586 00:29:36,690 --> 00:29:38,510 dan password sama dengan ini dan itu. 587 00:29:38,510 --> 00:29:40,660 >> Perhatikan bahwa keriting kurung Aku sudah digunakan di sini 588 00:29:40,660 --> 00:29:42,880 hanya berarti untuk PHP, pergi depan dan pengganti 589 00:29:42,880 --> 00:29:45,400 nilai dari dua variabel di sana. 590 00:29:45,400 --> 00:29:50,090 Mereka tidak benar-benar diperlukan, tetapi mereka cenderung untuk menghindari kesalahan sintaks halus. 591 00:29:50,090 --> 00:29:53,650 Jadi ini tampak benar-benar benar pada pandangan pertama. 592 00:29:53,650 --> 00:29:54,240 Dan itu adalah. 593 00:29:54,240 --> 00:29:56,680 Anda bisa menerapkan Sistem pin dengan cara ini. 594 00:29:56,680 --> 00:30:00,460 >> Tapi anggaplah bahwa super mahasiswa cerdas dan berbahaya 595 00:30:00,460 --> 00:30:03,020 masukan ini sebagai nya pin. 596 00:30:03,020 --> 00:30:05,550 Jadi saya telah menghapus peluru tanda-tanda di sini di mock up, 597 00:30:05,550 --> 00:30:08,760 dan aku sudah benar-benar terungkap apa yang dia mungkin mengetik. 598 00:30:08,760 --> 00:30:10,350 Dan itu agak aneh. 599 00:30:10,350 --> 00:30:13,850 Tapi apa melompat keluar pada Anda di berpotensi mengkhawatirkan tentang input pengguna, 600 00:30:13,850 --> 00:30:16,450 bahkan jika Anda tidak tahu apa serangan injeksi SQL berarti. 601 00:30:16,450 --> 00:30:20,300 Mengapa hal ini terlihat sedikit mencurigakan? 602 00:30:20,300 --> 00:30:21,050 Apa itu? 603 00:30:21,050 --> 00:30:21,550 [Tidak terdengar] 604 00:30:21,550 --> 00:30:24,260 DAVID Malan: The atau agak curiga. 605 00:30:24,260 --> 00:30:26,310 Bahkan, itu adalah kata kunci dari SQL. 606 00:30:26,310 --> 00:30:28,105 Sehingga bukan pertanda baik. 607 00:30:28,105 --> 00:30:29,980 Fakta bahwa ada semua ini tanda kutip tunggal 608 00:30:29,980 --> 00:30:32,646 besar-- pada kenyataannya, salah satu yang termudah cara untuk memecahkan beberapa database 609 00:30:32,646 --> 00:30:35,880 adalah dengan mengetikkan nama seperti O'Reilly yang memiliki apostrof di dalamnya 610 00:30:35,880 --> 00:30:38,600 karena jika manusia yang menulis kode belakang layar 611 00:30:38,600 --> 00:30:41,570 tidak memperhitungkan bahwa ada mungkin tanda kutip tunggal dalam pengguna 612 00:30:41,570 --> 00:30:45,060 masukan, dan dia menggunakan tanda kutip tunggal dalam kode mereka, 613 00:30:45,060 --> 00:30:46,040 hal-hal buruk bisa terjadi. 614 00:30:46,040 --> 00:30:47,870 >> Bahkan, lebih buruk lagi, pertimbangkan ini. 615 00:30:47,870 --> 00:30:50,600 Jika ini lagi kode bahwa seseorang di Harvard tahun 616 00:30:50,600 --> 00:30:53,100 lalu menulis untuk pin sistem, perhatikan apa yang 617 00:30:53,100 --> 00:30:56,220 akan mendapatkan diganti untuk username dan password 618 00:30:56,220 --> 00:30:59,780 jika jenis pengguna dalam lagi skroob sebagai username mereka 619 00:30:59,780 --> 00:31:03,960 dan kemudian satu, dua, tiga, empat, lima, quote atau kutipan tanda kutip satu equals 620 00:31:03,960 --> 00:31:04,660 mengutip satu. 621 00:31:04,660 --> 00:31:07,220 Dan perhatikan apa kuncinya di sini adalah pengguna tidak 622 00:31:07,220 --> 00:31:09,900 mulai password atau pin mereka dengan kutipan. 623 00:31:09,900 --> 00:31:12,610 Dan mereka belum berakhir itu dengan kutipan karena dia 624 00:31:12,610 --> 00:31:16,315 adalah asumsi bahwa jika programmer tidak begitu tajam, 625 00:31:16,315 --> 00:31:18,690 mereka akan memiliki orang-orang tanda kutip tunggal dalam kode mereka. 626 00:31:18,690 --> 00:31:19,860 >> Jadi, inilah kode. 627 00:31:19,860 --> 00:31:23,820 Dan substitusi yang sekarang mungkin terjadi adalah ini. 628 00:31:23,820 --> 00:31:26,350 Dan aku sudah digarisbawahi apa pengguna telah diketik dalam. 629 00:31:26,350 --> 00:31:28,480 Jadi sebelum, sesudah. 630 00:31:28,480 --> 00:31:33,330 Dan perhatikan apa yang agak mengkhawatirkan sekarang tentang kanan setengah dari kode SQL ini? 631 00:31:33,330 --> 00:31:36,300 Ini sedikit lebih kompleks, diakui, daripada query yang telah kita lihat. 632 00:31:36,300 --> 00:31:38,550 Tapi ini tidak bisa mungkin menjadi hal yang baik jika Anda 633 00:31:38,550 --> 00:31:42,240 mengatakan pilih bintang, yang pilih segala sesuatu dari tabel pengguna 634 00:31:42,240 --> 00:31:46,630 dimana username sama skroob dan sandi sama dengan satu, dua, tiga, empat, 635 00:31:46,630 --> 00:31:49,610 lima atau satu sama dengan satu. 636 00:31:49,610 --> 00:31:53,860 Apa implikasi logis dari klausa terakhir mungkin? 637 00:31:53,860 --> 00:31:55,650 Hanya saja selalu benar. 638 00:31:55,650 --> 00:31:59,930 >> Dan karena kita telah semacam menebak atau tahu dengan trial and error 639 00:31:59,930 --> 00:32:02,760 bahwa programmer yang menulis kode ini tidak 640 00:32:02,760 --> 00:32:07,250 mengantisipasi manusia atau buruk mengetik dalam tanda kutip tunggal juga, 641 00:32:07,250 --> 00:32:10,350 kita dapat sintaksis menyelesaikan query SQL 642 00:32:10,350 --> 00:32:12,260 dengan sesuatu yang tidak masuk akal tetapi sesuatu yang 643 00:32:12,260 --> 00:32:15,930 adalah sintaksis benar yang selalu bernilai true. 644 00:32:15,930 --> 00:32:19,130 Jadi jika kode ini digunakan untuk menjawab pertanyaan benar atau salah harus 645 00:32:19,130 --> 00:32:22,930 pengguna ini diizinkan untuk lulus, yang Jawabannya selalu tampaknya akan 646 00:32:22,930 --> 00:32:26,930 untuk menjadi kenyataan karena ini selalu terjadi untuk memilih sesuatu dari database 647 00:32:26,930 --> 00:32:29,280 karena salah satu tentu saja akan selalu sama dengan satu. 648 00:32:29,280 --> 00:32:30,360 >> Jadi apa solusinya? 649 00:32:30,360 --> 00:32:33,290 Nah di PSet 7, kita benar-benar menghindari ini semua bersama-sama. 650 00:32:33,290 --> 00:32:37,360 Kami memberikan fungsi permintaan, dan kami mendorong Anda untuk menggunakan tanda tanya 651 00:32:37,360 --> 00:32:40,430 sebagai penampung, mirip semangat yang printf ini% s, 652 00:32:40,430 --> 00:32:43,710 tapi apa kunci tentang tanda tanya di sini adalah jika Anda benar-benar membaca 653 00:32:43,710 --> 00:32:46,950 functions.php, di mana kami fungsi permintaan diimplementasikan, 654 00:32:46,950 --> 00:32:52,780 tanda tanya yang melarikan diri, dimana sesuatu yang berpotensi berbahaya 655 00:32:52,780 --> 00:32:58,210 seperti kutip tunggal diaktifkan menjadi single quote melarikan diri. 656 00:32:58,210 --> 00:33:00,590 >> Jadi ini adalah apa yang benar-benar terjadi jika Anda 657 00:33:00,590 --> 00:33:04,850 menggunakan fungsi permintaan CS50 atau sejumlah perpustakaan gratis pihak ketiga yang 658 00:33:04,850 --> 00:33:06,000 melakukan hal yang sama. 659 00:33:06,000 --> 00:33:09,850 Tidak masalah dalam hal ini, dalam warna hijau, jika pengguna telah diketik dalam tanda kutip tunggal 660 00:33:09,850 --> 00:33:12,070 karena query fungsi yang kita tulis adalah 661 00:33:12,070 --> 00:33:15,120 akan menambahkan backslash sebelum setiap kutipan berbahaya tersebut. 662 00:33:15,120 --> 00:33:17,360 Jadi ini bukan, dalam Bahkan, akan menjadi legit. 663 00:33:17,360 --> 00:33:20,910 Hal ini seperti mengetik di gila mencari password yang, tentu saja, tidak akan 664 00:33:20,910 --> 00:33:23,490 menjadi password yang sebenarnya skroob ini. 665 00:33:23,490 --> 00:33:28,260 >> Jadi takeaway untuk CS50 adalah satu, benar-benar selalu menggunakan sesuatu 666 00:33:28,260 --> 00:33:30,860 seperti fungsi permintaan CS50 ini atau perpustakaan yang mendasari, 667 00:33:30,860 --> 00:33:32,560 yang terjadi untuk disebut PDO. 668 00:33:32,560 --> 00:33:35,880 Tapi tidak pernah, tidak pernah, tidak pernah melakukan kode seperti ini 669 00:33:35,880 --> 00:33:39,472 tanpa melarikan diri atau scrubbing seperti yang mereka katakan masukan Anda. 670 00:33:39,472 --> 00:33:42,430 Dan Anda akan di beberapa titik mungkin menemukan beberapa website seperti ini. 671 00:33:42,430 --> 00:33:46,060 Bahkan, tampaknya menjadi kasus seperti di bandara dan hotel di tempat 672 00:33:46,060 --> 00:33:48,880 di mana mereka memiliki Wi-Fi gratis Akses bahwa Anda harus login ke, 673 00:33:48,880 --> 00:33:51,010 website ini selalu mengerikan dilaksanakan. 674 00:33:51,010 --> 00:33:55,680 Dan jadi semacam menyenangkan di latihan di rumah, bukan untuk tujuan jahat atau lebih 675 00:33:55,680 --> 00:33:59,170 yang menyenangkan di jalan olahraga, adalah dengan hanya mengetik 676 00:33:59,170 --> 00:34:02,850 apostrof, tanda kutip tunggal, menjadi bentuk pada beberapa situs 677 00:34:02,850 --> 00:34:03,810 dan melihat apa yang terjadi. 678 00:34:03,810 --> 00:34:06,660 Dan jika server crash atau memberikan Anda beberapa jenis pesan kesalahan, 679 00:34:06,660 --> 00:34:09,690 mungkin sangat baik menjadi bahwa seseorang belum mengantisipasi hal ini. 680 00:34:09,690 --> 00:34:15,239 Dan kemudian Anda harus waspada tepat otoritas dan melanjutkan lagi. 681 00:34:15,239 --> 00:34:20,843 >> Jadi sekarang kalian harus mudah-mudahan memahami sedikit lebih pecandu humor di sini. 682 00:34:20,843 --> 00:34:24,120 >> [Tertawa] 683 00:34:24,120 --> 00:34:27,571 684 00:34:27,571 --> 00:34:29,070 DAVID Malan: Anda tahu bahwa Anda geek. 685 00:34:29,070 --> 00:34:30,944 Selama beberapa berikutnya tahun, Anda akan ingat 686 00:34:30,944 --> 00:34:33,520 yang sedikit Tables Bobby adalah karena kartun ini di sini. 687 00:34:33,520 --> 00:34:36,760 Jadi ingat-ingat seperti yang kita konteks beralih untuk terakhir kalinya 688 00:34:36,760 --> 00:34:38,770 hari ini untuk JavaScript. 689 00:34:38,770 --> 00:34:41,600 Kami telah menghabiskan relatif sedikit waktu pada sintaks PHP 690 00:34:41,600 --> 00:34:43,440 karena itu benar-benar Super mirip dengan C. 691 00:34:43,440 --> 00:34:47,300 Dan cukup baik, JavaScript juga super mirip dengan sintaks C 692 00:34:47,300 --> 00:34:49,639 serta kita akan lihat dalam hanya sesaat dan seperti yang akan kita 693 00:34:49,639 --> 00:34:51,205 lihat akhir pekan ini pada khususnya. 694 00:34:51,205 --> 00:34:54,080 Apa yang dapat Anda lakukan dengan bahasa ini, meskipun, adalah semua lebih kuat, 695 00:34:54,080 --> 00:34:55,790 terutama dengan API. 696 00:34:55,790 --> 00:34:56,960 >> Tapi pertama-tama tur singkat. 697 00:34:56,960 --> 00:35:00,450 Jadi satu, dalam JavaScript, ada ada fungsi utama, yang bagus. 698 00:35:00,450 --> 00:35:02,650 Seperti PHP, Anda hanya dapat menulis kode. 699 00:35:02,650 --> 00:35:04,310 Kondisi terlihat seperti ini. 700 00:35:04,310 --> 00:35:07,100 Dan ekspresi Boolean mungkin terlihat seperti ini atau seperti ini. 701 00:35:07,100 --> 00:35:09,530 Switch ada, dan mereka mungkin terlihat seperti ini. 702 00:35:09,530 --> 00:35:10,970 Empat loop terlihat seperti ini. 703 00:35:10,970 --> 00:35:12,390 Sementara loop terlihat seperti ini. 704 00:35:12,390 --> 00:35:14,160 Apakah sesekali terlihat seperti ini. 705 00:35:14,160 --> 00:35:16,850 Dan kemudian array terlihat seperti ini, sangat mirip dengan PHP. 706 00:35:16,850 --> 00:35:20,740 Tetapi perhatikan, bahwa dalam JavaScript Anda mendeklarasikan variabel tidak dengan dolar 707 00:35:20,740 --> 00:35:25,190 menandatangani, bukan dengan tipe data tapi secara harfiah dengan mengatakan var untuk variabel sebelum. 708 00:35:25,190 --> 00:35:27,900 Juga longgar diketik dalam hal ini memiliki jenis, 709 00:35:27,900 --> 00:35:29,729 tetapi Anda tidak secara eksplisit menyatakan mereka. 710 00:35:29,729 --> 00:35:31,520 Dan kemudian string, untuk Misalnya, mungkin terlihat 711 00:35:31,520 --> 00:35:34,350 seperti ini, string yang dipanggil dalam kasus ini. 712 00:35:34,350 --> 00:35:35,410 Dan kemudian suatu objek. 713 00:35:35,410 --> 00:35:37,010 Dan kita ini akan melihat lebih lama. 714 00:35:37,010 --> 00:35:41,470 Dan objek mungkin salah satu paling sering dilihat struktur data 715 00:35:41,470 --> 00:35:44,050 dalam JavaScript berdasarkan Program karena memungkinkan 716 00:35:44,050 --> 00:35:46,680 Anda mengasosiasikan sewenang-wenang pasangan nilai kunci hanya 717 00:35:46,680 --> 00:35:51,240 seperti array asosiatif PHP dan seperti tabel hash Anda sendiri 718 00:35:51,240 --> 00:35:54,042 atau mencoba seperti yang kita diterapkan beberapa minggu lalu. 719 00:35:54,042 --> 00:35:56,250 Jadi mari kita benar-benar melihat apa yang bisa kita lakukan dengan JavaScript. 720 00:35:56,250 --> 00:35:59,410 Dan khususnya, ini adalah daftar cucian fitur 721 00:35:59,410 --> 00:36:02,300 bahwa browser memiliki memungkinkan kita untuk menghubungkan JavaScript 722 00:36:02,300 --> 00:36:05,470 ke situs web dengan cara berikut. 723 00:36:05,470 --> 00:36:09,340 JavaScript sering digunakan sebagai sisi klien bahasa scripting. 724 00:36:09,340 --> 00:36:10,130 Ini tidak dikompilasi. 725 00:36:10,130 --> 00:36:11,370 Juga ditafsirkan. 726 00:36:11,370 --> 00:36:15,740 Tapi tidak seperti PHP, yang sudah berjalan di server, di server web, 727 00:36:15,740 --> 00:36:18,220 atau dalam mendalam dari klien, JavaScript 728 00:36:18,220 --> 00:36:22,190 berbeda di dalamnya yang biasanya berlangsung dalam browser. 729 00:36:22,190 --> 00:36:26,060 >> Jadi kode JavaScript Anda mulai menulis untuk PSet 8, atau tugas akhir Anda, 730 00:36:26,060 --> 00:36:29,890 atau di dunia nyata umumnya akan yang akan disimpan di server, benar-benar 731 00:36:29,890 --> 00:36:33,110 dalam HTML dot atau titik JS file JavaScript. 732 00:36:33,110 --> 00:36:35,770 Tapi browser akan untuk men-download bahwa JavaScript 733 00:36:35,770 --> 00:36:39,530 kode untuk contoh Anda sendiri Chrome, atau IE, atau Firefox, atau apa pun. 734 00:36:39,530 --> 00:36:43,870 Dan kode ini benar-benar akan mendapatkan dijalankan di dalam browser Anda sendiri. 735 00:36:43,870 --> 00:36:46,560 Hanya untuk membuat ini lebih nyata, mari kita lihat ini dalam bentuk konkret. 736 00:36:46,560 --> 00:36:50,120 >> Kami tidak tahu apa kode ini tidak tanpa benar-benar membaca melalui itu. 737 00:36:50,120 --> 00:36:52,670 Tapi biarkan aku pergi ke Facebook.com tanpa login. 738 00:36:52,670 --> 00:37:00,440 Biarkan aku pergi ke Inspect Element dan pergi ke, katakanlah, Jaringan dan Reload Page. 739 00:37:00,440 --> 00:37:04,150 Dan kita akan see-- biarkan aku menggeser Reload yang Halaman untuk mendapatkan semua permintaan untuk baru. 740 00:37:04,150 --> 00:37:08,850 Dan yang pertama File saya lihat adalah CSS, CSS. 741 00:37:08,850 --> 00:37:10,880 Berikut pertama File JavaScript, dan saya harus 742 00:37:10,880 --> 00:37:14,600 tidak tahu apa yang dilakukan, tapi di sini adalah beberapa kode JavaScript 743 00:37:14,600 --> 00:37:16,180 yang mendorong Facebook. 744 00:37:16,180 --> 00:37:18,400 Ini bahkan tidak benar-benar mengungkapkan untuk memperbesar. 745 00:37:18,400 --> 00:37:20,260 Ini masih sama tidak masuk akal. 746 00:37:20,260 --> 00:37:24,341 >> Tapi Anda akan melihat bahkan di bawah, ada bahkan lebih dari file JavaScript ini. 747 00:37:24,341 --> 00:37:24,840 Whoops. 748 00:37:24,840 --> 00:37:25,440 Itu ping. 749 00:37:25,440 --> 00:37:28,550 Mari kita turun sedikit lanjut, lebih lanjut, lebih lanjut. 750 00:37:28,550 --> 00:37:29,894 Ada satu. 751 00:37:29,894 --> 00:37:31,238 Ada satu. 752 00:37:31,238 --> 00:37:31,880 Ada satu. 753 00:37:31,880 --> 00:37:35,820 >> Jadi meskipun Facebook, di belakang adegan, ditulis dalam bagian dalam PHP 754 00:37:35,820 --> 00:37:39,100 dan Facebook sendiri versi daripadanya, ada sejumlah besar JavaScript. 755 00:37:39,100 --> 00:37:41,330 Bahkan, salah satu mengobrol Anda lakukan di Facebook, 756 00:37:41,330 --> 00:37:45,520 salah satu pembaruan inline waktu yang terjadi secara real time, semua itu 757 00:37:45,520 --> 00:37:47,944 didorong oleh JavaScript. 758 00:37:47,944 --> 00:37:48,444 Ya? 759 00:37:48,444 --> 00:37:50,235 >> AUDIENCE: Saya tidak yakin jika ini adalah Facebook, 760 00:37:50,235 --> 00:37:53,624 tapi saya pikir bahwa Facebook dikembangkan sendiri di-rumah bahasa kode mereka? 761 00:37:53,624 --> 00:37:54,540 DAVID Malan: Mereka melakukannya. 762 00:37:54,540 --> 00:37:58,110 Jadi itulah sebabnya saya katakan varians PHP disebut Hip Hop yang mereka benar-benar 763 00:37:58,110 --> 00:38:03,440 fitur yang ditambahkan untuk sedemikian rupa sehingga ketika Mark pertama kali diimplementasikan Facebook, 764 00:38:03,440 --> 00:38:04,710 itu ditulis dalam PHP. 765 00:38:04,710 --> 00:38:07,370 Dan itu semacam tetap jenis bahasa front end 766 00:38:07,370 --> 00:38:09,030 yang mereka gunakan untuk banyak coding mereka, tetapi 767 00:38:09,030 --> 00:38:11,870 belum bahasa yang skala sangat baik untuk miliaran 768 00:38:11,870 --> 00:38:12,630 orang. 769 00:38:12,630 --> 00:38:15,300 Dan sehingga mereka telah menambahkan mereka sendiri perbaikan di balik layar. 770 00:38:15,300 --> 00:38:17,049 Dan mereka menggunakan sejumlah bahasa lain 771 00:38:17,049 --> 00:38:19,170 untuk berbagai potongan infrastruktur mereka. 772 00:38:19,170 --> 00:38:24,080 Jadi ya, itu adalah varians dari apa yang sekarang kita kenal sebagai PHP. 773 00:38:24,080 --> 00:38:26,610 >> Jadi mari kita lihat pada beberapa contoh 774 00:38:26,610 --> 00:38:28,890 bagaimana kita bisa menggunakan JavaScript sini. 775 00:38:28,890 --> 00:38:32,530 Dalam kode sumber saat ini, kami memiliki sekelompok file, yang pertama, 776 00:38:32,530 --> 00:38:34,090 mari kita disebut DOM nol. 777 00:38:34,090 --> 00:38:36,770 Jadi DOM nol terlihat sebagai berikut. 778 00:38:36,770 --> 00:38:40,730 Biarkan aku pergi ke direktori ini dan membuka domzero.html, 779 00:38:40,730 --> 00:38:44,970 bagian atas yang memiliki tipe doc deklarasi, mengatakan inilah HTML 5. 780 00:38:44,970 --> 00:38:46,440 Dan sekarang di sini adalah tag HTML. 781 00:38:46,440 --> 00:38:47,540 Berikut tag kepala. 782 00:38:47,540 --> 00:38:49,210 Dan inilah apa yang baru hari ini. 783 00:38:49,210 --> 00:38:52,620 >> Kami sekarang memiliki tag script dalam kepala halaman. 784 00:38:52,620 --> 00:38:55,290 Dan ini tampaknya tidak sangat sedikit, tapi pemberitahuan 785 00:38:55,290 --> 00:38:58,410 bahwa saya telah didefinisikan Script, JavaScript. 786 00:38:58,410 --> 00:39:01,050 Dan sebagai samping, karena ini adalah kesalahpahaman umum, 787 00:39:01,050 --> 00:39:05,220 JavaScript sama sekali tidak ada hubungannya dengan Java, bahasa 788 00:39:05,220 --> 00:39:08,010 bahwa beberapa dari Anda mungkin telah belajar di APCS. 789 00:39:08,010 --> 00:39:10,480 Itu lebih dari pemasaran hal dari apa pun, 790 00:39:10,480 --> 00:39:12,980 naik coattails Jawa tahun yang lalu. 791 00:39:12,980 --> 00:39:17,300 Tapi JavaScript, tidak ada hubungannya dengan Java, hanya sama, dan mengganggu, 792 00:39:17,300 --> 00:39:18,480 membingungkan bernama. 793 00:39:18,480 --> 00:39:21,890 >> Jadi di sini adalah bagaimana Anda mendeklarasikan fungsi dalam JavaScript, secara harfiah mengatakan fungsi, 794 00:39:21,890 --> 00:39:24,556 maka nama fungsi, maka argumen mungkin mengambil, 795 00:39:24,556 --> 00:39:25,530 sama seperti di PHP. 796 00:39:25,530 --> 00:39:28,990 Ternyata dalam JavaScript, salah satu yang paling fungsi menjengkelkan yang ada adalah Pemberitahuan. 797 00:39:28,990 --> 00:39:31,392 Ini adalah sebuah jendela kecil yang akan muncul dan mengingatkan Anda 798 00:39:31,392 --> 00:39:32,600 untuk beberapa bagian dari informasi. 799 00:39:32,600 --> 00:39:33,766 Ini umumnya disukai. 800 00:39:33,766 --> 00:39:35,980 Tapi kita akan menggunakannya sebagai kami latihan pertama di sini. 801 00:39:35,980 --> 00:39:37,900 >> Perhatikan beberapa fitur JavaScript. 802 00:39:37,900 --> 00:39:41,524 Tanda kutip tunggal dan tanda kutip ganda tidak benar-benar penting lagi. 803 00:39:41,524 --> 00:39:43,690 Tanda kutip tunggal dan ganda kutipan dapat dipertukarkan, 804 00:39:43,690 --> 00:39:46,220 sedangkan di C, Anda harus menggunakan tanda kutip ganda untuk string, 805 00:39:46,220 --> 00:39:48,150 dan Anda memiliki dua single mengutip untuk karakter. 806 00:39:48,150 --> 00:39:51,150 Dalam dunia JavaScript, banyak orang, kebanyakan orang 807 00:39:51,150 --> 00:39:54,970 menggunakan tanda kutip tunggal di sekitar string hanya karena itu hal gaya. 808 00:39:54,970 --> 00:39:58,330 Tapi apa operator plus di sini, yang kita belum lihat sebelumnya? 809 00:39:58,330 --> 00:39:59,836 >> AUDIENCE: Penggabungan. 810 00:39:59,836 --> 00:40:00,960 DAVID Malan: Penggabungan. 811 00:40:00,960 --> 00:40:02,450 Jadi C bahkan tidak memiliki ini. 812 00:40:02,450 --> 00:40:04,820 PHP memiliki operator dot, yang melakukan hal ini. 813 00:40:04,820 --> 00:40:09,710 JavaScript memiliki operator positifnya, yang membingungkan adalah seperti Java. 814 00:40:09,710 --> 00:40:11,440 Sekarang apa yang terjadi di sini? 815 00:40:11,440 --> 00:40:14,260 >> Jadi, di sinilah dasar pemahaman tentang gambar yang 816 00:40:14,260 --> 00:40:17,010 kami muntah pasangan hari yang lalu datang ke dalam bermain. 817 00:40:17,010 --> 00:40:19,620 Ingat ketika kami memiliki sederhana versi HTML page-- 818 00:40:19,620 --> 00:40:20,830 itu hanya berkata, hello world. 819 00:40:20,830 --> 00:40:22,770 Dan kemudian kita menarik pohon ke kanan, yang 820 00:40:22,770 --> 00:40:27,320 memiliki sekelompok empat persegi panjang dan garis menghubungkan mereka seperti pohon keluarga. 821 00:40:27,320 --> 00:40:30,820 Jadi itulah yang disebut DOM atau Document Object Model. 822 00:40:30,820 --> 00:40:36,759 Dan ternyata bahwa Anda dapat mengakses persegi panjang di pohon dengan sintaks 823 00:40:36,759 --> 00:40:37,550 seperti berikut ini. 824 00:40:37,550 --> 00:40:41,370 Anda benar-benar mengatakan dokumen, yang merupakan variabel global khusus dalam JavaScript 825 00:40:41,370 --> 00:40:45,890 program yang memiliki fungsi terkait dengan itu bahwa Anda dapat mengakses 826 00:40:45,890 --> 00:40:50,280 mirip dengan struct, tetapi Anda hanya mengatakan titik dan kemudian nama fungsi, 827 00:40:50,280 --> 00:40:52,390 mendapatkan elemen dengan ID. 828 00:40:52,390 --> 00:40:55,460 >> Unsur saya ingin dapatkan adalah rupanya mengutip nama tanda kutip. 829 00:40:55,460 --> 00:40:57,150 Dan kemudian saya ingin mendapatkan nilai. 830 00:40:57,150 --> 00:40:58,330 Sekarang kita mendapatkan depan diri kita sendiri. 831 00:40:58,330 --> 00:41:00,038 Aku bahkan tidak yakin apa semua ini adalah tentang. 832 00:41:00,038 --> 00:41:03,000 Mari kita maju cepat untuk HTML pada halaman, yang super sederhana. 833 00:41:03,000 --> 00:41:05,370 >> Perhatikan bahwa saya telah didefinisikan a membentuk di sini. 834 00:41:05,370 --> 00:41:07,940 Perhatikan Aku sudah diberikan itu unik ID, meskipun kami sudah tidak digunakan 835 00:41:07,940 --> 00:41:08,870 atribut ini sebelumnya. 836 00:41:08,870 --> 00:41:11,300 Tapi ini ada dalam HTML. 837 00:41:11,300 --> 00:41:15,570 Anda dapat secara unik mengidentifikasi beberapa potongan HTML dengan identifier seperti ini. 838 00:41:15,570 --> 00:41:19,880 >> Pemberitahuan sekarang this-- ternyata HTML mendukung, per yang daftar cucian 839 00:41:19,880 --> 00:41:22,490 beberapa saat yang lalu, keseluruhan sekelompok event handler. 840 00:41:22,490 --> 00:41:25,060 Dan event handler ini tertulis di kirimkan. 841 00:41:25,060 --> 00:41:28,730 Pada pengajuan pengguna ini bentuk, sebut kode berikut. 842 00:41:28,730 --> 00:41:31,360 Dan kode yang akan untuk dipanggil atau dieksekusi 843 00:41:31,360 --> 00:41:35,260 persis ini, Yunani Fungsi diikuti oleh return false. 844 00:41:35,260 --> 00:41:37,360 Segala sesuatu yang lain harus cukup akrab. 845 00:41:37,360 --> 00:41:42,050 >> Berikut adalah masukan dari jenis teks, yang ID, dalam hal ini, akan menjadi nama. 846 00:41:42,050 --> 00:41:45,430 Kami tidak memiliki atribut nama sebenarnya time-- ini dan tombol kirim. 847 00:41:45,430 --> 00:41:48,330 Jadi halaman yang dihasilkan terlihat seperti ini. 848 00:41:48,330 --> 00:41:52,890 Dan perilaku yang dihasilkan, Anda akan melihat, terlihat seperti ini. 849 00:41:52,890 --> 00:41:56,940 Halaman itu host lokal mengatakan, halo David, hampir tidak estetis menyenangkan 850 00:41:56,940 --> 00:41:58,340 cara untuk menyambut pengguna. 851 00:41:58,340 --> 00:41:59,950 Tapi apa yang sebenarnya terjadi? 852 00:41:59,950 --> 00:42:01,360 >> Nah, pertimbangkan apa ini. 853 00:42:01,360 --> 00:42:02,310 Ini adalah kolom teks. 854 00:42:02,310 --> 00:42:04,635 Dan menurut HTML di sini, saya telah diberikan itu 855 00:42:04,635 --> 00:42:07,350 pengenal unik disebut quote nama tanda kutip. 856 00:42:07,350 --> 00:42:09,770 Sementara itu, saya katakan saat pengguna mengirimkan formulir ini 857 00:42:09,770 --> 00:42:13,820 dengan menekan Enter atau klik Submit tombol, memanggil fungsi disebut Greet 858 00:42:13,820 --> 00:42:15,410 dan kemudian kembali False. 859 00:42:15,410 --> 00:42:16,870 Mari kita pertimbangkan mereka yang terbalik. 860 00:42:16,870 --> 00:42:20,590 Perhatikan ketika saya klik Submit, yang URL halaman ini tidak berubah. 861 00:42:20,590 --> 00:42:22,420 Ikon browser tidak mulai berputar. 862 00:42:22,420 --> 00:42:27,050 Aku tidak pergi ke mana pun, dan itu harfiah karena aku bilang kembali False. 863 00:42:27,050 --> 00:42:31,534 Kembali sirkuit pendek Palsu atau berhenti perilaku default formulir. 864 00:42:31,534 --> 00:42:33,700 Sehingga kemudian meninggalkan kita dengan satu pertanyaan terakhir ini. 865 00:42:33,700 --> 00:42:34,764 Apa Greet lakukan? 866 00:42:34,764 --> 00:42:36,680 Nah, rupanya Greet panggilan fungsi yang disebut 867 00:42:36,680 --> 00:42:39,250 Alert, lewat di satu argumen panjang itu 868 00:42:39,250 --> 00:42:43,950 hasil dari concatenating bersama sekelompok substring, halo ruang koma, 869 00:42:43,950 --> 00:42:45,810 maka apa pun ini kembali. 870 00:42:45,810 --> 00:42:51,490 Sehingga dokumen seperti global variabel dengan akar pohon itu, 871 00:42:51,490 --> 00:42:55,560 memanggil fungsi khusus, jika tidak sekarang dikenal sebagai metode. 872 00:42:55,560 --> 00:42:57,650 Sebuah fungsi yang dalam suatu variabel 873 00:42:57,650 --> 00:42:59,640 disebut metode bukan fungsi. 874 00:42:59,640 --> 00:43:01,570 >> Jadi bisa elemen dengan ID. 875 00:43:01,570 --> 00:43:03,940 Apa elemen yang Anda ingin mendapatkan oleh ID-nya? 876 00:43:03,940 --> 00:43:06,970 Mengutip nama tanda kutip dan kemudian secara khusus menghargai. 877 00:43:06,970 --> 00:43:12,000 Jadi dengan kata lain, kode yang hanya menemukan bidang teks yang ID adalah nama 878 00:43:12,000 --> 00:43:13,380 dan kemudian mendapat nilai. 879 00:43:13,380 --> 00:43:16,460 Jadi jika saya harus mengubah ini dan mengatakan Davin bukan David, 880 00:43:16,460 --> 00:43:20,670 dan klik Submit, sekarang kita memiliki ucapan untuk Davin. 881 00:43:20,670 --> 00:43:22,890 >> Baiklah, jadi semua baik dan bagus. 882 00:43:22,890 --> 00:43:25,480 Tapi mari kita lihat apakah kita dapat membuat ini sedikit lebih bersih karena hanya 883 00:43:25,480 --> 00:43:28,190 menulis kode seperti ini umumnya akan disukai. 884 00:43:28,190 --> 00:43:30,060 Ini akan terlihat menakutkan. 885 00:43:30,060 --> 00:43:32,330 Tapi apa yang pertama perbedaan yang Anda perhatikan di sini 886 00:43:32,330 --> 00:43:35,970 dalam versi ini selain nama berubah untuk DOM satu? 887 00:43:35,970 --> 00:43:41,110 Apa struktural terlihat berbeda tentang hal ini dibandingkan yang lain? 888 00:43:41,110 --> 00:43:41,932 Ya? 889 00:43:41,932 --> 00:43:43,890 AUDIENCE: Apakah formulir di atas naskah sekarang? 890 00:43:43,890 --> 00:43:46,570 DAVID Malan: Ya, bentuknya adalah di atas naskah untuk beberapa alasan penasaran. 891 00:43:46,570 --> 00:43:48,736 Jadi itulah hal pertama yang melompat keluar pada saya, juga. 892 00:43:48,736 --> 00:43:50,990 Dan untungnya setidaknya, Bagian ini identik. 893 00:43:50,990 --> 00:43:53,470 Jadi satu-satunya hal yang tampaknya menjadi berbeda adalah ini. 894 00:43:53,470 --> 00:43:55,296 >> Jadi, inilah yang rapi tentang JavaScript 2. 895 00:43:55,296 --> 00:43:57,420 Dan itu membuat sulit untuk memahami pada pandangan pertama, 896 00:43:57,420 --> 00:44:00,670 terutama untuk proyek-proyek akhir jika Anda sedang melihat kode contoh online, 897 00:44:00,670 --> 00:44:04,200 tapi itu bermuara pada beberapa fitur sintaksis dasar. 898 00:44:04,200 --> 00:44:06,230 Di sini sekali lagi adalah bahwa Dokumen variabel global. 899 00:44:06,230 --> 00:44:09,540 Di sini sekali lagi adalah bahwa metode atau fungsi yang mengatakan mendapatkan elemen dengan ID. 900 00:44:09,540 --> 00:44:11,570 Kali ini saya ingin mendapatkan ID yang disebut demo. 901 00:44:11,570 --> 00:44:12,490 Dimana itu? 902 00:44:12,490 --> 00:44:15,400 Itu tampaknya benar di sini, bentuk itu sendiri. 903 00:44:15,400 --> 00:44:20,010 >> Dan sekarang melihat bahwa ternyata jika saya mendapatkan kembali bahwa simpul dari pohon yang 904 00:44:20,010 --> 00:44:22,940 merupakan bentuk itu sendiri, bukan bidang teks, 905 00:44:22,940 --> 00:44:26,970 ternyata bentuk itu, yang node atau persegi panjang dari pohon, 906 00:44:26,970 --> 00:44:30,450 memiliki apa yang akan kita sebut properti, sangat, sangat, sangat mirip 907 00:44:30,450 --> 00:44:35,390 semangat yang struct di C. Ini hanya anggota data di dalam persegi panjang ini. 908 00:44:35,390 --> 00:44:38,300 >> Jadi aku punya bentuk di sini, dan saya melampirkan, 909 00:44:38,300 --> 00:44:44,650 atau aku menugaskan, kepada para On Kirim handler atau lebih tepatnya On Submit properti 910 00:44:44,650 --> 00:44:45,740 fungsi berikut. 911 00:44:45,740 --> 00:44:49,000 Dan ini adalah, sejauh ini, paling gila yang hal sejauh sintaksis. 912 00:44:49,000 --> 00:44:53,610 Ternyata dalam JavaScript dan PHP, dan terus terang dalam hal ini di C, 913 00:44:53,610 --> 00:44:58,990 meskipun kami tidak melakukannya, Anda dapat menambahkan tak bernama, anonim, atau AKA lambda 914 00:44:58,990 --> 00:45:03,000 fungsi yang tidak memiliki nama tapi bisa disebut tetap. 915 00:45:03,000 --> 00:45:07,050 >> Jadi apa yang saya lakukan di sini adalah aku menugaskan ini On Submit properti, yang 916 00:45:07,050 --> 00:45:14,330 adalah dalam node ini pohon DOM saya, fungsi, fungsi pointer jika Anda mau. 917 00:45:14,330 --> 00:45:16,310 Fungsi yang tidak memiliki nama, tapi itu tidak 918 00:45:16,310 --> 00:45:19,110 masalah karena kita akan melihat sebentar lagi bagaimana menyebutnya. 919 00:45:19,110 --> 00:45:21,780 Ketika fungsi ini disebut, kode ini dijalankan, maka 920 00:45:21,780 --> 00:45:24,210 palsu dikembalikan seperti sebelumnya. 921 00:45:24,210 --> 00:45:25,800 >> Tapi perhatikan apa yang telah kulakukan. 922 00:45:25,800 --> 00:45:27,830 Pada titik ini dalam cerita, aku punya formulir. 923 00:45:27,830 --> 00:45:30,190 Itu punya ID unik yang disebut demo. 924 00:45:30,190 --> 00:45:33,740 Di sini, saya memiliki tag script yang mengeksekusi kode berikut. 925 00:45:33,740 --> 00:45:37,720 Itu menempel dengan simpul di pohon untuk itu On Kirim 926 00:45:37,720 --> 00:45:40,260 properti fungsi ini di sini. 927 00:45:40,260 --> 00:45:44,310 Dan hanya dengan sifat bagaimana browser bekerja, ketika saya sekarang klik Submit atau tekan Enter, 928 00:45:44,310 --> 00:45:45,889 fungsi yang akan dipanggil. 929 00:45:45,889 --> 00:45:48,680 Itu tidak membutuhkan nama karena yang sih peduli apa namanya. 930 00:45:48,680 --> 00:45:52,540 Satu-satunya waktu itu pernah akan mendapatkan disebut adalah ketika saya mengirimkan formulir. 931 00:45:52,540 --> 00:45:55,130 Tidak perlu bagi saya, pengembang manusia, 932 00:45:55,130 --> 00:45:57,330 untuk benar-benar menyebutnya tempat lain. 933 00:45:57,330 --> 00:46:00,720 >> Sekarang hanya sebagai teaser, seolah-olah itu tidak keberatan cukup lentur, 934 00:46:00,720 --> 00:46:03,330 kita bahkan dapat membuat ini terlihat lebih samar menggunakan 935 00:46:03,330 --> 00:46:05,850 perpustakaan super populer disebut jQuery. 936 00:46:05,850 --> 00:46:08,760 Bahkan jQuery dan JavaScript sering digabungkan. 937 00:46:08,760 --> 00:46:12,790 Dan apa yang akan kita lakukan pada hari Rabu adalah awal menggunakan bahasa ini dan perpustakaan ini 938 00:46:12,790 --> 00:46:16,030 untuk membangun semakin asynchronous dan aplikasi dinamis 939 00:46:16,030 --> 00:46:18,950 seperti peta mendapatkan aplikasi, aplikasi 940 00:46:18,950 --> 00:46:22,360 yang memperbarui halaman web secara real waktu, seperti Facebook atau Gchat 941 00:46:22,360 --> 00:46:27,130 dilakukan, dan tidak lagi membatasi diri untuk Memukul Dikirim oleh get atau hanya posting 942 00:46:27,130 --> 00:46:27,630 saja. 943 00:46:27,630 --> 00:46:29,055 Jadi saya akan melihat Anda pada hari Rabu. 944 00:46:29,055 --> 00:46:31,805 945 00:46:31,805 --> 00:46:35,550 >> [MUSIC PLAYING] 946 00:46:35,550 --> 00:48:09,728