1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [Minggu 7] 2 00:00:02,440 --> 00:00:04,730 [David J. Malan - Universiti Harvard] 3 00:00:04,730 --> 00:00:07,490 [Ini adalah CS50. - CS50.TV] 4 00:00:07,490 --> 00:00:12,280 Semua hak. Selamat kembali. Ini adalah CS50, dan ini adalah permulaan 7 minggu. 5 00:00:12,280 --> 00:00:14,690 Beberapa pengumuman kecil: 6 00:00:14,690 --> 00:00:18,150 Pset5 kini dalam proses, atau tidak lama lagi akan menjadi, 7 00:00:18,150 --> 00:00:21,590 dan biarlah saya katakan, agak jujur, ini tidak cenderung untuk menjadi antara yang lebih mencabar 8 00:00:21,590 --> 00:00:24,460 set masalah kursus, jadi izinkan saya menyebut ini sekarang 9 00:00:24,460 --> 00:00:28,190 supaya minggu ini lebih daripada yang pernah anda tidak menunggu sehingga, katakan, Rabu malam 10 00:00:28,190 --> 00:00:29,920 atau malam Khamis untuk menyelam masuk 11 00:00:29,920 --> 00:00:32,369 Ini pastinya pset menarik. Kami fikir ia menyeronokkan. 12 00:00:32,369 --> 00:00:36,110 Jika anda benar-benar mendapatkan ia sepenuhnya betul dan kemudian boleh mencabar Lembaga kononnya Besar, 13 00:00:36,110 --> 00:00:39,830 anda akan mempunyai peluang untuk perlawanan kecerdasan dengan beberapa kakitangan kursus 14 00:00:39,830 --> 00:00:41,620 dan beberapa rakan sekelas anda. 15 00:00:41,620 --> 00:00:44,670 Apa Lembaga Besar adalah apabila anda mempunyai kerja pemeriksa ejaan anda, 16 00:00:44,670 --> 00:00:48,860 anda akan dapat untuk pergi ke cs50.net selepas menjalankan perintah, 17 00:00:48,860 --> 00:00:52,430 semata-mata memilih, dan kemudian jumlah masa dan jumlah RAM dan lebih 18 00:00:52,430 --> 00:00:56,130 bahawa anda telah digunakan dalam pelaksanaan anda akan dipamerkan di sini di halaman rumah kursus. 19 00:00:56,130 --> 00:00:59,740 Anda akan melihat bahawa sekumpulan keseluruhan ini penduduk di sini disenaraikan sebagai kakitangan 20 00:00:59,740 --> 00:01:04,220 kerana pada hujung minggu, kakitangan fikir ia akan menyeronokkan untuk cuba untuk mengalahkan antara satu sama lain. 21 00:01:04,220 --> 00:01:07,390 Jadi, menyedari bahawa matlamat di sini bukanlah untuk mengalahkan kakitangan. 22 00:01:07,390 --> 00:01:09,790 Malah saya hanya di sini pada 13 nombor. 23 00:01:09,790 --> 00:01:13,790 Semata-mata memilih, tetapi ia adalah peluang untuk melihat betapa RAM sedikit 24 00:01:13,790 --> 00:01:16,790 dan bagaimana beberapa saat CPU anda boleh menggunakan vis-a-vis beberapa rakan sekelas anda. 25 00:01:16,790 --> 00:01:20,540 >> Dan saya akan mengakui bahawa Kevin Michael Schmid, 26 00:01:20,540 --> 00:01:23,750 kini berada di kedudukan nombor 1 sebagai salah satu TFS, 27 00:01:23,750 --> 00:01:28,120 ini adalah pelaksanaan bahawa kita tidak memanggil mungkin 28 00:01:28,120 --> 00:01:32,700 diberikan bahawa dia menggunakan hampir 0 RAM dan hampir 0 saat untuk loading. 29 00:01:32,700 --> 00:01:35,670 Jadi kita akan menjaga offline Kevin. [Ketawa] 30 00:01:35,670 --> 00:01:40,950 Terdapat kemahiran tertentu bahawa Kevin meletakkan untuk ujian di sini. 31 00:01:40,950 --> 00:01:45,280 Salah satu perkara yang kita fikir kita akan lakukan juga kini CS50x minggu dalam kemajuan, 32 00:01:45,280 --> 00:01:49,520 dan anda semua sebagai sebahagian eksperimen ini sebagai pelajar. 33 00:01:49,520 --> 00:01:53,720 Kami telah meminta mereka sebagai sebahagian daripada pset0 mereka, yang sama untuk mengemukakan projek Gores 34 00:01:53,720 --> 00:01:58,280 faedah kepada mereka - permainan, sekeping seni interaktif, animasi, atau seperti - 35 00:01:58,280 --> 00:02:03,700 1 - video 2-minit, jika mereka ingin, berkata hello kepada dunia dan yang mereka sebenarnya. 36 00:02:03,700 --> 00:02:06,780 Saya fikir saya akan berkongsi dengan anda hanya beberapa video yang telah diserahkan setakat ini 37 00:02:06,780 --> 00:02:10,759 kerana bagi kami, pada kakitangan sekurang-kurangnya, ia benar-benar telah menarik 38 00:02:10,759 --> 00:02:14,220 dan inspirasi untuk melihat orang dari seluruh dunia - negara-negara di seluruh dunia - 39 00:02:14,220 --> 00:02:18,160 penalaan, semua perkara, kursus sains komputer di Internet, 40 00:02:18,160 --> 00:02:20,410 sama ada ia adalah kerana mereka mahu meneruskan pengajian mereka sendiri, 41 00:02:20,410 --> 00:02:22,300 mereka mahu mengambil kerjaya mereka ke arah yang baru, 42 00:02:22,300 --> 00:02:24,390 mereka mahu untuk mengisi jurang dalam pengetahuan mereka sendiri, 43 00:02:24,390 --> 00:02:27,190 jadi sebahagian daripada sebab-sebab yang sama bahawa anda semua mungkin telah berada di sini. 44 00:02:27,190 --> 00:02:31,090 >> Jadi saya memberi anda seorang pelajar itu di sini. Anda boleh meningkatkan kelantangan hanya sedikit. 45 00:02:31,090 --> 00:02:35,520 Berikut adalah salah satu daripada penghujahan 1-minit pelajar kita. 46 00:02:35,520 --> 00:02:40,380 Hello, dunia. Saya seorang pelajar kejuruteraan perindustrian di sini di Malaga, Sepanyol. 47 00:02:40,380 --> 00:02:45,840 Saya teruja kursus online ini kerana saya suka sains komputer, saya benar-benar lakukan, 48 00:02:45,840 --> 00:02:48,880 dan saya benar-benar menghargai bahawa saya dapat meneroka ia. 49 00:02:48,880 --> 00:02:51,940 Dan hakikat bahawa saya boleh belajar sama semua kalian lakukan 50 00:02:51,940 --> 00:02:57,040 tetapi sebaliknya berada di Harvard Saya di Malaga, bagaimana hebat? 51 00:02:57,040 --> 00:03:02,040 Nah, saya Fernando, dan ini adalah CS50. Lihat anda semua. 52 00:03:02,040 --> 00:03:07,100 [Ketawa] Satu lagi klip kita terutamanya suka, anda akan mendapati bahawa bahasa Inggeris ini lelaki tidak begitu kuat. 53 00:03:07,100 --> 00:03:11,520 Ia kelihatan seperti dia mempunyai mesin diterjemahkan, jadi terjemahan sendiri adalah sedikit tidak sempurna, 54 00:03:11,520 --> 00:03:15,790 tetapi ini adalah salah satu kegemaran kami setakat ini serta. 55 00:03:25,080 --> 00:03:29,980 [♪ ♪] 56 00:03:29,980 --> 00:03:32,370 Hello, dunia. [Bercakap dalam bahasa Jepun] 57 00:03:32,370 --> 00:03:39,830 [Saya mempunyai untuk menyambut di Jepun kerana bahasa Inggeris saya adalah sangat tidak boleh dipercayai.] 58 00:03:39,830 --> 00:03:45,380 [Saya telah menyampaikan mesej kepada anda dari bandar Gifu, Jepun.] 59 00:03:45,380 --> 00:03:49,820 [I boleh pelajar untuk kali pertama dalam tempoh 20 tahun, seperti yang dapat dilihat.] 60 00:03:49,820 --> 00:03:54,640 [Saya amat berterima kasih kepada Universiti Harvard yang memberikan saya peluang ini dan EDX.] 61 00:03:54,640 --> 00:04:01,510 [Golf gitar dan perkara kegemaran saya berjalan.] [Ketawa] 62 00:04:01,510 --> 00:04:05,750 [♪ ♪] 63 00:04:05,750 --> 00:04:10,790 [Mengapa anda berfikir saya cuba untuk menghadiri cs50x.] 64 00:04:10,790 --> 00:04:14,990 [Universiti Harvard, ia adalah keinginan saya.] 65 00:04:14,990 --> 00:04:19,740 [Terutamanya jika saya jauh kehadiran tinggal di Jepun.] 66 00:04:19,740 --> 00:04:26,680 [Saya mahu mencuba segera sedar kewujudan EDX tersebut apabila.] 67 00:04:26,680 --> 00:04:32,500 [Jangan anda berfikir supaya anda tidak berkaitan dengan usia pembelajaran I.] 68 00:04:32,500 --> 00:04:38,350 [Cs50 adalah keinginan saya. Nama saya adalah Kazu, dan ini adalah cs50.] 69 00:04:38,350 --> 00:04:43,090 [♪ ♪] [tepukan dan bersorak] 70 00:04:43,090 --> 00:04:49,220 Satu lagi kegemaran kita adalah ini penyerahan sini dari seseorang. 71 00:04:51,070 --> 00:04:55,380 [♪ ♪] [Malan] Google ia jika anda tidak biasa dengan meme ini. 72 00:04:55,380 --> 00:05:01,480 >> Dan kemudian akhir sekali, beberapa orang lain yang mendapat posted bahawa mungkin memenangi anugerah comel. 73 00:05:01,480 --> 00:05:06,820 [Pelajar] Aww! >> [Malan] Kami akan perlu untuk mendengar. Ini adalah pendek, maka dengarlah dengan teliti. 74 00:05:08,580 --> 00:05:11,150 [Penceramah wanita] Apa nama anda? >> Louie. 75 00:05:11,150 --> 00:05:16,120 [Penceramah wanita] Apa ini? >> [Gelak] CS50. [Ketawa] 76 00:05:16,120 --> 00:05:19,510 [Malan] Dia dua mengambil, walaupun. 77 00:05:19,510 --> 00:05:22,240 Di sini kita pergi, yang terakhir. 78 00:05:23,030 --> 00:05:26,980 Nama saya adalah Louie, dan ini adalah CS50. 79 00:05:26,980 --> 00:05:30,250 [Ketawa] Ini kemudiannya CS50x. 80 00:05:30,250 --> 00:05:33,230 Terima kasih kepada semua orang-orang yang anda manakala berikut bersama-sama di rumah 81 00:05:33,230 --> 00:05:35,620 yang telah mengambil bahagian setakat ini. 82 00:05:35,620 --> 00:05:39,510 Hari ini, kita mengakhiri perbincangan kita struktur data, 83 00:05:39,510 --> 00:05:41,160 sekurang-kurangnya sebahagian daripada yang paling asas, 84 00:05:41,160 --> 00:05:44,760 dan kemudian kita meneruskan perbualan kami tentang HTML dan pengaturcaraan web. 85 00:05:44,760 --> 00:05:48,520 Malah, kita telah menghabiskan masa lalu kira-kira tujuh minggu melihat asas-asas pengaturcaraan - 86 00:05:48,520 --> 00:05:50,450 algoritma, struktur data, dan sebagainya - 87 00:05:50,450 --> 00:05:53,050 dan C, kerana anda mungkin telah mengalami setakat ini, 88 00:05:53,050 --> 00:05:57,060 tidak semestinya yang paling mudah bahasa 89 00:05:57,060 --> 00:05:59,090 dengan yang melaksanakan beberapa idea-idea itu. 90 00:05:59,090 --> 00:06:01,880 Dan sebagainya bermula minggu ini dan minggu depan dan kemudian berikut, 91 00:06:01,880 --> 00:06:07,110 kita akhirnya akan dapat peralihan daripada C, yang biasanya dikenali sebagai bahasa yang agak rendah tahap, 92 00:06:07,110 --> 00:06:11,190 kepada perkara-perkara tahap yang lebih tinggi, di kalangan mereka PHP, JavaScript, dan sebagainya, 93 00:06:11,190 --> 00:06:14,850 yang kita lihat akan menarik apabila pelajaran yang sama bahawa kita telah belajar sejak beberapa minggu lalu, 94 00:06:14,850 --> 00:06:19,430 tetapi anda akan mendapati bahawa mengisytiharkan perkara-perkara seperti tatasusunan dan jadual hash dan mencari dan menyusun 95 00:06:19,430 --> 00:06:23,370 menjadi lebih mudah kerana bahasa itu sendiri, kita akan mula menggunakan 96 00:06:23,370 --> 00:06:25,290 akan menjadi lebih kuat. 97 00:06:25,290 --> 00:06:27,410 Tetapi pertama, permohonan pokok. 98 00:06:27,410 --> 00:06:30,240 Ia adalah sangat biasa hari ini perlu untuk memampatkan maklumat. 99 00:06:30,240 --> 00:06:34,770 Dalam konteks apa yang anda mahu untuk memampatkan beberapa jenis maklumat digital? 100 00:06:37,190 --> 00:06:39,670 >> Yeah. >> [Pelajar] Apabila anda perlu menghantar melalui Web. 101 00:06:39,670 --> 00:06:41,450 Ya, apabila anda mahu menghantar sesuatu melalui Web. 102 00:06:41,450 --> 00:06:44,950 Jika anda ingin memuat turun fail yang besar, ia adalah ideal jika seseorang pada akhir lain 103 00:06:44,950 --> 00:06:48,760 telah dimampatkan fail yang menggunakan format zip atau sesuatu seperti itu 104 00:06:48,760 --> 00:06:53,760 supaya anda menghantar bit kurang daripada mungkin sebaliknya dihantar. 105 00:06:53,760 --> 00:06:55,500 Jadi bagaimana anda memampatkan maklumat? 106 00:06:55,500 --> 00:07:00,540 Ia semua bisul turun untuk menggunakan bit kurang daripada yang diperlukan oleh lalai. 107 00:07:00,540 --> 00:07:03,220 Tetapi ini adalah jenis perkara yang ingin tahu kerana berfikir kembali kepada minggu 0 dan 1 108 00:07:03,220 --> 00:07:07,370 apabila kita bercakap tentang ASCII dan binari dan kita bercakap tentang ASCII khususnya 109 00:07:07,370 --> 00:07:10,690 menggunakan 8 bit untuk mewakili huruf abjad 110 00:07:10,690 --> 00:07:16,120 supaya surat A diwakili oleh 65, huruf kecil adalah nombor 97, 111 00:07:16,120 --> 00:07:21,210 dan bagaimanapun anda mewakili 65 atau 97, anda menggunakan 7 atau 8 bit. 112 00:07:21,210 --> 00:07:24,120 Tetapi tangkapan adalah bahawa terdapat beberapa huruf dalam abjad Inggeris 113 00:07:24,120 --> 00:07:26,230 yang tidak begitu popular seperti orang lain. 114 00:07:26,230 --> 00:07:31,600 Z tidak semua yang popular, Q tidak semua yang popular, tetapi A dan E adalah super popular. 115 00:07:31,600 --> 00:07:37,280 Dan lagi bagi semua surat ini, secara lalai dunia menggunakan nombor yang sama bit, hanya 8. 116 00:07:37,280 --> 00:07:42,690 Jadi ia tidak akan telah bijak jika bukannya menggunakan 8 bit untuk setiap huruf, 117 00:07:42,690 --> 00:07:47,440 walaupun yang paling jarang digunakan seperti Q dan Z, 118 00:07:47,440 --> 00:07:51,910 bagaimana jika kita menggunakan kurang bit bagi A dan E dan S dan huruf yang paling popular 119 00:07:51,910 --> 00:07:55,000 dan digunakan lebih bit untuk huruf kurang popular, 120 00:07:55,000 --> 00:07:57,770 idea mengoptimumkan mari bagi kes biasa, 121 00:07:57,770 --> 00:08:01,160 yang merupakan tema dalam bidang sains komputer cuba untuk mengoptimumkan apa yang akan berlaku yang paling 122 00:08:01,160 --> 00:08:05,310 dan menghabiskan masa lebih sedikit, ruang yang lebih sedikit kepada perkara-perkara itu, yeah, mungkin berlaku 123 00:08:05,310 --> 00:08:07,680 tetapi tidak semestinya kerap. 124 00:08:07,680 --> 00:08:09,330 Jadi mari kita mengambil satu contoh. 125 00:08:09,330 --> 00:08:12,610 >> Katalah kita mahu untuk mengekod maklumat yang agak cekap. 126 00:08:12,610 --> 00:08:15,090 Anda mungkin telah berkembang sehingga mengetahui sesuatu yang sedikit tentang kod Morse, 127 00:08:15,090 --> 00:08:17,450 dan kemungkinan anda tidak tahu kod sebenar, 128 00:08:17,450 --> 00:08:21,750 tetapi anda mungkin ingat bahawa ia adalah sekurang-kurangnya ini siri titik dan sengkang. 129 00:08:21,750 --> 00:08:26,640 Ini adalah kod yang agak cekap, dan notis bahawa surat yang paling popular - misalnya, E - 130 00:08:26,640 --> 00:08:28,980 menggunakan terpendek berbunyi 'bip. 131 00:08:28,980 --> 00:08:31,740 Kod Morse adalah semua tentang bip-bip-bip-bip-bip bip dan memegang nada 132 00:08:31,740 --> 00:08:34,799 sama ada untuk tempoh yang singkat masa atau jangka masa yang lama. 133 00:08:34,799 --> 00:08:40,330 E, seperti yang ditandakan oleh titik, adalah bip super pendek, hanya bip, dan yang akan mewakili E. 134 00:08:40,330 --> 00:08:43,960 Sebaliknya, T akan bip lagi, seperti bip [memanjangkan bunyi], 135 00:08:43,960 --> 00:08:45,710 dan yang akan mewakili T. 136 00:08:45,710 --> 00:08:48,840 Tetapi yang masih agak pendek kerana, sebaliknya, jika anda melihat Z, 137 00:08:48,840 --> 00:08:52,690 untuk meluahkan Z anda akan pergi bip, bip [lagi bunyi], bip, bip [bunyi pendek]. 138 00:08:52,690 --> 00:08:55,360 Jadi ia adalah lebih lama kerana ia kurang biasa. 139 00:08:55,360 --> 00:08:58,150 Tetapi gotcha sini adalah bahawa kod Morse adalah sedikit cacat 140 00:08:58,150 --> 00:09:00,610 dalam bahawa ia tidak segera decodable. 141 00:09:00,610 --> 00:09:07,350 Sebagai contoh, andaikan bahawa anda mendengar pada akhir beberapa bip dawai [pendek], bip [lama]. 142 00:09:07,350 --> 00:09:12,480 Apakah mesej adakah saya hanya menerima? Satu titik dan sengkang. Apakah yang mewakili? 143 00:09:12,480 --> 00:09:15,330 [Pelajar] A. >> [Malan] Mungkin. 144 00:09:15,330 --> 00:09:18,270 Ia juga boleh menjadi E diikuti oleh T. 145 00:09:18,270 --> 00:09:23,390 Dalam erti kata lain, kod Morse, walaupun ia memanfaatkan prinsip ini mengoptimumkan kes sudut, 146 00:09:23,390 --> 00:09:26,250 ia tidak meminjamkan dirinya kepada decodability segera. 147 00:09:26,250 --> 00:09:29,850 Itu adalah, manusia yang mendengar atau menerima titik dan sengkang 148 00:09:29,850 --> 00:09:34,540 entah bagaimana memikirkan mana rehat adalah antara huruf, 149 00:09:34,540 --> 00:09:39,660 kerana jika anda tidak tahu di mana mereka rehat, anda mungkin mengelirukan A untuk ET atau sebaliknya. 150 00:09:39,660 --> 00:09:43,880 >> Jadi apa yang anda mungkin lakukan? Dalam kod Morse anda boleh hanya menjedakan antara setiap huruf. 151 00:09:43,880 --> 00:09:47,660 Tetapi berhenti adalah jenis kaunter ke titik keseluruhan mempercepatkan perkara. 152 00:09:47,660 --> 00:09:52,880 Jadi apa jika sebaliknya kita datang dengan kod di mana tidak ada keadaan ini buruk 153 00:09:52,880 --> 00:09:56,570 di mana E adalah awalan, misalnya, A - 154 00:09:56,570 --> 00:10:00,020 dalam erti kata lain, jika kita boleh memastikan bahawa corak masih pendek untuk huruf popular 155 00:10:00,020 --> 00:10:04,850 panjang untuk huruf kurang popular, tetapi tidak ada kekeliruan yang mungkin? 156 00:10:04,850 --> 00:10:08,930 Seorang lelaki dengan nama Huffman tahun lalu mencipta skim ini dipanggil Huffman coding 157 00:10:08,930 --> 00:10:12,390 yang benar-benar memanfaatkan salah satu struktur data yang kita telah menghabiskan sedikit masa bercakap tentang 158 00:10:12,390 --> 00:10:16,560 ini minggu lalu, bahawa pokok-pokok, pokok binari khusus - 159 00:10:16,560 --> 00:10:19,710 makna binari pokok bahawa ia tidak mempunyai lebih daripada 2 orang kanak-kanak. 160 00:10:19,710 --> 00:10:22,720 Ia mempunyai mungkin seorang kanak-kanak kiri, mungkin seorang kanak-kanak yang betul, dan itulah ia. 161 00:10:22,720 --> 00:10:26,510 Jadi andaikan hanya demi perbincangan bahawa seseorang mahu untuk menghantar mesej 162 00:10:26,510 --> 00:10:31,270 yang kelihatan seperti ini. Ia adalah karut lengkap tetapi ia terdiri As, Bs, Cs, Ds, dan Es. 163 00:10:31,270 --> 00:10:34,890 Dan jika anda benar-benar mengira sehingga semua Seperti, Bs, Cs, Ds, dan Es 164 00:10:34,890 --> 00:10:36,870 dan kemudian dibahagikan dengan jumlah bilangan huruf, 165 00:10:36,870 --> 00:10:42,710 ini carta sedikit di sini mengatakan bahawa 45% daripada huruf Es, 20% As, 166 00:10:42,710 --> 00:10:45,010 10% B, dan sebagainya. 167 00:10:45,010 --> 00:10:47,330 Jadi dalam erti kata lain, menganggap bahawa rentetan dipetik di sana 168 00:10:47,330 --> 00:10:49,080 hanya beberapa mesej yang anda mahu hantar. 169 00:10:49,080 --> 00:10:52,180 Ia berlaku untuk menjadi karut hanya supaya kita boleh menggunakan sebagai beberapa huruf yang mungkin, 170 00:10:52,180 --> 00:10:55,220 tetapi ia sememangnya kes yang E kekal yang paling popular, 171 00:10:55,220 --> 00:11:01,450 dan B dan C-kurangnya popular, sekurang-kurangnya 5 huruf abjad. 172 00:11:01,450 --> 00:11:04,040 Jadi bagaimana kita boleh pergi tentang datang dengan pengekodan, 173 00:11:04,040 --> 00:11:08,430 pengekodan perduaan, corak 0 dan 1s bagi setiap surat ini 174 00:11:08,430 --> 00:11:14,820 dalam apa-apa cara bahawa E adalah corak yang pendek dan mungkin B dan C adalah sedikit lagi corak, 175 00:11:14,820 --> 00:11:19,270 lagi, idea yang kita mahu menggunakan kurang bit kebanyakan masa 176 00:11:19,270 --> 00:11:21,790 dan lebih bit hanya sekali-sekala. 177 00:11:21,790 --> 00:11:26,070 Menurut Huffman coding, anda boleh mewujudkan hutan pokok. 178 00:11:26,070 --> 00:11:31,190 Terdapat jenis garis cerita di sini yang melibatkan pokok-pokok dan juga proses membina mereka. 179 00:11:31,190 --> 00:11:32,420 Mari kita mulakan. 180 00:11:32,420 --> 00:11:36,140 >> Saya mencadangkan bahawa anda mula dengan hutan ini, jadi untuk bercakap, 5 pokok, 181 00:11:36,140 --> 00:11:38,260 setiap yang merupakan pokok yang agak bodoh. 182 00:11:38,260 --> 00:11:42,800 Pokok itu terdiri daripada hanya nod tunggal, seperti yang diwakili di sini oleh bulatan. 183 00:11:42,800 --> 00:11:45,310 Jadi setiap perkara-perkara ini mungkin menjadi struct C 184 00:11:45,310 --> 00:11:50,200 dan dalam struct C mungkin apungan mewakili kiraan frekuensi 185 00:11:50,200 --> 00:11:52,510 dan kemudian mungkin char mewakili huruf. 186 00:11:52,510 --> 00:11:56,470 Jadi berfikir ini nod sebagai hanya mana-mana C struct lama tetapi, buat masa sekarang, tahap yang lebih tinggi. 187 00:11:56,470 --> 00:12:01,230 Ini adalah hutan 5 pokok, masing-masing yang hanya mempunyai nod tunggal. 188 00:12:01,230 --> 00:12:06,830 Apa Huffman dicadangkan adalah bahawa kita mula untuk menggabungkan pokok-pokok 189 00:12:06,830 --> 00:12:11,140 yang mempunyai kiraan frekuensi terkecil menjadi pokok yang lebih besar sedikit 190 00:12:11,140 --> 00:12:13,490 dengan menghubungkan mereka dengan nod akar baru. 191 00:12:13,490 --> 00:12:17,560 Jadi di kalangan huruf di sini, melihat bahawa untuk kemudahan saya telah disusun mereka dari kiri ke kanan, 192 00:12:17,560 --> 00:12:21,420 walaupun yang tidak tegas perlu, dan notis bahawa nodus terkecil 193 00:12:21,420 --> 00:12:23,930 kini 10% dan 10%. 194 00:12:23,930 --> 00:12:28,940 Jadi Huffman mencadangkan bahawa kita bergabung mereka 2 terkecil nod ke pokok baru 195 00:12:28,940 --> 00:12:34,450 dengan memperkenalkan nod induk baru dan kemudian memberi ibu bapa bahawa anak kiri dan kanak-kanak yang betul 196 00:12:34,450 --> 00:12:37,720 mana B adalah sewenang-wenangnya kiri dan C adalah sewenang-wenangnya hak. 197 00:12:37,720 --> 00:12:41,590 Dan kemudian Huffman seterusnya mencadangkan bahawa biarkan kini hanya memikirkan anak kiri 198 00:12:41,590 --> 00:12:44,790 di salah satu daripada pokok-pokok sentiasa diwakili oleh 0 199 00:12:44,790 --> 00:12:47,890 dan kanak-kanak yang betul sentiasa diwakili oleh nombor 1. 200 00:12:47,890 --> 00:12:50,680 >> Ia tidak kira jika anda flip mereka selagi anda konsisten. 201 00:12:50,680 --> 00:12:54,650 Jadi sekarang kita mempunyai empat pokok di hutan ini. 202 00:12:54,650 --> 00:12:58,050 Dan saya katakan 4 kerana sekarang pokok di sebelah kiri - 203 00:12:58,050 --> 00:13:00,570 dan ia tidak begitu banyak pokok dalam erti kata bahawa ia tumbuh dengan cara ini, 204 00:13:00,570 --> 00:13:05,170 ia lebih seperti pokok keluarga di mana kini 0.2 adalah jenis ibu bapa kedua-dua kanak-kanak - 205 00:13:05,170 --> 00:13:07,930 melihat bahawa ibu bapa yang kita telah disediakan 0,2. 206 00:13:07,930 --> 00:13:13,370 Kami telah menambah tuduhan kekerapan dua kanak-kanak dan diberi nod baru jumlah. 207 00:13:13,370 --> 00:13:15,310 Jadi sekarang kita hanya mengulangi proses ini. 208 00:13:15,310 --> 00:13:19,490 Cari dua terkecil nod dan kemudian menyertai mereka ke pokok baru 209 00:13:19,490 --> 00:13:21,380 dan kemudian mengulangi proses lagi. 210 00:13:21,380 --> 00:13:26,390 Sekarang kita mempunyai calon-calon beberapa, 20%, 15%, dan 20% lagi. 211 00:13:26,390 --> 00:13:29,780 Dalam kes ini, kita perlu untuk memecahkan seri. Kita boleh melakukan sewenang-wenangnya. 212 00:13:29,780 --> 00:13:31,540 Kita hanya perlu melakukannya secara konsisten. 213 00:13:31,540 --> 00:13:33,760 Dalam kes ini, saya sewenang-wenangnya akan pergi dengan satu di sebelah kiri, 214 00:13:33,760 --> 00:13:39,880 dan saya kini menggabungkan 20% dan 15% untuk memberikan saya ibu bapa baru yang dipanggil 35%, 215 00:13:39,880 --> 00:13:46,310 yang kiri kanak-kanak adalah 0, yang hak kanak-kanak adalah 1, dan kini kita mempunyai hanya tiga pokok di hutan. 216 00:13:46,310 --> 00:13:47,960 Anda mungkin boleh melihat di mana ini akan. 217 00:13:47,960 --> 00:13:51,150 Jika kita mengulangi ini beberapa kali lagi, kita akan mempunyai hanya satu pokok yang lebih besar, 218 00:13:51,150 --> 00:13:53,900 semua yang tepi dilabelkan dengan 0 dan 1s. 219 00:13:53,900 --> 00:13:55,710 Mari kita melakukannya sekali lagi. 220 00:13:55,710 --> 00:14:02,600 35% adalah akar yang pokok. 20% dan 45%, jadi kita akan menggabungkan 35% dan 20%. 221 00:14:02,600 --> 00:14:05,610 Sekarang kita mempunyai pokok ini di sini. Kami menambah mereka bersama-sama, kita mempunyai 55%. 222 00:14:05,610 --> 00:14:07,910 Kini terdapat hanya dua pokok di dalam hutan. 223 00:14:07,910 --> 00:14:11,900 Kami melakukan ini satu masa akhir, dan diharapkan matematik semua frekuensi menambah sehingga 224 00:14:11,900 --> 00:14:15,570 kerana mereka perlu kerana kita dikira mereka daripada mendapatkan-pergi untuk menambah sehingga 100%. 225 00:14:15,570 --> 00:14:17,960 Dan sekarang kita mempunyai satu pokok. 226 00:14:17,960 --> 00:14:20,580 Jadi ini adalah satu pengekodan Huffman pokok. 227 00:14:20,580 --> 00:14:24,400 Ia jenis mengambil masa untuk sampai ke sana secara lisan, tetapi realitinya adalah dengan untuk gelung 228 00:14:24,400 --> 00:14:27,620 atau dengan fungsi rekursi, anda boleh membina perkara ini sehingga cukup pantas. 229 00:14:27,620 --> 00:14:32,440 Jadi sekarang kita mempunyai satu nod baru, dan semua ini nod dalaman telah malloc'd, 230 00:14:32,440 --> 00:14:34,690 mungkin, di sepanjang jalan. 231 00:14:34,690 --> 00:14:38,650 Jadi sekarang di bahagian atas pokok ini kita mempunyai 100%, tetapi sekarang notis kita mempunyai jalan 232 00:14:38,650 --> 00:14:43,780 dari baru ini yang besar-besar-besar-nenek kepada semua besar-besar-besar-cucu 233 00:14:43,780 --> 00:14:45,930 semua cara di bawah, kepada semua daun. 234 00:14:45,930 --> 00:14:52,840 >> Apa yang kita akan lakukan sekarang adalah mencadangkan bahawa untuk mewakili huruf E, 235 00:14:52,840 --> 00:14:55,670 kita hanya akan menggunakan nombor 1. Mengapa? 236 00:14:55,670 --> 00:15:01,000 Kerana jika kita merentasi pokok ini dari akar akhir ke daun yang dikenali sebagai E, 237 00:15:01,000 --> 00:15:06,050 kita mengikuti hanya satu kelebihan, kelebihan yang betul, dan yang dilabel kursus di atas kanan 1. 238 00:15:06,050 --> 00:15:11,550 Jadi implikasi di sini untuk Huffman ialah bahawa pengekodan E dalam perduaan hanya hendaklah 1. 239 00:15:11,550 --> 00:15:14,490 Dan itulah agak sialan cekap. Tidak boleh benar-benar mendapat apa-apa yang lebih kecil daripada itu. 240 00:15:14,490 --> 00:15:18,350 Sebaliknya, A akan diwakili, jika anda ikut logik, 241 00:15:18,350 --> 00:15:21,610 apakah corak bit sebaliknya? 01. 242 00:15:21,610 --> 00:15:25,500 Jadi untuk mendapatkan A, kita bermula di akar dan kita pergi kiri dan kemudian kita pergi betul, 243 00:15:25,500 --> 00:15:28,580 yang bermaksud kita diikuti 0 dan kemudian 1. 244 00:15:28,580 --> 00:15:32,810 Jadi kita hendaklah mewakili huruf A dengan corak 0 dan 1. 245 00:15:32,810 --> 00:15:36,010 Dan kini melihat kita sudah mempunyai harta decodability segera 246 00:15:36,010 --> 00:15:38,090 bahawa kita tidak mempunyai kod Morse. 247 00:15:38,090 --> 00:15:42,840 Walaupun kedua-dua pola-pola ini cukup pendek - E adalah 1 bit, adalah 2 bit - 248 00:15:42,840 --> 00:15:45,080 melihat bahawa mereka tidak boleh dikelirukan satu atau yang lain, 249 00:15:45,080 --> 00:15:54,870 kerana jika anda lihat a 1 ia mendapat untuk menjadi E, jika anda melihat 0 maka 1 ia jelas mendapat menjadi A. 250 00:15:54,870 --> 00:15:58,410 Begitu juga, apa D? 001. 251 00:15:58,410 --> 00:16:01,440 Apakah C? 0001. 252 00:16:01,440 --> 00:16:05,320 Dan apa yang B? 0000. 253 00:16:05,320 --> 00:16:09,550 Dan sekali lagi, kerana semua huruf kita mengambil berat tentang di daun 254 00:16:09,550 --> 00:16:13,890 dan tiada seorang pun daripada mereka adalah jenis orang tengah di jalan dari akar ke daun, 255 00:16:13,890 --> 00:16:18,760 tiada risiko conflating pengekodan berbeza 2 huruf ' 256 00:16:18,760 --> 00:16:22,300 kerana semua ini corak bit adalah berketentuan. 257 00:16:22,300 --> 00:16:25,280 0000 akan sentiasa menjadi B. 258 00:16:25,280 --> 00:16:29,480 Tiada nod di suatu tempat di antara yang anda mungkin mengelirukan satu surat untuk yang lain. 259 00:16:29,480 --> 00:16:31,150 Jadi apa implikasi di sini? 260 00:16:31,150 --> 00:16:35,080 >> Surat yang paling popular - dalam kes ini E - telah mendapat pengekodan terpendek, 261 00:16:35,080 --> 00:16:37,430 A telah mendapat pengekodan seterusnya terpendek, 262 00:16:37,430 --> 00:16:41,390 dan B dan C, yang kita sudah tahu dari jenis-go kurangnya popular 263 00:16:41,390 --> 00:16:45,390 pada setiap frekuensi 10%, mereka telah mendapat pengekodan terpanjang. 264 00:16:45,390 --> 00:16:49,410 Dan sebagainya apa ini bermakna sekarang adalah bahawa jika anda mahu untuk menghantar mesej yang dimampatkan 265 00:16:49,410 --> 00:16:51,950 melalui Internet atau dalam e-mel atau sebagainya, 266 00:16:51,950 --> 00:16:56,730 bukannya menggunakan ASCII standard, anda boleh menghantar mesej berkod Huffman 267 00:16:56,730 --> 00:17:01,720 di mana jika anda mahu menghantar huruf E, anda menghantar hanya sedikit tunggal. 268 00:17:01,720 --> 00:17:05,680 Jika anda ingin menghantar A, anda menghantar 2 bit, 01, dan bukannya menghantar 8 bit 269 00:17:05,680 --> 00:17:10,190 diikuti oleh 8 bit lagi diikuti oleh 8 bit lagi dan sebagainya. 270 00:17:10,190 --> 00:17:11,940 Tetapi ada gotcha di sini. 271 00:17:11,940 --> 00:17:17,079 Ia tidak mencukupi untuk hanya membina pokok ini dan kemudian mula menghantar dari Alice Bob 272 00:17:17,079 --> 00:17:20,010 sedikit pendek corak, rentetan dari ASCII, 273 00:17:20,010 --> 00:17:23,140 kerana Alice juga mempunyai memaklumkan Bob apa 274 00:17:23,140 --> 00:17:26,880 jika Bob akan menjadi dapat membaca mesej termampat beliau? 275 00:17:26,880 --> 00:17:30,770 [Pelajar tindak balas didengar] >> Apa itu? 276 00:17:30,770 --> 00:17:32,310 [Pelajar tindak balas didengar] >> Daripada apa pokok. 277 00:17:32,310 --> 00:17:35,160 Atau lebih khusus, apa yang mereka pengekodan, 278 00:17:35,160 --> 00:17:39,010 terutama sejak semasa cerita ini kita membuat panggilan penghakiman pada satu titik. 279 00:17:39,010 --> 00:17:43,640 Ingat bahawa kita terpaksa memilih sewenang-wenangnya antara 2 nod 20% berbeza? 280 00:17:43,640 --> 00:17:49,800 Jadi ia bukan kes yang Bob, penerima, hanya boleh membina semula pokok sendiri 281 00:17:49,800 --> 00:17:53,390 kerana mungkin dia akan mewujudkan pokok pernah jadi sedikit berbeza dari Alice. 282 00:17:53,390 --> 00:17:56,670 Selain itu, Bob tidak tahu apa mesej asal 283 00:17:56,670 --> 00:18:00,770 kerana satu-satunya perkara Alice menghantar dia, sudah tentu, adalah mesej yang dimampatkan. 284 00:18:00,770 --> 00:18:05,900 >> Jadi tangkapan dengan pemampatan seperti ini adalah bahawa, ya, Alice boleh menyimpan banyak keseluruhan bit 285 00:18:05,900 --> 00:18:09,900 dengan menghantar 1 untuk E dan 01 untuk A dan sebagainya, 286 00:18:09,900 --> 00:18:15,180 tetapi dia juga telah memaklumkan kepada Bob apa pemetaan adalah antara huruf dan bit 287 00:18:15,180 --> 00:18:19,620 kerana mereka boleh tidak jelas bergantung kepada hanya ASCII lagi jika kita tidak menggunakan ASCII. 288 00:18:19,620 --> 00:18:22,200 Jadi dia boleh menghantar kepadanya pokok entah bagaimana - 289 00:18:22,200 --> 00:18:26,600 menulisnya, menyimpan ia sebagai data perduaan atau sesuatu seperti itu - 290 00:18:26,600 --> 00:18:30,280 atau hanya menghantar dia sedikit lembaran menipu, fail Excel, yang menunjukkan pemetaan. 291 00:18:30,280 --> 00:18:36,480 Jadi keberkesanan mampatan benar-benar menganggap bahawa mesej yang anda sedang menghantar 292 00:18:36,480 --> 00:18:40,230 cukup besar, sekurang-kurangnya sederhana, 293 00:18:40,230 --> 00:18:42,180 kerana jika anda menghantar pesanan ringkas super, 294 00:18:42,180 --> 00:18:45,390 jika anda hanya mahu untuk menghantar mesej BAD, yang berlaku untuk menjadi satu perkataan yang kita boleh mengeja di sini, 295 00:18:45,390 --> 00:18:49,550 B-A-D, anda mungkin akan menggunakan kurang bit, 296 00:18:49,550 --> 00:18:53,130 tetapi tangkapan adalah jika anda juga mempunyai memaklumkan Bob apa pokok 297 00:18:53,130 --> 00:18:57,530 atau apa yang mereka pengekodan, anda akan mungkin melebihi semua simpanan 298 00:18:57,530 --> 00:19:00,110 mempunyai perkara termampat untuk memulakan. 299 00:19:00,110 --> 00:19:02,210 Jadi ia sebenarnya boleh menjadi kes bahawa jika anda cuba memampatkan 300 00:19:02,210 --> 00:19:05,330 walaupun dengan sesuatu seperti zip atau format fail anda mungkin biasa dengan - 301 00:19:05,330 --> 00:19:07,780 fail agak kecil, fail walaupun kosong - 302 00:19:07,780 --> 00:19:10,930 kadang-kadang fail-fail mungkin mendapatkan lebih besar dan tidak kecil. 303 00:19:10,930 --> 00:19:14,320 Tetapi realistik, yang berlaku hanya untuk saiz fail yang kecil, 304 00:19:14,320 --> 00:19:16,920 jadi ia tidak akan membuat fail gigabit menjadi 2 gigabait; 305 00:19:16,920 --> 00:19:19,480 kita benar-benar bercakap bait atau hanya beberapa kilobytes. 306 00:19:19,480 --> 00:19:22,330 >> Beberapa program seperti zip cukup bijak untuk menyedari bahawa, 307 00:19:22,330 --> 00:19:24,590 "Anda akan menghabiskan lebih bit memampatkan ini." 308 00:19:24,590 --> 00:19:27,460 "Biar saya tidak mengganggu memampatkan ia untuk anda semua." 309 00:19:27,460 --> 00:19:30,160 Jadi ini adalah hanya satu cara kemudian memampatkan format teks. 310 00:19:30,160 --> 00:19:32,300 Kita boleh melaksanakan sesuatu seperti ini di C. 311 00:19:32,300 --> 00:19:35,370 Sebagai contoh, di sini adalah bagaimana kita mungkin mewakili nod dalam pokok ini 312 00:19:35,370 --> 00:19:39,320 di mana kita mempunyai char untuk simbol, nilai terapung untuk kekerapan, 313 00:19:39,320 --> 00:19:42,250 dan seperti yang kita telah melihat dengan struktur data kami yang lain, 2 petunjuk, 314 00:19:42,250 --> 00:19:47,080 1 kepada anak kiri, 1 ke kanan, sama ada yang boleh NULL, 315 00:19:47,080 --> 00:19:50,850 tetapi jika tidak, ia merujuk kepada kanak-kanak kiri dan kanak-kanak yang betul. 316 00:19:50,850 --> 00:19:55,130 Jadi ini maka adalah pengekodan Huffman, dan ia adalah salah satu cara yang anda boleh pergi tentang memampatkan maklumat, 317 00:19:55,130 --> 00:19:57,880 dan ia pasti salah satu yang paling mudah untuk melaksanakan 318 00:19:57,880 --> 00:20:00,830 dalam konteks, berkata, struktur data minggu lepas, 319 00:20:00,830 --> 00:20:03,250 walaupun walaupun algoritma yang lebih canggih wujud 320 00:20:03,250 --> 00:20:08,220 yang boleh melakukan lebih canggih mutasi data anda. 321 00:20:08,220 --> 00:20:11,640 Sebarang pertanyaan kemudian di atas pokok, pokok-pokok perduaan, atau pemampatan teks? 322 00:20:11,640 --> 00:20:15,590 [Pelajar] Adakah terdapat beberapa kekaburan, seperti jika [didengar] berpecah ke 01, 323 00:20:15,590 --> 00:20:19,160 maka 011 akan menjadi samar-samar, betul-betul? 324 00:20:19,160 --> 00:20:22,730 [Didengar] >> Soalan yang bagus. Kekaburan. 325 00:20:22,730 --> 00:20:25,940 Biar saya ringkaskan dengan merujuk kepada gambar ini di sini. 326 00:20:25,940 --> 00:20:29,650 Kerana watak-watak anda memampatkan, perwakilan, 327 00:20:29,650 --> 00:20:32,850 oleh definisi algoritma ini sentiasa kekal daun, 328 00:20:32,850 --> 00:20:41,870 anda akan tidak pernah sengaja menggunakan corak yang sama bit untuk awalan huruf berganda. 329 00:20:41,870 --> 00:20:46,740 Jadi dalam erti kata lain, anda bimbang tentang, ia kedengaran seperti, kekaburan yang timbul 330 00:20:46,740 --> 00:20:51,580 mana 001 mungkin menjadi permulaan B atau permulaan C atau sesuatu seperti itu. 331 00:20:51,580 --> 00:20:56,780 Tetapi itu tidak boleh menjadi kes kerana notis bahawa semua huruf abjad kita pengekodan 332 00:20:56,780 --> 00:20:58,290 pada daun. 333 00:20:58,290 --> 00:21:01,910 >> Kekaburan hanya boleh timbul, seperti dalam kes kod Morse, 334 00:21:01,910 --> 00:21:06,770 jika, misalnya, C tempat di sepanjang jalan dari akar ke B. 335 00:21:06,770 --> 00:21:12,290 [Pelajar] Hak. Jadi, dalam kes itu, mengatakan A mempunyai 2 daun. >> Katakanlah A mempunyai - Katakanlah bahawa sekali lagi. 336 00:21:12,290 --> 00:21:18,760 [Pelajar] Katakanlah A mempunyai 2 daun, F dan G, dan kemudian G - >> Okay. Tetapi ia tidak boleh. 337 00:21:18,760 --> 00:21:23,230 A sendiri tidak boleh mempunyai F daun dan G kerana mereka huruf F dan G 338 00:21:23,230 --> 00:21:27,560 diri mereka akan meninggalkan tempat ke kiri B atau hak E. 339 00:21:27,560 --> 00:21:28,900 Jadi, mengikut definisi, mereka mesti daun. 340 00:21:28,900 --> 00:21:32,940 Jika tidak, anda sebenarnya betul, kita telah tidak menyelesaikan masalah bahawa kod Morse menghadapi. 341 00:21:32,940 --> 00:21:38,150 Soalan yang baik. Soalan-soalan lain? Semua hak. 342 00:21:38,150 --> 00:21:42,050 Ini tanggapan bit, ternyata kita telah mempunyai kuasa sepanjang yang kita telah tidak sebenarnya digunakan 343 00:21:42,050 --> 00:21:44,200 apabila ia datang untuk memanipulasi ini 0s dan 1s. 344 00:21:44,200 --> 00:21:46,600 Kami bertanya tentang perkara ini pada satu set masalah terawal: 345 00:21:46,600 --> 00:21:52,340 iaitu, bagaimana anda pergi tentang menukar huruf besar kepada huruf kecil atau sebaliknya? 346 00:21:52,340 --> 00:21:55,460 Atau, lebih kukuh, salah mereka psets pertama bertanya 347 00:21:55,460 --> 00:22:01,090 berapa banyak bit anda sebenarnya perlu flip untuk menukar huruf kecil atau sebaliknya? 348 00:22:01,090 --> 00:22:05,580 Berikut adalah peringatan cepat apa yang 65 dan 97 kelihatan seperti dalam perduaan. 349 00:22:05,580 --> 00:22:08,060 Dan walaupun soalan yang jenis pudar dalam ingatan anda, 350 00:22:08,060 --> 00:22:11,290 anda boleh lihat sekali lagi di sini bahawa berapa banyak bit perlu dibalik 351 00:22:11,290 --> 00:22:15,810 untuk menukar modal kepada huruf kecil? Hanya satu. 352 00:22:15,810 --> 00:22:19,650 >> Mereka hanya berbeza dalam satu lokasi, sedikit ketiga dari kiri. 353 00:22:19,650 --> 00:22:24,240 Manakala A mempunyai 010, sedikit mempunyai 011. 354 00:22:24,240 --> 00:22:26,250 Jadi, entah bagaimana, kita perlu hanya dapat flip sedikit bahawa, 355 00:22:26,250 --> 00:22:29,410 dan kita kemudian boleh mengambil kesempatan atau huruf kecil. 356 00:22:29,410 --> 00:22:32,720 Kami telah melakukan ini pada masa lalu dengan sebenarnya menggunakan jika keadaan 357 00:22:32,720 --> 00:22:35,930 dan memeriksa jika surat itu adalah antara modal A dan modal Z, 358 00:22:35,930 --> 00:22:41,480 maka output seperti A - a + 26 atau sesuatu seperti itu. 359 00:22:41,480 --> 00:22:46,130 Anda mungkin melakukan perubahan aritmetik kepada huruf abjad. 360 00:22:46,130 --> 00:22:49,270 Tetapi bagaimana jika kita hanya boleh flip bahawa bit tunggal? 361 00:22:49,270 --> 00:22:59,080 Bagaimana anda boleh pergi tentang mengambil bernilai satu bait bit, jadi 8 bit seperti 01000001 dan 01100001? 362 00:22:59,080 --> 00:23:03,170 Jika anda mempunyai mereka corak bit, bagaimana kita boleh pergi mengenai perubahan hanya salah seorang daripada mereka? 363 00:23:03,170 --> 00:23:07,610 Bagaimana jika kita memperkenalkan kuning di sini ini corak lain bit? 364 00:23:07,610 --> 00:23:13,420 Jika saya membuat keseluruhan rentetan 0s kuning kecuali untuk satu bit yang saya mahu menukar 365 00:23:13,420 --> 00:23:17,900 dan kemudian saya memperkenalkan operator baru yang dikenali sebagai pengendali bitwise - 366 00:23:17,900 --> 00:23:21,210 Bitwise dalam erti kata bahawa ia beroperasi pada bit individu, 367 00:23:21,210 --> 00:23:25,360 bukan pada bait keseluruhan atau empat bait semua sekali gus. 368 00:23:25,360 --> 00:23:31,170 Ini bar menegak terdapat dalam kuning menunjukkan bahawa apa yang jika kita mengambil perwakilan modal 369 00:23:31,170 --> 00:23:37,060 dan bitwise ATAU dengan urutan kuning bit? 370 00:23:37,060 --> 00:23:41,300 Dalam erti kata lain, berfikir kembali kepada perbincangan kita ungkapan Boolean dalam Gores dan kemudian di C. 371 00:23:41,300 --> 00:23:47,520 >> Melakukan Boolean atau bermakna bahawa ia adalah benar, sama ada perkara pertama yang mempunyai untuk menjadi kenyataan 372 00:23:47,520 --> 00:23:50,700 atau perkara yang kedua untuk menjadi kenyataan atau kedua-duanya mempunyai untuk menjadi kenyataan, 373 00:23:50,700 --> 00:23:53,270 dan kemudian output yang terhasil adalah dirinya benar. 374 00:23:53,270 --> 00:24:00,230 Dalam kes ini di sini, apa yang kita akan mendapat jika kita mengambil 0 "atau" ed dengan 0? Palsu atau palsu? 375 00:24:00,230 --> 00:24:04,280 Ia masih palsu, jadi huruf kecil a kekal seperti yang diharapkan. 376 00:24:04,280 --> 00:24:07,540 Bagaimana jika sebaliknya kita lakukan 1 atau 0? 377 00:24:07,540 --> 00:24:12,640 Ini kini kekal 1, tetapi notis apa yang kira-kira untuk berlaku di sini. 378 00:24:12,640 --> 00:24:18,630 Jika kita mula dengan modal A dan kita terus "atau" bit individu seperti yang kita lakukan di sini, 379 00:24:18,630 --> 00:24:25,180 0 atau satu kuning memberikan kita apa yang turun di sini? Ini memberikan kita 1. 380 00:24:25,180 --> 00:24:35,120 Malah, andaikan kita tidak tahu apa versi huruf besar sedikit sebenarnya. 381 00:24:35,120 --> 00:24:38,270 Mari kita pergi melakukan ini. Biar saya bergerak ke belakang ini di sini. 382 00:24:38,270 --> 00:24:42,340 Mari kita buat ini lagi. 0 atau 0 memberikan saya 0. 383 00:24:42,340 --> 00:24:45,020 1 atau 0 memberi saya 1. 384 00:24:45,020 --> 00:24:48,020 0 atau 1 memberikan saya 1. 385 00:24:48,020 --> 00:24:52,880 0 atau 0 memberikan saya 0. Yang seterusnya adalah 0, yang seterusnya adalah 0, yang seterusnya adalah 0. 386 00:24:52,880 --> 00:24:55,660 1 atau 0 memberi saya 1. 387 00:24:55,660 --> 00:24:59,140 Dan sebagainya walaupun kita tidak tahu terlebih dahulu apa huruf kecil a adalah, 388 00:24:59,140 --> 00:25:04,770 hanya dengan "atau" ing dengan corak bit yang kita telah dibentangkan di sini kuning ini, 389 00:25:04,770 --> 00:25:09,400 anda boleh huruf kecil modal oleh Melibas sedikit yang. 390 00:25:09,400 --> 00:25:11,580 Kami menggunakan ini minggu ungkapan yang lalu: Melibas sedikit. 391 00:25:11,580 --> 00:25:13,710 Bagaimana anda sebenarnya melakukan programatik? 392 00:25:13,710 --> 00:25:16,390 Anda menggunakan apa yang biasanya dipanggil topeng, satu turutan bit, 393 00:25:16,390 --> 00:25:19,980 bahawa dalam kes ini hanya kebetulan kelihatan seperti nombor ini di sini, 394 00:25:19,980 --> 00:25:22,980 dan kemudian anda "atau" bersama-sama menggunakan ini pengendali C baru, 395 00:25:22,980 --> 00:25:29,940 tidak | |, anda menggunakan satu | dan anda sebenarnya akan mendapat jawapan ini di sini kerana mengapa? 396 00:25:29,940 --> 00:25:35,120 Ini adalah tempat 1s, tempat 2s, 4s, 8s, 16, 32S. 397 00:25:35,120 --> 00:25:42,280 Jadi ia ternyata bahawa jika anda mengambil surat modal A dan bitwise ATAU dengan 32 integer, 398 00:25:42,280 --> 00:25:47,520 kerana 32 integer, apabila anda melihat ia sebagai bit, kelihatan seperti ini, 399 00:25:47,520 --> 00:25:50,860 yang bermakna anda boleh flip sedikit yang anda benar-benar mahu. 400 00:25:50,860 --> 00:25:52,630 Dan begitu juga - dan kita akan melihat kod dalam hanya seketika - 401 00:25:52,630 --> 00:25:54,210 andaikan kita mahu pergi ke arah lain. 402 00:25:54,210 --> 00:25:58,210 >> Bagaimana anda pergi dari modal kecil kepada A? Yang sedikit keperluan untuk berubah? 403 00:25:58,210 --> 00:25:59,820 Ia adalah satu-sama. 404 00:25:59,820 --> 00:26:03,970 Kami mahu menukar bahawa sedikit ketiga daripada 1 0 a. 405 00:26:03,970 --> 00:26:06,310 Dan bagaimana kita boleh pergi tentang melakukan ini? 406 00:26:06,310 --> 00:26:10,130 Bagaimana kita mematikan sedikit? Dengan apa corak bit kita boleh mematikan sedikit? 407 00:26:11,580 --> 00:26:14,070 Bagaimana jika kita jenis terbalikkan topeng? 408 00:26:14,070 --> 00:26:17,350 Sedangkan sebelum ini, kami membuat 0s topeng kuning keseluruhan 409 00:26:17,350 --> 00:26:19,930 kecuali untuk satu bit yang kita mahu untuk menghidupkan, 410 00:26:19,930 --> 00:26:25,580 bagaimana jika masa ini, kami membuat 1s topeng keseluruhan kecuali sedikit yang kita mahu mematikan 411 00:26:25,580 --> 00:26:28,330 dan kemudian menggunakan apa pengendali? 412 00:26:28,330 --> 00:26:30,560 Bagaimana jika kita "dan" perkara-perkara? Mari kita lihat. 413 00:26:30,560 --> 00:26:34,880 Jika kita kini flip ini, andaikan bahawa sekali lagi saya mencipta topeng yang 1s semua 414 00:26:34,880 --> 00:26:37,650 kecuali untuk sedikit satu yang saya mahu mematikan 415 00:26:37,650 --> 00:26:43,860 dan kemudian bukannya "atau" nombor putih sehingga atas dengan nombor kuning turun di sini, 416 00:26:43,860 --> 00:26:46,940 bagaimana jika saya bukannya "dan" mereka bersama-sama? Ia dipanggil bitwise. 417 00:26:46,940 --> 00:26:49,450 Secara logiknya, ia adalah perkara yang sama sebagai Boolean dan. 418 00:26:49,450 --> 00:26:55,160 Ini memberikan saya 0 & 1 adalah 0. Jadi palsu dan benar adalah palsu. 419 00:26:55,160 --> 00:26:58,160 Benar dan benar adalah benar. 420 00:26:58,160 --> 00:27:04,020 Dan di sini adalah ajaib: Benar dan palsu kini palsu, jadi kami telah dimatikan sedikit yang. 421 00:27:04,020 --> 00:27:06,560 Dan kini seluruh cerita ini adalah agak mudah. 422 00:27:06,560 --> 00:27:11,970 Kerana seluruh topeng 1s, ia tidak kira apa nombor berwarna putih. 423 00:27:11,970 --> 00:27:15,580 Apabila anda "dan" sesuatu dengan benar, anda tidak akan menukar nilainya. 424 00:27:15,580 --> 00:27:20,200 Jika ia adalah benar, ia akan kekal benar. Jika ia adalah palsu, ia akan kekal palsu. 425 00:27:20,200 --> 00:27:23,190 >> Tetapi keajaiban berlaku apabila anda mengambil sesuatu yang benar 426 00:27:23,190 --> 00:27:25,430 dan anda kemudian "dan" ia dengan palsu. 427 00:27:25,430 --> 00:27:30,030 Ini mempunyai kesan mematikan sedikit yang. 428 00:27:30,030 --> 00:27:31,980 Jadi samar sedikit di sana. 429 00:27:31,980 --> 00:27:35,390 Mari kita sebenarnya melihat beberapa kod, yang sebenarnya mungkin kelihatan lebih samar, 430 00:27:35,390 --> 00:27:38,220 tetapi mari kita lihat di sini di tolower. 431 00:27:38,220 --> 00:27:45,880 Jika saya melihat di tolower, pergi dari modal kepada huruf kecil, 432 00:27:45,880 --> 00:27:47,730 mari kita lihat bagaimana kita boleh melaksanakan program ini. 433 00:27:47,730 --> 00:27:51,280 Berikut adalah utama, dan ia tidak mengambil apa-apa hujah baris arahan. 434 00:27:51,280 --> 00:27:55,980 Saya mengisytiharkan c aksara untuk surat itu bahawa pengguna akan menaip masuk 435 00:27:55,980 --> 00:28:00,690 Saya kemudian menggunakan do biasa gelung while hanya pastikan bahawa pengguna pasti memberikan saya modal 436 00:28:00,690 --> 00:28:05,010 atau B atau C. .. Z, jadi mereka memberi saya sesuatu antara A dan Z. 437 00:28:05,010 --> 00:28:08,580 Dan kini apa yang saya lakukan di sini? 438 00:28:08,580 --> 00:28:14,870 Saya "atau" ing ini dengan 0x20, tetapi itulah sebenarnya sama seperti - 439 00:28:14,870 --> 00:28:19,500 dan kita akan kembali ini dalam seketika - 32. 440 00:28:19,500 --> 00:28:24,830 Jadi sekali lagi, 32 adalah corak bit di sini. Mengapa kita tahu ini? 441 00:28:24,830 --> 00:28:26,320 Cuba fikirkan kembali ke 0 minggu. 442 00:28:26,320 --> 00:28:31,010 Ini adalah tempat 1s, tempat 2s, 4s, 8s, 16, tempat 32S. 443 00:28:31,010 --> 00:28:33,470 Jadi nombor ini kuning berlaku untuk menjadi 32. 444 00:28:33,470 --> 00:28:40,570 Saya kemudian boleh mengambil surat seperti char di sini, bitwise "atau" ia dengan literal bilangan 32, 445 00:28:40,570 --> 00:28:45,250 dan apa yang saya boleh mendapatkan kembali? Versi kecil itu char. 446 00:28:45,250 --> 00:28:48,830 Sebentar lalu, walaupun, saya menyatakan ini dalam notasi asas berbeza. 447 00:28:48,830 --> 00:28:51,370 Apa ini mewakili? >> [Pelajar] Perenambelasan. 448 00:28:51,370 --> 00:28:53,050 [Malan] Ini berlaku untuk mewakili perenambelasan. 449 00:28:53,050 --> 00:28:55,170 Kami tidak bercakap tentang perenambelasan semua yang banyak, 450 00:28:55,170 --> 00:28:57,330 tetapi ia sebenarnya mudah dalam kes-kes seperti ini. 451 00:28:57,330 --> 00:29:01,730 >> Walaupun ia kelihatan lebih kompleks dan walaupun ia kelihatan seperti 20 dan tidak 32, 452 00:29:01,730 --> 00:29:06,240 ia ternyata bahawa perenambelasan sebenarnya notasi mudah super 453 00:29:06,240 --> 00:29:10,810 kerana dalam perenambelasan setiap digit selepas 0x - dan ini bermakna apa-apa; 454 00:29:10,810 --> 00:29:13,960 ini adalah konvensyen hanya manusia yang mengatakan bahawa di sini datang nombor perenambelasan - 455 00:29:13,960 --> 00:29:18,590 setiap digit ini, 2 dan kemudian 0, sendiri boleh diwakili 456 00:29:18,590 --> 00:29:20,800 dengan tepat 4 bit. 457 00:29:20,800 --> 00:29:27,840 Jadi, jika kita lakukan ini, izinkan saya membuka editor teks di sini - pelik autoselesai - 458 00:29:27,840 --> 00:29:35,940 jika kita melakukan sedikit editor teks di sini, 0x20 nombor bermakna di sini adalah 4 bit, di sini adalah 4 bit lagi. 459 00:29:35,940 --> 00:29:38,050 Mari kita buat 4 bit paling kanan terlebih dahulu. 460 00:29:38,050 --> 00:29:44,690 0 apabila diwakili dengan 4 bit adalah apa? Super mudah. Hanya 0s semua. 461 00:29:44,690 --> 00:29:46,780 Jadi 4 bit sebagai 0s. 462 00:29:46,780 --> 00:29:53,510 Bagaimanakah anda menunjukkan 2? Sudah seketika sejak kita melakukan ini, tetapi ia adalah 0100. 463 00:29:53,510 --> 00:29:57,310 Jadi ini adalah tempat 1s, ini adalah tempat 2s, dan kemudian ia tidak kira apa tempat-tempat lain. 464 00:29:57,310 --> 00:30:00,610 Dalam erti kata lain, dalam perenambelasan anda mungkin berkata 0x20, 465 00:30:00,610 --> 00:30:04,340 tetapi jika anda kemudian berfikir tentang apa yang adalah 2 dan bagaimana ia diwakili dalam binari, 466 00:30:04,340 --> 00:30:07,130 apa ialah 0 dan bagaimana ia diwakili dalam binari, 467 00:30:07,130 --> 00:30:10,440 jawapan kepada soalan-soalan ini dan ini, masing-masing. 468 00:30:10,440 --> 00:30:14,380 Jadi 0x20 berlaku untuk mewakili corak 8 bit, 469 00:30:14,380 --> 00:30:16,880 yang tepat topeng yang kita mahu. 470 00:30:16,880 --> 00:30:20,140 Jadi ini adalah untuk seketika hanya senaman intelek, 471 00:30:20,140 --> 00:30:24,520 tetapi realitinya adalah dalam kod, ia biasanya lebih biasa untuk menulis pemalar seperti ini 472 00:30:24,520 --> 00:30:28,360 dalam perenambelasan kerana pengaturcara boleh agak mudah, 473 00:30:28,360 --> 00:30:32,560 walaupun ia memerlukan beberapa kertas dan pensil, memikirkan apa yang corak bit 474 00:30:32,560 --> 00:30:35,960 kerana anda tidak boleh hanya meluahkan 0 dan 1s biasanya dalam kod. 475 00:30:35,960 --> 00:30:38,540 Anda tidak boleh pergi 00010 dan sebagainya. 476 00:30:38,540 --> 00:30:42,380 >> Anda perlu memilih catatan perpuluhan atau perenambelasan atau perlapanan atau lain-lain. 477 00:30:42,380 --> 00:30:47,540 Kebanyakan orang cenderung untuk memilih perenambelasan hanya supaya setiap digit mewakili 4 bit 478 00:30:47,540 --> 00:30:49,320 dan anda boleh melakukan ini matematik cepat. 479 00:30:49,320 --> 00:30:54,990 Dan saya akan melambai tangan saya di toupper, yang hampir sama; ia kelihatan hampir sama. 480 00:30:54,990 --> 00:31:01,900 Toupper berlaku menggunakan pengendali atau tetapi lelaki ini dan df. 481 00:31:01,900 --> 00:31:09,300 Apakah df mewakili? df? Sesiapa sahaja? >> [Pelajar] 255. 482 00:31:09,300 --> 00:31:12,780 255? Tidak 255. Yang akan ff. 483 00:31:12,780 --> 00:31:15,210 Kami akan meninggalkan yang satu ini sebagai latihan sedikit. 484 00:31:15,210 --> 00:31:23,460 Tetapi jika anda pergi dari 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 dan kemudian apa yang datang selepas 9? 485 00:31:23,460 --> 00:31:26,510 Kami jenis keluar digit perpuluhan, tetapi dalam perenambelasan apa yang datang selepas 9? 486 00:31:26,510 --> 00:31:29,510 [Pelajar]. >> Jadi, b, c, d. 487 00:31:29,510 --> 00:31:33,470 Anda boleh mengetahui dari sana apa corak bit d sebenarnya mewakili. 488 00:31:33,470 --> 00:31:38,850 Dan jika kita melakukan matematik, kita akan melihat bahawa topeng yang anda akhirnya mendapatkan kembali adalah sama dengan ini. 489 00:31:38,850 --> 00:31:45,580 Ini adalah f, 1s semua, dan ini adalah d. Jadi df mewakili topeng itu. Semua hak. 490 00:31:45,580 --> 00:31:50,980 Dan akhir sekali, untuk tidak membuat perkara bunyi super, super teknikal, 491 00:31:50,980 --> 00:31:53,840 tetapi andaikan kita mahu menulis program yang melakukan ini. 492 00:31:53,840 --> 00:31:58,960 Biar saya pergi ke hadapan dan membuat binari, yang merupakan satu program dalam fail yang dipanggil binary.c. 493 00:31:58,960 --> 00:32:02,050 Dan sekarang mari saya menjalankan binari dan memberi saya integer bukan negatif. 494 00:32:02,050 --> 00:32:03,960 Mari kita mulakan mudah dan jenis dalam 0. 495 00:32:03,960 --> 00:32:09,010 Ini kini merupakan satu program yang mencetak keluar integer dalam perwakilan binari. 496 00:32:09,010 --> 00:32:13,470 Jadi jika saya bermain permainan ini sekali lagi dan menaip hanya 1 saya perlu mendapatkan perwakilan 32-bit 1. 497 00:32:13,470 --> 00:32:15,490 Jika saya melakukan ini lagi dengan 2, saya perlu mendapatkan bahawa. 498 00:32:15,490 --> 00:32:19,310 Jika saya lakukan 7, saya perlu mendapatkan satu 1s beberapa di akhir dan sebagainya. 499 00:32:19,310 --> 00:32:22,740 Ia ternyata Saya sebut ini kerana dengan operasi bitwise 500 00:32:22,740 --> 00:32:25,490 anda sebenarnya boleh melakukan satu perkara lain juga. 501 00:32:25,490 --> 00:32:29,130 Anda boleh membuat topeng ini dinamik. 502 00:32:29,130 --> 00:32:32,800 Ambil melihat satu contoh ini akhir yang melibatkan operasi bitwise. 503 00:32:32,800 --> 00:32:35,490 Berikut adalah bahagian pertama kod, meminta pengguna untuk nombor, 504 00:32:35,490 --> 00:32:38,130 dan ia menegaskan bahawa anda memberi saya satu integer bukan negatif. 505 00:32:38,130 --> 00:32:39,780 Jadi itulah jenis barangan sekolah lama. 506 00:32:39,780 --> 00:32:41,980 Tetapi di sini adalah sesuatu yang jenis yang menarik. 507 00:32:41,980 --> 00:32:44,910 >> Bagaimana saya boleh pergi tentang percetakan nombor dalam binari? 508 00:32:44,910 --> 00:32:48,970 Saya mula-mula melelar dari apa kepada apa? 509 00:32:48,970 --> 00:32:52,270 Apa saiz int biasanya, sekurang-kurangnya dalam perkakas? >> [Pelajar] 4. 510 00:32:52,270 --> 00:32:57,130 Ia adalah 4. Jadi 4 * 8 ialah 32 - 1 adalah 31. 511 00:32:57,130 --> 00:33:02,590 Jadi, jika saya mula mengira dari 31, yang mewakili, ternyata, 512 00:33:02,590 --> 00:33:07,630 hanya konsep, bit 31 atau perintah tertinggi bit, yang lelaki ini di sini, 513 00:33:07,630 --> 00:33:09,650 sedangkan ini akan menjadi 0 bit. 514 00:33:09,650 --> 00:33:12,850 Jadi ini adalah sedikit 01 ... sedikit 31. 515 00:33:12,850 --> 00:33:14,950 Jadi apa kod ini melakukan? 516 00:33:14,950 --> 00:33:20,140 Notis ini untuk gelung, walaupun ia kelihatan samar, hanya iterating dari 31 turun ke 0. Itu sahaja. 517 00:33:20,140 --> 00:33:24,530 Jadi bahagian yang menarik sekarang mesti dalam 5 baris di sini. 518 00:33:24,530 --> 00:33:28,110 Perhatikan bahawa di dalam bidang ini saya mengisytiharkan topeng ubah yang dipanggil 519 00:33:28,110 --> 00:33:30,790 untuk menjadi konsisten dengan cerita kami ini nombor kuning. 520 00:33:30,790 --> 00:33:32,200 Dan kemudian apa ini lakukan? 521 00:33:32,200 --> 00:33:35,720 Ini adalah satu lagi pengendali bitwise kita telah tidak dilihat sebelum ini, yang paling mungkin. 522 00:33:35,720 --> 00:33:38,300 Ia adalah pengendali peralihan kiri. 523 00:33:38,300 --> 00:33:40,060 Operator ini melakukan ini. 524 00:33:40,060 --> 00:33:44,920 Berikut adalah nombor 1, dan jika anda lakukan i meninggalkan anjakan, anjakan kiri, 525 00:33:44,920 --> 00:33:49,260 apa yang anda fikir yang mempunyai kesan melakukan bahawa 1 individu? 526 00:33:49,260 --> 00:33:51,290 Harfiah beralih ia lebih. 527 00:33:51,290 --> 00:33:57,540 Jadi, jika nombor 1 adalah apa yang anda mempunyai di sebelah kiri dan anda bermula dengan Memulakan i hingga 31, 528 00:33:57,540 --> 00:34:03,490 apa yang akan lakukan? Ia akan mengambil nombor 1 ini dan beralih 31 tempat di sini. 529 00:34:03,490 --> 00:34:06,210 Dan kerana terdapat jelas tiada digit lain di belakangnya, 530 00:34:06,210 --> 00:34:10,350 mereka secara lalai akan digantikan dengan 0s. 531 00:34:10,350 --> 00:34:15,120 Jadi, anda akan mula keluar dengan nombor 1, yang sudah tentu kelihatan seperti ini - 532 00:34:15,120 --> 00:34:18,659 dan biarkan saya menarik di sini di tengah-tengah. 533 00:34:18,659 --> 00:34:22,139 Dan kemudian seperti yang anda beralih perkara ke kiri, lelaki ini pada dasarnya pergi cara ini. 534 00:34:22,139 --> 00:34:24,659 Tetapi sebaik sahaja anda berbuat demikian, 0 mendapat diisi 535 00:34:24,659 --> 00:34:28,360 Jika anda beralih masa kedua, ia pergi dengan cara ini dan 0 lain mendapat diisi 536 00:34:28,360 --> 00:34:31,000 >> Anda beralih lagi dan kemudian 0 lain mendapat diisi 537 00:34:31,000 --> 00:34:37,900 Jadi, jika anda melakukan perkara ini 1 << i 31 tempat, anda akhirnya mendapatkan topeng 538 00:34:37,900 --> 00:34:42,550 yang ialah 32 aksara panjang, satu terkiri yang adalah 1, 539 00:34:42,550 --> 00:34:45,199 semua yang lain yang adalah 0. 540 00:34:45,199 --> 00:34:50,880 Dan ternyata, sebagai diketepikan, mengalihkan nombor ke kiri seperti ini 541 00:34:50,880 --> 00:34:53,530 juga secara kebetulan, dan kadang-kadang mudah, 542 00:34:53,530 --> 00:34:57,520 mempunyai kesan melakukan apa ke nombor tersebut? >> [Pelajar] Menggandakan. 543 00:34:57,520 --> 00:35:00,980 Menggandakan kerana setiap tiang - tempat 1s, tempat 2s, tempat 4s, 544 00:35:00,980 --> 00:35:05,030 Tempat 8s, tempat 16 - they're menggandakan semua kerana anda pergi ke kiri. 545 00:35:05,030 --> 00:35:09,500 Atau sebaliknya, apabila anda beralih 1s anda akan berakhir menggandakan nilai nombor. 546 00:35:09,500 --> 00:35:12,070 Anda boleh berakhir sehingga melakukan transformasi menarik digit 547 00:35:12,070 --> 00:35:15,640 dengan mengalihkan segala-galanya dengan cara ini oleh kuasa 2. 548 00:35:15,640 --> 00:35:17,150 Jadi bagaimana ini berfungsi? 549 00:35:17,150 --> 00:35:22,580 Ini kemudian memberikan saya topeng itu semua 0s kecuali untuk 1 dalam tepat tempat yang saya mahu ia, 550 00:35:22,580 --> 00:35:27,920 dan kemudian ini bersuara, yang dicuri dari toupper.c, 551 00:35:27,920 --> 00:35:31,770 hanya mengatakan mengambil nombor n bahawa pengguna ditaip dalam, 552 00:35:31,770 --> 00:35:34,730 "Dan" ia dengan topeng itu, dan apa yang anda akan mendapat? 553 00:35:34,730 --> 00:35:39,200 Anda akan dapatkan 1 jika terdapat adalah 1 di lokasi yang bertopeng, 554 00:35:39,200 --> 00:35:41,570 atau anda pergi untuk mendapatkan 0 jika tidak. 555 00:35:41,570 --> 00:35:44,370 Dan supaya semua program ini tidak berkesan adalah ia mempunyai gelung, 556 00:35:44,370 --> 00:35:48,340 dan ia mencipta topeng dengan 1 di sini, maka a 1 di sini, maka 1 di sini, 557 00:35:48,340 --> 00:35:52,950 dan ia menggunakan ini bitwise DAN helah untuk mengatakan terdapat sedikit 1 dalam input pengguna di sini? 558 00:35:52,950 --> 00:35:59,220 >> Adakah terdapat sedikit 1 dalam input pengguna di sini? Dan jika demikian, secara literal mencetak 1, lain mencetak 0. 559 00:35:59,220 --> 00:36:03,780 Kami melakukan ini dengan ints hanya kerana itulah mengapa kita lakukan 32 bit dan bukannya daripada 8, 560 00:36:03,780 --> 00:36:06,900 tetapi apa yang kita telah memperkenalkan maka ini bitwise DAN, bitwise ini ATAU, 561 00:36:06,900 --> 00:36:10,450 dan ini anjakan pengendali kiri, yang tidak sering sangat membantu, 562 00:36:10,450 --> 00:36:12,230 tetapi ternyata mereka boleh. 563 00:36:12,230 --> 00:36:16,560 Malah, jika anda adalah untuk mewakili sesuatu seperti pelbagai Booleans 564 00:36:16,560 --> 00:36:21,260 hanya untuk mewakili benar atau palsu, andaikan anda mahu untuk mengesan sama ada atau tidak 565 00:36:21,260 --> 00:36:24,630 bilik penuh dengan 300 orang pelajar hadir, 566 00:36:24,630 --> 00:36:29,420 anda boleh mengisytiharkan pelbagai 300 jenis saiz bool supaya anda mendapat 300 bools, 567 00:36:29,420 --> 00:36:33,090 dan anda boleh menetapkan setiap benar jika seseorang itu di sini dan palsu sebaliknya. 568 00:36:33,090 --> 00:36:37,550 Mengapa bahawa perwakilan dalam struktur data yang tidak cekap? 569 00:36:39,370 --> 00:36:44,800 Apa yang buruk tentang reka bentuk struktur data itu, pelbagai sebanyak 300 bools? 570 00:36:46,190 --> 00:36:49,600 Apakah bool, pada hakikatnya, di bawah hood? 571 00:36:49,600 --> 00:36:52,310 Ini juga, adalah sesuatu yang tidak mungkin menjadi biasa. 572 00:36:52,310 --> 00:36:53,720 Ia ternyata tiada bool. 573 00:36:53,720 --> 00:36:56,620 Ingat kita jenis yang dicipta dengan fail cs50.h, 574 00:36:56,620 --> 00:36:58,630 yang mana ia sendiri termasuk standard bool. 575 00:36:58,630 --> 00:37:00,930 C adalah jenis bodoh, walaupun, apabila ia datang kepada bool. 576 00:37:00,930 --> 00:37:04,880 Ia menggunakan 8 bit untuk mewakili setiap bool, yang benar-benar membazir 577 00:37:04,880 --> 00:37:09,040 kerana jelas, berapa banyak bit yang anda perlukan untuk mewakili bool? Hanya 1. 578 00:37:09,040 --> 00:37:13,190 Jadi ia ternyata bahawa jika anda kini mempunyai keupayaan dengan pengendali bitwise 579 00:37:13,190 --> 00:37:17,760 untuk memanipulasi bit individu walaupun dalam char, walaupun dalam bait tunggal, 580 00:37:17,760 --> 00:37:21,380 ternyata anda boleh mengurangkan memori yang diperlukan untuk mewakili sesuatu yang bodoh 581 00:37:21,380 --> 00:37:25,490 seperti bahawa struktur data kehadiran gaya oleh faktor 8. 582 00:37:25,490 --> 00:37:29,820 Sebaliknya menggunakan lapan bit untuk mewakili benar atau palsu, anda benar-benar boleh menggunakan salah satu 583 00:37:29,820 --> 00:37:34,500 dengan menggunakan satu bait tunggal bagi setiap lapan pelajar di dalam kelas 584 00:37:34,500 --> 00:37:41,990 dan menogol 0-1 bit individu dengan menggunakan pelbagai helah tahap rendah. 585 00:37:43,850 --> 00:37:49,460 Yang benar-benar meletakkan akhir untuk tenaga. Adakah terdapat apa-apa soalan mengenai operasi bitwise? 586 00:37:49,460 --> 00:37:52,710 >> Yeah. >> [Pelajar] Adakah terdapat pengendali eksklusif atau? 587 00:37:52,710 --> 00:37:56,440 Ya. Terdapat pengendali eksklusif atau yang kelihatan seperti ini, ^, simbol lobak merah, 588 00:37:56,440 --> 00:38:02,070 yang bermaksud sahaja perkara pertama atau perkara kedua boleh menjadi 1 untuk output untuk menjadi 1. 589 00:38:02,070 --> 00:38:07,750 Terdapat juga tidak, ~, yang akan membolehkan anda untuk terbalikkan 0 hingga begitulah 1 atau naib serta. 590 00:38:07,750 --> 00:38:11,600 Dan terdapat juga pengendali anjakan yang betul, >>, yang bertentangan satu yang kita lihat. 591 00:38:11,600 --> 00:38:13,850 Semua hak. Mari kita mengambil perkara sekarang ke tahap yang lebih tinggi. 592 00:38:13,850 --> 00:38:16,770 Kami bermula dengan bercakap tentang teks dan kemudian memampatkan ia 593 00:38:16,770 --> 00:38:19,650 dan mewakili teks dengan nombor kurang bit; 594 00:38:19,650 --> 00:38:22,890 kita bercakap sedikit tentang bagaimana kita kini boleh mula memanipulasi perkara di peringkat bitwise. 595 00:38:22,890 --> 00:38:26,640 Mari kita sekarang mengezum kembali sehingga 10,000 kaki untuk perwakilan 596 00:38:26,640 --> 00:38:29,250 perkara-perkara seperti grafik yang lebih kompleks. 597 00:38:29,250 --> 00:38:32,950 Di sini kita mempunyai bendera Jerman, di sini kita mempunyai salah satu daripada Perancis. 598 00:38:32,950 --> 00:38:36,350 Ini mungkin diwakili dalam format fail yang anda mungkin tahu - GIF, misalnya. 599 00:38:36,350 --> 00:38:40,030 Jika anda pernah melihat imej pada web yang berakhir dengan. Gif, 600 00:38:40,030 --> 00:38:43,000 ini adalah format grafik pertukaran. 601 00:38:43,000 --> 00:38:47,530 Kedua-dua bendera sini jenis meminjamkan diri kepada mampatan 602 00:38:47,530 --> 00:38:52,050 untuk apa yang mungkin jelas sebab? >> [Sambutan pelajar didengar] 603 00:38:52,050 --> 00:38:53,440 Terdapat banyak pengulangan, bukan? 604 00:38:53,440 --> 00:38:57,270 Untuk menghantar bendera Jerman, berfikir ini sebagai imej pada skrin 605 00:38:57,270 --> 00:38:59,030 kembali di hari Gores anda. 606 00:38:59,030 --> 00:39:02,380 Anda mungkin ingat bahawa terdapat piksel individu atau titik yang mengarang imej. 607 00:39:02,380 --> 00:39:06,650 >> Terdapat deretan keseluruhan titik hitam dan satu lagi barisan keseluruhan titik hitam. 608 00:39:06,650 --> 00:39:10,110 Ada sekumpulan baris titik hitam yang kita boleh lihat jika kita benar-benar dizum dalam, 609 00:39:10,110 --> 00:39:13,370 sama seperti apabila kita dizum di atas muka Rob dalam Photoshop. 610 00:39:13,370 --> 00:39:15,500 Sebaik sahaja kita mendapat lebih mendalam dan lebih mendalam dan jauh ke dalam imej, 611 00:39:15,500 --> 00:39:19,990 anda mula melihat bintik-bintik, semua dataran yang terdiri matanya dalam kes itu. 612 00:39:19,990 --> 00:39:24,130 Perjanjian yang sama di sini. Jika kita dizum dalam agak sedikit, anda akan melihat titik individu. 613 00:39:24,130 --> 00:39:27,110 Nah, ini adalah jenis sisa bit. 614 00:39:27,110 --> 00:39:32,120 Jika satu pertiga daripada bendera hitam dan satu pertiga daripada bendera kuning dan sebagainya, 615 00:39:32,120 --> 00:39:34,860 mengapa kita tidak boleh entah bagaimana memampatkan bendera ini? 616 00:39:34,860 --> 00:39:39,560 Dan walaupun bendera Perancis boleh dimampatkan walaupun corak adalah sedikit berbeza. 617 00:39:39,560 --> 00:39:44,120 Ia ternyata format fail GIF adalah format mampatan Lossless, 618 00:39:44,120 --> 00:39:48,420 yang bermakna anda boleh mengambil imej seperti bendera Jerman di sini, 619 00:39:48,420 --> 00:39:53,540 anda boleh buang banyak bit tanpa mengorbankan kualiti. 620 00:39:53,540 --> 00:39:55,340 Ini adalah berbeza untuk sesuatu seperti JPEG, 621 00:39:55,340 --> 00:39:57,050 dengan yang kebanyakan kita mungkin lebih biasa. 622 00:39:57,050 --> 00:39:59,000 Facebook gambar dan foto Flickr dan sebagainya 623 00:39:59,000 --> 00:40:02,200 hampir sentiasa disimpan sebagai JPEG apabila mereka naik, 624 00:40:02,200 --> 00:40:08,100 tetapi JPEG adalah lossy format di mana anda tidak buang bit - lossy 625 00:40:08,100 --> 00:40:10,430 tetapi anda juga buang kualiti. 626 00:40:10,430 --> 00:40:13,890 Dan jadi jika anda memampatkan gambar dengan Photoshop atau mereka naik ke Facebook 627 00:40:13,890 --> 00:40:15,580 atau mengambil mereka pada telefon yang benar-benar buruk sekali, 628 00:40:15,580 --> 00:40:19,510 anda tahu bahawa gambar bermula untuk mendapatkan sangat Bernoda dan pixelated, 629 00:40:19,510 --> 00:40:22,290 dan itu kerana ia sedang dimampatkan oleh komputer atau telefon 630 00:40:22,290 --> 00:40:24,550 dengan literal membaling maklumat jauhnya. 631 00:40:24,550 --> 00:40:28,500 Tetapi GIF adalah menakjubkan dalam bahawa ia boleh menggunakan kurang bit daripada ia mungkin secara lalai 632 00:40:28,500 --> 00:40:30,750 tanpa kehilangan apa-apa maklumat. 633 00:40:30,750 --> 00:40:32,410 >> Dan ia pada dasarnya tidak begitu seperti berikut. 634 00:40:32,410 --> 00:40:38,740 Bukannya simpan dalam fail seperti BMP akan triple RGB untuk hitam, hitam, hitam, hitam, 635 00:40:38,740 --> 00:40:42,570 hitam, hitam, hitam, hitam, hitam, hitam, hitam, hitam dan sebagainya, 636 00:40:42,570 --> 00:40:45,640 sebaliknya, format GIF akan mengatakan, "Hitam" 637 00:40:45,640 --> 00:40:48,330 dan kemudian, "Ulangi ini 100 kali," atau sesuatu seperti itu. 638 00:40:48,330 --> 00:40:52,280 "Black, ulangi ini 100 kali, hitam, mengulangi ini 100 kali ..." 639 00:40:52,280 --> 00:40:54,530 "Kuning, mengulangi ini 100 kali." 640 00:40:54,530 --> 00:40:57,200 Dan supaya ia ingat, pada asasnya, piksel terkiri 641 00:40:57,200 --> 00:41:02,160 dan kemudian mengekod entah bagaimana tanggapan mengulangi bahawa piksel lagi dan lagi. 642 00:41:02,160 --> 00:41:06,110 Jadi GIF maka boleh memampatkan diri tanpa kehilangan apa-apa maklumat. 643 00:41:06,110 --> 00:41:09,510 Tetapi jika anda terpaksa untuk meneka, jika itu adalah algoritma bahawa gifs penggunaan, 644 00:41:09,510 --> 00:41:13,180 yang ini bendera, walaupun mereka kelihatan serupa dalam saiz, 645 00:41:13,180 --> 00:41:19,620 akan menjadi lebih kecil apabila disimpan pada cakera sebagai GIF? >> [Pelajar] Jerman. 646 00:41:19,620 --> 00:41:21,660 Jerman akan menjadi lebih kecil? Mengapa? 647 00:41:21,660 --> 00:41:26,620 [Pelajar] Kerana anda mengulangi ia banyak, banyak kali melintang 648 00:41:26,620 --> 00:41:29,010 dan kemudian anda mengulangi masa yang lain. >> Tepat sekali. 649 00:41:29,010 --> 00:41:32,020 Kerana orang-orang yang mencipta GIF hanya jenis sewenang-wenangnya memutuskan 650 00:41:32,020 --> 00:41:36,040 bahawa pengulangan akan dimanfaatkan mendatar dan tidak sisi. 651 00:41:36,040 --> 00:41:40,900 Ada pengulangan banyak sisi sini dalam bendera Jerman berbanding dengan bendera Perancis. 652 00:41:40,900 --> 00:41:44,430 Jadi, jika kita benar-benar membuka folder pada cakera keras saya yang ini mempunyai GIF, 653 00:41:44,430 --> 00:41:51,920 anda sebenarnya boleh melihat bahawa bendera Jerman di sini adalah 2 kilobytes dan satu Perancis adalah 4 kilobait. 654 00:41:51,920 --> 00:41:54,080 Ia berlaku untuk menjadi kebetulan bahawa salah satu adalah dua kali ganda lain, 655 00:41:54,080 --> 00:41:57,960 tetapi ia sebenarnya kes bahawa bendera Perancis adalah lebih besar. 656 00:41:57,960 --> 00:42:01,250 >> Walaupun kita sedang bercakap di sini tentang grafik, idea-idea yang sama boleh memohon kepada 657 00:42:01,250 --> 00:42:05,150 tidak perkara-perkara seperti bendera tetapi imej yang sedikit lebih kompleks. 658 00:42:05,150 --> 00:42:08,170 Jika anda mengambil gambar epal, sudah tentu terdapat banyak pertindihan di sana, 659 00:42:08,170 --> 00:42:11,040 jadi kita entah bagaimana boleh ingat bahawa latar belakang lalai adalah biru 660 00:42:11,040 --> 00:42:13,230 dan tidak, sebagai gambar kanan mencadangkan, 661 00:42:13,230 --> 00:42:16,830 perlu ingat warna setiap piksel tunggal dalam gambar ini. 662 00:42:16,830 --> 00:42:21,060 Jadi kita boleh membuang bit jauh sana tanpa kehilangan maklumat. 663 00:42:21,060 --> 00:42:23,340 Epal masih kelihatan sama saja. 664 00:42:23,340 --> 00:42:27,510 Dalam contoh ini di sini, anda mungkin melihat apa yang berlaku dalam filem. 665 00:42:27,510 --> 00:42:31,970 Ini mewakili gulungan filem lama-sekolah di mana dalam imej atas di sana 666 00:42:31,970 --> 00:42:36,900 anda perlu memandu RV lalu sebuah rumah dan pokok. 667 00:42:36,900 --> 00:42:42,130 Dan seperti van memandu lalu dari kiri ke kanan, apa yang jelas tidak berubah? 668 00:42:42,130 --> 00:42:45,320 Rumah ini tidak akan mana-mana, dan pokok itu tidak akan ke mana-mana. 669 00:42:45,320 --> 00:42:47,700 Satu-satunya perkara yang bergerak adalah van dalam kes ini. 670 00:42:47,700 --> 00:42:51,650 Jadi, sebagai latar belakang Berubah mencadangkan, apa yang anda boleh lakukan dalam filem 671 00:42:51,650 --> 00:42:56,530 sama hanya buang maklumat yang tidak berubah di antara bingkai. 672 00:42:56,530 --> 00:42:58,900 Ini secara amnya dikenali sebagai pemampatan interframe 673 00:42:58,900 --> 00:43:02,120 di mana jika bingkai ini kelihatan hampir sama dengan yang satu ini, 674 00:43:02,120 --> 00:43:05,390 mari kita tidak bersusah payah menyimpan pada cakera mana-mana maklumat yang sama 675 00:43:05,390 --> 00:43:09,250 atas bingkai perantaraan, mari kita hanya menggunakan bingkai utama sekali-sekala 676 00:43:09,250 --> 00:43:13,420 yang sebenarnya menyimpan bahawa maklumat redundantly hanya sebagai kewarasan sedikit memeriksa. 677 00:43:13,420 --> 00:43:18,620 >> Sebaliknya, satu lagi pendekatan untuk memampatkan video dalam contoh kedua ini dan lebih rendah di sini, 678 00:43:18,620 --> 00:43:23,970 mana bukannya kedai 30 bingkai, mengapa tidak anda hanya menyimpan 15 bingkai sesaat sebaliknya? 679 00:43:23,970 --> 00:43:27,070 Bukannya jenis filem mengalir indah, sempurna, 680 00:43:27,070 --> 00:43:30,060 ia mungkin kelihatan seperti ia gagap sedikit, sekolah lama sedikit, 681 00:43:30,060 --> 00:43:37,190 tetapi kesan bersih akan menggunakan bit jauh kurang daripada sebaliknya mungkin perlu. 682 00:43:37,190 --> 00:43:39,240 Jadi di mana tidak ini kemudian meninggalkan kita? 683 00:43:39,240 --> 00:43:41,700 Itu adalah sedikit mengetepikan mana lagi anda boleh pergi dengan pemampatan. 684 00:43:41,700 --> 00:43:45,140 Untuk maklumat lanjut mengenai itu, mengambil kelas seperti CS175 sini. 685 00:43:45,140 --> 00:43:46,990 Berikut adalah satu lagi contoh dalam video. 686 00:43:46,990 --> 00:43:49,190 Jika lebah adalah satu-satunya bergerak, 687 00:43:49,190 --> 00:43:51,790 anda benar-benar boleh buang maklumat dalam orang-orang bingkai pertengahan 688 00:43:51,790 --> 00:43:55,260 kerana bunga dan langit dan daun tidak berubah. 689 00:43:55,260 --> 00:43:57,960 Tetapi mari kita kini mempertimbangkan satu perkara terakhir. 690 00:43:57,960 --> 00:44:03,890 Dalam 5 minit akan datang kita meninggalkan C di belakang selama-lamanya dalam kuliah? Ya. Tidak di psets, walaupun. 691 00:44:03,890 --> 00:44:10,210 Cerita lepas kira-kira C dan kemudian kita mendapatkan barangan sangat seksi 692 00:44:10,210 --> 00:44:13,870 melibatkan HTML dan Web dan woo-hoo. Semua hak. 693 00:44:13,870 --> 00:44:16,050 Di sini kita pergi. Itulah motivasi. 694 00:44:16,050 --> 00:44:20,020 Ia ternyata semua kali ini apabila kita telah menulis program kami menjalankan dilafaz. 695 00:44:20,020 --> 00:44:23,890 Dan dilafaz, kita telah dikatakan sejak minggu pertama cukup banyak, mengambil kod sumber 696 00:44:23,890 --> 00:44:25,740 dan menukarkan ia ke dalam kod objek. 697 00:44:25,740 --> 00:44:28,540 Ia mengambil masa C dan menukarkan ia ke 0 dan 1s. 698 00:44:28,540 --> 00:44:32,150 Saya jenis telah berbohong kepada anda untuk beberapa minggu kerana ia tidak cukup semudah itu. 699 00:44:32,150 --> 00:44:36,750 >> Terdapat lebih banyak berlaku di bawah hood apabila anda menjalankan program seperti dilafaz. 700 00:44:36,750 --> 00:44:39,560 Malah, proses menyusun program yang benar-benar boleh diringkaskan, 701 00:44:39,560 --> 00:44:42,210 seperti yang anda mungkin ingat dari video Rob pada penyusun, 702 00:44:42,210 --> 00:44:47,580 ke-4 langkah: pra-pemprosesan, menyusun dirinya, memasang, dan menghubungkan. 703 00:44:47,580 --> 00:44:51,950 Tetapi kita di dalam kelas dan kebanyakan orang di dunia biasanya meringkaskan semua langkah-langkah ini 704 00:44:51,950 --> 00:44:54,410 sebagai hanya "menyusun". 705 00:44:54,410 --> 00:44:58,070 Tetapi jika kita bermula dengan kod sumber seperti ini, ingat ini mungkin program C mudah 706 00:44:58,070 --> 00:45:03,530 kita telah menulis setakat ini, ingat bahawa apabila disusun ia berakhir sehingga kelihatan seperti ini. 707 00:45:03,530 --> 00:45:07,310 Tetapi ada sebenarnya satu langkah perantaraan, dan langkah-langkah adalah seperti berikut. 708 00:45:07,310 --> 00:45:10,750 Pertama ada perkara ini di atas ini dan kebanyakan program kami, 709 00:45:10,750 --> 00:45:13,550 # Include 710 00:45:13,550 --> 00:45:17,210 Apakah # include lakukan untuk kita? 711 00:45:17,210 --> 00:45:24,150 Ia cukup banyak salinan dan Pes isi kandungan stdio.h ke dalam fail saya supaya mengapa? 712 00:45:24,150 --> 00:45:27,220 Mengapa saya mengambil berat tentang kandungan stdio.h? Apa yang ada kepentingan? 713 00:45:27,220 --> 00:45:32,310 Printf perisytiharan, prototaip, supaya pengkompil kemudian tahu apa yang saya maksudkan 714 00:45:32,310 --> 00:45:34,900 apabila saya menyebut fungsi ini printf. 715 00:45:34,900 --> 00:45:39,390 Jadi langkah 1 dalam menyusun pra-pemprosesan, di mana program seperti dilafaz 716 00:45:39,390 --> 00:45:43,450 atau beberapa program pembantu bahawa dilafaz datang dengan membaca atas kod anda ke bawah, 717 00:45:43,450 --> 00:45:47,740 kiri ke kanan, dan bila-bila masa ia melihat simbol # diikuti dengan kata kunci seperti termasuk, 718 00:45:47,740 --> 00:45:53,980 ia melakukan operasi itu, menyalin dan menampal dalam stdio.h kes ini ke dalam fail anda. 719 00:45:53,980 --> 00:45:55,510 Itulah langkah 1. 720 00:45:55,510 --> 00:45:59,620 Kemudian anda mempunyai fail yang lebih besar C kerana salinan besar, pekerjaan yang tampal itu hanya berlaku. 721 00:45:59,620 --> 00:46:01,710 >> Langkah 2 kini menyusun. 722 00:46:01,710 --> 00:46:04,880 Tetapi ternyata menyusun mengambil kod sumber yang kelihatan seperti ini 723 00:46:04,880 --> 00:46:08,160 dan bertukar menjadi sesuatu yang kelihatan seperti ini, 724 00:46:08,160 --> 00:46:12,560 yang bagi mereka yang biasa dipanggil? >> [Pelajar] Perhimpunan. >> Perhimpunan bahasa. 725 00:46:12,560 --> 00:46:16,700 Ini sebenarnya adalah sesuatu yang jika anda mengambil CS61 anda akan menyelam ke dalam lebih terperinci. 726 00:46:16,700 --> 00:46:22,380 Ini adalah hanya kira-kira sehampir anda boleh mendapatkan untuk menulis 0s dan 1s diri 727 00:46:22,380 --> 00:46:25,850 tetapi menulis perkara dalam apa-apa cara yang masih membuat sekurang-kurangnya sedikit akal. 728 00:46:25,850 --> 00:46:30,760 Ini adalah arahan mesin, dan jika kita tatal ke fungsi utama di sini, 729 00:46:30,760 --> 00:46:35,470 melihat bahawa terdapat arahan ini menolak, bergerak arahan, tolak suruhan, 730 00:46:35,470 --> 00:46:38,550 panggilan arahan, dan sebagainya. 731 00:46:38,550 --> 00:46:42,930 Apabila anda mendengar bahawa komputer anda mempunyai Intel dalam, 732 00:46:42,930 --> 00:46:46,180 anda mempunyai CPU Intel di Mac atau PC anda, apa maksudnya? 733 00:46:46,180 --> 00:46:51,200 CPU datang dibina oleh syarikat-syarikat seperti Intel memahami arahan tertentu. 734 00:46:51,200 --> 00:46:55,770 Mereka tidak mempunyai idea apa fungsi seperti swap atau utama per se, 735 00:46:55,770 --> 00:47:00,060 tetapi mereka tahu apa yang sangat rendah tahap arahan seperti menambah, menolak, menolak, 736 00:47:00,060 --> 00:47:02,430 bergerak, panggil, dan sebagainya. 737 00:47:02,430 --> 00:47:06,170 Jadi apabila anda menyusun kod C ke dalam bahasa himpunan, 738 00:47:06,170 --> 00:47:11,820 pengguna sangat anda mesra-cari kod ditukar menjadi sesuatu yang kelihatan seperti ini, 739 00:47:11,820 --> 00:47:21,670 yang benar-benar bergerak bait atau 4 bait sekitar dalam unit-unit kecil di dalam dan keluar CPU. 740 00:47:21,670 --> 00:47:26,820 Tetapi akhirnya, apabila dilafaz adalah bersedia untuk mengambil perwakilan ini program anda 741 00:47:26,820 --> 00:47:30,940 ke 0 dan 1s, maka langkah yang dipanggil pemasangan berlaku, 742 00:47:30,940 --> 00:47:33,850 dan ini sekali lagi semua yang berlaku dalam sekelip mata apabila berjalan dilafaz. 743 00:47:33,850 --> 00:47:39,300 Kita mulakan di sini, ia output fail seperti ini, dan kemudian ia menukarkan ia kepada-0s dan 1s. 744 00:47:39,300 --> 00:47:42,000 Dan jika anda mahu untuk kembali pada satu ketika dan sebenarnya melihat ini dalam tindakan, 745 00:47:42,000 --> 00:47:48,220 jika saya pergi ke hello1.c-ini adalah salah satu program yang sangat pertama kita melihat - 746 00:47:48,220 --> 00:47:53,710 biasanya kita akan menyusun ini dengan hello1.c dilafaz dan ini akan memberi kita a.out. 747 00:47:53,710 --> 00:47:59,890 Jika sebaliknya anda sebaliknya memberikan S-bendera, apa yang anda akan mendapat adalah hello1.s 748 00:47:59,890 --> 00:48:02,750 dan anda sebenarnya akan melihat bahasa himpunan. 749 00:48:02,750 --> 00:48:05,750 >> Saya lakukan ini adalah untuk program yang sangat pendek, tetapi jika anda pergi kembali untuk Kacau 750 00:48:05,750 --> 00:48:08,740 atau pulihkan atau mana-mana program yang anda telah ditulis dan hanya keluar dari rasa ingin tahu 751 00:48:08,740 --> 00:48:13,240 mahu melihat apa yang ia sebenarnya kelihatan seperti, apa yang sebenarnya sedang dimasukkan ke dalam CPU, 752 00:48:13,240 --> 00:48:15,700 anda boleh menggunakan bahawa-S bendera dengan dilafaz. 753 00:48:15,700 --> 00:48:17,770 Tetapi kemudian akhir sekali, terdapat masih satu gotcha. 754 00:48:17,770 --> 00:48:21,810 Berikut adalah 0 dan 1s yang mewakili pelaksanaan saya hello dunia,. 755 00:48:21,810 --> 00:48:25,530 Tetapi saya menggunakan fungsi orang lain dalam program saya. 756 00:48:25,530 --> 00:48:28,710 Jadi, walaupun proses itu telah saya mengambil hello.c, 757 00:48:28,710 --> 00:48:34,280 ia mendapat dikumpulkan ke dalam kod perhimpunan, dan kemudian ia mendapat dipasang ke 0 dan 1s, 758 00:48:34,280 --> 00:48:37,460 hanya 0s dan 1s yang outputted pada masa ini 759 00:48:37,460 --> 00:48:40,270 adalah orang-orang yang hasil dari kod saya. 760 00:48:40,270 --> 00:48:44,400 Tetapi orang yang menulis printf, mereka menyusun kod mereka 20 tahun yang lalu 761 00:48:44,400 --> 00:48:47,000 dan ia kini dipasang di suatu tempat pada perkakas, 762 00:48:47,000 --> 00:48:51,610 jadi kita entah bagaimana perlu bergabung beliau 0s dan 1s dengan saya 0s dan 1s, 763 00:48:51,610 --> 00:48:56,160 dan yang membawa kita ke langkah 4 dan akhir menyusun, dikenali sebagai menghubungkan. 764 00:48:56,160 --> 00:48:58,680 Jadi pada sebelah kiri kita mempunyai gambar yang sama yang tepat seperti sebelum ini: 765 00:48:58,680 --> 00:49:02,580 hello.c menjadi kod perhimpunan menjadi 0 dan 1s. 766 00:49:02,580 --> 00:49:05,960 Tetapi ingat bahawa saya menggunakan standard pustaka I / O dalam kod saya, 767 00:49:05,960 --> 00:49:10,350 dan ini bermakna suatu tempat di dalam komputer terdapat fail yang dipanggil stdio.c 768 00:49:10,350 --> 00:49:13,980 atau sekurang-kurangnya versi yang disusun itu kerana seseorang beberapa tahun lalu 769 00:49:13,980 --> 00:49:18,530 disusun stdio.c ke dalam kod perhimpunan dan kemudian sekumpulan keseluruhan 0 dan 1s. 770 00:49:18,530 --> 00:49:21,130 Ini adalah apa yang dikenali sebagai perpustakaan statik atau dinamik. 771 00:49:21,130 --> 00:49:23,350 Ia adalah beberapa fail yang duduk di suatu tempat di dalam perkakas. 772 00:49:23,350 --> 00:49:28,710 >> Tetapi akhir sekali, saya perlu mengambil 0s dan 1s saya dan 0 dan 1s bahawa orang 773 00:49:28,710 --> 00:49:32,760 dan entah bagaimana menghubungkan mereka bersama-sama, secara literal menggabungkan mereka 0 dan 1s 774 00:49:32,760 --> 00:49:37,900 ke dalam satu fail dipanggil a.out atau hello1 atau apa sahaja yang saya dipanggil program saya 775 00:49:37,900 --> 00:49:43,320 supaya hasil akhir mempunyai semua 1s dan 0s yang perlu mengarang program saya. 776 00:49:43,320 --> 00:49:45,660 Jadi, sepanjang masa ini semester ini apabila anda telah menggunakan dilafaz 777 00:49:45,660 --> 00:49:48,750 dan lebih baru-baru ini berjalan membuat untuk menjalankan dilafaz, 778 00:49:48,750 --> 00:49:53,580 semua langkah-langkah ini telah berlaku jenis serta-merta tetapi sangat sengaja. 779 00:49:53,580 --> 00:49:57,830 Dan jadi jika anda terus di dalam bidang sains komputer, iaitu CS61, 780 00:49:57,830 --> 00:50:00,850 ini adalah lapisan bahawa anda akan terus mengupas kembali di luar sana 781 00:50:00,850 --> 00:50:06,980 bercakap tentang kecekapan, implikasi keselamatan, dan seperti butiran ini tahap rendah. 782 00:50:06,980 --> 00:50:09,220 Tetapi dengan itu, kami kira-kira untuk meninggalkan C belakang. 783 00:50:09,220 --> 00:50:11,420 Mari kita pergi ke hadapan dan mengambil rehat 5 minit kita sekarang, 784 00:50:11,420 --> 00:50:14,190 dan apabila kita kembali: Internet. 785 00:50:17,280 --> 00:50:19,170 Semua hak. Kami kembali. 786 00:50:19,170 --> 00:50:23,590 Sekarang kita mula melihat kita bukan hanya di HTML kerana, kerana anda akan melihat, 787 00:50:23,590 --> 00:50:26,050 HTML itu sendiri sebenarnya agak mudah 788 00:50:26,050 --> 00:50:29,270 tetapi benar-benar di pengaturcaraan web lebih amnya, rangkaian lebih amnya, 789 00:50:29,270 --> 00:50:31,770 dan bagaimana semua teknologi ini datang bersama-sama 790 00:50:31,770 --> 00:50:35,400 untuk membolehkan kita untuk mewujudkan program-program yang lebih canggih di atas Internet 791 00:50:35,400 --> 00:50:38,690 daripada setakat kita telah dapat dalam tingkap hitam dan putih. 792 00:50:38,690 --> 00:50:42,140 Malah, pada ketika ini dalam semester walaupun kita akan menghabiskan masa yang agak kurang 793 00:50:42,140 --> 00:50:46,200 pada PHP, HTML, CSS, JavaScript, SQL dan banyak lagi, 794 00:50:46,200 --> 00:50:48,480 kebanyakan pelajar lakukan akhirnya melakukan projek akhir yang berasaskan web 795 00:50:48,480 --> 00:50:51,230 kerana seperti yang anda akan lihat, latar belakang anda kini mempunyai dalam C 796 00:50:51,230 --> 00:50:54,450 sangat terpakai kepada bahasa-bahasa peringkat tinggi. 797 00:50:54,450 --> 00:50:56,800 >> Dan seperti yang anda mula berfikir tentang projek akhir anda, 798 00:50:56,800 --> 00:50:59,940 yang banyak seperti Set Masalah 0, di mana anda digalakkan 799 00:50:59,940 --> 00:51:02,160 untuk berbuat apa-apa yang paling menarik minat anda dalam Gores, 800 00:51:02,160 --> 00:51:05,790 projek akhir adalah peluang anda untuk mengambil pengetahuan barunya anda dan celik dengan C 801 00:51:05,790 --> 00:51:09,850 atau PHP atau JavaScript atau sebagainya untuk spin 802 00:51:09,850 --> 00:51:12,330 dan mencipta sekeping anda sendiri perisian untuk dunia untuk melihat. 803 00:51:12,330 --> 00:51:17,770 Dan benih anda dengan idea-idea, tahu bahawa anda boleh pergi di sini, projects.cs50.net. 804 00:51:17,770 --> 00:51:21,800 Setiap tahun, kami meminta idea daripada fakulti dan kakitangan dan kumpulan pelajar di kampus 805 00:51:21,800 --> 00:51:27,330 hanya untuk mengemukakan idea-idea mereka untuk perkara-perkara yang menarik yang boleh diselesaikan dengan menggunakan komputer, 806 00:51:27,330 --> 00:51:29,860 menggunakan laman web, menggunakan perisian. 807 00:51:29,860 --> 00:51:32,360 Jadi, jika anda sedang bergelut untuk tampil dengan idea anda sendiri, 808 00:51:32,360 --> 00:51:35,790 oleh semua ertinya menatal melalui idea-idea di sana dari tahun ini dan terakhir. 809 00:51:35,790 --> 00:51:39,990 Ia adalah sempurna okay untuk menangani projek yang telah ditangani sebelum. 810 00:51:39,990 --> 00:51:44,540 Kita telah melihat banyak aplikasi untuk melihat status pakaian di kampus, 811 00:51:44,540 --> 00:51:47,000 aplikasi banyak untuk menavigasi menu dewan makan, 812 00:51:47,000 --> 00:51:49,540 aplikasi banyak untuk menavigasi katalog kursus dan sebagainya. 813 00:51:49,540 --> 00:51:53,680 Dan sesungguhnya, dalam kuliah masa depan dan dalam seminar masa depan, 814 00:51:53,680 --> 00:51:57,750 kami akan memperkenalkan anda kepada API beberapa umum, kedua-duanya boleh didapati secara komersial 815 00:51:57,750 --> 00:52:02,520 serta di sini boleh didapati daripada CS50 di kampus supaya anda mempunyai akses kepada data 816 00:52:02,520 --> 00:52:04,910 dan kemudian boleh melakukan perkara-perkara yang menarik dengan ia. 817 00:52:04,910 --> 00:52:09,380 Jadi lanjut mengenai projek akhir dalam beberapa hari apabila kita melepaskan spesifikasi, 818 00:52:09,380 --> 00:52:12,990 tapi sekarang, tahu bahawa anda boleh bekerja solo atau dengan satu atau dua rakan 819 00:52:12,990 --> 00:52:16,010 pada kebanyakan mana-mana projek yang menarik minat anda. 820 00:52:16,010 --> 00:52:18,080 Internet. 821 00:52:18,080 --> 00:52:22,300 Anda pergi ke hadapan dan tarik keluar komputer riba anda, anda pergi ke facebook.com untuk kali pertama, 822 00:52:22,300 --> 00:52:27,020 tidak log masuk baru-baru ini, dan tekan Enter. Apa sebenarnya berlaku? 823 00:52:27,020 --> 00:52:30,150 >> Apabila anda menekan Enter pada komputer anda, sekumpulan keseluruhan langkah-langkah 824 00:52:30,150 --> 00:52:32,600 memulakan jenis ajaib berlaku. 825 00:52:32,600 --> 00:52:35,960 Jadi anda di sini pada pelayan kiri web seperti Facebook adalah di sini di sebelah kanan, 826 00:52:35,960 --> 00:52:42,500 dan entah bagaimana anda menggunakan bahasa ini dipanggil HTTP, Hypertext Transfer Protocol. 827 00:52:42,500 --> 00:52:46,770 HTTP bukan bahasa pengaturcaraan. Ia adalah lebih protokol. 828 00:52:46,770 --> 00:52:52,310 Ia adalah set konvensyen bahawa pelayar web dan pelayan web gunakan apabila intercommunicating. 829 00:52:52,310 --> 00:52:54,360 Dan apa yang bermakna ini adalah seperti berikut. 830 00:52:54,360 --> 00:52:56,790 Sama seperti di dunia sebenar, kita mempunyai konvensyen 831 00:52:56,790 --> 00:53:00,140 di mana jika anda bertemu dengan beberapa manusia buat kali pertama, jika anda tidak keberatan humoring saya di sini, 832 00:53:00,140 --> 00:53:03,980 Saya mungkin datang kepada anda, katakan, "Hai, nama saya David." >> Hi, David. Nama saya ialah Sammy. 833 00:53:03,980 --> 00:53:05,770 "Hi, David Nama saya adalah Sammy." 834 00:53:05,770 --> 00:53:08,310 Jadi sekarang kita telah hanya terlibat dalam jenis ini protokol manusia bodoh 835 00:53:08,310 --> 00:53:12,200 di mana saya telah memulakan protokol, Sammy telah menyahut, 836 00:53:12,200 --> 00:53:15,060 kami telah digoncang tangan, dan transaksi selesai. 837 00:53:15,060 --> 00:53:18,260 HTTP adalah sangat serupa dalam semangat. 838 00:53:18,260 --> 00:53:23,350 Apabila permintaan pelayar web anda www.facebook.com, 839 00:53:23,350 --> 00:53:27,020 apa yang pelayar anda adalah benar-benar melakukan melanjutkan tangan, jadi untuk bercakap, 840 00:53:27,020 --> 00:53:29,960 kepada pelayan dan ia menghantar mesej. 841 00:53:29,960 --> 00:53:34,220 Dan mesej itu biasanya sesuatu seperti mendapatkan apa yang anda mahu untuk mendapatkan? - 842 00:53:34,220 --> 00:53:38,740 mendapatkan saya halaman rumah, yang biasanya ditandakan dengan palang tunggal pada akhir URL. 843 00:53:38,740 --> 00:53:43,790 Dan hanya jadi anda tahu apa bahasa saya bercakap, saya pelayar saya akan memberitahu anda 844 00:53:43,790 --> 00:53:46,930 bahawa saya bercakap versi HTTP 1.1, 845 00:53:46,930 --> 00:53:51,980 Dan juga untuk mengukur baik, saya akan memberitahu anda bahawa tuan rumah yang saya mahu halaman rumah 846 00:53:51,980 --> 00:53:54,120 adalah facebook.com. 847 00:53:54,120 --> 00:53:57,730 Biasanya, pelayar web, tanpa pengetahuan anda, manusia, 848 00:53:57,730 --> 00:54:03,350 menghantar mesej ini di seluruh Internet apabila anda hanya menaip www.facebook.com, 849 00:54:03,350 --> 00:54:05,370 >> Masukkan ke dalam pelayar anda. 850 00:54:05,370 --> 00:54:07,300 Dan apakah Facebook bertindak balas dengan? 851 00:54:07,300 --> 00:54:12,540 Ia bertindak balas dengan beberapa butiran yang berpandangan sama-samar tetapi juga lebih. 852 00:54:12,540 --> 00:54:14,310 Biar saya pergi ke hadapan halaman rumah Facebook di sini. 853 00:54:14,310 --> 00:54:17,480 Ini adalah skrin yang kebanyakan kita mungkin tidak pernah melihat jika anda kekal dilog masuk pada setiap masa, 854 00:54:17,480 --> 00:54:19,830 tetapi ini memang halaman rumah mereka. 855 00:54:19,830 --> 00:54:24,150 Jika kita melakukan ini dalam Chrome, notis bahawa anda boleh tarik sehingga menu konteks sedikit. 856 00:54:24,150 --> 00:54:26,980 Menggunakan Chrome, sama ada pada Mac OS, Windows, Linux, atau sebagainya, 857 00:54:26,980 --> 00:54:31,840 jika anda Kawalan klik atau klik kiri, anda biasanya boleh tarik sehingga menu yang kelihatan seperti ini, 858 00:54:31,840 --> 00:54:35,870 di mana beberapa pilihan menanti, salah satu yang View Page Source. 859 00:54:35,870 --> 00:54:39,920 Anda boleh juga biasanya sampai kepada perkara-perkara ini dengan pergi ke menu View dan poking sekitar. 860 00:54:39,920 --> 00:54:42,750 Sebagai contoh, di sini di bawah View, Pemaju adalah perkara yang sama. 861 00:54:42,750 --> 00:54:45,780 Saya akan pergi ke hadapan dan melihat View Page Source. 862 00:54:45,780 --> 00:54:50,800 Apa yang anda akan lihat adalah HTML bahawa Mark telah ditulis untuk mewakili facebook.com. 863 00:54:50,800 --> 00:54:55,910 Ia adalah satu keadaan huru-hara lengkap di sini, tetapi kita akan melihat bahawa ini masuk akal lebih sedikit sebelum panjang. 864 00:54:55,910 --> 00:54:59,840 Tetapi terdapat beberapa corak di sini. Biarkan saya tatal ke bawah untuk barangan seperti ini. 865 00:54:59,840 --> 00:55:05,730 Ini adalah sukar bagi manusia untuk membaca, tetapi notis bahawa terdapat corak kurungan bersudut 866 00:55:05,730 --> 00:55:10,360 dengan kata kunci seperti pilihan, kata kunci seperti nilai, beberapa rentetan dipetik. 867 00:55:10,360 --> 00:55:15,660 Ini adalah di mana, apabila anda mendaftar untuk kali pertama, yang dinyatakan apa tahun kelahiran anda. 868 00:55:15,660 --> 00:55:19,020 Itu menu drop-down tahun kelahiran entah bagaimana dikodkan di sini 869 00:55:19,020 --> 00:55:23,870 dalam bahasa ini dipanggil HTML, Hiperteks Markup Language. 870 00:55:23,870 --> 00:55:27,730 Dalam erti kata lain, apabila pelayar anda meminta laman web, 871 00:55:27,730 --> 00:55:30,610 ia bercakap konvensyen ini dipanggil HTTP. 872 00:55:30,610 --> 00:55:35,170 Tetapi apakah facebook.com bertindak balas kepada permintaan itu dengan? 873 00:55:35,170 --> 00:55:38,260 >> Ia bertindak balas dengan beberapa mesej ini samar, seperti yang kita akan melihat dalam seketika. 874 00:55:38,260 --> 00:55:43,760 Tetapi kebanyakan tindak balas adalah dalam bentuk HTML, Hiperteks Markup Language. 875 00:55:43,760 --> 00:55:47,170 Itulah bahasa sebenar di mana laman web ditulis. 876 00:55:47,170 --> 00:55:52,030 Dan apa yang pelayar web benar-benar tidak maka, apabila menerima sesuatu yang kelihatan seperti ini, 877 00:55:52,030 --> 00:55:57,120 membacanya atas ke bawah, kiri ke kanan, dan bila-bila masa ia melihat salah ini kurungan bersudut 878 00:55:57,120 --> 00:56:03,370 diikuti oleh kata kunci seperti pilihan, ia memaparkan bahawa bahasa markup dalam cara yang sesuai. 879 00:56:03,370 --> 00:56:06,820 Dalam kes ini, ia akan memaparkan menu drop-down tahun. 880 00:56:06,820 --> 00:56:09,240 Tetapi sekali lagi, ini adalah satu keadaan huru-hara lengkap untuk melihat. 881 00:56:09,240 --> 00:56:16,630 Ini bukan kerana pemaju Facebook nyata 0 for 5 untuk gaya, misalnya. 882 00:56:16,630 --> 00:56:20,190 Ini adalah kerana kebanyakan kod yang mereka menulis adalah, pada hakikatnya, yang ditulis indah, 883 00:56:20,190 --> 00:56:22,450 juga mengulas, baik dilekukan, dan sebagainya, 884 00:56:22,450 --> 00:56:26,080 tetapi mesin tentu, komputer, pelayar benar-benar tidak memberi sialan 885 00:56:26,080 --> 00:56:27,890 sama ada kod anda adalah baik gaya. 886 00:56:27,890 --> 00:56:33,100 Dan pada hakikatnya, ia adalah benar-benar membazir untuk memukul kunci tab semua orang masa 887 00:56:33,100 --> 00:56:37,650 dan untuk meletakkan komen semua sepanjang kod anda dan untuk memilih benar-benar deskriptif nama pembolehubah 888 00:56:37,650 --> 00:56:42,340 kerana jika pelayar tidak peduli, semua yang anda lakukan pada akhir hari membuang bait. 889 00:56:42,340 --> 00:56:46,660 >> Jadi ia ternyata apa yang kebanyakan laman web lakukan adalah walaupun sumber kod untuk facebook.com, 890 00:56:46,660 --> 00:56:49,550 untuk cs50.net dan semua laman-laman web lain di Internet 891 00:56:49,550 --> 00:56:53,730 biasanya ditulis dengan baik dan juga mengulas dan baik dilekukan dan sebagainya, 892 00:56:53,730 --> 00:56:59,270 biasanya sebelum laman web dimasukkan ke dalam Internet, kod minified, 893 00:56:59,270 --> 00:57:02,970 mana HTML dan CSS - sesuatu yang lain kita tidak lama lagi akan melihat - 894 00:57:02,970 --> 00:57:05,960 kod JavaScript kita tidak lama lagi akan melihat dimampatkan, 895 00:57:05,960 --> 00:57:09,250 mana panjang nama pemboleh ubah menjadi X dan Y dan Z, 896 00:57:09,250 --> 00:57:13,900 dan semua bahawa ruang kosong yang membuat segala-galanya kelihatan begitu dibaca semua dibuang, 897 00:57:13,900 --> 00:57:17,700 kerana jika anda berfikir tentang ia cara ini, Facebook mendapat halaman bilion hits sehari - 898 00:57:17,700 --> 00:57:21,670 sesuatu yang gila seperti itu - jadi apa jika programmer hanya menjadi dubur 899 00:57:21,670 --> 00:57:26,660 memukul bar ruang satu masa tambahan hanya untuk inden beberapa baris kod yang pernah banyak lagi? 900 00:57:26,660 --> 00:57:29,500 Apakah implikasinya jika Facebook mengekalkan bahawa ruang kosong 901 00:57:29,500 --> 00:57:32,880 dalam semua bait mereka menghantar kembali kepada orang-orang di Internet? 902 00:57:32,880 --> 00:57:36,400 Menekan bar ruang sekali memberikan anda bait tambahan dalam fail anda. 903 00:57:36,400 --> 00:57:39,730 Dan jika bilion orang kemudian meneruskan untuk memuat turun halaman rumah pada hari itu, 904 00:57:39,730 --> 00:57:42,060 berapa banyak lebih banyak data telah anda dihantar melalui Internet? 905 00:57:42,060 --> 00:57:45,200 Satu gigabit tanpa sebab yang baik. 906 00:57:45,200 --> 00:57:48,510 Dan diberikan, banyak laman web ini tidak adalah seperti isu berskala, 907 00:57:48,510 --> 00:57:51,030 tetapi untuk Facebook, Google, untuk beberapa laman web yang paling popular 908 00:57:51,030 --> 00:57:54,860 terdapat insentif besar kewangan untuk membuat kod anda kelihatan seperti kacau-bilau 909 00:57:54,860 --> 00:57:58,980 supaya anda menggunakan sebagai bytes beberapa yang mungkin di samping kemudian memampatkan ia 910 00:57:58,980 --> 00:58:01,500 menggunakan sesuatu seperti zip, algoritma dipanggil gzip, 911 00:58:01,500 --> 00:58:04,250 bahawa pelayar tidak untuk anda secara automatik. Tetapi ini adalah besar. 912 00:58:04,250 --> 00:58:08,060 Kita tidak akan belajar apa-apa tentang laman web orang lain dan bagaimana untuk reka bentuk laman web 913 00:58:08,060 --> 00:58:09,680 jika kita perlu melihat ia seperti ini. 914 00:58:09,680 --> 00:58:13,620 >> Jadi mujurlah, pelayar seperti Chrome dan IE dan Firefox hari ini 915 00:58:13,620 --> 00:58:16,450 biasanya datang dengan alat pemaju yang terbina dalam. 916 00:58:16,450 --> 00:58:21,730 Malah, jika saya pergi ke sini untuk Memeriksa Unsur atau jika saya pergi untuk Lihat, Pemaju, 917 00:58:21,730 --> 00:58:25,220 dan pergi ke Tools Pemaju jelas, 918 00:58:25,220 --> 00:58:27,640 tetingkap ini di bahagian bawah skrin saya kini muncul. 919 00:58:27,640 --> 00:58:31,230 Ia sedikit menakutkan pada mulanya kerana terdapat banyak tab yang tidak dikenali di sini, 920 00:58:31,230 --> 00:58:34,510 tetapi jika saya klik pada Elemen sepanjang jalan di sebelah kiri bahagian bawah, 921 00:58:34,510 --> 00:58:38,810 Chrome adalah jelas agak pintar. Ia tahu bagaimana untuk mentafsir semua kod ini. 922 00:58:38,810 --> 00:58:42,320 Dan jadi apa Chrome tidak adalah ia membersihkan semua HTML Facebook. 923 00:58:42,320 --> 00:58:45,680 Walaupun tidak ada ruang kosong di sana, tidak ada lekukan di sana, 924 00:58:45,680 --> 00:58:51,120 kini melihat bahawa saya boleh mula untuk menavigasi halaman web ini semua lebih hierarki. 925 00:58:51,120 --> 00:58:56,910 Ia ternyata bahawa setiap laman web yang ditulis dalam bahasa yang dipanggil HTML5 harus bermula dengan ini, 926 00:58:56,910 --> 00:59:03,980 pengakuan ini DOCTYPE, jadi untuk bercakap: 927 00:59:03,980 --> 00:59:07,840 Ia adalah jenis cahaya dan kelabu di sana, tetapi itulah baris pertama kod dalam fail ini, 928 00:59:07,840 --> 00:59:12,080 dan yang hanya memberitahu pelayar, "Hei, di sini datang beberapa HTML5. Berikut datang laman web." 929 00:59:12,080 --> 00:59:18,490 Golongan pertama terbuka luar yang berlaku kepada menjadi perkara ini, kurungan terbuka tag HTML, 930 00:59:18,490 --> 00:59:22,320 dan kemudian jika saya menyelam dalam lebih mendalam - anak panah ini benar-benar bermakna; 931 00:59:22,320 --> 00:59:25,140 mereka hanya demi persembahan itu, mereka tidak sebenarnya dalam fail - 932 00:59:25,140 --> 00:59:30,300 melihat bahawa dalam tag HTML Facebook, apa-apa yang bermula dengan kurungan terbuka 933 00:59:30,300 --> 00:59:32,910 dan kemudian telah perkataan dipanggil tag. 934 00:59:32,910 --> 00:59:38,610 Jadi di dalam tag HTML nampaknya tag kepala dan tag badan. 935 00:59:38,610 --> 00:59:41,930 Dalam tag kepala sekarang adalah menggagalkan keseluruhan untuk Facebook 936 00:59:41,930 --> 00:59:45,620 kerana mereka mempunyai banyak metadata dan perkara-perkara lain untuk pemasaran dan pengiklanan. 937 00:59:45,620 --> 00:59:50,600 >> Tetapi jika kita tatal ke bawah, ke bawah, ke bawah, ke bawah, mari kita lihat di mana ia. Di sini ia adalah. 938 00:59:50,600 --> 00:59:52,210 Ini adalah sekurang-kurangnya agak biasa. 939 00:59:52,210 --> 00:59:55,990 Tajuk halaman rumah Facebook, jika anda pernah melihat dalam tab di bar tajuk anda, 940 00:59:55,990 --> 00:59:59,060 Selamat datang ke Facebook - Log In, Sign Up atau Learn More. 941 00:59:59,060 --> 01:00:01,110 Itulah apa yang anda akan lihat dalam bar tajuk Chrome, 942 01:00:01,110 --> 01:00:03,100 dan itulah bagaimana ia diwakili dalam kod. 943 01:00:03,100 --> 01:00:08,090 Jika kita mengabaikan segala-galanya di kepala, kebanyakan berani laman web adalah di dalam badan, 944 01:00:08,090 --> 01:00:10,940 dan ia ternyata bahawa kod Facebook akan kelihatan lebih kompleks 945 01:00:10,940 --> 01:00:14,540 daripada perkara-perkara yang paling kita akan menulis pada mulanya hanya kerana ia telah dibina selama bertahun-tahun, 946 01:00:14,540 --> 01:00:17,260 tetapi terdapat banyak keseluruhan tag script, kod JavaScript, 947 01:00:17,260 --> 01:00:18,870 yang menjadikan laman web sangat interaktif: 948 01:00:18,870 --> 01:00:22,330 melihat kemaskini status serta-merta menggunakan bahasa seperti JavaScript. 949 01:00:22,330 --> 01:00:25,270 Ada sesuatu yang dipanggil div, yang merupakan satu bahagian halaman. 950 01:00:25,270 --> 01:00:27,940 Tetapi sebelum kita sampai ke detail yang, mari kita cuba untuk zum keluar 951 01:00:27,940 --> 01:00:31,920 dan melihat versi mudah Facebook 1.0, jadi untuk bercakap. 952 01:00:31,920 --> 01:00:34,740 Berikut adalah hello, dunia laman web. 953 01:00:34,740 --> 01:00:37,370 Ia mempunyai bahawa perisytiharan DOCTYPE di bahagian paling atas 954 01:00:37,370 --> 01:00:40,280 yang sedikit berbeza daripada segala-galanya. 955 01:00:40,280 --> 01:00:46,130 Apa-apa lagi kita menulis dalam laman web akan bermula dengan 01:00:48,880 dan kecuali untuk sesuatu yang dipanggil komen dalam HTML. 957 01:00:48,880 --> 01:00:53,000 Tetapi bagi sebahagian besar, segala-galanya dalam laman web adalah kurungan terbuka, kata kunci, kurungan rapat. 958 01:00:53,000 --> 01:00:56,220 >> Dalam kes ini, anda boleh melihat mudah laman web yang mungkin. 959 01:00:56,220 --> 01:01:00,260 Tag HTML mengandungi tag kepala dan ia mengandungi tag badan, 960 01:01:00,260 --> 01:01:04,580 tetapi notis bahawa terdapat tanggapan ini bermula dan berhenti tags. 961 01:01:04,580 --> 01:01:11,360 Ini adalah tag permulaan untuk HTML, ini adalah tag rapat atau tag akhir. 962 01:01:11,360 --> 01:01:15,400 Perhatikan bahawa mereka jenis bertentangan dalam erti kata bahawa tag rapat atau tag akhir 963 01:01:15,400 --> 01:01:20,030 telah ini italik dalam dirinya. 964 01:01:20,030 --> 01:01:23,540 Sementara itu, ada tag kepala terbuka di sini dan kepala tag dekat sini. 965 01:01:23,540 --> 01:01:26,880 >> Ada satu tajuk yang terbuka dan tag tajuk dekat sini. 966 01:01:26,880 --> 01:01:29,850 Hakikat bahawa saya telah meletakkan tajuk pada satu baris, semata-mata sewenang-wenangnya. 967 01:01:29,850 --> 01:01:33,760 Ia hanya kelihatan seperti ia akan sesuai baik dalam satu baris, jadi saya tidak mengganggu memukul Masukkan satu atau dua kali. 968 01:01:33,760 --> 01:01:38,200 Sementara itu, badan saya lakukan inden hanya menjadi pernah begitu jelas. 969 01:01:38,200 --> 01:01:41,050 Perhatikan bahawa HTML adalah bahasa yang agak bodoh. 970 01:01:41,050 --> 01:01:43,410 Malah, kembali pada hari sebelum terdapat editor WYSIWYG 971 01:01:43,410 --> 01:01:46,770 dan Microsoft Word di mana anda boleh berkata, "Jadikan ini berani, membuat ini italik," 972 01:01:46,770 --> 01:01:50,850 anda sebenarnya akan menaip arahan sedikit dalam esei 20 + tahun yang lalu 973 01:01:50,850 --> 01:01:55,740 di mana anda akan berkata, "Mula membuat teks ini berani. Berhenti membuat teks ini berani." 974 01:01:55,740 --> 01:01:59,010 "Mula membuat ini italik teks. Berhenti membuat ini italik teks." 975 01:01:59,010 --> 01:02:01,850 >> Itulah apa HTML atau mana-mana bahasa markup adalah. 976 01:02:01,850 --> 01:02:05,530 Tag ini pertama berkata, "Hei, pelayar. Berikut datang beberapa HTML." 977 01:02:05,530 --> 01:02:09,880 Tag seterusnya berkata, "Hei, pelayar. Berikut datang kepala, tajuk laman web saya." 978 01:02:09,880 --> 01:02:11,650 "Hei, pelayar. Sini datang tajuk." 979 01:02:11,650 --> 01:02:15,880 Dan kemudian di sini, "Hei, pelayar. Itulah bagi tajuk." 980 01:02:15,880 --> 01:02:20,000 Jadi ini adalah bagaimana pelayar tahu untuk tidak lagi memaparkan lebih banyak aksara daripada hello, dunia 981 01:02:20,000 --> 01:02:21,860 dalam bar tajuk. 982 01:02:21,860 --> 01:02:23,640 Sementara itu, ini berkata, "Itu untuk kepala." 983 01:02:23,640 --> 01:02:28,340 Ini mengatakan, "Di sini datang badan Berikut adalah badan yang sebenar." - Secara literal, perkataan hello, dunia. 984 01:02:28,340 --> 01:02:33,190 Dan ini mengatakan di sini, "Itulah ia untuk badan. Itu sahaja untuk HTML." 985 01:02:33,190 --> 01:02:34,640 Jadi pelayar cukup bodoh. 986 01:02:34,640 --> 01:02:39,920 Mereka hanya membaca ini barangan atas ke bawah, kiri ke kanan, dan melakukan apa yang mereka diberitahu untuk lakukan. 987 01:02:39,920 --> 01:02:41,860 Mari kita sebenarnya melakukan satu contoh yang sedikit di sini. 988 01:02:41,860 --> 01:02:46,240 Izinkan saya membuka mudah program pada Mac saya di sini, iaitu TextEdit. 989 01:02:46,240 --> 01:02:48,220 Pada Windows anda boleh menggunakan notepad.exe. 990 01:02:48,220 --> 01:02:50,520 Tetapi ini adalah semua yang anda perlukan untuk mula membuat laman web. 991 01:02:50,520 --> 01:02:53,730 Saya akan pergi ke hadapan dan hanya salin dan tampal kod ini ke dalam fail ini. 992 01:02:53,730 --> 01:02:57,210 Saya akan pergi ke hadapan dan simpan pada desktop saya, 993 01:02:57,210 --> 01:03:01,220 dan saya akan menyimpan ini sebagai hello.html, 994 01:03:01,220 --> 01:03:03,840 dan kini fail dinamakan hello.html. 995 01:03:03,840 --> 01:03:05,690 Di sini ia adalah pada desktop saya. 996 01:03:05,690 --> 01:03:11,130 Izinkan saya sekarang pergi ke dalam pelayar dan seret fail ke dalam pelayar. 997 01:03:11,130 --> 01:03:14,060 Dan Voilà, di sini adalah laman web saya yang pertama. 998 01:03:14,060 --> 01:03:17,340 Perhatikan bahawa tajuk tab hello, dunia sebagai satu tag tajuk, 999 01:03:17,340 --> 01:03:20,040 dan notis bahawa hello, dunia adalah badan laman web saya, 1000 01:03:20,040 --> 01:03:22,190 dan woo-hoo, saya di Internet. 1001 01:03:22,190 --> 01:03:24,700 >> Saya tidak benar-benar, betul, kerana fail ini tidak di Internet. 1002 01:03:24,700 --> 01:03:28,330 Ia berlaku pada cakera keras tempatan saya di jalan yang tertentu. 1003 01:03:28,330 --> 01:03:32,720 Tetapi idea adalah sama. Semua yang kita kini perlu adalah pelayan web yang upload. 1004 01:03:32,720 --> 01:03:37,410 Tetapi pertama, mari kita sebenarnya memperkenalkan kerumitan yang lebih sedikit dan penyesuaian dgn mode lebih sedikit. 1005 01:03:37,410 --> 01:03:39,890 Ini adalah mudah, jika membosankan, laman web. 1006 01:03:39,890 --> 01:03:41,990 Ia ternyata terdapat lain-lain jenis tag yang boleh kita gunakan. 1007 01:03:41,990 --> 01:03:45,530 Sebagai contoh, di sini kuning saya telah memperkenalkan 2 tag baru. 1008 01:03:45,530 --> 01:03:49,630 Kami tidak akan memainkan banyak dengan hari ini, tetapi notis bahawa tag pautan 1009 01:03:49,630 --> 01:03:52,520 entah bagaimana kelihatan berbeza dari segala-galanya. 1010 01:03:52,520 --> 01:03:55,370 Tag pautan mengambil apa yang dipanggil sifat-sifat, 1011 01:03:55,370 --> 01:03:59,770 dan sifat adalah sesuatu yang mengubah tingkah laku tag. 1012 01:03:59,770 --> 01:04:03,840 Dalam kes ini, ini tidak adalah pilihan terbaik nama, link, kerana ia jenis bermakna, 1013 01:04:03,840 --> 01:04:11,590 tetapi ini tag pautan berkata, pada dasarnya, termasuk fail dipanggil styles.css di dalam laman web saya. 1014 01:04:11,590 --> 01:04:15,400 Anda boleh berfikir ini sebagai analogi untuk C # termasuk arahan. 1015 01:04:15,400 --> 01:04:19,650 Styles.css merujuk kepada bahasa yang berbeza sama sekali bahawa kita tidak akan bermain dengan hari ini, 1016 01:04:19,650 --> 01:04:23,790 tetapi ia adalah untuk estetika: saiz fon, warna, padding, lekukan, margin, 1017 01:04:23,790 --> 01:04:26,040 dan semua jenis yang terperinci estetika. 1018 01:04:26,040 --> 01:04:28,820 Sementara itu, tag skrip berfungsi serupa, 1019 01:04:28,820 --> 01:04:33,140 tetapi bukannya termasuk CSS, bahasa itu, ia termasuk bahasa lain, JavaScript. 1020 01:04:33,140 --> 01:04:37,810 Jadi, dalam erti kata lain, dengan 2 tag saya akhirnya akan dapat untuk menulis laman web saya sendiri 1021 01:04:37,810 --> 01:04:41,490 tetapi juga menarik dalam kod yang saya atau orang lain telah ditulis 1022 01:04:41,490 --> 01:04:44,350 supaya kita boleh berdiri di atas bahu orang lain, kita boleh mengamalkan reka bentuk yang baik, 1023 01:04:44,350 --> 01:04:46,120 pemfaktoran keluar kod biasa. 1024 01:04:46,120 --> 01:04:49,090 Jika saya telah mendapat 10 laman web yang berbeza, ini bermakna bahawa beberapa estetika saya 1025 01:04:49,090 --> 01:04:52,490 boleh keluar difaktorkan, sama seperti # include, ke dalam fail yang berasingan. 1026 01:04:52,490 --> 01:04:54,420 Jadi kita mendapat sana. 1027 01:04:54,420 --> 01:04:57,180 Tetapi mari kita sebenarnya melakukan sesuatu yang lebih menarik dengan fail ini. 1028 01:04:57,180 --> 01:05:01,110 >> Sekali lagi, ini adalah hanya TextEdit. Saya tidak teknikal di Internet lagi, tetapi kita akan sampai ke sana. 1029 01:05:01,110 --> 01:05:04,910 Saya ingin membuat hello, dunia sedikit lebih berani daripada itu. 1030 01:05:04,910 --> 01:05:10,890 Jadi hello, mari kita sewenang-wenangnya mengatakan untuk berani. 1031 01:05:10,890 --> 01:05:15,910 Sekali lagi, cerita adalah sama: hello, koma, mula membuat ini berani, 1032 01:05:15,910 --> 01:05:19,730 maka dunia mendapat dicetak dalam huruf tebal, dan ini bermakna berhenti percetakan ini dalam huruf tebal. 1033 01:05:19,730 --> 01:05:24,020 Biar saya pergi ke hadapan dan menyimpan fail saya, kembali ke Chrome, saya akan mengezum masuk hanya supaya kita boleh melihat ia lebih baik, 1034 01:05:24,020 --> 01:05:27,870 dan menambah nilai, dan anda akan melihat dunia yang kini dalam huruf tebal. 1035 01:05:27,870 --> 01:05:31,810 Web adalah semua tentang hiperpautan, jadi mari kita pergi ke hadapan dan melakukan ini: 1036 01:05:31,810 --> 01:05:38,550 laman web kegemaran saya ialah, katakan, youtube.com. 1037 01:05:38,550 --> 01:05:43,810 Simpan, reload. Okay. Terdapat beberapa masalah sekarang selain hideousness laman web. 1038 01:05:43,810 --> 01:05:47,310 1, Saya agak pasti saya tekan Enter sini. Dan saya lakukan. 1039 01:05:47,310 --> 01:05:51,590 Saya bukan sahaja tekan Enter, saya juga dilekukan, mengamalkan apa yang kita telah berkhotbah tentang gaya, 1040 01:05:51,590 --> 01:05:54,930 tetapi saya betul-betul bersebelahan dengan dunia. 1041 01:05:54,930 --> 01:05:58,410 Jadi mengapa ini? Pelayar hanya melakukan apa yang anda beritahu mereka lakukan. 1042 01:05:58,410 --> 01:06:04,010 Saya telah tidak diberitahu pelayar, "garis Break sini. Masukkan perenggan memecahkan sini." 1043 01:06:04,010 --> 01:06:07,820 Jadi pelayar, ia tidak kira jika saya memukul Pulangan 30 kali, 1044 01:06:07,820 --> 01:06:10,820 ia masih akan meletakkan hak saya seterusnya kepada dunia. 1045 01:06:10,820 --> 01:06:15,930 Apa yang saya benar-benar perlu lakukan di sini adalah mengatakan sesuatu seperti
, memasukkan baris. 1046 01:06:15,930 --> 01:06:17,940 >> Dan sebenarnya, satu baris adalah jenis perkara pelik 1047 01:06:17,940 --> 01:06:21,650 kerana anda tidak boleh benar-benar mula bergerak ke garisan lain, kemudian melakukan sesuatu, 1048 01:06:21,650 --> 01:06:25,380 dan kemudian berhenti bergerak ke baris baru. Ia adalah jenis operasi atom. 1049 01:06:25,380 --> 01:06:28,140 Samada anda melakukannya atau anda tidak lakukan. Anda menekan Enter atau anda tidak lakukan. 1050 01:06:28,140 --> 01:06:33,390 Jadi br adalah sedikit tag yang berbeza, dan jadi saya perlu untuk menyelesaikan kedua-dua terbuka dan tutup 1051 01:06:33,390 --> 01:06:35,230 semua sekali gus. 1052 01:06:35,230 --> 01:06:37,500 Sintaks yang ini. 1053 01:06:37,500 --> 01:06:41,760 Teknikalnya, anda boleh melakukan sesuatu seperti ini dalam beberapa versi HTML, 1054 01:06:41,760 --> 01:06:45,600 tetapi ini hanya bodoh kerana tidak ada sebab untuk memulakan dan menghentikan sesuatu 1055 01:06:45,600 --> 01:06:48,420 jika sebaliknya anda boleh melakukan semuanya sekali gus. 1056 01:06:48,420 --> 01:06:52,310 Sedarlah HTML5 yang tidak tegas menghendaki slash ini, 1057 01:06:52,310 --> 01:06:55,410 jadi anda akan melihat buku-buku teks dan sumber-sumber dalam talian yang tidak mempunyai ia, 1058 01:06:55,410 --> 01:06:59,780 tetapi untuk mengukur baik mari kita mengamalkan simetri bahawa kita telah melihat setakat ini. 1059 01:06:59,780 --> 01:07:02,870 Ini bermakna bahawa tag adalah kedua-dua dibuka dan ditutup. 1060 01:07:02,870 --> 01:07:05,220 Jadi sekarang mari saya menyimpan fail saya, kembali di sini. 1061 01:07:05,220 --> 01:07:10,240 Okay, jadi ia mula kelihatan lebih baik, kecuali Web saya tahu adalah jenis diklik, 1062 01:07:10,240 --> 01:07:13,610 dan lagi youtube sini nampaknya tidak membawa kepada apa-apa. 1063 01:07:13,610 --> 01:07:17,560 Itu kerana walaupun ia kelihatan seperti pautan, pelayar tidak tahu bahawa per se, 1064 01:07:17,560 --> 01:07:20,670 jadi saya perlu memberitahu pelayar bahawa ini adalah link. 1065 01:07:20,670 --> 01:07:22,620 >> Cara untuk melakukan ini adalah untuk menggunakan tag anchor: 1066 01:07:22,620 --> 01:07:26,770 01:07:35,900 = "Http://www.youtube.com"> 1068 01:07:35,900 --> 01:07:38,490 dan biarlah saya bergerak ini ke garis baru hanya jadi ia sedikit lebih mudah dibaca, 1069 01:07:38,490 --> 01:07:40,060 dan saya akan mengecutkan saiz fon. 1070 01:07:40,060 --> 01:07:43,890 Saya dilakukan lagi? Tidak akan menjadi dikotomi ini. 1071 01:07:43,890 --> 01:07:46,760 Ini tag, tag sauh, sememangnya mengambil sifat, 1072 01:07:46,760 --> 01:07:52,900 yang mengubah tingkah laku, dan nilai atribut itu nampaknya URL YouTube. 1073 01:07:52,900 --> 01:07:56,380 Tetapi notis dikotomi adalah bahawa hanya kerana itulah URL anda akan, 1074 01:07:56,380 --> 01:08:01,020 itu tidak bermakna yang telah menjadi perkataan yang anda menekankan dan membuat pautan. 1075 01:08:01,020 --> 01:08:03,960 Sebaliknya, yang boleh menjadi sesuatu seperti ini. 1076 01:08:03,960 --> 01:08:10,870 Jadi, saya perlu mengatakan berhenti membuat perkataan ini hyperlink dengan menggunakan tag anchor dekat. 1077 01:08:10,870 --> 01:08:12,650 Notis saya tidak melakukan ini. 1078 01:08:12,650 --> 01:08:15,890 1, ini hanya akan menjadi satu pembaziran masa semua orang dan ia tidak perlu. 1079 01:08:15,890 --> 01:08:19,290 >> Untuk menutup tag, anda hanya menyebut nama tag lagi. 1080 01:08:19,290 --> 01:08:21,800 Anda tidak menyatakan apa-apa sifat. 1081 01:08:21,800 --> 01:08:26,189 Jadi mari kita menyimpan, kembali. Okay, Voilà, kini ia adalah biru dan hiperpautan. 1082 01:08:26,189 --> 01:08:29,430 Jika saya klik, saya sebenarnya tidak pergi ke YouTube. 1083 01:08:29,430 --> 01:08:32,529 Jadi, walaupun laman web saya tidak di Internet, ia adalah sekurang-kurangnya HTML, 1084 01:08:32,529 --> 01:08:37,930 dan jika kita membiarkan Internet mengejar, kita sebenarnya akan berakhir di sini di youtube.com. 1085 01:08:37,930 --> 01:08:40,670 Dan saya boleh kembali dan di sini adalah laman web saya. Tetapi notis ini. 1086 01:08:40,670 --> 01:08:43,120 Jika anda pernah mendapat spam atau serangan phishing, 1087 01:08:43,120 --> 01:08:45,850 kini anda mempunyai keupayaan selepas hanya lima minit untuk melakukan perkara yang sama. 1088 01:08:45,850 --> 01:08:50,920 Kita boleh pergi ke sini dan melakukan sesuatu seperti www.badguy.com 1089 01:08:50,920 --> 01:08:59,319 atau apa sahaja laman web yang lengkap, dan kemudian anda boleh mengatakan mengesahkan akaun PayPal anda. 1090 01:08:59,319 --> 01:09:04,840 [Ketawa] Dan sekarang ini akan pergi ke badguy.com, yang saya tidak akan klik pada 1091 01:09:04,840 --> 01:09:08,000 kerana saya tidak mempunyai idea mana yang membawa. [Ketawa] 1092 01:09:08,000 --> 01:09:10,859 >> Tetapi kita kini mempunyai keupayaan untuk benar-benar berakhir di sana. 1093 01:09:10,859 --> 01:09:12,640 Jadi kita sedang benar-benar hanya mula menggaru permukaan. 1094 01:09:12,640 --> 01:09:15,830 Kami tidak pengaturcaraan per se; kita menulis bahasa markup. 1095 01:09:15,830 --> 01:09:18,569 Tetapi sebaik sahaja kita bulatkan perbendaharaan kata kita dalam HTML, 1096 01:09:18,569 --> 01:09:21,520 kami akan memperkenalkan PHP, bahasa pengaturcaraan sebenar 1097 01:09:21,520 --> 01:09:26,859 yang akan membolehkan kita untuk menjana HTML secara automatik, menjana CSS secara automatik, 1098 01:09:26,859 --> 01:09:29,430 supaya kita boleh bermula pada hari Rabu untuk melaksanakan, katakan, 1099 01:09:29,430 --> 01:09:31,700 enjin carian kami sendiri dan banyak lagi. 1100 01:09:31,700 --> 01:09:34,770 Tetapi lebih pada itu dalam beberapa hari. Kami akan melihat anda kemudian. 1101 01:09:34,870 --> 01:09:39,000 >> [CS50.TV]