1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [Седмица 7] 2 00:00:02,440 --> 00:00:04,730 [Дейвид Дж. Малан - Харвардския университет 3 00:00:04,730 --> 00:00:07,490 [Това е CS50. - CS50.TV] 4 00:00:07,490 --> 00:00:12,280 Добре. Добре дошъл. Това е CS50, и това е началото на седмица 7. 5 00:00:12,280 --> 00:00:14,690 Няколко малки обяви: 6 00:00:14,690 --> 00:00:18,150 Pset5 сега е в прогрес, или скоро ще бъде, 7 00:00:18,150 --> 00:00:21,590 и нека ти кажа, честно казано, това не са склонни да бъдат сред по-голямо предизвикателство 8 00:00:21,590 --> 00:00:24,460 на проблемни комплекти на курса, така че нека да говорим за това сега 9 00:00:24,460 --> 00:00:28,190 така че тази седмица повече от всякога не чакайте, докато, да речем, сряда вечер 10 00:00:28,190 --> 00:00:29,920 или в четвъртък вечер, за да се гмуркат. 11 00:00:29,920 --> 00:00:32,369 Това определено е интересен pset. Смятаме, че е забавно. 12 00:00:32,369 --> 00:00:36,110 Ако действително го получите напълно коректна и тогава може да оспори така наречения Голям съвет, 13 00:00:36,110 --> 00:00:39,830 ще имате възможност да съответстват на акъла с някои от служителите на курса 14 00:00:39,830 --> 00:00:41,620 и някои от съучениците си. 15 00:00:41,620 --> 00:00:44,670 The Big съвет е, след като сте си проверка на правописа работа, 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 и колко малко CPU секунди можете да използвате по отношение на някои от съучениците си. 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, което е подобно представят проект Scratch 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 [I трябва да се поздравяват на японски, защото английският ми е много ненадеждни.] 58 00:03:39,830 --> 00:03:45,380 [I предадох послание към вас от град Гифу, Япония.] 59 00:03:45,380 --> 00:03:49,820 [I може да бъде ученик за първи път от 20 години насам, както може да се види.] 60 00:03:49,820 --> 00:03:54,640 [Аз съм много благодарен на Харвардския университет, който ми даде тази възможност и EDX.] 61 00:03:54,640 --> 00:04:01,510 [Голфът е на китара и ми любимото нещо.] [Смях] 62 00:04:01,510 --> 00:04:05,750 [♪ ♪] 63 00:04:05,750 --> 00:04:10,790 [Защо мислиш, че се опитва да присъства на cs50x.] 64 00:04:10,790 --> 00:04:14,990 [Харвардския университет, това е моят копнеж.] 65 00:04:14,990 --> 00:04:19,740 [Особено ако съм далечен присъствие е живял в Япония.] 66 00:04:19,740 --> 00:04:26,680 [Исках да опитам незабавно наясно за съществуването на такава EDX кога.] 67 00:04:26,680 --> 00:04:32,500 Не смятате ли, така че не е свързана с възрастта на обучение I.] 68 00:04:32,500 --> 00:04:38,350 [Cs50 е моят копнеж. Моето име е Kazu, и това е cs50.] 69 00:04:38,350 --> 00:04:43,090 [♪ ♪] [аплодисменти и окуражителни] 70 00:04:43,090 --> 00:04:49,220 Друг любим наш е това твърдение тук от някого. 71 00:04:51,070 --> 00:04:55,380 [♪ ♪] [Малан] Google го, ако не сте запознати с този мем. 72 00:04:55,380 --> 00:05:01,480 >> И накрая, няколко други, които има публикувани, че може би спечели очарователни награда. 73 00:05:01,480 --> 00:05:06,820 [Студенти] Ооо! >> Малан Ще трябва да слуша. Това е кратък, така че слушайте внимателно. 74 00:05:08,580 --> 00:05:11,150 [Женски говорител] Какво е вашето име? >> Луи. 75 00:05:11,150 --> 00:05:16,120 [Женски говорител] Какво е това? >> [Смее] CS50. [Смях] 76 00:05:16,120 --> 00:05:19,510 Малан] Той не отнема, все пак. 77 00:05:19,510 --> 00:05:22,240 Ето, на последния. 78 00:05:23,030 --> 00:05:26,980 Моето име е Луи, и това е CS50. 79 00:05:26,980 --> 00:05:30,250 [Смях] Тогава това е CS50x. 80 00:05:30,250 --> 00:05:33,230 Благодаря на всички онези от вас, а след заедно у дома 81 00:05:33,230 --> 00:05:35,620 , които са били вземаме до този момент. 82 00:05:35,620 --> 00:05:39,510 Днес можем да заключим, нашата дискусия на структурите от данни, 83 00:05:39,510 --> 00:05:41,160 поне някои от най-фундаменталните 84 00:05:41,160 --> 00:05:44,760 и след това ние продължаваме разговора ни за HTML и уеб програмиране. 85 00:05:44,760 --> 00:05:48,520 Всъщност, ние сме прекара последните около седем седмици, в основите на програмирането - 86 00:05:48,520 --> 00:05:50,450 алгоритми, структури от данни, и други подобни - 87 00:05:50,450 --> 00:05:53,050 и C, както може би сте имали до този момент, 88 00:05:53,050 --> 00:05:57,060 не е непременно най-достъпни на езици 89 00:05:57,060 --> 00:05:59,090 , с които да се приложат някои от тези идеи. 90 00:05:59,090 --> 00:06:01,880 И така започва тази седмица и следващата седмица и след това по-долу, 91 00:06:01,880 --> 00:06:07,110 ние най-накрая ще бъде в състояние да преход от C, която е известна като доста ниско ниво на езика, 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 този файл е компресиран с помощта на цип формат или нещо подобно 104 00:06:48,760 --> 00:06:53,760 , така че сте изпращане на по-малко битове, отколкото иначе биха могли да бъдат предадени. 105 00:06:53,760 --> 00:06:55,500 Е, как да компресирате информация? 106 00:06:55,500 --> 00:07:00,540 Всичко се свежда до използването на по-малко битове, отколкото се изисква по подразбиране. 107 00:07:00,540 --> 00:07:03,220 Но това е вид на нещо любопитно, защото мисля, обратно до седмица 0 и 1 108 00:07:03,220 --> 00:07:07,370 , когато говорихме за ASCII и бинарни и ние говорихме за ASCII по-специално 109 00:07:07,370 --> 00:07:10,690 като използва 8 бита, за да представляват букви от азбуката 110 00:07:10,690 --> 00:07:16,120 така че буквата А е представена от 65 малки, а е номер 97, 111 00:07:16,120 --> 00:07:21,210 и колкото и да сте на 65 или 97, вие използвате 7 или 8 бита. 112 00:07:21,210 --> 00:07:24,120 Но уловът е, че има някои букви в английската азбука 113 00:07:24,120 --> 00:07:26,230 , които не са толкова популярни, тъй като другите. 114 00:07:26,230 --> 00:07:31,600 Z не е всичко, което популярен, Q не е толкова популярен, но А и Е са супер популярни. 115 00:07:31,600 --> 00:07:37,280 И все пак за всички тези писма, по подразбиране света използва и същ брой битове, само на 8. 116 00:07:37,280 --> 00:07:42,690 Така че, не би ли било РАЗУМНИ ако вместо 8 бита за всяка буква, 117 00:07:42,690 --> 00:07:47,440 дори и най-рядко използват като Q и Z, 118 00:07:47,440 --> 00:07:51,910 какво би станало, ако ние използвахме по-малко битове за А и Е и S и най-популярните писма 119 00:07:51,910 --> 00:07:55,000 и се използва повече битове за по-малко популярни писма, 120 00:07:55,000 --> 00:07:57,770 идеята е оптимизиране нека общия случай, 121 00:07:57,770 --> 00:08:01,160 , което е тема по компютърни науки се опитва да оптимизира какво ще се случи най- 122 00:08:01,160 --> 00:08:05,310 и да прекара малко повече време, малко повече пространство за неща, които, да, може да се случи 123 00:08:05,310 --> 00:08:07,680 но не е задължително, както често. 124 00:08:07,680 --> 00:08:09,330 Така че нека да вземем един пример. 125 00:08:09,330 --> 00:08:12,610 >> Да предположим, че искаме да се кодират информация доста ефективно. 126 00:08:12,610 --> 00:08:15,090 Може да са израснали знае нещо за морзовата азбука, 127 00:08:15,090 --> 00:08:17,450 и шансовете са, че не знаеш действителният код, 128 00:08:17,450 --> 00:08:21,750 но можете да си спомните, че това е най-малко тази поредица от точки и тирета. 129 00:08:21,750 --> 00:08:26,640 Това е доста ефективни кодиране и забележете, че най-популярната писмо - например, E - 130 00:08:26,640 --> 00:08:28,980 използва кратки звукови сигнала. 131 00:08:28,980 --> 00:08:31,740 Морзовата азбука е всичко за бип-бип-бип-бип-бип-бип и провеждане тонове 132 00:08:31,740 --> 00:08:34,799 или за кратки периоди от време или дълги периоди от време. 133 00:08:34,799 --> 00:08:40,330 Е, както е обозначен с точката, е супер кратък звуков сигнал, а само звуков сигнал, който ще представлява E. 134 00:08:40,330 --> 00:08:43,960 От друга страна, T ще бъде по-дълъг звуков сигнал, както и звуков сигнал [удължава звук], 135 00:08:43,960 --> 00:08:45,710 и това ще представлява T. 136 00:08:45,710 --> 00:08:48,840 Но това все още е доста кратко, защото, за разлика от това, ако се вгледате в Z, 137 00:08:48,840 --> 00:08:52,690 да изразят Z ще отиде звуков сигнал, звуков сигнал [дълъг звук], звуков сигнал, звуков сигнал [кратък звук]. 138 00:08:52,690 --> 00:08:55,360 Така че е по-дълъг, защото това е по-малко разпространена. 139 00:08:55,360 --> 00:08:58,150 Но нещо, за което тук е, че морзовата азбука е малко недостатъци 140 00:08:58,150 --> 00:09:00,610 в това, че не е веднага 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 [Ученик] А. >> Малан Може би. 144 00:09:15,330 --> 00:09:18,270 Тя може да бъде E, следвана от T. 145 00:09:18,270 --> 00:09:23,390 С други думи, морзовата азбука, въпреки че използва този принцип за оптимизиране на ъгъла случай, 146 00:09:23,390 --> 00:09:26,250 тя не се поддава за незабавна 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 , защото ако не знаете, когато тези прекъсвания са, може да се обърка A за ET или обратното. 150 00:09:39,660 --> 00:09:43,880 >> И така, какво може да направи? Морзовата азбука бихте могли просто пауза между всяка една от буквите. 151 00:09:43,880 --> 00:09:47,660 Но пауза е вид противоречи на цялата идея за ускоряване на нещата. 152 00:09:47,660 --> 00:09:52,880 И какво ще стане, ако вместо това дойде с код, където не е имало тази лоша ситуация 153 00:09:52,880 --> 00:09:56,570 където Е е префикс, например, от А - 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 Един човек от името на Хъфман преди години е измислил тази схема, наречена Huffman кодиране 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, DS, и Ес. 163 00:10:31,270 --> 00:10:34,890 И ако действително разчита на Както, BS, CS, DS, и Es 164 00:10:34,890 --> 00:10:36,870 и след това се разделят на общия брой на писма, 165 00:10:36,870 --> 00:10:42,710 тази малка диаграма тук се казва, че 45% от писмата Es, 20% са толкова, 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 но това е наистина случай, че E остава най-популярният, 171 00:10:55,220 --> 00:11:01,450 и Б и В са най-популярни, най-малко от тези пет букви от азбуката. 172 00:11:01,450 --> 00:11:04,040 Така че как можем да идва с кодирането, 173 00:11:04,040 --> 00:11:08,430 двоично кодиране, модел на 0s и 1s за всеки един от тези писма 174 00:11:08,430 --> 00:11:14,820 по такъв начин, че Е е кратък модел и може би B и C са малко по-дълги модели, 175 00:11:14,820 --> 00:11:19,270 отново, като идеята е, че искаме да използваме по-малко битове голямата част от времето 176 00:11:19,270 --> 00:11:21,790 и повече битове само от време на време. 177 00:11:21,790 --> 00:11:26,070 Според Huffman кодиране, можете да създадете гора от дървета. 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 >> Аз предлагам да започнете с тази гора, така да се каже, на пет дървета, 181 00:11:36,140 --> 00:11:38,260 всяка от които е доста глупаво дърво. 182 00:11:38,260 --> 00:11:42,800 Дървото се състои от само един възел, както е представена тук от кръга. 183 00:11:42,800 --> 00:11:45,310 Така че всеки от тези неща може да бъде структурата C 184 00:11:45,310 --> 00:11:50,200 и вътре в структурата C може да бъде с плаваща запетая, представляващ честотата 185 00:11:50,200 --> 00:11:52,510 и тогава може би знак, представляващ писмо. 186 00:11:52,510 --> 00:11:56,470 Така че мисля, че на тези възли просто някакъв стар структура на C, но за сега, по-високо ниво. 187 00:11:56,470 --> 00:12:01,230 Това е гора на 5 дървета, всеки от които имат само един възел. 188 00:12:01,230 --> 00:12:06,830 Какво Хъфман предложения е, че ние започваме да комбинирате тези дървета 189 00:12:06,830 --> 00:12:11,140 , които имат най-малкия брой честотни в малко по-големи дървета 190 00:12:11,140 --> 00:12:13,490 чрез свързването им с нов възел корен. 191 00:12:13,490 --> 00:12:17,560 Така че сред буквите тук, забележете, че за удобство съм ги подредени от ляво на дясно, 192 00:12:17,560 --> 00:12:21,420 въпреки че не е строго необходимо, и забележете, че най-малките възли 193 00:12:21,420 --> 00:12:23,930 в момента са 10% и 10%. 194 00:12:23,930 --> 00:12:28,940 Така Хъфман предложи да се слеят тези две най-малки възли в нова дърво 195 00:12:28,940 --> 00:12:34,450 чрез въвеждане на нов възел майка и след това, че майка ляв дете и право дете 196 00:12:34,450 --> 00:12:37,720 където B е произволно наляво и C е произволно правото. 197 00:12:37,720 --> 00:12:41,590 И тогава Хъфман предложи нека сега просто мисля, че на лявата дете 198 00:12:41,590 --> 00:12:44,790 в един от тези дървета винаги да бъде представляван от 0 199 00:12:44,790 --> 00:12:47,890 и правото дете винаги да бъде представляван от номер 1. 200 00:12:47,890 --> 00:12:50,680 >> Това няма значение, ако ги обърнете така, докато сте в съответствие. 201 00:12:50,680 --> 00:12:54,650 Така че сега имаме четири дървета в тази гора. 202 00:12:54,650 --> 00:12:58,050 И аз казвам, четири, защото сега дърво в ляво - 203 00:12:58,050 --> 00:13:00,570 и това не е толкова дърво в смисъл, че тя расте по този начин, 204 00:13:00,570 --> 00:13:05,170 това е по-скоро като родословно дърво, където сега е 0.2 е нещо като майка на две деца - 205 00:13:05,170 --> 00:13:07,930 забележите, че в този родител сме привлечени 0.2. 206 00:13:07,930 --> 00:13:13,370 Сме добавили честотните разчита на две деца и като се има предвид нов възел общата сума. 207 00:13:13,370 --> 00:13:15,310 Така че сега ние трябва само да повторите този процес. 208 00:13:15,310 --> 00:13:19,490 Намерете двете най-малки възли и след това се присъединят към тях в нова дърво 209 00:13:19,490 --> 00:13:21,380 и след това повторете този процес. 210 00:13:21,380 --> 00:13:26,390 Точно сега имаме няколко кандидати, 20%, 15%, а други 20%. 211 00:13:26,390 --> 00:13:29,780 В този случай, ние трябва да се прекъсне вратовръзка. Можем да го направим произволно. 212 00:13:29,780 --> 00:13:31,540 Ние просто трябва да го направя последователно. 213 00:13:31,540 --> 00:13:33,760 В този случай, аз ще произволно отида с една от ляво, 214 00:13:33,760 --> 00:13:39,880 и аз сега се слеят 20% и 15%, за да ми даде нова майка, наречена 35%, 215 00:13:39,880 --> 00:13:46,310 , чиято лява детето е 0, чието право дете е 1, а сега имаме само три дървета в гората. 216 00:13:46,310 --> 00:13:47,960 Може би когато това се случва. 217 00:13:47,960 --> 00:13:51,150 Ако ние повтаряме това още няколко пъти, отиваме да има само една по-голяма дърво, 218 00:13:51,150 --> 00:13:53,900 всички, чиито краища са обозначени с 0s и 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 защото те трябва, тъй като ние ги изчислява от самото начало да добавите до 100%. 225 00:14:15,570 --> 00:14:17,960 И сега имаме едно дърво. 226 00:14:17,960 --> 00:14:20,580 Така че това е Huffman кодиране дърво. 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 Защото, ако се пресече това дърво от крайната корен листа, известен като Е, 237 00:15:01,000 --> 00:15:06,050 ние следваме само един ръб, в десния край, и това е обозначено на курс в горния десен 1. 238 00:15:06,050 --> 00:15:11,550 Така косвено тук за Хъфман е, че кодиране E в двоичен да бъде само 1. 239 00:15:11,550 --> 00:15:14,490 И това е доста ефективна. Наистина не може да получи по-малък от този. 240 00:15:14,490 --> 00:15:18,350 В замяна на това ще бъдат представени, ако следваме логиката, 241 00:15:18,350 --> 00:15:21,610 от какъв модел на битовете, вместо? 01. 242 00:15:21,610 --> 00:15:25,500 Така че, за да стигнем до, ние започваме в основата и отиди наляво и след това да отидем право, 243 00:15:25,500 --> 00:15:28,580 което означава, че 0 и 1. 244 00:15:28,580 --> 00:15:32,810 Така че ние трябва да представлява буквата А с модела 0 и 1. 245 00:15:32,810 --> 00:15:36,010 И сега забележите, ние вече имаме собственост на незабавно decodability 246 00:15:36,010 --> 00:15:38,090 че не сме в Морзовата азбука. 247 00:15:38,090 --> 00:15:42,840 Въпреки че и двете от тези модели са доста кратък - E е 1 бит, A е 2 бита - 248 00:15:42,840 --> 00:15:45,080 забележите, че те не могат да бъдат объркани едната или другата, 249 00:15:45,080 --> 00:15:54,870 защото, ако видите едно тя трябва да бъде Е, ако видите 0, тогава един очевидно трябва да бъде A. 250 00:15:54,870 --> 00:15:58,410 По същия начин, какво е D? 001. 251 00:15:58,410 --> 00:16:01,440 Какво е C? 0001. 252 00:16:01,440 --> 00:16:05,320 И какво е Б? 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 няма риск от conflating различни кодировки две писма 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 >> Най-популярната е намерила писмо - в този случай E - най-краткия кодиране, 261 00:16:35,080 --> 00:16:37,430 А е намерила следващия най-нисък кодиране, 262 00:16:37,430 --> 00:16:41,390 и B и C, които ние вече знаеше от самото начало са вид на най-малко популярните 263 00:16:41,390 --> 00:16:45,390 на честота 10% всяка, те са придобили най-дългата кодиране. 264 00:16:45,390 --> 00:16:49,410 И така, какво означава това сега е, че ако искате да изпратите съобщение, което е компресиран 265 00:16:49,410 --> 00:16:51,950 през Интернет или в имейл или подобни, 266 00:16:51,950 --> 00:16:56,730 , а в сравнение с използването на стандартен ASCII, можете да изпратите Хъфман кодирано съобщение 267 00:16:56,730 --> 00:17:01,720 , при която, ако искате да изпратите електронно писмо, вие изпращате само едно малко. 268 00:17:01,720 --> 00:17:05,680 Ако искате да изпратите А, вие изпращате два бита, 01, вместо да изпращате 8 бита 269 00:17:05,680 --> 00:17:10,190 последвано от още 8 бита, последвани от още 8 бита и т.н.. 270 00:17:10,190 --> 00:17:11,940 Но има нещо, за което тук. 271 00:17:11,940 --> 00:17:17,079 Това не е достатъчно просто да се изгради това дърво и след това започнете да изпращате от Алис на Боб 272 00:17:17,079 --> 00:17:20,010 по-краткия малко модел, низ от ASCII, 273 00:17:20,010 --> 00:17:23,140 защото Алис също трябва да информира Боб от това, което 274 00:17:23,140 --> 00:17:26,880 ако Боб ще бъде в състояние да четат сгъстен съобщение? 275 00:17:26,880 --> 00:17:30,770 [Чува студент отговор] >> Какво е това? 276 00:17:30,770 --> 00:17:32,310 [Чува отговор студент] >> От какво дърво е. 277 00:17:32,310 --> 00:17:35,160 Или още по-точно, какви са тези кодировки, 278 00:17:35,160 --> 00:17:39,010 особено след като по време на тази история ние направихме отсъжда в една точка. 279 00:17:39,010 --> 00:17:43,640 Не забравяйте, че ние трябваше да вземем произволно между две различни 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 чрез изпращане на един E и 01 за А и така нататък, 286 00:18:09,900 --> 00:18:15,180 но тя също трябва да информира Боб какво картографиране е между букви и бита 287 00:18:15,180 --> 00:18:19,620 , защото те не могат ясно да разчитат само на ASCII повече, ако не използвате ASCII. 288 00:18:19,620 --> 00:18:22,200 Така че тя може да го изпрати на дървото някак си - 289 00:18:22,200 --> 00:18:26,600 го напиша, да я съхранява като двоични данни или нещо подобно - 290 00:18:26,600 --> 00:18:30,280 или просто да му изпрати малко лист измама, Excel файл, който показва преобразувания. 291 00:18:30,280 --> 00:18:36,480 Така че ефективността на компресия наистина предполага, че съобщенията, които изпращате 292 00:18:36,480 --> 00:18:40,230 са доста големи, най-малко средни, 293 00:18:40,230 --> 00:18:42,180 защото ако сте изпращане супер кратко съобщение, 294 00:18:42,180 --> 00:18:45,390 ако просто искате да изпратите съобщението BAD, който се случва да бъде дума, която може да пише тук, 295 00:18:45,390 --> 00:18:49,550 Б-А-D, вие вероятно ще използвате по-малко битове, 296 00:18:49,550 --> 00:18:53,130 но уловът е, ако вие също трябва да информира Боб какво дърво е 297 00:18:53,130 --> 00:18:57,530 или какви са тези кодировки, вие вероятно ще надхвърлят всички спестявания 298 00:18:57,530 --> 00:19:00,110 компресирани неща да започнем с това. 299 00:19:00,110 --> 00:19:02,210 Така че това всъщност може да бъде случай, че ако се опитате компресиране 300 00:19:02,210 --> 00:19:05,330 дори с нещо като цип или файлови формати могат да бъдат запознати с 301 00:19:05,330 --> 00:19:07,780 доста малки файлове, дори и празни файлове - 302 00:19:07,780 --> 00:19:10,930 понякога тези файлове може да получи по-големи и не по-малък. 303 00:19:10,930 --> 00:19:14,320 Но реалистично, това се случва само за малки размери на файла, 304 00:19:14,320 --> 00:19:16,920 така че няма да гигабайт файл е 2 гигабайта; 305 00:19:16,920 --> 00:19:19,480 ние наистина говорим байта или само няколко килобайта. 306 00:19:19,480 --> 00:19:22,330 >> Някои програми като цип са достатъчно умни, за да осъзнаят, че, 307 00:19:22,330 --> 00:19:24,590 "Ти започваш да се харчат повече битове компресиране на това." 308 00:19:24,590 --> 00:19:27,460 "Позволете ми да не се притеснява да го компресирате за вас изобщо." 309 00:19:27,460 --> 00:19:30,160 Така че това е само един начин на компресиране текстов формат. 310 00:19:30,160 --> 00:19:32,300 Ние може да приложи нещо подобно в C. 311 00:19:32,300 --> 00:19:35,370 Например, тук е как бихме могли да представляват възел в това дърво 312 00:19:35,370 --> 00:19:39,320 където имаме Чар за символа, плаваща стойност на честотата, 313 00:19:39,320 --> 00:19:42,250 и като сме виждали с други структури от данни, 2 указатели, 314 00:19:42,250 --> 00:19:47,080 1 до лявата дете, 1 отдясно, всяка от които може да бъде нула, 315 00:19:47,080 --> 00:19:50,850 но ако не, то се отнася до лявата детето и право дете. 316 00:19:50,850 --> 00:19:55,130 Така че това е Huffman кодиране, и това е един начин, по който можете да отидете за компресиране на информацията, 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 >> Неяснота може да възникне само, тъй като в случай на Морзовата азбука, 334 00:21:01,910 --> 00:21:06,770 ако, например, C е някъде по пътя от корена до Б. 335 00:21:06,770 --> 00:21:12,290 [Ученик] Точно така. Така че в този случай, да речем А има два листа. >> Кажа - Кажи, че отново. 336 00:21:12,290 --> 00:21:18,760 [Ученик] Кажи А има два листа, 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 да бъдат себе си оставя някъде в ляво на Б или правото на Е.ОН 339 00:21:27,560 --> 00:21:28,900 Така че, по дефиниция, те трябва да бъдат листата. 340 00:21:28,900 --> 00:21:32,940 В противен случай, вие сте точно така, ние не сме решили проблема, че морзовата азбука е изправен. 341 00:21:32,940 --> 00:21:38,150 Добър въпрос. Други въпроси? Добре. 342 00:21:38,150 --> 00:21:42,050 Тази представа за бита, оказва се, сме имали власт, всички заедно, че ние не сме действително се използва 343 00:21:42,050 --> 00:21:44,200 , когато той дойде да манипулира тези 0s и 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 колко бита всъщност трябва да се обърнете, за да променят в малки една или обратното? 348 00:22:01,090 --> 00:22:05,580 Ето един бърз напомняне на 65 и 97 изглеждат в двоичен. 349 00:22:05,580 --> 00:22:08,060 И дори ако този въпрос е някак избледнели в паметта си, 350 00:22:08,060 --> 00:22:11,290 можете да видите отново тук, че колко бита трябва да бъде обърната 351 00:22:11,290 --> 00:22:15,810 да промените капитал в малки? Само един. 352 00:22:15,810 --> 00:22:19,650 >> Те се различават само на едно място, третото малко от ляво. 353 00:22:19,650 --> 00:22:24,240 Като има предвид, че има 010, малко има 011. 354 00:22:24,240 --> 00:22:26,250 Така че по някакъв начин, ние трябва просто да бъде в състояние да обърне тази част, 355 00:22:26,250 --> 00:22:29,410 и тогава ще можем да се възползва или малки букви. 356 00:22:29,410 --> 00:22:32,720 Ние сме направили в миналото от реално използване, ако условията 357 00:22:32,720 --> 00:22:35,930 и проверка дали писмото е между капитала А и капитал Z, 358 00:22:35,930 --> 00:22:41,480 тогава изходи като А - A + 26 или нещо подобно. 359 00:22:41,480 --> 00:22:46,130 Може би направил аритметична промяна на буквите от азбуката. 360 00:22:46,130 --> 00:22:49,270 Но какво би станало, ако можехме да просто флип, че едно малко? 361 00:22:49,270 --> 00:22:59,080 Как може да стане като един байт на бита, така че 8 бита като 01000001 и 01100001? 362 00:22:59,080 --> 00:23:03,170 Ако сте имали тези модели на бита, как можем да променя само един от тях? 363 00:23:03,170 --> 00:23:07,610 Какво ще стане, ако въведем в жълто тук друг модел на бита? 364 00:23:07,610 --> 00:23:13,420 Ако успея цели жълти 0s струнни, с изключение на най-малко, че искам да променя 365 00:23:13,420 --> 00:23:17,900 и тогава ще се въведе нов оператор, известен като оператор на побитови - 366 00:23:17,900 --> 00:23:21,210 Побитови в смисъл, че тя работи на отделни битове, 367 00:23:21,210 --> 00:23:25,360 не на цял един байт или четири байта всички наведнъж. 368 00:23:25,360 --> 00:23:31,170 Тази вертикална лента в жълто подсказва, че какво ще стане, ако вземем представителство на капитала 369 00:23:31,170 --> 00:23:37,060 и побитово ИЛИ с жълта последователност от битове? 370 00:23:37,060 --> 00:23:41,300 С други думи, да се връщат към нашата дискусия на булеви изрази в Scratch и след това в C. 371 00:23:41,300 --> 00:23:47,520 >> Правейки Boolean или означава, че за да е истина, било първото нещо, което трябва да бъде вярно 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 Това сега остава една, но забележете, какво има да се случи тук. 378 00:24:12,640 --> 00:24:18,630 Ако започнем с капитал А и ние продължаваме да "или" отделни битове, което правим тук, 379 00:24:18,630 --> 00:24:25,180 0 или жълт ни дава това, което тук? Това ни дава един. 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 просто с "или" ING А с този модел на битовете, че сме представени тук в жълто, 389 00:25:04,770 --> 00:25:09,400 можете да малки букви на капитала чрез обръщане на тази част. 390 00:25:09,400 --> 00:25:11,580 Ние използвахме този израз седмици преди: обръщане малко. 391 00:25:11,580 --> 00:25:13,710 Откъде всъщност програмно? 392 00:25:13,710 --> 00:25:16,390 Можете да използвате това, което обикновено се нарича маска, последователност от битове, 393 00:25:16,390 --> 00:25:19,980 че в този случай просто така се случва тук да изглежда като този брой, 394 00:25:19,980 --> 00:25:22,980 и след това "или" заедно с използване на този нов оператор C, 395 00:25:22,980 --> 00:25:29,940 не | |, се използва единен | и вие всъщност ще получите този отговор тук, защото защо? 396 00:25:29,940 --> 00:25:35,120 Това е на 1s, 2s място, 4S, 8s, 16, 32S. 397 00:25:35,120 --> 00:25:42,280 Така се оказва, че ако вземете една главна буква А и побитово ИЛИ с цяло число 32 398 00:25:42,280 --> 00:25:47,520 защото цялото число 32, когато гледат на него като бита, прилича на това, 399 00:25:47,520 --> 00:25:50,860 това означава, че можеш да въртиш малко, че наистина искате. 400 00:25:50,860 --> 00:25:52,630 И по същия начин - и ние ще разгледаме код само за миг - 401 00:25:52,630 --> 00:25:54,210 Предполагам, че искаме да отидем в другата посока. 402 00:25:54,210 --> 00:25:58,210 >> Как да отида от малки към капитала? Което малко трябва да се промени? 403 00:25:58,210 --> 00:25:59,820 Това е една и съща. 404 00:25:59,820 --> 00:26:03,970 Ние искаме да променим тази трета малко от 1 на 0. 405 00:26:03,970 --> 00:26:06,310 И как бихме могли да направим това? 406 00:26:06,310 --> 00:26:10,130 Как да изключите малко? С какъв модел на бита бихме могли да изключите малко? 407 00:26:11,580 --> 00:26:14,070 Какво ще стане, ако ние някак обърнете маска? 408 00:26:14,070 --> 00:26:17,350 Като има предвид, че и преди, ние направихме цялата жълта маска 0s 409 00:26:17,350 --> 00:26:19,930 с изключение на най-малко исках да включите, 410 00:26:19,930 --> 00:26:25,580 какво ще стане, ако този път, ние правим цялата 1s маска, с изключение на случаите, за малко, че ние искаме да изключите 411 00:26:25,580 --> 00:26:28,330 и след това да използвате това, което оператор? 412 00:26:28,330 --> 00:26:30,560 Какво ще стане, ако ние "и" неща? Нека да разгледаме. 413 00:26:30,560 --> 00:26:34,880 Ако сега се обърнете към това, да предположим, че отново създам маска, това е всичко 1s 414 00:26:34,880 --> 00:26:37,650 с изключение на най-малко, че искате да изключите 415 00:26:37,650 --> 00:26:43,860 и след това, а не "или" бели номера отгоре с жълти номера тук, 416 00:26:43,860 --> 00:26:46,940 какво ще стане, ако аз "и" те заедно? Тя се нарича побитово. 417 00:26:46,940 --> 00:26:49,450 Логично, това е едно и също нещо като Булев. 418 00:26:49,450 --> 00:26:55,160 Това ми дава 0 и 1 е 0. Толкова фалшиви и истински е фалшива. 419 00:26:55,160 --> 00:26:58,160 Вярно е и вярно е вярно. 420 00:26:58,160 --> 00:27:04,020 И тук е магията: вярно и невярно е фалшива, така че сте изключили тази част. 421 00:27:04,020 --> 00:27:06,560 И сега Останалата част от историята е малко по-лесно. 422 00:27:06,560 --> 00:27:11,970 Тъй като останалата част от маската е 1s, че няма значение какви цифри са в бяло. 423 00:27:11,970 --> 00:27:15,580 Когато вие "и" нещо вярно, не започваш да промените стойността му. 424 00:27:15,580 --> 00:27:20,200 Ако това е вярно, то ще остане вярно. Ако тя е фалшива, тя ще остане фалшива. 425 00:27:20,200 --> 00:27:23,190 >> Но магията се случва, когато правите нещо, което е вярно 426 00:27:23,190 --> 00:27:25,430 и след това "и" с фалшиви. 427 00:27:25,430 --> 00:27:30,030 Това има ефект на изключване, че малко. 428 00:27:30,030 --> 00:27:31,980 Така малко загадъчен. 429 00:27:31,980 --> 00:27:35,390 Нека действително изглежда в някакъв код, който може в действителност да изглежда още по-загадъчен, 430 00:27:35,390 --> 00:27:38,220 но нека да разгледаме тук в tolower. 431 00:27:38,220 --> 00:27:45,880 Ако гледам в tolower, ще капитал в малки, 432 00:27:45,880 --> 00:27:47,730 нека да видим как бихме могли да изпълнява тази програма. 433 00:27:47,730 --> 00:27:51,280 Тук е основната, и то не е като всички аргументи от командния ред. 434 00:27:51,280 --> 00:27:55,980 Аз съм за обявяване на характер в писмо, че потребителят ще въведете инча 435 00:27:55,980 --> 00:28:00,690 След това използвайте позната правя, докато контур просто се уверете, че потребителят определено ми дава капитала на 436 00:28:00,690 --> 00:28:05,010 или B или C. .. Z, така че те ми дават нещо средно между А и Z. 437 00:28:05,010 --> 00:28:08,580 И сега какво правя тук? 438 00:28:08,580 --> 00:28:14,870 Аз съм "или" този с 0x20, но това всъщност е същото като - 439 00:28:14,870 --> 00:28:19,500 и ще се върна на това в момента - 32. 440 00:28:19,500 --> 00:28:24,830 Така че, отново 32 е този модел на бита тук. Защо знаем това? 441 00:28:24,830 --> 00:28:26,320 Просто мисля, обратно до седмица 0. 442 00:28:26,320 --> 00:28:31,010 Това е на 1s, 2s място, 4s, 8s, 16, 32s място. 443 00:28:31,010 --> 00:28:33,470 Така че този жълт номер се случва да бъде 32. 444 00:28:33,470 --> 00:28:40,570 Аз мога да взема писмо като Чар тук, побитово "или" с буквално номер 32, 445 00:28:40,570 --> 00:28:45,250 и какво да се върна? Малката версия на тази Чар. 446 00:28:45,250 --> 00:28:48,830 Преди малко обаче, изрази това в различна базова нотация. 447 00:28:48,830 --> 00:28:51,370 Какво е това? >> [Студент в шестнадесетичен вид. 448 00:28:51,370 --> 00:28:53,050 [Малан] Това се случва, да представлява шестнадесетично. 449 00:28:53,050 --> 00:28:55,170 Ние не сме говорили за шестнадесетичен всички, че много, 450 00:28:55,170 --> 00:28:57,330 но всъщност е удобна в случаи като този. 451 00:28:57,330 --> 00:29:01,730 >> Въпреки че изглежда по-сложна и макар и да прилича на 20, а не 32, 452 00:29:01,730 --> 00:29:06,240 се оказва, че шестнадесетичен всъщност е супер удобно нотация 453 00:29:06,240 --> 00:29:10,810 защото в шестнадесетичен всяка цифра след 0x - и това не означава нищо; 454 00:29:10,810 --> 00:29:13,960 това е просто човек конвенция, която казва, че тук идва шестнадесетично число - 455 00:29:13,960 --> 00:29:18,590 всяка една от тези цифри, две и след това 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 бита е какво? Super лесно. Просто 0s. 461 00:29:44,690 --> 00:29:46,780 Така четири бита като 0s. 462 00:29:46,780 --> 00:29:53,510 Как да ви представлява две? Той е бил известно време, тъй като ние направихме това, но това е 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 но ако след това мислят за това, което е два и как се представени в двоичен, 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 защото не можете просто да изразят 0s и 1s обикновено в кода. 475 00:30:35,960 --> 00:30:38,540 Не можеш да отидеш 00010 и така нататък. 476 00:30:38,540 --> 00:30:42,380 >> Вие трябва да изберете след десетичната запетая или шестнадесетична или осмична или други означения. 477 00:30:42,380 --> 00:30:47,540 Повечето хора са склонни да вземем шестнадесетичен просто така, че всяка цифра представлява четири бита 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? Някой? >> [Ученик] 255. 482 00:31:09,300 --> 00:31:12,780 255? Не 255. Това би било и сл. 483 00:31:12,780 --> 00:31:15,210 Ще оставим това като малко упражнения. 484 00:31:15,210 --> 00:31:23,460 Но ако отидеш от 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 и тогава това, което идва след 9? 485 00:31:23,460 --> 00:31:26,510 Ние сме от десетични цифри, но в шестнадесетичен това, което идва след 9? 486 00:31:26,510 --> 00:31:29,510 [Ученик]. >> Така че, а, б, в, г. 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 Така че, ако аз играя тази игра отново и въведете само един, аз трябва да получат 32-битово представяне на един. 497 00:32:13,470 --> 00:32:15,490 Ако го направя това отново с два, аз трябва да взема. 498 00:32:15,490 --> 00:32:19,310 Ако го направя 7, трябва да вземем няколко 1s в края и така нататък. 499 00:32:19,310 --> 00:32:22,740 Оказва се, че Споменавам това, защото с побитови операции 500 00:32:22,740 --> 00:32:25,490 можете да правите нещо друго, както добре. 501 00:32:25,490 --> 00:32:29,130 Можете да създадете тези маски динамично. 502 00:32:29,130 --> 00:32:32,800 Обърнете внимание на този последен пример, включващ побитови операции. 503 00:32:32,800 --> 00:32:35,490 Тук е първата част на кода, подкани потребителя за редица 504 00:32:35,490 --> 00:32:38,130 и той настоява, че ми даде неотрицателно цяло число. 505 00:32:38,130 --> 00:32:39,780 Така че това е нещо от старата школа неща. 506 00:32:39,780 --> 00:32:41,980 Но тук е нещо, което е нещо интересно. 507 00:32:41,980 --> 00:32:44,910 >> Как да отида за отпечатване на броя в двоичен? 508 00:32:44,910 --> 00:32:48,970 За първи път от какво превъртите до каква? 509 00:32:48,970 --> 00:32:52,270 Какъв е размера на вътр обикновено, най-малко в уреда? >> [Ученик] 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 Така интересната част сега трябва да бъде в тези пет линии. 518 00:33:24,530 --> 00:33:28,110 Забележете, че в този ред съм за обявяване на променлива наречена маска 519 00:33:28,110 --> 00:33:30,790 да бъдат в съответствие с нашата история от тези жълти номера. 520 00:33:30,790 --> 00:33:32,200 И тогава какво е това? 521 00:33:32,200 --> 00:33:35,720 Това е друг побитови оператора, не сме виждали преди, най-вероятно. 522 00:33:35,720 --> 00:33:38,300 Това е левия оператор промяна. 523 00:33:38,300 --> 00:33:40,060 Този оператор прави това. 524 00:33:40,060 --> 00:33:44,920 Тук е номер 1, и ако мога да олевяване, олевяване, 525 00:33:44,920 --> 00:33:49,260 какво смятате ли, че има ефект за правене, че индивидуалната 1? 526 00:33:49,260 --> 00:33:51,290 Буквално го насочва. 527 00:33:51,290 --> 00:33:57,540 Така че, ако номер 1 е това, което имате в ляво и да започнете и инициализиране до 31, 528 00:33:57,540 --> 00:34:03,490 това, което е, че смяташ да правиш? Това ще отнеме този номер 1 и смени 31 места тук. 529 00:34:03,490 --> 00:34:06,210 И тъй като очевидно няма други цифри, стоящи зад него, 530 00:34:06,210 --> 00:34:10,350 тези по подразбиране ще бъде заменен с 0s. 531 00:34:10,350 --> 00:34:15,120 Така че ще започнем с номер 1, което разбира се изглежда по този начин - 532 00:34:15,120 --> 00:34:18,659 и ме остави да го привлече над тук, в центъра. 533 00:34:18,659 --> 00:34:22,139 И след това като ти смени нещата в ляво, този човек по същество върви по този начин. 534 00:34:22,139 --> 00:34:24,659 Но веднага след като го направи, ще постъпят 0 инча 535 00:34:24,659 --> 00:34:28,360 Ако го смени за втори път, тя върви по този начин, а друг ще постъпят 0 инча 536 00:34:28,360 --> 00:34:31,000 >> Го смени отново и после още една 0 ще постъпят. 537 00:34:31,000 --> 00:34:37,900 Така че, ако се направи това нещо на 1 << 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, 16 място - ñ това са всички удвояване, като отидеш в ляво. 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 чрез пренасочване на всичко по този начин от правомощията на две. 548 00:35:15,640 --> 00:35:17,150 Е, как става тази работа? 549 00:35:17,150 --> 00:35:22,580 След това ми дава маска, това е всичко 0s, с изключение на 1 точно на мястото, аз го искам, 550 00:35:22,580 --> 00:35:27,920 и след това този израз, който е откраднат от toupper.c, 551 00:35:27,920 --> 00:35:31,770 просто се казва вземи числото N, че потребителят въвели в 552 00:35:31,770 --> 00:35:34,730 "И" с тази маска, и какво ли ще се получи? 553 00:35:34,730 --> 00:35:39,200 Вие ще получите 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 и използва тази побитово и хитрост, за да се каже, има един малко по въвеждане на потребителя е тук? 558 00:35:52,950 --> 00:35:59,220 >> Има един малко по въвеждане на потребителя е тук? И ако е така, буквално отпечатате 1, в противен отпечатате 0. 559 00:35:59,220 --> 00:36:03,780 Правим това с цели числа, просто защото това е защо правим 32 бита вместо 8, 560 00:36:03,780 --> 00:36:06,900 но това, което ние въведохме тогава е това побитови и това побитово ИЛИ 561 00:36:06,900 --> 00:36:10,450 и това левия оператор на смени, които често не са ужасно полезни, 562 00:36:10,450 --> 00:36:12,230 но се оказва, че може да бъде. 563 00:36:12,230 --> 00:36:16,560 В действителност, ако ви се налага да представлява нещо като масив от Булев 564 00:36:16,560 --> 00:36:21,260 тъкмо за да представи вярно или невярно, да предположим, че искаш да следите дали има или няма 565 00:36:21,260 --> 00:36:24,630 една стая, пълна на 300 студенти е налице, 566 00:36:24,630 --> 00:36:29,420 може да декларира масив с размер 300 на типа булев, така че да получите 300 bools 567 00:36:29,420 --> 00:36:33,090 и можете да зададете да е истина, ако някой е тук и лъжа в противен случай. 568 00:36:33,090 --> 00:36:37,550 Защо е това представителство в структурата, че данните неефективна? 569 00:36:39,370 --> 00:36:44,800 Какво лошо за дизайна на тези данни структура, масив от 300 bools? 570 00:36:46,190 --> 00:36:49,600 Какво, всъщност, е булев под предния капак? 571 00:36:49,600 --> 00:36:52,310 Това също е нещо, което не могат да бъдат запознати. 572 00:36:52,310 --> 00:36:53,720 Оказва се, че не е булев. 573 00:36:53,720 --> 00:36:56,620 Не забравяйте, ние вид, създаден с cs50.h файл, 574 00:36:56,620 --> 00:36:58,630 което от своя страна включва стандартна булев. 575 00:36:58,630 --> 00:37:00,930 C е нещо тъпо, все пак, когато става въпрос за булев. 576 00:37:00,930 --> 00:37:04,880 Той използва 8 бита да представлява всеки булев, което е напълно разточителство 577 00:37:04,880 --> 00:37:09,040 защото очевидно, колко бита ти трябва да представлява булев? Само 1. 578 00:37:09,040 --> 00:37:13,190 Така се оказва, че ако сега има възможност с побитовите оператори 579 00:37:13,190 --> 00:37:17,760 да манипулират отделните битове дори в Чар, дори и в един байт, 580 00:37:17,760 --> 00:37:21,380 се оказва, че може да намали памет, се изисква да представлява нещо глупаво 581 00:37:21,380 --> 00:37:25,490 като че посещаемостта оформена структура на данните с фактор от 8. 582 00:37:25,490 --> 00:37:29,820 Вместо да се използват осем бита да представлява вярно или невярно, може буквално да използвате един 583 00:37:29,820 --> 00:37:34,500 с помощта на един байт за всеки осем ученици в клас 584 00:37:34,500 --> 00:37:41,990 и превключване от 0 до 1, индивидуални бита с помощта на тези видове ниско ниво трикове. 585 00:37:43,850 --> 00:37:49,460 Това сложи край на енергията. Има ли някакви въпроси относно побитовите операции? 586 00:37:49,460 --> 00:37:52,710 >> Да. >> [Ученик] Има изключителна или оператор? 587 00:37:52,710 --> 00:37:56,440 Да. Има изключителна или оператор, който изглежда така, ^, моркови символ, 588 00:37:56,440 --> 00:38:02,070 което означава, че само първото нещо, или второто нещо, което може да бъде един за изхода, за да бъде едно. 589 00:38:02,070 --> 00:38:07,750 Има също така не ~, която ще ви позволи да се обръща от 0 до 1 или обратно, както и 590 00:38:07,750 --> 00:38:11,600 И има право смени оператора, >>, която е противоположна на тази, която видяхме. 591 00:38:11,600 --> 00:38:13,850 Добре. Нека вземем нещата сега по-високо ниво. 592 00:38:13,850 --> 00:38:16,770 Ние започнахме да говорим за текст и след това да го компресирате 593 00:38:16,770 --> 00:38:19,650 и представлява текста с по-малко от битове; 594 00:38:19,650 --> 00:38:22,890 малко говорихме за това как да започнете да манипулира нещата на ниво побитови. 595 00:38:22,890 --> 00:38:26,640 Нека сега я увеличите обратно до 10,000 фута представителство 596 00:38:26,640 --> 00:38:29,250 на по-сложни неща, като графики. 597 00:38:29,250 --> 00:38:32,950 Тук имаме флага на Германия, тук имаме един от Франция. 598 00:38:32,950 --> 00:38:36,350 Те могат да бъдат представени в файлови формати, които биха могли да знаят - GIF файлове, например. 599 00:38:36,350 --> 00:38:40,030 Ако някога сте виждали изображение в мрежата, който завършва инча GIF, 600 00:38:40,030 --> 00:38:43,000 това е обмен графичен формат. 601 00:38:43,000 --> 00:38:47,530 Тези две знамена вид на се поддават на натиск 602 00:38:47,530 --> 00:38:52,050 за това, което може би очевидна причина? >> Чува студент отговор] 603 00:38:52,050 --> 00:38:53,440 Има много на повторение, нали? 604 00:38:53,440 --> 00:38:57,270 За да изпратите флага на Германия, мисля, че това е изображението на екрана 605 00:38:57,270 --> 00:38:59,030 резервно в Scratch ден. 606 00:38:59,030 --> 00:39:02,380 Може да се припомни, че отделните пиксели или точки, които съставят дадено изображение. 607 00:39:02,380 --> 00:39:06,650 >> Има цял ред на черни точки и друг ред на черни точки. 608 00:39:06,650 --> 00:39:10,110 Има куп реда на черни точки, които бихме могли да се види дали наистина увеличени, 609 00:39:10,110 --> 00:39:13,370 много обичам, когато ние увеличени в лицето на Роб в Photoshop. 610 00:39:13,370 --> 00:39:15,500 Веднага след като имаме по-дълбоко и по-дълбоко и по-дълбоко в образа, 611 00:39:15,500 --> 00:39:19,990 сте започнали се вижда пикселизация, всички площади, които са съставени очите му в този случай. 612 00:39:19,990 --> 00:39:24,130 Една и съща сделка. Ако увеличени в доста, вие ще видите отделни точки. 613 00:39:24,130 --> 00:39:27,110 Е, това е вид на отпадъци от бита. 614 00:39:27,110 --> 00:39:32,120 Ако една трета от знамето е черно и 1/3 на знамето е жълто и т.н., 615 00:39:32,120 --> 00:39:34,860 защо не можем по някакъв начин да компресирате този флаг? 616 00:39:34,860 --> 00:39:39,560 И дори да бъдат компресирани под френски флаг, въпреки че моделът е малко по-различно. 617 00:39:39,560 --> 00:39:44,120 Оказва се, файла GIF формат е формат за компресиране без загуби, 618 00:39:44,120 --> 00:39:48,420 което означава, че можете да вземете изображение като германски флаг, 619 00:39:48,420 --> 00:39:53,540 можете да изхвърлите много от неговите бита, без да се жертва качеството. 620 00:39:53,540 --> 00:39:55,340 Това е в контраст с нещо подобно на JPEG, 621 00:39:55,340 --> 00:39:57,050 , с които повечето от нас вероятно са по-запознати. 622 00:39:57,050 --> 00:39:59,000 Facebook снимки и Flickr снимки и други подобни 623 00:39:59,000 --> 00:40:02,200 почти винаги се запазват като JPEG файлове, когато те се качили, 624 00:40:02,200 --> 00:40:08,100 но на JPEG е загуба - загуба - формат, чрез която можете да изхвърлите бита 625 00:40:08,100 --> 00:40:10,430 но също така хвърлят качество. 626 00:40:10,430 --> 00:40:13,890 И ако е така да компресирате снимките си с Photoshop или да ги качите на Facebook 627 00:40:13,890 --> 00:40:15,580 или да ги вземе наистина креп телефон, 628 00:40:15,580 --> 00:40:19,510 знаете, че картината започва да става много размазано и пикселизирани, 629 00:40:19,510 --> 00:40:22,290 и това е така, защото той е компресиран с компютър или телефон 630 00:40:22,290 --> 00:40:24,550 като буквално хвърляне информация. 631 00:40:24,550 --> 00:40:28,500 Но GIF е удивително в това, че той може да използва по-малко битове, отколкото може по подразбиране 632 00:40:28,500 --> 00:40:30,750 , без да губи каквато и да било информация. 633 00:40:30,750 --> 00:40:32,410 >> И по същество прави по следния начин. 634 00:40:32,410 --> 00:40:38,740 Вместо магазин във файл, като BMP за RGB тройна черен, черен, черен, черен, 635 00:40:38,740 --> 00:40:42,570 черно, черно, черно, черно, черно, черно и т.н., 636 00:40:42,570 --> 00:40:45,640 по-скоро, GIF формат ще каже, "Black" 637 00:40:45,640 --> 00:40:48,330 и след това, "Повторете това 100 пъти", или нещо подобно. 638 00:40:48,330 --> 00:40:52,280 "Black, повторете това 100 пъти, черни, повторете това 100 пъти ..." 639 00:40:52,280 --> 00:40:54,530 "Жълтата, повторете тази 100 пъти." 640 00:40:54,530 --> 00:40:57,200 И така си спомня, по същество, най-лявата пиксел 641 00:40:57,200 --> 00:41:02,160 и след това кодира по някакъв начин понятието отново и отново повтарям, че пиксел. 642 00:41:02,160 --> 00:41:06,110 Така GIF файлове могат да се компресират, без да губи каквато и да било информация. 643 00:41:06,110 --> 00:41:09,510 Но ако трябваше да се досетите, ако това е алгоритъм, който 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 Така че, ако ние всъщност отвори папка на твърдия си диск, който има тези GIF файлове, 653 00:41:44,430 --> 00:41:51,920 всъщност можете да видите, че германски флаг тук е 2 килобайта и френски е 4 килобайта. 654 00:41:51,920 --> 00:41:54,080 Случва се да е съвпадение, че човек е два пъти по друга, 655 00:41:54,080 --> 00:41:57,960 но това е в действителност случай, че френското знаме е много по-голям. 656 00:41:57,960 --> 00:42:01,250 >> Въпреки, че ние говорим тук за графика, едни и същи идеи могат да кандидатстват за 657 00:42:01,250 --> 00:42:05,150 не са неща като знамена, но снимки, които са малко по-сложни. 658 00:42:05,150 --> 00:42:08,170 Ако правите снимка на ябълка, със сигурност има много дублиране, 659 00:42:08,170 --> 00:42:11,040 така че бихме могли по някакъв начин да се помни, че по подразбиране е син фон 660 00:42:11,040 --> 00:42:13,230 а не, както дясната картина подсказва, 661 00:42:13,230 --> 00:42:16,830 трябва да се помни цвета на всеки един пиксел в тази картина. 662 00:42:16,830 --> 00:42:21,060 Така че ние може да хвърли бита далеч там без загуба на информация. 663 00:42:21,060 --> 00:42:23,340 Apple все още изглежда по същия начин. 664 00:42:23,340 --> 00:42:27,510 В този пример тук, можете да видите какво се случва в един филм. 665 00:42:27,510 --> 00:42:31,970 Те представляват олд-скуул филм макари като в горния образ там 666 00:42:31,970 --> 00:42:36,900 имате RV шофиране покрай една къща и дърво. 667 00:42:36,900 --> 00:42:42,130 И, че ван кара миналото от ляво на дясно, което очевидно не се променя? 668 00:42:42,130 --> 00:42:45,320 Къщата не се случва навсякъде, и дървото не е да ходя никъде. 669 00:42:45,320 --> 00:42:47,700 Единственото нещо, което се движи, е ван в този случай. 670 00:42:47,700 --> 00:42:51,650 Така че, като фон Непроменен подсказва, какво можете да направите във филмите 671 00:42:51,650 --> 00:42:56,530 по подобен начин е просто да изхвърлите информация, която не се променя между кадрите. 672 00:42:56,530 --> 00:42:58,900 Това обикновено е известен като компресия 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 че всъщност съхраняване на тази информация досадно като малко здрав разум проверите. 677 00:43:13,420 --> 00:43:18,620 >> От друга страна, друг подход за компресиране на видео е в тази секунда и по-ниско пример тук, 678 00:43:18,620 --> 00:43:23,970 отколкото магазин 30 кадъра, защо не просто да съхранява до 15 кадъра в секунда, а? 679 00:43:23,970 --> 00:43:27,070 Вместо филм вид на течаща прекрасно, перфектно, 680 00:43:27,070 --> 00:43:30,060 тя може да изглежда, като че ли е заекването малко, малко по-старото училище, 681 00:43:30,060 --> 00:43:37,190 но нетният ефект ще бъде да се използва много по-малко битове, отколкото иначе биха могли да се окажат необходими. 682 00:43:37,190 --> 00:43:39,240 Така, откъде идва това ни остави? 683 00:43:39,240 --> 00:43:41,700 Това беше малко настрана от къде другаде можете да отидете с компресия. 684 00:43:41,700 --> 00:43:45,140 За повече информация по този въпрос, да вземе клас като CS175 тук. 685 00:43:45,140 --> 00:43:46,990 Ето още един пример в рамките на видео. 686 00:43:46,990 --> 00:43:49,190 Ако пчелата е единственото нещо, което се движи, 687 00:43:49,190 --> 00:43:51,790 наистина можете да изхвърлите информация в тези средни рамки 688 00:43:51,790 --> 00:43:55,260 защото цветето и небето и листа, които не се променят. 689 00:43:55,260 --> 00:43:57,960 Но нека сега разгледаме едно последно нещо. 690 00:43:57,960 --> 00:44:03,890 В следващите 5 минути ние ще оставим C зад завинаги в лекция? Да. Не в psets, все пак. 691 00:44:03,890 --> 00:44:10,210 Последно история за C и след това да стигнем до много секси неща 692 00:44:10,210 --> 00:44:13,870 участието на HTML и уеб и уо-хо. Добре. 693 00:44:13,870 --> 00:44:16,050 Ето ни. Това е мотивацията. 694 00:44:16,050 --> 00:44:20,020 Оказва се, през цялото това време, когато ние сме били писане на програми, които се изпълняват звъня. 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 и я превръща в 0s и 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 , тъй като можете да си спомните от видео Роб върху компилатори, 702 00:44:42,210 --> 00:44:47,580 в тези четири стъпки: предварителна обработка, самото съставяне, монтаж и свързване. 703 00:44:47,580 --> 00:44:51,950 Но ние в клас и повечето хора в света обикновено се обобщи всички тези стъпки 704 00:44:51,950 --> 00:44:54,410 просто като "компилиране. 705 00:44:54,410 --> 00:44:58,070 Но ако започнем с изходния код като този, припомни, това е може би най-простият C програма 706 00:44:58,070 --> 00:45:03,530 сме написали до този момент, припомни, че когато са съставени в крайна сметка изглеждам така. 707 00:45:03,530 --> 00:45:07,310 Но всъщност е междинна стъпка, и тези стъпки са както следва. 708 00:45:07,310 --> 00:45:10,750 На първо място е това нещо в самото начало на този и повечето от нашите програми, 709 00:45:10,750 --> 00:45:13,550 # Включват 710 00:45:13,550 --> 00:45:17,210 Какво # включват направи за нас? 711 00:45:17,210 --> 00:45:24,150 Почти копия и пасти съдържанието на stdio.h в досието ми, така че защо? 712 00:45:24,150 --> 00:45:27,220 Защо да ми пука за съдържанието на stdio.h? Какво има там на интереси? 713 00:45:27,220 --> 00:45:32,310 ФОРМАТ декларация, негов прототип, така че компилаторът знае какво имам предвид 714 00:45:32,310 --> 00:45:34,900 когато спомена тази функция ФОРМАТ. 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 Това е точно толкова близо, колкото можете да получите за писане 0s и 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 Когато чуете, че компютърът ви е Intel Inside, 732 00:46:42,930 --> 00:46:46,180 имате CPU Intel във вашия Mac или PC, какво означава това? 733 00:46:46,180 --> 00:46:51,200 CPU идва построен от компании като Intel разбиране на определени инструкции. 734 00:46:51,200 --> 00:46:55,770 Те нямат представа какви са функции като суап или основната сам по себе си, 735 00:46:55,770 --> 00:47:00,060 но те знаят това, което много ниско ниво инструкции като добави, изваждане, бута, 736 00:47:00,060 --> 00:47:02,430 се движат, обадете се, и така нататък. 737 00:47:02,430 --> 00:47:06,170 Така че, когато компилирате C код в асемблер, 738 00:47:06,170 --> 00:47:11,820 много удобен за потребителя изглеждащ код се превръща в нещо, което прилича на това, 739 00:47:11,820 --> 00:47:21,670 , които буквално се движи байта или 4 байта около в такива малки единици и на процесора. 740 00:47:21,670 --> 00:47:26,820 Но накрая, когато звъня е готова да предприеме тази представяне на програмата си 741 00:47:26,820 --> 00:47:30,940 в 0s и 1s, а след това се случи стъпка сглобяване, 742 00:47:30,940 --> 00:47:33,850 и отново всичко се случва в миг на око, при движение звъня. 743 00:47:33,850 --> 00:47:39,300 Ние започваме тук, да подава файл, като това, и след това го превръща в тези 0s и 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 >> Правя това за много кратко програма, но ако се върнем за Scramble 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 Но тогава накрая, има още едно нещо, за което. 754 00:48:17,770 --> 00:48:21,810 Тук са 0s и 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 той получава съставени в код събрание, и той ще се сглобяват в 0s и 1s, 758 00:48:34,280 --> 00:48:37,460 само 0s и 1s, които са изведени в този момент във времето 759 00:48:37,460 --> 00:48:40,270 са тези, които са резултат от моя код. 760 00:48:40,270 --> 00:48:44,400 Но човекът, който е написал ФОРМАТ, те съставила своя код преди 20 години 761 00:48:44,400 --> 00:48:47,000 и това е вече инсталиран някъде на уреда, 762 00:48:47,000 --> 00:48:51,610 така че ние трябва по някакъв начин да се слеят си 0s и 1s с 0s и 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 става събрание код става 0s и 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 събрание код и след това цял куп 0s и 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 >> Но накрая, аз трябва да си взема 0s и 1s и това лице 0s и 1s 773 00:49:28,710 --> 00:49:32,760 и по някакъв начин ги свързват заедно, буквално се комбинират тези 0s и 1s 774 00:49:32,760 --> 00:49:37,900 в един-единствен файл, наречен a.out или hello1 или каквото се обадих на моя програма 775 00:49:37,900 --> 00:49:43,320 , така че крайният резултат да има всички 1s и 0s, които трябва да съставят програмата ми. 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 Но с това, ние сме на път да напусне C зад. 783 00:50:09,220 --> 00:50:11,420 Да вървим напред и ни вземат 5-минутна почивка, 784 00:50:11,420 --> 00:50:14,190 и когато се върнем в интернет. 785 00:50:17,280 --> 00:50:19,170 Добре. Ние сме обратно. 786 00:50:19,170 --> 00:50:23,590 Сега ние започваме нашия поглед не само в HTML, защото, както ще видим, 787 00:50:23,590 --> 00:50:26,050 HTML сама по себе си е всъщност доста проста 788 00:50:26,050 --> 00:50:29,270 но наистина уеб програмиране, изграждане на мрежи в по-общ план, 789 00:50:29,270 --> 00:50:31,770 и как всички тези технологии се събират 790 00:50:31,770 --> 00:50:35,400 да ни позволи да създадем много по-сложни програми на върха на интернет 791 00:50:35,400 --> 00:50:38,690 от този момент ние сме били в състояние в тези черни и бели прозорци. 792 00:50:38,690 --> 00:50:42,140 Всъщност, в този момент в семестър, въпреки че ние ще прекара сравнително по-малко време 793 00:50:42,140 --> 00:50:46,200 PHP, HTML, CSS, JavaScript, SQL и повече, 794 00:50:46,200 --> 00:50:48,480 повечето студенти се окажете прави окончателни проекти, които са уеб-базирани 795 00:50:48,480 --> 00:50:51,230 защото, както ще видите, на фона сега в C 796 00:50:51,230 --> 00:50:54,450 е много приложим към тези по-високо ниво език. 797 00:50:54,450 --> 00:50:56,800 >> И като започнете да мислите за своя окончателен проект, 798 00:50:56,800 --> 00:50:59,940 , които много прилича Проблем Set 0, където сте били насърчавани 799 00:50:59,940 --> 00:51:02,160 да се направи почти всичко от интерес за вас Scratch 800 00:51:02,160 --> 00:51:05,790 окончателния проект е вашата възможност да споделяш знания и разбирам с C 801 00:51:05,790 --> 00:51:09,850 или PHP или JavaScript или нещо подобно за въртене 802 00:51:09,850 --> 00:51:12,330 и да създадете свой собствен парче от софтуер, за света, за да се види. 803 00:51:12,330 --> 00:51:17,770 И да ви семена с идеи, знаете, че можете да се отправите тук, projects.cs50.net. 804 00:51:17,770 --> 00:51:21,800 Всяка година ние склоняването идеи от преподаватели и служители и студентски групи на територията на колежа 805 00:51:21,800 --> 00:51:27,330 само за да представят своите идеи за интересни неща, които биха могли да бъдат решени с помощта на компютри, 806 00:51:27,330 --> 00:51:29,860 използвате уеб сайтове, чрез използване на софтуер. 807 00:51:29,860 --> 00:51:32,360 Така че, ако сте се борят да излезе с една идея на собствения си, 808 00:51:32,360 --> 00:51:35,790 по всякакъв начин да преминете през тези идеи от тази година и миналата. 809 00:51:35,790 --> 00:51:39,990 Това е съвършено добре да се справи с проект, който е разгледан преди. 810 00:51:39,990 --> 00:51:44,540 Виждали сме много приложения за разглеждане на статута на прането на територията на колежа, 811 00:51:44,540 --> 00:51:47,000 много приложения за навигация в менюто за трапезарията, 812 00:51:47,000 --> 00:51:49,540 много приложения за навигация каталог на курсовете и други подобни. 813 00:51:49,540 --> 00:51:53,680 И наистина, в бъдеще лекция и в бъдещи семинари, 814 00:51:53,680 --> 00:51:57,750 ние ще ви запозная с някои публично достъпни APIs, както предлагат на пазара 815 00:51:57,750 --> 00:52:02,520 както и тук на разположение от CS50 на територията на колежа, така че да имат достъп до данните 816 00:52:02,520 --> 00:52:04,910 и след това могат да правят интересни неща с него. 817 00:52:04,910 --> 00:52:09,380 Така че повече относно окончателните проекти в рамките на няколко дни, когато ние пускаме спецификацията, 818 00:52:09,380 --> 00:52:12,990 но за сега, знаете, че можете да работите соло или с един или двама приятели 819 00:52:12,990 --> 00:52:16,010 по-голямата всеки проект от интерес за вас. 820 00:52:16,010 --> 00:52:18,080 Интернет. 821 00:52:18,080 --> 00:52:22,300 Ти върви напред и извади лаптопа си, да отидете на facebook.com за първи път, 822 00:52:22,300 --> 00:52:27,020 които не са влезли в наскоро, и натиснете Enter. Какво точно се случва? 823 00:52:27,020 --> 00:52:30,150 >> Когато натиснете Enter на вашия компютър, цял куп от стъпки 824 00:52:30,150 --> 00:52:32,600 започне нещо като магически случва. 825 00:52:32,600 --> 00:52:35,960 Така че тук от ляво, уеб сървър като Facebook е тук, в дясно, 826 00:52:35,960 --> 00:52:42,500 и някак използвате този език, наречен HTTP, Hypertext Transfer Protocol. 827 00:52:42,500 --> 00:52:46,770 HTTP не е език за програмиране. Това е повече протокол. 828 00:52:46,770 --> 00:52:52,310 Това е набор от конвенции, уеб браузъри и уеб сървъри използват, когато вътрешен. 829 00:52:52,310 --> 00:52:54,360 И какво означава това е, както следва: 830 00:52:54,360 --> 00:52:56,790 Голяма както в реалния свят, ние имаме тези конвенции 831 00:52:56,790 --> 00:53:00,140 където, ако отговарят на някои човек за първи път, ако нямате нищо против да ме humoring тук, 832 00:53:00,140 --> 00:53:03,980 Може да дойда до вас, да речем, "Здравейте, моето име е Дейвид. >> Здравей, Дейвид. Моето име е Сами. 833 00:53:03,980 --> 00:53:05,770 "Здравейте, Дейвид. Моето име е Сами." 834 00:53:05,770 --> 00:53:08,310 Така че сега ние току-що са ангажирани в този вид глупаво човешко протокол 835 00:53:08,310 --> 00:53:12,200 където съм започнала протокол, Сами е отговорил, 836 00:53:12,200 --> 00:53:15,060 сме здрависал и сделката е завършена. 837 00:53:15,060 --> 00:53:18,260 HTTP е много подобен по дух. 838 00:53:18,260 --> 00:53:23,350 Когато вашите искания уеб браузъра www.facebook.com 839 00:53:23,350 --> 00:53:27,020 това, което е наистина прави вашия браузър разширява своята страна, така да се каже, 840 00:53:27,020 --> 00:53:29,960 към сървъра и да го изпратите съобщение. 841 00:53:29,960 --> 00:53:34,220 И това послание е обикновено нещо подобно се - какво искате да получите - 842 00:53:34,220 --> 00:53:38,740 ме на началната страница, която обикновено се обозначава с една наклонена черта в края на URL. 843 00:53:38,740 --> 00:53:43,790 И само да знаеш какъв език говоря, браузъра ще ви кажа 844 00:53:43,790 --> 00:53:46,930 че аз говоря HTTP версия 1.1, 845 00:53:46,930 --> 00:53:51,980 А също и за добра мярка, аз ще ви кажа, че хостът, че искам началната страница на 846 00:53:51,980 --> 00:53:54,120 е facebook.com. 847 00:53:54,120 --> 00:53:57,730 Обикновено, уеб браузър, без знанието на човека, 848 00:53:57,730 --> 00:54:03,350 изпраща това съобщение в интернет, когато просто въведете www.facebook.com, 849 00:54:03,350 --> 00:54:05,370 >> Въведете във вашия браузър. 850 00:54:05,370 --> 00:54:07,300 И какво означава Facebook отговори? 851 00:54:07,300 --> 00:54:12,540 Той реагира с някои подобни изглеждащи загадъчни подробности, но също така и още много други. 852 00:54:12,540 --> 00:54:14,310 Нека вървим напред към началната страница на Facebook. 853 00:54:14,310 --> 00:54:17,480 Това е екран, който вероятно никога повечето от нас Ако останеш влезете в профила си през цялото време, 854 00:54:17,480 --> 00:54:19,830 но това наистина е началната страница. 855 00:54:19,830 --> 00:54:24,150 Ако правим това в Chrome, забележите, че можете да дръпнете тези малки контекстни менюта. 856 00:54:24,150 --> 00:54:26,980 С помощта на Chrome, Mac OS, Windows, Linux, или нещо подобно, 857 00:54:26,980 --> 00:54:31,840 Ако можете да контролирате клик или ляв клик, обикновено можете да дръпнете меню, което прилича на това, 858 00:54:31,840 --> 00:54:35,870 където се очакват няколко възможности, една от които е View Page Source. 859 00:54:35,870 --> 00:54:39,920 Можете също така обикновено се стигне до тези неща, като отидете на менюто "Изглед" и ровя. 860 00:54:39,920 --> 00:54:42,750 Например, тук под View, Проект е едно и също нещо. 861 00:54:42,750 --> 00:54:45,780 Отивам да вървим напред и да разгледаме Преглед на изходния код на страницата. 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 последвано от ключова дума, като опция, той показва, че Markup Language по подходящ начин. 879 00:56:03,370 --> 00:56:06,820 В този случай, тя ще покаже падащото меню на година. 880 00:56:06,820 --> 00:56:09,240 Но отново, това е пълна каша, да погледнете. 881 00:56:09,240 --> 00:56:16,630 Това не е така, защото разработчиците на Facebook прояви 0 за 5 стил, например. 882 00:56:16,630 --> 00:56:20,190 Това е така, защото повечето от кода, който те пишат е, всъщност, написана красиво, 883 00:56:20,190 --> 00:56:22,450 и коментира, добре разчленен, и други подобни, 884 00:56:22,450 --> 00:56:26,080 но разбира машини, компютри, браузъри наистина не им пука 885 00:56:26,080 --> 00:56:27,890 дали кода е добре оформена. 886 00:56:27,890 --> 00:56:33,100 И в действителност, това е напълно разточителство да натиснете клавиша 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 защото, ако мислите за това по този начин, Facebook получава един милиард страница удари ден - 898 00:57:17,700 --> 00:57:21,670 нещо лудо като това - какво би станало, ако един програмист само за да бъде анален 899 00:57:21,670 --> 00:57:26,660 удари бар пространство допълнително време, само за да тире някакъв ред на кода все така много повече? 900 00:57:26,660 --> 00:57:29,500 Какъв е изводът, ако Facebook запазва празно 901 00:57:29,500 --> 00:57:32,880 във всички байта те изпращат хора в Интернет? 902 00:57:32,880 --> 00:57:36,400 Натискането на бар пространство, след като дава допълнително байт във вашия файл. 903 00:57:36,400 --> 00:57:39,730 И ако един милиард души, след което се процедира, за да изтеглите начална страница, която ден, 904 00:57:39,730 --> 00:57:42,060 колко повече данни са предадени по Интернет? 905 00:57:42,060 --> 00:57:45,200 Гигабайт без основателна причина. 906 00:57:45,200 --> 00:57:48,510 И се отпуска, за много сайтове това не е такъв мащабируема въпрос, 907 00:57:48,510 --> 00:57:51,030 но за Facebook, Google, за някои от най-популярните сайтове 908 00:57:51,030 --> 00:57:54,860 има голям стимул да направи финансово код изглежда бъркотия 909 00:57:54,860 --> 00:57:58,980 така че, който използвате за няколко байта, като е възможно в допълнение след това да го компресирате 910 00:57:58,980 --> 00:58:01,500 нещо като цип, алгоритъм, наречен компресия, 911 00:58:01,500 --> 00:58:04,250 че браузърът автоматично прави за вас. Но това е ужасно. 912 00:58:04,250 --> 00:58:08,060 Ние никога няма да научат нищо за уебсайтове на други хора и как да проектирате уеб страници 913 00:58:08,060 --> 00:58:09,680 ако трябва да гледам на него като тази. 914 00:58:09,680 --> 00:58:13,620 >> Така че, за щастие, браузъри като Chrome и IE и Firefox тези дни 915 00:58:13,620 --> 00:58:16,450 обикновено идват с вградени инструменти за разработчици. 916 00:58:16,450 --> 00:58:21,730 В действителност, ако сляза тук, за да инспектира елемент или ако отида Изглед, разработчици, 917 00:58:21,730 --> 00:58:25,220 и отидете на Инструменти за разработчици изрично, 918 00:58:25,220 --> 00:58:27,640 сега се появи този прозорец в долната част на екрана си. 919 00:58:27,640 --> 00:58:31,230 Това е малко смущаваща на първо, защото тук има много на непознати раздели, 920 00:58:31,230 --> 00:58:34,510 но ако кликнете върху елементи по целия път в долния ляв, 921 00:58:34,510 --> 00:58:38,810 Chrome очевидно е доста умен. Той знае как да тълкува всичко на този кодекс. 922 00:58:38,810 --> 00:58:42,320 И така, какво Chrome е почиства всички HTML Facebook. 923 00:58:42,320 --> 00:58:45,680 Въпреки че там не е празно там, не е вдлъбнатина там, 924 00:58:45,680 --> 00:58:51,120 забележите, че вече може да започне да се движите тази уеб страница по-йерархично. 925 00:58:51,120 --> 00:58:56,910 Оказва се, че всяка уеб страница, написана на език, наречен HTML5 трябва да започне с това, 926 00:58:56,910 --> 00:59:03,980 тази DOCTYPE декларация, така да се каже: 927 00:59:03,980 --> 00:59:07,840 Това е нещо на светлина и сив там, но това е най-горния ред код в този файл, 928 00:59:07,840 --> 00:59:12,080 и че просто казва на браузъра, "Хей, тук идва някои HTML5. Тук идва уеб страница". 929 00:59:12,080 --> 00:59:18,490 Първият отворен скоба отвъд, че се случва да бъде това нещо, отворена скоба HTML тагове, 930 00:59:18,490 --> 00:59:22,320 и след това, ако се гмурна още по-дълбоко - тези стрелки са напълно безсмислени; 931 00:59:22,320 --> 00:59:25,140 те са просто заради презентацията, те не са всъщност в досието - 932 00:59:25,140 --> 00:59:30,300 забележите, че вътрешността на HTML тагове Facebook, нещо, което започва с отворена скоба 933 00:59:30,300 --> 00:59:32,910 и след това има една дума се нарича таг. 934 00:59:32,910 --> 00:59:38,610 Вътре етикет на HTML е очевидно главата етикет и етикет на тялото. 935 00:59:38,610 --> 00:59:41,930 Вътре в главата маркер сега е цялата бъркотия за Facebook 936 00:59:41,930 --> 00:59:45,620 защото те имат много на метаданни и други неща за маркетинг и реклама. 937 00:59:45,620 --> 00:59:50,600 >> Но ако ние превъртете надолу, надолу, надолу, надолу, нека да видим къде е. Ето го. 938 00:59:50,600 --> 00:59:52,210 Това е поне малко по-запознати. 939 00:59:52,210 --> 00:59:55,990 Заглавието на началната страница на Facebook, ако някога ви се погледнете в раздела в заглавната лента, 940 00:59:55,990 --> 00:59:59,060 Добре дошли в Facebook Вход Вход или да научат повече. 941 00:59:59,060 --> 01:00:01,110 Това е това, което ще видите в заглавната лента на Chrome, 942 01:00:01,110 --> 01:00:03,100 и това е начина, по който е представена в кода. 943 01:00:03,100 --> 01:00:08,090 Ако пренебрегнем всичко останало в главата, повечето от смелостта на уеб страница в тялото, 944 01:00:08,090 --> 01:00:10,940 и се оказва, че ще изглежда по-сложен код Facebook 945 01:00:10,940 --> 01:00:14,540 от повечето неща, които първоначално ще пиша, само защото тя е била построена през годините, 946 01:00:14,540 --> 01:00:17,260 но има един куп скрипт тагове, JavaScript код, 947 01:00:17,260 --> 01:00:18,870 , което прави много интерактивен уебсайт: 948 01:00:18,870 --> 01:00:22,330 виждат статуси мигновено с помощта на езици като JavaScript. 949 01:00:22,330 --> 01:00:25,270 Има нещо, наречено дивизия, която е подразделение на страницата. 950 01:00:25,270 --> 01:00:27,940 Но преди да стигнем до тази подробност, нека се опитаме да я увеличите 951 01:00:27,940 --> 01:00:31,920 и погледнете по-опростена версия на Facebook 1.0, така да се каже. 952 01:00:31,920 --> 01:00:34,740 Тук е Здравей, свят на уеб страници. 953 01:00:34,740 --> 01:00:37,370 Тя е, че DOCTYPE декларация на самия връх 954 01:00:37,370 --> 01:00:40,280 , което е малко по-различна от всичко останало. 955 01:00:40,280 --> 01:00:46,130 Нищо друго не пишем в уеб страница ще започне с 01:00:48,880 и с изключение на нещо, наречено коментари в HTML. 957 01:00:48,880 --> 01:00:53,000 Но за по-голямата си част, всичко в една уеб страница е отворена скоба, ключова дума, в близост скоба. 958 01:00:53,000 --> 01:00:56,220 >> В този случай можете да видите най-простите на уеб страници възможни. 959 01:00:56,220 --> 01:01:00,260 HTML тагове съдържа глава етикет и съдържа орган маркер, 960 01:01:00,260 --> 01:01:04,580 но забележите, че има тази идея за пускане и спиране на тагове. 961 01:01:04,580 --> 01:01:11,360 Това е началото тагове за HTML, това е тясно тагове или краен маркер. 962 01:01:11,360 --> 01:01:15,400 Забележете, че те са нещо на противоположностите, в смисъл, че затварящия етикет или етикет на края 963 01:01:15,400 --> 01:01:20,030 това наклонена черта вътре в себе си. 964 01:01:20,030 --> 01:01:23,540 В същото време, има отварящия таг на главата и затварящия етикет на главата тук. 965 01:01:23,540 --> 01:01:26,880 >> Има открита заглавие и затварящия етикет заглавие тук. 966 01:01:26,880 --> 01:01:29,850 Фактът, че съм поставил заглавието на една линия, чисто произволно. 967 01:01:29,850 --> 01:01:33,760 Тя просто изглеждаше като тя би се вписал добре на един ред, така че не се притеснява да удря въведете няколко пъти. 968 01:01:33,760 --> 01:01:38,200 Междувременно, тялото, което направих, тире, само за да бъде все така ясен. 969 01:01:38,200 --> 01:01:41,050 Забележете, че HTML е доста тъп език. 970 01:01:41,050 --> 01:01:43,410 В действителност, в деня преди имаше WYSIWYG редактори 971 01:01:43,410 --> 01:01:46,770 и Microsoft Word, където може да се каже: "Направи това смело, правят този курсив" 972 01:01:46,770 --> 01:01:50,850 вие всъщност ще въведете малки команди в есетата на 20 + години 973 01:01:50,850 --> 01:01:55,740 с което бихте казали "Започнете да правите този текст получер Спрете този текст получер". 974 01:01:55,740 --> 01:01:59,010 "Започнете да правите този текст курсив. Спрете да прави този текст курсив. 975 01:01:59,010 --> 01:02:01,850 >> Ето какво е HTML или какъвто и да е език за маркиране. 976 01:02:01,850 --> 01:02:05,530 Тази първа етикет казва: "Хей, браузър. Тук идва малко HTML. 977 01:02:05,530 --> 01:02:09,880 Следващата етикет казва: "Хей, браузър. Тук идва на главата, заглавието на моята уеб страница". 978 01:02:09,880 --> 01:02:11,650 "Хей, браузър. Тук идва титлата." 979 01:02:11,650 --> 01:02:15,880 И тогава тук, "Хей, браузър Това е за титлата." 980 01:02:15,880 --> 01:02:20,000 Така че това е, как браузърът знае, да не се показва повече знаци, отколкото Здравейте, света 981 01:02:20,000 --> 01:02:21,860 в заглавната лента. 982 01:02:21,860 --> 01:02:23,640 В същото време, това се казва, "Това е за главата." 983 01:02:23,640 --> 01:02:28,340 Това казва: "Тук идва тялото Ето самото тяло." - Буквално думите Здравей, свят. 984 01:02:28,340 --> 01:02:33,190 И това казва тук, "Това е за тялото. Това е за HTML. 985 01:02:33,190 --> 01:02:34,640 Така че браузърите са доста тъп. 986 01:02:34,640 --> 01:02:39,920 Те току-що прочетох тези неща горе до долу, от ляво на дясно, и правя точно това, което им се казва да се направи. 987 01:02:39,920 --> 01:02:41,860 Нека тук всъщност малък пример. 988 01:02:41,860 --> 01:02:46,240 Нека ме отвори най-простият от програми на моя Mac, а именно TextEdit. 989 01:02:46,240 --> 01:02:48,220 На Windows, можете да използвате notepad.exe. 990 01:02:48,220 --> 01:02:50,520 Но това е всичко, което трябва да започнете да печелите уеб страници. 991 01:02:50,520 --> 01:02:53,730 Отивам да вървим напред и просто да копирате и поставите този код в този файл. 992 01:02:53,730 --> 01:02:57,210 Отивам да вървим напред и да го запишете на компютъра си, 993 01:02:57,210 --> 01:03:01,220 и аз ще да запазите този hello.html, 994 01:03:01,220 --> 01:03:03,840 и сега е кръстен файл hello.html. 995 01:03:03,840 --> 01:03:05,690 Ето това е на десктопа си. 996 01:03:05,690 --> 01:03:11,130 Да отида в браузъра и изтеглете файла в браузъра. 997 01:03:11,130 --> 01:03:14,060 И готово, тук е моят първи уеб страница. 998 01:03:14,060 --> 01:03:17,340 Забележете, че заглавието на раздела е здравей, свят по заглавието, 999 01:03:17,340 --> 01:03:20,040 и забележете, че Здравей, свят е тялото на моята уеб страница, 1000 01:03:20,040 --> 01:03:22,190 уо-хо, аз съм в интернет. 1001 01:03:22,190 --> 01:03:24,700 >> Аз наистина не съм, нали, защото този файл не е в интернет. 1002 01:03:24,700 --> 01:03:28,330 Това се случва да бъде на местно моя твърд диск в този конкретен път. 1003 01:03:28,330 --> 01:03:32,720 Но идеята е същата. Всичко, което сега трябва е уеб сървър, към която да го качите. 1004 01:03:32,720 --> 01:03:37,410 Но първо нека действително се въведе малко по-голяма сложност и малко повече стилизация. 1005 01:03:37,410 --> 01:03:39,890 Това е прост, ако е скучно, уеб страница. 1006 01:03:39,890 --> 01:03:41,990 Оказва се, че и други видове етикети, които можем да използваме. 1007 01:03:41,990 --> 01:03:45,530 Например, тук в жълто въведохме два нови етикети. 1008 01:03:45,530 --> 01:03:49,630 Ние няма да играят много с тези днес, но забележите, че връзката маркер 1009 01:03:49,630 --> 01:03:52,520 някак си изглежда по-различно от всичко останало. 1010 01:03:52,520 --> 01:03:55,370 Връзката маркер отнема това, което се наричат ​​атрибути, 1011 01:03:55,370 --> 01:03:59,770 и атрибут е нещо, което променя поведението на етикет. 1012 01:03:59,770 --> 01:04:03,840 В този случай това не е най-добрият избор на имена, връзка, защото това е нещо безсмислено, 1013 01:04:03,840 --> 01:04:11,590 но тази връзка етикет казва по същество, включва файл наречена styles.css вътрешността на моята уеб страница. 1014 01:04:11,590 --> 01:04:15,400 Можете да мислите за направи аналогия с C # включват директива. 1015 01:04:15,400 --> 01:04:19,650 Styles.css се позовава на съвсем различен език, че няма да играят с днес, 1016 01:04:19,650 --> 01:04:23,790 но това е за естетика: размери на шрифтове, цветове, подплънки, отстъпите, маржове, 1017 01:04:23,790 --> 01:04:26,040 и всичко на този вид естетика на детайлност. 1018 01:04:26,040 --> 01:04:28,820 Междувременно маркера на скрипта е функционално сходни, 1019 01:04:28,820 --> 01:04:33,140 а по-скоро, отколкото са CSS, този език, той включва друг език, JavaScript. 1020 01:04:33,140 --> 01:04:37,810 С други думи, с тези две тагове в крайна сметка ще бъде в състояние да напиша собствена уеб страница 1021 01:04:37,810 --> 01:04:41,490 но също така и издърпайте код, който аз или някой друг е написал 1022 01:04:41,490 --> 01:04:44,350 , така че да може да стои на раменете на другите хора, ние можем да практикуват добър дизайн, 1023 01:04:44,350 --> 01:04:46,120 факторинг от общ кодекс. 1024 01:04:46,120 --> 01:04:49,090 Ако имам 10 различни уеб страници, това означава, че някои от моите естетика 1025 01:04:49,090 --> 01:04:52,490 могат да бъдат отразени, като много прилича # включват в отделен файл. 1026 01:04:52,490 --> 01:04:54,420 Така че ние сме стигнат до там. 1027 01:04:54,420 --> 01:04:57,180 Но нека всъщност първо правя нещо по-интересно с този файл. 1028 01:04:57,180 --> 01:05:01,110 >> Отново, това е просто TextEdit. Аз не съм технически в интернет все още, но ние ще стигнем до там. 1029 01:05:01,110 --> 01:05:04,910 Аз бих искал да направя Здравей, свят малко по-смели, отколкото е. 1030 01:05:04,910 --> 01:05:10,890 Така че, здравей, нека да каже произволно за смели. 1031 01:05:10,890 --> 01:05:15,910 Отново, историята е една и съща: Здравейте, запетая, започнете да правите това смело, 1032 01:05:15,910 --> 01:05:19,730 тогава светът става отпечатана с удебелен шрифт, а това означава спре да печата с удебелен шрифт. 1033 01:05:19,730 --> 01:05:24,020 Позволете ми да отида напред и да запишете файла ми, за да се върнете към Chrome, ще се увеличат само за да можем да го видя по-добре, 1034 01:05:24,020 --> 01:05:27,870 и презареди, и ще видите, че светът сега е с удебелен шрифт. 1035 01:05:27,870 --> 01:05:31,810 Уеб е всичко за хипервръзки, така че нека да вървим напред и да направите това: 1036 01:05:31,810 --> 01:05:38,550 любимият ми сайт е, да речем, youtube.com. 1037 01:05:38,550 --> 01:05:43,810 Запиши, презареди. Добре. Има няколко проблеми в момента, освен hideousness на сайта. 1038 01:05:43,810 --> 01:05:47,310 1, аз съм сигурен, че аз удари Въведете тук. И аз го направих. 1039 01:05:47,310 --> 01:05:51,590 Засегнати не само Enter, аз също отстъп, практикуват това, което проповядват за стил, 1040 01:05:51,590 --> 01:05:54,930 но ми е в непосредствена близост до света. 1041 01:05:54,930 --> 01:05:58,410 Така че, защо е това? Браузъри само това, което ви казвам тях да направят. 1042 01:05:58,410 --> 01:06:04,010 Не съм казал на браузъра, "Break линии тук Поставете абзац тук." 1043 01:06:04,010 --> 01:06:07,820 Така браузъра, това няма значение, ако аз хит Върни 30 пъти, 1044 01:06:07,820 --> 01:06:10,820 тя все още ще да си сложа в непосредствена близост до световно. 1045 01:06:10,820 --> 01:06:15,930 Това, което наистина трябва да се направи тук е да се каже нещо като
, вмъкнете нов ред. 1046 01:06:15,930 --> 01:06:17,940 >> И действително, нов ред е вид странно нещо 1047 01:06:17,940 --> 01:06:21,650 , защото наистина не може да започне да се движи в друга линия, а след това направи нещо, 1048 01:06:21,650 --> 01:06:25,380 и след това да спрат да се движат на нов ред. Това е вид на атомна операция. 1049 01:06:25,380 --> 01:06:28,140 Или го направи, или не. Удари Въведете или не. 1050 01:06:28,140 --> 01:06:33,390 Така ДВУСТАЕН е малко по-различен маркер, така че аз трябва да сортирате както на открито и го затворете 1051 01:06:33,390 --> 01:06:35,230 всички наведнъж. 1052 01:06:35,230 --> 01:06:37,500 Синтаксисът за това е това. 1053 01:06:37,500 --> 01:06:41,760 Технически, бихте могли да направите нещо подобно в някои версии на HTML, 1054 01:06:41,760 --> 01:06:45,600 но това е просто глупаво, защото няма причина да се започне и да се спре нещо 1055 01:06:45,600 --> 01:06:48,420 ако може вместо това да направи всичко наведнъж. 1056 01:06:48,420 --> 01:06:52,310 Осъзнайте, че HTML5 не изискват това стриктно наклонена черта, 1057 01:06:52,310 --> 01:06:55,410 така че ще видите учебници и онлайн ресурси, които не разполагат с него, 1058 01:06:55,410 --> 01:06:59,780 но за добра мярка да практикуват симетрия, която сме виждали до този момент. 1059 01:06:59,780 --> 01:07:02,870 Това означава, че етикет е едновременно отваря и затваря. 1060 01:07:02,870 --> 01:07:05,220 Така че сега, нека ме спаси моето досие, се върна тук. 1061 01:07:05,220 --> 01:07:10,240 Добре, така че започва да изглежда по-добре, с изключение на уеб Знам вид кликване, 1062 01:07:10,240 --> 01:07:13,610 и все пак YouTube тук изглежда не води до нищо. 1063 01:07:13,610 --> 01:07:17,560 Това е така, защото дори и да изглежда като връзка, браузърът не знае, че сам по себе си, 1064 01:07:17,560 --> 01:07:20,670 така че трябва да каже на браузъра, че това е връзка. 1065 01:07:20,670 --> 01:07:22,620 >> Начин да направите това е да се използва етикет за котва: 1066 01:07:22,620 --> 01:07:26,770 01:07:35,900 = "Http://www.youtube.com"> 1068 01:07:35,900 --> 01:07:38,490 и ме остави да се премести на нов ред просто така, че е малко по-разбираеми, 1069 01:07:38,490 --> 01:07:40,060 и аз ще се свие размера на шрифта. 1070 01:07:40,060 --> 01:07:43,890 Съм направил? Има ще бъде тази дихотомия. 1071 01:07:43,890 --> 01:07:46,760 Този таг, котва маркер, наистина взема атрибут, 1072 01:07:46,760 --> 01:07:52,900 , което променя поведението си, и стойността на този атрибут е очевидно URL на YouTube. 1073 01:07:52,900 --> 01:07:56,380 Но забележете дихотомия е, че само защото това е URL, ти започваш да се 1074 01:07:56,380 --> 01:08:01,020 това не означава, че трябва да бъде дума, която сте подчертаване и връзка. 1075 01:08:01,020 --> 01:08:03,960 Напротив, това може да бъде нещо подобно. 1076 01:08:03,960 --> 01:08:10,870 Така че аз трябва да кажа да спреш тази дума хипервръзка чрез използване на затварящия етикет котва. 1077 01:08:10,870 --> 01:08:12,650 Забележете, аз не правя това. 1078 01:08:12,650 --> 01:08:15,890 1, това ще бъде само губене на времето на всички и не е необходимо. 1079 01:08:15,890 --> 01:08:19,290 >> За да затворите етикет, можете само да спомена името на етикет. 1080 01:08:19,290 --> 01:08:21,800 Вие не говорим за някой от атрибутите. 1081 01:08:21,800 --> 01:08:26,189 Така че нека с изключение на това, че се върна. Добре, готово, сега е синьо и хипервръзка. 1082 01:08:26,189 --> 01:08:29,430 Ако щракнете върху него, аз всъщност отидете в YouTube. 1083 01:08:29,430 --> 01:08:32,529 Така че дори и моята уеб страница не е в Интернет, той е най-малко HTML, 1084 01:08:32,529 --> 01:08:37,930 и ако оставим Интернет настигне, ние всъщност ще свърши тук, в youtube.com. 1085 01:08:37,930 --> 01:08:40,670 И аз мога да се върна и тук е моята уеб страница. Но забележете това. 1086 01:08:40,670 --> 01:08:43,120 Ако някога сте придобили спам или фишинг атака, 1087 01:08:43,120 --> 01:08:45,850 сега имате възможност след само пет минути, за да направи същото. 1088 01:08:45,850 --> 01:08:50,920 Да отидете тук и да направим нещо като www.badguy.com 1089 01:08:50,920 --> 01:08:59,319 или каквото и непълни сайт е, и тогава може да се каже потвърдите вашата PayPal сметка. 1090 01:08:59,319 --> 01:09:04,840 [Смях] И сега това е да отида да badguy.com, което аз няма да кликнете върху 1091 01:09:04,840 --> 01:09:08,000 защото нямам представа къде води. [Смях] 1092 01:09:08,000 --> 01:09:10,859 >> Но сега имаме възможността да свърши там. 1093 01:09:10,859 --> 01:09:12,640 Така че ние сме наистина едва сега започват да надраскат повърхността. 1094 01:09:12,640 --> 01:09:15,830 Ние не сме програмиране сама по себе си, пишем език за маркиране. 1095 01:09:15,830 --> 01:09:18,569 Но веднага след като около нашия речник в HTML, 1096 01:09:18,569 --> 01:09:21,520 ще представим PHP, действително език за програмиране 1097 01:09:21,520 --> 01:09:26,859 която ще ни позволи да генерира HTML автоматично генерира CSS автоматично, 1098 01:09:26,859 --> 01:09:29,430 , така че можем да започнем в сряда за изпълнение, да речем, 1099 01:09:29,430 --> 01:09:31,700 собствена търсачка и др. 1100 01:09:31,700 --> 01:09:34,770 Но повече, че в няколко дни. Ще се видим тогава. 1101 01:09:34,870 --> 01:09:39,000 >> [CS50.TV]