1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [Week 7] 2 00:00:02,440 --> 00:00:04,730 [David J. Malan - Harvard University] 3 00:00:04,730 --> 00:00:07,490 [Ez CS50. - CS50.TV] 4 00:00:07,490 --> 00:00:12,280 Rendben van. Üdv újra. Ez CS50, és ez a kezdete hét 7. 5 00:00:12,280 --> 00:00:14,690 Egy pár kis közleményei: 6 00:00:14,690 --> 00:00:18,150 Pset5 jelenleg folyamatban van, vagy hamarosan meg kell, 7 00:00:18,150 --> 00:00:21,590 és hadd mondjam el, őszintén, ez általában között nagyobb kihívást 8 00:00:21,590 --> 00:00:24,460 A kurzus problémája készletek, úgyhogy hadd említsem meg ezt most 9 00:00:24,460 --> 00:00:28,190 annak érdekében, hogy ezen a héten több, mint valaha, hogy nem várja meg, amíg, mondjuk, szerda este 10 00:00:28,190 --> 00:00:29,920 vagy csütörtök este merülni be 11 00:00:29,920 --> 00:00:32,369 Ez mindenképpen érdekes Pset. Azt hiszem, ez mókás. 12 00:00:32,369 --> 00:00:36,110 Ha tényleg kap teljesen helyes, és majd a kihívás az úgynevezett Big Board, 13 00:00:36,110 --> 00:00:39,830 akkor lehetősége van arra, hogy megfeleljen elméje néhány a tanfolyam személyzeti 14 00:00:39,830 --> 00:00:41,620 és néhány az osztálytársaival. 15 00:00:41,620 --> 00:00:44,670 What The Big Board egyszer megvan a helyesírás-ellenőrző munka, 16 00:00:44,670 --> 00:00:48,860 Ön képes lesz arra, hogy menjen cs50.net futtatása után egy parancs, 17 00:00:48,860 --> 00:00:52,430 tisztán döntött, majd az időt, és a RAM memória és több 18 00:00:52,430 --> 00:00:56,130 hogy már használt a végrehajtás kerülnek kiállításra itt a kurzus honlapján. 19 00:00:56,130 --> 00:00:59,740 Látni fogja, hogy egy csomó ezek az emberek itt felsorolt ​​staff 20 00:00:59,740 --> 00:01:04,220 mivel a hétvégén, a személyzet gondoltam, hogy jó móka lesz, hogy megpróbálja felülmúlni egymást. 21 00:01:04,220 --> 00:01:07,390 Tehát észre, hogy a cél itt nem az, hogy felülmúlni a személyzet. 22 00:01:07,390 --> 00:01:09,790 Még én vagyok, csak itt a 13-as szám. 23 00:01:09,790 --> 00:01:13,790 Tisztán döntött, de ez egy lehetőség, hogy lásd, milyen kevés RAM 24 00:01:13,790 --> 00:01:16,790 és milyen kevés CPU másodperc segítségével vis-a-vis néhány osztálytársaival. 25 00:01:16,790 --> 00:01:20,540 >> És én elismerem, hogy Kevin Michael Schmid, 26 00:01:20,540 --> 00:01:23,750 jelenleg az 1-es szám kell tekinteni, amely a TFS, 27 00:01:23,750 --> 00:01:28,120 ez a megvalósítás, amely hívunk nem lehetséges 28 00:01:28,120 --> 00:01:32,700 tekintettel arra, hogy ő használja szinte 0 RAM és majdnem 0 másodperc betöltés. 29 00:01:32,700 --> 00:01:35,670 Akkor mi gondoskodunk Kevin offline. [Nevetés] 30 00:01:35,670 --> 00:01:40,950 Vannak olyan készségek, Kevin a napokban a teszt itt. 31 00:01:40,950 --> 00:01:45,280 Az egyik dolog, amit gondoltuk, hogy túl most CS50x egy hét folyamatban van, 32 00:01:45,280 --> 00:01:49,520 és ti ugyanúgy része ennek a kísérletnek, mint a diákok. 33 00:01:49,520 --> 00:01:53,720 Már megkérte őket részeként pset0, ami hasonlóan be Scratch projekt 34 00:01:53,720 --> 00:01:58,280 az őket érdeklő - egy játék, egy interaktív műalkotás, animáció, vagy hasonló - 35 00:01:58,280 --> 00:02:03,700 egy 1 - 2-perces videót, ha szeretnének, mondván hello a világot, és kik is ők valójában. 36 00:02:03,700 --> 00:02:06,780 Gondoltam megosztom veletek, csak egy pár a videók nyújtottak be eddig 37 00:02:06,780 --> 00:02:10,759 mert nekünk, a személyzet legalább tényleg volt izgalmas 38 00:02:10,759 --> 00:02:14,220 és inspiráló, hogy ezek az emberek az egész világon - országok a világ minden tájáról - 39 00:02:14,220 --> 00:02:18,160 hangol, minden dolog, hogy a számítógép-tudomány tanfolyam az interneten, 40 00:02:18,160 --> 00:02:20,410 hogy ez azért van, mert azt akarják, hogy továbbra is a saját vizsgálatok 41 00:02:20,410 --> 00:02:22,300 azt akarom, hogy pályafutásuk egy új irányba, 42 00:02:22,300 --> 00:02:24,390 akarnak kitölteni hiányosságok a saját tudás, 43 00:02:24,390 --> 00:02:27,190 így néhány Ugyanilyen okokból, hogy ti talán már itt. 44 00:02:27,190 --> 00:02:31,090 >> Szóval adok egy ilyen diák van. Ön növelheti a hangerőt, csak egy kicsit. 45 00:02:31,090 --> 00:02:35,520 Itt van az egyik diák 1-perces beadványt. 46 00:02:35,520 --> 00:02:40,380 Hello, világ. Diák vagyok az ipari mérnöki itt Malaga, Spanyolország. 47 00:02:40,380 --> 00:02:45,840 Én izgatott ez az online tanfolyam, mert szeretem számítógép-tudomány, tényleg, 48 00:02:45,840 --> 00:02:48,880 és én igazán értékelem, hogy értem, hogy vizsgálja meg. 49 00:02:48,880 --> 00:02:51,940 És az a tény, hogy tudok tanulni ugyanazt mindannyian srácok 50 00:02:51,940 --> 00:02:57,040 de ahelyett, hogy a Harvard vagyok Malaga, milyen félelmetes ez? 51 00:02:57,040 --> 00:03:02,040 Nos, én vagyok Fernando, és ez CS50. Viszlát srácok. 52 00:03:02,040 --> 00:03:07,100 [Nevetés] Tovább clip mi különösen tetszik, rájössz, hogy ez az úriember angol nem olyan erős. 53 00:03:07,100 --> 00:03:11,520 Úgy néz ki, ő is fordította gép, így a fordítások magukat egy kicsit tökéletlen, 54 00:03:11,520 --> 00:03:15,790 de ez volt az egyik eddig közé is. 55 00:03:25,080 --> 00:03:29,980 [♪ ♪] 56 00:03:29,980 --> 00:03:32,370 Hello, világ. [Beszél japánul] 57 00:03:32,370 --> 00:03:39,830 [Én, hogy üdvözölje a japán, mert az angol tudásom nagyon megbízhatatlan.] 58 00:03:39,830 --> 00:03:45,380 [Én szállított az üzenetet Önnek a város Gifu, Japán.] 59 00:03:45,380 --> 00:03:49,820 [I lehet diák először az elmúlt 20 évben, amint látható.] 60 00:03:49,820 --> 00:03:54,640 [Nagyon hálás vagyok a Harvard University ki adta nekem a lehetőséget, és EDX.] 61 00:03:54,640 --> 00:04:01,510 [Golf egy gitárt, és a kedvenc dolog fut.] [Nevetés] 62 00:04:01,510 --> 00:04:05,750 [♪ ♪] 63 00:04:05,750 --> 00:04:10,790 [Mit gondolsz, miért akartam részt venni egy cs50x.] 64 00:04:10,790 --> 00:04:14,990 [Harvard University, ez az én vágy.] 65 00:04:14,990 --> 00:04:19,740 [Különösen, ha én vagyok a távoli jelenlétét Japánban élt.] 66 00:04:19,740 --> 00:04:26,680 [Akartam próbálni azonnal tisztában az ilyen jellegű EDX mikor.] 67 00:04:26,680 --> 00:04:32,500 [Nem gondolod, hogy így nem kapcsolódik a kor tanulási I.] 68 00:04:32,500 --> 00:04:38,350 [CS50 az én vágy. A nevem Kazu, és ez CS50.] 69 00:04:38,350 --> 00:04:43,090 [♪ ♪] [taps és éljenzés] 70 00:04:43,090 --> 00:04:49,220 Másik kedvence a miénk volt, a benyújtott ide valakit. 71 00:04:51,070 --> 00:04:55,380 [♪ ♪] [Malan] Google, ha Ön ismeri ezt a mém. 72 00:04:55,380 --> 00:05:01,480 >> Aztán végül, egy pár mások, hogy van közzétéve, hogy talán nyerni a imádnivaló díjat. 73 00:05:01,480 --> 00:05:06,820 [Diák] Aww! >> [Malan] Mi lesz hallgatni. Ez a rövid, ezért figyelj. 74 00:05:08,580 --> 00:05:11,150 [Női hangszóró] Mi a neve? >> Louie. 75 00:05:11,150 --> 00:05:16,120 [Női hangszóró] Mi ez? >> [Kuncogott] CS50. [Nevetés] 76 00:05:16,120 --> 00:05:19,510 [Malan] Ő 2 tart, mégis. 77 00:05:19,510 --> 00:05:22,240 Itt is vagyunk, az utolsó. 78 00:05:23,030 --> 00:05:26,980 A nevem Louie, és ez CS50. 79 00:05:26,980 --> 00:05:30,250 [Nevetés] Ez tehát CS50x. 80 00:05:30,250 --> 00:05:33,230 Köszönöm mindazoknak közületek követve végig otthon 81 00:05:33,230 --> 00:05:35,620 akiket veszünk eddig. 82 00:05:35,620 --> 00:05:39,510 Ma, arra a következtetésre jutunk vitánk az adatstruktúrák, 83 00:05:39,510 --> 00:05:41,160 legalábbis néhány igen alapvető, 84 00:05:41,160 --> 00:05:44,760 és akkor folytatjuk a beszélgetést HTML és web programozás. 85 00:05:44,760 --> 00:05:48,520 Sőt, most már töltötte az elmúlt néhány hét alatt nézi alapjait programozás - 86 00:05:48,520 --> 00:05:50,450 algoritmusok, adatszerkezetek, és a hasonló - 87 00:05:50,450 --> 00:05:53,050 és C, mint azt eddig tapasztalt, 88 00:05:53,050 --> 00:05:57,060 nem feltétlenül a leginkább elérhető nyelvek 89 00:05:57,060 --> 00:05:59,090 amellyel végrehajtására néhány ilyen ötletet. 90 00:05:59,090 --> 00:06:01,880 És ettől a héttől kezdődően, és a jövő héten, majd a következő, 91 00:06:01,880 --> 00:06:07,110 leszünk végre képes átmenet C, amelyet általánosan ismert, mint a viszonylag alacsony szintű nyelven, 92 00:06:07,110 --> 00:06:11,190 a dolgokat magasabb szintű, köztük PHP, JavaScript, és hasonlók, 93 00:06:11,190 --> 00:06:14,850 amelyet látni fogjuk meríteni az azonos tanulság, hogy megtanultuk az elmúlt hetekben, 94 00:06:14,850 --> 00:06:19,430 de rájössz, hogy nyilvánításáról dolgok, mint a tömbök és hash táblák és keresés és rendezés 95 00:06:19,430 --> 00:06:23,370 annyira sokkal könnyebb, mert a maguk nyelvén kezdünk használata 96 00:06:23,370 --> 00:06:25,290 lesz erősebb. 97 00:06:25,290 --> 00:06:27,410 De először is, az alkalmazás a fák. 98 00:06:27,410 --> 00:06:30,240 Ez nagyon gyakori ezekben a napokban, hogy meg kell tömöríteni információkat. 99 00:06:30,240 --> 00:06:34,770 Az, hogy milyen környezetben kíván tömöríteni kívánt valamilyen digitális információ? 100 00:06:37,190 --> 00:06:39,670 >> Igen. >> [Hallgató] Ha el kell küldeni az interneten keresztül. 101 00:06:39,670 --> 00:06:41,450 Igen, ha azt szeretné, hogy küldjön valamit a weben keresztül. 102 00:06:41,450 --> 00:06:44,950 Ha szeretné letölteni egy nagy fájlt, akkor ideális, ha valaki a másik végén 103 00:06:44,950 --> 00:06:48,760 azt, hogy a tömörített fájlt a zip formátumban, vagy valami ilyesmi 104 00:06:48,760 --> 00:06:53,760 úgy, hogy küldjük kevesebb bitet, mint egyébként továbbítani. 105 00:06:53,760 --> 00:06:55,500 Szóval hogyan lehet tömöríteni információt? 106 00:06:55,500 --> 00:07:00,540 A lényeg, hogy segítségével kevesebb bitet, mint szükséges alapértelmezés szerint. 107 00:07:00,540 --> 00:07:03,220 De ez a fajta egy furcsa dolog, mert úgy gondolja, vissza a héten 0 és 1 108 00:07:03,220 --> 00:07:07,370 amikor beszéltünk ASCII és bináris és beszélgettünk ASCII különösen 109 00:07:07,370 --> 00:07:10,690 mint a 8 bites, hogy képviselje az ábécé betűit 110 00:07:10,690 --> 00:07:16,120 úgy, hogy a levél A jelentése 65, kisbetűk aa a szám 97, 111 00:07:16,120 --> 00:07:21,210 és bármilyen Ön által képviselt a 65 vagy 97, akkor a 7 vagy 8 bit. 112 00:07:21,210 --> 00:07:24,120 De a fogást, hogy van néhány betű az angol ábécé 113 00:07:24,120 --> 00:07:26,230 amelyek nem olyan népszerű, mint mások. 114 00:07:26,230 --> 00:07:31,600 Z egyáltalán nem olyan népszerű, Q nem olyan népszerű, de A és E szuper népszerű. 115 00:07:31,600 --> 00:07:37,280 És mégis, az összes ezeket a leveleket, alapértelmezés szerint a világon ugyanazt a bitek száma, mindössze 8. 116 00:07:37,280 --> 00:07:42,690 Tehát nem lenne okosabb lett volna, ha ahelyett, hogy a 8 bit minden levél, 117 00:07:42,690 --> 00:07:47,440 még a ritkán használt, mint a Q és Z, 118 00:07:47,440 --> 00:07:51,910 mi lenne, ha alkalmazható kevesebb bitet az A és az E és S, valamint a legnépszerűbb betűk 119 00:07:51,910 --> 00:07:55,000 Használt és több bit a kevésbé népszerű betűk, 120 00:07:55,000 --> 00:07:57,770 az ötlet, hogy menjünk optimalizálják a közös ügy, 121 00:07:57,770 --> 00:08:01,160 amely a téma számítógép-tudomány próbál optimalizálni, hogy mi fog történni a legtöbb 122 00:08:01,160 --> 00:08:05,310 és eltölteni egy kis időt, egy kicsit több helyet foglal a dolgokat, hogy igen, megtörténhet 123 00:08:05,310 --> 00:08:07,680 de nem feltétlenül olyan gyakran. 124 00:08:07,680 --> 00:08:09,330 Szóval vessünk egy példát. 125 00:08:09,330 --> 00:08:12,610 >> Tegyük fel, hogy szeretnénk kódolni információk meglehetősen hatékonyan. 126 00:08:12,610 --> 00:08:15,090 Lehet, hogy nőttek fel tudta egy kicsit valami Morse-kódot, 127 00:08:15,090 --> 00:08:17,450 és az esély, hogy nem ismeri a tényleges kódot, 128 00:08:17,450 --> 00:08:21,750 de talán emlékeztetni arra, hogy ez legalább ez a sorozat a pontok és vonalak. 129 00:08:21,750 --> 00:08:26,640 Ez egy meglehetősen hatékony kódolás, és figyelje meg, hogy a legnépszerűbb írni - például E - 130 00:08:26,640 --> 00:08:28,980 használja a legrövidebb sípol. 131 00:08:28,980 --> 00:08:31,740 Morse kód szól bip-bip-bip-bip-bip-bip hangokat és nyomvatartásával 132 00:08:31,740 --> 00:08:34,799 akár rövid időtartamra vagy hosszú időn át. 133 00:08:34,799 --> 00:08:40,330 E, mint jelöli a pontot, egy szuper rövid hangjelzést, csak csipog, és ez képviseli E. 134 00:08:40,330 --> 00:08:43,960 Ezzel szemben a T lenne hosszabb sípolás, mint beep [meghosszabbítja hang], 135 00:08:43,960 --> 00:08:45,710 és ez képviseli T. 136 00:08:45,710 --> 00:08:48,840 De ez még mindig elég rövid, mert ezzel szemben, ha megnézi Z, 137 00:08:48,840 --> 00:08:52,690 kifejezni Z szeretnél menni bip, bip [hosszabb hang], bip, bip [rövidebb hang]. 138 00:08:52,690 --> 00:08:55,360 Szóval ez már nem, mert ez kevésbé gyakori. 139 00:08:55,360 --> 00:08:58,150 De megvagy itt az, hogy Morse-kódot egy kicsit hibás 140 00:08:58,150 --> 00:09:00,610 az, hogy ez nem azonnal dekódolható. 141 00:09:00,610 --> 00:09:07,350 Tegyük fel például, hogy hallani néhány a drót végét hangjelzés [rövid], hangjelzés [hosszú]. 142 00:09:07,350 --> 00:09:12,480 Milyen üzenetet nem csak kapni? Egy pont és egy kötőjel. Ez mit jelent? 143 00:09:12,480 --> 00:09:15,330 [Hallgató] A. >> [Malan] Talán. 144 00:09:15,330 --> 00:09:18,270 Az is lehet, E-, majd T. 145 00:09:18,270 --> 00:09:23,390 Más szóval, Morse-kódot, bár kihasználja ezt az elvet, hogy javuljon az sarok ügy, 146 00:09:23,390 --> 00:09:26,250 nem alkalmas arra, hogy azonnali decodability. 147 00:09:26,250 --> 00:09:29,850 Ez azt jelenti, az ember, aki a tárgyaláson vagy fogad e morzejelek 148 00:09:29,850 --> 00:09:34,540 kell valahogy kitalálni, ahol a szünetek között levelek, 149 00:09:34,540 --> 00:09:39,660 mert ha nem tudod, ha ezek a szünetek vannak, lehet, hogy megzavarja egy ET, vagy fordítva. 150 00:09:39,660 --> 00:09:43,880 >> Szóval mit lehet tenni? A Morse-kódot akkor csak szünet az egyes betűket. 151 00:09:43,880 --> 00:09:47,660 De a szünet egyfajta ellentétes a lényege felgyorsítja a dolgokat. 152 00:09:47,660 --> 00:09:52,880 Szóval, mi lenne, ha ahelyett, hogy jött egy kódot, ahol nem volt ilyen rossz a helyzet 153 00:09:52,880 --> 00:09:56,570 ahol E jelentése egy előtagot, például az A - 154 00:09:56,570 --> 00:10:00,020 Más szavakkal, ha tudnánk arról, hogy a minták még mindig rövid a népszerű betűk 155 00:10:00,020 --> 00:10:04,850 hosszú a kevésbé népszerű leveleket, de nincs lehetséges zavar? 156 00:10:04,850 --> 00:10:08,930 Egy férfi a neve Huffman évvel ezelőtt feltalálta ezt a rendszert nevezzük Huffman kódolással 157 00:10:08,930 --> 00:10:12,390 hogy valóban kihasználja az egyik adatszerkezetet is töltöttem egy kis időt beszélünk 158 00:10:12,390 --> 00:10:16,560 a múlt héten, hogy a fák, bináris fák különösen - 159 00:10:16,560 --> 00:10:19,710 egy bináris fa azt jelenti, hogy nincs több, mint 2 gyerek. 160 00:10:19,710 --> 00:10:22,720 Ez talán a bal gyerek, talán egy jobb gyerek, és ennyi. 161 00:10:22,720 --> 00:10:26,510 Tehát tegyük fel, csak a vita kedvéért, hogy valaki akar küldeni egy üzenetet 162 00:10:26,510 --> 00:10:31,270 úgy néz ki, mint ez. Ez teljes képtelenség, de ez áll As, Bs, Cs, Ds és Es. 163 00:10:31,270 --> 00:10:34,890 És ha tényleg számít fel az összes As, Bs, Cs, Ds és Es 164 00:10:34,890 --> 00:10:36,870 és majd osszuk el az összes levél, 165 00:10:36,870 --> 00:10:42,710 ez kis diagram itt azt mondja, hogy 45%-a a betűk Es, 20%-a As, 166 00:10:42,710 --> 00:10:45,010 10%-os B, és így tovább. 167 00:10:45,010 --> 00:10:47,330 Más szóval, azt feltételezik, hogy az idézett húr ott 168 00:10:47,330 --> 00:10:49,080 csak néhány üzenetet szeretne küldeni. 169 00:10:49,080 --> 00:10:52,180 Előfordul, hogy értelmetlen, csak így tudjuk használni néhány betű lehetséges, 170 00:10:52,180 --> 00:10:55,220 de ez tényleg igaz, hogy E továbbra is a legnépszerűbb, 171 00:10:55,220 --> 00:11:01,450 A és B és C a legkevésbé népszerű, legalábbis az 5 az ábécé. 172 00:11:01,450 --> 00:11:04,040 Szóval hogyan lehet járni jön egy kódolást, 173 00:11:04,040 --> 00:11:08,430 bináris kódolás, a minta 0s és 1s minden ilyen levelek 174 00:11:08,430 --> 00:11:14,820 oly módon, hogy E jelentése egy rövid minta és talán B és C kissé hosszabb minták, 175 00:11:14,820 --> 00:11:19,270 Ismét, az ötlet is, hogy szeretnénk használni kevesebb bitet a legtöbb időt 176 00:11:19,270 --> 00:11:21,790 és több bit csak egyszer egy darabig. 177 00:11:21,790 --> 00:11:26,070 Szerint a Huffman kódolás, akkor létrehozhat egy erdőben a fák. 178 00:11:26,070 --> 00:11:31,190 Van egyfajta történet van, amely magában foglalja a fák és építése során őket. 179 00:11:31,190 --> 00:11:32,420 Hadd kezdjem. 180 00:11:32,420 --> 00:11:36,140 >> Azt javaslom, hogy akkor kezdődik az erdőben, hogy úgy mondjam, az 5-fák, 181 00:11:36,140 --> 00:11:38,260 amelyek mindegyike egy nagyon hülye fa. 182 00:11:38,260 --> 00:11:42,800 A fa áll, csak egy csomópont, az itt képviselt egy kört. 183 00:11:42,800 --> 00:11:45,310 Így minden ilyen dolog lehet egy C struct 184 00:11:45,310 --> 00:11:50,200 és belsejében a C struct lehet egy float képviselő frekvencia gróf 185 00:11:50,200 --> 00:11:52,510 és akkor talán a char képviselő levelet. 186 00:11:52,510 --> 00:11:56,470 Szóval szerintem ezek csomópontokat csak a régi C struct, de most, magasabb szintre. 187 00:11:56,470 --> 00:12:01,230 Ez az erdő az 5 fa minden, aki csak egyetlen csomópont. 188 00:12:01,230 --> 00:12:06,830 Mi Huffman javasolt, hogy elkezdjük kombinálni a fák 189 00:12:06,830 --> 00:12:11,140 hogy a legkisebb frekvencia számít bele kicsit nagyobb fák 190 00:12:11,140 --> 00:12:13,490 kapcsolja össze őket egy új gyökér csomópont. 191 00:12:13,490 --> 00:12:17,560 Így a betűk között itt észre, hogy az egyszerűség kedvéért én már rendezve őket, balról jobbra, 192 00:12:17,560 --> 00:12:21,420 bár ez nem feltétlenül szükséges, és figyelje meg, hogy a legkisebb csomópontok 193 00:12:21,420 --> 00:12:23,930 jelenleg 10% és 10%. 194 00:12:23,930 --> 00:12:28,940 Szóval Huffman Javasoljuk, hogy egyesítik a 2 legkisebb csomópontok egy új fa 195 00:12:28,940 --> 00:12:34,450 bevezetésével új szülő csomópontot, majd adja e szülő a gyermek bal és jobb gyerek 196 00:12:34,450 --> 00:12:37,720 ahol B önkényesen a bal és a C önkényesen a helyes. 197 00:12:37,720 --> 00:12:41,590 És akkor Huffman továbbá azt javasolta, hogy menjünk most gondoljunk csak a bal oldali gyermek 198 00:12:41,590 --> 00:12:44,790 az egyik ezek a fák mindig, mintha képviselő 0 199 00:12:44,790 --> 00:12:47,890 és a megfelelő gyermek mindig, mintha által képviselt 1-es szám. 200 00:12:47,890 --> 00:12:50,680 >> Nem számít, ha megfordítod őket, amíg maga következetes. 201 00:12:50,680 --> 00:12:54,650 Így most már négy fát az erdőben. 202 00:12:54,650 --> 00:12:58,050 És azt mondom, 4, mert most a fa a bal oldalon - 203 00:12:58,050 --> 00:13:00,570 és ez nem is annyira egy fa abban az értelemben, hogy a nő így 204 00:13:00,570 --> 00:13:05,170 ez több, mint egy családfát, ahol most a 0,2 egyfajta a szülő a két gyerek - 205 00:13:05,170 --> 00:13:07,930 észre, hogy az, hogy a tulajdonos általunk készített 0,2. 206 00:13:07,930 --> 00:13:13,370 Már hozzá gyakorisága számít a két gyerek, és mivel az új csomópont a teljes összeget. 207 00:13:13,370 --> 00:13:15,310 Szóval most már csak ismételd ezt a folyamatot. 208 00:13:15,310 --> 00:13:19,490 Keresse meg a két legkisebb csomópontot, majd kössük össze őket, egy új fa 209 00:13:19,490 --> 00:13:21,380 majd ismételje meg a folyamatot tovább. 210 00:13:21,380 --> 00:13:26,390 Most van néhány jelölt, 20%, 15%, és a másik 20%-ot. 211 00:13:26,390 --> 00:13:29,780 Ebben az esetben, meg kell törni a nyakkendő. Meg tudjuk csinálni önkényesen. 212 00:13:29,780 --> 00:13:31,540 Meg kéne csinálni következetesen. 213 00:13:31,540 --> 00:13:33,760 Ebben az esetben, én önkényesen megy az egyik a bal oldalon, 214 00:13:33,760 --> 00:13:39,880 és most egyesíteni a 20% és a 15%-ot, hogy adjon nekem egy új szülő nevű 35%, 215 00:13:39,880 --> 00:13:46,310 melynek bal gyermek 0, akinek jogát gyermek 1, és most már csak három fa az erdőben. 216 00:13:46,310 --> 00:13:47,960 Akkor talán látni, ahol ez megy. 217 00:13:47,960 --> 00:13:51,150 Ha ismételje meg ezt a pár többször is, mi megy, hogy csak egy nagyobb fa, 218 00:13:51,150 --> 00:13:53,900 amelynek minden széle címkével vannak ellátva 0s és 1s. 219 00:13:53,900 --> 00:13:55,710 Csináljuk újra. 220 00:13:55,710 --> 00:14:02,600 35%-kal, hogy a fa gyökere. 20% és 45%, így megyünk összevonja a 35% és 20%. 221 00:14:02,600 --> 00:14:05,610 Most már ezt a fát itt. Mi hozzá e együtt már 55%. 222 00:14:05,610 --> 00:14:07,910 Most már csak két fa az erdőben. 223 00:14:07,910 --> 00:14:11,900 Tesszük ezt egy utolsó alkalommal, és remélhetőleg matematikailag összes frekvencia összeadódnak 224 00:14:11,900 --> 00:14:15,570 mert kell, hiszen számítani őket a get-go, hogy adja ki a 100%-os. 225 00:14:15,570 --> 00:14:17,960 És most van egy fa. 226 00:14:17,960 --> 00:14:20,580 Tehát ez egy Huffman kódolás fa. 227 00:14:20,580 --> 00:14:24,400 Ez a fajta Eltartott egy ideig, hogy ott verbálisan, de a valóság az a for ciklus 228 00:14:24,400 --> 00:14:27,620 vagy egy rekurzív függvény, meg tudná építeni ezt a dolgot ki elég gyorsan. 229 00:14:27,620 --> 00:14:32,440 Tehát most van egy új csomópont, és az összes ilyen belső csomópontok kerültek malloc'd, 230 00:14:32,440 --> 00:14:34,690 feltehetőleg az út mentén. 231 00:14:34,690 --> 00:14:38,650 Tehát most a tetején ez a fa már 100%-os, de most észre, hogy van egy út 232 00:14:38,650 --> 00:14:43,780 ezen új ük-ük-ük-nagyszülő, hogy minden a ük-ük-ük-unokája 233 00:14:43,780 --> 00:14:45,930 végig alján, az összes a levelek. 234 00:14:45,930 --> 00:14:52,840 >> Mit fogunk csinálni most javaslom, hogy annak érdekében, hogy képviselje az E betű, 235 00:14:52,840 --> 00:14:55,670 mi egyszerűen csak az 1-es szám. Miért? 236 00:14:55,670 --> 00:15:01,000 Mert ha keresztezik ezt a fát a végső gyökér le a levél ismert E, 237 00:15:01,000 --> 00:15:06,050 követjük csak egy él, a jobb szélén, és ez címkézett természetesen jobb felső sarokban 1. 238 00:15:06,050 --> 00:15:11,550 Tehát a hatása itt Huffman volt, hogy E kódolási bináris kell csak 1-. 239 00:15:11,550 --> 00:15:14,490 És ez átkozottul hatékony. Nem igazán olyan kisebb. 240 00:15:14,490 --> 00:15:18,350 Ezzel szemben, A fog képviselve, ha követi a logika, 241 00:15:18,350 --> 00:15:21,610 milyen minta bit helyett? 01. 242 00:15:21,610 --> 00:15:25,500 Tehát, hogy az A, kezdjük a gyökér és megyünk balra, aztán menj jobbra, 243 00:15:25,500 --> 00:15:28,580 ami azt jelenti, hogy majd a 0, majd a 1. 244 00:15:28,580 --> 00:15:32,810 Tehát képviseli a betű, a minta 0 és 1. 245 00:15:32,810 --> 00:15:36,010 És most észre, már van egy ingatlan közvetlen decodability 246 00:15:36,010 --> 00:15:38,090 hogy nem volt a Morse-kódot. 247 00:15:38,090 --> 00:15:42,840 Annak ellenére, hogy mindkét minták elég rövid - E = 1 bit, A 2 bit - 248 00:15:42,840 --> 00:15:45,080 észre, hogy azokat nem lehet összetéveszteni a egyik vagy másik, 249 00:15:45,080 --> 00:15:54,870 mert ha látsz egy 1, akkor van, hogy az E, ha úgy látja, a 0, akkor a 1 ez nyilvánvalóan van, hogy az A. 250 00:15:54,870 --> 00:15:58,410 Hasonlóképpen, mi a D? 001. 251 00:15:58,410 --> 00:16:01,440 Mi az a C? 0001. 252 00:16:01,440 --> 00:16:05,320 És mi a B? 0000. 253 00:16:05,320 --> 00:16:09,550 És ismét, mert a betűk mi érdekel vannak a levelek 254 00:16:09,550 --> 00:16:13,890 , és ezek egyike sem egyfajta közvetítők az útvonal root levél, 255 00:16:13,890 --> 00:16:18,760 nincs kockázata conflating 2 betű "más kódolás 256 00:16:18,760 --> 00:16:22,300 mivel ez utóbbiak mind ezek bit minták determinisztikus. 257 00:16:22,300 --> 00:16:25,280 0000 mindig B. 258 00:16:25,280 --> 00:16:29,480 Nincs csomópont valahol a kettő között, hogy esetleg megzavarja egy levelet a másik. 259 00:16:29,480 --> 00:16:31,150 Szóval, mi a hatása itt? 260 00:16:31,150 --> 00:16:35,080 >> A legnépszerűbb levél - ebben az esetben E - ütött a legrövidebb kódolás, 261 00:16:35,080 --> 00:16:37,430 A ütött a következő legrövidebb kódolás, 262 00:16:37,430 --> 00:16:41,390 és B és C, amit már eddig is tudtunk a get-go kedvesek voltak a legkevésbé népszerű 263 00:16:41,390 --> 00:16:45,390 10%-os gyakorisággal minden, általuk ütött a leghosszabb kódolást. 264 00:16:45,390 --> 00:16:49,410 És mit jelent ez most az, hogy ha azt szeretnénk, hogy küldjön egy üzenetet, ami tömörített 265 00:16:49,410 --> 00:16:51,950 az interneten vagy egy e-mail vagy a hasonló, 266 00:16:51,950 --> 00:16:56,730 ahelyett, szabványos ASCII, küldhetünk Huffman kódolt üzenetet 267 00:16:56,730 --> 00:17:01,720 amely, ha el szeretné küldeni a levelet E, küld csak egy kicsit. 268 00:17:01,720 --> 00:17:05,680 Ha azt szeretnénk, hogy küldjön egy A, akkor küld 2 bit, 01, ahelyett 8 bit 269 00:17:05,680 --> 00:17:10,190 majd egy másik 8 bit, majd további 8 bitet és így tovább. 270 00:17:10,190 --> 00:17:11,940 De van egy megvagy itt. 271 00:17:11,940 --> 00:17:17,079 Ez nem elég, hogy csak építeni ezt a fát, majd indítsa küldés Alice Bob 272 00:17:17,079 --> 00:17:20,010 A rövidebb bit mintát, egy stringet ASCII, 273 00:17:20,010 --> 00:17:23,140 mert Alice is tájékoztatni Bob milyen 274 00:17:23,140 --> 00:17:26,880 ha Bob lesz képes olvasni neki tömörített üzenetet? 275 00:17:26,880 --> 00:17:30,770 [Hallhatatlan diák válasza] >> Mi ez? 276 00:17:30,770 --> 00:17:32,310 [Hallhatatlan diák válasza] >> mi a fa. 277 00:17:32,310 --> 00:17:35,160 Vagy még pontosabban, mik azok kódolás, 278 00:17:35,160 --> 00:17:39,010 különösen azért, mert ebben a történetben tettünk egy ítélet hívást egy ponton. 279 00:17:39,010 --> 00:17:43,640 Ne feledje, hogy mi volt, hogy vegye önkényesen között 2 különböző 20%-os csomópontok? 280 00:17:43,640 --> 00:17:49,800 Tehát nem igaz, hogy Bob, a címzett is csak rekonstruálni a fa saját 281 00:17:49,800 --> 00:17:53,390 mert lehet, hogy hozza létre a fa alig észrevehetően eltérő Alice. 282 00:17:53,390 --> 00:17:56,670 Sőt, Bob, nem is tudom, mi az eredeti üzenet 283 00:17:56,670 --> 00:18:00,770 azért, mert az egyetlen dolog, Alice küld neki, persze, a tömörített üzenet. 284 00:18:00,770 --> 00:18:05,900 >> Tehát a fogás, kompressziós, mint ez, hogy igen, Alice menthet egy csomó bit 285 00:18:05,900 --> 00:18:09,900 küldésével 1 E-től és a 01 az A, és így tovább, 286 00:18:09,900 --> 00:18:15,180 de ő is tájékoztatnia Bob, mi a leképezés között betűk és bitek 287 00:18:15,180 --> 00:18:19,620 mert nem lehet egyértelműen hivatkozhat csak ASCII többé, ha éppen nem használja ASCII. 288 00:18:19,620 --> 00:18:22,200 Így tudja küldje el neki a fa valahogy - 289 00:18:22,200 --> 00:18:26,600 írja le, tárolja a bináris adatok, vagy valami ilyesmi - 290 00:18:26,600 --> 00:18:30,280 vagy csak küldj neki egy kis puskát, egy Excel fájlt, amely megmutatja a leképezések. 291 00:18:30,280 --> 00:18:36,480 Tehát a tömörítés hatékonysága valóban feltételezi, hogy az üzeneteket, amelyeket Ön küldött 292 00:18:36,480 --> 00:18:40,230 elég nagy, legalább közepes méretű, 293 00:18:40,230 --> 00:18:42,180 mert ha küld egy szuper rövid üzenet, 294 00:18:42,180 --> 00:18:45,390 ha csak szeretné küldeni az üzenetet BAD, ami történik, hogy egy szót tudunk varázslat itt, 295 00:18:45,390 --> 00:18:49,550 B-A-D, akkor valószínűleg fogja használni kevesebb bit, 296 00:18:49,550 --> 00:18:53,130 de a fogás, ha te is tájékoztatni Bob, mi a fa 297 00:18:53,130 --> 00:18:57,530 vagy mi a kódolás, fogsz valószínűleg meghaladják az összes megtakarítás 298 00:18:57,530 --> 00:19:00,110 annak, tömörített dolgokat kezdeni. 299 00:19:00,110 --> 00:19:02,210 Így is lehet a helyzet, hogy ha megpróbál tömörítő 300 00:19:02,210 --> 00:19:05,330 még valami hasonló zip vagy fájl formátumokat lehet, hogy ismerős - 301 00:19:05,330 --> 00:19:07,780 elég kicsi kép, még üres fájlok - 302 00:19:07,780 --> 00:19:10,930 Néha ezek a fájlok lehet, hogy nagyobb és nem kisebb. 303 00:19:10,930 --> 00:19:14,320 De reálisan, ami történik, csak a kis fájlméret, 304 00:19:14,320 --> 00:19:16,920 így nem megy, hogy egy gigabyte fájl lesz 2 gigabájt; 305 00:19:16,920 --> 00:19:19,480 mi igazán beszélünk bájt vagy csak egy pár kilobyte. 306 00:19:19,480 --> 00:19:22,330 >> Egyes programok, mint a zip elég okos, hogy észre, hogy a 307 00:19:22,330 --> 00:19:24,590 "Te fogsz több bit tömörítés ezt." 308 00:19:24,590 --> 00:19:27,460 "Hadd ne zavarja tömörítő neked egyáltalán." 309 00:19:27,460 --> 00:19:30,160 Tehát ez csak az egyik módja, akkor tömörítése szöveges formátumban. 310 00:19:30,160 --> 00:19:32,300 Tudtunk végre ilyesmit C. 311 00:19:32,300 --> 00:19:35,370 Például, itt van, hogy talán jelenthet csomópont ezt a fát 312 00:19:35,370 --> 00:19:39,320 ha van egy char a szimbólumot, egy úszó értéket a frekvencia, 313 00:19:39,320 --> 00:19:42,250 és mint láttuk a mi más adatszerkezeteket, 2 mutatók, 314 00:19:42,250 --> 00:19:47,080 1 balra gyermek, 1 és a jobbra, amelyek közül bármelyik lehet NULL, 315 00:19:47,080 --> 00:19:50,850 de ha nem, arra utal, hogy a gyermek és a balra jobbra gyermek. 316 00:19:50,850 --> 00:19:55,130 Tehát ez akkor van Huffman kódolás, és ez az egyik módja, hogy tudsz járni tömörítő információkat, 317 00:19:55,130 --> 00:19:57,880 és ez minden bizonnyal az egyik könnyen megvalósítható 318 00:19:57,880 --> 00:20:00,830 keretében, mondjuk, a múlt heti adatszerkezetek, 319 00:20:00,830 --> 00:20:03,250 bár még összetettebb algoritmusokat létezik 320 00:20:03,250 --> 00:20:08,220 hogy tehet még kifinomultabb mutáció az adatokat. 321 00:20:08,220 --> 00:20:11,640 Van még kérdése majd a fák, bináris fák, vagy kompressziós szöveg? 322 00:20:11,640 --> 00:20:15,590 [Hallgató] Van némi kétértelműséget, mint ha a [hallhatatlan] felosztva 01, 323 00:20:15,590 --> 00:20:19,160 akkor 011 lenne egyértelmű, ugye? 324 00:20:19,160 --> 00:20:22,730 [Hallhatatlan] >> Jó kérdés. Kétértelműséget. 325 00:20:22,730 --> 00:20:25,940 Hadd Összefoglalva hivatkozva ezt a képet itt. 326 00:20:25,940 --> 00:20:29,650 Mivel a karakterek akkor tömörítés, képviseletei, 327 00:20:29,650 --> 00:20:32,850 definíció szerint az algoritmus mindig a levelek, 328 00:20:32,850 --> 00:20:41,870 soha nem véletlenül használja ugyanazt a mintát a bitek a előtag több leveleket. 329 00:20:41,870 --> 00:20:46,740 Más szóval, te vagy aggódik, úgy hangzik, mint egy kétértelműség miatt 330 00:20:46,740 --> 00:20:51,580 amely 001 lehet a kezdete a B vagy a C kezdete, vagy valami ilyesmi. 331 00:20:51,580 --> 00:20:56,780 De ez nem lehet a helyzet, mert azt tapasztaljuk, hogy minden az ábécé betűit vagyunk kódoló 332 00:20:56,780 --> 00:20:58,290 vannak a leveleket. 333 00:20:58,290 --> 00:21:01,910 >> A kétértelműség csak akkor merül fel, mint abban az esetben a Morse kód, 334 00:21:01,910 --> 00:21:06,770 ha például, C valahol a pálya mentén a gyökér a B. 335 00:21:06,770 --> 00:21:12,290 [Hallgató] Rendben. Tehát ebben az esetben, mondjuk A-nak 2 levelek. Mondja el >> A-nak - Mondd még egyszer. 336 00:21:12,290 --> 00:21:18,760 [Hallgató] Say A már 2 levél, F és G, majd a G - >> Oké. De ez nem lehet. 337 00:21:18,760 --> 00:21:23,230 A maga nem lehetett levelek F és G mert e levelek F és G 338 00:21:23,230 --> 00:21:27,560 maguk is elhagyja valahol balra B vagy jog E. 339 00:21:27,560 --> 00:21:28,900 Tehát definíció kell lenniük levelek. 340 00:21:28,900 --> 00:21:32,940 Egyébként igazad van, pontosan, mi már nem oldotta meg a problémát, hogy Morse-kódot szembesül. 341 00:21:32,940 --> 00:21:38,150 Jó kérdés. Egyéb kérdés? Rendben van. 342 00:21:38,150 --> 00:21:42,050 Ez az elképzelés a bitek, kiderül, hogy már volt ereje végig, hogy már ténylegesen fel nem használt 343 00:21:42,050 --> 00:21:44,200 amikor jött a manipulálni ezeket 0s és 1s. 344 00:21:44,200 --> 00:21:46,600 Megkérdeztük erről az egyik legkorábbi probléma készletek: 345 00:21:46,600 --> 00:21:52,340 azaz, hogyan megy a konvertálása nagybetűs kisbetűssé vagy fordítva? 346 00:21:52,340 --> 00:21:55,460 Vagy, pontosabban, az egyik az elsőként psets kérték 347 00:21:55,460 --> 00:22:01,090 hány bit van ténylegesen a flip megváltoztatása érdekében A kisbetűssé egy vagy fordítva? 348 00:22:01,090 --> 00:22:05,580 Itt egy rövid emlékeztető, hogy mi 65 és 97 néz ki, mint a bináris. 349 00:22:05,580 --> 00:22:08,060 És még ha a szóban forgó fajta elhalványult a memória, 350 00:22:08,060 --> 00:22:11,290 láthatjuk újra itt, hogy hány bitet kell tükrözött 351 00:22:11,290 --> 00:22:15,810 változtatni tőke A kisbetűssé a? Csak egy. 352 00:22:15,810 --> 00:22:19,650 >> Csak különböznek egy helyen, a harmadik kicsit a bal oldalon. 353 00:22:19,650 --> 00:22:24,240 Mivel van egy 010, egy kicsit van egy 011. 354 00:22:24,240 --> 00:22:26,250 Tehát valahogy meg kell csak, hogy képes legyen flip, hogy a kicsit, 355 00:22:26,250 --> 00:22:29,410 és mi lehet majd hasznosítani, vagy kisbetűssé. 356 00:22:29,410 --> 00:22:32,720 Megcsináltuk ezt a múltban valójában használ ha a körülmények 357 00:22:32,720 --> 00:22:35,930 és ellenőrzés, ha a levél nem a tőke és a tőke A Z, 358 00:22:35,930 --> 00:22:41,480 majd kimenetek, mint A - a + 26, vagy valami ilyesmi. 359 00:22:41,480 --> 00:22:46,130 Valószínűleg volt egy aritmetikai változás az az ábécé betűit. 360 00:22:46,130 --> 00:22:49,270 De mi lenne, ha tudna csak fordítsa az egyetlen bit? 361 00:22:49,270 --> 00:22:59,080 Hogy megy a vevő egy byte érdemes bit, így a 8 bitet, mint a 01000001 és a 01100001? 362 00:22:59,080 --> 00:23:03,170 Ha már a mintákat a bitek, hogyan megy a változó csak az egyiket? 363 00:23:03,170 --> 00:23:07,610 Mi van, ha bemutatjuk, sárga itt a másik minta bit? 364 00:23:07,610 --> 00:23:13,420 Ha azt, hogy az egész sárga szöveg 0s, kivéve az egy kicsit, hogy meg akarom változtatni 365 00:23:13,420 --> 00:23:17,900 aztán egy új, operátor ismert bitenkénti operátor - 366 00:23:17,900 --> 00:23:21,210 bitenkénti abban az értelemben, hogy a csoport az egyes bitek, 367 00:23:21,210 --> 00:23:25,360 nem egy teljes byte vagy négy bájt egyszerre. 368 00:23:25,360 --> 00:23:31,170 Ez a függőleges vonal ott sárga azt sugallja, hogy mi lenne, ha megteszi a képviseletét tőke A 369 00:23:31,170 --> 00:23:37,060 és bitenkénti OR azt a sárga sorozata bit? 370 00:23:37,060 --> 00:23:41,300 Más szóval, gondolom, vissza a beszélgetést a logikai kifejezések Scratch majd C. 371 00:23:41,300 --> 00:23:47,520 >> Avagy egy logikai, vagy azt jelenti, hogy igaz legyen, vagy az első dolog, amit meg kell, hogy igaz legyen 372 00:23:47,520 --> 00:23:50,700 vagy a második dolog, amit meg kell, hogy igaz legyen, vagy mindkettő, hogy igaz legyen, 373 00:23:50,700 --> 00:23:53,270 és azután az így kapott kimenet maga igaz. 374 00:23:53,270 --> 00:24:00,230 Ebben az esetben is, mit kapunk, ha veszünk 0 "vagy" ed 0-val? Hamis vagy hamis? 375 00:24:00,230 --> 00:24:04,280 Még mindig hamis, ezért a kisbetűs egy marad, mint várták. 376 00:24:04,280 --> 00:24:07,540 Mi lenne, ha ehelyett teszünk 1 vagy 0? 377 00:24:07,540 --> 00:24:12,640 Ez most is 1, de észre, mi fog történni itt. 378 00:24:12,640 --> 00:24:18,630 Ha elkezdjük a tőke A. és mi továbbra is ", vagy" az egyes bitek csinálunk itt, 379 00:24:18,630 --> 00:24:25,180 0 vagy a sárga ad nekünk, mi itt lent? Ez ad nekünk 1. 380 00:24:25,180 --> 00:24:35,120 Sőt, tegyük fel, hogy nem tudom, mi a nagybetűs változatát kevés a ténylegesen volt. 381 00:24:35,120 --> 00:24:38,270 Menjünk erre. Hadd helyezze ezt vissza ide. 382 00:24:38,270 --> 00:24:42,340 Csináljuk ezt újra. 0 vagy 0 0 ad nekem. 383 00:24:42,340 --> 00:24:45,020 1 vagy 0 ad nekem 1. 384 00:24:45,020 --> 00:24:48,020 0 vagy 1 ad nekem 1. 385 00:24:48,020 --> 00:24:52,880 0 vagy 0 0 ad nekem. A következő egy 0, a következő egy 0, a következő egy értéke 0. 386 00:24:52,880 --> 00:24:55,660 1 vagy 0 ad nekem 1. 387 00:24:55,660 --> 00:24:59,140 És még akkor is, ha nem tudja előre, hogy mi a kisbetű volt, 388 00:24:59,140 --> 00:25:04,770 csupán a "vagy" ING Egy ezzel a mintával bitek, hogy már itt bemutatott sárga, 389 00:25:04,770 --> 00:25:09,400 akkor kisbetűs a tőke egy az essek, hogy a kicsit. 390 00:25:09,400 --> 00:25:11,580 Úgy használta ezt a kifejezést héttel ezelőtt: essek egy kicsit. 391 00:25:11,580 --> 00:25:13,710 Hogyan ténylegesen, hogy algoritmikusan? 392 00:25:13,710 --> 00:25:16,390 Ön használja, mi általában úgynevezett maszk sorozata bit, 393 00:25:16,390 --> 00:25:19,980 hogy ebben az esetben csak azért történik, hogy néz ki ez a szám itt, 394 00:25:19,980 --> 00:25:22,980 és akkor ", vagy" össze ezzel az új C-üzemeltető, 395 00:25:22,980 --> 00:25:29,940 Nem | |, akkor használhat egyetlen | és akkor tényleg kap ez a válasz itt, mert miért? 396 00:25:29,940 --> 00:25:35,120 Ez az a hely 1s, 2s hely, 4S, 8S, 16S, 32s. 397 00:25:35,120 --> 00:25:42,280 Így kiderül, hogy ha egy betűt, és bitenkénti OR azt az egész 32, 398 00:25:42,280 --> 00:25:47,520 mert az egész 32, ha megnézzük azt bitek, úgy néz ki, mint ez, 399 00:25:47,520 --> 00:25:50,860 ez azt jelenti, akkor megfordítja a kicsit, hogy amit valójában akar. 400 00:25:50,860 --> 00:25:52,630 És hasonlóan -, és azt fogjuk megnézni, kódot egy pillanat - 401 00:25:52,630 --> 00:25:54,210 Tegyük fel akarunk menni a másik irányba. 402 00:25:54,210 --> 00:25:58,210 >> Hogyan megy a kisbetűs a tőke A? Melyik bit kell változtatni? 403 00:25:58,210 --> 00:25:59,820 Ez ugyanaz. 404 00:25:59,820 --> 00:26:03,970 Meg akarja változtatni, hogy a harmadik bit egy 1 és a 0. 405 00:26:03,970 --> 00:26:06,310 És hogyan álljunk neki csinálod ezt? 406 00:26:06,310 --> 00:26:10,130 Hogyan kikapcsolni egy kicsit? Azzal, amit minta bitek tudnánk kikapcsolni egy kicsit? 407 00:26:11,580 --> 00:26:14,070 Mi lenne, ha egyfajta fordítsa a maszk? 408 00:26:14,070 --> 00:26:17,350 Mivel korábban, mi történik az egész sárga maszk 0s 409 00:26:17,350 --> 00:26:19,930 kivéve az egy bit akartunk bekapcsolásához, 410 00:26:19,930 --> 00:26:25,580 mi lenne, ha ebben az időben, azt, hogy az egész maszk 1s kivéve a kicsit, hogy szeretnénk kikapcsolni 411 00:26:25,580 --> 00:26:28,330 majd mi üzemeltetője? 412 00:26:28,330 --> 00:26:30,560 Mi lenne, ha "és a" dolgok? Vessünk egy pillantást. 413 00:26:30,560 --> 00:26:34,880 Ha most fordítsa ezt, tegyük fel, hogy megint hozzon létre egy maszkot, ez minden 1s 414 00:26:34,880 --> 00:26:37,650 kivéve az egy kicsit, hogy szeretnék kikapcsolni 415 00:26:37,650 --> 00:26:43,860 és aztán nem ", vagy" a fehér számok felfelé tetején a sárga számok itt lenn, 416 00:26:43,860 --> 00:26:46,940 mi van, ha én inkább "és az" őket? Úgy hívják bitenkénti és. 417 00:26:46,940 --> 00:26:49,450 Logikus, ez ugyanaz, mint a logikai és. 418 00:26:49,450 --> 00:26:55,160 Ez ad nekem 0 és 1 értéke 0. Tehát hamis és igaz hamis. 419 00:26:55,160 --> 00:26:58,160 Igaz, és igaz, igaz. 420 00:26:58,160 --> 00:27:04,020 És itt van a mágia: igaz és hamis most hamis, úgyhogy most már ki van kapcsolva, hogy a kicsit. 421 00:27:04,020 --> 00:27:06,560 És most, a többi a történet kissé egyszerű. 422 00:27:06,560 --> 00:27:11,970 Mivel a többi maszk 1s, nem számít, milyen a számok fehér. 423 00:27:11,970 --> 00:27:15,580 Ha a "és a" valamit igaz, akkor nem fog változtatni az értékét. 424 00:27:15,580 --> 00:27:20,200 Ha ez igaz, akkor az továbbra is igaz. Ha ez hamis, akkor továbbra is hamis. 425 00:27:20,200 --> 00:27:23,190 >> De a varázslat történik, ha veszel valamit, ami igaz volt 426 00:27:23,190 --> 00:27:25,430 és akkor majd ", és" ez hamis. 427 00:27:25,430 --> 00:27:30,030 Ennek az a hatása, hogy kikapcsolja bit. 428 00:27:30,030 --> 00:27:31,980 Szóval egy kicsit rejtélyes ott. 429 00:27:31,980 --> 00:27:35,390 Nézzük ténylegesen nézd meg egy kódot, ami tulajdonképpen megnézi még rejtélyes, 430 00:27:35,390 --> 00:27:38,220 de vessünk egy pillantást itt tolower. 431 00:27:38,220 --> 00:27:45,880 Ha nézem tolower, megy a tőke A kisbetűssé a, 432 00:27:45,880 --> 00:27:47,730 lássuk, hogyan lehet végrehajtani ezt a programot. 433 00:27:47,730 --> 00:27:51,280 Itt a legfontosabb, és ez nem történik parancssori argumentumok. 434 00:27:51,280 --> 00:27:55,980 Én nyilvánító c karaktert a levelet, hogy a felhasználó megy, hogy írja be 435 00:27:55,980 --> 00:28:00,690 Én majd egy ismerős do while ciklus, hogy csak győződjön meg róla, hogy a felhasználó biztosan ad nekem a tőke egy 436 00:28:00,690 --> 00:28:05,010 vagy B vagy C. .. Z, ezért adnak nekem valamit az A és Z. 437 00:28:05,010 --> 00:28:08,580 És most mit keresek én itt? 438 00:28:08,580 --> 00:28:14,870 Én vagyok "vagy" ING ezt 0x20, de ez tulajdonképpen ugyanaz, mint a - 439 00:28:14,870 --> 00:28:19,500 és mi jön vissza, ezt egy pillanatra - 32. 440 00:28:19,500 --> 00:28:24,830 Tehát újra, 32 ez a minta bitek itt. Miért nem tudjuk ezt? 441 00:28:24,830 --> 00:28:26,320 Gondoljunk csak vissza a 0. héten. 442 00:28:26,320 --> 00:28:31,010 Ez az a hely 1s, 2s hely, 4S, 8S, 16S, 32s hely. 443 00:28:31,010 --> 00:28:33,470 Tehát ez a sárga szám történetesen 32. 444 00:28:33,470 --> 00:28:40,570 Én akkor fog írni, mint a char itt bitenkénti "vagy" azt szó szerint a szám 32, 445 00:28:40,570 --> 00:28:45,250 és mit kapok vissza? A kisbetűs változatát char. 446 00:28:45,250 --> 00:28:48,830 Egy pillanattal ezelőtt, bár én ezt a hangot egy másik bázis jelöléssel. 447 00:28:48,830 --> 00:28:51,370 Mit jelent ez? >> [Hallgató] Hexadecimális. 448 00:28:51,370 --> 00:28:53,050 [Malan] Ez történik, hogy képviselje hexadecimális. 449 00:28:53,050 --> 00:28:55,170 Mi nem beszéltünk hexadecimális, hogy sok minden, 450 00:28:55,170 --> 00:28:57,330 de valójában kényelmes, azokban az esetekben, mint ez. 451 00:28:57,330 --> 00:29:01,730 >> Bár úgy néz ki, sokkal összetettebb, és bár úgy néz ki, mint a 20, és nem 32, 452 00:29:01,730 --> 00:29:06,240 kiderül, hogy hexadecimális valóban szuper kényelmes jelölés 453 00:29:06,240 --> 00:29:10,810 mert minden hexadecimális számjegy után 0x - és ez nem jelent semmit; 454 00:29:10,810 --> 00:29:13,960 ez csak az emberi konvenció, hogy azt mondja itt jön egy hexadecimális szám - 455 00:29:13,960 --> 00:29:18,590 mindegyik számjeggyel, a 2, majd a 0, maguk is képviseli 456 00:29:18,590 --> 00:29:20,800 pontosan 4 bit. 457 00:29:20,800 --> 00:29:27,840 Szóval, ha ezt tesszük, hadd nyit meg egy szövegszerkesztőt itt - furcsa autocomplete - 458 00:29:27,840 --> 00:29:35,940 ha egy kicsit szövegszerkesztő itt, a szám azt jelenti, 0x20 itt 4 bit, itt van még egy 4 bit. 459 00:29:35,940 --> 00:29:38,050 Csináljuk a jobb szélső 4 bit először. 460 00:29:38,050 --> 00:29:44,690 0, ha képviselő, 4 bit, az mi? Szuper könnyű. Csak minden 0s. 461 00:29:44,690 --> 00:29:46,780 Tehát 4 bit a 0-t. 462 00:29:46,780 --> 00:29:53,510 Hogyan képviseli 2? Már jó ideje nem csináltuk ezt, de ez 0100. 463 00:29:53,510 --> 00:29:57,310 Szóval ez a 1s hely, ez a 2s hely, és akkor nem számít, milyen más helyen vannak. 464 00:29:57,310 --> 00:30:00,610 Más szóval, a hexadecimális mondhatnánk 0x20, 465 00:30:00,610 --> 00:30:04,340 de ha majd úgy gondolja, hogy mi van a 2 és hogyan képviseli bináris, 466 00:30:04,340 --> 00:30:07,130 mi van a 0 és hogyan képviseli bináris, 467 00:30:07,130 --> 00:30:10,440 a választ e kérdésekre ez és ez volt. 468 00:30:10,440 --> 00:30:14,380 Szóval 0x20 történik, hogy képviselje ezt a mintát 8-bit, 469 00:30:14,380 --> 00:30:16,880 amely pontosan a maszk, amit akart. 470 00:30:16,880 --> 00:30:20,140 Szóval ez az a pillanat csak egy intellektuális gyakorlat, 471 00:30:20,140 --> 00:30:24,520 de a valóság az, hogy ez a kód jellemzően gyakrabban írni konstansok ilyen 472 00:30:24,520 --> 00:30:28,360 hexadecimális mert akkor a programozó viszonylag könnyen, 473 00:30:28,360 --> 00:30:32,560 még ha ez igényel némi papír és ceruza, kitalálni, hogy mit mintázata bitek 474 00:30:32,560 --> 00:30:35,960 mert nem lehet csak kifejezni 0s és 1s jellemzően kódot. 475 00:30:35,960 --> 00:30:38,540 Nem mehet 00010 és így tovább. 476 00:30:38,540 --> 00:30:42,380 >> Meg kell, hogy vegye decimális vagy hexadecimális vagy oktális, vagy más jelöléseket. 477 00:30:42,380 --> 00:30:47,540 A legtöbb ember általában felvenni hexadecimális egyszerűen úgy, hogy minden számjegy 4 bit 478 00:30:47,540 --> 00:30:49,320 és meg tudod csinálni ezt a gyors matek. 479 00:30:49,320 --> 00:30:54,990 És én hullám kezem toupper, ami majdnem ugyanaz, úgy néz ki, szinte azonos. 480 00:30:54,990 --> 00:31:01,900 Toupper történik használata nem a vagy az üzemeltető, hanem ez a fickó, és df. 481 00:31:01,900 --> 00:31:09,300 Mit jelent a df képvisel? df? Valaki? >> [Hallgató] 255. 482 00:31:09,300 --> 00:31:12,780 255? Nem 255. Ez lenne ff. 483 00:31:12,780 --> 00:31:15,210 Majd hagyjuk ezt, mint egy kis gyakorlat. 484 00:31:15,210 --> 00:31:23,460 De ha megy a 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 és majd mi lesz utána 9? 485 00:31:23,460 --> 00:31:26,510 Mi vagyunk a fajta ki tizedesjegy, de hexadecimális ami utána jön 9? 486 00:31:26,510 --> 00:31:29,510 [Hallgató] a. >> Tehát egy a, b, c, d. 487 00:31:29,510 --> 00:31:33,470 Tudod kitalálni onnan milyen minta bitek d ténylegesen képvisel. 488 00:31:33,470 --> 00:31:38,850 És ha nem a matematika, látni fogjuk, hogy a maszk a végén kapok vissza azonos e. 489 00:31:38,850 --> 00:31:45,580 Ez f, minden 1s, és ez a d. Szóval df kijelenti, hogy maszk. Rendben van. 490 00:31:45,580 --> 00:31:50,980 És végül, nem hogy a dolgok rendezett szuper, szuper technikai, 491 00:31:50,980 --> 00:31:53,840 de tegyük fel akartunk írni egy programot, hogy működik ez. 492 00:31:53,840 --> 00:31:58,960 Hadd menjek előre, és a bináris, ami egy program nevű fájlt binary.c. 493 00:31:58,960 --> 00:32:02,050 És most hadd futni bináris és adj egy nem-negatív egész szám. 494 00:32:02,050 --> 00:32:03,960 Kezdjük egyszerű és írja be a 0-ra. 495 00:32:03,960 --> 00:32:09,010 Ez most egy olyan program, amely kiírja egy egész saját bináris ábrázolás. 496 00:32:09,010 --> 00:32:13,470 Szóval, ha játszani ezt a játékot újra és írja be a csak 1, kéne egy 32-bites ábrázolása 1. 497 00:32:13,470 --> 00:32:15,490 Ha ezt ismét 2, kéne ezt. 498 00:32:15,490 --> 00:32:19,310 Ha megteszem 7, kéne egy pár 1s a végén, és így tovább. 499 00:32:19,310 --> 00:32:22,740 Kiderült Azért említem ezt, mert a bitenkénti műveletek 500 00:32:22,740 --> 00:32:25,490 akkor ténylegesen egy másik dolgot is. 501 00:32:25,490 --> 00:32:29,130 Hozhat létre ezeket a maszkokat dinamikusan. 502 00:32:29,130 --> 00:32:32,800 Vessen egy pillantást erre egy utolsó részt vettek például bitenkénti műveleteket. 503 00:32:32,800 --> 00:32:35,490 Itt az első része a kód, figyelmezteti a felhasználót a száma, 504 00:32:35,490 --> 00:32:38,130 és ragaszkodik ahhoz, hogy adsz egy nem-negatív egész szám. 505 00:32:38,130 --> 00:32:39,780 Szóval ez a fajta old school cucc. 506 00:32:39,780 --> 00:32:41,980 De itt van valami, hogy ez a fajta érdekes. 507 00:32:41,980 --> 00:32:44,910 >> Hogyan megy a nyomtatás egy számot bináris? 508 00:32:44,910 --> 00:32:48,970 Először ismételget, amit a mi? 509 00:32:48,970 --> 00:32:52,270 Mi a méretének int tipikusan, legalábbis a készülék? >> [Hallgató] 4. 510 00:32:52,270 --> 00:32:57,130 Ez 4. Tehát 4 * 8 a 32 - 1 31. 511 00:32:57,130 --> 00:33:02,590 Tehát, ha kezdek számolni 31-től, amely képviseli, kiderül, 512 00:33:02,590 --> 00:33:07,630 csak fogalmilag, 31 bit, vagy a legmagasabb rendű bit, ami ezt a fickót ide, 513 00:33:07,630 --> 00:33:09,650 mivel ez lesz bit 0-ra. 514 00:33:09,650 --> 00:33:12,850 Szóval ez kicsit 01 ... 31 bit. 515 00:33:12,850 --> 00:33:14,950 Tehát mi ezt a kódot csinál? 516 00:33:14,950 --> 00:33:20,140 Figyelmeztetés ez a for ciklus, bár úgy néz ki, rejtélyes, éppen iterációjával 31-től lefelé 0-ra. Ennyi. 517 00:33:20,140 --> 00:33:24,530 Így az érdekes rész most kell e 5 sort itt. 518 00:33:24,530 --> 00:33:28,110 Figyeljük meg, hogy ebben a sorban vagyok nyilvánító változó nevű maszk 519 00:33:28,110 --> 00:33:30,790 hogy összhangban legyen a mi történetünk e sárga számok. 520 00:33:30,790 --> 00:33:32,200 És akkor mit keres ez? 521 00:33:32,200 --> 00:33:35,720 Ez egy másik bitenkénti üzemben általunk nem látott, nagy valószínűséggel. 522 00:33:35,720 --> 00:33:38,300 Ez a bal oldali eltolás operátora. 523 00:33:38,300 --> 00:33:40,060 Ez az operátor teszi ezt. 524 00:33:40,060 --> 00:33:44,920 Itt van az 1-es szám, és ha tudok bal shift, bal shift, 525 00:33:44,920 --> 00:33:49,260 Mit gondolsz, hogy az a hatása, tesz, hogy az egyes 1? 526 00:33:49,260 --> 00:33:51,290 Szó szerint változik át. 527 00:33:51,290 --> 00:33:57,540 Tehát, ha az 1-es szám, amit már a bal oldalon, és elkezdi az inicializálás i 31-ig, 528 00:33:57,540 --> 00:34:03,490 mi az, hogy fog csinálni? Ez fog tartani ez a szám 1 és váltani is 31 helyen ide. 529 00:34:03,490 --> 00:34:06,210 És mert ott nyilván nincs más számjegy mögötte, 530 00:34:06,210 --> 00:34:10,350 ezek alapértelmezés helyett 0s. 531 00:34:10,350 --> 00:34:15,120 Szóval, akkor elindul az 1-es szám, amely természetesen néz ki - 532 00:34:15,120 --> 00:34:18,659 és hadd hívjam át itt, a központban. 533 00:34:18,659 --> 00:34:22,139 Aztán ahogy váltani dolgokat a baloldalt, ez a fickó lényegében megy így. 534 00:34:22,139 --> 00:34:24,659 De amint te, hogy a 0 lesz kitöltött 535 00:34:24,659 --> 00:34:28,360 Ha váltani, hogy másodszor is megy így, és egy másik 0 lesz kitöltött 536 00:34:28,360 --> 00:34:31,000 >> Ön váltani újra, majd egy másik 0 lesz kitöltött 537 00:34:31,000 --> 00:34:37,900 Szóval, ha te ezt a dolgot az 1 << i 31 helyen, akkor a végén kapok egy maszk 538 00:34:37,900 --> 00:34:42,550 vagyis 32 karakter hosszú, a bal szélső melyek közül az egyik egy 1, 539 00:34:42,550 --> 00:34:45,199 az összes többi, amelyek egy 0. 540 00:34:45,199 --> 00:34:50,880 És kiderült, mint egy félre, változó egy számot a bal oldali, mint ez 541 00:34:50,880 --> 00:34:53,530 is véletlenül, és néha kényelmesen, 542 00:34:53,530 --> 00:34:57,520 azzal a hatással jár, hogy mit csinál ez a szám? >> [Hallgató] megduplázása azt. 543 00:34:57,520 --> 00:35:00,980 Duplázás, mert minden egyes oszlopok - az 1s hely, 2s hely, 4s hely, 544 00:35:00,980 --> 00:35:05,030 8s hely, 16s hely - they're minden megduplázása mint te menj balra. 545 00:35:05,030 --> 00:35:09,500 Vagy inkább, ha eltolja a 1s fogsz a végén kétszeres értékét a számot. 546 00:35:09,500 --> 00:35:12,070 Akkor a végén csinál érdekes átalakulások számjegyek 547 00:35:12,070 --> 00:35:15,640 eltolásával mindent újra ily módon 2 hatványai. 548 00:35:15,640 --> 00:35:17,150 Szóval, hogyan is működik ez? 549 00:35:17,150 --> 00:35:22,580 Ez akkor ad nekem egy maszkot ennyi 0s, kivéve az 1 pontosan a helyet akarom, 550 00:35:22,580 --> 00:35:27,920 , majd ezt a kifejezést, amely ellopták toupper.c, 551 00:35:27,920 --> 00:35:31,770 egyszerűen azt mondja hogy a szám n, hogy a felhasználó beírt, 552 00:35:31,770 --> 00:35:34,730 "És" azt a maszkot, és mit fogsz kapni? 553 00:35:34,730 --> 00:35:39,200 Fogsz kapni egy 1 ha van egy 1, hogy álarcos location, 554 00:35:39,200 --> 00:35:41,570 vagy fogsz kapni a 0, ha nem. 555 00:35:41,570 --> 00:35:44,370 És mindez program nem hatékony ez egy hurok, 556 00:35:44,370 --> 00:35:48,340 és létrehoz egy maszkot, 1 ide, majd egy 1 fölött van, akkor a 1 ide, 557 00:35:48,340 --> 00:35:52,950 és használja ezt a bitenkénti AND trükk mondani, van egy 1 bites a felhasználó input itt? 558 00:35:52,950 --> 00:35:59,220 >> Van egy 1 bites a felhasználó input itt? És ha igen, szó szerint nyomtatása 1, else print 0. 559 00:35:59,220 --> 00:36:03,780 Megcsináljuk ezt ints csak azért, mert ez az, amiért csináljuk 32 bit helyett 8, 560 00:36:03,780 --> 00:36:06,900 de mi vezettünk be, akkor ez a bitenkénti ÉS, ez a bitenkénti OR, 561 00:36:06,900 --> 00:36:10,450 és ez a bal oldali eltolás operátora, amelyek nem gyakran szörnyen hasznosnak 562 00:36:10,450 --> 00:36:12,230 de kiderült, hogy lehet. 563 00:36:12,230 --> 00:36:16,560 Sőt, ha úgy döntesz, hogy ez olyasvalami, mint egy sor Logikai 564 00:36:16,560 --> 00:36:21,260 csak azért, hogy képviselje igaz vagy hamis, tegyük fel, hogy akarta nyomon követheti-e vagy sem 565 00:36:21,260 --> 00:36:24,630 egy szoba tele 300 diák van jelen, 566 00:36:24,630 --> 00:36:29,420 akkor állapítsa meg egy tömb mérete 300 típusú bool, hogy kapsz 300 bools, 567 00:36:29,420 --> 00:36:33,090 és beállíthatja az egyes true, ha valaki itt van, és hamis egyébként. 568 00:36:33,090 --> 00:36:37,550 Miért van az, hogy a képviselet, hogy az adatszerkezet hatékony? 569 00:36:39,370 --> 00:36:44,800 Mi rossz van a tervezés, hogy az adatok struktúrája, egy sor 300 bools? 570 00:36:46,190 --> 00:36:49,600 Mi az a bool, sőt, a motorháztető alatt? 571 00:36:49,600 --> 00:36:52,310 Ez is valami, lehet, hogy nem ismerős. 572 00:36:52,310 --> 00:36:53,720 Kiderült, hogy nincs bool. 573 00:36:53,720 --> 00:36:56,620 Ne feledje, hogy a fajta létre, hogy a cs50.h fájl, 574 00:36:56,620 --> 00:36:58,630 amely maga is tartalmazza a szabvány bool. 575 00:36:58,630 --> 00:37:00,930 C a fajta ostoba, bár amikor a bool. 576 00:37:00,930 --> 00:37:04,880 Használ 8 bit, hogy képviselje minden bool, ami teljesen felesleges 577 00:37:04,880 --> 00:37:09,040 mert nyilván, hány bit van szüksége, hogy képviselje a bool? Csak 1. 578 00:37:09,040 --> 00:37:13,190 Így kiderül, hogy ha már megvan a képessége a bitenkénti operátorok 579 00:37:13,190 --> 00:37:17,760 manipulálására egyes bitek még a char, még egyetlen byte, 580 00:37:17,760 --> 00:37:21,380 kiderül, akkor csökkentheti a szükséges memória képviseletére valami hülyeséget 581 00:37:21,380 --> 00:37:25,490 ilyen részvétel stílusú adatszerkezet tényezővel 8. 582 00:37:25,490 --> 00:37:29,820 Ahelyett, hogy a 8 bit, hogy képviselje igaz vagy hamis, akkor szó szerint használja 583 00:37:29,820 --> 00:37:34,500 segítségével egyetlen byte minden nyolc tanuló az osztályban 584 00:37:34,500 --> 00:37:41,990 és változni fog 0-1 egyes bitek felhasználásával ilyen típusú alacsony szintű trükköket. 585 00:37:43,850 --> 00:37:49,460 Ez tényleg véget vetett az energiát. Van bármilyen kérdése van bitenkénti műveleteket? 586 00:37:49,460 --> 00:37:52,710 >> Igen. >> [Hallgató] Van egy kizárólagos vagy üzemeltető? 587 00:37:52,710 --> 00:37:56,440 Igen. Van egy kizárólagos vagy üzemben, hogy néz ki, mint ez, ^, a répa jelkép, 588 00:37:56,440 --> 00:38:02,070 ami azt jelenti, csak az első dolog, vagy a második dolog, amit lehet 1 a kimenet, hogy egy 1. 589 00:38:02,070 --> 00:38:07,750 Van egy nem, ~, ami lehetővé teszi, hogy a 0 invertálásához értéke és az 1 vagy fordítva is. 590 00:38:07,750 --> 00:38:11,600 És van még egy jobbra léptetés operátor, >>, amely ellentétes az, amit láttam. 591 00:38:11,600 --> 00:38:13,850 Rendben van. Nézzük a dolgokat most, hogy egy magasabb szintre. 592 00:38:13,850 --> 00:38:16,770 Azzal kezdtük, hogy beszélni szöveget, majd tömörítse 593 00:38:16,770 --> 00:38:19,650 képviselő a szöveget kevesebb számú bitet; 594 00:38:19,650 --> 00:38:22,890 beszélgettünk egy kicsit arról, hogy hogyan tudunk most kezdeni manipulálni a dolgokat a bitenkénti szinten. 595 00:38:22,890 --> 00:38:26,640 Nézzük most Nagyításhoz vissza 10.000 láb képviseletre 596 00:38:26,640 --> 00:38:29,250 A bonyolultabb dolgok, mint a grafika. 597 00:38:29,250 --> 00:38:32,950 Itt van egy a Németország lobogója, itt van egy Franciaországban. 598 00:38:32,950 --> 00:38:36,350 Ezek lehetnek képviselve fájlformátumban talán tudja - GIF-ek, például. 599 00:38:36,350 --> 00:38:40,030 Ha valaha is láttam egy képet az interneten, hogy véget ér. Gif, 600 00:38:40,030 --> 00:38:43,000 ez a Graphics Interchange Format. 601 00:38:43,000 --> 00:38:47,530 Ez a két zászló van egyfajta átadja magát a kompressziós 602 00:38:47,530 --> 00:38:52,050 milyen talán nyilvánvaló oka? >> [Hallhatatlan tanulói válasz] 603 00:38:52,050 --> 00:38:53,440 Sok az ismétlés, ugye? 604 00:38:53,440 --> 00:38:57,270 Annak érdekében, hogy küldjön Németország lobogója, gondolom, ez mint egy kép a képernyőn 605 00:38:57,270 --> 00:38:59,030 vissza a Scratch nap. 606 00:38:59,030 --> 00:39:02,380 Lehet, hogy emlékszem, hogy van az egyes képpontok, amelyek alkotják egy képet. 607 00:39:02,380 --> 00:39:06,650 >> Van egy egész sor fekete pontok és a másik egész sor fekete pöttyökkel. 608 00:39:06,650 --> 00:39:10,110 Van egy csomó sor fekete pöttyök hogy mi lehetett látni, ha valóban nagyított, 609 00:39:10,110 --> 00:39:13,370 nagyon szeretem, amikor nagyított részt Rob arcát Photoshop. 610 00:39:13,370 --> 00:39:15,500 Amint megkaptuk egyre mélyebbre és mélyebbre és mélyebbre a kép, 611 00:39:15,500 --> 00:39:19,990 Elkezdte látta a pixelation, minden négyzetek komponált szeme ebben az ügyben. 612 00:39:19,990 --> 00:39:24,130 Ugyanez a helyzet itt. Ha nagyított egy kicsit, akkor lásd az egyes pontokat. 613 00:39:24,130 --> 00:39:27,110 Nos, ez a fajta hulladék bitek. 614 00:39:27,110 --> 00:39:32,120 Ha egy harmadik a lobogó fekete és egy harmadik a lobogó sárga és így tovább, 615 00:39:32,120 --> 00:39:34,860 miért nem lehet valahogy tömöríteni ezt a zászlót? 616 00:39:34,860 --> 00:39:39,560 És még a francia zászló lehet tömörített ellenére, hogy a minta egy kicsit más. 617 00:39:39,560 --> 00:39:44,120 Kiderült, hogy a GIF fájl formátum veszteségmentes tömörítési formátum, 618 00:39:44,120 --> 00:39:48,420 ami azt jelenti, hogy a kép, mint a német zászló van, 619 00:39:48,420 --> 00:39:53,540 tudsz dobni egy csomó a bitek minőség feláldozása nélkül. 620 00:39:53,540 --> 00:39:55,340 Ez ellentétben áll valami hasonló JPEG, 621 00:39:55,340 --> 00:39:57,050 amellyel a legtöbben valószínűleg jobban ismerik. 622 00:39:57,050 --> 00:39:59,000 Facebook fotók és Flickr Fotók és hasonlók 623 00:39:59,000 --> 00:40:02,200 szinte mindig mentésre JPEG amikor ők Feltöltött, 624 00:40:02,200 --> 00:40:08,100 de JPEG egy veszteséges - veszteséges - format ahol te dobja bit 625 00:40:08,100 --> 00:40:10,430 de akkor is dobni minőség. 626 00:40:10,430 --> 00:40:13,890 És így ha tömöríteni fotókat Photoshop vagy töltse fel őket a Facebook 627 00:40:13,890 --> 00:40:15,580 vagy az azokkal egy igazán szar telefon, 628 00:40:15,580 --> 00:40:19,510 tudod, hogy a kép kezd nagyon foltos és pixelated, 629 00:40:19,510 --> 00:40:22,290 és ez azért van, mert ez, hogy összenyomja a számítógép vagy telefon 630 00:40:22,290 --> 00:40:24,550 szó szerint dobtak információ található. 631 00:40:24,550 --> 00:40:28,500 De GIF elképesztő, hogy tudja használni kevesebb bitet, mint azt talán alapértelmezés szerint 632 00:40:28,500 --> 00:40:30,750 elvesztése nélkül bármilyen információt. 633 00:40:30,750 --> 00:40:32,410 >> És lényegében úgy teszi a következő. 634 00:40:32,410 --> 00:40:38,740 Ahelyett, hogy tárolja a fájl, mint a BMP lenne egy RGB hármas fekete, fekete, fekete, fekete, 635 00:40:38,740 --> 00:40:42,570 fekete, fekete, fekete, fekete, fekete, fekete, fekete, fekete, és így tovább, 636 00:40:42,570 --> 00:40:45,640 inkább a GIF formátum fogja mondani, hogy "fekete", 637 00:40:45,640 --> 00:40:48,330 majd "Ismételjük meg ezt a 100-szor", vagy valami ilyesmi. 638 00:40:48,330 --> 00:40:52,280 "Fekete, ismételje meg ezt a 100-szor, fekete, ismételje meg ezt a 100-szor ..." 639 00:40:52,280 --> 00:40:54,530 "Sárga, ismételje meg ezt a 100-szor." 640 00:40:54,530 --> 00:40:57,200 És ez így emlékszik lényegében a bal szélső pixel 641 00:40:57,200 --> 00:41:02,160 majd kódolja valahogy az elképzelést, hogy az ismétlődő pixel újra és újra. 642 00:41:02,160 --> 00:41:06,110 Így GIF ezután tömöríteni maguk elvesztése nélkül bármilyen információt. 643 00:41:06,110 --> 00:41:09,510 De ha kellett kitalálni, ha ez az algoritmus GIF használat, 644 00:41:09,510 --> 00:41:13,180 melyik zászlók, annak ellenére néznek azonos méretű, 645 00:41:13,180 --> 00:41:19,620 lesz kisebb, ha menti a lemezre, mint a GIF? >> [Hallgató] Németország. 646 00:41:19,620 --> 00:41:21,660 Németország lesz kisebb? Miért? 647 00:41:21,660 --> 00:41:26,620 [Hallgató] Mert te ismételd meg sok-sok alkalommal vízszintesen 648 00:41:26,620 --> 00:41:29,010 és akkor ismételje meg egy másik alkalommal. >> Pontosan. 649 00:41:29,010 --> 00:41:32,020 Mert az emberek, akik feltalálták GIF csak ilyen önkényesen úgy döntött, 650 00:41:32,020 --> 00:41:36,040 hogy az ismétlés lesz mobilizálható horizontálisan és nem oldalirányban. 651 00:41:36,040 --> 00:41:40,900 Van egy sokkal több ismétlés oldalirányban itt a német zászló, mint a francia zászlót. 652 00:41:40,900 --> 00:41:44,430 Tehát ha valóban nyitni egy mappát a merevlemezünkön, amely ezeket a GIF, 653 00:41:44,430 --> 00:41:51,920 el lehet látni, hogy a német zászló itt 2 kilobyte-os és a Francia egyik 4 kilobyte. 654 00:41:51,920 --> 00:41:54,080 Előfordul, hogy egy véletlen egybeesés, hogy az egyik kétszer a másik, 655 00:41:54,080 --> 00:41:57,960 de ez valójában az esetben, ha a francia zászló sokkal nagyobb. 656 00:41:57,960 --> 00:42:01,250 >> Annak ellenére, hogy mi beszélünk grafika, ugyanaz ötleteket lehet alkalmazni 657 00:42:01,250 --> 00:42:05,150 Nem dolgok, mint a zászló, de képeket egy kicsit bonyolultabb. 658 00:42:05,150 --> 00:42:08,170 Ha veszel egy kép egy almát, biztosan van egy csomó párhuzamos ott, 659 00:42:08,170 --> 00:42:11,040 így valahogy emlékszem, hogy az alapértelmezett háttér kék 660 00:42:11,040 --> 00:42:13,230 és nem, mivel a jobb oldali kép sugallja, 661 00:42:13,230 --> 00:42:16,830 meg kell emlékezni a szín minden egyes pixel ezen a képen. 662 00:42:16,830 --> 00:42:21,060 Így tudjuk dobni bit idegenben vannak információk elvesztése nélkül. 663 00:42:21,060 --> 00:42:23,340 Az alma még mindig úgy néz ki, mint az imént. 664 00:42:23,340 --> 00:42:27,510 Ebben a példában itt, akkor lehet látni, mi történik a filmben. 665 00:42:27,510 --> 00:42:31,970 Ezek képviselik old-school film tekercsek, amellyel a felső kép van 666 00:42:31,970 --> 00:42:36,900 van egy RV vezetői az elmúlt egy házat, és egy fa. 667 00:42:36,900 --> 00:42:42,130 És hogy van hajtja az elmúlt balról jobbra, mi nyilván nem változik? 668 00:42:42,130 --> 00:42:45,320 A ház nem megy sehova, és a fa nem megy sehova. 669 00:42:45,320 --> 00:42:47,700 Az egyetlen dolog, ami mozog a van ebben az ügyben. 670 00:42:47,700 --> 00:42:51,650 Szóval mint Háttér Változatlan sugallja, mit lehet csinálni a filmekben 671 00:42:51,650 --> 00:42:56,530 hasonlóképpen csak dobd el információ, amely nem változik a képkockák között. 672 00:42:56,530 --> 00:42:58,900 Ezt általában nevezik interframe tömörítés 673 00:42:58,900 --> 00:43:02,120 ahol, ha ez a keret úgy néz ki, majdnem azonos az ezt, 674 00:43:02,120 --> 00:43:05,390 ne zavarja tárolása a lemezen bármely azonos információkat 675 00:43:05,390 --> 00:43:09,250 e köztes képkockák, nézzük csak a kulcs képkockák néha 676 00:43:09,250 --> 00:43:13,420 hogy valóban tárolja ezt az információt redundáns mint egy kis józanság megtekintéséhez. 677 00:43:13,420 --> 00:43:18,620 >> Ezzel szemben, egy másik megközelítést tömörítése videó ebben második és alacsonyabb példa itt, 678 00:43:18,620 --> 00:43:23,970 ahol ahelyett, áruház 30 kép, miért nem csak tárolja 15 képkocka másodpercenként helyette? 679 00:43:23,970 --> 00:43:27,070 Ahelyett, hogy a film milyen szépen folyik, tökéletesen, 680 00:43:27,070 --> 00:43:30,060 lehet, hogy néz ki, mint ez a dadogás egy kicsit, egy kis old school, 681 00:43:30,060 --> 00:43:37,190 de a nettó hatása az lesz, hogy jóval kevesebb bitet, mint ami egyébként szükséges. 682 00:43:37,190 --> 00:43:39,240 Szóval, ha ez hagyja minket? 683 00:43:39,240 --> 00:43:41,700 Ez egy kicsit félre, hogy hol máshol lehet menni a tömörítés. 684 00:43:41,700 --> 00:43:45,140 További e, hogy egy osztály, mint a CS175 itt. 685 00:43:45,140 --> 00:43:46,990 Itt van egy másik példa a video. 686 00:43:46,990 --> 00:43:49,190 Ha a méhek az egyetlen dolog, mozgó, 687 00:43:49,190 --> 00:43:51,790 akkor tényleg dobja információt e középen keretek 688 00:43:51,790 --> 00:43:55,260 mert a virág és az ég és a levelek nem változnak. 689 00:43:55,260 --> 00:43:57,960 De nézzük most fontolóra egy utolsó dolog. 690 00:43:57,960 --> 00:44:03,890 A következő 5 percig hagyjuk C mögött örökre előadás? Igen. Nem a psets, mégis. 691 00:44:03,890 --> 00:44:10,210 Utolsó történet C hőmérsékleten, majd eljutunk a nagyon szexi stuff 692 00:44:10,210 --> 00:44:13,870 bevonásával HTML és webes és woo-hoo. Rendben van. 693 00:44:13,870 --> 00:44:16,050 Itt vagyunk. Ez a motiváció. 694 00:44:16,050 --> 00:44:20,020 Kiderült, hogy egész idő alatt, amikor mi már írt programokat futunk csenget. 695 00:44:20,020 --> 00:44:23,890 És csenget, most már azt mondta, mivel az első héten elég sok, úgy forráskód 696 00:44:23,890 --> 00:44:25,740 alakítja tárgykód. 697 00:44:25,740 --> 00:44:28,540 Beletelik C alakítja 0s és 1s. 698 00:44:28,540 --> 00:44:32,150 Már a fajta hazudott neked néhány hétig, mert ez nem annyira egyszerű. 699 00:44:32,150 --> 00:44:36,750 >> Van egy sokkal több folyik a motorháztető alatt, amikor fut a program, mint a csengés. 700 00:44:36,750 --> 00:44:39,560 Tény, hogy a folyamat összeállítása a program valóban össze, 701 00:44:39,560 --> 00:44:42,210 ahogy azt előhívni Rob videó fordítóprogramok, 702 00:44:42,210 --> 00:44:47,580 ezekbe 4 lépésben: előkezelést, összeállítása önmagában, összeszerelés, és összekapcsolása. 703 00:44:47,580 --> 00:44:51,950 De az osztályban, és a legtöbb ember a világon jellemzően összefoglalja az összes lépések 704 00:44:51,950 --> 00:44:54,410 A csak "fordítás". 705 00:44:54,410 --> 00:44:58,070 De ha kezdjük forráskód, mint ez, emlékszem ez talán a legegyszerűbb C program 706 00:44:58,070 --> 00:45:03,530 azt írtam eddig, emlékeztetni arra, hogy amikor összeállítják véget ér néz ki, mint ez. 707 00:45:03,530 --> 00:45:07,310 De van valójában egy közbenső lépést, és ezek a lépések a következők. 708 00:45:07,310 --> 00:45:10,750 Először is ez a dolog legtetején e és a legtöbb program, 709 00:45:10,750 --> 00:45:13,550 # Include 710 00:45:13,550 --> 00:45:17,210 Mit jelent a # include nem nekünk? 711 00:45:17,210 --> 00:45:24,150 Ez elég sok példányban és krém tartalmát stdio.h az én fájlt, hogy miért? 712 00:45:24,150 --> 00:45:27,220 Miért érdekel a tartalma stdio.h? Mi van benne az érdeklődés? 713 00:45:27,220 --> 00:45:32,310 Printf nyilatkozata, a prototípus, úgy, hogy a fordító, akkor tudja, hogy mire gondolok 714 00:45:32,310 --> 00:45:34,900 amikor megemlítem ezt a funkciót printf. 715 00:45:34,900 --> 00:45:39,390 Így az 1. lépést összeállításában előre-feldolgozás, ahol a program, mint a zengés 716 00:45:39,390 --> 00:45:43,450 vagy néhány segítő program csengés jön beolvassa a kódot, felülről lefelé, 717 00:45:43,450 --> 00:45:47,740 balról jobbra, és minden alkalommal, amikor látja a # jelet, majd egy kulcsszó, mint többek között, 718 00:45:47,740 --> 00:45:53,980 ellátja a művelet, a másolás és beillesztés ebben az esetben stdio.h be a fájlt. 719 00:45:53,980 --> 00:45:55,510 Ez az 1. lépést. 720 00:45:55,510 --> 00:45:59,620 Aztán van egy sokkal nagyobb C fájlt, mert a hatalmas másolás, beillesztés feladat ez történt. 721 00:45:59,620 --> 00:46:01,710 >> 2. lépés Most összeállításában. 722 00:46:01,710 --> 00:46:04,880 De kiderült fordítás úgy forráskódot, hogy így néz ki 723 00:46:04,880 --> 00:46:08,160 és kiderül, hogy valami, ami úgy néz ki, mint ez, 724 00:46:08,160 --> 00:46:12,560 amely azok számára ismerős a neve? >> [Hallgató] Assembly. >> Assembly nyelvet. 725 00:46:12,560 --> 00:46:16,700 Ez valójában valamit, ha veszel CS61 fogsz merülni részletesebben. 726 00:46:16,700 --> 00:46:22,380 Ez csak arról szól, olyan közel, mint eljuthat írás 0s és 1s magad 727 00:46:22,380 --> 00:46:25,850 de írás dolgok oly módon, hogy továbbra is teszi legalább egy kis értelme. 728 00:46:25,850 --> 00:46:30,760 Ezek a gép utasításait, és ha görgessen a fő funkciója van, 729 00:46:30,760 --> 00:46:35,470 észre, hogy itt van ez a push-utasítás, helyezze oktatás, kivonni oktatás, 730 00:46:35,470 --> 00:46:38,550 hívás utasítás, és így tovább. 731 00:46:38,550 --> 00:46:42,930 Amikor meghallja, hogy a számítógép az Intel Inside, 732 00:46:42,930 --> 00:46:46,180 van egy Intel CPU a Mac vagy PC, mit jelent ez? 733 00:46:46,180 --> 00:46:51,200 A CPU jön épített cégek, mint az Intel megértéséhez bizonyos utasításokat. 734 00:46:51,200 --> 00:46:55,770 Nincs ötlete, mi működik, mint a swap vagy fő önmagukban, 735 00:46:55,770 --> 00:47:00,060 de nem tudom, mi nagyon alacsony szintű utasítások, mint például összeadás, kivonás, push, 736 00:47:00,060 --> 00:47:02,430 mozgatni, hívja, és így tovább vannak. 737 00:47:02,430 --> 00:47:06,170 Tehát, ha fordítani C kódot assembly nyelvre, 738 00:47:06,170 --> 00:47:11,820 Ön nagyon felhasználóbarát megjelenésű kód alakítjuk valami úgy néz ki, mint ez, 739 00:47:11,820 --> 00:47:21,670 hogy szó szerint mozog bájt vagy 4 byte körül olyan kis egység, és ki a CPU. 740 00:47:21,670 --> 00:47:26,820 De végül, mikor csenget kész arra, hogy e képviselet a programunk 741 00:47:26,820 --> 00:47:30,940 -ba 0s és 1s, majd a lépés hívott összeszerelés történik, 742 00:47:30,940 --> 00:47:33,850 és ez ismét minden történik az egy szempillantás alatt, amikor fut csenget. 743 00:47:33,850 --> 00:47:39,300 Kezdjük itt, kiadja a fájlt, mint ez, és akkor átalakítja ezeket 0s és 1s. 744 00:47:39,300 --> 00:47:42,000 És ha azt szeretnénk, hogy menjen vissza egy bizonyos ponton, és valóban ez az intézkedés, 745 00:47:42,000 --> 00:47:48,220 ha bemegy hello1.c--ez az egyik legelső programok néztük - 746 00:47:48,220 --> 00:47:53,710 általában szeretnénk fordítani ezt csenget hello1.c és ez ad nekünk a.out. 747 00:47:53,710 --> 00:47:59,890 Ezzel szemben, ha ehelyett, hogy ez a zászló-S, mit kapsz a hello1.s 748 00:47:59,890 --> 00:48:02,750 és akkor valóban látni az assembly. 749 00:48:02,750 --> 00:48:05,750 >> Én ezt egy nagyon rövid programot, de ha megy vissza Scramble 750 00:48:05,750 --> 00:48:08,740 illetve helyreállítása, vagy bármilyen program, amit írtam, és csak kíváncsiságból 751 00:48:08,740 --> 00:48:13,240 szeretné látni, mit néznek ki, mi ténylegesen táplálni a CPU, 752 00:48:13,240 --> 00:48:15,700 tudod használni, hogy az-S zászlót csenget. 753 00:48:15,700 --> 00:48:17,770 De aztán végül, van még egy megvagy. 754 00:48:17,770 --> 00:48:21,810 Itt vannak a 0s és 1s, hogy képviselje a végrehajtása hello, világ. 755 00:48:21,810 --> 00:48:25,530 De használt valaki feladata az én program. 756 00:48:25,530 --> 00:48:28,710 Így annak ellenére, hogy a folyamat már veszek hello.c, 757 00:48:28,710 --> 00:48:34,280 ez lesz a fordított assembly kódot, és akkor lesz összeállítva is 0s és 1s, 758 00:48:34,280 --> 00:48:37,460 Csak 0s és 1s amelyek kiadott ezen a ponton az időben 759 00:48:37,460 --> 00:48:40,270 azok, amelyek eredményeként az én kódot. 760 00:48:40,270 --> 00:48:44,400 De az a személy, aki ezt írta printf, ők állították össze-kód 20 évvel ezelőtt 761 00:48:44,400 --> 00:48:47,000 és ez most már telepítve van valahol a készüléket, 762 00:48:47,000 --> 00:48:51,610 így valahogy össze kell fésülni az ő 0s és 1s az én 0s és 1s, 763 00:48:51,610 --> 00:48:56,160 és ez elvezet minket a 4. és utolsó lépés a fordítás, az úgynevezett összekötő. 764 00:48:56,160 --> 00:48:58,680 Tehát a bal oldali van pontosan ugyanaz a kép, mint az előbb: 765 00:48:58,680 --> 00:49:02,580 hello.c válik assembly kódot válik 0s és 1s. 766 00:49:02,580 --> 00:49:05,960 De emlékszem, hogy a szabványos I / O könyvtár kódomat, 767 00:49:05,960 --> 00:49:10,350 és ez azt jelenti, valahol a számítógépen van egy nevű fájlt stdio.c 768 00:49:10,350 --> 00:49:13,980 vagy legalábbis a lefordított verziót erről, mert valaki néhány évvel ezelőtt 769 00:49:13,980 --> 00:49:18,530 összeállítani stdio.c figyelembe assembly kódot, majd egy csomó 0s és 1s. 770 00:49:18,530 --> 00:49:21,130 Ez az, amit ismert, mint a statikus vagy dinamikus könyvtár. 771 00:49:21,130 --> 00:49:23,350 Ez néhány fájl ül valahol a készülékben. 772 00:49:23,350 --> 00:49:28,710 >> De végül, van, hogy az én 0s és 1s és az adott személy 0s és 1s 773 00:49:28,710 --> 00:49:32,760 és valahogy kapcsolja össze őket, a szó szoros értelmében egyesítik a 0s és 1s 774 00:49:32,760 --> 00:49:37,900 egyetlen a.out nevű fájlt vagy hello1 vagy bármi Felhívtam a programot 775 00:49:37,900 --> 00:49:43,320 úgy, hogy a végeredmény az összes az 1 és 0, hogy amennyiben alkotják a programot. 776 00:49:43,320 --> 00:49:45,660 Szóval egész idő alatt ebben a félévben, ha már használja csenget 777 00:49:45,660 --> 00:49:48,750 és még újabban a make ahhoz, hogy fusson csenget, 778 00:49:48,750 --> 00:49:53,580 minden ilyen lépést történt valami azonnal, de nagyon tudatosan. 779 00:49:53,580 --> 00:49:57,830 És ha továbbra is a számítógép-tudomány, nevezetesen CS61, 780 00:49:57,830 --> 00:50:00,850 ez az a réteg, amely akkor is húzza vissza le van 781 00:50:00,850 --> 00:50:06,980 beszél a hatékonyság, a biztonság vonatkozásai vannak, és hasonló ezen alacsonyabb szintű részletek. 782 00:50:06,980 --> 00:50:09,220 De, hogy mi vagyunk arról, hogy elhagyja C mögött. 783 00:50:09,220 --> 00:50:11,420 Menjünk előre, és hogy a mi 5-perces szünet most 784 00:50:11,420 --> 00:50:14,190 és mikor jön vissza: az interneten. 785 00:50:17,280 --> 00:50:19,170 Rendben van. Mi vissza. 786 00:50:19,170 --> 00:50:23,590 Most kezdődik a pillantást nem csak HTML, mert mint látni fogod, 787 00:50:23,590 --> 00:50:26,050 HTML maga valójában nagyon egyszerű 788 00:50:26,050 --> 00:50:29,270 de tényleg a webes programozás általában hálózatba általában 789 00:50:29,270 --> 00:50:31,770 és, hogy minden ilyen technológia találkoznak 790 00:50:31,770 --> 00:50:35,400 lehetővé teszi számunkra, hogy hozzon létre sokkal kifinomultabb programok tetején az internet 791 00:50:35,400 --> 00:50:38,690 mint eddig voltunk képesek e fekete-fehér ablakok. 792 00:50:38,690 --> 00:50:42,140 Sőt, ezen a ponton a félév ellenére töltjük viszonylag kevesebb időt 793 00:50:42,140 --> 00:50:46,200 a PHP, HTML, CSS, JavaScript, SQL és több, 794 00:50:46,200 --> 00:50:48,480 legtöbb tanuló nem a végén csinál végleges projekteket, amelyek web-alapú 795 00:50:48,480 --> 00:50:51,230 mert mint látni fogja, a háttérben most már a C 796 00:50:51,230 --> 00:50:54,450 nagyon alkalmazni ezeket a magasabb szintű nyelveken. 797 00:50:54,450 --> 00:50:56,800 >> És ahogy elkezd gondolkodni a végleges projekt, 798 00:50:56,800 --> 00:50:59,940 amely, akárcsak Problem Set 0, ahol arra ösztönözték 799 00:50:59,940 --> 00:51:02,160 tenni a legtöbb semmi érdeke, hogy Ön Scratch, 800 00:51:02,160 --> 00:51:05,790 a végleges projekt a lehetőséget, hogy a megtalált tudás és hozzáértés a C 801 00:51:05,790 --> 00:51:09,850 vagy PHP vagy JavaScript vagy hasonló egy körre 802 00:51:09,850 --> 00:51:12,330 és hozza létre a maga szoftver a világ látni. 803 00:51:12,330 --> 00:51:17,770 És vetőmag Önt ötleteket, tudom, hogy akkor irány ide, projects.cs50.net. 804 00:51:17,770 --> 00:51:21,800 Minden évben keresik ötleteket oktatók és oktatói és hallgatói csoportok az egyetemen 805 00:51:21,800 --> 00:51:27,330 csak azért, hogy nyújtsák be ötleteket érdekes dolog, hogy meg lehet oldani a számítógépek, 806 00:51:27,330 --> 00:51:29,860 használó weboldalak szoftver segítségével. 807 00:51:29,860 --> 00:51:32,360 Szóval, ha küzd, hogy dolgozzon ki egy ötlet a saját, 808 00:51:32,360 --> 00:51:35,790 minden eszközzel mozoghat az ötletek ott ebben az évben és az utolsó. 809 00:51:35,790 --> 00:51:39,990 Teljesen rendben van, hogy kezelni egy projekt, amely már foglalkozott korábban. 810 00:51:39,990 --> 00:51:44,540 Láttuk sok apps látva állapotát mosoda campus, 811 00:51:44,540 --> 00:51:47,000 sok apps navigációt az étkezőben menü 812 00:51:47,000 --> 00:51:49,540 sok apps történő navigálás során katalógus és hasonlók. 813 00:51:49,540 --> 00:51:53,680 És valóban, egy jövőbeli előadás és a jövőben szemináriumokon, 814 00:51:53,680 --> 00:51:57,750 fogjuk be, hogy néhány nyilvánosan hozzáférhető API-k, mind a kereskedelemben kapható 815 00:51:57,750 --> 00:52:02,520 valamint itt elérhető CS50 az egyetemen úgy, hogy az adatokhoz való hozzáférés 816 00:52:02,520 --> 00:52:04,910 és hajtsa érdekes dolgokat vele. 817 00:52:04,910 --> 00:52:09,380 Tehát inkább a végleges projekt néhány nap, amikor engedje a specifikáció, 818 00:52:09,380 --> 00:52:12,990 de most, tudom, hogy tud dolgozni egyedül, vagy egy vagy két barát 819 00:52:12,990 --> 00:52:16,010 a legtöbb bármely projekt érdekes az Ön számára. 820 00:52:16,010 --> 00:52:18,080 Az internet. 821 00:52:18,080 --> 00:52:22,300 Menj előre, és húzza ki a laptop, akkor megy facebook.com az első alkalommal, 822 00:52:22,300 --> 00:52:27,020 mivel nem jelentkezett be a közelmúltban, és nyomd meg az Entert. Pontosan mi történik? 823 00:52:27,020 --> 00:52:30,150 >> Ha Enter leütése a számítógépen, egy csomó lépést 824 00:52:30,150 --> 00:52:32,600 kezd valami varázslatos történik. 825 00:52:32,600 --> 00:52:35,960 Szóval itt a bal oldalon, a web szerver, mint a Facebook van a jobb oldalon, 826 00:52:35,960 --> 00:52:42,500 és valahogy te ezzel a nyelv úgynevezett HTTP, Hypertext Transfer Protocol. 827 00:52:42,500 --> 00:52:46,770 HTTP nem egy programozási nyelv. Ez inkább egy protokoll. 828 00:52:46,770 --> 00:52:52,310 Ez egy sor egyezmények böngészők és webszerverek használni, amikor összenyitható. 829 00:52:52,310 --> 00:52:54,360 És hogy ez mit jelent a következő. 830 00:52:54,360 --> 00:52:56,790 Ugyanúgy, mint a valós világban, már ezek az egyezmények 831 00:52:56,790 --> 00:53:00,140 ahol, ha megfelel néhány ember először, ha nem bánod humoring ide, 832 00:53:00,140 --> 00:53:03,980 Lehet, hogy jön hozzád, azt mondják: "Hi, my name is David." >> Szia, David. A nevem Sammy. 833 00:53:03,980 --> 00:53:05,770 "Szia, David. Nevem Sammy." 834 00:53:05,770 --> 00:53:08,310 Szóval most már csak részt ebben a fajta ostoba emberi jegyzőkönyv 835 00:53:08,310 --> 00:53:12,200 ahol már kezdeményezte a protokollt, Sammy válaszolt, 836 00:53:12,200 --> 00:53:15,060 mi már kezet, és az ügylet teljes. 837 00:53:15,060 --> 00:53:18,260 HTTP nagyon hasonló szellemben. 838 00:53:18,260 --> 00:53:23,350 Amikor a böngésző kéri www.facebook.com, 839 00:53:23,350 --> 00:53:27,020 amit a böngésző tényleg csinál kiterjeszti a kezét, hogy úgy mondjam, 840 00:53:27,020 --> 00:53:29,960 a szerver és ez megküldésével egy üzenetet. 841 00:53:29,960 --> 00:53:34,220 És ez az üzenet általában valami ilyesmi kap - mit akarsz? - 842 00:53:34,220 --> 00:53:38,740 vigyen a hazai oldalon, ami jellemzően jelöli egy perjel a végén egy URL-t. 843 00:53:38,740 --> 00:53:43,790 És csak hogy tudd, hogy milyen nyelven beszélek, én a böngésző fogom mondani 844 00:53:43,790 --> 00:53:46,930 hogy én beszélek HTTP 1.1-es verziója, 845 00:53:46,930 --> 00:53:51,980 És azt is jó intézkedés, azt fogom mondani, hogy a befogadó, hogy szeretnék a honlapján 846 00:53:51,980 --> 00:53:54,120 a facebook.com. 847 00:53:54,120 --> 00:53:57,730 Általában egy web böngésző, tudtán kívül van, az emberi, 848 00:53:57,730 --> 00:54:03,350 ezt az üzenetet küldi az interneten keresztül, ha egyszerűen írja www.facebook.com, 849 00:54:03,350 --> 00:54:05,370 >> Adja meg, a böngésző. 850 00:54:05,370 --> 00:54:07,300 És mit Facebook válaszolni? 851 00:54:07,300 --> 00:54:12,540 A választ néhány hasonló kinézetű rejtélyes adatok, hanem sokkal több. 852 00:54:12,540 --> 00:54:14,310 Hadd menjek előre, hogy a Facebook honlapján itt. 853 00:54:14,310 --> 00:54:17,480 Ez a képernyőn, hogy a legtöbben valószínűleg soha nem látni, ha Maradj bejelentkezve egész idő alatt, 854 00:54:17,480 --> 00:54:19,830 de ez valójában saját honlapján. 855 00:54:19,830 --> 00:54:24,150 Ha ezt a Chrome-ban, észreveszi, hogy akkor húzza fel ezeket a kis helyi menük. 856 00:54:24,150 --> 00:54:26,980 A Chrome, akár Mac OS, Windows, Linux, vagy hasonlók, 857 00:54:26,980 --> 00:54:31,840 ha Irányítsd kattintással vagy a bal gombbal, akkor általában felhúz egy menü, hogy néz ki, mint ez, 858 00:54:31,840 --> 00:54:35,870 ahol néhány lehetőség várja, melyek közül az egyik Oldal forrásának megtekintése. 859 00:54:35,870 --> 00:54:39,920 Azt is általában kap ezekre a dolgokra megy, a Nézet menüt, és dugta körül. 860 00:54:39,920 --> 00:54:42,750 Például itt a Nézet, Fejlesztő ugyanaz a dolog. 861 00:54:42,750 --> 00:54:45,780 Én megyek előre, és nézd Oldal forrásának megtekintése. 862 00:54:45,780 --> 00:54:50,800 Amit látni fogja a HTML, hogy Mark írt, hogy képviselje facebook.com. 863 00:54:50,800 --> 00:54:55,910 Ez egy teljes káosz van, de látni fogjuk, hogy ez teszi egy kicsit több értelme előtt hosszú. 864 00:54:55,910 --> 00:54:59,840 De van néhány minta itt. Hadd görgessen lefelé a dolgokat, mint ez. 865 00:54:59,840 --> 00:55:05,730 Ez nehéz egy emberi olvasni, de észre, hogy itt van ez a minta szögletes zárójelben 866 00:55:05,730 --> 00:55:10,360 kulcsszavakkal, mint lehetőséget, olyan kulcsszavakat, mint érték, néhány idézett húrok. 867 00:55:10,360 --> 00:55:15,660 Ez az, ahol, amikor aláírta a legelső alkalommal, meghatározott, mi a születési év. 868 00:55:15,660 --> 00:55:19,020 Ez a legördülő menüből a születési év valahogy kódolva van 869 00:55:19,020 --> 00:55:23,870 ezen a nyelven nevű HTML HyperText Markup Language. 870 00:55:23,870 --> 00:55:27,730 Más szóval, ha a böngésző kér egy weboldalt, 871 00:55:27,730 --> 00:55:30,610 szól az egyezmény úgynevezett HTTP. 872 00:55:30,610 --> 00:55:35,170 De mit facebook.com válaszoltak erre a kérésre? 873 00:55:35,170 --> 00:55:38,260 >> A választ néhány ilyen rejtélyes üzenetek, mint látni fogjuk egy pillanat. 874 00:55:38,260 --> 00:55:43,760 De a legtöbb válasz formájában HTML HyperText Markup Language. 875 00:55:43,760 --> 00:55:47,170 Ez a tényleges nyelvet, amelyen egy internetes oldalon van írva. 876 00:55:47,170 --> 00:55:52,030 És mi az a böngésző tényleg akkor van kézhezvételét valami úgy néz ki, mint ez, 877 00:55:52,030 --> 00:55:57,120 olvassa felülről lefelé, balról jobbra, és minden alkalommal, amikor lát egy ilyen szögletes zárójelben 878 00:55:57,120 --> 00:56:03,370 majd egy kulcsszó, mint opció, megjeleníti azt leíró nyelv megfelelő módon. 879 00:56:03,370 --> 00:56:06,820 Ebben az esetben, akkor megjelenik egy legördülő menü éve. 880 00:56:06,820 --> 00:56:09,240 De ismétlem, ez egy teljes rendetlenség nézni. 881 00:56:09,240 --> 00:56:16,630 Ez nem azért, mert a Facebook fejlesztők nyilvánulnak 0-5-ös típusú, például. 882 00:56:16,630 --> 00:56:20,190 Ez azért van, mert a legtöbb kódot írnak valójában, írott gyönyörûen, 883 00:56:20,190 --> 00:56:22,450 is megjegyezte, szépen tagolt, és hasonlók, 884 00:56:22,450 --> 00:56:26,080 de természetesen a gépek, számítógépek, böngészők tényleg nem érdekel 885 00:56:26,080 --> 00:56:27,890 hogy a kódot jól stílusú. 886 00:56:27,890 --> 00:56:33,100 És valóban, ez teljesen felesleges, hogy elérje a Tab gombot valamennyi alkalommal 887 00:56:33,100 --> 00:56:37,650 és vessenek megjegyzések végig a kódot, és válassza ki igazán leíró változók neveinek 888 00:56:37,650 --> 00:56:42,340 mert ha a böngésző nem érdekel, minden, amit csinál a végén a nap pazarlás bájt. 889 00:56:42,340 --> 00:56:46,660 >> Így kiderült, hogy amit a legtöbb honlapok tennie, annak ellenére, hogy a forráskód facebook.com, 890 00:56:46,660 --> 00:56:49,550 A cs50.net és ezek mindegyike más weboldalak az interneten 891 00:56:49,550 --> 00:56:53,730 jellemzően jól megírt és jól kommentált, és szépen tagolt és hasonlók, 892 00:56:53,730 --> 00:56:59,270 jellemzően mielőtt a weboldal kerül fel az internetre, a kód minified, 893 00:56:59,270 --> 00:57:02,970 ahol a HTML és a CSS - valami mást is hamarosan látni - 894 00:57:02,970 --> 00:57:05,960 A JavaScript kódot, hamarosan látni tömörített, 895 00:57:05,960 --> 00:57:09,250 amely szerint hosszú változók neveit válik X és Y és Z, 896 00:57:09,250 --> 00:57:13,900 és minden ami whitespace, ami mindent nézel olvasható ez minden eldobott, 897 00:57:13,900 --> 00:57:17,700 mert ha belegondolsz így Facebook kap egy milliárd oldalt üt egy nap - 898 00:57:17,700 --> 00:57:21,670 valami őrült ilyesmi - így mi van, ha a programozó csak hogy anális 899 00:57:21,670 --> 00:57:26,660 nyomja meg a szóköz egy további alkalommal, csak hogy francia néhány sort még sokkal több? 900 00:57:26,660 --> 00:57:29,500 Mi a hatása, ha megőrzi a Facebook, hogy whitespace 901 00:57:29,500 --> 00:57:32,880 mind a byte küldenek vissza, hogy az emberek az interneten? 902 00:57:32,880 --> 00:57:36,400 Hitting a szóköz, ha ad egy extra byte a fájlban. 903 00:57:36,400 --> 00:57:39,730 És ha egy milliárd ember, akkor folytassa le a honlap azon a napon, 904 00:57:39,730 --> 00:57:42,060 mennyivel több adatot voltál továbbított az interneten keresztül? 905 00:57:42,060 --> 00:57:45,200 Egy gigabyte ok nélkül. 906 00:57:45,200 --> 00:57:48,510 És megadták, egy csomó honlapok ez nem olyan skálázható kérdés, 907 00:57:48,510 --> 00:57:51,030 de a Facebook, a Google, néhány a legnépszerűbb honlapok 908 00:57:51,030 --> 00:57:54,860 van nagy ösztönzést pénzügyileg, hogy a kódot, mint egy rendetlenség 909 00:57:54,860 --> 00:57:58,980 annak érdekében, hogy az Ön által használt, mint néhány byte lehető mellett, majd tömörítse 910 00:57:58,980 --> 00:58:01,500 segítségével valami ilyesmit zip, egy algoritmus nevű gzip, 911 00:58:01,500 --> 00:58:04,250 hogy a böngésző nem automatikusan. De ez szörnyű. 912 00:58:04,250 --> 00:58:08,060 Soha nem fogjuk megtudni semmit arról, hogy más emberek honlapok és hogyan tervezzük weboldalak 913 00:58:08,060 --> 00:58:09,680 ha van, hogy nézd meg, mint ez. 914 00:58:09,680 --> 00:58:13,620 >> Szóval szerencsére, böngészők, mint a Chrome és az IE és a Firefox ezekben a napokban 915 00:58:13,620 --> 00:58:16,450 jellemzően jönnek beépített fejlesztői eszközöket. 916 00:58:16,450 --> 00:58:21,730 Valójában, ha lemegyek ide Ellenőrizzük Element, vagy ha elmegyek Mind, Fejlesztő, 917 00:58:21,730 --> 00:58:25,220 és menj a Developer Tools kifejezetten, 918 00:58:25,220 --> 00:58:27,640 Az ablak alján a képernyő most bukkan fel. 919 00:58:27,640 --> 00:58:31,230 Ez egy kicsit ijesztő az első, mert van egy csomó ismeretlen tabok itt, 920 00:58:31,230 --> 00:58:34,510 de ha rákattintok Elements egészen a bal alsó sarokban, 921 00:58:34,510 --> 00:58:38,810 Chrome nyilvánvalóan elég okos. Tudja, hogyan kell értelmezni az összes ezt a kódot. 922 00:58:38,810 --> 00:58:42,320 És mit csinál ez a Chrome megtisztítja az összes Facebook HTML. 923 00:58:42,320 --> 00:58:45,680 Bár ott nem whitespace van, nincs behúzás ott, 924 00:58:45,680 --> 00:58:51,120 Most veszi észre, hogy tudok kezdeni navigálni ezen a weboldalon annál hierarchikusan. 925 00:58:51,120 --> 00:58:56,910 Kiderül, hogy minden weboldal nyelven írt nevű HTML5 kell kezdeni ezzel, 926 00:58:56,910 --> 00:59:03,980 E DOCTYPE nyilatkozat, hogy úgy mondjam: 927 00:59:03,980 --> 00:59:07,840 Elég világos és szürke ott, de ez az első sort ebben a fájlban, 928 00:59:07,840 --> 00:59:12,080 és hogy csak azt mondja a böngésző, hogy "Hé, itt jön néhány HTML5. Itt jön egy internetes oldalon." 929 00:59:12,080 --> 00:59:18,490 Az első nyitó zárójel túl történik, hogy ez a dolog, egy nyitott zárójel HTML tag, 930 00:59:18,490 --> 00:59:22,320 majd ha merüljön mélyebbre - ezek nyilak teljesen értelmetlen; 931 00:59:22,320 --> 00:59:25,140 ők csak a bemutató kedvéért, azok valójában nem a fájlban - 932 00:59:25,140 --> 00:59:30,300 észre, hogy belül a Facebook HTML tag, bármi, ami kezdődik a nyitó zárójel 933 00:59:30,300 --> 00:59:32,910 majd még egy szót nevezzük tag. 934 00:59:32,910 --> 00:59:38,610 Tehát belül a HTML tag nyilvánvalóan egy fej címkét és a body tag. 935 00:59:38,610 --> 00:59:41,930 Belül a fej címke most egy egész káosz a Facebook 936 00:59:41,930 --> 00:59:45,620 azért, mert van egy csomó metaadatok és egyéb dolgok marketing és a reklám. 937 00:59:45,620 --> 00:59:50,600 >> De ha görgessen le, le, le, le, nézzük meg, hol van. Itt van. 938 00:59:50,600 --> 00:59:52,210 Ez egy legalább valamennyire ismerős. 939 00:59:52,210 --> 00:59:55,990 A cím a Facebook honlapján, ha valaha is megnézi a lapot a címsorban, 940 00:59:55,990 --> 00:59:59,060 a Welcome to Facebook - Bejelentkezés, Regisztráció vagy Tudjon meg többet. 941 00:59:59,060 --> 01:00:01,110 Ez az, amit szeretnél látni a Chrome címsorában, 942 01:00:01,110 --> 01:00:03,100 és ez hogyan is képviselt kódot. 943 01:00:03,100 --> 01:00:08,090 Ha figyelmen kívül minden mást a fejét, a legtöbb belek egy internetes oldal van a szervezetben, 944 01:00:08,090 --> 01:00:10,940 , és kiderül, hogy a Facebook-kód fog nézni bonyolultabb 945 01:00:10,940 --> 01:00:14,540 mint a legtöbb dolog, amit írok kezdetben csak azért, mert ez már felépített az évek során, 946 01:00:14,540 --> 01:00:17,260 de van egy csomó script tag-ek, JavaScript-kód, 947 01:00:17,260 --> 01:00:18,870 , ami a honlapon nagyon interaktív: 948 01:00:18,870 --> 01:00:22,330 látni státusz frissítéseket azonnal használó nyelvek, mint a JavaScript programot. 949 01:00:22,330 --> 01:00:25,270 Van egy úgynevezett div, ami egy részlege az oldal. 950 01:00:25,270 --> 01:00:27,940 De mielőtt eljutunk, hogy a részletekre, próbáljuk a kicsinyítéshez 951 01:00:27,940 --> 01:00:31,920 és nézd meg egy egyszerűbb változatát Facebook 1,0, hogy úgy mondjam. 952 01:00:31,920 --> 01:00:34,740 Itt a hello, world weboldalakat. 953 01:00:34,740 --> 01:00:37,370 Azt, hogy a DOCTYPE deklarációt legtetején 954 01:00:37,370 --> 01:00:40,280 ami egy kicsit különbözik minden mástól. 955 01:00:40,280 --> 01:00:46,130 Semmi mást írunk egy internetes oldalt fog kezdeni 01:00:48,880 és kivéve az úgynevezett megjegyzések HTML. 957 01:00:48,880 --> 01:00:53,000 De a legtöbb, mindent egy internetes oldalon nyitó zárójel, kulcsszó, közeli konzol. 958 01:00:53,000 --> 01:00:56,220 >> Ebben az esetben láthatjuk a legegyszerűbb weboldalak lehetséges. 959 01:00:56,220 --> 01:01:00,260 A HTML-címke tartalmaz egy fejet címkét, és tartalmaz egy test tag, 960 01:01:00,260 --> 01:01:04,580 azonban észre, hogy itt van ez a fogalom indítás és a leállítás címkéket. 961 01:01:04,580 --> 01:01:11,360 Ez a start tag a HTML, ez a szoros tag vagy a végső tag. 962 01:01:11,360 --> 01:01:15,400 Figyeljük meg, hogy ők a fajta ellentétek abban az értelemben, hogy a közeli címkét vagy zárócímke 963 01:01:15,400 --> 01:01:20,030 már ez a perjel belül is. 964 01:01:20,030 --> 01:01:23,540 Közben van egy nyitott head tag ide és egy közeli fej címke van. 965 01:01:23,540 --> 01:01:26,880 >> Van egy nyitott cím és szoros title tag van. 966 01:01:26,880 --> 01:01:29,850 Az a tény, hogy már fel a neve egy sorban, tisztán önkényes. 967 01:01:29,850 --> 01:01:33,760 Csak nézett ki, mint ez illik szépen egy sorban, így nem zavarta üti Adja meg egy pár alkalommal. 968 01:01:33,760 --> 01:01:38,200 Közben a szervezet tettem francia csak hogy valaha is olyan egyértelmű. 969 01:01:38,200 --> 01:01:41,050 Figyeljük meg, hogy a HTML egy nagyon buta nyelvet. 970 01:01:41,050 --> 01:01:43,410 Tény, hogy vissza a nap előtt voltak WYSIWYG szerkesztők 971 01:01:43,410 --> 01:01:46,770 és a Microsoft Word, ahol meg lehet mondani, hogy "Legyen ez a félkövér, dőlt, hogy ez" 972 01:01:46,770 --> 01:01:50,850 akkor tényleg írja kevés parancsokat esszék 20 + évvel ezelőtt 973 01:01:50,850 --> 01:01:55,740 amely akkor mondani: "Kezdjük ezt a szöveget félkövér. Hagyd, hogy ez a szöveg félkövér." 974 01:01:55,740 --> 01:01:59,010 "Start így ez a szöveg dőlt betűvel. Hagyd, hogy ez a szöveg dőlt." 975 01:01:59,010 --> 01:02:01,850 >> Ez az, amit a HTML vagy más markup nyelv. 976 01:02:01,850 --> 01:02:05,530 Ez az első tag azt mondja, "Hé, böngészője. Itt jön néhány HTML." 977 01:02:05,530 --> 01:02:09,880 A következő tag azt mondja, "Hé, böngészője. Itt jön a fejet, a fejléc saját honlapján." 978 01:02:09,880 --> 01:02:11,650 "Hé, a böngésző. Itt jön a cím." 979 01:02:11,650 --> 01:02:15,880 És akkor ide, hogy "Hé, böngészője. Ennyi a bajnoki címért." 980 01:02:15,880 --> 01:02:20,000 Szóval ez az, hogy a böngésző tudja, hogy nem jelennek meg a több karakter, mint a hello, világ 981 01:02:20,000 --> 01:02:21,860 a címsorban. 982 01:02:21,860 --> 01:02:23,640 Közben ezt mondja: "Ez az a fejét." 983 01:02:23,640 --> 01:02:28,340 Ezt mondja: "Itt jön a szervezetben. Itt látható a tényleges szerv" - szó szerint, a szavak hello, világ. 984 01:02:28,340 --> 01:02:33,190 És ez azt mondja itt, "Ez az a szervezet számára. Ennyi a HTML." 985 01:02:33,190 --> 01:02:34,640 Szóval böngészők elég buta. 986 01:02:34,640 --> 01:02:39,920 Csak olvasd el ezt a cuccot felülről lefelé, balról jobbra, és nem pontosan azt mondta, hogy igen. 987 01:02:39,920 --> 01:02:41,860 Nézzünk ténylegesen egy kis példának. 988 01:02:41,860 --> 01:02:46,240 Hadd nyissa meg a legegyszerűbb programok Mac-emet, mégpedig TextEdit. 989 01:02:46,240 --> 01:02:48,220 Windows használhatod Notepad.exe. 990 01:02:48,220 --> 01:02:50,520 De ez minden, amit kell kezdeni, hogy a weboldalakat. 991 01:02:50,520 --> 01:02:53,730 Én megyek előre, és csak másolja be ezt a kódot ebbe a fájlba. 992 01:02:53,730 --> 01:02:57,210 Én megyek előre, és mentse el az asztalon, 993 01:02:57,210 --> 01:03:01,220 és meg fogom menteni ezt hello.html, 994 01:03:01,220 --> 01:03:03,840 és most a fájl neve hello.html. 995 01:03:03,840 --> 01:03:05,690 Itt van az asztalon. 996 01:03:05,690 --> 01:03:11,130 Hadd menjen a böngésző, és húzza a fájlt a böngészőben. 997 01:03:11,130 --> 01:03:14,060 És íme, itt van a legelső weboldalt. 998 01:03:14,060 --> 01:03:17,340 Figyeljük meg, hogy a cím a lap hello, világ, mint egy cím tag, 999 01:03:17,340 --> 01:03:20,040 , és vegyük észre, hogy hello, világ a test saját weboldal, 1000 01:03:20,040 --> 01:03:22,190 és woo-hoo, én vagyok az interneten. 1001 01:03:22,190 --> 01:03:24,700 >> Nem vagyok, igaz, mert ez a fájl nem az interneten. 1002 01:03:24,700 --> 01:03:28,330 Előfordul, hogy az a helyi merevlemez az adott utat. 1003 01:03:28,330 --> 01:03:32,720 De az ötlet az ugyanaz. Minden most szükségünk van a web szerver, amely a feltöltésre. 1004 01:03:32,720 --> 01:03:37,410 De előbb nézzük ténylegesen bevezetni egy kicsit bonyolult, és még egy kicsit stilizáció. 1005 01:03:37,410 --> 01:03:39,890 Ez egy egyszerű, ha unalmas, web oldalon. 1006 01:03:39,890 --> 01:03:41,990 Kiderült, hogy vannak más típusú címkék tudjuk használni. 1007 01:03:41,990 --> 01:03:45,530 Például itt, a sárga, amit be 2 új címkék. 1008 01:03:45,530 --> 01:03:49,630 Nem fogunk játszani sokat ezekkel a ma, de észre, hogy a link tag 1009 01:03:49,630 --> 01:03:52,520 valahogy másképp néz ki, minden mást. 1010 01:03:52,520 --> 01:03:55,370 A link tag veszi úgynevezett attribútumokat, 1011 01:03:55,370 --> 01:03:59,770 és egy attribútum van valami, hogy módosítja a viselkedését a tag. 1012 01:03:59,770 --> 01:04:03,840 Ebben az esetben nem ez a legjobb választás a nevek, link, mert ez a fajta értelmetlen, 1013 01:04:03,840 --> 01:04:11,590 de ez a link tag azt mondja, lényegében magában foglalja a nevű fájlt styles.css belső honlapomon. 1014 01:04:11,590 --> 01:04:15,400 Azt hiszem ezt hasonló a C # include direktíva. 1015 01:04:15,400 --> 01:04:19,650 Styles.css utal egy másik nyelvet teljesen, hogy nem fogunk játszani ma, 1016 01:04:19,650 --> 01:04:23,790 de ez az esztétika: betűméret, szín, kitöltés, behúzás, árrések, 1017 01:04:23,790 --> 01:04:26,040 és minden ilyen jellegű esztétikai részletességgel. 1018 01:04:26,040 --> 01:04:28,820 Eközben a script tag funkcionálisan hasonló, 1019 01:04:28,820 --> 01:04:33,140 hanem mint például a CSS, hogy a nyelv, ez magában foglalja egy másik nyelvet, a JavaScript programot. 1020 01:04:33,140 --> 01:04:37,810 Más szóval, e 2 tag leszek végül képes írni a saját weboldaladon 1021 01:04:37,810 --> 01:04:41,490 hanem húzza be a kódot, hogy én vagy valaki más írta 1022 01:04:41,490 --> 01:04:44,350 hogy mi tud állni más emberek vállára, tudjuk gyakorolni a jó design, 1023 01:04:44,350 --> 01:04:46,120 faktoring ki közös kódot. 1024 01:04:46,120 --> 01:04:49,090 Ha van 10 különböző weboldalakat, ez azt jelenti, hogy az én esztétikai 1025 01:04:49,090 --> 01:04:52,490 figyelembe lehessen venni végre, ugyanúgy, mint # include, egy külön fájlba. 1026 01:04:52,490 --> 01:04:54,420 Szóval egyre ott. 1027 01:04:54,420 --> 01:04:57,180 De nézzük valóban először nem valami sokkal érdekesebb ezzel a fájllal. 1028 01:04:57,180 --> 01:05:01,110 >> Ez megint csak a TextEdit. Én technikailag nem az interneten még, de mi lesz ott. 1029 01:05:01,110 --> 01:05:04,910 Szeretném, hogy hello, world egy kicsit merészebb, mint amilyen valójában. 1030 01:05:04,910 --> 01:05:10,890 Akkor szia, hadd mondjuk önkényesen a merész. 1031 01:05:10,890 --> 01:05:15,910 Ismét a történet ugyanaz: hello, vessző, indítsa el így ez merész, 1032 01:05:15,910 --> 01:05:19,730 majd világ lesz félkövér, és ez azt jelenti, nyomtatásának kikapcsolásához ezt merész. 1033 01:05:19,730 --> 01:05:24,020 Hadd menjek előre, és mentse a fájlt, menj vissza a Chrome-hoz, én nagyítás csak így látjuk, hogy jobb, 1034 01:05:24,020 --> 01:05:27,870 és újra, és látni fogod, hogy a világ most már merész. 1035 01:05:27,870 --> 01:05:31,810 A Web szól hivatkozások, úgyhogy menjünk előre, és ezt: 1036 01:05:31,810 --> 01:05:38,550 kedvenc weboldalunk, mondjuk, youtube.com. 1037 01:05:38,550 --> 01:05:43,810 Mentés, újra. Oké. Van egy pár probléma most mellett hideousness a honlapon. 1038 01:05:43,810 --> 01:05:47,310 1, biztos vagyok benne, elütöttem Adja meg itt. És tettem. 1039 01:05:47,310 --> 01:05:51,590 Én nem csak Enter, én is behúzott, gyakorló, amit mi már prédikálni a stílus, 1040 01:05:51,590 --> 01:05:54,930 de az is igaz, hogy a világ mellett. 1041 01:05:54,930 --> 01:05:58,410 Miért van ez? Böngészők Csak tegye, amit mond nekik. 1042 01:05:58,410 --> 01:06:04,010 Nem mondtam el a böngésző, "szünet vonalak itt. Beírása bekezdés szünet itt." 1043 01:06:04,010 --> 01:06:07,820 Tehát a böngésző, nem számít, ha megüt Return 30-szor, 1044 01:06:07,820 --> 01:06:10,820 ez még mindig megy, hogy a közvetlenül a világ. 1045 01:06:10,820 --> 01:06:15,930 Amit igazán kell tennem itt mond valamit, mint a
, helyezzen be egy sortörést. 1046 01:06:15,930 --> 01:06:17,940 >> És valóban, a sortörést egyfajta furcsa 1047 01:06:17,940 --> 01:06:21,650 mert nem igazán lehet elindulni egy másik vonal, aztán csinálj valamit, 1048 01:06:21,650 --> 01:06:25,380 majd állítsa le mozog egy új vonal. Elég egy atomi művelet. 1049 01:06:25,380 --> 01:06:28,140 Vagy csináld, vagy nem. Te Enter, vagy nem. 1050 01:06:28,140 --> 01:06:33,390 Tehát br egy kicsit egy másik tag, és így kell rendezni egyaránt nyitott és zárja le 1051 01:06:33,390 --> 01:06:35,230 egyszerre. 1052 01:06:35,230 --> 01:06:37,500 A szintaxis e ez. 1053 01:06:37,500 --> 01:06:41,760 Technikailag, akkor valamit csinálni, mint ez néhány változat a HTML, 1054 01:06:41,760 --> 01:06:45,600 de ez csak a hülye, mert nincs ok indításához és leállításához valamit 1055 01:06:45,600 --> 01:06:48,420 ha ahelyett, mindezt egyszerre. 1056 01:06:48,420 --> 01:06:52,310 Ismerd fel, hogy HTML5 nem feltétlenül igénylik ezt a perjel, 1057 01:06:52,310 --> 01:06:55,410 így látni fogja tankönyvek és online források, amelyek nem rendelkeznek meg, 1058 01:06:55,410 --> 01:06:59,780 de jó intézkedés nézzük gyakorolni a szimmetria, hogy láttunk eddig. 1059 01:06:59,780 --> 01:07:02,870 Ez azt jelenti, hogy a címke egyszerre nyitott és zárt. 1060 01:07:02,870 --> 01:07:05,220 És most hadd menteni a fájlt, menjen vissza ide. 1061 01:07:05,220 --> 01:07:10,240 Oké, ez kezd jobban néz ki, kivéve a Web tudom a fajta kattintható, 1062 01:07:10,240 --> 01:07:13,610 és még youtube itt úgy tűnik, nem vezet semmire. 1063 01:07:13,610 --> 01:07:17,560 Azért, mert annak ellenére, hogy úgy néz ki, mint egy link, a böngésző nem tudja, hogy önmagában, 1064 01:07:17,560 --> 01:07:20,670 így azt kell mondani, a böngésző, hogy ez a link. 1065 01:07:20,670 --> 01:07:22,620 >> Az, hogy ezt az, hogy egy horgony címkét: 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 és hadd mozog, hogy ez egy új sort csak azért ez egy kicsit olvashatóbb, 1069 01:07:38,490 --> 01:07:40,060 és én összezsugorodik a betűméretet. 1070 01:07:40,060 --> 01:07:43,890 Én vagyok kész még? No. Ott lesz e kettősség. 1071 01:07:43,890 --> 01:07:46,760 Ez a címke, a horgony tag, valóban vesz egy attribútum, 1072 01:07:46,760 --> 01:07:52,900 amely módosítja a viselkedését, és az értékét a tulajdonság nyilvánvalóan a YouTube URL-t. 1073 01:07:52,900 --> 01:07:56,380 De észre a kettősség az, hogy csak azért, mert ez az URL-címet fogsz, 1074 01:07:56,380 --> 01:08:01,020 ez nem jelenti azt, hogy kell, hogy legyen a szó, hogy te, és kiemeli, hogy egy link. 1075 01:08:01,020 --> 01:08:03,960 Inkább, hogy lehet valami, mint ez. 1076 01:08:03,960 --> 01:08:10,870 Tehát azt kell mondanom, hogy hagyja abba ezt a szót egy hivatkozásra használatával bezár horgony tag. 1077 01:08:10,870 --> 01:08:12,650 Megjegyzés Én ezt nem csinálom. 1078 01:08:12,650 --> 01:08:15,890 1, ez csak egy hulladék az idő mindenki, és ez nem szükséges. 1079 01:08:15,890 --> 01:08:19,290 >> Bezárásához tag, akkor csak említi a nevét, a tag újra. 1080 01:08:19,290 --> 01:08:21,800 Nem említi sem az attribútumokat. 1081 01:08:21,800 --> 01:08:26,189 Szóval menteni, hogy menjen vissza. Oké, íme, most már kék és hivatkozással. 1082 01:08:26,189 --> 01:08:29,430 Ha rákattint, én tényleg nem megy a YouTube-ra. 1083 01:08:29,430 --> 01:08:32,529 Így, bár a weboldal nem az interneten, ez legalább HTML, 1084 01:08:32,529 --> 01:08:37,930 és ha hagyjuk, hogy a Internet felzárkózni, mi lenne valójában a végén itt youtube.com. 1085 01:08:37,930 --> 01:08:40,670 És mehetek vissza, és itt a weboldalon. De észre ezt. 1086 01:08:40,670 --> 01:08:43,120 Ha valaha is ütött spam vagy adathalász támadás, 1087 01:08:43,120 --> 01:08:45,850 Most megvan a képessége után mindössze öt percet, hogy ugyanezt tegyék. 1088 01:08:45,850 --> 01:08:50,920 Mi megy itt, és nem valami ilyesmit www.badguy.com 1089 01:08:50,920 --> 01:08:59,319 vagy mi a vázlatos weboldal, és akkor lehet mondani, ellenőrizheti a PayPal számla. 1090 01:08:59,319 --> 01:09:04,840 [Nevetés] És most ez fog menni badguy.com, amit nem fogok kattintani 1091 01:09:04,840 --> 01:09:08,000 mert fogalmam sincs, hová vezet. [Nevetés] 1092 01:09:08,000 --> 01:09:10,859 >> De most megvan a képessége, hogy valóban a végén ott. 1093 01:09:10,859 --> 01:09:12,640 Szóval tényleg csak most kezdik karcolja meg a felületét. 1094 01:09:12,640 --> 01:09:15,830 Mi nem programozási per se; írunk jelölőnyelv. 1095 01:09:15,830 --> 01:09:18,569 De amint azt egészítik ki a szókincs HTML, 1096 01:09:18,569 --> 01:09:21,520 fogunk bevezetni PHP, a tényleges programozási nyelv 1097 01:09:21,520 --> 01:09:26,859 amely lehetővé teszi számunkra, hogy létrehoz HTML automatikusan generál CSS automatikusan 1098 01:09:26,859 --> 01:09:29,430 annak érdekében, hogy el tudjuk kezdeni szerdán végrehajtására, mondjuk, 1099 01:09:29,430 --> 01:09:31,700 saját kereső és így tovább. 1100 01:09:31,700 --> 01:09:34,770 De még az, hogy egy pár napig. Találkozunk majd. 1101 01:09:34,870 --> 01:09:39,000 >> [CS50.TV]