1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [Týden 7] 2 00:00:02,440 --> 00:00:04,730 [David J. Malan - Harvard University] 3 00:00:04,730 --> 00:00:07,490 [To je CS50. - CS50.TV] 4 00:00:07,490 --> 00:00:12,280 Dobrá. Vítejte zpět. To je CS50, a to je začátek 7. týdnu. 5 00:00:12,280 --> 00:00:14,690 Pár malých oznámení: 6 00:00:14,690 --> 00:00:18,150 Pset5 V současné době probíhá, nebo brzy bude, 7 00:00:18,150 --> 00:00:21,590 a dovolte mi říci, zcela upřímně, to se mají tendenci být mezi náročnější 8 00:00:21,590 --> 00:00:24,460 předmětu je problémové soubory, tak mi dovolte zmínit se 9 00:00:24,460 --> 00:00:28,190 tak, že tento týden více než kdy jindy nemusíte čekat, až, řekněme, ve středu v noci 10 00:00:28,190 --> 00:00:29,920 nebo ve čtvrtek v noci do toho ponořit dovnitř 11 00:00:29,920 --> 00:00:32,369 To je určitě zajímavá Pset. Myslíme si, že je to legrace. 12 00:00:32,369 --> 00:00:36,110 Pokud jste skutečně si to naprosto správné a pak může napadnout tzv. Big Board, 13 00:00:36,110 --> 00:00:39,830 budete mít možnost důvtipu s některými předmětu zaměstnanců 14 00:00:39,830 --> 00:00:41,620 a některé z vašich spolužáků. 15 00:00:41,620 --> 00:00:44,670 Co Big Board je je jednou máte pravopisu práci, 16 00:00:44,670 --> 00:00:48,860 budete moci jít do cs50.net po spuštění příkazu, 17 00:00:48,860 --> 00:00:52,430 čistě přihlásíte, a pak se množství času a množství paměti RAM a více 18 00:00:52,430 --> 00:00:56,130 které jste použili ve vaší implementaci budou vystaveny zde na hřišti domovské stránce. 19 00:00:56,130 --> 00:00:59,740 Určitě jste si všimli, že celá parta z těchto lidí zde jsou uvedeny jako zaměstnanci 20 00:00:59,740 --> 00:01:04,220 od přes víkend, personál si myslel, že by bylo zábavné se snažit předčit každého jiný. 21 00:01:04,220 --> 00:01:07,390 Takže si uvědomit, že cílem zde není překonat zaměstnance. 22 00:01:07,390 --> 00:01:09,790 I já jsem tu jen na číslo 13. 23 00:01:09,790 --> 00:01:13,790 Čistě přihlásíte, ale je to příležitost vidět, jak málo RAM 24 00:01:13,790 --> 00:01:16,790 a jak málo CPU sekund můžete použít vis-a-vis některé z vašich spolužáků. 25 00:01:16,790 --> 00:01:20,540 >> A musím přiznat, že Kevin Michael Schmid, 26 00:01:20,540 --> 00:01:23,750 v současné době v počtu 1 pozici jako jeden z TFS, 27 00:01:23,750 --> 00:01:28,120 toto je implementace, který nazýváme není možné 28 00:01:28,120 --> 00:01:32,700 vzhledem k tomu, že je použití téměř 0 RAM a téměř 0 sekund pro nakládku. 29 00:01:32,700 --> 00:01:35,670 Takže my se postaráme o režimu offline Kevin. [Smích] 30 00:01:35,670 --> 00:01:40,950 Existují určité dovednosti, které Kevin je uvedení do testu zde. 31 00:01:40,950 --> 00:01:45,280 Jedna z věcí, které jsme si mysleli bychom taky je nyní CS50x je týden v pokroku, 32 00:01:45,280 --> 00:01:49,520 a vy jste stejně část tohoto experimentu jako ti studenti jsou. 33 00:01:49,520 --> 00:01:53,720 Požádali jsme je jako součást jejich pset0, který byl podobně předložit Scratch projekt 34 00:01:53,720 --> 00:01:58,280 z úroků, které jim - hra, interaktivní umělecké dílo, animace, nebo jako - 35 00:01:58,280 --> 00:02:03,700 1 - až 2-minutové video, v případě, že chcete, zdravit světa a kdo vlastně jsou. 36 00:02:03,700 --> 00:02:06,780 Myslel jsem, že bych se s vámi podělit jen pár videí, které byly předloženy tak daleko 37 00:02:06,780 --> 00:02:10,759 protože pro nás, na personálu alespoň, to opravdu bylo vzrušující 38 00:02:10,759 --> 00:02:14,220 a inspirující vidět tyto lidi z celého světa - zemích po celém světě - 39 00:02:14,220 --> 00:02:18,160 ladění, všech věcí, do kurzu počítačové vědy na internetu, 40 00:02:18,160 --> 00:02:20,410 ať už je to proto, že chtějí pokračovat jejich vlastní studia, 41 00:02:20,410 --> 00:02:22,300 chtějí, aby svou kariéru v novém směru, 42 00:02:22,300 --> 00:02:24,390 chtějí doplnit mezery v jejich vlastních znalostí, 43 00:02:24,390 --> 00:02:27,190 takže některé ze stejných důvodů, které jste možná byli tady. 44 00:02:27,190 --> 00:02:31,090 >> Tak jsem vám jednu takovou studenta zde. Dalo by se zvýšit objem jen trochu. 45 00:02:31,090 --> 00:02:35,520 Zde je jeden z našich studentů 1-minutových podání. 46 00:02:35,520 --> 00:02:40,380 Hello, world. Jsem student průmyslového inženýrství zde ve španělské Malaze. 47 00:02:40,380 --> 00:02:45,840 Jsem nadšen tomto on-line kurzu, protože mám rád informatiku, jsem opravdu, 48 00:02:45,840 --> 00:02:48,880 a já jsem opravdu oceňuji, že jsem si prozkoumat to. 49 00:02:48,880 --> 00:02:51,940 A skutečnost, že mohu učit všude stejné z vás dělat 50 00:02:51,940 --> 00:02:57,040 ale místo toho, aby v Harvardu jsem v Malaze, jak úžasné je, že? 51 00:02:57,040 --> 00:03:02,040 No, já jsem Fernando, a to je CS50. Uvidíme. 52 00:03:02,040 --> 00:03:07,100 [Smích] Další klip jsme především rádi, zjistíte, že tento pán je angličtina není tak silný. 53 00:03:07,100 --> 00:03:11,520 Vypadá to, že nechal stroje přeloženy, takže překlady jsou samy trochu nedokonalé, 54 00:03:11,520 --> 00:03:15,790 ale to byl jeden z našich oblíbených dosud stejně. 55 00:03:25,080 --> 00:03:29,980 [♪ ♪] 56 00:03:29,980 --> 00:03:32,370 Hello, world. [Mluví v japonštině] 57 00:03:32,370 --> 00:03:39,830 [Musím pozdravit v japonštině, protože moje angličtina je velmi nespolehlivý.] 58 00:03:39,830 --> 00:03:45,380 [Dal jsem zprávu na vás z města Gifu, Japonsko.] 59 00:03:45,380 --> 00:03:49,820 [I může být student poprvé za 20 let, jak je vidět.] 60 00:03:49,820 --> 00:03:54,640 [Jsem velmi vděčný Harvardovy univerzity, kdo mi dal tuto příležitost a EDX.] 61 00:03:54,640 --> 00:04:01,510 [Golf je kytara a moje nejoblíbenější věc běží.] [Smích] 62 00:04:01,510 --> 00:04:05,750 [♪ ♪] 63 00:04:05,750 --> 00:04:10,790 [Proč myslíš, že jsem se snažil, aby se zúčastnil cs50x.] 64 00:04:10,790 --> 00:04:14,990 [Harvard University, to je moje touha.] 65 00:04:14,990 --> 00:04:19,740 [Zvlášť když jsem vzdálená přítomnost žil v Japonsku.] 66 00:04:19,740 --> 00:04:26,680 [Chtěl jsem se pokusit okamžitě informováni o existenci takového EDX kdy.] 67 00:04:26,680 --> 00:04:32,500 [Nemyslíš, takže nemusíte souvisí s věkem učení I.] 68 00:04:32,500 --> 00:04:38,350 [Cs50 je moje touha. Mé jméno je Kazu, a to je cs50.] 69 00:04:38,350 --> 00:04:43,090 [♪ ♪] [potlesk a jásot] 70 00:04:43,090 --> 00:04:49,220 Dalším favoritem z nás je toto tvrzení tady od někoho. 71 00:04:51,070 --> 00:04:55,380 [♪ ♪] [Malan] Google je, pokud jste obeznámeni s tímto meme. 72 00:04:55,380 --> 00:05:01,480 >> A pak konečně, pár dalších, které dostal přidaných že snad vyhrát rozkošný cenu. 73 00:05:01,480 --> 00:05:06,820 [Studenti] Aww! >> [Malan] Budeme se muset poslouchat. To je krátký, tak poslouchejte pozorně. 74 00:05:08,580 --> 00:05:11,150 [Samice reproduktor] Jak se jmenujete? >> Louie. 75 00:05:11,150 --> 00:05:16,120 [Samice reproduktor] Co je to? >> [Chichotání] CS50. [Smích] 76 00:05:16,120 --> 00:05:19,510 [Malan] On udělal dvě trvá, ačkoli. 77 00:05:19,510 --> 00:05:22,240 Tady to máme, posledním. 78 00:05:23,030 --> 00:05:26,980 Mé jméno je Louie, a to je CS50. 79 00:05:26,980 --> 00:05:30,250 [Smích] To je pak CS50x. 80 00:05:30,250 --> 00:05:33,230 Děkujeme všem těm z vás, zatímco po spolu doma 81 00:05:33,230 --> 00:05:35,620 kteří byli podílí tak daleko. 82 00:05:35,620 --> 00:05:39,510 Dnes, jsme došli k závěru naši diskuzi o datových struktur, 83 00:05:39,510 --> 00:05:41,160 alespoň některé z nejzákladnějších, 84 00:05:41,160 --> 00:05:44,760 a pak budeme pokračovat v rozhovoru o HTML a webového programování. 85 00:05:44,760 --> 00:05:48,520 Opravdu, jsme strávili na minulost někteří sedm týden se podíváme na základy programování - 86 00:05:48,520 --> 00:05:50,450 algoritmy, datové struktury, a podobně - 87 00:05:50,450 --> 00:05:53,050 a C, jak jste si možná zažili tak daleko, 88 00:05:53,050 --> 00:05:57,060 není nutně nejdostupnější jazyků 89 00:05:57,060 --> 00:05:59,090 s nimiž se realizovat některé z těchto myšlenek. 90 00:05:59,090 --> 00:06:01,880 A tak začíná tento týden a příští týden a pak následující, 91 00:06:01,880 --> 00:06:07,110 budeme konečně moci přechodu z C, který je obecně známé jako poměrně nízké úrovně jazyka, 92 00:06:07,110 --> 00:06:11,190 k věcem vyšší úroveň, mezi nimi PHP, JavaScript, a podobně, 93 00:06:11,190 --> 00:06:14,850 které uvidíme čerpat stejné lekce, které jsme se naučili během posledních několika týdnů, 94 00:06:14,850 --> 00:06:19,430 ale zjistíte, že prohlášení věci jako pole a hash tabulky a vyhledávání a třídění 95 00:06:19,430 --> 00:06:23,370 se tak mnohem jednodušší, protože jazyky sám začneme používat 96 00:06:23,370 --> 00:06:25,290 bude silnější. 97 00:06:25,290 --> 00:06:27,410 Ale nejdřív, aplikace stromů. 98 00:06:27,410 --> 00:06:30,240 Je to velmi časté v těchto dnech muset komprimovat informace. 99 00:06:30,240 --> 00:06:34,770 V jakém kontextu by chcete komprimovat nějakou digitálních informací? 100 00:06:37,190 --> 00:06:39,670 >> Jo. >> [Student] Když potřebujete jej poslat přes web. 101 00:06:39,670 --> 00:06:41,450 Jo, když budete chtít něco poslat přes web. 102 00:06:41,450 --> 00:06:44,950 Pokud si chcete stáhnout velký soubor, je to ideální, pokud někdo na druhém konci 103 00:06:44,950 --> 00:06:48,760 stlačila, že soubor pomocí ZIP formátu nebo něco takového 104 00:06:48,760 --> 00:06:53,760 takže posíláte méně bitů, než by jinak mohly být přenášeny. 105 00:06:53,760 --> 00:06:55,500 Tak jak se vám komprimovat informace? 106 00:06:55,500 --> 00:07:00,540 To vše se scvrkává na použití méně bitů, než jsou požadovány ve výchozím nastavení. 107 00:07:00,540 --> 00:07:03,220 Ale to je trochu divná věc, protože si vzpomenu na týdny 0 a 1 108 00:07:03,220 --> 00:07:07,370 když jsme si povídali o ASCII a binární a mluvili jsme o ASCII, zejména 109 00:07:07,370 --> 00:07:10,690 as pomocí 8 bitů pro reprezentaci písmena abecedy 110 00:07:10,690 --> 00:07:16,120 tak, že písmeno představuje 65, malá je číslo 97, 111 00:07:16,120 --> 00:07:21,210 a jakkoli si představují 65 nebo 97, používáte 7 nebo 8 bitů. 112 00:07:21,210 --> 00:07:24,120 Ale úlovek je, že tam jsou některé dopisy v anglické abecedě 113 00:07:24,120 --> 00:07:26,230 že nejsou tak populární jako ostatní. 114 00:07:26,230 --> 00:07:31,600 Z není všechno, že populární, Q není všechno, že populární, ale i E jsou super populární. 115 00:07:31,600 --> 00:07:37,280 A přesto všechny tyto dopisy, ve výchozím nastavení svět používá stejný počet bitů, jen 8. 116 00:07:37,280 --> 00:07:42,690 Takže nebylo by to byl chytřejší, pokud místo pomocí 8 bitů pro každé písmeno, 117 00:07:42,690 --> 00:07:47,440 i ty občas používá jako Q a Z, 118 00:07:47,440 --> 00:07:51,910 Co když jsme použili méně bitů pro A a E a S a nejpopulárnějších písmena 119 00:07:51,910 --> 00:07:55,000 a používá více bitů pro méně populární dopisy, 120 00:07:55,000 --> 00:07:57,770 bytí nápadu pojďme optimalizace pro společné věci, 121 00:07:57,770 --> 00:08:01,160 což je téma v informatice, že se snaží optimalizovat co se bude dít nejvíce 122 00:08:01,160 --> 00:08:05,310 a strávit trochu více času, trochu více prostoru na věci, které, jo, se může stát 123 00:08:05,310 --> 00:08:07,680 ale ne nutně tak často. 124 00:08:07,680 --> 00:08:09,330 Tak pojďme vzít příklad. 125 00:08:09,330 --> 00:08:12,610 >> Předpokládejme, že chceme zakódovat informace poměrně efektivně. 126 00:08:12,610 --> 00:08:15,090 Možná jste vyrostli věděl něco o Morseově abecedě, 127 00:08:15,090 --> 00:08:17,450 a statistiky jste neznali skutečný kód, 128 00:08:17,450 --> 00:08:21,750 ale můžete připomenout, že je to alespoň z této série teček a čárek. 129 00:08:21,750 --> 00:08:26,640 Jedná se o poměrně efektivní kódování, a upozornění, že nejoblíbenější písmeno - například, E - 130 00:08:26,640 --> 00:08:28,980 používá nejkratší pípnutí. 131 00:08:28,980 --> 00:08:31,740 Morseova abeceda je o píp-píp-píp-píp-píp-píp a držení tónů 132 00:08:31,740 --> 00:08:34,799 buď na krátkou dobu nebo delší dobu. 133 00:08:34,799 --> 00:08:40,330 E, jako označováno tečkou, je super krátké pípnutí, jen pípnutí, a které by představovaly E. 134 00:08:40,330 --> 00:08:43,960 Naproti tomu by T je delší pípnutí, jako pípnutí [prodlužuje zvuk], 135 00:08:43,960 --> 00:08:45,710 a které by představovaly T. 136 00:08:45,710 --> 00:08:48,840 Ale to je ještě docela krátký, protože, na rozdíl od, když se podíváte na Z, 137 00:08:48,840 --> 00:08:52,690 vyjádřit Z bys jít píp, píp [déle zvuk], píp, píp [kratší zvuk]. 138 00:08:52,690 --> 00:08:55,360 Takže je to déle, protože je to méně časté. 139 00:08:55,360 --> 00:08:58,150 Ale mám tě je, že Morseova abeceda je poněkud chybný 140 00:08:58,150 --> 00:09:00,610 v tom, že to není okamžitě dekódovatelný. 141 00:09:00,610 --> 00:09:07,350 Předpokládejme například, že jste slyšeli o nějakém konci drátu pípnutí [short], pípnutí [dlouho]. 142 00:09:07,350 --> 00:09:12,480 Co zprávu jsem pouze přijímat? Dot a pomlčka. Co to představuje? 143 00:09:12,480 --> 00:09:15,330 [Student] A. >> [Malan] Možná. 144 00:09:15,330 --> 00:09:18,270 Mohlo by to také být E a T. 145 00:09:18,270 --> 00:09:23,390 Jinými slovy, morseovka, i když to využívá tohoto principu optimalizace rohový případ, 146 00:09:23,390 --> 00:09:26,250 to se nehodí k okamžitému decodability. 147 00:09:26,250 --> 00:09:29,850 To znamená, že člověk, který je sluchově nebo přijímá tyto tečky a čárky 148 00:09:29,850 --> 00:09:34,540 musí nějak zjistit, kde přestávky jsou mezi písmeny, 149 00:09:34,540 --> 00:09:39,660 protože pokud nevíte, kde tyto přestávky jsou, můžete zaměnit za ET a naopak. 150 00:09:39,660 --> 00:09:43,880 >> Takže to, co můžete dělat? V Morseově abecedě byste mohl jen pauza mezi každým z písmen. 151 00:09:43,880 --> 00:09:47,660 Ale zastavil se trochu v rozporu s celou bodu urychlení věci. 152 00:09:47,660 --> 00:09:52,880 Takže co když místo toho jsme přišli s kódem, kde nebylo tak špatné situaci 153 00:09:52,880 --> 00:09:56,570 kde E je prefix, například, v - 154 00:09:56,570 --> 00:10:00,020 jinými slovy, pokud bychom mohli ujistit, že vzory jsou stále krátká pro populární dopisy 155 00:10:00,020 --> 00:10:04,850 dlouho na méně populární dopisy, ale není tu žádný možný zmatek? 156 00:10:04,850 --> 00:10:08,930 Muž jménem Huffman lety vymyslel tento program nazvaný Huffmanovo kódování 157 00:10:08,930 --> 00:10:12,390 skutečně leverages jeden z datových struktur jsme strávili trochu času povídáním o 158 00:10:12,390 --> 00:10:16,560 minulý týden, že stromů, binární stromy konkrétně - 159 00:10:16,560 --> 00:10:19,710 binární strom znamená, že nemá žádné více než 2 děti. 160 00:10:19,710 --> 00:10:22,720 To má možná na levé dítě, možná pravý dítě, a to je vše. 161 00:10:22,720 --> 00:10:26,510 Takže předpokládám, jen kvůli diskuse, že někdo chce poslat zprávu 162 00:10:26,510 --> 00:10:31,270 , která vypadá takto. Je to úplný nesmysl, ale to je složeno z As, Bs, Cs, Ds, a Es. 163 00:10:31,270 --> 00:10:34,890 A pokud jste skutečně počítat všechny As, Bs, Cs, Ds, a Es 164 00:10:34,890 --> 00:10:36,870 a pak se rozdělí na celkovém počtu písmen, 165 00:10:36,870 --> 00:10:42,710 tento malý graf zde říká, že 45% z písmen jsou Es, 20% jsou As, 166 00:10:42,710 --> 00:10:45,010 10% B, a tak dále. 167 00:10:45,010 --> 00:10:47,330 Takže jinými slovy, předpokládáme, že řetězec v uvozovkách, že 168 00:10:47,330 --> 00:10:49,080 je to jen nějaký zprávu, kterou chcete poslat. 169 00:10:49,080 --> 00:10:52,180 Stává se, že je to nesmysl jen tak můžeme použít jako několik písmen, jako je to možné, 170 00:10:52,180 --> 00:10:55,220 ale je to opravdu pravda, že E je stále nejpopulárnější, 171 00:10:55,220 --> 00:11:01,450 a B a C jsou nejméně populární, alespoň z těchto 5 písmen abecedy. 172 00:11:01,450 --> 00:11:04,040 Takže, jak můžeme jít o přichází s kódováním, 173 00:11:04,040 --> 00:11:08,430 binární kódování, vzor 0 a 1 pro každou z těchto písmen 174 00:11:08,430 --> 00:11:14,820 takovým způsobem, že E je krátký vzor a možná B a C jsou mírně delší vzory, 175 00:11:14,820 --> 00:11:19,270 znovu, myšlenka je, že chceme použít méně bitů většinu času 176 00:11:19,270 --> 00:11:21,790 a více bitů pouze jednou za čas. 177 00:11:21,790 --> 00:11:26,070 Podle Huffman kódování, můžete vytvořit les stromů. 178 00:11:26,070 --> 00:11:31,190 Je tu jakási linie příběhu, tady to zahrnuje stromy a také procesu budování je. 179 00:11:31,190 --> 00:11:32,420 Pojďme začít. 180 00:11:32,420 --> 00:11:36,140 >> Navrhuji, že začnete s tímto lesem, abych tak řekl, z 5 stromů, 181 00:11:36,140 --> 00:11:38,260 z nichž každý je pěkně hloupé strom. 182 00:11:38,260 --> 00:11:42,800 Strom je složen z jen jednoho uzlu, jak je zde reprezentována kruhem. 183 00:11:42,800 --> 00:11:45,310 Takže každý z těchto věcí by mohlo být struct C 184 00:11:45,310 --> 00:11:50,200 a uvnitř struct C může být float reprezentovat frekvence počet 185 00:11:50,200 --> 00:11:52,510 a pak možná char reprezentovat dopis. 186 00:11:52,510 --> 00:11:56,470 Takže myslíte, že z těchto uzlů jako jen nějaký starý struct C, ale pro teď, vyšší úroveň. 187 00:11:56,470 --> 00:12:01,230 To je les 5 stromů, každý, kdo mají pouze jeden uzel. 188 00:12:01,230 --> 00:12:06,830 Co Huffman navrhovaná je, že začneme kombinovat ty stromy 189 00:12:06,830 --> 00:12:11,140 které mají nejmenší frekvence se počítá do mírně větších stromů 190 00:12:11,140 --> 00:12:13,490 připojením s novým kořenového uzlu. 191 00:12:13,490 --> 00:12:17,560 Takže mezi písmeny, zjistíte, že pro pohodlí jsem seřazena je zleva doprava, 192 00:12:17,560 --> 00:12:21,420 i když to není nezbytně nutné, a všimněte si, že nejmenší uzly 193 00:12:21,420 --> 00:12:23,930 jsou v současné době 10% a 10%. 194 00:12:23,930 --> 00:12:28,940 Takže Huffman navrhl, aby jsme sloučit tyto 2 nejmenší uzly do nového stromu 195 00:12:28,940 --> 00:12:34,450 zavedením nového nadřazený uzel, a pak dát, že rodiče si levé dítě a pravé dítě 196 00:12:34,450 --> 00:12:37,720 kde B je libovolně vlevo a C je libovolně vpravo. 197 00:12:37,720 --> 00:12:41,590 A pak Huffman dále navrhuje, aby Pojďme nyní si myslím, že na levém dítěte 198 00:12:41,590 --> 00:12:44,790 v jednom z těchto stromů vždy být reprezentován 0 199 00:12:44,790 --> 00:12:47,890 a právo dítě vždy tak, že představuje číslo 1. 200 00:12:47,890 --> 00:12:50,680 >> Nezáleží na tom, jestli jste překlopit je tak dlouho, jak jste konzistentní. 201 00:12:50,680 --> 00:12:54,650 Takže teď máme čtyři stromy v lese. 202 00:12:54,650 --> 00:12:58,050 A já říkat čtyři, protože nyní strom v levé - 203 00:12:58,050 --> 00:13:00,570 a to ani ne tak strom v tom smyslu, že roste takhle, 204 00:13:00,570 --> 00:13:05,170 je to spíš jako rodokmen, kde nyní 0,2 je něco jako rodiče dvou dětí - 205 00:13:05,170 --> 00:13:07,930 Všimněte si, že v tomto rodiče jsme vypracován 0,2. 206 00:13:07,930 --> 00:13:13,370 Přidali jsme frekvenční počty dvou dětí a vzhledem k nový uzel celková částka. 207 00:13:13,370 --> 00:13:15,310 Takže teď jsme prostě tento proces zopakovat. 208 00:13:15,310 --> 00:13:19,490 Najděte dva nejmenší uzly a pak se k nim připojil do nového stromu 209 00:13:19,490 --> 00:13:21,380 a pak opakujte postup další. 210 00:13:21,380 --> 00:13:26,390 Právě teď máme několik kandidátů, 20%, 15%, a dalších 20%. 211 00:13:26,390 --> 00:13:29,780 V tomto případě, musíme přetrhnout. Můžeme to udělat libovolně. 212 00:13:29,780 --> 00:13:31,540 Měli bychom to udělat důsledně. 213 00:13:31,540 --> 00:13:33,760 V tomto případě, budu libovolně jít s jeden na levé straně, 214 00:13:33,760 --> 00:13:39,880 a já jsem teď sloučit 20% a 15%, aby mi dal novou rodiče s názvem 35%, 215 00:13:39,880 --> 00:13:46,310 jehož levý dítě je 0, jejíž právo dítě je 1, a nyní máme jen tři stromy v lese. 216 00:13:46,310 --> 00:13:47,960 Můžete snad vidět, kde to bude. 217 00:13:47,960 --> 00:13:51,150 Pokud bychom opakovat pár vícekrát, budeme mít jen jeden větší strom, 218 00:13:51,150 --> 00:13:53,900 jehož všechny hrany jsou označeny 0s a 1s. 219 00:13:53,900 --> 00:13:55,710 Pojďme udělat to znovu. 220 00:13:55,710 --> 00:14:02,600 35% je tento strom je root. 20% a 45%, takže budeme sloučit 35% a 20%. 221 00:14:02,600 --> 00:14:05,610 Nyní máme tento strom tady. Přidáme ty spolu, máme 55%. 222 00:14:05,610 --> 00:14:07,910 Teď je tu jen dva stromy v lese. 223 00:14:07,910 --> 00:14:11,900 Děláme tento jeden čas finále, a doufejme, že matematicky všechny frekvence sečíst 224 00:14:11,900 --> 00:14:15,570 protože by, protože jsme vypočítána je z get-go přidat až 100%. 225 00:14:15,570 --> 00:14:17,960 A teď máme jeden strom. 226 00:14:17,960 --> 00:14:20,580 Tak to je Huffmanovo kódování strom. 227 00:14:20,580 --> 00:14:24,400 Je to druh chvíli trvalo, než se tam dostat verbálně, ale realita je s pro smyčce 228 00:14:24,400 --> 00:14:27,620 nebo s rekurzivní funkcí, můžete postavit tuto věc pěkně rychle. 229 00:14:27,620 --> 00:14:32,440 Takže teď máme jeden nový uzel, a všechny tyto vnitřních uzlů byly malloc'd, 230 00:14:32,440 --> 00:14:34,690 Lze předpokládat, že na cestě. 231 00:14:34,690 --> 00:14:38,650 Takže teď v horní části tohoto stromu jsme 100%, ale teď všimnete máme cestu 232 00:14:38,650 --> 00:14:43,780 z této nové pra-pra-pra-prarodič na všechny pra-pra-velký-vnuci 233 00:14:43,780 --> 00:14:45,930 úplně na dně, aby všechny listy. 234 00:14:45,930 --> 00:14:52,840 >> Co budeme dělat teď, je navrhnout, aby v zájmu reprezentovat písmeno E, 235 00:14:52,840 --> 00:14:55,670 budeme využívat pouze číslo 1. Proč? 236 00:14:55,670 --> 00:15:01,000 Vzhledem k tomu, když se procházet tento strom z konečné kořene dolů ke křídlu známé jako E, 237 00:15:01,000 --> 00:15:06,050 sledujeme jen jednu hranu, na pravém okraji, a že je označen samozřejmě na vpravo nahoře 1. 238 00:15:06,050 --> 00:15:11,550 Takže implikace zde Huffman bylo, že E je kódování v binárním musí být jen 1. 239 00:15:11,550 --> 00:15:14,490 A to je zatraceně účinný. Nemůžu dostat nějakou menší než. 240 00:15:14,490 --> 00:15:18,350 Naopak, se bude zastoupen, pokud budete postupovat podle logiky, 241 00:15:18,350 --> 00:15:21,610 podle toho, co vzor bitů místo? 01. 242 00:15:21,610 --> 00:15:25,500 Takže dostat se do, začneme u kořene a jdeme doleva a pak jít rovnou, 243 00:15:25,500 --> 00:15:28,580 což znamená, že následoval 0 a pak 1. 244 00:15:28,580 --> 00:15:32,810 Tak jsme zastupuje písmeno se vzorem 0 a 1. 245 00:15:32,810 --> 00:15:36,010 A teď všimnete už máme vlastnost bezprostřední decodability 246 00:15:36,010 --> 00:15:38,090 že jsme neměli v Morseově abecedě. 247 00:15:38,090 --> 00:15:42,840 I přesto, že oba tyto vzory jsou dost krátké - E je 1 bit, je 2 bity - 248 00:15:42,840 --> 00:15:45,080 Všimněte si, že nemohou být zaměněny jedno nebo druhé, 249 00:15:45,080 --> 00:15:54,870 protože když vidíte 1 to musí být E, pokud vidíte 0, pak 1 je to zřejmě to být A. 250 00:15:54,870 --> 00:15:58,410 Podobně, co je D? 001. 251 00:15:58,410 --> 00:16:01,440 Co je to C? 0001. 252 00:16:01,440 --> 00:16:05,320 A co je B? 0000. 253 00:16:05,320 --> 00:16:09,550 A opět, protože všechny dopisy, které jsme se starají o jsou na listí 254 00:16:09,550 --> 00:16:13,890 a žádný z nich jsou trochu prostředníků na cestě od kořene k listu, 255 00:16:13,890 --> 00:16:18,760 tam žádné riziko sjednocovat různé 2 písmena "kódování 256 00:16:18,760 --> 00:16:22,300 protože všichni těchto bitových vzorů jsou deterministické. 257 00:16:22,300 --> 00:16:25,280 0000 bude vždy B. 258 00:16:25,280 --> 00:16:29,480 Tam je žádný uzel někde mezi, které by vás mohly zaměnit jeden dopis pro druhé. 259 00:16:29,480 --> 00:16:31,150 Takže to, co je implikace tady? 260 00:16:31,150 --> 00:16:35,080 >> Nejoblíbenější písmeno - v tomto případě E - dostal nejkratší kódování, 261 00:16:35,080 --> 00:16:37,430 Dostal další nejkratší kódování, 262 00:16:37,430 --> 00:16:41,390 a B a C, které jsme již znali z get-go byly druhu nejméně oblíbený 263 00:16:41,390 --> 00:16:45,390 při 10% frekvenci každého, oni dostali nejdelší kódování. 264 00:16:45,390 --> 00:16:49,410 A tak to, co to znamená je, že teď, pokud chcete odeslat zprávu, která je komprimovaný 265 00:16:49,410 --> 00:16:51,950 přes internet nebo v e-mailu nebo podobně, 266 00:16:51,950 --> 00:16:56,730 spíše než používat standardní ASCII, můžete poslat Huffmanova kódovanou zprávu 267 00:16:56,730 --> 00:17:01,720 přičemž pokud chcete poslat písmeno E, odešlete jen jeden bit. 268 00:17:01,720 --> 00:17:05,680 Pokud chcete poslat, pošlete 2 bity, 01, namísto posílání 8 bitů 269 00:17:05,680 --> 00:17:10,190 následovalo dalších 8 bitů následuje dalších 8 bitů a tak dále. 270 00:17:10,190 --> 00:17:11,940 Ale je tu mám tě tady. 271 00:17:11,940 --> 00:17:17,079 Nestačí jen postavit ten strom a pak začít posílat od Alice k Bobovi 272 00:17:17,079 --> 00:17:20,010 kratší bit vzor, ​​řetězec z ASCII, 273 00:17:20,010 --> 00:17:23,140 protože Alice má také informovat Boba toho, co 274 00:17:23,140 --> 00:17:26,880 pokud Bob je bude moci přečíst její komprimovaný zprávu? 275 00:17:26,880 --> 00:17:30,770 [Neslyšitelné Student odpověď] >> Co je to? 276 00:17:30,770 --> 00:17:32,310 [Neslyšitelné Student odpověď] >> Z toho, co je strom. 277 00:17:32,310 --> 00:17:35,160 Nebo dokonce více specificky, co tyto kódování jsou, 278 00:17:35,160 --> 00:17:39,010 zejména proto, že v tomto příběhu jsme si udělali úsudek hovoru na jednom místě. 279 00:17:39,010 --> 00:17:43,640 Pamatujte si, že jsme museli vybrat libovolně mezi 2 různými 20% uzlů? 280 00:17:43,640 --> 00:17:49,800 Takže to není pravda, že Bob, příjemce, může jen rekonstruovat strom na jeho vlastní 281 00:17:49,800 --> 00:17:53,390 protože možná vytvoří strom někdy tak trochu jinak od Alice. 282 00:17:53,390 --> 00:17:56,670 Navíc, Bob ani neví, co původní zpráva 283 00:17:56,670 --> 00:18:00,770 protože jediné, co je Alice pošle jej, samozřejmě, je na stlačený zprávu. 284 00:18:00,770 --> 00:18:05,900 >> Takže úlovek s kompresí, jako je to, že, ano, může Alice ušetřit spoustu kousků 285 00:18:05,900 --> 00:18:09,900 vysláním 1 pro E a 01 pro, a tak dále, 286 00:18:09,900 --> 00:18:15,180 ale má také informovat Boba, co je mapování mezi písmeny a bity 287 00:18:15,180 --> 00:18:19,620 protože je nelze jednoznačně spoléhat se pouze na ASCII už, jestli jsme nepoužíváte ASCII. 288 00:18:19,620 --> 00:18:22,200 Takže ona může buď poslat mu strom nějak - 289 00:18:22,200 --> 00:18:26,600 napsat to, uložit jako binární data nebo něco takového - 290 00:18:26,600 --> 00:18:30,280 nebo stačí poslat mu trochu tahák, soubor aplikace Excel, která zobrazuje mapování. 291 00:18:30,280 --> 00:18:36,480 Takže účinnost komprese opravdu předpokládá, že zprávy, které posíláte 292 00:18:36,480 --> 00:18:40,230 jsou dost velké, alespoň střední, 293 00:18:40,230 --> 00:18:42,180 protože pokud posíláte super krátkou zprávu, 294 00:18:42,180 --> 00:18:45,390 pokud si jen chcete odeslat zprávu BAD, který se stane být slovo, které může znamenat zde, 295 00:18:45,390 --> 00:18:49,550 B-A-D, budete pravděpodobně používat méně bitů, 296 00:18:49,550 --> 00:18:53,130 ale úlovek je, pokud máte také informovat Boba, co je strom 297 00:18:53,130 --> 00:18:57,530 nebo co ty kódování jsou, budete zřejmě převáží všechny úspory 298 00:18:57,530 --> 00:19:00,110 mít komprimované věci začít. 299 00:19:00,110 --> 00:19:02,210 Takže to může být skutečně pravda, že pokud se pokusíte komprese 300 00:19:02,210 --> 00:19:05,330 dokonce s něčím, jako je zip nebo souboru formátů, které by mohly být obeznámeni s - 301 00:19:05,330 --> 00:19:07,780 pěkný malé soubory, dokonce i prázdné soubory - 302 00:19:07,780 --> 00:19:10,930 Někdy tyto soubory by mohly získat větší a ne menší. 303 00:19:10,930 --> 00:19:14,320 Ale realisticky, že se stane pouze pro malé velikosti souborů, 304 00:19:14,320 --> 00:19:16,920 takže to nebude dělat gigabyte být soubor 2 GB; 305 00:19:16,920 --> 00:19:19,480 jsme opravdu mluvíme bajtů nebo jen pár kB. 306 00:19:19,480 --> 00:19:22,330 >> Některé programy, jako je zip jsou dost chytří na to, aby si uvědomili, že, 307 00:19:22,330 --> 00:19:24,590 "Budeš trávit více bitů komprese to." 308 00:19:24,590 --> 00:19:27,460 "Dovolte mi, abych neobtěžoval kompresi to pro vás vůbec." 309 00:19:27,460 --> 00:19:30,160 Takže to je jen jeden způsob, jak pak kompresi formát textu. 310 00:19:30,160 --> 00:19:32,300 Mohli bychom zavést něco takového v C. 311 00:19:32,300 --> 00:19:35,370 Například, je, jak se může představovat uzel v tomto stromu 312 00:19:35,370 --> 00:19:39,320 kde máme char pro symbol, plovoucí hodnotu pro frekvenci, 313 00:19:39,320 --> 00:19:42,250 a jak jsme viděli s našimi ostatními datovými strukturami, 2 ukazovátka, 314 00:19:42,250 --> 00:19:47,080 1 k levé dítě, 1 vpravo, z nichž každý může být NULL, 315 00:19:47,080 --> 00:19:50,850 ale pokud ne, to se odkazuje na levé dítě a pravé dítě. 316 00:19:50,850 --> 00:19:55,130 Tak tohle je tedy Huffmanovo kódování, a to je jeden způsob, jak můžete jít o komprimaci informace, 317 00:19:55,130 --> 00:19:57,880 a to je jistě jeden z nejvíce snadno implementovat 318 00:19:57,880 --> 00:20:00,830 v rámci, řekněme, minulý týden datových struktur, 319 00:20:00,830 --> 00:20:03,250 ačkoli ještě více sofistikované algoritmy existují 320 00:20:03,250 --> 00:20:08,220 , které mohou udělat ještě sofistikovanější mutace vašich dat. 321 00:20:08,220 --> 00:20:11,640 Jakékoli otázky, pak na stromech, binární stromy, nebo komprese textu? 322 00:20:11,640 --> 00:20:15,590 [Student] Je tam nějaká dvojznačnost, jako když [neslyšitelné] rozdělit do 01, 323 00:20:15,590 --> 00:20:19,160 pak 011 by být nejednoznačné, že jo? 324 00:20:19,160 --> 00:20:22,730 [Neslyšitelné] >> Dobrá otázka. Nejednoznačnost. 325 00:20:22,730 --> 00:20:25,940 Dovolte mi shrnout odkazem na obrázku zde. 326 00:20:25,940 --> 00:20:29,650 Protože znaky, které jsou komprese, reprezentace, 327 00:20:29,650 --> 00:20:32,850 podle definice tohoto algoritmu vždy zůstávají listy, 328 00:20:32,850 --> 00:20:41,870 nikdy omylem používají stejný vzor bitů pro předponu několika písmen. 329 00:20:41,870 --> 00:20:46,740 Takže jinými slovy, máte obavy, že to zní jako, nejasnost vyplývající 330 00:20:46,740 --> 00:20:51,580 přičemž 001 by mohla být začátkem B nebo začátkem C nebo něco takového. 331 00:20:51,580 --> 00:20:56,780 Ale to nemůže být případ, protože si všimněte, že všechny písmena abecedy jsme kódování 332 00:20:56,780 --> 00:20:58,290 jsou na listy. 333 00:20:58,290 --> 00:21:01,910 >> Dvojznačnost může vzniknout, jako je tomu v případě morseovkou, 334 00:21:01,910 --> 00:21:06,770 pokud například C byl někde na cestě od kořene k B. 335 00:21:06,770 --> 00:21:12,290 [Student] Právo. Takže v tomto případě, říkají má 2 listy. >> Say má - Řekni to ještě jednou. 336 00:21:12,290 --> 00:21:18,760 [Student] Řekni má 2 listy, F a G, a pak G - >> Okay. Ale to nemůže. 337 00:21:18,760 --> 00:21:23,230 Sám nemohl mít listy F a G, protože ty dopisy F a G 338 00:21:23,230 --> 00:21:27,560 by samy o sobě nechává někde nalevo B nebo právo E. 339 00:21:27,560 --> 00:21:28,900 Takže definice, musí být listy. 340 00:21:28,900 --> 00:21:32,940 Jinak, máš naprostou pravdu, jsme nevyřešili problém, který Morse code čelí. 341 00:21:32,940 --> 00:21:38,150 Dobrá otázka. Další otázky? Dobrá. 342 00:21:38,150 --> 00:21:42,050 Tento pojem bitů, se ukázalo, že jsme měli moc celou dobu, že jsme skutečně používána 343 00:21:42,050 --> 00:21:44,200 když to přišlo k manipulaci s těmito 0s a 1s. 344 00:21:44,200 --> 00:21:46,600 Zeptali jsme se o tom na jednom z prvních problémových souborů: 345 00:21:46,600 --> 00:21:52,340 to, jak se vám jít o konverzi velká na malá písmena nebo naopak? 346 00:21:52,340 --> 00:21:55,460 Anebo, což je konkrétně, jeden z těch prvních psets zeptal 347 00:21:55,460 --> 00:22:01,090 kolik bitů se vlastně musí vyletět s cílem změnit na malá písmena a nebo naopak? 348 00:22:01,090 --> 00:22:05,580 Zde je rychlá připomínka toho, co 65 a 97 vypadají jako v binárním formátu. 349 00:22:05,580 --> 00:22:08,060 A to iv případě, že tato otázka je druh vybledl v paměti, 350 00:22:08,060 --> 00:22:11,290 je vidět opět zde, že to, kolik bitů musí být převrácené 351 00:22:11,290 --> 00:22:15,810 změnit kapitál na malá písmena? Jen jeden. 352 00:22:15,810 --> 00:22:19,650 >> Liší se pouze v jednom místě, třetí bit zleva. 353 00:22:19,650 --> 00:22:24,240 Vzhledem k tomu, má 010, trochu má 011. 354 00:22:24,240 --> 00:22:26,250 Tak nějak, musíme prostě být schopen otočit ten kousek, 355 00:22:26,250 --> 00:22:29,410 a pak můžeme využít nebo malá písmena. 356 00:22:29,410 --> 00:22:32,720 Udělali jsme to v minulosti skutečně používáte-li podmínky 357 00:22:32,720 --> 00:22:35,930 a kontrolovat, zda je dopis od hlavního A a kapitálu Z, 358 00:22:35,930 --> 00:22:41,480 pak výstupy, jako je - + 26, nebo něco takového. 359 00:22:41,480 --> 00:22:46,130 Pravděpodobně jste udělal aritmetický změnu písmeny abecedy. 360 00:22:46,130 --> 00:22:49,270 Ale co když jsme mohli otočit, že jediný kousek? 361 00:22:49,270 --> 00:22:59,080 Jak jsi mohl jít o přijetí jednoho bajtu je v hodnotě bitů, takže 8 bitů jako 01000001 a 01100001? 362 00:22:59,080 --> 00:23:03,170 Pokud jste měli ty vzory kousků, jak můžeme jít o změnu jen jeden z nich? 363 00:23:03,170 --> 00:23:07,610 Co když jsme se představit ve žluté zde tento jiný vzor bitů? 364 00:23:07,610 --> 00:23:13,420 Pokud udělám celé žluté řetězec 0s kromě jednoho kousku, který chci změnit 365 00:23:13,420 --> 00:23:17,900 a pak jsem zavést nový operátor známý jako operátor bitového - 366 00:23:17,900 --> 00:23:21,210 Bitové operace v tom smyslu, že se působí na jednotlivé bity, 367 00:23:21,210 --> 00:23:25,360 ne na celý byte nebo čtyři bajty všechny najednou. 368 00:23:25,360 --> 00:23:31,170 Tato vertikální pruh tam ve žlutém naznačuje, že to, co, pokud budeme mít zastoupení kapitálu A 369 00:23:31,170 --> 00:23:37,060 a bitový součet je se žlutým sekvence bitů? 370 00:23:37,060 --> 00:23:41,300 Jinými slovy, že zpět do naší diskusi logických výrazů v Scratch a pak v C. 371 00:23:41,300 --> 00:23:47,520 >> Dělat logickou nebo znamená, že je to pravda, buď první věc, kterou musí být pravda 372 00:23:47,520 --> 00:23:50,700 nebo druhá věc musí být pravda, nebo oba mají být pravda, 373 00:23:50,700 --> 00:23:53,270 a pak výsledný výstup je sám o sobě pravdivý. 374 00:23:53,270 --> 00:24:00,230 V tomto případě zde, co dostaneme, vezmeme-li 0 "nebo" ed s 0? Nepravdivé nebo falešné? 375 00:24:00,230 --> 00:24:04,280 Je to stále false, takže malá zůstane podle očekávání. 376 00:24:04,280 --> 00:24:07,540 Co když místo toho děláme 1 nebo 0? 377 00:24:07,540 --> 00:24:12,640 To nyní zůstává 1, ale všimněte si, co to asi stane tady. 378 00:24:12,640 --> 00:24:18,630 Pokud začneme s kapitálem A a budeme i nadále ", nebo" jeho jednotlivé bity jako my tady děláme, 379 00:24:18,630 --> 00:24:25,180 0 nebo žlutý nám dává to, co tady dole? To nám dává 1. 380 00:24:25,180 --> 00:24:35,120 Ve skutečnosti, že jsme nevěděli, co velká verze málo vlastně byl. 381 00:24:35,120 --> 00:24:38,270 Pojďme udělat. Dovolte mi, abych přesunout zpátky sem. 382 00:24:38,270 --> 00:24:42,340 Pojďme to udělat znovu. 0 nebo 0 mi dává 0. 383 00:24:42,340 --> 00:24:45,020 1 nebo 0 mi dává 1. 384 00:24:45,020 --> 00:24:48,020 0 nebo 1 mi dává 1. 385 00:24:48,020 --> 00:24:52,880 0 nebo 0 mi dává 0. Další je 0, další je 0, další je 0. 386 00:24:52,880 --> 00:24:55,660 1 nebo 0 mi dává 1. 387 00:24:55,660 --> 00:24:59,140 A tak, i když jsme nevěděli předem, co malá je, 388 00:24:59,140 --> 00:25:04,770 jednoduše "nebo" čísla s tímto vzorem bitů, které jsme zde prezentovaných ve žluté, 389 00:25:04,770 --> 00:25:09,400 můžete malá písmena na kapitál tím, že proletí, že trochu. 390 00:25:09,400 --> 00:25:11,580 Použili jsme tento výraz týdny: obracející trochu. 391 00:25:11,580 --> 00:25:13,710 Jak se vlastně děláte, že programově? 392 00:25:13,710 --> 00:25:16,390 Můžete použít to, co se obecně nazývá masku, sekvence bitů, 393 00:25:16,390 --> 00:25:19,980 že v tomto případě jen tak se stane, aby vypadal jako toto číslo zde, 394 00:25:19,980 --> 00:25:22,980 a pak ", nebo" to společně pomocí této nové C operátora, 395 00:25:22,980 --> 00:25:29,940 ne | |, můžete použít single | a ty by skutečně stáhni zde odpověď, protože proč? 396 00:25:29,940 --> 00:25:35,120 To je 1s místo, 2s místo, 4S, 8s, 16s, 32s. 397 00:25:35,120 --> 00:25:42,280 Tak to dopadá, že pokud budete mít velké písmeno a bitové operace OR je s celočíselným 32, 398 00:25:42,280 --> 00:25:47,520 protože integer 32, když se podíváte na to, jak bitů, vypadá to, 399 00:25:47,520 --> 00:25:50,860 to znamená, že můžete převrátit trochu, že jste vlastně chcete. 400 00:25:50,860 --> 00:25:52,630 A podobně - a budeme se podívat na kód za chvíli - 401 00:25:52,630 --> 00:25:54,210 Předpokládejme, že chceme jít opačným směrem. 402 00:25:54,210 --> 00:25:58,210 >> Jak se vám jít z malých písmen od A do kapitálu A? Který bit se musí změnit? 403 00:25:58,210 --> 00:25:59,820 Je to ten samý. 404 00:25:59,820 --> 00:26:03,970 Chceme změnit ten třetí kousek od 1 do 0. 405 00:26:03,970 --> 00:26:06,310 A jak bychom mohli jít asi dělá? 406 00:26:06,310 --> 00:26:10,130 Jak jsme vypnout trochu? S tím, co vzor bitů můžeme vypnout trochu? 407 00:26:11,580 --> 00:26:14,070 Co když třídíme invertního masky? 408 00:26:14,070 --> 00:26:17,350 Vzhledem k tomu, než jsme se celý žlutý masky 0s 409 00:26:17,350 --> 00:26:19,930 s výjimkou jednoho bitu jsme chtěli zapnout, 410 00:26:19,930 --> 00:26:25,580 co když to čas, uděláme celou masky 1s kromě bitu, který chceme vypnout 411 00:26:25,580 --> 00:26:28,330 a pak použít co operátor? 412 00:26:28,330 --> 00:26:30,560 Co když my "a" věci? Pojďme se podívat. 413 00:26:30,560 --> 00:26:34,880 Pokud bychom nyní otočit na to, předpokládat, že opět jsem vytvořit masku, která je všechno 1s 414 00:26:34,880 --> 00:26:37,650 s výjimkou jednoho kousku, který chci vypnout 415 00:26:37,650 --> 00:26:43,860 a pak spíše než "nebo" bílé Čísla až nahoru s žlutými čísly tady dole, 416 00:26:43,860 --> 00:26:46,940 Co kdybych místo "a" dohromady? Říká se tomu bitové a. 417 00:26:46,940 --> 00:26:49,450 Logicky, je to totéž, jako logický a. 418 00:26:49,450 --> 00:26:55,160 To mi dává 0 a 1 je 0. Takže false a true je false. 419 00:26:55,160 --> 00:26:58,160 Pravdivé a pravda je pravda. 420 00:26:58,160 --> 00:27:04,020 A tady je magie: True a false je nyní false, takže jsme vypnutý ten kousek. 421 00:27:04,020 --> 00:27:06,560 A teď zbytek příběhu je poněkud jednoduchá. 422 00:27:06,560 --> 00:27:11,970 Vzhledem k tomu, zbytek masky je 1s, nezáleží na tom, co ta čísla jsou v bílé barvě. 423 00:27:11,970 --> 00:27:15,580 Když "a" něco s pravdou, nebudete měnit jeho hodnotu. 424 00:27:15,580 --> 00:27:20,200 Pokud je to pravda, bude to i nadále platí. Pokud to bylo nepravdivé, zůstane false. 425 00:27:20,200 --> 00:27:23,190 >> Ale kouzlo se stane, když budete mít něco, co byla pravda 426 00:27:23,190 --> 00:27:25,430 a potom "a" to se false. 427 00:27:25,430 --> 00:27:30,030 To má za následek vypnutí ten kousek. 428 00:27:30,030 --> 00:27:31,980 Tak trochu záhadný tam. 429 00:27:31,980 --> 00:27:35,390 Pojďme skutečně podívat na nějaký kód, který by mohl ve skutečnosti vypadají ještě více mystický, 430 00:27:35,390 --> 00:27:38,220 ale pojďme se podívat zde na tolower. 431 00:27:38,220 --> 00:27:45,880 Když se podívám na ToLower, jít od hlavního města na malá písmena, 432 00:27:45,880 --> 00:27:47,730 Podívejme se, jak bychom mohli realizovat tento program. 433 00:27:47,730 --> 00:27:51,280 Tady je hlavní, a to nebere žádné argumenty příkazového řádku. 434 00:27:51,280 --> 00:27:55,980 Já jsem se prohlašuje, že znak c na dopisu, který uživatel bude psát dovnitř 435 00:27:55,980 --> 00:28:00,690 Pak jsem použít známé cíl, zatímco smyčka jen ujistit, že uživatel určitě mi dává kapitál 436 00:28:00,690 --> 00:28:05,010 nebo B nebo C. .. Z, takže se mi něco mezi a Z. 437 00:28:05,010 --> 00:28:08,580 A teď, co tady dělám? 438 00:28:08,580 --> 00:28:14,870 Mi "nebo" ing. to s 0x20, ale že je vlastně stejný jako - 439 00:28:14,870 --> 00:28:19,500 a vrátíme se to v okamžiku - 32. 440 00:28:19,500 --> 00:28:24,830 Takže znovu, 32 je tento vzor bitů zde. Proč to víme? 441 00:28:24,830 --> 00:28:26,320 Jen si vzpomeňte na týden 0. 442 00:28:26,320 --> 00:28:31,010 To je 1s místo, 2s místo, 4S, 8s, 16s, 32s místo. 443 00:28:31,010 --> 00:28:33,470 Takže to žluté číslo se stane být 32. 444 00:28:33,470 --> 00:28:40,570 Pak mohu vzít dopis, jako char tady, bitové "nebo" to se doslova počtem 32, 445 00:28:40,570 --> 00:28:45,250 a co se dostanu zpátky? Malá verze, char. 446 00:28:45,250 --> 00:28:48,830 Před chvílí, když jsem to vyjádřil v jiném základním zápisu. 447 00:28:48,830 --> 00:28:51,370 Co to znamenalo? >> [Student] Hexadecimální. 448 00:28:51,370 --> 00:28:53,050 [Malan] To se stává představují hexadecimální. 449 00:28:53,050 --> 00:28:55,170 Nemluvili jsme o tom hexadecimální tak moc, 450 00:28:55,170 --> 00:28:57,330 ale je to vlastně výhodné v případech, jako je tento. 451 00:28:57,330 --> 00:29:01,730 >> I když to vypadá složitější, a to i když to vypadá, jako 20 a ne 32, 452 00:29:01,730 --> 00:29:06,240 ukázalo se, že hexadecimální je vlastně výborný pohodlné notace 453 00:29:06,240 --> 00:29:10,810 protože v šestnáctkové soustavě každé číslice po 0x - a to znamená, nic; 454 00:29:10,810 --> 00:29:13,960 to je jen lidská konvence, které říká, že tady je hexadecimální číslo - 455 00:29:13,960 --> 00:29:18,590 každý z těchto číslic, 2 a potom 0, samy o sobě mohou být reprezentovány 456 00:29:18,590 --> 00:29:20,800 s přesně 4 bity. 457 00:29:20,800 --> 00:29:27,840 Takže pokud to uděláme, dovolte mi, abych otevřít v textovém editoru zde - divné autocomplete - 458 00:29:27,840 --> 00:29:35,940 pokud budeme dělat trochu textový editor tady, číslo 0x20 znamená, tady je 4 bity, tady je další 4 bity. 459 00:29:35,940 --> 00:29:38,050 Pojďme udělat nejpravější 4 bity jako první. 460 00:29:38,050 --> 00:29:44,690 0 když reprezentovaný s 4 bity je to, co? Super snadné. Prostě všechno 0s. 461 00:29:44,690 --> 00:29:46,780 Takže 4 bity jako 0s. 462 00:29:46,780 --> 00:29:53,510 Jak si představují 2? Je to dlouho, co jsme to udělali, ale je to 0100. 463 00:29:53,510 --> 00:29:57,310 Takže je 1s místo, to je místo 2s, a pak nezáleží na tom, co jsou ostatní místa jsou. 464 00:29:57,310 --> 00:30:00,610 Jinými slovy, v šestnáctkové soustavě dalo by se říct 0x20, 465 00:30:00,610 --> 00:30:04,340 ale pokud si pak přemýšlet o tom, co je 2 a jak je reprezentována v binární, 466 00:30:04,340 --> 00:30:07,130 co je 0 a jak je reprezentována v binární, 467 00:30:07,130 --> 00:30:10,440 odpovědi na tyto otázky jsou tohle a tohle, resp. 468 00:30:10,440 --> 00:30:14,380 Takže 0x20 stane reprezentovat tento vzor 8 bitů, 469 00:30:14,380 --> 00:30:16,880 což je přesně to maska, která jsme chtěli. 470 00:30:16,880 --> 00:30:20,140 Tak to je pro tuto chvíli jen intelektuální cvičení, 471 00:30:20,140 --> 00:30:24,520 ale realita je v kódu je to obvykle více obyčejné psaní konstanty, jako je tento 472 00:30:24,520 --> 00:30:28,360 v šestnáctkové soustavě, protože pak programátor může relativně snadno, 473 00:30:28,360 --> 00:30:32,560 i když to vyžaduje nějaký papír a tužku, zjistit, co ten vzor bitů je 474 00:30:32,560 --> 00:30:35,960 protože nemůžete jen vyjádřit 0s a 1s obvykle v kódu. 475 00:30:35,960 --> 00:30:38,540 Nemůžete jít 00010 a tak dále. 476 00:30:38,540 --> 00:30:42,380 >> Můžete si vybrat desítkové nebo hexadecimální nebo osmičkové nebo jiné zápisy. 477 00:30:42,380 --> 00:30:47,540 Většina lidí má tendenci vybírat hexadecimální jednoduše tak, že se každá číslice představuje 4 bity 478 00:30:47,540 --> 00:30:49,320 a můžete udělat rychlý matematiku. 479 00:30:49,320 --> 00:30:54,990 A já budu mávat ruku na toupper, což je téměř stejná, vypadá téměř totožné. 480 00:30:54,990 --> 00:31:01,900 Toupper stane používat ne nebo provozovatele, ale spíše ten chlap a DF. 481 00:31:01,900 --> 00:31:09,300 Co df představují? df? Každý, kdo? >> [Student] 255. 482 00:31:09,300 --> 00:31:12,780 255? Není 255. To by bylo ff. 483 00:31:12,780 --> 00:31:15,210 Necháme tuhle jako malý výkon. 484 00:31:15,210 --> 00:31:23,460 Ale když jdete od 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 a potom, co bude po 9? 485 00:31:23,460 --> 00:31:26,510 Jsme trochu ven desetinných míst, ale v šestnáctkové soustavě, co přijde po 9? 486 00:31:26,510 --> 00:31:29,510 [Student]. >> Tak, b, c, d. 487 00:31:29,510 --> 00:31:33,470 Můžete přijít odtamtud, co vzor bitů d skutečnosti představuje. 488 00:31:33,470 --> 00:31:38,850 A pokud bychom si to spočítejte, uvidíme, že maska ​​můžete nakonec dostat zpět, je totožný s to. 489 00:31:38,850 --> 00:31:45,580 To je f, vše 1s, a to je d. Takže df představuje tu masku. Dobrá. 490 00:31:45,580 --> 00:31:50,980 A konečně, ne aby věci zvuk super, super technický, 491 00:31:50,980 --> 00:31:53,840 ale, že bychom chtěli napsat program, který to dělá. 492 00:31:53,840 --> 00:31:58,960 Nech mě jít dál a dělat binární, což je program, v souboru s názvem binary.c. 493 00:31:58,960 --> 00:32:02,050 A teď mi dovolte běžet binární a dej mi non-záporné celé číslo. 494 00:32:02,050 --> 00:32:03,960 Začněme jednoduše a zadejte 0. 495 00:32:03,960 --> 00:32:09,010 To je nyní program, který vytiskne čísla do jeho binární reprezentace. 496 00:32:09,010 --> 00:32:13,470 Takže když jsem hrát tuto hru znovu a zadejte pouze 1, měl bych dostat 32-bitovou reprezentaci 1. 497 00:32:13,470 --> 00:32:15,490 Pokud se mi to znovu 2, bych měl dostat, že. 498 00:32:15,490 --> 00:32:19,310 Pokud se mi 7, měl bych dostat několik 1s na konci, a tak dále. 499 00:32:19,310 --> 00:32:22,740 Ukázalo se, že jsem se zmínil, protože s bitové operace 500 00:32:22,740 --> 00:32:25,490 můžete skutečně udělat jednu věc stejně. 501 00:32:25,490 --> 00:32:29,130 Můžete si vytvořit tyto masky dynamicky. 502 00:32:29,130 --> 00:32:32,800 Podívejte se na tento jeden poslední příklad zahrnující bitové operace. 503 00:32:32,800 --> 00:32:35,490 Zde je první část kódu, aby uživatel zadal číslo, 504 00:32:35,490 --> 00:32:38,130 a trvá na tom, že bys mi non-záporné celé číslo. 505 00:32:38,130 --> 00:32:39,780 Takže to je trochu old school věci. 506 00:32:39,780 --> 00:32:41,980 Ale tady je něco, co je docela zajímavé. 507 00:32:41,980 --> 00:32:44,910 >> Jak mám jít o tisku číslo v binární? 508 00:32:44,910 --> 00:32:48,970 Poprvé jsem iterovat z čeho k čemu? 509 00:32:48,970 --> 00:32:52,270 Co je velikost int typicky, alespoň v přístroji? >> [Student] 4. 510 00:32:52,270 --> 00:32:57,130 Je to 4. Takže 4 * 8 je 32 - 1 je 31. 511 00:32:57,130 --> 00:33:02,590 Takže když jsem začal počítat od 31, který představuje, jak se ukazuje, 512 00:33:02,590 --> 00:33:07,630 jen koncepčně, 31. bit nebo nejvyšší bit je, což je ten chlap tady, 513 00:33:07,630 --> 00:33:09,650 vzhledem k tomu, to bude bit 0. 514 00:33:09,650 --> 00:33:12,850 Tak tohle je trochu ... 01 bit 31. 515 00:33:12,850 --> 00:33:14,950 Takže to, co je tento kód dělá? 516 00:33:14,950 --> 00:33:20,140 Všimněte si, to pro smyčce, i když to vypadá tajemná, je jen iterace od 31 až do 0. To je všechno. 517 00:33:20,140 --> 00:33:24,530 Takže zajímavá část nyní musí být v těchto 5 řádků zde. 518 00:33:24,530 --> 00:33:28,110 Všimněte si, že v této řadě jsem se prohlašuje, že proměnná s názvem masky 519 00:33:28,110 --> 00:33:30,790 být v souladu s naší příběhem těchto žlutých čísel. 520 00:33:30,790 --> 00:33:32,200 A pak, co je to děláš? 521 00:33:32,200 --> 00:33:35,720 To je další bitový operátor jsme neviděli, s největší pravděpodobností. 522 00:33:35,720 --> 00:33:38,300 Je to posun doleva operátor. 523 00:33:38,300 --> 00:33:40,060 Tento operátor to dělá. 524 00:33:40,060 --> 00:33:44,920 Zde je číslo 1, a pokud to uděláte i vlevo posun, posun doleva, 525 00:33:44,920 --> 00:33:49,260 co si myslíte, že má za následek dělá, že jednotlivé 1? 526 00:33:49,260 --> 00:33:51,290 Doslova posunem nad. 527 00:33:51,290 --> 00:33:57,540 Takže pokud číslo 1 je to, co budete mít na levé straně a začnete inicializaci i do 31, 528 00:33:57,540 --> 00:34:03,490 Co je to, že bude dělat? Bude to trvat toto číslo 1 a posunout ji 31 ​​míst tady. 529 00:34:03,490 --> 00:34:06,210 A protože je zřejmě žádné další číslice za ní, 530 00:34:06,210 --> 00:34:10,350 které budou automaticky nahrazeny 0s. 531 00:34:10,350 --> 00:34:15,120 Takže budete začít s číslem 1, což samozřejmě vypadá takhle - 532 00:34:15,120 --> 00:34:18,659 a dovolte mi, abych nakreslit to tady v centru. 533 00:34:18,659 --> 00:34:22,139 A pak, jak si posunout věci vlevo, ten chlap v podstatě jde touto cestou. 534 00:34:22,139 --> 00:34:24,659 Ale jakmile to uděláte, dostane 0 vyplněna 535 00:34:24,659 --> 00:34:28,360 Pokud posunete ji podruhé, to jde takhle a další 0 dostane vyplněna 536 00:34:28,360 --> 00:34:31,000 >> Můžete posunout ho znovu a pak ještě dostane 0 vyplněna 537 00:34:31,000 --> 00:34:37,900 Takže pokud si tuto věc 1 << i 31 míst, můžete nakonec dostat masku 538 00:34:37,900 --> 00:34:42,550 že je 32 znaků, vlevo z nichž jeden je 1, 539 00:34:42,550 --> 00:34:45,199 všechny ostatní, které jsou 0. 540 00:34:45,199 --> 00:34:50,880 A ukázalo se, jak stranou, přesunem číslo vlevo takhle 541 00:34:50,880 --> 00:34:53,530 také shodou okolností, a někdy pohodlně, 542 00:34:53,530 --> 00:34:57,520 má za následek, dělá co toto číslo? >> [Student] Zdvojení ji. 543 00:34:57,520 --> 00:35:00,980 Zdvojnásobení, protože každý ze sloupců - 1s místo, 2s místo, 4s místo, 544 00:35:00,980 --> 00:35:05,030 8s místo, 16s místo - Jsou v všude zdvojnásobení as you go vlevo. 545 00:35:05,030 --> 00:35:09,500 Nebo spíš, když posunete 1s budete skončit zdvojnásobit hodnotu čísla. 546 00:35:09,500 --> 00:35:12,070 Můžete skončit dělat zajímavé proměny číslic 547 00:35:12,070 --> 00:35:15,640 tím, že přesouvá vše nad tímto způsobem mocninou 2. 548 00:35:15,640 --> 00:35:17,150 Takže jak to funguje? 549 00:35:17,150 --> 00:35:22,580 To pak dává mi masku, která je všechno 0s výjimkou 1 v přesně místo, kde chci to, 550 00:35:22,580 --> 00:35:27,920 a pak tento výraz, který je ukraden z toupper.c, 551 00:35:27,920 --> 00:35:31,770 jednoduše říká se číslo n, že uživatel zadaný v, 552 00:35:31,770 --> 00:35:34,730 "A" je s tou maskou, a to, co se vám dostane? 553 00:35:34,730 --> 00:35:39,200 Budeš se dostat 1, pokud je to 1 v tomto maskované místě, 554 00:35:39,200 --> 00:35:41,570 nebo se chystáte dostat 0, pokud tam není. 555 00:35:41,570 --> 00:35:44,370 A tak všechno tento program efektivně je, že má smyčku, 556 00:35:44,370 --> 00:35:48,340 a vytváří masku s 1 sem, pak se 1 sem, pak 1 nad zde, 557 00:35:48,340 --> 00:35:52,950 a používá tuto bitovou a trik říct, je, že 1 bit v uživatelském vstupu zde? 558 00:35:52,950 --> 00:35:59,220 >> Je tu 1 bit v uživatelském vstupu zde? A pokud ano, doslova tisknout 1, jinak tisku 0. 559 00:35:59,220 --> 00:36:03,780 Děláme to s ints jen proto, že je to důvod, proč to děláme 32 bitů místo 8, 560 00:36:03,780 --> 00:36:06,900 ale to, co jsme zavedli pak je to bitové operace AND, to bitový OR, 561 00:36:06,900 --> 00:36:10,450 a tento posun doleva operátor, které nejsou často strašně užitečné, 562 00:36:10,450 --> 00:36:12,230 ale ukázalo se, že mohou být. 563 00:36:12,230 --> 00:36:16,560 Ve skutečnosti, pokud jste měli reprezentovat něco jako pole Booleans 564 00:36:16,560 --> 00:36:21,260 Jen zastupovat true nebo false, že jste chtěl sledovat, zda 565 00:36:21,260 --> 00:36:24,630 místnost plná 300 studentů je přítomen, 566 00:36:24,630 --> 00:36:29,420 můžete deklarovat pole o velikosti 300 typu bool, takže budete mít 300 bools, 567 00:36:29,420 --> 00:36:33,090 a můžete nastavit každý na hodnotu true, pokud je někdo tady a jinak false. 568 00:36:33,090 --> 00:36:37,550 Proč je to, že reprezentace v tomto datové struktury neefektivní? 569 00:36:39,370 --> 00:36:44,800 Co je špatného na tom, navrhování tohoto datové struktury, pole o 300 bools? 570 00:36:46,190 --> 00:36:49,600 Co je bool, ve skutečnosti, pod kapotou? 571 00:36:49,600 --> 00:36:52,310 To je také něco, co nemusí být obeznámeni. 572 00:36:52,310 --> 00:36:53,720 Ukazuje se, že není bool. 573 00:36:53,720 --> 00:36:56,620 Nezapomeňte jsme trochu vytvořili, že se cs50.h souboru, 574 00:36:56,620 --> 00:36:58,630 který sám o sobě obsahuje standardní Bool. 575 00:36:58,630 --> 00:37:00,930 C je druh němý, i když, pokud jde o bool. 576 00:37:00,930 --> 00:37:04,880 Používá 8 bitů představují každý bool, která je zcela nehospodárné 577 00:37:04,880 --> 00:37:09,040 protože samozřejmě, kolik bitů se musíte reprezentovat bool? Jen 1. 578 00:37:09,040 --> 00:37:13,190 Tak se ukazuje, že pokud máte nyní možnost s operátory bitové 579 00:37:13,190 --> 00:37:17,760 manipulovat jednotlivými bity iv char, dokonce v jednom bajtu, 580 00:37:17,760 --> 00:37:21,380 se ukáže, že by mohla snížit paměť potřebnou k zastupování něco hloupého 581 00:37:21,380 --> 00:37:25,490 jako ten studium stylizovaný datové struktury podle faktorem 8. 582 00:37:25,490 --> 00:37:29,820 Místo toho, aby pomocí osmi bitů pro reprezentaci true nebo false, můžete doslova použít jednu 583 00:37:29,820 --> 00:37:34,500 pomocí jednoho bajtu pro každých osm studentů ve třídě 584 00:37:34,500 --> 00:37:41,990 a přepínání 0-1 jednotlivých bitů pomocí těchto druhů low-level triků. 585 00:37:43,850 --> 00:37:49,460 To opravdu ukončit energie. Jsou nějaké otázky ohledně bitové operace? 586 00:37:49,460 --> 00:37:52,710 >> Jo. >> [Student] Je tu exkluzivní nebo provozovatel? 587 00:37:52,710 --> 00:37:56,440 Ano. Tam je exkluzivní nebo operátor, který vypadá takto, ^, mrkev symbol, 588 00:37:56,440 --> 00:38:02,070 což znamená, že pouze první věc, nebo ta druhá věc, může být 1 pro výstup bude 1. 589 00:38:02,070 --> 00:38:07,750 Je zde také není, ~, který umožní k inverzi 0 na 1 nebo naopak, tak. 590 00:38:07,750 --> 00:38:11,600 A je tu také posunutí vpravo operátor, >>, což je opakem jsme viděli. 591 00:38:11,600 --> 00:38:13,850 Dobrá. Pojďme se věci nyní na vyšší úroveň. 592 00:38:13,850 --> 00:38:16,770 Začali jsme tím, že mluví o textu a pak jej zkomprimovat 593 00:38:16,770 --> 00:38:19,650 a představující textu s menším počtem čísel bitů; 594 00:38:19,650 --> 00:38:22,890 jsme si povídali trochu o tom, jak můžeme nyní začít manipulaci věci na úrovni bitové. 595 00:38:22,890 --> 00:38:26,640 Pojďme se nyní přiblížit zpět 10.000 stop s reprezentací 596 00:38:26,640 --> 00:38:29,250 složitějších věcí, jako grafiku. 597 00:38:29,250 --> 00:38:32,950 Zde máme pod vlajkou Německa, tady máme jednu z Francie. 598 00:38:32,950 --> 00:38:36,350 Tyto by mohly být reprezentovány ve formátech možná víte - Gify, například. 599 00:38:36,350 --> 00:38:40,030 Pokud jste někdy viděli obraz na webu, která končí v gif., 600 00:38:40,030 --> 00:38:43,000 To je výměnný grafický formát. 601 00:38:43,000 --> 00:38:47,530 Tyto dvě vlajky zde jakési propůjčit komprese 602 00:38:47,530 --> 00:38:52,050 pro co možná zjevného důvodu? >> [Neslyšitelné Student odpověď] 603 00:38:52,050 --> 00:38:53,440 Je tu spousta opakování, ne? 604 00:38:53,440 --> 00:38:57,270 Pro odeslání německé vlajky, myslet na to, jak je obraz na obrazovce 605 00:38:57,270 --> 00:38:59,030 zpět ve vašem Scratch dnů. 606 00:38:59,030 --> 00:39:02,380 Můžete připomenout, že jednotlivé pixely nebo tečky, které tvoří obraz. 607 00:39:02,380 --> 00:39:06,650 >> Existuje celá řada černých teček a další celý řádek černých teček. 608 00:39:06,650 --> 00:39:10,110 Je tu parta z řad černých teček, které jsme mohli vidět, pokud jsme opravdu zvětšovat, 609 00:39:10,110 --> 00:39:13,370 moc rád, když jsme se přiblížili na tváři Robyho ve Photoshopu. 610 00:39:13,370 --> 00:39:15,500 Jakmile jsme se dostali hlouběji a hlouběji a hlouběji do obrazu, 611 00:39:15,500 --> 00:39:19,990 jste začali vidět pixelaci, všech čtverců, které složených jeho pohled v tomto případě. 612 00:39:19,990 --> 00:39:24,130 Stejná dohoda zde. Pokud bychom přiblížení docela dost, měli byste vidět jednotlivé body. 613 00:39:24,130 --> 00:39:27,110 No, to je trochu odpadu bitů. 614 00:39:27,110 --> 00:39:32,120 Pokud třetiny vlajky je černý a třetina vlajky je žlutý a tak dále, 615 00:39:32,120 --> 00:39:34,860 proč nemůžeme nějak zkomprimovat tento příznak? 616 00:39:34,860 --> 00:39:39,560 A dokonce i francouzská vlajka může být komprimován, i když vzor je trochu jiný. 617 00:39:39,560 --> 00:39:44,120 Ukázalo se, že GIF formát souboru je bezztrátový formát komprese, 618 00:39:44,120 --> 00:39:48,420 což znamená, že si můžete vzít obrázek jako německou vlajkou tady, 619 00:39:48,420 --> 00:39:53,540 můžete zahodit spoustu svých bitů bez ztráty kvality. 620 00:39:53,540 --> 00:39:55,340 Toto je v kontrastu k něčemu, jako je JPEG, 621 00:39:55,340 --> 00:39:57,050 , s níž většina z nás pravděpodobně známější. 622 00:39:57,050 --> 00:39:59,000 Facebook fotografie a Flickr fotky a podobné 623 00:39:59,000 --> 00:40:02,200 jsou téměř vždy uloženy jako JPEG když jste nahrát oni, 624 00:40:02,200 --> 00:40:08,100 ale JPEG je ztrátová - ztrátová - formát, kdy se vám zahodit bitů 625 00:40:08,100 --> 00:40:10,430 ale také vyhodit kvalitu. 626 00:40:10,430 --> 00:40:13,890 A tak pokud jste kompresi fotografií ve Photoshopu nebo je odešlete na Facebook 627 00:40:13,890 --> 00:40:15,580 nebo si je na opravdu mizerný telefon, 628 00:40:15,580 --> 00:40:19,510 víte, že obraz začíná být velmi skvrnami a pixelated, 629 00:40:19,510 --> 00:40:22,290 a to proto, že je to je stlačen na počítači nebo telefonu 630 00:40:22,290 --> 00:40:24,550 doslova házet informací pryč. 631 00:40:24,550 --> 00:40:28,500 Ale GIF je úžasná v tom, že můžete použít méně bitů, než to by mohlo ve výchozím nastavení 632 00:40:28,500 --> 00:40:30,750 bez ztráty jakékoli informace. 633 00:40:30,750 --> 00:40:32,410 >> A to v podstatě tak činí takto. 634 00:40:32,410 --> 00:40:38,740 Spíše než obchod v souboru jako BMP by RGB triple pro černou, černá, černá, černá, 635 00:40:38,740 --> 00:40:42,570 černá, černá, černá, černá, černá, černá, černá, černá a tak dále, 636 00:40:42,570 --> 00:40:45,640 spíše, formát GIF se říct, "Black," 637 00:40:45,640 --> 00:40:48,330 a pak, "Opakujte tento postup 100 krát," nebo něco takového. 638 00:40:48,330 --> 00:40:52,280 "Black, opakujte tento 100 krát, černé, opakujte tento 100 krát ..." 639 00:40:52,280 --> 00:40:54,530 "Žlutá, opakujte tento 100 krát." 640 00:40:54,530 --> 00:40:57,200 A tak, že si pamatuje, v podstatě, vlevo pixel 641 00:40:57,200 --> 00:41:02,160 a potom kóduje nějak pojem opakování, že pixel znovu a znovu. 642 00:41:02,160 --> 00:41:06,110 Takže GIF pak může stlačit sami bez ztráty jakékoli informace. 643 00:41:06,110 --> 00:41:09,510 Ale pokud jste měl hádat, jestli je to algoritmus, který Gify použití, 644 00:41:09,510 --> 00:41:13,180 které z těchto příznaků, i když vypadají totožné ve velikosti, 645 00:41:13,180 --> 00:41:19,620 bude menší, když uloží na disk jako GIF? >> [Student] Německo. 646 00:41:19,620 --> 00:41:21,660 Německo bude menší? Proč? 647 00:41:21,660 --> 00:41:26,620 [Studentských] Protože si to zopakovat mnohokrát horizontálně 648 00:41:26,620 --> 00:41:29,010 a potom opakujte jindy. Přesně >>. 649 00:41:29,010 --> 00:41:32,020 Vzhledem k tomu, že lidé, kteří vymysleli GIF tak nějak svévolně rozhodl 650 00:41:32,020 --> 00:41:36,040 že opakování budou prosazovány horizontálně a příčně. 651 00:41:36,040 --> 00:41:40,900 Je tu mnohem víc opakování příčně zde v německou vlajkou než francouzskou vlajkou. 652 00:41:40,900 --> 00:41:44,430 Takže pokud jsme skutečně otevřít složku na mém pevném disku, který má tato GIF, 653 00:41:44,430 --> 00:41:51,920 můžete skutečně vidět, že německá vlajka je zde 2 KB a francouzské jeden je 4 KB. 654 00:41:51,920 --> 00:41:54,080 To se stane, že náhodou, že jeden je dvakrát druhý, 655 00:41:54,080 --> 00:41:57,960 ale je to ve skutečnosti pravda, že francouzská vlajka je mnohem větší. 656 00:41:57,960 --> 00:42:01,250 >> I když mluvíme tu o grafice, stejné myšlenky se vztahují na 657 00:42:01,250 --> 00:42:05,150 ne věci, jako je vlajka, ale obrazy, které jsou trochu složitější. 658 00:42:05,150 --> 00:42:08,170 Pokud budete mít obraz jablka, určitě je tu spousta duplikace tam, 659 00:42:08,170 --> 00:42:11,040 takže jsme mohli nějak si uvědomit, že výchozí pozadí je modrá 660 00:42:11,040 --> 00:42:13,230 a nikoli, jak pravá obrázek naznačuje, 661 00:42:13,230 --> 00:42:16,830 mít na paměti, barvu každého jednotlivého pixelu v obrázku. 662 00:42:16,830 --> 00:42:21,060 Takže můžeme hodit bity dál se bez ztráty informací. 663 00:42:21,060 --> 00:42:23,340 Jablko stále vypadá stejně. 664 00:42:23,340 --> 00:42:27,510 V tomto příkladu zde, můžete vidět, co se stane ve filmu. 665 00:42:27,510 --> 00:42:31,970 Ty představují staré filmové škole kotouče který spočívá v horním obrázku tam 666 00:42:31,970 --> 00:42:36,900 máte RV jízdu kolem domu a strom. 667 00:42:36,900 --> 00:42:42,130 A jako van projíždí kolem zleva doprava, co očividně nemění? 668 00:42:42,130 --> 00:42:45,320 Dům se nikam, a strom se nikam. 669 00:42:45,320 --> 00:42:47,700 Jediná věc, která se pohybuje, je dodávka v tomto případě. 670 00:42:47,700 --> 00:42:51,650 Tak jako pozadí Beze změn naznačuje, co můžete udělat ve filmech 671 00:42:51,650 --> 00:42:56,530 Stejně tak se prostě zahodit informace, které se nemění v mezi snímky. 672 00:42:56,530 --> 00:42:58,900 To je obecně známé jako komprese interframe 673 00:42:58,900 --> 00:43:02,120 přičemž v případě, že rám vypadá téměř totožný s tímto jeden, 674 00:43:02,120 --> 00:43:05,390 Pojďme neobtěžoval ukládání na disk některý z shodných informací 675 00:43:05,390 --> 00:43:09,250 na těchto přechodných snímků, pojďme používat pouze klíčové snímky jednou za čas 676 00:43:09,250 --> 00:43:13,420 že skutečně tyto informace uchovávat redundantně, stejně jako trochu rozumu kontrolu. 677 00:43:13,420 --> 00:43:18,620 >> Naproti tomu jiný přístup k kompresi videa je v tomto druhém a nižší například zde, 678 00:43:18,620 --> 00:43:23,970 kde spíše než obchod 30 snímků, proč si prostě uložit 15 snímků za sekundu místo? 679 00:43:23,970 --> 00:43:27,070 Spíše než film druhu proudění krásně, dokonale, 680 00:43:27,070 --> 00:43:30,060 by to mohlo vypadat, že to koktání trochu, trochu stará škola, 681 00:43:30,060 --> 00:43:37,190 ale výsledný efekt bude používat mnohem méně bitů, než by jinak byly zapotřebí. 682 00:43:37,190 --> 00:43:39,240 Tak kde to potom nás opustil? 683 00:43:39,240 --> 00:43:41,700 To byl trochu stranou, kde jinde můžete jít s kompresí. 684 00:43:41,700 --> 00:43:45,140 Pro více o tom, vzít třídu jako CS175 zde. 685 00:43:45,140 --> 00:43:46,990 Zde je další příklad ve videu. 686 00:43:46,990 --> 00:43:49,190 Pokud Včela je jediná věc, stěhování, 687 00:43:49,190 --> 00:43:51,790 můžete opravdu vyhodit informace v těchto středních rámů 688 00:43:51,790 --> 00:43:55,260 protože květiny a nebe a listy se nemění. 689 00:43:55,260 --> 00:43:57,960 Ale pojďme se teď zvážit jednu věc. 690 00:43:57,960 --> 00:44:03,890 V dalších 5 minut necháme C za sebou navždy v přednášce? Ano. Ne na psets, ačkoli. 691 00:44:03,890 --> 00:44:10,210 Poslední příběh o C a pak se dostaneme k velmi sexy věci 692 00:44:10,210 --> 00:44:13,870 zahrnující HTML a Web a woo-hoo. Dobrá. 693 00:44:13,870 --> 00:44:16,050 Jdeme na to. To je motivace. 694 00:44:16,050 --> 00:44:20,020 Ukázalo se, že celou tu dobu, kdy jsme byli psaní programů jsme běží řinčet. 695 00:44:20,020 --> 00:44:23,890 A zvonění, jsme řekli, protože první týden skoro, má zdrojový kód 696 00:44:23,890 --> 00:44:25,740 a převádí ji do objektového kódu. 697 00:44:25,740 --> 00:44:28,540 To trvá C a převádí ji do 0s a 1s. 698 00:44:28,540 --> 00:44:32,150 Jsem trochu lhal vám na pár týdnů, protože to není tak jednoduché, jak to zní. 699 00:44:32,150 --> 00:44:36,750 >> Je tu mnohem více děje pod pokličku při spuštění programu, jako je Clang. 700 00:44:36,750 --> 00:44:39,560 Ve skutečnosti, může proces sestavování programu opravdu shrnout, 701 00:44:39,560 --> 00:44:42,210 jak si můžete stáhnout z videa Robertův na kompilátory, 702 00:44:42,210 --> 00:44:47,580 do těchto 4 kroků: pre-zpracování, sestavování sám, montáž a propojení. 703 00:44:47,580 --> 00:44:51,950 Ale my ve třídě a většina lidí na světě obvykle shrnout všechny tyto kroky 704 00:44:51,950 --> 00:44:54,410 jak jen "kompilace." 705 00:44:54,410 --> 00:44:58,070 Ale když začneme se zdrojovým kódem, jako je tento, připomínají to je snad nejjednodušší program v jazyce C 706 00:44:58,070 --> 00:45:03,530 psali jsme tak daleko, připomněl, že při kompilaci to skončí vypadá takhle. 707 00:45:03,530 --> 00:45:07,310 Ale je to vlastně mezistupeň, a tyto kroky jsou následující. 708 00:45:07,310 --> 00:45:10,750 První z nich je to, co na samém vrcholu tohoto a většiny našich programů, 709 00:45:10,750 --> 00:45:13,550 # Include 710 00:45:13,550 --> 00:45:17,210 Co # include se pro nás? 711 00:45:17,210 --> 00:45:24,150 To do značné míry kopíruje a pasty na obsah stdio.h do mého souboru, takže proč? 712 00:45:24,150 --> 00:45:27,220 Proč se mám starat o obsahu stdio.h? Co je tam zájmu? 713 00:45:27,220 --> 00:45:32,310 Printf je prohlášení, jeho prototyp, takže kompilátor pak ví, co mám na mysli 714 00:45:32,310 --> 00:45:34,900 Když jsem zmínil tuto funkci printf. 715 00:45:34,900 --> 00:45:39,390 Takže krok 1 v sestavování je pre-zpracování, přičemž program, jako Clang 716 00:45:39,390 --> 00:45:43,450 nebo některé pomocný program, který je dodáván s zvonění čte kód top dolů, 717 00:45:43,450 --> 00:45:47,740 zleva doprava, a kdykoliv to vidí symbol # následuje klíčové slovo, jako patří, 718 00:45:47,740 --> 00:45:53,980 provádí tuto operaci, kopírování a vkládání v tomto případě stdio.h do souboru. 719 00:45:53,980 --> 00:45:55,510 To je krok 1. 720 00:45:55,510 --> 00:45:59,620 Pak budete mít mnohem větší C soubor, protože obrovské kopie, vložte práce, která se právě stalo. 721 00:45:59,620 --> 00:46:01,710 >> Krok 2 nyní je kompilace. 722 00:46:01,710 --> 00:46:04,880 Ale ukázalo se, kompilaci toho zdrojový kód, který vypadá takto 723 00:46:04,880 --> 00:46:08,160 a stáčí se do něčeho, co vypadá jako to, 724 00:46:08,160 --> 00:46:12,560 které pro ty, kteří znají, se nazývá? >> [Student] shromáždění. >> Assembler. 725 00:46:12,560 --> 00:46:16,700 To je vlastně něco, pokud budete mít CS61 budete potápět do podrobněji. 726 00:46:16,700 --> 00:46:22,380 To je asi tak blízko, jak se můžete dostat do psaní 0s a 1s sami 727 00:46:22,380 --> 00:46:25,850 ale psaní věci takovým způsobem, že stále ještě alespoň trochu smysl. 728 00:46:25,850 --> 00:46:30,760 Jedná se o strojové instrukce, a když se posouvat dolů k hlavní funkci zde, 729 00:46:30,760 --> 00:46:35,470 Všimněte si, že tam je to tlak návod, přesunout výuku, odčítání instrukce, 730 00:46:35,470 --> 00:46:38,550 volání instrukce, a tak dále. 731 00:46:38,550 --> 00:46:42,930 Když slyšíte, že váš počítač má Intel Inside, 732 00:46:42,930 --> 00:46:46,180 máte procesor Intel v počítači Mac nebo PC, co to znamená? 733 00:46:46,180 --> 00:46:51,200 CPU přijde postavený společností, jako je Intel pochopení určitých pokynů. 734 00:46:51,200 --> 00:46:55,770 Nemají ponětí, co funguje jako odkládací prostor jsou nebo hlavní jsou samy o sobě, 735 00:46:55,770 --> 00:47:00,060 ale oni to vědí, co velmi nízké úrovni návod jako sčítání, odčítání, tlačit, 736 00:47:00,060 --> 00:47:02,430 pohybovat, zavolejte, a tak dále, jsou. 737 00:47:02,430 --> 00:47:06,170 Takže při kompilaci C kód do assembleru, 738 00:47:06,170 --> 00:47:11,820 Vaše velmi uživatelsky příjemný pohledný kód je převeden do něčeho, co vypadá jako to, 739 00:47:11,820 --> 00:47:21,670 že doslova pohybuje bajtů nebo 4 bajty kolem těchto malých jednotek do a ze CPU. 740 00:47:21,670 --> 00:47:26,820 Ale nakonec, když zvonění je připraven převzít tuto reprezentaci vašeho programu 741 00:47:26,820 --> 00:47:30,940 do 0 a 1, pak krok nazývá montáž stane, 742 00:47:30,940 --> 00:47:33,850 a to opět všechno se děje v mrknutí oka při spuštění řinčet. 743 00:47:33,850 --> 00:47:39,300 Začneme tady, výstup soubor, jako je tento, a pak ji převede na tyto 0s a 1s. 744 00:47:39,300 --> 00:47:42,000 A chcete-li se vrátit na nějakém místě a skutečně vidět v akci, 745 00:47:42,000 --> 00:47:48,220 když jdu do hello1.c--to je jedna z prvních programů, podívali jsme se na - 746 00:47:48,220 --> 00:47:53,710 normálně bychom sestavit to s Clang hello1.c a to by nám a.out. 747 00:47:53,710 --> 00:47:59,890 Pokud naopak místo toho dát mu-S vlajkou, co dostanete, je hello1.s 748 00:47:59,890 --> 00:48:02,750 a budete skutečně vidět jazyk symbolických instrukcí. 749 00:48:02,750 --> 00:48:05,750 >> Dělám to pro velmi krátkém programu, ale pokud jdete zpět Scramble 750 00:48:05,750 --> 00:48:08,740 nebo obnovit nebo jakýkoliv program, co jste napsali a jen ze zvědavosti 751 00:48:08,740 --> 00:48:13,240 Chcete vidět, jak to vlastně vypadá, co je skutečně přivádí do CPU, 752 00:48:13,240 --> 00:48:15,700 můžete používat-S vlajkou s Clang. 753 00:48:15,700 --> 00:48:17,770 Ale pak konečně, je tu ještě jeden mám tě. 754 00:48:17,770 --> 00:48:21,810 Zde jsou 0s a 1s, že reprezentovat svou realizaci Hello, world. 755 00:48:21,810 --> 00:48:25,530 Ale jsem někoho jiného, ​​funkci v mém programu. 756 00:48:25,530 --> 00:48:28,710 Takže i když byl proces beru hello.c, 757 00:48:28,710 --> 00:48:34,280 se dostane zkompilován assembleru, a pak to dostane spojitelné do 0s a 1s, 758 00:48:34,280 --> 00:48:37,460 pouze 0s a 1s, které jsou na výstupu v tomto okamžiku 759 00:48:37,460 --> 00:48:40,270 jsou ty, které vyplývají z mého kódu. 760 00:48:40,270 --> 00:48:44,400 Ale ten, kdo psal printf, že sestavují svůj kód před 20 lety 761 00:48:44,400 --> 00:48:47,000 a je to nyní instalovány někde na zařízení, 762 00:48:47,000 --> 00:48:51,610 tak jsme si nějak sloučit jeho nebo její 0s a 1s s mým 0s a 1s, 763 00:48:51,610 --> 00:48:56,160 a to nás přivádí k 4. a poslední krok při sestavování, známý jako propojení. 764 00:48:56,160 --> 00:48:58,680 Takže na levé straně máme přesně stejný obraz jako předtím: 765 00:48:58,680 --> 00:49:02,580 hello.c se kód assembleru se stává 0s a 1s. 766 00:49:02,580 --> 00:49:05,960 Ale vzpomínám, že jsem použil standardní I / O knihovnu v mém kódu, 767 00:49:05,960 --> 00:49:10,350 a to znamená, že někde v počítači existuje soubor s názvem stdio.c 768 00:49:10,350 --> 00:49:13,980 nebo alespoň přeložená verze této smlouvy, protože někdo před několika lety 769 00:49:13,980 --> 00:49:18,530 sestavují stdio.c do assembleru a pak celá parta 0s a 1s. 770 00:49:18,530 --> 00:49:21,130 To je to, co je známo jako statické nebo dynamické knihovně. 771 00:49:21,130 --> 00:49:23,350 Je to nějaký soubor sedí někde v přístroji. 772 00:49:23,350 --> 00:49:28,710 >> Ale konečně, musím vzít svou 0s a 1s a ta osoba je 0s a 1s 773 00:49:28,710 --> 00:49:32,760 a nějak je spojit, doslova kombinovat ty 0s a 1s 774 00:49:32,760 --> 00:49:37,900 do jednoho souboru s názvem a.out nebo hello1 nebo co jsem volal můj program 775 00:49:37,900 --> 00:49:43,320 tak, že konečný výsledek má všechny 0 a 1, která by měla skládají svůj program. 776 00:49:43,320 --> 00:49:45,660 Takže celou tu dobu tento semestr, kdy jste používali řinčet 777 00:49:45,660 --> 00:49:48,750 a ještě nedávno spuštěných aby ke spuštění řinčet, 778 00:49:48,750 --> 00:49:53,580 všechny tyto kroky byly děje druh jednorázově, ale velmi uvážlivě. 779 00:49:53,580 --> 00:49:57,830 A tak, pokud budete pokračovat na v oblasti počítačové vědy, a to CS61, 780 00:49:57,830 --> 00:50:00,850 je to vrstva, která budete pokračovat odtrhněte vystoupit 781 00:50:00,850 --> 00:50:06,980 mluví o účinnosti, bezpečnosti důsledky, a jako z těchto nižších úrovní detailů. 782 00:50:06,980 --> 00:50:09,220 Ale s tím, že jsme na odchodu C za sebou. 783 00:50:09,220 --> 00:50:11,420 Pojďme dál a vzít naše 5-minut přestávku teď, 784 00:50:11,420 --> 00:50:14,190 a když se vrátíme zpět: Internet. 785 00:50:17,280 --> 00:50:19,170 Dobrá. Jsme zpět. 786 00:50:19,170 --> 00:50:23,590 Nyní začneme náš pohled nejen na HTML, protože, jak uvidíte, 787 00:50:23,590 --> 00:50:26,050 HTML sám o sobě je vlastně docela jednoduchá 788 00:50:26,050 --> 00:50:29,270 ale opravdu na webové programování obecně, síťové obecněji, 789 00:50:29,270 --> 00:50:31,770 a jak všechny tyto technologie se spojily 790 00:50:31,770 --> 00:50:35,400 které nám umožní vytvořit mnohem sofistikovanější programy na vrcholu internetu 791 00:50:35,400 --> 00:50:38,690 než doposud jsme byli schopni v těchto černé a bílé oken. 792 00:50:38,690 --> 00:50:42,140 Opravdu, v tomto bodě v semestru, i když jsme se vydávají relativně méně času 793 00:50:42,140 --> 00:50:46,200 na PHP, HTML, CSS, JavaScript, SQL a další, 794 00:50:46,200 --> 00:50:48,480 většina studentů si nakonec dělá konečné projekty, které jsou on-line 795 00:50:48,480 --> 00:50:51,230 protože jak uvidíte, pozadí nyní máte v C 796 00:50:51,230 --> 00:50:54,450 je velmi na tyto vyšší úrovně jazyků. 797 00:50:54,450 --> 00:50:56,800 >> A jak jste začít přemýšlet o svém konečném projektu, 798 00:50:56,800 --> 00:50:59,940 která, podobně jako problému Set 0, kde byli povzbuzeni si 799 00:50:59,940 --> 00:51:02,160 dělat většinu něco zajímavého, aby vás v Scratch, 800 00:51:02,160 --> 00:51:05,790 konečný projekt je vaše příležitost, aby své nově nabyté znalosti a důvtipný s C 801 00:51:05,790 --> 00:51:09,850 nebo PHP nebo Javascript nebo jako z pro rotaci 802 00:51:09,850 --> 00:51:12,330 a vytvořit si svůj vlastní kus softwaru pro svět vidět. 803 00:51:12,330 --> 00:51:17,770 A na osivo, jste s nápady, vím, že se můžete vydat zde, projects.cs50.net. 804 00:51:17,770 --> 00:51:21,800 Každý rok jsme vyžádat nápady z fakulty a zaměstnance a studentské skupiny na akademické půdě 805 00:51:21,800 --> 00:51:27,330 Jen, aby předložily své nápady na zajímavé věci, které by mohly být řešeny pomocí počítače, 806 00:51:27,330 --> 00:51:29,860 používání stránek, pomocí softwaru. 807 00:51:29,860 --> 00:51:32,360 Takže pokud jste snaží přijít s nápadem na vlastní, 808 00:51:32,360 --> 00:51:35,790 by všechny prostředky procházet myšlenkami tam od letošního roku a poslední. 809 00:51:35,790 --> 00:51:39,990 To je naprosto v pořádku, aby řešení projektu, která byla vyřešena před. 810 00:51:39,990 --> 00:51:44,540 Viděli jsme mnoho aplikací k vidění stavu prádla na akademické půdě, 811 00:51:44,540 --> 00:51:47,000 mnoho aplikací pro navigaci v jídelně nabídky, 812 00:51:47,000 --> 00:51:49,540 mnoho aplikací pro navigaci v kurzu katalog a podobně. 813 00:51:49,540 --> 00:51:53,680 A skutečně, v budoucnu přednášku a v budoucích seminářů, 814 00:51:53,680 --> 00:51:57,750 Představíme vám nějaké veřejně dostupné API, a to jak komerčně dostupné 815 00:51:57,750 --> 00:52:02,520 stejně jako zde k dispozici od CS50 na akademické půdě, takže máte přístup k datům 816 00:52:02,520 --> 00:52:04,910 a pak může dělat zajímavé věci s ním. 817 00:52:04,910 --> 00:52:09,380 Takže více o závěrečných prací v několika dnech, kdy jsme se uvolnit specifikaci, 818 00:52:09,380 --> 00:52:12,990 ale teď, víte, že můžete pracovat sólo, nebo s jedním nebo dvěma přáteli 819 00:52:12,990 --> 00:52:16,010 na téměř jakýkoli projekt, které vás zajímají. 820 00:52:16,010 --> 00:52:18,080 Internet. 821 00:52:18,080 --> 00:52:22,300 Budete pokračovat a vytáhnout notebook, můžete jít do facebook.com poprvé, 822 00:52:22,300 --> 00:52:27,020 to, že v poslední době přihlášen, a stiskněte klávesu Enter. Co přesně se stalo? 823 00:52:27,020 --> 00:52:30,150 >> Pokud stisknete klávesu Enter na počítači, celá parta kroků 824 00:52:30,150 --> 00:52:32,600 kdo druh magicky děje. 825 00:52:32,600 --> 00:52:35,960 Takže jste tady vlevo, webového serveru, jako je Facebook, je zde vpravo, 826 00:52:35,960 --> 00:52:42,500 a nějak jste pomocí tohoto jazyka s názvem HTTP, Hypertext Transfer Protocol. 827 00:52:42,500 --> 00:52:46,770 HTTP není programovací jazyk. Je to více o protokolu. 828 00:52:46,770 --> 00:52:52,310 Je to soubor konvencí, které webové prohlížeče a webové servery používají při vzájemném spojení. 829 00:52:52,310 --> 00:52:54,360 A co to znamená, je následující. 830 00:52:54,360 --> 00:52:56,790 Stejně jako v reálném světě, máme tyto konvence 831 00:52:56,790 --> 00:53:00,140 kde když potkáte nějakou člověka poprvé, pokud vám nevadí, že humoring mě tady, 832 00:53:00,140 --> 00:53:03,980 I může přijít k vám, říct: "Ahoj, mé jméno je David." >> Ahoj, David. Mé jméno je Sammy. 833 00:53:03,980 --> 00:53:05,770 "Ahoj, David. Jmenuji se Sammy." 834 00:53:05,770 --> 00:53:08,310 Takže teď jsme právě zapojeni do tohoto druhu hloupé lidské protokolu 835 00:53:08,310 --> 00:53:12,200 , kde jsem inicioval protokol, Sammy reagoval, 836 00:53:12,200 --> 00:53:15,060 jsme potřásl rukou, a transakce je kompletní. 837 00:53:15,060 --> 00:53:18,260 HTTP je velmi podobný v duchu. 838 00:53:18,260 --> 00:53:23,350 Když vaše požadavky webového prohlížeče www.facebook.com, 839 00:53:23,350 --> 00:53:27,020 co váš prohlížeč je skutečně dělá rozšiřuje svou ruku, abych tak řekl, 840 00:53:27,020 --> 00:53:29,960 na serveru a je to zasláním zprávy. 841 00:53:29,960 --> 00:53:34,220 A ta zpráva je obvykle něco jako dostat - co chceš dostat? - 842 00:53:34,220 --> 00:53:38,740 abych domovská stránka, která je obvykle označován jedním lomítkem na konci adresy URL. 843 00:53:38,740 --> 00:53:43,790 A abyste věděli, jakým jazykem mluvím, jsem prohlížeč jsem ti to říct 844 00:53:43,790 --> 00:53:46,930 že mluvím HTTP verze 1.1, 845 00:53:46,930 --> 00:53:51,980 A také pro správnou míru, já ti to říct, že hostitel, že chci na domovskou stránku 846 00:53:51,980 --> 00:53:54,120 je facebook.com. 847 00:53:54,120 --> 00:53:57,730 Typicky, webový prohlížeč, unbeknownst pro vás, člověka, 848 00:53:57,730 --> 00:54:03,350 zasílá tuto zprávu přes Internet, kdy stačí napsat www.facebook.com, 849 00:54:03,350 --> 00:54:05,370 >> Zadejte, do svého prohlížeče. 850 00:54:05,370 --> 00:54:07,300 A co se Facebook reagovat? 851 00:54:07,300 --> 00:54:12,540 Reaguje s některými podobně vypadajících kryptických podrobností, ale také mnoho dalších. 852 00:54:12,540 --> 00:54:14,310 Nechte mě jít napřed na domovskou stránku Facebooku je zde. 853 00:54:14,310 --> 00:54:17,480 Toto je obrazovka, že většina z nás asi nikdy vidět, pokud si pobyt přihlášen celou dobu, 854 00:54:17,480 --> 00:54:19,830 ale je to opravdu jejich domovská stránka. 855 00:54:19,830 --> 00:54:24,150 Pokud to uděláme v Chrome, zjistíte, že můžete vytáhnout tyto malé kontextové menu. 856 00:54:24,150 --> 00:54:26,980 Pomocí Chrome, ať už na Mac OS, Windows, Linux, nebo jako, 857 00:54:26,980 --> 00:54:31,840 Pokud ovládáte tlačítkem nebo klikněte levým tlačítkem, můžete obvykle vytáhnout menu, které vypadá jako to, 858 00:54:31,840 --> 00:54:35,870 kde několik možností čekají, z nichž jedna je View Page Source. 859 00:54:35,870 --> 00:54:39,920 Můžete se také obvykle dostávají na tyto věci tím, že půjdete do nabídky Zobrazit a šťourat. 860 00:54:39,920 --> 00:54:42,750 Například, tady pod View, Developer je totéž. 861 00:54:42,750 --> 00:54:45,780 Chystám se jít dopředu a podívat se na Source View Page. 862 00:54:45,780 --> 00:54:50,800 Co uvidíte, je HTML, které Mark napsal reprezentovat facebook.com. 863 00:54:50,800 --> 00:54:55,910 Je to naprostý zmatek tady, ale uvidíme, že to dělá trochu větší smysl, než dlouhé. 864 00:54:55,910 --> 00:54:59,840 Ale tam jsou některé vzory zde. Dovolte mi, abych přejděte dolů nacpat takhle. 865 00:54:59,840 --> 00:55:05,730 To je těžké pro člověka číst, ale všimněte si, že tam je tento vzor Lomené závorky 866 00:55:05,730 --> 00:55:10,360 s klíčovými slovy jako možnost, klíčová slova, jako je hodnota, některé řetězce v uvozovkách. 867 00:55:10,360 --> 00:55:15,660 To je místo, kde, když jste se zaregistrovali pro úplně první čas, stanovené, jaké jsou vaše rok narození je. 868 00:55:15,660 --> 00:55:19,020 To drop-down menu vrozených let je nějak zakódován zde 869 00:55:19,020 --> 00:55:23,870 v tomto jazyce s názvem HTML, HyperText Markup Language. 870 00:55:23,870 --> 00:55:27,730 Jinými slovy, když se prohlížeč požaduje webovou stránku, 871 00:55:27,730 --> 00:55:30,610 mluví této úmluvy s názvem HTTP. 872 00:55:30,610 --> 00:55:35,170 Ale co se facebook.com odpovídají tomuto požadavku se? 873 00:55:35,170 --> 00:55:38,260 >> Reaguje s některými z těchto kryptických zpráv, jak uvidíme za chvíli. 874 00:55:38,260 --> 00:55:43,760 Ale většina z jeho odpovědi je ve formě HTML, HyperText Markup Language. 875 00:55:43,760 --> 00:55:47,170 To je skutečný jazyk, ve kterém je zapsán webové stránky. 876 00:55:47,170 --> 00:55:52,030 A co webový prohlížeč opravdu pak je, po obdržení něčeho, co vypadá jako to, 877 00:55:52,030 --> 00:55:57,120 čte se shora dolů, zleva doprava, a kdykoliv to vidí jeden z těchto Lomené závorky 878 00:55:57,120 --> 00:56:03,370 následuje klíčové slovo, jako je možnost, zobrazí se tento značkovací jazyk v odpovídajícím způsobem. 879 00:56:03,370 --> 00:56:06,820 V tomto případě, by se zobrazit drop-down menu let. 880 00:56:06,820 --> 00:56:09,240 Ale znovu, to je kompletní nepořádek na pohled. 881 00:56:09,240 --> 00:56:16,630 To není proto, že Facebook vývojáři najevo 0 pro 5 pro styl, například. 882 00:56:16,630 --> 00:56:20,190 To je proto, že většina kódu, který se napsat, ve skutečnosti, písemné krásně, 883 00:56:20,190 --> 00:56:22,450 velmi dobře okomentován, pěkně členité, a podobně, 884 00:56:22,450 --> 00:56:26,080 ale samozřejmě strojů, počítačů, prohlížeče opravdu kašlu 885 00:56:26,080 --> 00:56:27,890 zda je váš kód je dobře stylu. 886 00:56:27,890 --> 00:56:33,100 A ve skutečnosti, je to naprosto nehospodárné zasáhnout klávesy TAB všechny ty časy, 887 00:56:33,100 --> 00:56:37,650 a dát připomínky v průběhu celého kódu a zvolit opravdu popisné názvy proměnných 888 00:56:37,650 --> 00:56:42,340 protože pokud prohlížeč není jedno, všechno, co děláte na konci dne je plýtvání bajtů. 889 00:56:42,340 --> 00:56:46,660 >> Tak to dopadá, co většina internetových stránek udělat, je, i když zdrojový kód facebook.com, 890 00:56:46,660 --> 00:56:49,550 pro cs50.net a všechny z těchto jiných webových stránek na internetu 891 00:56:49,550 --> 00:56:53,730 jsou obvykle dobře napsaný a dobře komentované a pěkně členité a podobně, 892 00:56:53,730 --> 00:56:59,270 obvykle předtím, než je webová stránka, na internetu, je minified kód, 893 00:56:59,270 --> 00:57:02,970 přičemž HTML a CSS - něco jiného budeme brzy vidět - 894 00:57:02,970 --> 00:57:05,960 kód JavaScript budeme brzy vidět je komprimován, 895 00:57:05,960 --> 00:57:09,250 přičemž dlouhé názvy proměnných se X a Y a Z, 896 00:57:09,250 --> 00:57:13,900 a všechny tyto mezery, která dělá všechno vypadat tak čitelný je všechno vyhodit, 897 00:57:13,900 --> 00:57:17,700 protože pokud si myslíte, že o tom tímto způsobem, Facebook dostane miliardy stránky narazí na den - 898 00:57:17,700 --> 00:57:21,670 něco šílené takového - tak co, pokud programátor jen pro anální 899 00:57:21,670 --> 00:57:26,660 hit mezerník navíc jeden čas jen odrážky nějaký řádek kódu stále ještě mnohem víc? 900 00:57:26,660 --> 00:57:29,500 Co je to implikace, pokud Facebook zachová mezery 901 00:57:29,500 --> 00:57:32,880 ve všech bajtů pošlou zpět k lidem na internetu? 902 00:57:32,880 --> 00:57:36,400 V ťukání do mezerníku, jakmile vám dává další bajt v souboru. 903 00:57:36,400 --> 00:57:39,730 A pokud miliarda lidí a pak pokračujte ke stažení domovskou stránku ten den, 904 00:57:39,730 --> 00:57:42,060 kolik víc dat jste přenášena přes internet? 905 00:57:42,060 --> 00:57:45,200 Gigabyte bezdůvodně. 906 00:57:45,200 --> 00:57:48,510 A poskytnuta, pro mnoho webových stránek to není tak škálovatelné problém, 907 00:57:48,510 --> 00:57:51,030 ale pro Facebook, pro Google, pro některé z nejoblíbenějších internetových stránek 908 00:57:51,030 --> 00:57:54,860 je tu velká motivace finančně, aby váš kód vypadat jako nepořádek 909 00:57:54,860 --> 00:57:58,980 tak, že používáte jako několika bajtů jak je to možné vedle pak stlačovat to 910 00:57:58,980 --> 00:58:01,500 používat něco jako zip, algoritmus nazvaný gzip, 911 00:58:01,500 --> 00:58:04,250 že prohlížeč pro vás dělá automaticky. Ale to je hrozné. 912 00:58:04,250 --> 00:58:08,060 Nikdy se dozvědět něco o internetové stránky jiných lidí a jak navrhnout webové stránky 913 00:58:08,060 --> 00:58:09,680 pokud máme na to dívat takhle. 914 00:58:09,680 --> 00:58:13,620 >> Takže naštěstí, prohlížeče jako Chrome a IE a Firefox v těchto dnech 915 00:58:13,620 --> 00:58:16,450 obvykle přicházejí s vestavěným-in vývojářských nástrojů. 916 00:58:16,450 --> 00:58:21,730 Ve skutečnosti, když půjdu sem, zkontrolujte Element, nebo jestli jsem jít do View, Developer, 917 00:58:21,730 --> 00:58:25,220 a přejděte na Developer Tools explicitně, 918 00:58:25,220 --> 00:58:27,640 toto okno v dolní části mé obrazovce nyní vyskočí. 919 00:58:27,640 --> 00:58:31,230 Je to trochu zastrašující na první, protože je tu spousta neznámých karet tady, 920 00:58:31,230 --> 00:58:34,510 ale když jsem klikněte na prvky celou cestu vlevo dole, 921 00:58:34,510 --> 00:58:38,810 Chrome je zřejmě docela chytrý. To umí interpretovat všechny tohoto kódu. 922 00:58:38,810 --> 00:58:42,320 A tak to, co dělá, je Chrome vyčistí všechny HTML Facebooku je. 923 00:58:42,320 --> 00:58:45,680 I když tam to není mezera tam, že to není odsazení tam, 924 00:58:45,680 --> 00:58:51,120 Nyní si, že mohu začít navigovat tuto webovou stránku a to tím spíše hierarchicky. 925 00:58:51,120 --> 00:58:56,910 Ukazuje se, že každá webová stránka napsána v jazyce s názvem HTML5 by měla začít s tím, 926 00:58:56,910 --> 00:59:03,980 tento DOCTYPE deklarace, abych tak řekl: 927 00:59:03,980 --> 00:59:07,840 Je to druh světla a šedé tam, ale to je úplně první řádek kódu v tomto souboru, 928 00:59:07,840 --> 00:59:12,080 a že právě říká prohlížeči, "Hej, tady je nějaký HTML5. Zde přichází webovou stránku." 929 00:59:12,080 --> 00:59:18,490 První otevřené držák za který se stane být tato věc, otevřený držák HTML tag, 930 00:59:18,490 --> 00:59:22,320 a pak když jsem ponořit hlouběji - tyto šipky jsou zcela bezvýznamné; 931 00:59:22,320 --> 00:59:25,140 oni jsou jen pro prezentaci boží, ve skutečnosti nejsou v souboru - 932 00:59:25,140 --> 00:59:30,300 všimnout, že uvnitř HTML tag Facebooku je, cokoliv, co začíná s otevřeným držákem 933 00:59:30,300 --> 00:59:32,910 a pak se slovo se nazývá tag. 934 00:59:32,910 --> 00:59:38,610 Takže uvnitř HTML tag je zřejmě hlavou tag a tělo tag. 935 00:59:38,610 --> 00:59:41,930 Uvnitř hlavy tagu je nyní celý bordel na Facebook 936 00:59:41,930 --> 00:59:45,620 protože mají spoustu metadat a dalších věcí pro marketing a reklamu. 937 00:59:45,620 --> 00:59:50,600 >> Ale když jsme se posunout dolů, dolů, dolů, dolů, pojďme zjistit, kde to je. Tady to je. 938 00:59:50,600 --> 00:59:52,210 Tohle je alespoň trochu obeznámen. 939 00:59:52,210 --> 00:59:55,990 Název domovské stránce Facebooku je, pokud jste někdy podíváte na kartě ve vašem záhlaví, 940 00:59:55,990 --> 00:59:59,060 Je Vítejte na Facebooku - Přihlásit, Registrace nebo Dozvědět se více. 941 00:59:59,060 --> 01:00:01,110 To je to, co byste viděli v záhlaví prohlížeče Chrome, 942 01:00:01,110 --> 01:00:03,100 a to je, jak to je reprezentováno v kódu. 943 01:00:03,100 --> 01:00:08,090 Pomineme-li vše ostatní v hlavě, většina z vnitřností webové stránky jsou v těle, 944 01:00:08,090 --> 01:00:10,940 a ukazuje se, že Facebook je kód bude vypadat složitější 945 01:00:10,940 --> 01:00:14,540 než většina věcí, budeme psát zpočátku jen proto, že je to bylo postavené v průběhu let, 946 01:00:14,540 --> 01:00:17,260 ale je tu spousta script, JavaScript kód, 947 01:00:17,260 --> 01:00:18,870 že dělá webové stránky velmi interaktivní: 948 01:00:18,870 --> 01:00:22,330 vidět aktualizace stavu okamžitě pomocí jazyků, jako je JavaScript. 949 01:00:22,330 --> 01:00:25,270 Je tu něco, co nazývá div, který je rozdělení stránky. 950 01:00:25,270 --> 01:00:27,940 Ale dříve, než se dostaneme k této informaci, pojďme se pokusit oddálit 951 01:00:27,940 --> 01:00:31,920 a podívat se na jednodušší verzi Facebook 1.0, abych tak řekl. 952 01:00:31,920 --> 01:00:34,740 Zde je hello, world webových stránek. 953 01:00:34,740 --> 01:00:37,370 To má tu deklaraci DOCTYPE na samém vrcholu 954 01:00:37,370 --> 01:00:40,280 který je trochu odlišný od všeho ostatního. 955 01:00:40,280 --> 01:00:46,130 Nic jiného jsme psát na webové stránky se chystá začít s 01:00:48,880 a kromě něco, co nazývá komentáře v HTML. 957 01:00:48,880 --> 01:00:53,000 Ale z větší části, vše na webové stránce je otevřený držák, klíčová slova, pravá závorka. 958 01:00:53,000 --> 01:00:56,220 >> V tomto případě můžete vidět nejjednodušší webových stránek možných. 959 01:00:56,220 --> 01:01:00,260 Tag HTML obsahuje hlavu značku a obsahuje tag body, 960 01:01:00,260 --> 01:01:04,580 ale všimněte si, že je to pojem pro spouštění a zastavování tagy. 961 01:01:04,580 --> 01:01:11,360 Toto je počáteční značka pro HTML, to je v blízkosti tag nebo koncové značky. 962 01:01:11,360 --> 01:01:15,400 Všimněte si, že jsou tak trochu protikladů v tom smyslu, že v blízkosti tag nebo koncová značka 963 01:01:15,400 --> 01:01:20,030 tento lomítko uvnitř sebe sama. 964 01:01:20,030 --> 01:01:23,540 Mezitím, tu otevřenou hlavou tag sem a zavřít hlavu tag tady. 965 01:01:23,540 --> 01:01:26,880 >> Tam je otevřený Název a zavřít Název značky zde. 966 01:01:26,880 --> 01:01:29,850 Skutečnost, že jsem dal titul na jednom řádku, čistě svévolné. 967 01:01:29,850 --> 01:01:33,760 Je to jen vypadalo, že by se vešel hezky na jednom řádku, takže jsem se ani nenamáhal klávesy Enter párkrát. 968 01:01:33,760 --> 01:01:38,200 Mezitím, tělo jsem odrážka, jen aby se stále tak jasné. 969 01:01:38,200 --> 01:01:41,050 Všimněte si, že HTML je pěkně hloupé jazyk. 970 01:01:41,050 --> 01:01:43,410 Ve skutečnosti, zpět v den dříve tam byly WYSIWYG editory 971 01:01:43,410 --> 01:01:46,770 a Microsoft Word, kde si můžete říct, "Udělej to tučně, aby tento kurzívu," 972 01:01:46,770 --> 01:01:50,850 byste vlastně psát malé příkazy v esejích 20 + lety 973 01:01:50,850 --> 01:01:55,740 kdy byste řekl, "Začít tento text tučně. Přestaňte dělat tento text tučně." 974 01:01:55,740 --> 01:01:59,010 "Začít tento text kurzívou. Přestaňte dělat tento text kurzívou." 975 01:01:59,010 --> 01:02:01,850 >> To je to, co HTML nebo značkovací jazyk je. 976 01:02:01,850 --> 01:02:05,530 Tato první tag říká, "Hej, prohlížeč. Zde přichází nějaký HTML." 977 01:02:05,530 --> 01:02:09,880 Další tag říká: "Hej, prohlížeč. Zde přichází hlavu, záhlaví mé webové stránky." 978 01:02:09,880 --> 01:02:11,650 "Hej, prohlížeč. Zde přichází název." 979 01:02:11,650 --> 01:02:15,880 A pak tady, "Hey, prohlížeč. To je to o titul." 980 01:02:15,880 --> 01:02:20,000 Tak to je, jak prohlížeč umí již zobrazit více znaků, než ahoj, svět 981 01:02:20,000 --> 01:02:21,860 v záhlaví. 982 01:02:21,860 --> 01:02:23,640 Mezitím, to říká: "To je to na hlavu." 983 01:02:23,640 --> 01:02:28,340 To říká: "Tady přichází tělo Zde je skutečné tělo." - Doslova, slova hello, world. 984 01:02:28,340 --> 01:02:33,190 A to říká tady, "To je to pro tělo. To je to pro HTML." 985 01:02:33,190 --> 01:02:34,640 Takže prohlížeče jsou dost hloupí. 986 01:02:34,640 --> 01:02:39,920 Prostě si tohle horní dolů, zleva doprava, a to přesně to, co oni jsou řekl, aby dělat. 987 01:02:39,920 --> 01:02:41,860 Pojďme skutečně udělat malý příklad zde. 988 01:02:41,860 --> 01:02:46,240 Dovolte mi, abych otevřít nejjednodušší programů na mém počítači Mac, a sice TextEdit. 989 01:02:46,240 --> 01:02:48,220 V systému Windows můžete použít Notepad.exe. 990 01:02:48,220 --> 01:02:50,520 Ale to je vše, co potřebujete začít vytváření webových stránek. 991 01:02:50,520 --> 01:02:53,730 Chystám se jít dopředu a stačí zkopírovat a vložit tento kód do tohoto souboru. 992 01:02:53,730 --> 01:02:57,210 Chystám se jít dopředu a uložte jej na mém desktopu, 993 01:02:57,210 --> 01:03:01,220 a budu uložit jako hello.html, 994 01:03:01,220 --> 01:03:03,840 a nyní je soubor s názvem hello.html. 995 01:03:03,840 --> 01:03:05,690 Tady je to na mém desktopu. 996 01:03:05,690 --> 01:03:11,130 Dovolte mi nyní přejít do prohlížeče a přetáhněte soubor do prohlížeče. 997 01:03:11,130 --> 01:03:14,060 A voila, tady je moje první webové stránky. 998 01:03:14,060 --> 01:03:17,340 Všimněte si, že název na kartě je hello, world dle názvu značky, 999 01:03:17,340 --> 01:03:20,040 a všimněte si, že hello, svět je tělo mé webové stránky, 1000 01:03:20,040 --> 01:03:22,190 a woo-hoo, jsem na internetu. 1001 01:03:22,190 --> 01:03:24,700 >> Já nejsem, pravdu, protože tento soubor není na internetu. 1002 01:03:24,700 --> 01:03:28,330 To se stane, že na mém lokálním pevném disku při dané cestě. 1003 01:03:28,330 --> 01:03:32,720 Ale myšlenka je stejná. Vše, co nyní potřebujeme, je webový server, ke kterému jej nahrát. 1004 01:03:32,720 --> 01:03:37,410 Ale nejprve pojďme vlastně představit trochu větší komplexnost a trochu víc stylizace. 1005 01:03:37,410 --> 01:03:39,890 To je jednoduchý, pokud nudný, webová stránka. 1006 01:03:39,890 --> 01:03:41,990 Ukazuje se, že existují i ​​jiné typy značek, které můžeme použít. 1007 01:03:41,990 --> 01:03:45,530 Například, tady ve žluté jsem představil 2 nové značky. 1008 01:03:45,530 --> 01:03:49,630 Nebudeme hrát hodně s těmito dnes, ale všimněte si, že link tag 1009 01:03:49,630 --> 01:03:52,520 nějak se liší od všeho ostatního. 1010 01:03:52,520 --> 01:03:55,370 Link tag vezme to, co se nazývá atributy, 1011 01:03:55,370 --> 01:03:59,770 a atribut je něco, co mění chování tagu. 1012 01:03:59,770 --> 01:04:03,840 V tomto případě to není nejlepší volba jmen, odkaz, protože to je trochu nesmyslné, 1013 01:04:03,840 --> 01:04:11,590 ale tento link tag říká, v podstatě obsahovat soubor s názvem styles.css uvnitř mé webové stránky. 1014 01:04:11,590 --> 01:04:15,400 Můžete myslet na to, jak analogický C je # include. 1015 01:04:15,400 --> 01:04:19,650 Styles.css odkazuje na jiný jazyk úplně, že nebudeme hrát i dnes, 1016 01:04:19,650 --> 01:04:23,790 ale je to pro estetiku: velikostí písma, barvy, odsazení, odsazení, okrajů, 1017 01:04:23,790 --> 01:04:26,040 a všechny takové podrobnosti estetiky. 1018 01:04:26,040 --> 01:04:28,820 Mezitím, skript tag je funkčně podobný, 1019 01:04:28,820 --> 01:04:33,140 ale spíše než patří CSS, že jazyk, obsahuje jiný jazyk, JavaScript. 1020 01:04:33,140 --> 01:04:37,810 Takže jinými slovy, s těmito 2 značkami jsem nakonec bude moci napsat vlastní webové stránky 1021 01:04:37,810 --> 01:04:41,490 ale také vytáhnout v kódu, který já nebo někdo jiný napsal 1022 01:04:41,490 --> 01:04:44,350 takže můžeme stát na ramenou jiných lidí, můžeme praktikovat dobrý design, 1023 01:04:44,350 --> 01:04:46,120 factoring se společného kódu. 1024 01:04:46,120 --> 01:04:49,090 Pokud mám 10 různých webových stránek, to znamená, že někteří z mých estetiky 1025 01:04:49,090 --> 01:04:52,490 může být počítána, stejně jako # include, do samostatného souboru. 1026 01:04:52,490 --> 01:04:54,420 Takže jsme se tam dostat. 1027 01:04:54,420 --> 01:04:57,180 Ale pojďme vlastně nejprve udělat něco zajímavějšího s tímto souborem. 1028 01:04:57,180 --> 01:05:01,110 >> Opět, je to jen TextEdit. Nejsem technicky na internetu ještě ne, ale budeme se tam dostat. 1029 01:05:01,110 --> 01:05:04,910 Rád bych, aby se hello, world trochu odvážnější, než to je. 1030 01:05:04,910 --> 01:05:10,890 Tak ahoj, pojďme libovolně říci pro tučné. 1031 01:05:10,890 --> 01:05:15,910 Opět, příběh je stejný: ahoj, čárka, začít dělat to tučné, 1032 01:05:15,910 --> 01:05:19,730 pak svět dostane vytištěny tučně, a to znamená, přestat tisknout to tučně. 1033 01:05:19,730 --> 01:05:24,020 Nech mě jít napřed a zachránit soubor, přejděte zpět na Chrome, budu přiblížit jen tak můžeme vidět lépe, 1034 01:05:24,020 --> 01:05:27,870 a znovu, a uvidíte, že svět je dnes tučně. 1035 01:05:27,870 --> 01:05:31,810 Web je o hypertextové odkazy, tak pojďme do toho a to: 1036 01:05:31,810 --> 01:05:38,550 můj oblíbený web je, řekněme, youtube.com. 1037 01:05:38,550 --> 01:05:43,810 Uložit, znovu. Dobře. Je tu pár problémů nyní jsou kromě ošklivost na internetových stránkách. 1038 01:05:43,810 --> 01:05:47,310 1, jsem si docela jistý, že jsem Enter zde. A já jsem to udělal. 1039 01:05:47,310 --> 01:05:51,590 Já jen Enter, jsem také členité, procvičování toho, co jsme se kázal o stylu, 1040 01:05:51,590 --> 01:05:54,930 ale moje je hned vedle světa. 1041 01:05:54,930 --> 01:05:58,410 Tak proč je to tak? Prohlížeče jen to, co řeknete, aby dělali. 1042 01:05:58,410 --> 01:06:04,010 Neřekl jsem prohlížeč, "zlomové linie, zde. Vložte bod zlomit tady." 1043 01:06:04,010 --> 01:06:07,820 Takže prohlížeči, nezáleží na tom, jestli jsem trefil Return 30 krát, 1044 01:06:07,820 --> 01:06:10,820 je to stále bude dát své právo vedle světě. 1045 01:06:10,820 --> 01:06:15,930 Co jsem opravdu musíte udělat, je zde říci něco jako
, vložit konec řádku. 1046 01:06:15,930 --> 01:06:17,940 >> A vlastně, konec řádku, je trochu divný věci 1047 01:06:17,940 --> 01:06:21,650 protože nemůžete skutečně začít stěhování do jiného řádku, pak něco, 1048 01:06:21,650 --> 01:06:25,380 a pak se zastaví stěhování na nový řádek. Je to trochu atomická operace. 1049 01:06:25,380 --> 01:06:28,140 Buď to, nebo ne. Stisknete klávesu Enter, nebo nemáte. 1050 01:06:28,140 --> 01:06:33,390 Takže br je trochu jiný tag, a tak musím nějak jak se otvírají a zavírají ji 1051 01:06:33,390 --> 01:06:35,230 najednou. 1052 01:06:35,230 --> 01:06:37,500 Syntaxe pro které je tento. 1053 01:06:37,500 --> 01:06:41,760 Technicky, jsi to mohl udělat něco takového v některých verzích HTML, 1054 01:06:41,760 --> 01:06:45,600 ale to je jen hloupé, protože není žádný důvod ke spuštění a zastavení něco 1055 01:06:45,600 --> 01:06:48,420 pokud můžete, místo toho to všechno najednou. 1056 01:06:48,420 --> 01:06:52,310 Uvědomte si, že HTML5 není striktně vyžadují tuto lomítko, 1057 01:06:52,310 --> 01:06:55,410 takže uvidíte učebnice a on-line zdrojů, které nemají to, 1058 01:06:55,410 --> 01:06:59,780 ale pro jistotu pojďme cvičit symetrii, že jsme viděli doposud. 1059 01:06:59,780 --> 01:07:02,870 To znamená, že značka je jak otevírat a zavírat. 1060 01:07:02,870 --> 01:07:05,220 Tak teď se mi zachránit můj soubor, jděte sem. 1061 01:07:05,220 --> 01:07:10,240 Dobře, takže to začíná vypadat lépe, s výjimkou webu vím, je trochu kliknout, 1062 01:07:10,240 --> 01:07:13,610 a přesto youtube zde nezdá se, že vést k ničemu. 1063 01:07:13,610 --> 01:07:17,560 To proto, že i když to vypadá jako odkaz, prohlížeč neví, že samo o sobě, 1064 01:07:17,560 --> 01:07:20,670 tak musím říct prohlížeči, že toto je odkaz. 1065 01:07:20,670 --> 01:07:22,620 >> Cesta k tomu je použít kotevní tag: 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 a dovolte mi, abych přesunout to na nový řádek jen tak, že je to trochu srozumitelnější, 1069 01:07:38,490 --> 01:07:40,060 a já zmenšit velikost písma. 1070 01:07:40,060 --> 01:07:43,890 Jsem hotová? Ne Tam to bude tato dichotomie. 1071 01:07:43,890 --> 01:07:46,760 Tento tag, kotva tag, skutečně se atribut, 1072 01:07:46,760 --> 01:07:52,900 které mění své chování, a hodnota tohoto atributu je zřejmě YouTube URL. 1073 01:07:52,900 --> 01:07:56,380 Ale všimněte si dichotomii je to jen proto, že je to URL budete, 1074 01:07:56,380 --> 01:08:01,020 to neznamená, že musí být slovo, které jste podtržení a dělat odkaz. 1075 01:08:01,020 --> 01:08:03,960 Spíše, to může být něco takového. 1076 01:08:03,960 --> 01:08:10,870 Takže musím říct, že přestat dělat toto slovo hypertextový odkaz pomocí úzké kotevní značku. 1077 01:08:10,870 --> 01:08:12,650 Všimněte si, já to nedělám. 1078 01:08:12,650 --> 01:08:15,890 1, by to být jen ztráta každého času a to není nutné. 1079 01:08:15,890 --> 01:08:19,290 >> Chcete-li zavřít tag, stačí uvést jméno tagu znovu. 1080 01:08:19,290 --> 01:08:21,800 Nemusíte zmínit některé z atributů. 1081 01:08:21,800 --> 01:08:26,189 Takže pojďme zachránit to, vrátit. Dobře, voila, teď je to modré a hypertextovými odkazy. 1082 01:08:26,189 --> 01:08:29,430 Pokud jsem na něj, já vlastně dělat jít na YouTube. 1083 01:08:29,430 --> 01:08:32,529 Takže i když moje webová stránka není na internetu, je to přinejmenším HTML, 1084 01:08:32,529 --> 01:08:37,930 a pokud necháme Internet dohnat, bychom skutečně skončit tady na youtube.com. 1085 01:08:37,930 --> 01:08:40,670 A můžu jít zpět a tady je moje webová stránka. Ale nevšiml. 1086 01:08:40,670 --> 01:08:43,120 Pokud jste někdy dostali spam nebo phishing, 1087 01:08:43,120 --> 01:08:45,850 Nyní máte možnost po pouhých pět minut, aby učinili totéž. 1088 01:08:45,850 --> 01:08:50,920 Můžeme jít sem a udělat něco jako www.badguy.com 1089 01:08:50,920 --> 01:08:59,319 nebo co útržkovité web je, a pak si můžete říct ověřit PayPal účet. 1090 01:08:59,319 --> 01:09:04,840 [Smích] A teď to jít na badguy.com, které nebudu klikat na 1091 01:09:04,840 --> 01:09:08,000 protože nemám ponětí, kde to vede. [Smích] 1092 01:09:08,000 --> 01:09:10,859 >> Ale nyní máme možnost skutečně skončí tam. 1093 01:09:10,859 --> 01:09:12,640 Takže jsme opravdu teprve začíná, abyste nepoškrábali povrch. 1094 01:09:12,640 --> 01:09:15,830 Nejsme programování sobě, budeme psát značkovací jazyk. 1095 01:09:15,830 --> 01:09:18,569 Ale jakmile jsme se završují náš slovník ve formátu HTML, 1096 01:09:18,569 --> 01:09:21,520 budeme zavádět PHP, skutečný programovací jazyk 1097 01:09:21,520 --> 01:09:26,859 že nám umožní generovat HTML automaticky, generovat CSS automaticky, 1098 01:09:26,859 --> 01:09:29,430 takže můžeme začít ve středu realizovat, řekněme, 1099 01:09:29,430 --> 01:09:31,700 naše vlastní vyhledávač a další. 1100 01:09:31,700 --> 01:09:34,770 Ale o tom více v pár dnech. Uvidíme pak. 1101 01:09:34,870 --> 01:09:39,000 >> [CS50.TV]