1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [Недела 7] 2 00:00:02,440 --> 00:00:04,730 [Дејвид Џ Malan - Универзитетот Харвард] 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 ќе имаат можност да натпревар wits со некои од персоналот на курсот 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 чисто се одлучат, а потоа износот на време и износот на RAM и повеќе 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 Чисто да се одлучат во, но тоа е можност да се види само колку малку RAM меморија 24 00:01:13,790 --> 00:01:16,790 и како неколку процесорот секунди можете да го користите vis-a-vis некои од своите соученици. 25 00:01:16,790 --> 00:01:20,540 >> И јас ќе признаам дека Кевин Мајкл Шмид, 26 00:01:20,540 --> 00:01:23,750 моментално во број 1 позиција како еден од TFS, 27 00:01:23,750 --> 00:01:28,120 ова е имплементација дека ние не се јавите можно 28 00:01:28,120 --> 00:01:32,700 со оглед на тоа тој е користење на речиси 0 RAM и речиси 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 [Golf е гитара и мојот омилен нешто работи.] [Смеа] 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 [♪ ♪] [Malan] Google ја ако не сте запознаени со овој мем. 72 00:04:55,380 --> 00:05:01,480 >> А потоа на крај, неколку други кои добија испратени дека можеби победи симпатична награда. 73 00:05:01,480 --> 00:05:06,820 [Студентите] Aww! >> [Malan] Ние ќе мора да го слуша. Ова е краток, така слушам внимателно. 74 00:05:08,580 --> 00:05:11,150 [Жена претседател] Што е вашето име? >> Louie. 75 00:05:11,150 --> 00:05:16,120 [Жена претседател] Што е ова? >> [Кикоти] CS50. [Смеа] 76 00:05:16,120 --> 00:05:19,510 [Malan] Тој два не се, иако. 77 00:05:19,510 --> 00:05:22,240 Еве ќе одиме, последниот. 78 00:05:23,030 --> 00:05:26,980 Моето име е Louie, и ова е 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 и Ц, како што може да го доживеале досега, 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 не е сето тоа популарни, П не е сето она што популарни, но А и Е се супер популарен. 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 дури и на повеќето ретко се користат како П и Z, 118 00:07:47,440 --> 00:07:51,910 Што ако ние се користи помалку бити за А и Е и С и најпопуларните букви 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 Можеби сте пораснале знаејќи малку нешто за Morse code, 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 Ова е прилично ефикасни кодирање, и известување дека од најпопуларните писмо - на пример, Е - 130 00:08:26,640 --> 00:08:28,980 користи најкус на сигнализација. 131 00:08:28,980 --> 00:08:31,740 Morse code е за сите биип-биип-биип-биип-биип-биип и одржување тонови 132 00:08:31,740 --> 00:08:34,799 или за кратки периоди на време или долги периоди на време. 133 00:08:34,799 --> 00:08:40,330 Е, како означува со точка, е супер краток ѕвонче, само ѕвонче, и дека ќе претставува Д 134 00:08:40,330 --> 00:08:43,960 Спротивно на тоа, Т ќе биде подолг ѕвонче, како ѕвонче [продолжува звук] 135 00:08:43,960 --> 00:08:45,710 и дека ќе претставува Т 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 Но gotcha тука е дека Morse code е малку недостатоци 140 00:08:58,150 --> 00:09:00,610 со тоа што не е веднаш decodable. 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 [Студент] А >> [Malan] Можеби. 144 00:09:15,330 --> 00:09:18,270 Таа, исто така може да биде Е проследено со Т 145 00:09:18,270 --> 00:09:23,390 Со други зборови, Morse code, и покрај тоа што Нотингем овој принцип на оптимизирање на аголот случај, 146 00:09:23,390 --> 00:09:26,250 тоа не се позајмуваат на непосредна decodability. 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 бидејќи ако не знаете од каде тие паузи се, може да се збуни за ЕТ или обратно. 150 00:09:39,660 --> 00:09:43,880 >> Така што можете да направите? Во Morse code може да се само пауза помеѓу секоја од буквите. 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 каде Е е префикс, на пример, на А - 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 што личи ова. Тоа е целосна глупост, но тоа е составен од Како, BS, CS, ДС, и Ес. 163 00:10:31,270 --> 00:10:34,890 И ако навистина смета на сите на Како, BS, CS, ДС, и Es 164 00:10:34,890 --> 00:10:36,870 а потоа се делат со вкупниот број на букви, 165 00:10:36,870 --> 00:10:42,710 оваа мала шема тука вели дека 45% од буквите се Ес, 20% се, 166 00:10:42,710 --> 00:10:45,010 10% BS, и така натаму. 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 но тоа е навистина случај дека Е останува најпопуларен, 171 00:10:55,220 --> 00:11:01,450 и Б и Ц се најмалку популарни, барем од овие 5 букви од азбуката. 172 00:11:01,450 --> 00:11:04,040 Па како можеме да одиме за кои доаѓаат со кодирање, 173 00:11:04,040 --> 00:11:08,430 бинарни кодирање, модел на 0-ти и 1S за секоја од овие писма 174 00:11:08,430 --> 00:11:14,820 во таков начин што Е е краток модел и можеби Б и Ц се малку повеќе модели, 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 Така што секоја од овие работи може да биде struct C 184 00:11:45,310 --> 00:11:50,200 и во внатрешноста на struct Ц може да биде плови претставува фреквенција брои 185 00:11:50,200 --> 00:11:52,510 а потоа можеби знак претставуваат писмото. 186 00:11:52,510 --> 00:11:56,470 Значи мислам на овие јазли како само секој стар C struct но, за сега, повисоко ниво. 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 поврзувајќи ги со нова root јазол. 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 е произволно лево и Ц е произволно право. 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-ти и 1S. 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 бидејќи тие треба бидејќи ние ги пресметуваат од се-Go за да додадете до 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 >> Она што се случува да се направи сега е да предложи дека со цел да го претставува буквата E, 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 Значи импликација тука за Хафман беше дека кодирање Е во бинарен само ќе биде 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 И сега забележите веќе имаме сопственост на непосредна decodability 246 00:15:36,010 --> 00:15:38,090 што немавме во Morse code. 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 тоа е мора да биде Е, ако видите 0, тогаш од 1 тоа е очигледно мора да биде А 250 00:15:54,870 --> 00:15:58,410 Слично на тоа, она што е D? 001. 251 00:15:58,410 --> 00:16:01,440 Што е Ц? 0001. 252 00:16:01,440 --> 00:16:05,320 И она што е Б? 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 секогаш ќе биде Б 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 >> Од најпопуларните писмо - во овој случај е - има добивано и најкраткиот кодирање, 261 00:16:35,080 --> 00:16:37,430 А има добивано следниот најкус кодирање, 262 00:16:37,430 --> 00:16:41,390 и Б и Ц, кои веќе се знаевме од се-Go беа вид на најмалку популарна 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 Но, постои gotcha тука. 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 за Е и 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 Б-А-Д, ти си веројатно ќе се користи помалку бити, 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 дури и со нешто како zip или формати на датотеки може да биде запознаен со - 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 >> Некои програми како ZIP се доволно паметни да сфатат дека, 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 може да биде почеток на Б или почетокот на 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 >> Двосмисленоста само може да се појават, како и во случај на Morse code, 334 00:21:01,910 --> 00:21:06,770 Ако, на пример, Ц беше некаде по должината на патеката од коренот до Б 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 се ќе биде остава некаде лево од Б или право на E. 339 00:21:27,560 --> 00:21:28,900 Па по дефиниција, тие мора да бидат лисја. 340 00:21:28,900 --> 00:21:32,940 Инаку, ти си точно во право, ние не го реши проблемот што Morse code соочува. 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-ти и 1S. 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 колку битови се вие ​​всушност треба да флип со цел да се промени во мали букви a или обратно? 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 можете да видите повторно тука дека колку битови ќе треба да се flipped 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 битови како 01.000.001 и 01.100.001? 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 Ако јас се направи целата жолта стринг 0-ти освен за еден малку што сакате да го промените 365 00:23:13,420 --> 00:23:17,900 и тогаш јас се воведе нов оператор познат како оператор bitwise - 366 00:23:17,900 --> 00:23:21,210 bitwise во смисла дека тоа функционира на индивидуалните битови, 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 и bitwise ИЛИ го со жолто низа од битови? 370 00:23:37,060 --> 00:23:41,300 Со други зборови, се сетам на нашата дискусија на Булова изрази во Скреч, а потоа во В 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 а потоа вие "или" тоа заедно со користење на овој нов Ц оператор, 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 Значи излегува дека ако се земе голема буква А и bitwise ИЛИ го со број 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 А пред тоа, ние го направи целиот жолта маска 0-ти 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 што ако јас наместо "и" нив заедно? Таа се вика bitwise и. 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 Јас сум прогласување на карактерот c за писмото што корисникот ќе напишеш внатре 435 00:27:55,980 --> 00:28:00,690 Јас тогаш се користи запознаени направи додека јамка само да бидете сигурни дека корисникот дефинитивно ми дава капитал 436 00:28:00,690 --> 00:28:05,010 или Б или В .. 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 Јас тогаш може да се земе писмото како знак тука, bitwise "или" со буквално бројот 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 [Malan] Ова се случува да ја претставува хексадецимално. 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 битови е она? Супер лесно. Само сите 0-ти. 461 00:29:44,690 --> 00:29:46,780 Значи 4 битови како 0-ти. 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-ти и 1S обично во код. 475 00:30:35,960 --> 00:30:38,540 Вие не може да тргне 00.010 и така натаму. 476 00:30:38,540 --> 00:30:42,380 >> Мора да изберете децимална или хексадецимален или octal или други нотации. 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. Тоа ќе биде ff. 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 [Студент] а. >> Значи, б, в, г. 487 00:31:29,510 --> 00:31:33,470 Можете да дознаам од таму што шема на битови г всушност претставува. 488 00:31:33,470 --> 00:31:38,850 И ако го направите математика, ќе видиме дека маската ќе заврши добивање назад е идентична со ова. 489 00:31:38,850 --> 00:31:45,580 Ова е ѓ, сите 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 Излегува можев да се спомене тоа затоа што со bitwise операции 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 Фрлите поглед на оваа последна пример вклучуваат bitwise операции. 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 Јас прв iterate од она на што? 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 Ова е уште еден bitwise оператор не сум видел, најверојатно. 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 по дифолт ќе биде заменет со 0-ти. 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 место - they're сите удвојување како да одиш на лево. 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 Ова тогаш ми дава маска, која е сè 0-ти освен за 1 во точно место каде што го сакаат тоа, 550 00:35:22,580 --> 00:35:27,920 а потоа овој израз, кој е украден од toupper.c, 551 00:35:27,920 --> 00:35:31,770 е едноставно велејќи земе бројот n дека корисникот ја внеле во, 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 и тоа го користи овој bitwise и трик е да се каже дали има 1 бит во влез на корисникот тука? 558 00:35:52,950 --> 00:35:59,220 >> Дали има 1 бит во влез на корисникот тука? И ако е така, буквално печати 1, друго печати 0. 559 00:35:59,220 --> 00:36:03,780 Ние го правиме ова со ints само затоа што тоа е причината зошто ние сме прави 32 бита, наместо на 8, 560 00:36:03,780 --> 00:36:06,900 но она што го воведе тогаш е тоа bitwise И, ова bitwise ИЛИ, 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 Всушност, ако сте во ситуација да претставуваат нешто како низа на Booleans 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 Што е bool, всушност, под хаубата? 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 битови да претставуваат секоја bool, што е сосема непотребното 577 00:37:04,880 --> 00:37:09,040 бидејќи очигледно, колку битови се што треба да претставуваат bool? Само 1. 578 00:37:09,040 --> 00:37:13,190 Значи излегува дека ако сега имаат способност со bitwise оператори 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 Тоа навистина се стави крај на енергија. Дали постојат било какви прашања во врска со bitwise операции? 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 ние разговаравме малку за тоа како ние сега може да почне манипулирање работи на ниво bitwise. 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 Овие можат да бидат застапени во формати на датотеки може да знам - GIFs, на пример. 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 назад во вашиот гребење дена. 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 Слично како кога ние zoomed во на лицето на Rob во Photoshop. 610 00:39:13,370 --> 00:39:15,500 Штом добивме подлабоко и подлабоко и подлабоко во сликата, 611 00:39:15,500 --> 00:39:19,990 го започна гледањето на pixelation, сите квадрати кои сочинуваат окото во тој случај. 612 00:39:19,990 --> 00:39:24,130 Истиот договор тука. Ако ние zoomed во доста, ќе видите поединечни точки. 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 формат е lossless компресија формат, 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 Фејсбук слики и Фликр фотографии и слично 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 или да ги преземе за навистина crappy телефон, 628 00:40:15,580 --> 00:40:19,510 знаеш дека таа слика ќе почне да се многу splotchy и pixelated, 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 се случува да се каже, "Црно" 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 Значи GIFs, тогаш може да се компресира, без губење на какви било информации. 643 00:41:06,110 --> 00:41:09,510 Но, ако сте имале да се погоди, ако тоа е алгоритам што GIFs употреба, 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 Значи, ако ние всушност се отвори папка на мојот хард диск кој има овие GIFs, 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 имате Р.В. возење минатото една куќа и едно дрво. 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 Ова е општо позната како interframe компресија 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 што всушност чува информациите redundantly само како малку здрав разум се провери. 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 минути напушти Ц зад засекогаш во лекција? Да. Не во psets, иако. 691 00:44:03,890 --> 00:44:10,210 Последно приказна за C и тогаш дојде до многу секси работи 692 00:44:10,210 --> 00:44:13,870 вклучувајќи HTML и веб и Woo-Hoo. Во ред. 693 00:44:13,870 --> 00:44:16,050 Еве ќе одиме. Тоа е мотивација. 694 00:44:16,050 --> 00:44:20,020 Излегува сето ова време кога ние сме биле пишување програми трчаме ѕвекот. 695 00:44:20,020 --> 00:44:23,890 И ѕвекот, што рековме, бидејќи првата недела доста, потребно изворниот код 696 00:44:23,890 --> 00:44:25,740 и го претвора во објектниот код. 697 00:44:25,740 --> 00:44:28,540 Таа ги зема C и се конвертира во 0-ти и 1S. 698 00:44:28,540 --> 00:44:32,150 Јас сум вид на се лаже за вас за неколку недели, бидејќи тоа не е толку едноставно како што. 699 00:44:32,150 --> 00:44:36,750 >> Има многу повеќе се случува под хаубата кога ќе ја стартувате програмата како ѕвекот. 700 00:44:36,750 --> 00:44:39,560 Всушност, процесот на изготвување програма навистина може да се сумира, 701 00:44:39,560 --> 00:44:42,210 како што може да се сети од видео на Rob за компајлери, 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 # Include 710 00:45:13,550 --> 00:45:17,210 Што значи # Include не за нас? 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 во составувањето е пред-обработка, при што програма како ѕвекот 716 00:45:39,390 --> 00:45:43,450 или некој помошник програма која ѕвекот доаѓа со чита кодот врвот до дното, 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 Тогаш имате многу поголеми Ц датотека, бидејќи на огромниот копија, ставете работа што е едноставно се случи. 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-ти и 1S себе 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 Кога ќе го слушнете дека вашиот компјутер има Интел внатре, 732 00:46:42,930 --> 00:46:46,180 имате CPU Intel во вашиот Mac или PC, што значи тоа? 733 00:46:46,180 --> 00:46:51,200 А процесорот доаѓа вграден со компании како Intel разбирање одредени инструкции. 734 00:46:51,200 --> 00:46:55,770 Тие немаат идеја што функции како swap се или главни се по себе, 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 бајти околу во мали единици во и надвор од процесорот. 740 00:47:21,670 --> 00:47:26,820 Но, конечно, кога ѕвекот е подготвен да ја искористам оваа застапеност на вашата програма 741 00:47:26,820 --> 00:47:30,940 во 0-ти и 1S, тогаш чекор наречен монтажа случува, 742 00:47:30,940 --> 00:47:33,850 и ова повторно сите се случува во трепкање на окото кога работите ѕвекот. 743 00:47:33,850 --> 00:47:39,300 Започнуваме тука, тоа излези на датотека како оваа, а потоа се конвертира овие 0-ти и 1S. 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 Нормално ние ќе собере со ѕвекот 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 >> Јас го правам тоа за многу краток програма, но ако се вратиме за трка 750 00:48:05,750 --> 00:48:08,740 или реставрирана или било која програма што сум напишал и само од љубопитност 751 00:48:08,740 --> 00:48:13,240 сакате да видите што тоа всушност изгледа, она што е, всушност, се хранат во процесорот, 752 00:48:13,240 --> 00:48:15,700 можете да го користите-S знаме со ѕвекот. 753 00:48:15,700 --> 00:48:17,770 Но, тогаш на крај, има уште еден gotcha. 754 00:48:17,770 --> 00:48:21,810 Еве 0-ти и 1S кои претставуваат мојата имплементација на здраво, свет. 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-ти и 1S, 758 00:48:34,280 --> 00:48:37,460 само 0-ти и 1S кои се outputted во овој момент во времето 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-ти и 1S со мојот 0-ти и 1S, 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-ти и 1S. 766 00:49:02,580 --> 00:49:05,960 Но, се сеќавам дека јас се користи стандардот I / O библиотека во мојот код, 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-ти и 1S. 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-ти и 1S и таа личност 0-ти и 1S 773 00:49:28,710 --> 00:49:32,760 и некако ги поврзат заедно, буквално се комбинираат овие 0-ти и 1S 774 00:49:32,760 --> 00:49:37,900 во еден фајл наречен a.out или hello1 или што и јас го повикував мојот програма 775 00:49:37,900 --> 00:49:43,320 така што крајниот резултат ги има сите на 1S и 0-ти кои треба да компонира мојата програма. 776 00:49:43,320 --> 00:49:45,660 Значи сето ова време овој семестар, кога сте биле со ѕвекот 777 00:49:45,660 --> 00:49:48,750 па дури и повеќе неодамна работи се направи со цел да се кандидира ѕвекот, 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 Но, со тоа, ние сме за да ја напушти Ц зад себе. 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 да се направи повеќето ништо од интерес за вас во нула, 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 >> Кога ќе притиснете ентер на вашиот компјутер, еден куп чекори 824 00:52:30,150 --> 00:52:32,600 започне вид на магично се случува. 825 00:52:32,600 --> 00:52:35,960 Така да овде на лево, веб сервер, како Фејсбук е тука на десната страна, 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 Тоа е збир на конвенции кои веб прелистувачи и веб сервери се користи кога intercommunicating. 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 каде што ако се исполнат некои човечки, за прв пат, ако не ти пречи humoring ме тука, 832 00:53:00,140 --> 00:53:03,980 Јас може да дојде до вас, да речеме, "Здраво, моето име е Давид." >> Здраво, Дејвид. Моето име е Семи. 833 00:53:03,980 --> 00:53:05,770 "Здраво, Дејвид. Моето име е Sammy". 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 И дека пораката е обично нешто слично се - што сакаш да се добие? - 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 И она што не Фејсбук одговори со? 851 00:54:07,300 --> 00:54:12,540 Тоа одговара со некои слични изглед криптичната детали, но исто така многу повеќе. 852 00:54:12,540 --> 00:54:14,310 Дозволете ми да оди напред кон главната страница на Фејсбук овде. 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 Ако го правиме тоа во Хром, забележите дека можете да се повлече до овие мали контекстните менија. 856 00:54:24,150 --> 00:54:26,980 Користење на Хром, без разлика дали на Mac OS, Windows, Linux, или слично, 857 00:54:26,980 --> 00:54:31,840 ако Контрола клик или лев клик, обично може да се повлече до менито што личи ова, 858 00:54:31,840 --> 00:54:35,870 каде што неколку опции чекаат, од кои едната е View Page Source. 859 00:54:35,870 --> 00:54:39,920 Можете исто така да обично се дојде до овие работи со одење на менито View и ѕиркаа наоколу. 860 00:54:39,920 --> 00:54:42,750 На пример, тука под View, инвеститорот е иста работа. 861 00:54:42,750 --> 00:54:45,780 Одам да се оди напред и да се погледне Види Страна код. 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, HyperText Markup Language. 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, HyperText Markup Language. 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 Ова не е затоа Фејсбук програмери манифестираат 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 И всушност, тоа е сосема непотребното да погоди копчето Tab сите оние пати 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 обично пред сајт е ставена излез на интернет, го кодот е minified, 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 и Y и Z, 896 00:57:09,250 --> 00:57:13,900 и сето тоа празни места што го прави сè што изгледа толку читлива се сите фрлен, 897 00:57:13,900 --> 00:57:17,700 затоа што ако мислите дека за тоа на овој начин, Фејсбук добива една милијарда страница хитови на ден - 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 Што е импликација ако Фејсбук зачувува дека празни места 901 00:57:29,500 --> 00:57:32,880 во сите бајти тие испрати назад до луѓето на интернет? 902 00:57:32,880 --> 00:57:36,400 Притискање на тастерот space еднаш ви дава дополнителна бајт во вашето досие. 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 А гигабајт без добра причина. 906 00:57:45,200 --> 00:57:48,510 И готово, за многу веб-сајтови ова не е толку скалабилни прашање, 907 00:57:48,510 --> 00:57:51,030 но за Фејсбук, за 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 користење на нешто како Zip, алгоритам наречен 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 И уште па што Хром не е тоа чисти сите на HTML Фејсбук. 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 таг Фејсбук, нешто што започнува со отворен заградата 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 Насловот на почетната страница на Фејсбук, ако некогаш се погледне во јазичето во вашиот насловната лента, 940 00:59:55,990 --> 00:59:59,060 е Добредојдовте на Facebook - се најавите, се пријавите или Дознај повеќе. 941 00:59:59,060 --> 01:00:01,110 Тоа е она што ќе видите во насловната лента Хром, 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 и излегува дека кодот на Фејсбук ќе изгледа посложен 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 Има нешто што се нарекува div, што е поделбата на една страница. 950 01:00:25,270 --> 01:00:27,940 Но, пред да се дојде до таа детали, ајде да се обидеме да одзумирате 951 01:00:27,940 --> 01:00:31,920 и гледам поедноставен верзија на Фејсбук 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 Тоа изгледаше како тоа ќе се вклопуваат убаво на една линија, па јас не се мачат притискање на Enter неколку пати. 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 при што ќе каже, "Start прави овој текст задебелени букви. Стоп правејќи го овој текст со задебелени букви." 974 01:01:55,740 --> 01:01:59,010 "Start прави овој текст закосени букви. Престане да прави овој текст закосени букви." 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 Овој вели: "Еве доаѓа на телото Тука е вистински тело." - Буквално, зборовите Здраво, свет. 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 И Voila, тука е мојата прва веб-страница. 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 и Woo-Hoo, јас сум на интернет. 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 # include директива. 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 може да биде констатирано и надвор, многу сличен на # Include, во посебен фајл. 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 Дозволете ми да оди напред и да ја спаси мојата датотека, се врати на Хром, ќе зумирате само така можеме да видиме подобро, 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 Јас не само притиснете ентер, јас исто така вовлечен, практикуваат она што ние сме биле проповеда за стил, 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 линии. Insert став скрши тука." 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 Можете или го прават тоа или не. Вие хит Enter или не. 1050 01:06:28,140 --> 01:06:33,390 Значи br е малку поинаква ознака, и така јас треба да се најде на двете отворени и затворете го 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 Океј, па тоа е почнуваат да изгледаат подобро, освен Веб знам е вид на кликање, 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 со кој се менува своето однесување, а вредноста на тој атрибут е очигледно рачно YouTube е. 1073 01:07:52,900 --> 01:07:56,380 Но забележите дихотомија е дека само затоа што тоа е рачно сте ќе, 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 Па ајде спаси, врати се назад. Океј, Voila, сега тоа е сино и линк. 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 Ако некогаш сте добиле спам или phishing, 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]