1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [Тиждень 7] 2 00:00:02,440 --> 00:00:04,730 [David J. Малан - Гарвардський університет] 3 00:00:04,730 --> 00:00:07,490 [Це CS50. - CS50.TV] 4 00:00:07,490 --> 00:00:12,280 Добре. Ласкаво просимо назад. Це CS50, і це початок тижня 7. 5 00:00:12,280 --> 00:00:14,690 Два маленьких оголошення: 6 00:00:14,690 --> 00:00:18,150 Pset5 В даний час ведеться або скоро буде, 7 00:00:18,150 --> 00:00:21,590 і дозвольте мені сказати, чесно кажучи, це, як правило, серед більш складною 8 00:00:21,590 --> 00:00:24,460 завдання курсу наборів, тому дозвольте мені говорити про це зараз 9 00:00:24,460 --> 00:00:28,190 так що на цьому тижні більше, ніж коли-небудь ви не чекайте, поки, скажімо, в середу ввечері 10 00:00:28,190 --> 00:00:29,920 або в четвер вночі, щоб зануритися дюйма 11 00:00:29,920 --> 00:00:32,369 Це, безумовно, цікава PSET. Ми вважаємо, що це весело. 12 00:00:32,369 --> 00:00:36,110 Якщо ви дійсно отримаєте його повністю правильним і може кинути виклик так званого Великого ради, 13 00:00:36,110 --> 00:00:39,830 Ви будете мати можливість змагатися з деякими співробітниками курсу 14 00:00:39,830 --> 00:00:41,620 і деякі з ваших однокласників. 15 00:00:41,620 --> 00:00:44,670 Що Великої Ради є один раз у вас є для перевірки орфографії роботи, 16 00:00:44,670 --> 00:00:48,860 Ви будете в змозі піти в cs50.net після запуску команди, 17 00:00:48,860 --> 00:00:52,430 чисто відмовитися, і потім кількість часу і об'єм оперативної пам'яті і більш 18 00:00:52,430 --> 00:00:56,130 , Які ви використовували в своїй реалізації будуть виставлені тут, на домашній сторінці курсу. 19 00:00:56,130 --> 00:00:59,740 Ви помітите, що ціла купа цих людей тут вказані в якості співробітників 20 00:00:59,740 --> 00:01:04,220 так як в минулі вихідні, співробітники думали, що це було б цікаво прагнуть перевершити один одного. 21 00:01:04,220 --> 00:01:07,390 Так розумію, що мета тут не перевершити персоналу. 22 00:01:07,390 --> 00:01:09,790 Навіть я тільки тут, під номером 13. 23 00:01:09,790 --> 00:01:13,790 Чисто вибрати в, але це можливість побачити, як мало оперативної пам'яті 24 00:01:13,790 --> 00:01:16,790 і як мало процесора секунд ви можете використовувати VIS-A-VIS деякі з ваших однокласників. 25 00:01:16,790 --> 00:01:20,540 >> І я визнаю, що Kevin Michael Schmid, 26 00:01:20,540 --> 00:01:23,750 В даний час номер 1 позицію як одного з ТФ, 27 00:01:23,750 --> 00:01:28,120 Це реалізація, яку ми називаємо не представляється можливим 28 00:01:28,120 --> 00:01:32,700 враховуючи, що він використовує майже 0 оперативної пам'яті і майже 0 секунд для завантаження. 29 00:01:32,700 --> 00:01:35,670 Таким чином, ми будемо дбати про форум Кевін. [Сміх] 30 00:01:35,670 --> 00:01:40,950 Є певні навички, Кевін ставить на тест тут. 31 00:01:40,950 --> 00:01:45,280 Одна з речей, ми думали, що робити теж зараз CS50x є тижня в прогрес, 32 00:01:45,280 --> 00:01:49,520 і ви, хлопці, така ж частина цього експерименту, як ті студенти. 33 00:01:49,520 --> 00:01:53,720 Ми запитали їх, як частина їх pset0, який був так само представити проект до подряпин 34 00:01:53,720 --> 00:01:58,280 становлять інтерес для них - гра, інтерактивні твори мистецтва, анімації і т.п. - 35 00:01:58,280 --> 00:02:03,700 1 - 2-хвилинне відео, якщо вони хотіли б, щоб привітатися зі світом і хто вони насправді. 36 00:02:03,700 --> 00:02:06,780 Я думав, що я поділюся з вами всього кілька відео, які були представлені досі 37 00:02:06,780 --> 00:02:10,759 тому що для нас, в штабі принаймні, це дійсно була захоплюючою 38 00:02:10,759 --> 00:02:14,220 і надихаючим, щоб побачити цих людей з усього світу - країн по всьому світу - 39 00:02:14,220 --> 00:02:18,160 налаштуванні на, всіх речей, на курс інформатики в Інтернеті, 40 00:02:18,160 --> 00:02:20,410 чи є це тому, що вони хочуть продовжити свою освіту, 41 00:02:20,410 --> 00:02:22,300 вони хочуть взяти свою кар'єру в новому напрямку, 42 00:02:22,300 --> 00:02:24,390 вони хочуть, щоб заповнити прогалини у своїх знаннях, 43 00:02:24,390 --> 00:02:27,190 тому деякі з тих же причин, що ви, хлопці, можливо, були тут. 44 00:02:27,190 --> 00:02:31,090 >> Тому я наведу вам один такий студент тут. Ви можете збільшити гучність тільки трохи. 45 00:02:31,090 --> 00:02:35,520 Ось один із 1-хвилинний наших студентів уявлень. 46 00:02:35,520 --> 00:02:40,380 Здрастуй, світ. Я студент промислового будівництва тут, в Малазі, Іспанія. 47 00:02:40,380 --> 00:02:45,840 Я дуже радий цій онлайн-курс, тому що я люблю інформатику, я справді роблю, 48 00:02:45,840 --> 00:02:48,880 і я дійсно ціную, що я отримую, щоб вивчити її. 49 00:02:48,880 --> 00:02:51,940 І те, що я можу навчитися же все ви, хлопці, 50 00:02:51,940 --> 00:02:57,040 але замість того, щоб в Гарварді я в Малазі, яким дивним є те, що? 51 00:02:57,040 --> 00:03:02,040 Ну, я Фернандо, і це CS50. Див вас, хлопці. 52 00:03:02,040 --> 00:03:07,100 [Сміх] Інший кліп нам особливо подобається, ви виявите, що англійське цього пана не так сильно. 53 00:03:07,100 --> 00:03:11,520 Схоже, він його машина переводиться, таким чином, переклади самі трохи недосконалим, 54 00:03:11,520 --> 00:03:15,790 але це було одним з наших улюблених досі, а також. 55 00:03:25,080 --> 00:03:29,980 [♪ ♪] 56 00:03:29,980 --> 00:03:32,370 Здрастуй, світ. [Говорить по-японськи] 57 00:03:32,370 --> 00:03:39,830 [Я повинен вітати на японській мові, тому що мій англійський дуже ненадійно.] 58 00:03:39,830 --> 00:03:45,380 [Я передав послання до вас з міста Гіфу, Японія.] 59 00:03:45,380 --> 00:03:49,820 [Я можу бути студентом в перший раз в 20 років, як це можна бачити.] 60 00:03:49,820 --> 00:03:54,640 [Я дуже вдячна Гарвардського університету, який дав мені цю можливість і EDX.] 61 00:03:54,640 --> 00:04:01,510 [Гольф-гітара і моя улюблена річ працює.] [Сміх] 62 00:04:01,510 --> 00:04:05,750 [♪ ♪] 63 00:04:05,750 --> 00:04:10,790 [Чому ви думаєте, що я намагався взяти участь в cs50x.] 64 00:04:10,790 --> 00:04:14,990 [Гарвардського університету, це моя туга.] 65 00:04:14,990 --> 00:04:19,740 [Особливо, якщо я далекого присутності жив у Японії.] 66 00:04:19,740 --> 00:04:26,680 [Я хотів спробувати відразу знають про існування таких EDX, коли.] 67 00:04:26,680 --> 00:04:32,500 [Чи не здається вам, щоб ви не пов'язане з віком навчання I.] 68 00:04:32,500 --> 00:04:38,350 [CS50 моя туга. Мене звати Kazu, і це CS50.] 69 00:04:38,350 --> 00:04:43,090 [♪ ♪] [оплески і крики] 70 00:04:43,090 --> 00:04:49,220 Інша улюблена наша була тут це подання від когось. 71 00:04:51,070 --> 00:04:55,380 [♪ ♪] [Малан] Google, якщо ви не знайомі з цим мемом. 72 00:04:55,380 --> 00:05:01,480 >> І тоді, нарешті, кілька інших, які отримали відповідав, що, можливо, виграти чарівні нагороду. 73 00:05:01,480 --> 00:05:06,820 [Студентів] Ой! >> [Малан] Ми повинні слухати. Це короткий, так що слухайте уважно. 74 00:05:08,580 --> 00:05:11,150 [Жінкою-спікером] Як тебе звуть? >> Луї. 75 00:05:11,150 --> 00:05:16,120 [Жінкою-спікером] Що це? >> [Сміх] CS50. [Сміх] 76 00:05:16,120 --> 00:05:19,510 [Малан] Він двох дублів, однак. 77 00:05:19,510 --> 00:05:22,240 Тут ми йдемо, останній. 78 00:05:23,030 --> 00:05:26,980 Мене звати Луї, і це CS50. 79 00:05:26,980 --> 00:05:30,250 [Сміється] У цьому і полягає CS50x. 80 00:05:30,250 --> 00:05:33,230 Спасибі всім тим з вас, слідуючи вздовж будинку 81 00:05:33,230 --> 00:05:35,620 , Які були причасті до цих пір. 82 00:05:35,620 --> 00:05:39,510 Сьогодні ми закінчуємо обговорення структур даних, 83 00:05:39,510 --> 00:05:41,160 принаймні деякі з найбільш фундаментальних, 84 00:05:41,160 --> 00:05:44,760 а потім ми продовжимо нашу розмову про HTML і веб-програмування. 85 00:05:44,760 --> 00:05:48,520 Дійсно, ми провели останні сім тижнів деякі, дивлячись на основи програмування - 86 00:05:48,520 --> 00:05:50,450 алгоритми, структури даних і т.п. - 87 00:05:50,450 --> 00:05:53,050 і C, як ви, можливо, випробували досі, 88 00:05:53,050 --> 00:05:57,060 не обов'язково є найбільш доступних мов 89 00:05:57,060 --> 00:05:59,090 з яким для реалізації деяких з цих ідей. 90 00:05:59,090 --> 00:06:01,880 І так починаючи з цього тижня і на наступному тижні, а потім наступний, 91 00:06:01,880 --> 00:06:07,110 ми, нарешті, бути в стані переходу від С, який, як відомо, досить низького рівня мови, 92 00:06:07,110 --> 00:06:11,190 до речей більш високого рівня, в тому числі PHP, JavaScript, тощо, 93 00:06:11,190 --> 00:06:14,850 що ми побачимо спиратися на ті ж уроки, що ми дізналися за останні кілька тижнів, 94 00:06:14,850 --> 00:06:19,430 але ви побачите, що оголошення речей, як масиви і хеш-таблиці та пошук і сортування 95 00:06:19,430 --> 00:06:23,370 стало набагато легше, тому що самі мови, ми почнемо використання 96 00:06:23,370 --> 00:06:25,290 буде ставати все більш потужними. 97 00:06:25,290 --> 00:06:27,410 Але, по-перше, застосування дерев. 98 00:06:27,410 --> 00:06:30,240 Це дуже часто в ці дні потрібно стиснути інформацію. 99 00:06:30,240 --> 00:06:34,770 В якому контексті ви хочете стиснути деякі види цифрової інформації? 100 00:06:37,190 --> 00:06:39,670 >> Так. >> [Студент] Якщо вам потрібно, щоб відправити його через Інтернет. 101 00:06:39,670 --> 00:06:41,450 Так, коли ви хочете відправити щось через Інтернет. 102 00:06:41,450 --> 00:06:44,950 Якщо ви хочете завантажити великий файл, він ідеально підходить, якщо хтось на іншому кінці 103 00:06:44,950 --> 00:06:48,760 стиснув, що файл, використовуючи формат ZIP або щось на зразок того 104 00:06:48,760 --> 00:06:53,760 так що ви посилаєте менше біт, ніж могли б бути передані. 105 00:06:53,760 --> 00:06:55,500 Отже, як ви стискати інформацію? 106 00:06:55,500 --> 00:07:00,540 Це все зводиться до використання меншої кількості бітів, ніж вимагається за замовчуванням. 107 00:07:00,540 --> 00:07:03,220 Але це начебто цікаво, тому що згадайте тижнів 0 і 1 108 00:07:03,220 --> 00:07:07,370 коли ми говорили про ASCII і бінарні і ми говорили про ASCII, зокрема, 109 00:07:07,370 --> 00:07:10,690 як за допомогою 8 біт для представлення літери алфавіту 110 00:07:10,690 --> 00:07:16,120 так що буква представлена ​​65, нижній регістр число 97, 111 00:07:16,120 --> 00:07:21,210 і тим не менше ви уявляєте 65 або 97, ви використовуєте 7 або 8 біт. 112 00:07:21,210 --> 00:07:24,120 Але заковика в тому, що деякі букви в англійському алфавіті 113 00:07:24,120 --> 00:07:26,230 , Які не так популярні, як інші. 114 00:07:26,230 --> 00:07:31,600 Z не все, що популярно, Q не все, що популярно, але А і Е є супер популярним. 115 00:07:31,600 --> 00:07:37,280 І тим не менше за всі ці листи, за замовчуванням світі використовує таку ж кількість бітів, всього в 8. 116 00:07:37,280 --> 00:07:42,690 Таким чином, чи не було б розумніше, якби замість 8 біт для кожного листа, 117 00:07:42,690 --> 00:07:47,440 навіть самі рідко використовувані як Q і Z, 118 00:07:47,440 --> 00:07:51,910 що, якщо ми використали менше біт для А і Е і S і найпопулярніших літер 119 00:07:51,910 --> 00:07:55,000 і використовується більше бітів для менш популярних букви, 120 00:07:55,000 --> 00:07:57,770 Ідея в тому, оптимізувати давайте для загального випадку, 121 00:07:57,770 --> 00:08:01,160 , Яка є темою в області комп'ютерної науки в спробі оптимізувати те, що трапиться саме 122 00:08:01,160 --> 00:08:05,310 і витратити ще трохи часу, трохи більше простору на те, що, так, може відбутися 123 00:08:05,310 --> 00:08:07,680 але не обов'язково так часто. 124 00:08:07,680 --> 00:08:09,330 Отже, давайте розглянемо приклад. 125 00:08:09,330 --> 00:08:12,610 >> Припустимо, що ми хочемо, щоб кодувати інформацію досить ефективно. 126 00:08:12,610 --> 00:08:15,090 Ви, можливо, виросли знаючи дещо про азбуки Морзе, 127 00:08:15,090 --> 00:08:17,450 і цілком імовірно, ви не знаєте, фактичний код, 128 00:08:17,450 --> 00:08:21,750 але ви, можливо, пам'ятаєте, що це принаймні в цій серії точок і тире. 129 00:08:21,750 --> 00:08:26,640 Це досить ефективне кодування, і помітили, що найпопулярніші літери - наприклад, E - 130 00:08:26,640 --> 00:08:28,980 використовує найкоротші звукових сигналів. 131 00:08:28,980 --> 00:08:31,740 Азбука Морзе це все про біп-біп-біп-біп-біп-біп та проведення тонах 132 00:08:31,740 --> 00:08:34,799 або протягом короткого періоду часу або тривалих періодів часу. 133 00:08:34,799 --> 00:08:40,330 E, так як позначається крапкою, це супер короткий звуковий сигнал, тільки звуковий сигнал, і що буде представляти E. 134 00:08:40,330 --> 00:08:43,960 На відміну від T буде більше звуковий сигнал, як сигнал [подовжує звук] 135 00:08:43,960 --> 00:08:45,710 і що буде представляти T. 136 00:08:45,710 --> 00:08:48,840 Але це все ще досить короткою, тому що, навпаки, якщо ви подивитеся на Z, 137 00:08:48,840 --> 00:08:52,690 щоб висловити Z ви підете біп, біп [більше звуку], біп, біп [короткий звук]. 138 00:08:52,690 --> 00:08:55,360 Так що це більше, тому що це менш поширене. 139 00:08:55,360 --> 00:08:58,150 Але Гоча тут є те, що код Морзе трохи недоліків 140 00:08:58,150 --> 00:09:00,610 в тому, що це не відразу програватися. 141 00:09:00,610 --> 00:09:07,350 Наприклад, припустимо, що ви чуєте на деякі кінці дроту звуковий сигнал [короткий], звуковий сигнал [довго]. 142 00:09:07,350 --> 00:09:12,480 Яке повідомлення я тільки що отримав? Крапки і тире. Що це уявляєте? 143 00:09:12,480 --> 00:09:15,330 [Студент] A. >> [Малан] Може бути. 144 00:09:15,330 --> 00:09:18,270 Це також може бути E подальшим T. 145 00:09:18,270 --> 00:09:23,390 Іншими словами, азбука Морзе, хоча він використовує цей принцип оптимізації кута випадку, 146 00:09:23,390 --> 00:09:26,250 воно не піддається безпосередній декодіруемий. 147 00:09:26,250 --> 00:09:29,850 Тобто, людина, яка чує або отримання цих крапок і тире 148 00:09:29,850 --> 00:09:34,540 повинен якимось чином з'ясувати, де розриви між буквами, 149 00:09:34,540 --> 00:09:39,660 тому що, якщо ви не знаєте, де ці перерви, ви можете змішувати для ET або навпаки. 150 00:09:39,660 --> 00:09:43,880 >> Так що ж ви робите? В азбуці Морзе можна просто пауза між кожною з букв. 151 00:09:43,880 --> 00:09:47,660 Але зупиняючись це свого роду лічильник, щоб весь сенс прискорення речі. 152 00:09:47,660 --> 00:09:52,880 Так що, якщо замість цього ми придумали код, де не було цієї поганої ситуації 153 00:09:52,880 --> 00:09:56,570 де E є префіксом, наприклад, з - 154 00:09:56,570 --> 00:10:00,020 Іншими словами, якщо б ми могли переконатися, що моделі як і раніше короткі для популярної літери 155 00:10:00,020 --> 00:10:04,850 довго для менш популярних букв, але немає ніякої можливої ​​плутанини? 156 00:10:04,850 --> 00:10:08,930 Людина на ім'я Хаффман років тому придумали цю схему називають кодування Хаффмана 157 00:10:08,930 --> 00:10:12,390 що насправді використовує одну зі структур даних, ми провели трохи часу на розмови про 158 00:10:12,390 --> 00:10:16,560 Минулого тижня, що дерева, бінарні дерева конкретно - 159 00:10:16,560 --> 00:10:19,710 Сенс бінарне дерево, що воно має не більше 2 дітей. 160 00:10:19,710 --> 00:10:22,720 Вона, може бути, ліва дитини, може бути, прав дитини, от і все. 161 00:10:22,720 --> 00:10:26,510 Отже, нехай лише заради обговорення, що хтось хоче, щоб відправити повідомлення 162 00:10:26,510 --> 00:10:31,270 який виглядає наступним чином. Це повна маячня, але він складається з As, Bs, Cs, Ds, і Es. 163 00:10:31,270 --> 00:10:34,890 І якщо ви насправді підрахувати всі As, Bs, Cs, Ds, і Es 164 00:10:34,890 --> 00:10:36,870 , А потім розділити на загальну кількість літер, 165 00:10:36,870 --> 00:10:42,710 ця маленька графіка тут говориться, що 45% з букв Es, 20% As, 166 00:10:42,710 --> 00:10:45,010 10% B, і так далі. 167 00:10:45,010 --> 00:10:47,330 Отже, іншими словами, припустимо, що лапки тут 168 00:10:47,330 --> 00:10:49,080 тільки деякі повідомлення, які ви хочете відправити. 169 00:10:49,080 --> 00:10:52,180 Це, виявляється, дурниця просто так ми можемо використовувати як кілька літер наскільки це можливо, 170 00:10:52,180 --> 00:10:55,220 але це дійсно так, що E залишається найпопулярнішим, 171 00:10:55,220 --> 00:11:01,450 і B і C є найменш популярними, принаймні, з цих 5 букв алфавіту. 172 00:11:01,450 --> 00:11:04,040 Так як ми можемо йти про придумують кодування, 173 00:11:04,040 --> 00:11:08,430 двійкового кодування, візерунок з 0 і 1 для кожного з цих букв 174 00:11:08,430 --> 00:11:14,820 таким чином, що E знаходиться в декількох хвилинах картини і, можливо, B і C є трохи більше моделей, 175 00:11:14,820 --> 00:11:19,270 Знову ж таки, ідея в тому, що ми хочемо використовувати меншу кількість біт більшу частину часу 176 00:11:19,270 --> 00:11:21,790 і більш біт тільки один раз в той час. 177 00:11:21,790 --> 00:11:26,070 За словами кодування Хаффмана, ви можете створити ліс дерев. 178 00:11:26,070 --> 00:11:31,190 Там начебто сюжетна лінія тут, що включає в себе дерева, а також процес побудови їх. 179 00:11:31,190 --> 00:11:32,420 Давайте почнемо. 180 00:11:32,420 --> 00:11:36,140 >> Я пропоную вам почати з цього лісу, так би мовити, з 5 дерев, 181 00:11:36,140 --> 00:11:38,260 кожен з яких є досить нерозумно дерева. 182 00:11:38,260 --> 00:11:42,800 Дерево складається з всього одного вузла, як представлено тут кругом. 183 00:11:42,800 --> 00:11:45,310 Таким чином, кожна з цих речей можуть бути структури C 184 00:11:45,310 --> 00:11:50,200 і всередині структури C може бути з плаваючою крапкою являють підрахунку частоти 185 00:11:50,200 --> 00:11:52,510 і тоді, можливо, символ являє листі. 186 00:11:52,510 --> 00:11:56,470 Так що думаю про цих вузлах, як тільки всі старі структури C, але, на даний момент, більш високий рівень. 187 00:11:56,470 --> 00:12:01,230 Це ліси з 5 дерев, кожне з яких є тільки один вузол. 188 00:12:01,230 --> 00:12:06,830 Що Хаффман пропонована в тому, що ми починаємо об'єднувати ці дерева 189 00:12:06,830 --> 00:12:11,140 , Які мають найменший розраховує частоту в трохи більше дерев 190 00:12:11,140 --> 00:12:13,490 , Поєднуючи їх із новим кореневим вузлом. 191 00:12:13,490 --> 00:12:17,560 Таким чином, серед букв тут, зверніть увагу, що для зручності я сортував їх зліва направо, 192 00:12:17,560 --> 00:12:21,420 хоча це не є строго обов'язковим, і зверніть увагу, що найменше вузлів 193 00:12:21,420 --> 00:12:23,930 В даний час 10% і 10%. 194 00:12:23,930 --> 00:12:28,940 Так Хаффман запропонував, щоб ми об'єднуємо ці 2 найменше вузлів в нове дерево 195 00:12:28,940 --> 00:12:34,450 шляхом введення нового батьківського вузла, а потім дати, що батьки дитини лівому і правому дитини 196 00:12:34,450 --> 00:12:37,720 де B довільно лівої і C довільно право. 197 00:12:37,720 --> 00:12:41,590 А потім Хаффман Крім того, пропонується Давайте просто думати про лівому дитини 198 00:12:41,590 --> 00:12:44,790 В одному з цих дерев завжди, як бути представленим на 0 199 00:12:44,790 --> 00:12:47,890 і право дитини завжди, як бути представленим номером 1. 200 00:12:47,890 --> 00:12:50,680 >> Це не має значення, якщо ви переверніть їх так довго, як ви послідовні. 201 00:12:50,680 --> 00:12:54,650 Так що тепер у нас є чотири дерева в цьому лісі. 202 00:12:54,650 --> 00:12:58,050 І я кажу чотири, тому що зараз дерево зліва - 203 00:12:58,050 --> 00:13:00,570 і це не так багато дерева в тому сенсі, що він росте таким чином, 204 00:13:00,570 --> 00:13:05,170 це більше схоже на генеалогічне дерево, де зараз 0,2 є свого роду батько двох дітей - 205 00:13:05,170 --> 00:13:07,930 Відзначимо, що в батьківський що ми намалювали 0,2. 206 00:13:07,930 --> 00:13:13,370 Ми додали частоти відліків двох дітей і з урахуванням нових вузлів загальної суми. 207 00:13:13,370 --> 00:13:15,310 Так що тепер ми просто повторити цей процес. 208 00:13:15,310 --> 00:13:19,490 Знайти два найменших вузлів, а потім об'єднати їх в нове дерево 209 00:13:19,490 --> 00:13:21,380 , А потім повторити процес далі. 210 00:13:21,380 --> 00:13:26,390 Зараз у нас є кілька кандидатів, 20%, 15%, а ще 20%. 211 00:13:26,390 --> 00:13:29,780 У цьому випадку, ми повинні розірвати зв'язок. Ми можемо робити це довільно. 212 00:13:29,780 --> 00:13:31,540 Ми просто повинні робити це постійно. 213 00:13:31,540 --> 00:13:33,760 У цьому випадку, я буду йти з довільним один ліворуч, 214 00:13:33,760 --> 00:13:39,880 і я тепер об'єднати 20% і 15%, щоб дати мені нових батьків називають 35%, 215 00:13:39,880 --> 00:13:46,310 , Лівий дитина 0, чиє право дитини 1, і тепер у нас є тільки три дерева в лісі. 216 00:13:46,310 --> 00:13:47,960 Ви, можливо, може бачити, де це відбувається. 217 00:13:47,960 --> 00:13:51,150 Якщо ми повторимо це ще пару раз, ми збираємося мати лише одну більше дерев, 218 00:13:51,150 --> 00:13:53,900 , Всі ребра якого позначені 0 і 1. 219 00:13:53,900 --> 00:13:55,710 Давайте зробимо це знову. 220 00:13:55,710 --> 00:14:02,600 35% кореня, дерева. 20% і 45%, так що ми збираємося об'єднати 35% і 20%. 221 00:14:02,600 --> 00:14:05,610 Тепер у нас є це дерево тут. Ми додаємо їх разом, у нас є 55%. 222 00:14:05,610 --> 00:14:07,910 Зараз є тільки два дерева в лісі. 223 00:14:07,910 --> 00:14:11,900 Ми робимо це в останній раз, і, сподіваюся, математично всі частоти складаються 224 00:14:11,900 --> 00:14:15,570 тому що вони повинні, так як ми вирахували їх з самого початку йти, щоб додати до 100%. 225 00:14:15,570 --> 00:14:17,960 І тепер у нас є одне дерево. 226 00:14:17,960 --> 00:14:20,580 Таким чином, це дерево Хаффмана. 227 00:14:20,580 --> 00:14:24,400 Це почасти знадобився час, щоб дістатися на словах, але насправді з циклу 228 00:14:24,400 --> 00:14:27,620 або за допомогою рекурсивної функції, можна побудувати цю річ досить швидко. 229 00:14:27,620 --> 00:14:32,440 Так що тепер у нас є один новий вузол, і всі ці внутрішні вузли були malloc'd, 230 00:14:32,440 --> 00:14:34,690 Імовірно, на цьому шляху. 231 00:14:34,690 --> 00:14:38,650 Так що тепер на вершині цього дерева ми маємо 100%, але тепер помічаю у нас є шлях 232 00:14:38,650 --> 00:14:43,780 З цього нового пра-пра-пра-прабатьків до всіх пра-пра-пра-внуки 233 00:14:43,780 --> 00:14:45,930 всю дорогу на дні, щоб все листя. 234 00:14:45,930 --> 00:14:52,840 >> Те, що ми збираємося зробити зараз, це запропонувати, що для того, щоб представляти букву Е, 235 00:14:52,840 --> 00:14:55,670 ми будемо просто використовувати номер 1. Чому? 236 00:14:55,670 --> 00:15:01,000 Тому що якщо ми пройдемо цей дерева від остаточного корінь вниз до листа відомий як E, 237 00:15:01,000 --> 00:15:06,050 ми слідуємо тільки один край, правий край, і це, звичайно, помічені в правому верхньому кутку 1. 238 00:15:06,050 --> 00:15:11,550 Таким чином, імплікація тут Хаффман, що кодування E в двійковому повинно бути просто 1. 239 00:15:11,550 --> 00:15:14,490 І це біса ефективно. Не можу отримати будь-яку менше, ніж це. 240 00:15:14,490 --> 00:15:18,350 З іншого боку, збирається бути представлені, якщо слідувати логіці, 241 00:15:18,350 --> 00:15:21,610 тим, що картина біт замість цього? 01. 242 00:15:21,610 --> 00:15:25,500 Таким чином, щоб добратися до, ми стартуємо з кореня і йдемо наліво, а потім ми йдемо направо, 243 00:15:25,500 --> 00:15:28,580 яка означає, що ми пішли 0, а потім 1. 244 00:15:28,580 --> 00:15:32,810 Таким чином, ми будемо представляти листи з малюнком 0 і 1. 245 00:15:32,810 --> 00:15:36,010 А тепер помічаю у нас вже є властивість безпосередній декодіруемий 246 00:15:36,010 --> 00:15:38,090 що ми не маємо в азбуці Морзе. 247 00:15:38,090 --> 00:15:42,840 Хоча обидві ці моделі є досить короткий - Е 1 біт, становить 2 біти - 248 00:15:42,840 --> 00:15:45,080 помітите, що вони не можуть бути сплутані одного чи з іншого боку, 249 00:15:45,080 --> 00:15:54,870 тому що, якщо ви бачите в 1 це повинно бути E, якщо ви бачите 0, то 1 він, очевидно, повинен бути A. 250 00:15:54,870 --> 00:15:58,410 Крім того, що D? 001. 251 00:15:58,410 --> 00:16:01,440 Що таке C? 0001. 252 00:16:01,440 --> 00:16:05,320 А що таке B? 0000. 253 00:16:05,320 --> 00:16:09,550 І знову, тому що всі листи, які ми дбаємо про знаходимося на листках 254 00:16:09,550 --> 00:16:13,890 і ніхто з них є свого роду посередниками на шляху від кореня до листа, 255 00:16:13,890 --> 00:16:18,760 немає ризику з'єднуючи різні кодування 2 букви " 256 00:16:18,760 --> 00:16:22,300 тому що всі ці бітів є детермінованими. 257 00:16:22,300 --> 00:16:25,280 0000 завжди буде B. 258 00:16:25,280 --> 00:16:29,480 Там немає вузлів десь посередині, що ви могли сплутати одну літеру за одною. 259 00:16:29,480 --> 00:16:31,150 Так що ж мається на увазі тут? 260 00:16:31,150 --> 00:16:35,080 >> Найпопулярніший лист - в цьому випадку E - отримав найкоротші кодування, 261 00:16:35,080 --> 00:16:37,430 Отримав наступний найкоротший кодування, 262 00:16:37,430 --> 00:16:41,390 і B і C, які ми вже знали з самого початку йти було виду найменш популярним 263 00:16:41,390 --> 00:16:45,390 на 10% частоту кожного, вони отримали найдовший кодування. 264 00:16:45,390 --> 00:16:49,410 І що це означає тепер, що якщо ви хочете відправити повідомлення, яке стиснуте 265 00:16:49,410 --> 00:16:51,950 через Інтернет або по електронній пошті і т.п., 266 00:16:51,950 --> 00:16:56,730 а не за допомогою стандартного ASCII, ви можете відправити Хаффман закодоване повідомлення 267 00:16:56,730 --> 00:17:01,720 згідно з яким, якщо ви хочете відправити лист E, ви посилаєте тільки один біт. 268 00:17:01,720 --> 00:17:05,680 Якщо ви хочете відправити, ви посилаєте 2 бітами, 01, замість відправки 8 біт 269 00:17:05,680 --> 00:17:10,190 потім ще 8 бітів слідують ще 8 біт і так далі. 270 00:17:10,190 --> 00:17:11,940 Але є Гоча тут. 271 00:17:11,940 --> 00:17:17,079 Це не досить просто побудувати це дерево, а потім почати передачу від Аліси до Боба 272 00:17:17,079 --> 00:17:20,010 коротше бітів, рядок з ASCII, 273 00:17:20,010 --> 00:17:23,140 тому що Еліс також повинен повідомити про те, що Боб 274 00:17:23,140 --> 00:17:26,880 якщо Боб збирається бути в змозі прочитати її стисненим повідомлення? 275 00:17:26,880 --> 00:17:30,770 [Нерозбірливо відповідь студента] >> Що це таке? 276 00:17:30,770 --> 00:17:32,310 [Нерозбірливо відповідь студента] >> З чого дерево. 277 00:17:32,310 --> 00:17:35,160 Або навіть більш конкретно, то, що ці кодування, 278 00:17:35,160 --> 00:17:39,010 тим більше, що під час цієї історії ми прийняли рішення виклику в одній точці. 279 00:17:39,010 --> 00:17:43,640 Пам'ятайте, що ми повинні були вибрати довільно між 2 різними вузлами 20%? 280 00:17:43,640 --> 00:17:49,800 Так що це не той випадок, Боб, одержувач, може просто відновити дерево на своєму 281 00:17:49,800 --> 00:17:53,390 тому що, можливо, він буде створювати дерево трохи відрізняється від Аліси. 282 00:17:53,390 --> 00:17:56,670 Крім того, Боб навіть не знаю, що оригінальне повідомлення 283 00:17:56,670 --> 00:18:00,770 оскільки єдине, що Аліса посилає його, звичайно, є стислим повідомленні. 284 00:18:00,770 --> 00:18:05,900 >> Таким чином, вилов із стисненням, як це, що, так, Аліса може врятувати багато бітів 285 00:18:05,900 --> 00:18:09,900 шляхом відправлення 1 для E і 01 і так далі, 286 00:18:09,900 --> 00:18:15,180 але вона також повинна повідомити Бобу, що відображення між літерами і біти 287 00:18:15,180 --> 00:18:19,620 тому що вони не можуть чітко покладатися тільки на ASCII більше, якщо ми не використовуємо ASCII. 288 00:18:19,620 --> 00:18:22,200 Таким чином, вона може або відправити його деревом чи інакше - 289 00:18:22,200 --> 00:18:26,600 запишіть його, зберігати його у вигляді двійкових даних або щось подібне до цього - 290 00:18:26,600 --> 00:18:30,280 або просто послати йому трохи шпаргалку, файл Excel, який показує відображення. 291 00:18:30,280 --> 00:18:36,480 Таким чином, ефективність стиснення дійсно припускає, що повідомлення, які ви відправляєте 292 00:18:36,480 --> 00:18:40,230 досить великий, принаймні, середнього, 293 00:18:40,230 --> 00:18:42,180 тому що, якщо ви відправляєте супер коротке повідомлення, 294 00:18:42,180 --> 00:18:45,390 якщо ви просто хочете відправити повідомлення БАД, які, трапляється, слово, яке ми може означати тут, 295 00:18:45,390 --> 00:18:49,550 B-A-D, ви, ймовірно, будете використовувати меншу кількість біт, 296 00:18:49,550 --> 00:18:53,130 але заковика в тому, якщо ви також повинні повідомити Бобу, що дерево 297 00:18:53,130 --> 00:18:57,530 або те, що ці кодування, ви будете, ймовірно, переважують всі заощадження 298 00:18:57,530 --> 00:19:00,110 наявності стисненого речі з самого початку. 299 00:19:00,110 --> 00:19:02,210 Так що це дійсно може бути так, що якщо ви спробуєте стисненні 300 00:19:02,210 --> 00:19:05,330 навіть з чимось на зразок поштовий індекс або формати файлів ви можете бути знайомі з - 301 00:19:05,330 --> 00:19:07,780 досить невеликі файли, навіть порожні файли - 302 00:19:07,780 --> 00:19:10,930 Іноді ці файли можуть отримати більше і не менше. 303 00:19:10,930 --> 00:19:14,320 Але реально, що відбувається тільки для невеликих розмірів файлу, 304 00:19:14,320 --> 00:19:16,920 так що він не збирається робити гігабайт файлів складає 2 Гб; 305 00:19:16,920 --> 00:19:19,480 Ми дійсно говоримо байт або просто пару кілобайт. 306 00:19:19,480 --> 00:19:22,330 >> Деякі програми, як поштовий досить розумні, щоб розуміти, що, 307 00:19:22,330 --> 00:19:24,590 "Ви збираєтеся витратити більше бітів стиснення цього". 308 00:19:24,590 --> 00:19:27,460 "Нехай мене не турбують стискаючи його для вас на всіх". 309 00:19:27,460 --> 00:19:30,160 Так що це лише один із способів потім стиснути текстовий формат. 310 00:19:30,160 --> 00:19:32,300 Ми могли б реалізувати щось подібне в C. 311 00:19:32,300 --> 00:19:35,370 Наприклад, ось як ми могли б являти собою вузол в цьому дереві 312 00:19:35,370 --> 00:19:39,320 де у нас є символ на символ, плаваючі значення частоти, 313 00:19:39,320 --> 00:19:42,250 і, як ми бачили, з іншими нашими структурами даних, 2 покажчики, 314 00:19:42,250 --> 00:19:47,080 1 вліво дитини, 1 вправо, кожний з яких може бути NULL, 315 00:19:47,080 --> 00:19:50,850 але якщо ні, це відноситься до лівих дитини та право дитини. 316 00:19:50,850 --> 00:19:55,130 Так що ж тоді кодування Хаффмана, і це один із способів, ви можете йти про стиснення інформації, 317 00:19:55,130 --> 00:19:57,880 і це, безумовно, одна з найбільш проста в реалізації 318 00:19:57,880 --> 00:20:00,830 в контексті, скажімо, дані минулого тижня структур, 319 00:20:00,830 --> 00:20:03,250 хоча навіть більш складні алгоритми існують 320 00:20:03,250 --> 00:20:08,220 що можна зробити ще більш складною мутації ваших даних. 321 00:20:08,220 --> 00:20:11,640 Будь-які питання, то на дерева, бінарні дерева, або стиснення тексту? 322 00:20:11,640 --> 00:20:15,590 [Студент] Є деяка двозначність, як якщо б [нерозбірливо] розділилася на 01, 323 00:20:15,590 --> 00:20:19,160 то 011 буде неоднозначним, так? 324 00:20:19,160 --> 00:20:22,730 [Нерозбірливо] >> Хороше питання. Неоднозначність. 325 00:20:22,730 --> 00:20:25,940 Дозвольте мені коротко, посилаючись на це фото тут. 326 00:20:25,940 --> 00:20:29,650 Тому що символи, які ви стискаєте, уявлення, 327 00:20:29,650 --> 00:20:32,850 за визначенням цього алгоритму завжди залишаються листя, 328 00:20:32,850 --> 00:20:41,870 Ви ніколи не будете випадково використовувати ту ж схему біта для префікса кілька букв. 329 00:20:41,870 --> 00:20:46,740 Отже, іншими словами, ви стурбовані, схоже, двозначності, що виникають 330 00:20:46,740 --> 00:20:51,580 яких 001 може бути початком B або C початку або щось на зразок цього. 331 00:20:51,580 --> 00:20:56,780 Але це не може бути так, бо помітили, що всі букви алфавіту ми кодують 332 00:20:56,780 --> 00:20:58,290 знаходяться на листі. 333 00:20:58,290 --> 00:21:01,910 >> Неоднозначність може виникнути тільки, як і у випадку з азбукою Морзе, 334 00:21:01,910 --> 00:21:06,770 Якщо, наприклад, C був десь на шляху від кореня до B. 335 00:21:06,770 --> 00:21:12,290 [Студент] Вірно. Так що в цьому випадку, скажімо, з 2 листками. >> Скажіть є - Скажи це ще раз. 336 00:21:12,290 --> 00:21:18,760 [Студент] Скажи має 2 листи, F і G, а потім G - >> Добре. Але вона не може. 337 00:21:18,760 --> 00:21:23,230 Сама по собі не може мати листя F і G, тому що ці літери F і G 338 00:21:23,230 --> 00:21:27,560 б самі бути залишає десь зліва від B або право E. 339 00:21:27,560 --> 00:21:28,900 Таким чином, за визначенням, вони повинні бути листям. 340 00:21:28,900 --> 00:21:32,940 В іншому випадку, ви абсолютно праві, ми не вирішили проблему, що код Морзе стикається. 341 00:21:32,940 --> 00:21:38,150 Хороше питання. Інші питання? Добре. 342 00:21:38,150 --> 00:21:42,050 Це поняття біта, виявляється, у нас були владі всі разом, що ми фактично не використовується 343 00:21:42,050 --> 00:21:44,200 коли мова йде про маніпулювання ці 0 і 1. 344 00:21:44,200 --> 00:21:46,600 Ми запитали про це на одній з перших наборів завдання: 345 00:21:46,600 --> 00:21:52,340 а саме, як ви йдете з приводу перетворення великих і малих літер, чи навпаки? 346 00:21:52,340 --> 00:21:55,460 Або, більш конкретно, один з тих перших psets запитав 347 00:21:55,460 --> 00:22:01,090 скільки біт ви насправді потрібно перевернути, щоб змінити в нижній регістр або навпаки? 348 00:22:01,090 --> 00:22:05,580 Ось коротке нагадування того, що 65 і 97 виглядати в двійковому вигляді. 349 00:22:05,580 --> 00:22:08,060 І навіть якщо це питання начебто був втрачений у вашій пам'яті, 350 00:22:08,060 --> 00:22:11,290 Ви можете побачити тут ще раз, що, скільки біт необхідно перевернути 351 00:22:11,290 --> 00:22:15,810 змінити капіталу в нижній регістр? Тільки один. 352 00:22:15,810 --> 00:22:19,650 >> Вони відрізняються лише в одному місці, третій біт зліва. 353 00:22:19,650 --> 00:22:24,240 У той час як є 010, мало має 011. 354 00:22:24,240 --> 00:22:26,250 Так чи інакше, ми повинні просто бути в змозі відобразити, що біт, 355 00:22:26,250 --> 00:22:29,410 і ми можемо капіталізувати чи малі літери. 356 00:22:29,410 --> 00:22:32,720 Ми зробили це в минулому, фактично використовуючи, якщо умови 357 00:22:32,720 --> 00:22:35,930 і перевірки, якщо лист між капіталом і капіталом Z, 358 00:22:35,930 --> 00:22:41,480 Потім виходу, як - + 26 або щось на зразок цього. 359 00:22:41,480 --> 00:22:46,130 Ви, напевно, зробив арифметичну зміни букви алфавіту. 360 00:22:46,130 --> 00:22:49,270 Але що, якщо ми могли б просто переверніть, що один біт? 361 00:22:49,270 --> 00:22:59,080 Як ви могли б іти про прийняття вартість одного байта біт, 8 біт, так як 01000001 01100001 і? 362 00:22:59,080 --> 00:23:03,170 Якщо у вас ці послідовності бітів, як ми можемо йти про зміну лише одного з них? 363 00:23:03,170 --> 00:23:07,610 Що, якщо ми введемо в жовтому ось це іншій структурі біта? 364 00:23:07,610 --> 00:23:13,420 Якщо я зроблю все жовті 0s рядки, за винятком одного біта, що я хочу змінити 365 00:23:13,420 --> 00:23:17,900 а потім ввести новий оператор відомий як оператор побітового - 366 00:23:17,900 --> 00:23:21,210 Побітова в тому сенсі, що вона діє на окремі біти, 367 00:23:21,210 --> 00:23:25,360 не на весь байт або чотири байти все відразу. 368 00:23:25,360 --> 00:23:31,170 Це вертикальна риса там, у жовтому припускає, що те, що якщо ми візьмемо уявлення капітал 369 00:23:31,170 --> 00:23:37,060 і побітове АБО його жовтою послідовність бітів? 370 00:23:37,060 --> 00:23:41,300 Іншими словами, думаю, повернемося до нашого обговоренню булевих виразів в подряпин, а потім в C. 371 00:23:41,300 --> 00:23:47,520 >> Роблячи логічний або означає, що, щоб бути правдою, або перше, що повинно бути істинним 372 00:23:47,520 --> 00:23:50,700 або друга річ повинна бути істинними або обидва вони мають, щоб бути правдою, 373 00:23:50,700 --> 00:23:53,270 , А потім отриманий результат є самою правдою. 374 00:23:53,270 --> 00:24:00,230 У цьому випадку тут, що ми отримаємо, якщо візьмемо 0 "або" е изд з 0? Помилкові чи ні? 375 00:24:00,230 --> 00:24:04,280 Він як і раніше помилковими, так рядкові залишається, як очікувалося. 376 00:24:04,280 --> 00:24:07,540 Що, якщо замість цього ми робимо 1 або 0? 377 00:24:07,540 --> 00:24:12,640 Це тепер залишається 1, але зауважив, що це має відбутися тут. 378 00:24:12,640 --> 00:24:18,630 Якщо ми почнемо з капіталом, і ми продовжуємо "або" її окремі біти, як ми робимо тут, 379 00:24:18,630 --> 00:24:25,180 0 або жовтий дає нам, що тут, унизу? Це дає нам 1. 380 00:24:25,180 --> 00:24:35,120 У самому справі, припустимо, що ми не знали, що прописні версія мало насправді. 381 00:24:35,120 --> 00:24:38,270 Давайте робити це. Дозвольте мені рухатися назад це тут. 382 00:24:38,270 --> 00:24:42,340 Давайте зробимо це знову. 0 або 0 дає мені 0. 383 00:24:42,340 --> 00:24:45,020 1 або 0 дає мені 1. 384 00:24:45,020 --> 00:24:48,020 0 або 1 дає мені 1. 385 00:24:48,020 --> 00:24:52,880 0 або 0 дає мені 0. Наступний 0, наступний дорівнює 0, наступна: 0. 386 00:24:52,880 --> 00:24:55,660 1 або 0 дає мені 1. 387 00:24:55,660 --> 00:24:59,140 І тому, навіть якщо ми не знаємо заздалегідь, що нижній регістр був, 388 00:24:59,140 --> 00:25:04,770 просто "або" ІНГ з цієї картини біти, які ми представили тут, в жовтих, 389 00:25:04,770 --> 00:25:09,400 Ви можете нижній капіталу, клацаючи, що небагато. 390 00:25:09,400 --> 00:25:11,580 Ми використовували цей вираз тижнів тому: гортати небагато. 391 00:25:11,580 --> 00:25:13,710 Як ви насправді зробити це програмно? 392 00:25:13,710 --> 00:25:16,390 Ви можете використовувати те, що зазвичай називають маскою, послідовність бітів, 393 00:25:16,390 --> 00:25:19,980 що в цьому випадку відбувається просто так, аби подивитися, як цей номер тут, 394 00:25:19,980 --> 00:25:22,980 і тоді ви "або" це разом з використанням цього нового оператора C, 395 00:25:22,980 --> 00:25:29,940 Не | |, можна використовувати одне |, і ви б насправді отримати відповідь тут, бо навіщо? 396 00:25:29,940 --> 00:25:35,120 Це місце 1s, 2s місце, 4s, 8s, 16s, 32s. 397 00:25:35,120 --> 00:25:42,280 Ось і виходить, що якщо взяти великої літери і побітове АБО його з цілими 32, 398 00:25:42,280 --> 00:25:47,520 тому що цілими 32, коли ви дивитеся на це як на біти, виглядає так, 399 00:25:47,520 --> 00:25:50,860 це означає, що ви можете перевернути біт, що ви дійсно хочете. 400 00:25:50,860 --> 00:25:52,630 І точно так само - і ми будемо дивитися на код через хвилину - 401 00:25:52,630 --> 00:25:54,210 Припустимо, ми хочемо піти в іншому напрямку. 402 00:25:54,210 --> 00:25:58,210 >> Як ви йдете з нижнього регістра в столицю? Який біт необхідно змінити? 403 00:25:58,210 --> 00:25:59,820 Це та ж сама. 404 00:25:59,820 --> 00:26:03,970 Ми хочемо змінити це третій біт з 1 на 0. 405 00:26:03,970 --> 00:26:06,310 І як ми могли б йти про це? 406 00:26:06,310 --> 00:26:10,130 Як ми згортаємо трохи? З якою шаблон бітів ми могли вимкнути трохи? 407 00:26:11,580 --> 00:26:14,070 Що робити, якщо ми начебто інвертувати маску? 408 00:26:14,070 --> 00:26:17,350 Якщо раніше, ми зробили все жовті 0s маски 409 00:26:17,350 --> 00:26:19,930 за винятком одного біта ми хотіли включити, 410 00:26:19,930 --> 00:26:25,580 Що робити, якщо на цей раз, ми робимо все 1s маска, за винятком небагато, що ми хочемо, щоб вимкнути 411 00:26:25,580 --> 00:26:28,330 , А потім використовувати те, що оператор? 412 00:26:28,330 --> 00:26:30,560 Що, якщо ми "і" речі? Давайте подивимося. 413 00:26:30,560 --> 00:26:34,880 Якщо тепер клацнути на це, припустимо, що я знову створити маску, ось і все 1s 414 00:26:34,880 --> 00:26:37,650 за винятком одного біта, що я хочу, щоб вимкнути 415 00:26:37,650 --> 00:26:43,860 , А потім замість "або" білими цифрами нагорі з жовтими номерами тут, 416 00:26:43,860 --> 00:26:46,940 що, якщо я замість "і" їх разом? Це називається побітового і. 417 00:26:46,940 --> 00:26:49,450 Логічно, що це те ж саме, логічне і. 418 00:26:49,450 --> 00:26:55,160 Це дає мені 0 і 1 дорівнює 0. Таким чином, помилковою і дійсною є хибним. 419 00:26:55,160 --> 00:26:58,160 Правда, і правда, то правда. 420 00:26:58,160 --> 00:27:04,020 А ось магія: Справжні і помилкові зараз помилковим, тому ми вимкнений, що небагато. 421 00:27:04,020 --> 00:27:06,560 А тепер інша частина історії кілька простий. 422 00:27:06,560 --> 00:27:11,970 Тому що інша частина маски 1s, це не має значення те, що цифри в білому. 423 00:27:11,970 --> 00:27:15,580 Коли ви "і" щось з правдою, ви не збираєтеся, щоб змінити його значення. 424 00:27:15,580 --> 00:27:20,200 Якщо це правда, то залишиться вірним. Якби це була помилкова, вона буде залишатися помилковими. 425 00:27:20,200 --> 00:27:23,190 >> Але чарівництво відбувається, коли ви приймаєте те, що було істинним 426 00:27:23,190 --> 00:27:25,430 і ви тоді "і" його з помилковою. 427 00:27:25,430 --> 00:27:30,030 Це має ефект відключення, що небагато. 428 00:27:30,030 --> 00:27:31,980 Таким чином, трохи загадково там. 429 00:27:31,980 --> 00:27:35,390 Давайте реально дивитися на код, який може насправді виглядають ще більш загадковим, 430 00:27:35,390 --> 00:27:38,220 Але давайте подивимося ось на ToLower. 431 00:27:38,220 --> 00:27:45,880 Якщо я дивлюся на ToLower, що йдуть від столиці в нижній регістр, 432 00:27:45,880 --> 00:27:47,730 Давайте подивимося, як ми могли б реалізувати цю програму. 433 00:27:47,730 --> 00:27:51,280 Ось основні, і він не робить ніяких аргументів командного рядка. 434 00:27:51,280 --> 00:27:55,980 Я оголошенні характеру з для письма, які користувач збирається ввести дюйма 435 00:27:55,980 --> 00:28:00,690 Потім я використовую знайомі робити під час циклу просто переконайтеся, що користувач виразно дає мені капітал 436 00:28:00,690 --> 00:28:05,010 або B або C. .. Z, тому вони дають мені щось між А і Z. 437 00:28:05,010 --> 00:28:08,580 А тепер те, що я тут роблю? 438 00:28:08,580 --> 00:28:14,870 Я "або" ІНГ це з 0x20, але це насправді так само, як - 439 00:28:14,870 --> 00:28:19,500 і ми повернемося до цього в даний момент - 32. 440 00:28:19,500 --> 00:28:24,830 Отже, ще раз, 32 ця картина біти тут. Навіщо нам це знати? 441 00:28:24,830 --> 00:28:26,320 Просто згадайте тиждень 0. 442 00:28:26,320 --> 00:28:31,010 Це місце 1s, 2s місце, 4s, 8s, 16s, 32s місце. 443 00:28:31,010 --> 00:28:33,470 Таким чином, це жовтий номер, трапляється, 32. 444 00:28:33,470 --> 00:28:40,570 Потім я можу взяти з собою лист, як символ тут, побітове "або" вона буквально з числом 32, 445 00:28:40,570 --> 00:28:45,250 і що я повернуся? Рядкові версія, що символ. 446 00:28:45,250 --> 00:28:48,830 Хвилину тому, хоча, я висловив це в іншому записі бази. 447 00:28:48,830 --> 00:28:51,370 Що це уявляєте? >> [Студент] Шістнадцяткові. 448 00:28:51,370 --> 00:28:53,050 [Малан] Це відбувається представляють шістнадцяткові. 449 00:28:53,050 --> 00:28:55,170 Ми не говорили про шістнадцятковому все, що багато чого, 450 00:28:55,170 --> 00:28:57,330 але насправді це зручно у випадках, подібних до цього. 451 00:28:57,330 --> 00:29:01,730 >> Навіть якщо це виглядає більш складною і, хоча вона виглядає як 20, а не 32, 452 00:29:01,730 --> 00:29:06,240 Виявляється, що шістнадцяткові насправді супер зручні позначення 453 00:29:06,240 --> 00:29:10,810 тому що в шістнадцятковій кожної цифри після 0x - і це нічого не значить; 454 00:29:10,810 --> 00:29:13,960 це просто людське угоду, що говорить тут йде шістнадцяткове число - 455 00:29:13,960 --> 00:29:18,590 кожна з цих цифр, 2, а потім 0, самі по собі можуть бути представлені 456 00:29:18,590 --> 00:29:20,800 рівно з 4 біти. 457 00:29:20,800 --> 00:29:27,840 Так що, якщо ми зробимо це, дозвольте мені відкрити текстовий редактор тут - дивне автозаповнення - 458 00:29:27,840 --> 00:29:35,940 якщо ми трохи текстовий редактор тут, число 0x20 означає, що тут 4 біт, ось ще 4 біти. 459 00:29:35,940 --> 00:29:38,050 Давайте зробимо правий 4 біти в першу чергу. 460 00:29:38,050 --> 00:29:44,690 0, коли представлені 4 біта це що? Супер просто. Просто всі 0s. 461 00:29:44,690 --> 00:29:46,780 Так що 4 біти, як 0s. 462 00:29:46,780 --> 00:29:53,510 Як ви уявляєте 2? Це був час, так як ми зробили це, але це 0100. 463 00:29:53,510 --> 00:29:57,310 Так що це 1s місце, це 2s місце, а потім це не має значення те, що інші місця. 464 00:29:57,310 --> 00:30:00,610 Іншими словами, в шістнадцятковому ви могли б сказати 0x20, 465 00:30:00,610 --> 00:30:04,340 Але якщо ви потім думати про те, що 2 і як воно представлене в двійковій, 466 00:30:04,340 --> 00:30:07,130 що таке 0 і як це представлено в двійковій, 467 00:30:07,130 --> 00:30:10,440 Відповіді на ці питання це і це, відповідно. 468 00:30:10,440 --> 00:30:14,380 Так відбувається, 0x20, щоб представити цю картину з 8 біт, 469 00:30:14,380 --> 00:30:16,880 який якраз і є маскою, яку ми хотіли. 470 00:30:16,880 --> 00:30:20,140 Так що це на даний момент просто інтелектуальна вправа, 471 00:30:20,140 --> 00:30:24,520 але насправді в коді це зазвичай частіше писати константи, як це 472 00:30:24,520 --> 00:30:28,360 в шістнадцятковому, тому що тоді програміст може відносно легко, 473 00:30:28,360 --> 00:30:32,560 навіть якщо це вимагає папір і олівець, з'ясувати, що це картина біт 474 00:30:32,560 --> 00:30:35,960 тому що ви не можете просто виражати 0 і 1 зазвичай в коді. 475 00:30:35,960 --> 00:30:38,540 Ви не можете піти 00010 і так далі. 476 00:30:38,540 --> 00:30:42,380 >> Ви повинні вибрати десятковій або шістнадцятковій або вісімковій або інші позначення. 477 00:30:42,380 --> 00:30:47,540 Більшість людей схильні вибирати шістнадцятковому просто так, щоб кожна цифра представляє 4 біти 478 00:30:47,540 --> 00:30:49,320 і ви можете зробити це швидко математики. 479 00:30:49,320 --> 00:30:54,990 І я махаю рукою у ToUpper, що майже те ж саме, він виглядає майже ідентично. 480 00:30:54,990 --> 00:31:01,900 ToUpper відбувається використовувати не чи оператор, а цей хлопець і DF. 481 00:31:01,900 --> 00:31:09,300 Що DF представляють? DF? Будь? >> [Студент] 255. 482 00:31:09,300 --> 00:31:12,780 255? Не 255. Це було б і далі. 483 00:31:12,780 --> 00:31:15,210 Ми залишимо це одне, маленьке вправу. 484 00:31:15,210 --> 00:31:23,460 Але якщо ви йдете від 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, а потім те, що приходить після 9? 485 00:31:23,460 --> 00:31:26,510 Ми начебто з десяткових цифр, але в шістнадцятковому, що буде після 9? 486 00:31:26,510 --> 00:31:29,510 [Студент]. >> Так A, B, C, D. 487 00:31:29,510 --> 00:31:33,470 Ви можете з'ясувати звідти те, що картина біт D насправді являє. 488 00:31:33,470 --> 00:31:38,850 І якщо ми робимо математику, ми побачимо, що маски в кінцевому підсумку отримати назад ідентично цього. 489 00:31:38,850 --> 00:31:45,580 Це F, все 1s, і це р. Так DF заявляє, що маски. Добре. 490 00:31:45,580 --> 00:31:50,980 І, нарешті, не робити речей звук супер, супер технічних, 491 00:31:50,980 --> 00:31:53,840 але припустимо, що ми хотіли, щоб написати програму, яка це робить. 492 00:31:53,840 --> 00:31:58,960 Дозвольте мені піти далі і зробити бінарний, який являє собою програму у файлі з ім'ям binary.c. 493 00:31:58,960 --> 00:32:02,050 А тепер дозвольте мені запустити бінарний і дати мені невід'ємне ціле число. 494 00:32:02,050 --> 00:32:03,960 Давайте почнемо просто і тип 0. 495 00:32:03,960 --> 00:32:09,010 Це зараз це програма, яка виводить ціле число в двійковому представленні. 496 00:32:09,010 --> 00:32:13,470 Так що, якщо я граю в цю гру знову і ввести тільки 1, я повинен отримати 32-розрядне представлення 1. 497 00:32:13,470 --> 00:32:15,490 Якщо я зроблю це знову 2, я повинен отримати це. 498 00:32:15,490 --> 00:32:19,310 Якщо я роблю 7, я повинен отримати кілька 1s в кінці і так далі. 499 00:32:19,310 --> 00:32:22,740 Виявляється, я говорю про це, тому що з операції побітового 500 00:32:22,740 --> 00:32:25,490 ви реально можете зробити одну річ, як добре. 501 00:32:25,490 --> 00:32:29,130 Ви можете створити ці маски динамічно. 502 00:32:29,130 --> 00:32:32,800 Погляньте на цей останній приклад з участю бітових операцій. 503 00:32:32,800 --> 00:32:35,490 Ось перша частина коду, запитує в користувача число, 504 00:32:35,490 --> 00:32:38,130 і він наполягає на тому, що ви даєте мені невід'ємне ціле число. 505 00:32:38,130 --> 00:32:39,780 Так що це свого роду старе школи. 506 00:32:39,780 --> 00:32:41,980 Але ось те, що начебто цікавий. 507 00:32:41,980 --> 00:32:44,910 >> Як я можу йти про друк числа в двійковому? 508 00:32:44,910 --> 00:32:48,970 Я вперше ітерації від чого до чого? 509 00:32:48,970 --> 00:32:52,270 Який розмір Int зазвичай, принаймні в прилад? >> [Студент] 4. 510 00:32:52,270 --> 00:32:57,130 Це 4. Таким чином, 4 * 8 32 - 1, 31. 511 00:32:57,130 --> 00:33:02,590 Так що, якщо я починаю рахувати від 31, який представляє, виявляється, 512 00:33:02,590 --> 00:33:07,630 тільки концептуально, 31-розрядний або вищого порядку біт, що цей хлопець тут, 513 00:33:07,630 --> 00:33:09,650 в той час як це буде біт 0. 514 00:33:09,650 --> 00:33:12,850 Так що це біт 01 біт ... 31. 515 00:33:12,850 --> 00:33:14,950 Так що цей код робить? 516 00:33:14,950 --> 00:33:20,140 Зверніть увагу, це цикл, навіть якщо він виглядає загадковим, просто перебір з 31 до 0. Ось і все. 517 00:33:20,140 --> 00:33:24,530 Таким чином, сама цікава частина тепер повинна бути в цих 5 рядків тут. 518 00:33:24,530 --> 00:33:28,110 Зверніть увагу, що в цій лінії я оголошенні змінної маски 519 00:33:28,110 --> 00:33:30,790 у відповідність з нашою історією цих жовтих номерів. 520 00:33:30,790 --> 00:33:32,200 А те, що це робить? 521 00:33:32,200 --> 00:33:35,720 Це ще один оператор побітового ми не бачили раніше, швидше за все. 522 00:33:35,720 --> 00:33:38,300 Це оператор лівого зсуву. 523 00:33:38,300 --> 00:33:40,060 Цей оператор робить це. 524 00:33:40,060 --> 00:33:44,920 Ось номер 1, і якщо ви робите я залишив зрушення, зсув вліво, 525 00:33:44,920 --> 00:33:49,260 Що ви думаєте, що має ефект робить, щоб, що окремі 1? 526 00:33:49,260 --> 00:33:51,290 Буквально зміщення його. 527 00:33:51,290 --> 00:33:57,540 Таким чином, якщо число 1 є те, що у вас на лівому, і ви починаєте з ініціалізації я 31, 528 00:33:57,540 --> 00:34:03,490 Що це буде робити? Він збирається взяти цей номер 1 і перекласти її 31 місць тут. 529 00:34:03,490 --> 00:34:06,210 І тому, що тут немає інших цифр за нею, 530 00:34:06,210 --> 00:34:10,350 ті, за замовчуванням буде замінений 0s. 531 00:34:10,350 --> 00:34:15,120 Таким чином, ви починаєте з номером 1, який, звичайно, виглядає так - 532 00:34:15,120 --> 00:34:18,659 і дозвольте мені зробити це тут, в центрі. 533 00:34:18,659 --> 00:34:22,139 І те, як ви переносите речі зліва, цей хлопець по суті йде цим шляхом. 534 00:34:22,139 --> 00:34:24,659 Але як тільки ви це зробите, 0 отримує заповнені 535 00:34:24,659 --> 00:34:28,360 Якщо перевести його вдруге, він іде цим шляхом і інше 0 отримує заповнені 536 00:34:28,360 --> 00:34:31,000 >> Ви перекласти її знову, а потім ще 0 отримує заповнені 537 00:34:31,000 --> 00:34:37,900 Так що якщо ви це зробите з 1 << I 31 місць, у результаті ви отримуєте маску 538 00:34:37,900 --> 00:34:42,550 , Що становить 32 символів, лівий одним з яких є 1, 539 00:34:42,550 --> 00:34:45,199 Все інше з яких 0. 540 00:34:45,199 --> 00:34:50,880 А то виходить, як в сторону, переходячи число зліва, як це 541 00:34:50,880 --> 00:34:53,530 Також випадково, а іноді і зручно, 542 00:34:53,530 --> 00:34:57,520 має ефект робить те, що на цей номер? >> [Студент] Подвоєння його. 543 00:34:57,520 --> 00:35:00,980 Подвоєння це, тому що в кожному зі стовпців - 1s місце, 2s місце, 4s місце, 544 00:35:00,980 --> 00:35:05,030 8s місце, 16s місці - вони всі подвоєння, як ви йдете наліво. 545 00:35:05,030 --> 00:35:09,500 Або, вірніше, коли ви переносите 1s ви будете в кінцевому підсумку подвоїти вартість номера. 546 00:35:09,500 --> 00:35:12,070 Ви можете в кінцевому підсумку робить цікаве перетворення цифр 547 00:35:12,070 --> 00:35:15,640 зрушуючи все більш подібним чином за ступенями 2. 548 00:35:15,640 --> 00:35:17,150 Так як же це працює? 549 00:35:17,150 --> 00:35:22,580 Це і дає мені маску, яка все 0s за винятком 1 в точності місці я хочу, 550 00:35:22,580 --> 00:35:27,920 а потім це вислів, який вкрали toupper.c, 551 00:35:27,920 --> 00:35:31,770 просто говорить, взяти число п, що користувач ввів в, 552 00:35:31,770 --> 00:35:34,730 »І« що з цією маскою, і що ви збираєтеся отримати? 553 00:35:34,730 --> 00:35:39,200 Ви збираєтеся отримати 1, якщо є 1 в масках, що місце, 554 00:35:39,200 --> 00:35:41,570 або ви збираєтеся отримати 0, якщо це не так. 555 00:35:41,570 --> 00:35:44,370 І так все це робить програма ефективно це має петлю, 556 00:35:44,370 --> 00:35:48,340 і це створює маску з 1 тут, то 1 тут, то 1 тут, 557 00:35:48,340 --> 00:35:52,950 і він використовує це побітове І трюк, щоб сказати, є 1 біт на вході користувачів тут? 558 00:35:52,950 --> 00:35:59,220 >> Є 1 біт на вході користувачів тут? І якщо це так, буквально друкувати 1, інакше друк 0. 559 00:35:59,220 --> 00:36:03,780 Ми робимо це з цілими тільки тому, що саме тому ми робимо 32 біт замість 8, 560 00:36:03,780 --> 00:36:06,900 але те, що ми ввели, то це побітове І це побітове АБО, 561 00:36:06,900 --> 00:36:10,450 і цей оператор лівого зсуву, який часто не дуже корисно, 562 00:36:10,450 --> 00:36:12,230 але виявляється, що вони можуть бути. 563 00:36:12,230 --> 00:36:16,560 У самому справі, якщо б ви були представляти собою щось на зразок масив логічних 564 00:36:16,560 --> 00:36:21,260 просто представляють істинне або помилкове, припустимо, ви хотіли, щоб відслідковувати чи ні 565 00:36:21,260 --> 00:36:24,630 кімнату, повну 300 студентів присутній, 566 00:36:24,630 --> 00:36:29,420 Ви можете оголосити масив розміром 300 типу BOOL, так що ви отримаєте 300 Bools, 567 00:36:29,420 --> 00:36:33,090 і ви можете налаштувати кожен істинно, якщо хтось тут і брехня в іншому випадку. 568 00:36:33,090 --> 00:36:37,550 Чому це подання в тому, що структура даних неефективна? 569 00:36:39,370 --> 00:36:44,800 Що поганого про дизайн, що структура даних, масив з 300 Bools? 570 00:36:46,190 --> 00:36:49,600 Що таке логічний, насправді, під капотом? 571 00:36:49,600 --> 00:36:52,310 Це, також, є те, що можуть бути не знайомі. 572 00:36:52,310 --> 00:36:53,720 Виявляється, немає BOOL. 573 00:36:53,720 --> 00:36:56,620 Пам'ятаєте, ми як би створили, що з cs50.h файл, 574 00:36:56,620 --> 00:36:58,630 яка сама по собі включає в себе стандартні BOOL. 575 00:36:58,630 --> 00:37:00,930 З видом німий, хоча, коли справа доходить до BOOL. 576 00:37:00,930 --> 00:37:04,880 Він використовує 8 біт для представлення кожен логічний, який повністю марнотратного 577 00:37:04,880 --> 00:37:09,040 тому що очевидно, скільки біт потрібно, щоб представляти логічне? Просто 1. 578 00:37:09,040 --> 00:37:13,190 Ось і виходить, що якщо зараз у вас є можливість з операторами побітового 579 00:37:13,190 --> 00:37:17,760 маніпулювати окремими бітами навіть в символ, навіть в один байт, 580 00:37:17,760 --> 00:37:21,380 Виявляється можна зменшити обсяг пам'яті, необхідний для подання дурість 581 00:37:21,380 --> 00:37:25,490 як, що відвідуваність стилі структуру даних в 8 разів. 582 00:37:25,490 --> 00:37:29,820 Замість того щоб використовувати вісім бітів являють істинне або помилкове, ви можете буквально використовувати один 583 00:37:29,820 --> 00:37:34,500 за допомогою одного байта на кожні вісім учнів у класі 584 00:37:34,500 --> 00:37:41,990 і перемикання від 0 до 1 окремі біти за допомогою цих видів низьким рівнем трюків. 585 00:37:43,850 --> 00:37:49,460 Це дійсно покласти край енергії. Чи є питання про бітові операції? 586 00:37:49,460 --> 00:37:52,710 >> Так. >> [Студент] Чи виняткові або оператор? 587 00:37:52,710 --> 00:37:56,440 Так. Існує виняткове або оператор, який виглядає так, ^, морква символ, 588 00:37:56,440 --> 00:38:02,070 , Що означає тільки перше або друге може бути 1 на виході буде 1. 589 00:38:02,070 --> 00:38:07,750 Існує також немає, ~, яка дозволить вам, щоб інвертувати 0 на 1 або навпаки, а також. 590 00:38:07,750 --> 00:38:11,600 І є також оператор зсуву вправо, >>, яка є протилежністю тієї, яку ми бачили. 591 00:38:11,600 --> 00:38:13,850 Добре. Давайте речі тепер на більш високий рівень. 592 00:38:13,850 --> 00:38:16,770 Ми почали говорити про текст, а потім стиснути його 593 00:38:16,770 --> 00:38:19,650 і представляє текст з меншою кількістю біт; 594 00:38:19,650 --> 00:38:22,890 Ми трохи поговорили про те, як ми можемо тепер почати маніпуляції речами на рівні Побітового. 595 00:38:22,890 --> 00:38:26,640 Давайте тепер масштаб до 10.000 футів, щоб подання 596 00:38:26,640 --> 00:38:29,250 більш складні речі, як графіка. 597 00:38:29,250 --> 00:38:32,950 Тут ми маємо прапором Німеччини, тут ми маємо одне з Франції. 598 00:38:32,950 --> 00:38:36,350 Вони можуть бути представлені у форматах, ви знаєте - GIF-файлів, наприклад. 599 00:38:36,350 --> 00:38:40,030 Якщо ви коли-небудь бачили зображення в Інтернеті, які закінчуються на. GIF, 600 00:38:40,030 --> 00:38:43,000 Це графічний формат обміну. 601 00:38:43,000 --> 00:38:47,530 Ці два прапори тут начебто піддаються стисненню 602 00:38:47,530 --> 00:38:52,050 за те, що, можливо, очевидних причин? >> [Нерозбірливо відповідь студента] 603 00:38:52,050 --> 00:38:53,440 Там дуже багато повторень, вірно? 604 00:38:53,440 --> 00:38:57,270 Для того, щоб відправити прапором Німеччини, думати про це як зображення на екрані 605 00:38:57,270 --> 00:38:59,030 назад в дні Scratch. 606 00:38:59,030 --> 00:39:02,380 Ви могли б пригадати, що є окремі точки, які складають зображення. 607 00:39:02,380 --> 00:39:06,650 >> Там цілий ряд чорних крапок і ще цілого ряду чорних крапок. 608 00:39:06,650 --> 00:39:10,110 Там купа рядків чорними крапками, які ми могли бачити, якщо ми дійсно збільшено, 609 00:39:10,110 --> 00:39:13,370 багато подобається, коли ми збільшено на обличчі Роба в Photoshop. 610 00:39:13,370 --> 00:39:15,500 Як тільки ми отримали все глибше і глибше і глибше в зображенні, 611 00:39:15,500 --> 00:39:19,990 Ви почали бачити пікселізация, всі квадрати, які складаються очі в цьому випадку. 612 00:39:19,990 --> 00:39:24,130 Те ж тут справа. Якщо ми збільшено зовсім небагато, ви б побачили окремих точок. 613 00:39:24,130 --> 00:39:27,110 Ну, це вид відходів біт. 614 00:39:27,110 --> 00:39:32,120 Якщо третина прапор чорного і третього прапора жовтий і так далі, 615 00:39:32,120 --> 00:39:34,860 чому ми не можемо якимось чином стиснути цей прапор? 616 00:39:34,860 --> 00:39:39,560 І навіть французький прапор може бути стиснута, хоча картина трохи інша. 617 00:39:39,560 --> 00:39:44,120 Виявляється форматі GIF файлів формат стиснення без втрат, 618 00:39:44,120 --> 00:39:48,420 яка означає, що ви можете робити знімки, як німецький прапор тут, 619 00:39:48,420 --> 00:39:53,540 Ви можете викинути багато з його бітів без шкоди для якості. 620 00:39:53,540 --> 00:39:55,340 Це на відміну від щось подібне JPEG, 621 00:39:55,340 --> 00:39:57,050 , З якої більшість з нас, ймовірно, більш знайомі. 622 00:39:57,050 --> 00:39:59,000 Facebook фото і Flickr фотографій і т.п. 623 00:39:59,000 --> 00:40:02,200 Майже завжди зберігаються як зображення у форматі JPEG, коли вони завантажені, 624 00:40:02,200 --> 00:40:08,100 але у форматі JPEG є втратами - втратами - формат якого ви викинули біти 625 00:40:08,100 --> 00:40:10,430 але ви також викидають якості. 626 00:40:10,430 --> 00:40:13,890 І тому, якщо ви стискати фотографії з Photoshop або завантажити їх на Facebook 627 00:40:13,890 --> 00:40:15,580 або взяти їх на дійсно дерьмово телефон, 628 00:40:15,580 --> 00:40:19,510 Ви знаєте, що картина починає одержувати дуже плямистим і нерівною, 629 00:40:19,510 --> 00:40:22,290 і це тому, що він стискається за допомогою комп'ютера або телефону 630 00:40:22,290 --> 00:40:24,550 буквально кидали інформація від готелю. 631 00:40:24,550 --> 00:40:28,500 Але GIF дивно в тому, що він може використовувати менше біт, ніж він може за замовчуванням 632 00:40:28,500 --> 00:40:30,750 без втрати інформації. 633 00:40:30,750 --> 00:40:32,410 >> І вона по суті робить це таким чином. 634 00:40:32,410 --> 00:40:38,740 Замість того, щоб зберігати у файлі, як BMP б RGB потрійний для чорного, чорного, чорного, чорного, 635 00:40:38,740 --> 00:40:42,570 чорний, чорний, чорний, чорний, чорний, чорний, чорний, чорний і так далі, 636 00:40:42,570 --> 00:40:45,640 Швидше за все, формат GIF збирається мовити, "Black" 637 00:40:45,640 --> 00:40:48,330 , А потім "Повторіть це 100 разів", або щось на зразок цього. 638 00:40:48,330 --> 00:40:52,280 "Чорний повторити це 100 разів, чорний, повторити це 100 разів ..." 639 00:40:52,280 --> 00:40:54,530 "Жовтий, повторити це 100 разів." 640 00:40:54,530 --> 00:40:57,200 І так він пам'ятає, по суті, ліве пікселів 641 00:40:57,200 --> 00:41:02,160 і потім кодує так чи інакше поняття повторював, що піксель знову і знову. 642 00:41:02,160 --> 00:41:06,110 Так GIF-файлів можна стиснути себе без втрати інформації. 643 00:41:06,110 --> 00:41:09,510 Але якщо у вас здогадатися, якщо це алгоритм, який ГІФС використання, 644 00:41:09,510 --> 00:41:13,180 який з цих прапорів, навіть якщо вони виглядають однаковими за розміром, 645 00:41:13,180 --> 00:41:19,620 буде менше, якщо зберігається на диску у форматі GIF? >> [Студент] Німеччина. 646 00:41:19,620 --> 00:41:21,660 Німеччина буде менше? Чому? 647 00:41:21,660 --> 00:41:26,620 [Студент] Оскільки Ви повторюєте це багато, багато разів горизонтально 648 00:41:26,620 --> 00:41:29,010 а потім повторити в інший раз. >> Саме так. 649 00:41:29,010 --> 00:41:32,020 Тому що люди, які винайшли GIF тільки почасти довільно вирішили 650 00:41:32,020 --> 00:41:36,040 , Що повторення будуть використані горизонтально, а не збоку. 651 00:41:36,040 --> 00:41:40,900 Там дуже багато більше повторень боків тут в німецький прапор, ніж у французький прапор. 652 00:41:40,900 --> 00:41:44,430 Таким чином, якщо ми насправді відкрити папку на жорсткому диску, який має ці GIF, 653 00:41:44,430 --> 00:41:51,920 Ви можете фактично бачити, що німецький прапор тут 2 кілобайт і французької становить 4 кілобайти. 654 00:41:51,920 --> 00:41:54,080 Це трапляється збіг, що один в два рази більше іншого, 655 00:41:54,080 --> 00:41:57,960 але це насправді так, що французький прапор набагато більше. 656 00:41:57,960 --> 00:42:01,250 >> Навіть якщо ми говоримо тут про графіку, ті ж ідеї можна застосувати до 657 00:42:01,250 --> 00:42:05,150 Не такі речі, як прапори, але образи, які є трохи більш складними. 658 00:42:05,150 --> 00:42:08,170 Якщо ви візьмете картину яблуко, безумовно, є багато дублювання там, 659 00:42:08,170 --> 00:42:11,040 , Щоб ми могли якось пам'ятати, що за замовчуванням фон синьо 660 00:42:11,040 --> 00:42:13,230 а не, як права картина припускає, 661 00:42:13,230 --> 00:42:16,830 повинні пам'ятати, колір кожного пікселя в цій картині. 662 00:42:16,830 --> 00:42:21,060 Таким чином, ми можемо кинути біт далеко тобто без втрати інформації. 663 00:42:21,060 --> 00:42:23,340 Яблуко як і раніше виглядає точно так само. 664 00:42:23,340 --> 00:42:27,510 У цьому прикладі, ви можете побачити, що відбувається у фільмі. 665 00:42:27,510 --> 00:42:31,970 Вони являють старої школи кінохроніки якого у верхньому зображенні є 666 00:42:31,970 --> 00:42:36,900 у вас є RV проїжджав повз будинок і дерево. 667 00:42:36,900 --> 00:42:42,130 А що ван проїжджає повз зліва направо, що, очевидно, не змінюється? 668 00:42:42,130 --> 00:42:45,320 Будинок нікуди не дінеться, і дерево нікуди не дінеться. 669 00:42:45,320 --> 00:42:47,700 Єдине, що рухається є ван в цьому випадку. 670 00:42:47,700 --> 00:42:51,650 Так як фон без змін передбачає, що ви можете зробити в кіно 671 00:42:51,650 --> 00:42:56,530 Аналогічно просто викинути інформацію, яка не змінюється між кадрами. 672 00:42:56,530 --> 00:42:58,900 Це, як правило, відомі як стиснення межкадрового 673 00:42:58,900 --> 00:43:02,120 згідно з яким, якщо цей кадр виглядає майже ідентично цього, 674 00:43:02,120 --> 00:43:05,390 давайте не будемо турбуватися збереження на диску будь-якого з ідентичною інформації 675 00:43:05,390 --> 00:43:09,250 на ці проміжні кадри, давайте використовувати тільки ключові кадри раз в той час 676 00:43:09,250 --> 00:43:13,420 що насправді зберігати цю інформацію надлишково так само, як трохи розсудливості перевірити. 677 00:43:13,420 --> 00:43:18,620 >> На відміну від інший підхід до стиснення відео в цьому другому і нижній приклад тут, 678 00:43:18,620 --> 00:43:23,970 , Де замість магазину 30 кадрів, чому б вам не просто зберігати 15 кадрів в секунду замість? 679 00:43:23,970 --> 00:43:27,070 Замість того, щоб фільм виду тече красиво, прекрасно, 680 00:43:27,070 --> 00:43:30,060 це може виглядати це заїкання трохи, трохи старої школи, 681 00:43:30,060 --> 00:43:37,190 але ефект буде використовувати набагато менше біт, ніж могло б бути необхідним. 682 00:43:37,190 --> 00:43:39,240 Так де ж це тоді нам залишається? 683 00:43:39,240 --> 00:43:41,700 Це було трохи в стороні від того, де ще ви можете піти зі стиском. 684 00:43:41,700 --> 00:43:45,140 Більш детальну інформацію про те, що взяти клас як CS175 тут. 685 00:43:45,140 --> 00:43:46,990 Ось ще один приклад в відео. 686 00:43:46,990 --> 00:43:49,190 Якщо бджола це єдине, що рухається, 687 00:43:49,190 --> 00:43:51,790 Ви дійсно можете викинути інформації в цих середніх кадрах 688 00:43:51,790 --> 00:43:55,260 тому що квітка і небо, і листя не змінюється. 689 00:43:55,260 --> 00:43:57,960 Але давайте тепер розглянемо одну річ. 690 00:43:57,960 --> 00:44:03,890 У наступні 5 хвилин ми залишимо позаду C вічно в лекції? Так. Не в psets, однак. 691 00:44:03,890 --> 00:44:10,210 Останній розповідь про С, а потім ми перейдемо до дуже сексуальним матеріалом 692 00:44:10,210 --> 00:44:13,870 за участю HTML і веб-і у-у-ух. Добре. 693 00:44:13,870 --> 00:44:16,050 Тут ми йдемо. Це мотивація. 694 00:44:16,050 --> 00:44:20,020 Виявляється, весь цей час, коли ми були написання програм ми запускаємо Clang. 695 00:44:20,020 --> 00:44:23,890 І Clang, ми говорили з першого тижня в значній мірі, бере вихідний код 696 00:44:23,890 --> 00:44:25,740 і перетворює його в об'єктний код. 697 00:44:25,740 --> 00:44:28,540 Це займе C і перетворює його в 0 і 1. 698 00:44:28,540 --> 00:44:32,150 Я начебто лежав до вас протягом декількох тижнів, тому що це не зовсім так просто. 699 00:44:32,150 --> 00:44:36,750 >> Там дуже багато більше відбувається під капотом, коли ви запускаєте програму, як Clang. 700 00:44:36,750 --> 00:44:39,560 У самому справі, процес компіляції програми дійсно може бути узагальнені, 701 00:44:39,560 --> 00:44:42,210 як ви, можливо, пам'ятаєте з відео Роба на компілятори, 702 00:44:42,210 --> 00:44:47,580 в ці 4 етапи: попередня обробка, складання себе, збирання та компонування. 703 00:44:47,580 --> 00:44:51,950 Але у нас в класі, і більшість людей у ​​світі зазвичай підсумувати всі ці кроки 704 00:44:51,950 --> 00:44:54,410 як тільки "компіляції". 705 00:44:54,410 --> 00:44:58,070 Але якщо ми почнемо з вихідного коду, як це, нагадаємо це, мабуть, найпростіша програма C 706 00:44:58,070 --> 00:45:03,530 ми написали досі, нагадаємо, що при компіляції він закінчується в такому вигляді. 707 00:45:03,530 --> 00:45:07,310 Але там насправді проміжний крок, і ці кроки полягають у наступному. 708 00:45:07,310 --> 00:45:10,750 По-перше, ця річ на самому верху цього, і більшість наших програм, 709 00:45:10,750 --> 00:45:13,550 # Включити 710 00:45:13,550 --> 00:45:17,210 Що # включити зробити для нас? 711 00:45:17,210 --> 00:45:24,150 Це в значній мірі копіює і вставляє вміст stdio.h в моєму файлі, так що чому? 712 00:45:24,150 --> 00:45:27,220 Чому я дбаю про зміст stdio.h? Що там інтерес? 713 00:45:27,220 --> 00:45:32,310 Printf в декларації, його прототип, так що компілятор то знає, що я маю на увазі 714 00:45:32,310 --> 00:45:34,900 коли я згадую цю функцію Printf. 715 00:45:34,900 --> 00:45:39,390 Таким чином, крок 1 в зборі є попередньої обробки, в результаті чого програми, як Clang 716 00:45:39,390 --> 00:45:43,450 або деякі допоміжні програми, яка поставляється з Clang читає ваш код зверху вниз, 717 00:45:43,450 --> 00:45:47,740 Зліва направо, і в будь-який момент він бачить символ # слід ключове слово, як включати, 718 00:45:47,740 --> 00:45:53,980 він виконує цю операцію, копіювання і вставка в даному випадку stdio.h в ваш файл. 719 00:45:53,980 --> 00:45:55,510 Це крок 1. 720 00:45:55,510 --> 00:45:59,620 Тоді у вас є набагато більше C файл через величезну копіювати, вставити вакансії, просто так вийшло. 721 00:45:59,620 --> 00:46:01,710 >> Крок 2 Тепер це компіляція. 722 00:46:01,710 --> 00:46:04,880 Але, виявляється компіляція займає вихідний код, який виглядає наступним чином 723 00:46:04,880 --> 00:46:08,160 і перетворює його на щось, що виглядає так, 724 00:46:08,160 --> 00:46:12,560 що для тих, хто знайомий називається? >> [Студент] асамблеї. >> Асамблеї мовою. 725 00:46:12,560 --> 00:46:16,700 Насправді це щось, якщо ви берете CS61 ви будете занурюватися в більш докладно. 726 00:46:16,700 --> 00:46:22,380 Це майже так само близько, як ви можете отримати в письмовому 0 і 1 собі 727 00:46:22,380 --> 00:46:25,850 але писати речі таким чином, що все ще змушує принаймні трохи глузду. 728 00:46:25,850 --> 00:46:30,760 Ці машинні інструкції, і якщо ми Прокрутіть вниз до основною функцією тут, 729 00:46:30,760 --> 00:46:35,470 помітите, що цей поштовх інструкції, переміщати інструкції, відняти навчання, 730 00:46:35,470 --> 00:46:38,550 дзвоніть навчання, і так далі. 731 00:46:38,550 --> 00:46:42,930 Коли ви чуєте, що ваш комп'ютер Intel Inside, 732 00:46:42,930 --> 00:46:46,180 у вас процесор Intel в Mac або PC, що це значить? 733 00:46:46,180 --> 00:46:51,200 Процесор вбудований такими компаніями, як Intel розуміння певних інструкцій. 734 00:46:51,200 --> 00:46:55,770 Вони поняття не мають, що такі функції, як свопу або основний самі по собі, 735 00:46:55,770 --> 00:47:00,060 але вони знають, що дуже низькому рівні інструкцій, як додавання, віднімання, штовхати, 736 00:47:00,060 --> 00:47:02,430 перемістити, подзвонити, і так далі,. 737 00:47:02,430 --> 00:47:06,170 Таким чином, при компіляції C код на асемблері, 738 00:47:06,170 --> 00:47:11,820 ваша дуже зручний вид код перетвориться в щось, що виглядає так, 739 00:47:11,820 --> 00:47:21,670 , Що буквально рухається байта або 4 байти навколо в таких невеликих підрозділів і з CPU. 740 00:47:21,670 --> 00:47:26,820 Але, нарешті, коли Clang готовий прийняти це подання своєї програми 741 00:47:26,820 --> 00:47:30,940 в 0 і 1, то крок називається збірка відбувається, 742 00:47:30,940 --> 00:47:33,850 і це знову все відбувається в мить ока при запуску Clang. 743 00:47:33,850 --> 00:47:39,300 Ми починаємо тут, вона виводить файл, як це, а потім перетворить його в ці 0 і 1. 744 00:47:39,300 --> 00:47:42,000 І якщо ви хочете, щоб повернутися в якийсь момент і насправді побачити це в дії, 745 00:47:42,000 --> 00:47:48,220 якщо я йду в hello1.c--це одна з найперших програм, які ми подивилися на - 746 00:47:48,220 --> 00:47:53,710 Зазвичай ми будемо компілювати це з Clang hello1.c і це дасть нам a.out. 747 00:47:53,710 --> 00:47:59,890 Якщо на відміну від вас, а дати йому-S прапор, що ви отримаєте це hello1.s 748 00:47:59,890 --> 00:48:02,750 і ви насправді бачите на асемблері. 749 00:48:02,750 --> 00:48:05,750 >> Я роблю це для дуже короткої програми, але якщо ви повернетеся на Scramble 750 00:48:05,750 --> 00:48:08,740 або відновити або будь-яку програму, ви написали і просто з цікавості 751 00:48:08,740 --> 00:48:13,240 хочу подивитися, що це насправді схоже, що насправді годують в CPU, 752 00:48:13,240 --> 00:48:15,700 Ви можете використовувати це-S прапор з Clang. 753 00:48:15,700 --> 00:48:17,770 Але потім, нарешті, є ще один глюк. 754 00:48:17,770 --> 00:48:21,810 Тут 0 і 1, які представляють моєї реалізації Здрастуй, світ. 755 00:48:21,810 --> 00:48:25,530 Але я використовував чужу функцію в моїй програмі. 756 00:48:25,530 --> 00:48:28,710 Так що, хоча процес був я беру hello.c, 757 00:48:28,710 --> 00:48:34,280 він компілюється в код збірки, а потім вона буде збиратися в 0 і 1, 758 00:48:34,280 --> 00:48:37,460 тільки 0 і 1, які виводяться на даний момент 759 00:48:37,460 --> 00:48:40,270 ті, що в результаті мого коду. 760 00:48:40,270 --> 00:48:44,400 Але чоловік, який написав Printf, вони склали свій код 20 років тому 761 00:48:44,400 --> 00:48:47,000 і вона тепер встановлено десь на прилад, 762 00:48:47,000 --> 00:48:51,610 так що ми якимсь чином повинні об'єднати свої 0 і 1 з моїми 0 і 1, 763 00:48:51,610 --> 00:48:56,160 і це підводить нас до 4-ї і заключний етап компіляції, відомі як посилання. 764 00:48:56,160 --> 00:48:58,680 Таким чином, на лівій стороні у нас є точно така ж картина, як раніше: 765 00:48:58,680 --> 00:49:02,580 hello.c стає збірки коду стає 0 і 1. 766 00:49:02,580 --> 00:49:05,960 Але пам'ятайте, що я використовував стандартні бібліотеки вводу / виводу в мій код, 767 00:49:05,960 --> 00:49:10,350 і це означає, що десь на комп'ютері є файл під назвою stdio.c 768 00:49:10,350 --> 00:49:13,980 або принаймні скомпільовані версії їх тому, що хтось кілька років тому 769 00:49:13,980 --> 00:49:18,530 складений stdio.c в асемблерний код, а потім цілий букет з 0 і 1. 770 00:49:18,530 --> 00:49:21,130 Це те, що відомо як статична чи динамічна бібліотека. 771 00:49:21,130 --> 00:49:23,350 Це якийсь файл сидить десь в прилад. 772 00:49:23,350 --> 00:49:28,710 >> Але, нарешті, я повинен взяти мою 0 і 1, і що людина 0 і 1 773 00:49:28,710 --> 00:49:32,760 і якимось чином зв'язати їх разом, буквально об'єднати ці 0 і 1 774 00:49:32,760 --> 00:49:37,900 в єдиний файл з ім'ям a.out або hello1 або те, що я назвав свою програму 775 00:49:37,900 --> 00:49:43,320 так що кінцевий результат має всі 1 і 0, які повинні скласти свою програму. 776 00:49:43,320 --> 00:49:45,660 Так що весь цей час у цьому семестрі, коли ви використовуєте Clang 777 00:49:45,660 --> 00:49:48,750 і ще недавно запущених зробити для того, щоб запустити Clang, 778 00:49:48,750 --> 00:49:53,580 Всі ці кроки були відбувалося роду миттєво, а цілком свідомо. 779 00:49:53,580 --> 00:49:57,830 І тому, якщо ви продовжувати в інформатиці, а саме CS61, 780 00:49:57,830 --> 00:50:00,850 це шар, який ви будете продовжувати відігніть геть там 781 00:50:00,850 --> 00:50:06,980 говорити про ефективність, безпеку, наслідки, і як ці деталі нижнього рівня. 782 00:50:06,980 --> 00:50:09,220 Але разом з тим, ми збиралися йти C позаду. 783 00:50:09,220 --> 00:50:11,420 Давайте йти вперед і приймати наш 5-хвилинну перерву зараз, 784 00:50:11,420 --> 00:50:14,190 і коли ми повертаємося: в інтернеті. 785 00:50:17,280 --> 00:50:19,170 Добре. Ми повернулися. 786 00:50:19,170 --> 00:50:23,590 Зараз ми починаємо наш погляд не тільки на HTML, тому що, як ви побачите, 787 00:50:23,590 --> 00:50:26,050 HTML себе насправді досить проста 788 00:50:26,050 --> 00:50:29,270 але насправді на веб-програмування в цілому, мережі в цілому, 789 00:50:29,270 --> 00:50:31,770 і як всі ці технології об'єднуються 790 00:50:31,770 --> 00:50:35,400 щоб дозволити нам створювати більш складні програми поверх Інтернету 791 00:50:35,400 --> 00:50:38,690 ніж досі ми змогли в цих чорно-білих вікон. 792 00:50:38,690 --> 00:50:42,140 Дійсно, на даний момент в семестр, хоча ми будемо витрачати менше часу щодо 793 00:50:42,140 --> 00:50:46,200 на PHP, HTML, CSS, JavaScript, SQL і більше, 794 00:50:46,200 --> 00:50:48,480 більшість студентів роблять в кінцевому підсумку робить остаточні проекти, які веб- 795 00:50:48,480 --> 00:50:51,230 тому що, як ви побачите, фон тепер у вас є в C 796 00:50:51,230 --> 00:50:54,450 дуже застосовні до цих мов високого рівня. 797 00:50:54,450 --> 00:50:56,800 >> І, як ви починаєте думати про своє остаточне проекті, 798 00:50:56,800 --> 00:50:59,940 який, так само, як питання, поставлене 0, де ви були заохочені 799 00:50:59,940 --> 00:51:02,160 робити самому нічого цікавого для вас в Scratch, 800 00:51:02,160 --> 00:51:05,790 Остаточний проект це ваша можливість прийняти ваші нові знання і кмітливість з C 801 00:51:05,790 --> 00:51:09,850 або PHP або JavaScript, або як з за спин 802 00:51:09,850 --> 00:51:12,330 і створити свій власний шматок програмного забезпечення для світу, щоб бачити. 803 00:51:12,330 --> 00:51:17,770 І насіння вам ідеї, знайте, що ви можете очолити тут, projects.cs50.net. 804 00:51:17,770 --> 00:51:21,800 Кожен рік ми вимагати ідей від співробітників та викладачів і студентських груп на території кампуса 805 00:51:21,800 --> 00:51:27,330 просто представити свої ідеї для цікавих речей, які можуть бути вирішені за допомогою комп'ютерів, 806 00:51:27,330 --> 00:51:29,860 використання веб-сайтів, за допомогою програмного забезпечення. 807 00:51:29,860 --> 00:51:32,360 Так що, якщо ви боретеся, щоб придумати ідею самостійно, 808 00:51:32,360 --> 00:51:35,790 всіма засобами прокрутки ідеї є з цього року і останній. 809 00:51:35,790 --> 00:51:39,990 Це абсолютно нормально для вирішення проекту, які були вирішені раніше. 810 00:51:39,990 --> 00:51:44,540 Ми бачили багато додатків для бачивши стан пральні на території кампусу, 811 00:51:44,540 --> 00:51:47,000 багато додатків для навігації по меню їдальні, 812 00:51:47,000 --> 00:51:49,540 багато додатків для навігації по каталогу курсів тощо. 813 00:51:49,540 --> 00:51:53,680 І дійсно, в майбутньої лекції та семінари в майбутньому, 814 00:51:53,680 --> 00:51:57,750 Ми познайомимо вас з деякими загальнодоступних API, як комерційно доступні 815 00:51:57,750 --> 00:52:02,520 а також тут можна отримати CS50 на території кампусу, так що у вас є доступ до даних 816 00:52:02,520 --> 00:52:04,910 і може робити цікаві речі з ним. 817 00:52:04,910 --> 00:52:09,380 Так що більше на остаточне проекти в кілька днів, коли ми випускаємо специфікації, 818 00:52:09,380 --> 00:52:12,990 але зараз, знаю, що ви можете працювати поодинці або з одним або двома друзями 819 00:52:12,990 --> 00:52:16,010 на більшості проектів, що представляють інтерес для вас. 820 00:52:16,010 --> 00:52:18,080 Інтернет. 821 00:52:18,080 --> 00:52:22,300 Ви йдете вперед і витягніть ваш ноутбук, ви йдете в facebook.com вперше, 822 00:52:22,300 --> 00:52:27,020 те, що не увійшли останнім часом, і натисніть Enter. Що саме відбувається? 823 00:52:27,020 --> 00:52:30,150 >> Коли ви натиснете Enter на вашому комп'ютері, цілу купу кроків 824 00:52:30,150 --> 00:52:32,600 почати роду чарівним відбувається. 825 00:52:32,600 --> 00:52:35,960 Таким чином, ви тут, на лівому, веб-сервер, як Facebook тут справа, 826 00:52:35,960 --> 00:52:42,500 і якось ви використовуєте цю мову називається HTTP, протокол передачі гіпертексту. 827 00:52:42,500 --> 00:52:46,770 HTTP не є мовою програмування. Це скоріше протокол. 828 00:52:46,770 --> 00:52:52,310 Він являє собою набір конвенцій, веб-браузери і веб-сервери використовують, коли сполучені. 829 00:52:52,310 --> 00:52:54,360 А що це означає наступне. 830 00:52:54,360 --> 00:52:56,790 Багато чого, як в реальному світі, у нас є ці конвенції 831 00:52:56,790 --> 00:53:00,140 де, якщо ви зустрітися з деякими людини в перший раз, якщо ви не заперечуєте, посміюючись мене тут, 832 00:53:00,140 --> 00:53:03,980 Я міг би підійти до вас, кажете: "Привіт, мене звуть Девід». >> Привіт, Девід. Мене звати Семмі. 833 00:53:03,980 --> 00:53:05,770 "Привіт, Девід. Мене звати Семмі". 834 00:53:05,770 --> 00:53:08,310 Так що тепер ми тільки що займалися такого роду дурні людські протоколу 835 00:53:08,310 --> 00:53:12,200 де я ініціював протокол, Семмі відповів, 836 00:53:12,200 --> 00:53:15,060 Ми потиснув руку, і угода буде завершена. 837 00:53:15,060 --> 00:53:18,260 HTTP дуже схожі по духу. 838 00:53:18,260 --> 00:53:23,350 Коли ваші запити веб-браузера www.facebook.com, 839 00:53:23,350 --> 00:53:27,020 що ваш браузер насправді робить розширює свою руку, так би мовити, 840 00:53:27,020 --> 00:53:29,960 до сервера і посилає йому повідомлення. 841 00:53:29,960 --> 00:53:34,220 І це повідомлення, як правило, щось на зразок Get - що ви хочете отримати? - 842 00:53:34,220 --> 00:53:38,740 зрозумійте мене головна сторінка, яка звичайно позначається косою рисою в кінці URL-адреси. 843 00:53:38,740 --> 00:53:43,790 І тільки так ви знаєте на якій мові я говорю, я маю в браузері збираюся розповісти вам, 844 00:53:43,790 --> 00:53:46,930 що я говорю HTTP версії 1.1, 845 00:53:46,930 --> 00:53:51,980 А також для хорошої заходом, я збираюся розповісти вам, що господар, що я хочу на головну сторінку 846 00:53:51,980 --> 00:53:54,120 є facebook.com. 847 00:53:54,120 --> 00:53:57,730 Як правило, веб-браузер, непомітно для вас, людини, 848 00:53:57,730 --> 00:54:03,350 посилає це повідомлення в Інтернеті, коли ви просто вводите www.facebook.com, 849 00:54:03,350 --> 00:54:05,370 >> Вкажіть, у Вашому браузері. 850 00:54:05,370 --> 00:54:07,300 І що Facebook відповість? 851 00:54:07,300 --> 00:54:12,540 Він реагує з деякими подібний вид загадкові деталі, але і багато іншого. 852 00:54:12,540 --> 00:54:14,310 Дозвольте мені йти вперед на головну сторінку Facebook тут. 853 00:54:14,310 --> 00:54:17,480 Це екран, що більшість з нас, ймовірно, ніколи не побачити, якщо ви залишатися в системі весь час, 854 00:54:17,480 --> 00:54:19,830 але це дійсно їх домашню сторінку. 855 00:54:19,830 --> 00:54:24,150 Якщо ми зробимо це в Chrome, помітили, що ви можете підтягти ці маленькі контекстні меню. 856 00:54:24,150 --> 00:54:26,980 Використання Chrome, чи то на Mac OS, Windows, Linux і т.п., 857 00:54:26,980 --> 00:54:31,840 Якщо ви контролюєте миші або клацніть лівою кнопкою миші, як правило, можна підтягнути меню, яке виглядає так, 858 00:54:31,840 --> 00:54:35,870 де чекають кілька варіантів, один з яких є подання джерела сторінку. 859 00:54:35,870 --> 00:54:39,920 Ви також можете зазвичай отримують на ці речі, перейшовши в меню Вид і колупатися. 860 00:54:39,920 --> 00:54:42,750 Наприклад, тут, під View, розробника одне і те ж. 861 00:54:42,750 --> 00:54:45,780 Я збираюся йти вперед і дивитися на View Source сторінку. 862 00:54:45,780 --> 00:54:50,800 Те, що ви бачите, HTML, що Марк написав для представлення facebook.com. 863 00:54:50,800 --> 00:54:55,910 Це повний бардак, але ми побачимо, що це робить трохи більше сенсу незабаром. 864 00:54:55,910 --> 00:54:59,840 Але є деякі моделі тут. Дозвольте мені прокрутіть униз, щоб речі, як це. 865 00:54:59,840 --> 00:55:05,730 Це важко для людини, щоб читати, але зауважив, що є ця модель кутові дужки 866 00:55:05,730 --> 00:55:10,360 з ключовими словами, як варіант, ключові слова, як цінність, деякі лапках. 867 00:55:10,360 --> 00:55:15,660 Це де, коли ви зареєструвалися в перший раз, уточнив, що ваше народження році. 868 00:55:15,660 --> 00:55:19,020 Це випадаюче меню народження роки якось закодовані тут 869 00:55:19,020 --> 00:55:23,870 У цій мові називається HTML, мова гіпертекстової розмітки. 870 00:55:23,870 --> 00:55:27,730 Іншими словами, коли ваш браузер запитує веб-сторінку, 871 00:55:27,730 --> 00:55:30,610 вона говорить ця конвенція називається HTTP. 872 00:55:30,610 --> 00:55:35,170 Але що ж facebook.com відповісти на цей запит? 873 00:55:35,170 --> 00:55:38,260 >> Він реагує з деякими з цих загадкових повідомлень, як ми побачимо через мить. 874 00:55:38,260 --> 00:55:43,760 Але більшу частину своєї відповіді у вигляді HTML, мова гіпертекстової розмітки. 875 00:55:43,760 --> 00:55:47,170 Це фактично мову, на якому веб-сторінка написана. 876 00:55:47,170 --> 00:55:52,030 І те, що веб-браузер дійсно тобто, при отриманні щось на зразок цього, 877 00:55:52,030 --> 00:55:57,120 читає її зверху вниз, зліва направо, і в будь-який момент він бачить одну з цих кутових дужках 878 00:55:57,120 --> 00:56:03,370 слід ключове слово, як варіант, він показує, що мова розмітки відповідним чином. 879 00:56:03,370 --> 00:56:06,820 У цьому випадку він буде відображати меню, що випадає років. 880 00:56:06,820 --> 00:56:09,240 Але знову ж, це повний бардак на що подивитися. 881 00:56:09,240 --> 00:56:16,630 Це не тому, що розробники Facebook проявляються 0, 5 для стилю, наприклад. 882 00:56:16,630 --> 00:56:20,190 Це відбувається тому, що більша частина коду, що вони пишуть, насправді, написано гарно, 883 00:56:20,190 --> 00:56:22,450 добре прокоментований, красиво відступом, тощо, 884 00:56:22,450 --> 00:56:26,080 але, звичайно, машин, комп'ютерів, браузерів дійсно не наплювати 885 00:56:26,080 --> 00:56:27,890 Чи ваш код і стилі. 886 00:56:27,890 --> 00:56:33,100 І справді, це абсолютно марнотратно вдарив клавішу табуляції все ті часи 887 00:56:33,100 --> 00:56:37,650 і поставити коментарів протягом всього вашого коду і вибрати дійсно описові імена змінних 888 00:56:37,650 --> 00:56:42,340 тому що, якщо браузер не хвилює, все, що ви робите в кінці робочого дня витрачає байт. 889 00:56:42,340 --> 00:56:46,660 >> Ось і виходить, що більшість веб-сайтів зробити, це, навіть якщо вихідний код для facebook.com, 890 00:56:46,660 --> 00:56:49,550 для cs50.net і всі ці інші сайти в Інтернеті 891 00:56:49,550 --> 00:56:53,730 , Як правило, добре написана і добре прокоментований і приємно відступ і т.п., 892 00:56:53,730 --> 00:56:59,270 Зазвичай, перш ніж покласти сайт в Інтернет, код зменшена, 893 00:56:59,270 --> 00:57:02,970 якої HTML і CSS - щось ще, що ми скоро побачимо - 894 00:57:02,970 --> 00:57:05,960 Код JavaScript ми скоро побачимо стискається, 895 00:57:05,960 --> 00:57:09,250 якої довгих імен змінних стати X, У і Z, 896 00:57:09,250 --> 00:57:13,900 і все це прогалина, яка робить все виглядає так читається все це викидати, 897 00:57:13,900 --> 00:57:17,700 тому що, якщо ви думаєте про це так, Facebook отримує млрд звернень до сторінки на день - 898 00:57:17,700 --> 00:57:21,670 щось божевільний, як що - так що, якщо програміст просто бути анальний 899 00:57:21,670 --> 00:57:26,660 натисніть пробіл одне додаткове час, просто для відступу деякі рядки коду все настільки більше? 900 00:57:26,660 --> 00:57:29,500 Що мається на увазі якщо Facebook зберігається, що прогалини 901 00:57:29,500 --> 00:57:32,880 У всіх байтів вони відправляють назад в людей в Інтернеті? 902 00:57:32,880 --> 00:57:36,400 Натискання клавіші пробілу раз дає вам додатковий байт у файлі. 903 00:57:36,400 --> 00:57:39,730 І якщо мільярда чоловік потім перейти до завантаження домашньої сторінки в той день, 904 00:57:39,730 --> 00:57:42,060 наскільки більше даних ви передаються через Інтернет? 905 00:57:42,060 --> 00:57:45,200 Gigabyte без поважної причини. 906 00:57:45,200 --> 00:57:48,510 І експлуатацію, для багатьох веб-сайтах, це не така масштабованої питання, 907 00:57:48,510 --> 00:57:51,030 але для Facebook, для Google, для деяких з найбільш популярних веб-сайтів 908 00:57:51,030 --> 00:57:54,860 є великий стимул фінансово щоб зробити ваш код виглядає як безлад 909 00:57:54,860 --> 00:57:58,980 так що ви будете використовувати як кілька байт, як можливо у додаток до потім стиснути його 910 00:57:58,980 --> 00:58:01,500 використовуючи щось на зразок блискавки, алгоритм, званий GZIP, 911 00:58:01,500 --> 00:58:04,250 , Що браузер автоматично. Але це жахливо. 912 00:58:04,250 --> 00:58:08,060 Ми ніколи не дізнаємося нічого про сайтах інших людей, і, як проектувати веб-сторінок 913 00:58:08,060 --> 00:58:09,680 якщо ми повинні дивитися на це так. 914 00:58:09,680 --> 00:58:13,620 >> Так що, на щастя, браузери, такі як Chrome і IE і Firefox в ці дні 915 00:58:13,620 --> 00:58:16,450 як правило, мають вбудовані інструменти розробника. 916 00:58:16,450 --> 00:58:21,730 У самому справі, якщо я йду сюди, щоб огляд елементів або якщо я йду, щоб подивитися, розробників, 917 00:58:21,730 --> 00:58:25,220 і перейдіть до Інструменти розробника явно, 918 00:58:25,220 --> 00:58:27,640 це вікно в нижній частині екрана тепер моя спливає. 919 00:58:27,640 --> 00:58:31,230 Це трохи лякає спочатку, тому що там багато незнайомих вкладки тут, 920 00:58:31,230 --> 00:58:34,510 але якщо я натискаю на елементи на всьому шляху в лівому нижньому, 921 00:58:34,510 --> 00:58:38,810 Chrome, очевидно, дуже розумний. Він знає, як інтерпретувати весь цей код. 922 00:58:38,810 --> 00:58:42,320 І те, що Chrome робить це очищає всі HTML Facebook. 923 00:58:42,320 --> 00:58:45,680 Навіть якщо там не прогалини там, не відступу там, 924 00:58:45,680 --> 00:58:51,120 Зараз помічаю, що я можу почати навігацію цій веб-сторінці, тим більше ієрархічно. 925 00:58:51,120 --> 00:58:56,910 Виходить, що кожна веб-сторінка написана на мові називається HTML5 повинні почати з цього, 926 00:58:56,910 --> 00:59:03,980 ця декларація DOCTYPE, так би мовити: 927 00:59:03,980 --> 00:59:07,840 Це свого роду світлом і сірий там, але це найперша рядок коду в цьому файлі, 928 00:59:07,840 --> 00:59:12,080 і що саме говорить браузеру, "Гей, ось деякі HTML5. от веб-сторінку". 929 00:59:12,080 --> 00:59:18,490 Перша відкрита дужка крім того, трапляється, ця річ, відкриває дужка HTML тегів, 930 00:59:18,490 --> 00:59:22,320 , А потім, якщо я пірнути в глибокі - ці стрілки абсолютно безглуздо; 931 00:59:22,320 --> 00:59:25,140 вони тільки заради презентації, вони не є насправді у файлі - 932 00:59:25,140 --> 00:59:30,300 помітите, що всередині HTML тега Facebook, все, що починається з відкриваючої дужки 933 00:59:30,300 --> 00:59:32,910 а потім слово називається міткою. 934 00:59:32,910 --> 00:59:38,610 Таким чином, усередині тега HTML-видимому, є тег голови і тіла тега. 935 00:59:38,610 --> 00:59:41,930 Усередині голови теги тепер весь безлад на Facebook 936 00:59:41,930 --> 00:59:45,620 тому що у них багато метадані та інші речі для маркетингу і реклами. 937 00:59:45,620 --> 00:59:50,600 >> Але якщо ми прокрутити вниз, вниз, вниз, вниз, давайте подивимося, де він знаходиться. Ось він. 938 00:59:50,600 --> 00:59:52,210 Це одна принаймні трохи знайомі. 939 00:59:52,210 --> 00:59:55,990 Назва головної сторінки Facebook, якщо ви подивитеся на вкладці в рядку заголовка, 940 00:59:55,990 --> 00:59:59,060 є Ласкаво просимо на Facebook - Увійдіть, Зареєструватися або дізнатися більше. 941 00:59:59,060 --> 01:00:01,110 Ось те, що ви бачите у заголовку Chrome, 942 01:00:01,110 --> 01:00:03,100 і ось як це представлено в коді. 943 01:00:03,100 --> 01:00:08,090 Якщо ми будемо ігнорувати все інше в голові, велика частина кишки веб-сторінка знаходиться в тілі, 944 01:00:08,090 --> 01:00:10,940 і виходить, що код Facebook, буде виглядати більш складними 945 01:00:10,940 --> 01:00:14,540 ніж більшість речей, які ми напишемо спочатку тільки тому, що вона була побудована на протязі багатьох років, 946 01:00:14,540 --> 01:00:17,260 але є багато сценаріїв теги, JavaScript код, 947 01:00:17,260 --> 01:00:18,870 , Що робить сайт дуже інтерактивним: 948 01:00:18,870 --> 01:00:22,330 бачачи поновлення статусу миттєво використанні мов, таких як JavaScript. 949 01:00:22,330 --> 01:00:25,270 Там-то називається справ, яка є підрозділом сторінку. 950 01:00:25,270 --> 01:00:27,940 Але перш ніж ми перейдемо до цього подробиці, давайте спробуємо, щоб зменшити масштаб 951 01:00:27,940 --> 01:00:31,920 і подивимося на просту версію Facebook 1.0, так би мовити. 952 01:00:31,920 --> 01:00:34,740 Ось Здрастуй, світ веб-сторінок. 953 01:00:34,740 --> 01:00:37,370 Він має, що DOCTYPE декларації на самому верху 954 01:00:37,370 --> 01:00:40,280 який трохи відрізняється від всього іншого. 955 01:00:40,280 --> 01:00:46,130 Нічого іншого ми пишемо на веб-сторінці буде починатися з 01:00:48,880 і, за винятком так званих коментарі в HTML. 957 01:00:48,880 --> 01:00:53,000 Але по більшій частині, всі в веб-сторінка відкрита кронштейн, ключове слово, закриває дужка. 958 01:00:53,000 --> 01:00:56,220 >> У цьому випадку можна побачити найпростіші веб-сторінок можливо. 959 01:00:56,220 --> 01:01:00,260 HTML тегів містить головою теги і містить тіло тега, 960 01:01:00,260 --> 01:01:04,580 але зверніть увагу, що є таке поняття запуску і зупинки тегами. 961 01:01:04,580 --> 01:01:11,360 Це початок тега HTML, це закриває тег або закриває тега. 962 01:01:11,360 --> 01:01:15,400 Зверніть увагу, що вони начебто протилежності в тому сенсі, що закриває тег або закриваючий тег 963 01:01:15,400 --> 01:01:20,030 Чи має це косу риску всередині себе. 964 01:01:20,030 --> 01:01:23,540 Між тим, є відкриті теги голову тут і закриваючий тег голову тут. 965 01:01:23,540 --> 01:01:26,880 >> Там у відкриту назву і закриваючий тег назви тут. 966 01:01:26,880 --> 01:01:29,850 Той факт, що я поклав книгу на одній лінії, чисто умовно. 967 01:01:29,850 --> 01:01:33,760 Він просто дивився, як вона буде поміщається на одному рядку, тому я не став удару Введіть пару раз. 968 01:01:33,760 --> 01:01:38,200 Тим часом, тіло, я зробив відступ просто бути ніколи так ясно. 969 01:01:38,200 --> 01:01:41,050 Зверніть увагу, що HTML є досить дурним язиком. 970 01:01:41,050 --> 01:01:43,410 У самому справі, ще в день до появи WYSIWYG редакторів 971 01:01:43,410 --> 01:01:46,770 і Microsoft Word, де ви можете сказати: "Зробіть це сміливе, зробити це курсив," 972 01:01:46,770 --> 01:01:50,850 ви насправді введіть мало команд в нарисах 20 + років тому 973 01:01:50,850 --> 01:01:55,740 , В якому ви сказали б, "Почніть робити цього тексту напівжирним шрифтом. Припиніть робити цього тексту напівжирним". 974 01:01:55,740 --> 01:01:59,010 "Почніть робити цього тексту курсивом. Припиніть робити цього тексту курсивом". 975 01:01:59,010 --> 01:02:01,850 >> Це те, що HTML або будь-який інший мову розмітки. 976 01:02:01,850 --> 01:02:05,530 Це перший тег говорить: "Гей, браузером. Ось деякі HTML." 977 01:02:05,530 --> 01:02:09,880 Наступний тег говорить: "Гей, браузером. Ось голова, заголовок моєї веб-сторінки." 978 01:02:09,880 --> 01:02:11,650 "Гей, браузером. Ось титул". 979 01:02:11,650 --> 01:02:15,880 А потім сюди: "Ей, браузер. Ось саме за титул". 980 01:02:15,880 --> 01:02:20,000 Так що це, як браузер знає, більше не буде відображати більше символів, ніж Здрастуй, світ! 981 01:02:20,000 --> 01:02:21,860 У рядку заголовка. 982 01:02:21,860 --> 01:02:23,640 Між тим, ця говорить: "Ось і все на голову". 983 01:02:23,640 --> 01:02:28,340 Це каже: "Ось йде тіло Ось реальне тіло." - Буквально, слова Hello, World. 984 01:02:28,340 --> 01:02:33,190 І це говорить тут: "Ось це для тіла. Ось саме для HTML." 985 01:02:33,190 --> 01:02:34,640 Так браузерів досить безглуздо. 986 01:02:34,640 --> 01:02:39,920 Вони тільки що прочитали цей матеріал зверху вниз, зліва направо, і робити саме те, що вони говорять. 987 01:02:39,920 --> 01:02:41,860 Давайте насправді зробити невеличкий приклад. 988 01:02:41,860 --> 01:02:46,240 Дозвольте мені відкрити найпростіших програм на моєму Mac тут, а саме TextEdit. 989 01:02:46,240 --> 01:02:48,220 У Windows можна використовувати Notepad.exe. 990 01:02:48,220 --> 01:02:50,520 Але це все, що потрібно, щоб почати заробляти веб-сторінок. 991 01:02:50,520 --> 01:02:53,730 Я збираюся йти вперед і просто скопіювати і вставити цей код в цей файл. 992 01:02:53,730 --> 01:02:57,210 Я збираюся йти вперед і зберегти його на моєму робочому столі, 993 01:02:57,210 --> 01:03:01,220 і я хочу зберегти це як hello.html, 994 01:03:01,220 --> 01:03:03,840 і тепер файл з ім'ям hello.html. 995 01:03:03,840 --> 01:03:05,690 Ось він на моєму робочому столі. 996 01:03:05,690 --> 01:03:11,130 А тепер дозвольте мені перейти в браузері і перетягнути файл в браузері. 997 01:03:11,130 --> 01:03:14,060 І вуаля, ось мій найперший веб-сторінки. 998 01:03:14,060 --> 01:03:17,340 Зверніть увагу, що назви вкладки Привіт, світ в тег заголовка, 999 01:03:17,340 --> 01:03:20,040 і зауважте, що Здрастуй, світ є тіло моє веб-сторінки, 1000 01:03:20,040 --> 01:03:22,190 і у-у-ух, я в Інтернеті. 1001 01:03:22,190 --> 01:03:24,700 >> Я не дійсно, мають рацію, тому що цей файл не в інтернеті. 1002 01:03:24,700 --> 01:03:28,330 Це трапляється, на мій локальний жорсткий диск в даний конкретний шлях. 1003 01:03:28,330 --> 01:03:32,720 Але ідея та ж. Все, що нам зараз потрібно, це веб-сервер, до якого, щоб завантажити його. 1004 01:03:32,720 --> 01:03:37,410 Але спочатку давайте насправді ввести трохи більш складний і трохи більше стилізації. 1005 01:03:37,410 --> 01:03:39,890 Це просто, якщо нудно, веб-сторінки. 1006 01:03:39,890 --> 01:03:41,990 Виявляється, є й інші типи теги ми можемо використовувати. 1007 01:03:41,990 --> 01:03:45,530 Наприклад, тут, в жовтому Я представив 2 нових тегів. 1008 01:03:45,530 --> 01:03:49,630 Ми не будемо грати багато з цим сьогодні, але зауважив, що посилання тега 1009 01:03:49,630 --> 01:03:52,520 якось зовні відрізняється від всього іншого. 1010 01:03:52,520 --> 01:03:55,370 Посилання теги бере те, що називають атрибутами, 1011 01:03:55,370 --> 01:03:59,770 і атрибутом є те, що змінює поведінку тега. 1012 01:03:59,770 --> 01:04:03,840 В даному випадку це не кращий вибір імен, посилання, тому що це частково безглуздо, 1013 01:04:03,840 --> 01:04:11,590 але ця посилання тег говорить, по суті, включає файл під назвою styles.css всередині моєї веб-сторінці. 1014 01:04:11,590 --> 01:04:15,400 Ви можете думати про це як аналогічний C # включає в директиві. 1015 01:04:15,400 --> 01:04:19,650 Styles.css має на увазі іншої мови взагалі, що ми не будемо грати з сьогоднішнього дня, 1016 01:04:19,650 --> 01:04:23,790 але це для естетики: розміри шрифту, кольори, відступи, відступи, поля 1017 01:04:23,790 --> 01:04:26,040 і все таке докладніше естетики. 1018 01:04:26,040 --> 01:04:28,820 Між тим, тег функціонально схожі, 1019 01:04:28,820 --> 01:04:33,140 Але замість того, включають CSS, що мова, він включає в себе іншу мову, JavaScript. 1020 01:04:33,140 --> 01:04:37,810 Отже, іншими словами, з цими 2 теги я в кінцевому підсумку буде можливість написати свою власну веб-сторінку 1021 01:04:37,810 --> 01:04:41,490 але і тягнути в код, що я чи хтось інший написав 1022 01:04:41,490 --> 01:04:44,350 так що ми можемо стояти на плечі інших людей, ми можемо практикувати хороший дизайн, 1023 01:04:44,350 --> 01:04:46,120 винесення загального коду. 1024 01:04:46,120 --> 01:04:49,090 Якщо у мене є 10 різних веб-сторінок, це означає, що деякі з моїх естетика 1025 01:04:49,090 --> 01:04:52,490 можна винести, дуже схожий на № включають в окремий файл. 1026 01:04:52,490 --> 01:04:54,420 Таким чином, ми як туди добратися. 1027 01:04:54,420 --> 01:04:57,180 Але давайте насправді спочатку зробити щось більш цікаве з цим файлом. 1028 01:04:57,180 --> 01:05:01,110 >> Знову ж таки, це тільки TextEdit. Я технічно не в Інтернеті, але ми доберемося туди. 1029 01:05:01,110 --> 01:05:04,910 Я хотів би зробити Привіт, світ трохи сміливіше, ніж він є. 1030 01:05:04,910 --> 01:05:10,890 Так що привіт, давай як завгодно говорити для сміливих. 1031 01:05:10,890 --> 01:05:15,910 Знову ж таки, історія та ж: Привіт, кома, почати робити це сміливий, 1032 01:05:15,910 --> 01:05:19,730 тоді світ стає жирним шрифтом, а це значить зупинити друк цьому жирним шрифтом. 1033 01:05:19,730 --> 01:05:24,020 Дозвольте мені йти вперед і зберегти свій файл, поверніться до Chrome, я буду збільшення саме так ми бачимо це краще, 1034 01:05:24,020 --> 01:05:27,870 і перезавантажити, і ви побачите, що світ зараз жирним шрифтом. 1035 01:05:27,870 --> 01:05:31,810 Веб це все про гіперпосилання, так що давайте йти вперед і робити це: 1036 01:05:31,810 --> 01:05:38,550 мій улюблений сайт, скажімо, youtube.com. 1037 01:05:38,550 --> 01:05:43,810 Зберегти, перезавантажити. Добре. Там є пара проблем в даний час, крім неподобства на сайті. 1038 01:05:43,810 --> 01:05:47,310 1, я впевнений, я вдарив Введіть тут. І я зробив. 1039 01:05:47,310 --> 01:05:51,590 Я не тільки вдарив Enter, я також відступи, практикуючи те, що ми проповідували про стилі, 1040 01:05:51,590 --> 01:05:54,930 але мої знаходиться поряд з миром. 1041 01:05:54,930 --> 01:05:58,410 Так чому ж це? Браузери тільки те, що ви говорите їм зробити. 1042 01:05:58,410 --> 01:06:04,010 Я не сказав браузера, "Break ліній тут. Вставте абзацу тут". 1043 01:06:04,010 --> 01:06:07,820 Таким чином, браузер, це не має значення, якщо я вдарив Повернення в 30 разів, 1044 01:06:07,820 --> 01:06:10,820 він як і раніше збирається поставити мою поруч зі світом. 1045 01:06:10,820 --> 01:06:15,930 Що мені дійсно потрібно зробити, тут сказати щось подібне
, вставити розрив рядка. 1046 01:06:15,930 --> 01:06:17,940 >> А насправді, розрив рядка це свого роду дивні речі 1047 01:06:17,940 --> 01:06:21,650 тому що ви не можете дійсно почати переїзд в інше лінії, то щось зробити, 1048 01:06:21,650 --> 01:06:25,380 а потім зупинити перехід на новий рядок. Це свого роду атомарні операції. 1049 01:06:25,380 --> 01:06:28,140 Ви або робити це чи ні. Ви потрапили Введіть чи ні. 1050 01:06:28,140 --> 01:06:33,390 Так бр трохи інший тег, і тому мені потрібно розібратися як відкрити і закрити його 1051 01:06:33,390 --> 01:06:35,230 все відразу. 1052 01:06:35,230 --> 01:06:37,500 Синтаксис, що це. 1053 01:06:37,500 --> 01:06:41,760 Технічно, ви могли б зробити щось на зразок цього в деяких версіях HTML, 1054 01:06:41,760 --> 01:06:45,600 Але це просто нерозумно, тому що немає ніяких причин для запуску і зупинки щось 1055 01:06:45,600 --> 01:06:48,420 якщо ви можете замість цього зробити все відразу. 1056 01:06:48,420 --> 01:06:52,310 Зрозумійте, що HTML5 не строго вимагає цього чорта, 1057 01:06:52,310 --> 01:06:55,410 так що ви побачите підручники та інтернет-ресурси, які не мають його, 1058 01:06:55,410 --> 01:06:59,780 але для хорошої заходом давайте практикувати симетрії, які ми бачили дотепер. 1059 01:06:59,780 --> 01:07:02,870 Це означає, що тег є як відкриваються і закриваються. 1060 01:07:02,870 --> 01:07:05,220 Так що тепер дозвольте мені зберегти мою справу, повернутися сюди. 1061 01:07:05,220 --> 01:07:10,240 Так, це починає виглядати краще, за винятком Web я знаю, це свого роду інтерактивним, 1062 01:07:10,240 --> 01:07:13,610 і все ж YouTube тут, здається, не приведе ні до чого. 1063 01:07:13,610 --> 01:07:17,560 Це тому, що, хоча вона виглядає як посилання, браузер не знає, що саме по собі, 1064 01:07:17,560 --> 01:07:20,670 так що я повинен сказати браузеру, що це посилання. 1065 01:07:20,670 --> 01:07:22,620 >> Способом зробити це є використання тега: 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 і дозвольте мені перемістити це нова лінія просто так, це трохи більш читабельним, 1069 01:07:38,490 --> 01:07:40,060 і я буду скорочувати розмір шрифту. 1070 01:07:40,060 --> 01:07:43,890 Чи можу я зробити ще? Ні. Там збирається бути ця дихотомія. 1071 01:07:43,890 --> 01:07:46,760 Цей тег, тег прив'язки, дійсно має атрибут, 1072 01:07:46,760 --> 01:07:52,900 які змінюють його поведінку, і значення цього атрибута мабуть URL YouTube. 1073 01:07:52,900 --> 01:07:56,380 Але зверніть увагу на те, що дихотомія тільки тому, що це URL ви збираєтеся, 1074 01:07:56,380 --> 01:08:01,020 це не означає, що має бути слово, яке ви підкреслення і робить посилання. 1075 01:08:01,020 --> 01:08:03,960 Швидше за все, що може бути щось на зразок цього. 1076 01:08:03,960 --> 01:08:10,870 Таким чином, я повинен сказати, припинити це слово гіперпосилання за допомогою закриває тега якір. 1077 01:08:10,870 --> 01:08:12,650 Зверніть увагу, що я не роблю цього. 1078 01:08:12,650 --> 01:08:15,890 1, це буде просто трата часу кожного, і в цьому немає необхідності. 1079 01:08:15,890 --> 01:08:19,290 >> Щоб закрити тег, ви тільки згадати ім'я тега знову. 1080 01:08:19,290 --> 01:08:21,800 Ви не говорячи вже про будь-якому з атрибутів. 1081 01:08:21,800 --> 01:08:26,189 Так що давайте економити, що повернуся. Добре, вуаля, тепер це синій та гіперпосиланнями. 1082 01:08:26,189 --> 01:08:29,430 Якщо я натискаю, я насправді піти в YouTube. 1083 01:08:29,430 --> 01:08:32,529 Тому, навіть якщо мій веб-сторінки не в інтернеті, це принаймні HTML, 1084 01:08:32,529 --> 01:08:37,930 і якщо ми дозволимо Інтернет наздоганяти, ми насправді в кінцевому підсумку тут на youtube.com. 1085 01:08:37,930 --> 01:08:40,670 І я можу повернутися і ось мої веб-сторінки. Але зверніть увагу на це. 1086 01:08:40,670 --> 01:08:43,120 Якщо ви коли-небудь отримав спам або фішинг-атакою, 1087 01:08:43,120 --> 01:08:45,850 Тепер у вас є можливість уже через п'ять хвилин, щоб зробити те ж саме. 1088 01:08:45,850 --> 01:08:50,920 Ми можемо піти сюди і зробити щось подібне www.badguy.com 1089 01:08:50,920 --> 01:08:59,319 або що уривчасті сайт, а потім ви можете сказати підтвердити свій PayPal акаунт. 1090 01:08:59,319 --> 01:09:04,840 [Сміється] І тепер це буде йти в badguy.com, який я не збираюся натиснути на 1091 01:09:04,840 --> 01:09:08,000 тому що я поняття не маю, що призводить. [Сміх] 1092 01:09:08,000 --> 01:09:10,859 >> Але тепер у нас є можливість насправді в кінцевому підсумку там. 1093 01:09:10,859 --> 01:09:12,640 Таким чином, ми дійсно тільки починає дряпати поверхню. 1094 01:09:12,640 --> 01:09:15,830 Ми не програмування як такого, ми пишемо мовою розмітки. 1095 01:09:15,830 --> 01:09:18,569 Але як тільки ми округляємо нашу лексику в HTML, 1096 01:09:18,569 --> 01:09:21,520 ми введемо PHP, фактично мова програмування 1097 01:09:21,520 --> 01:09:26,859 , Що дозволить нам генерувати HTML автоматично генерувати CSS автоматично, 1098 01:09:26,859 --> 01:09:29,430 так що ми можемо почати в середу для реалізації, скажімо, 1099 01:09:29,430 --> 01:09:31,700 нашої власної пошукової системи і багато іншого. 1100 01:09:31,700 --> 01:09:34,770 Але про це протягом декількох днів. Ми побачимося. 1101 01:09:34,870 --> 01:09:39,000 >> [CS50.TV]