1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [Tjedan 7] 2 00:00:02,440 --> 00:00:04,730 [David J. Malan - Sveučilište Harvard] 3 00:00:04,730 --> 00:00:07,490 [Ovo je CS50. - CS50.TV] 4 00:00:07,490 --> 00:00:12,280 U redu. Dobrodošao natrag. Ovo je CS50, a to je početak tjedna 7. 5 00:00:12,280 --> 00:00:14,690 Par malih najavama: 6 00:00:14,690 --> 00:00:18,150 Pset5 je sada u tijeku, ili će uskoro će biti, 7 00:00:18,150 --> 00:00:21,590 i neka mi kažu, sasvim iskreno, to ne imaju tendenciju da se među više izazovan 8 00:00:21,590 --> 00:00:24,460 tečaja je problematična seta, pa neka mi spomenuti ovo sada 9 00:00:24,460 --> 00:00:28,190 tako da ovaj tjedan više nego ikad ne čekati dok, recimo, u srijedu navečer 10 00:00:28,190 --> 00:00:29,920 ili u četvrtak navečer roniti u. 11 00:00:29,920 --> 00:00:32,369 Ovo je definitivno zanimljiv pset. Mislimo da je to zabavno. 12 00:00:32,369 --> 00:00:36,110 Ako ste zapravo dobiti potpuno ispravna i onda mogu osporiti takozvanu Big odbor, 13 00:00:36,110 --> 00:00:39,830 imat ćete priliku kako bi se slagala wits s nekim od tečaja osoblja 14 00:00:39,830 --> 00:00:41,620 i neke od svojih kolega. 15 00:00:41,620 --> 00:00:44,670 Što Big odbor je je kada imate svoj provjere pravopisa rad, 16 00:00:44,670 --> 00:00:48,860 ćete biti u mogućnosti ići na cs50.net nakon pokretanja naredbe, 17 00:00:48,860 --> 00:00:52,430 čisto uključiti, a zatim iznos vremena i količina RAM i više 18 00:00:52,430 --> 00:00:56,130 koji ste koristili u provedbi će biti izloženi ovdje na stazi početnu stranicu. 19 00:00:56,130 --> 00:00:59,740 Primijetit ćete da se cijela hrpa tih ljudi ovdje naveden kao osoblje 20 00:00:59,740 --> 00:01:04,220 jer tijekom vikenda, osoblje mislio da će to biti zabavno pokušati nadmašiti jedni druge. 21 00:01:04,220 --> 00:01:07,390 Dakle, shvatite da je cilj ovdje nije da nadmašiti osoblje. 22 00:01:07,390 --> 00:01:09,790 Čak sam samo ovdje na broju 13. 23 00:01:09,790 --> 00:01:13,790 Čisto odluče, ali to je prilika da se vidi koliko je malo RAM-a 24 00:01:13,790 --> 00:01:16,790 i kako je malo CPU sekundi možete koristiti vis-a-vis neki od vaših kolega. 25 00:01:16,790 --> 00:01:20,540 >> I ja ću priznati da je Kevin Michael Schmid, 26 00:01:20,540 --> 00:01:23,750 trenutno broj jedan položaj kao jedan od TFS, 27 00:01:23,750 --> 00:01:28,120 to je implementacija koja zovemo nije moguće 28 00:01:28,120 --> 00:01:32,700 s obzirom da je on koristi gotovo 0 RAM i gotovo 0 sekundi za utovar. 29 00:01:32,700 --> 00:01:35,670 Dakle, mi ćemo se pobrinuti za Kevina odsutan. [Smijeh] 30 00:01:35,670 --> 00:01:40,950 Postoje određene vještine koje Kevin je stavljajući na kušnju ovdje. 31 00:01:40,950 --> 00:01:45,280 Jedna od stvari koje smo mislili da ćemo učiniti previše je sada CS50x je tjedan u tijeku, 32 00:01:45,280 --> 00:01:49,520 i vi ste koliko dio ovog eksperimenta, kao oni studenti su. 33 00:01:49,520 --> 00:01:53,720 Mi smo ih pitali kao dio svog pset0, koji je na sličan način podnijeti Scratch projekt 34 00:01:53,720 --> 00:01:58,280 interesa za njih - igra, interaktivni umjetničko djelo, animacija, ili kao - 35 00:01:58,280 --> 00:02:03,700 1 - do 2-minutni video, ako su željeli, rekavši hello svijeta i tko su oni zapravo. 36 00:02:03,700 --> 00:02:06,780 Mislio sam da bih podijeliti s vama samo nekoliko videa koji su poslali dosad 37 00:02:06,780 --> 00:02:10,759 jer za nas, na osoblje najmanje, to je stvarno bio uzbudljiv 38 00:02:10,759 --> 00:02:14,220 i inspirativno vidjeti ove ljude iz cijelog svijeta - zemlje diljem svijeta - 39 00:02:14,220 --> 00:02:18,160 tuning, od svih stvari, na tečaj informatike na internetu, 40 00:02:18,160 --> 00:02:20,410 da li je to zato što oni žele nastaviti svoj studij, 41 00:02:20,410 --> 00:02:22,300 oni žele da se njihove karijere u novom smjeru, 42 00:02:22,300 --> 00:02:24,390 oni žele popuniti praznine u vlastitom znanju, 43 00:02:24,390 --> 00:02:27,190 pa neke od istih razloga koje vi možda su bili ovdje. 44 00:02:27,190 --> 00:02:31,090 >> Tako sam vam dati jedan takav student ovdje. Ti bi mogao podići glasnoću samo malo. 45 00:02:31,090 --> 00:02:35,520 Ovdje je jedan od naših učenika 1-minutnim podnesaka. 46 00:02:35,520 --> 00:02:40,380 Pozdrav, svijet. Ja sam student industrijskog inženjeringa ovdje u Malagi, Španjolska. 47 00:02:40,380 --> 00:02:45,840 Ja sam uzbuđen o ovom online tečaj jer volim informatike, ja stvarno učiniti, 48 00:02:45,840 --> 00:02:48,880 i ja uistinu cijenimo da ću dobiti ga istražiti. 49 00:02:48,880 --> 00:02:51,940 I činjenica da ja mogu naučiti isto sve vas dečki učiniti 50 00:02:51,940 --> 00:02:57,040 ali umjesto da se u Harvardu sam u Malagi, kako strašan je to? 51 00:02:57,040 --> 00:03:02,040 Pa, ja sam Fernando, a ovo je CS50. Vidi vam dečki. 52 00:03:02,040 --> 00:03:07,100 [Smijeh] Drugi isječak smo posebno sviđa, vidjet ćete da ovaj gospodin je engleski nije toliko jak. 53 00:03:07,100 --> 00:03:11,520 To izgleda kao da je to stroj prevedeno, pa su prijevodi sami malo nesavršen, 54 00:03:11,520 --> 00:03:15,790 ali to je bio jedan od naših favorita tako daleko kao dobro. 55 00:03:25,080 --> 00:03:29,980 [♪ ♪] 56 00:03:29,980 --> 00:03:32,370 Pozdrav, svijet. [Govoreći u japanskom] 57 00:03:32,370 --> 00:03:39,830 [Moram pozdraviti na japanskom, jer moj engleski je jako nepouzdan.] 58 00:03:39,830 --> 00:03:45,380 [Ja sam predao poruku za vas od grada Gifu, Japan.] 59 00:03:45,380 --> 00:03:49,820 [Mogu biti student po prvi put u 20 godina, što se može vidjeti.] 60 00:03:49,820 --> 00:03:54,640 [Ja sam vrlo zahvalan na Sveučilištu Harvard, koji mi je dao ovu priliku i EDX.] 61 00:03:54,640 --> 00:04:01,510 [Golf je gitara i moja najdraža stvar radi.] [Smijeh] 62 00:04:01,510 --> 00:04:05,750 [♪ ♪] 63 00:04:05,750 --> 00:04:10,790 [Zašto mislite da sam je pokušavao da prisustvuju cs50x.] 64 00:04:10,790 --> 00:04:14,990 [Sveučilište Harvard, to je moja čežnja.] 65 00:04:14,990 --> 00:04:19,740 [Pogotovo ako sam daleko prisutnost živio u Japanu.] 66 00:04:19,740 --> 00:04:26,680 [Htjela sam probati odmah svjesni postojanja takvog EDX kada.] 67 00:04:26,680 --> 00:04:32,500 [Zar ne mislite tako da ne ovisi o starosti učenja I.] 68 00:04:32,500 --> 00:04:38,350 [Cs50 je moja čežnja. Moje ime je Kazu, i to je cs50.] 69 00:04:38,350 --> 00:04:43,090 [♪ ♪] [pljesak i navijanje] 70 00:04:43,090 --> 00:04:49,220 Druga omiljena naša je ovu tvrdnju ovdje od nekoga. 71 00:04:51,070 --> 00:04:55,380 [♪ ♪] [Malan] Google je ako niste upoznati s ovim mem. 72 00:04:55,380 --> 00:05:01,480 >> I onda na kraju, par drugih koje je dobio objavljena da je možda osvojiti nagradu divan. 73 00:05:01,480 --> 00:05:06,820 [Studenti] Ajoj! >> [Malan] Morat ćemo slušati. To je kratka, pa pažljivo slušajte. 74 00:05:08,580 --> 00:05:11,150 [Ženski govornik] Koje je vaše ime? >> Louie. 75 00:05:11,150 --> 00:05:16,120 [Ženski govornik] Što je to? >> [Giggles] CS50. [Smijeh] 76 00:05:16,120 --> 00:05:19,510 [Malan] On je dva traje, iako. 77 00:05:19,510 --> 00:05:22,240 Ovdje ćemo ići, posljednji. 78 00:05:23,030 --> 00:05:26,980 Moje ime je Louie, a ovo je CS50. 79 00:05:26,980 --> 00:05:30,250 [Smijeh] To je onda CS50x. 80 00:05:30,250 --> 00:05:33,230 Hvala svima vama, a nakon zajedno kod kuće 81 00:05:33,230 --> 00:05:35,620 tko su učestvovanje dosad. 82 00:05:35,620 --> 00:05:39,510 Danas, možemo zaključiti našu raspravu o strukturama podataka, 83 00:05:39,510 --> 00:05:41,160 barem neke od najosnovnijih, 84 00:05:41,160 --> 00:05:44,760 i onda ćemo nastaviti naš razgovor o HTML i web programiranja. 85 00:05:44,760 --> 00:05:48,520 Doista, mi smo proveli prošlost neki sedam tjedan gleda osnovama programiranja - 86 00:05:48,520 --> 00:05:50,450 algoritmi, strukture podataka, i slično - 87 00:05:50,450 --> 00:05:53,050 i C, kao što ste možda doživjeli do sada, 88 00:05:53,050 --> 00:05:57,060 nije nužno najdostupniji jezika 89 00:05:57,060 --> 00:05:59,090 s kojim provesti neke od tih ideja. 90 00:05:59,090 --> 00:06:01,880 I tako počinje ovaj tjedan i sljedeći tjedan, a onda sljedeće, 91 00:06:01,880 --> 00:06:07,110 smo napokon ćete moći prijelaz iz C, koja se općenito poznat kao prilično niske razine jezika, 92 00:06:07,110 --> 00:06:11,190 kako stvari višoj razini, među njima PHP, JavaScript, i slično, 93 00:06:11,190 --> 00:06:14,850 što ćemo vidjeti privući na istim lekcija koje smo naučili tijekom posljednjih nekoliko tjedana, 94 00:06:14,850 --> 00:06:19,430 ali vidjet ćete da proglašenje stvari poput polja i hash tablice i traženje i sortiranje 95 00:06:19,430 --> 00:06:23,370 postala toliko mnogo lakše, jer su jezici sami ćemo početi koristiti 96 00:06:23,370 --> 00:06:25,290 će postati moćniji. 97 00:06:25,290 --> 00:06:27,410 Ali prvo, primjena stabala. 98 00:06:27,410 --> 00:06:30,240 To je vrlo čest ovih dana morati stisnuti podatke. 99 00:06:30,240 --> 00:06:34,770 U kojem kontekstu bi želite komprimirati neku vrstu digitalnih informacija? 100 00:06:37,190 --> 00:06:39,670 >> Da. >> [Student] Kada trebate ga poslati preko interneta. 101 00:06:39,670 --> 00:06:41,450 Da, kada želite poslati nešto preko weba. 102 00:06:41,450 --> 00:06:44,950 Ako želite preuzeti veliku datoteku, to je idealno ako netko na drugom kraju 103 00:06:44,950 --> 00:06:48,760 je stisnut tu datoteku pomoću zip formatu ili nešto slično 104 00:06:48,760 --> 00:06:53,760 tako da šaljete manje bitova nego inače moglo biti poslane. 105 00:06:53,760 --> 00:06:55,500 Pa kako se komprimirati podatke? 106 00:06:55,500 --> 00:07:00,540 Sve se svodi na korištenje manje bitova nego su potrebni po defaultu. 107 00:07:00,540 --> 00:07:03,220 No, to je neka vrsta neobične stvari, jer se sjetim tjedana 0 i 1 108 00:07:03,220 --> 00:07:07,370 kada smo razgovarali o ASCII i binarnih i razgovarali smo o ASCII posebice 109 00:07:07,370 --> 00:07:10,690 što je korištenje 8 bita predstavljaju slova abecede 110 00:07:10,690 --> 00:07:16,120 tako da je slovo predstavlja 65, mala slova je broj 97, 111 00:07:16,120 --> 00:07:21,210 i koliko god vam predstavljaju 65 ili 97, koristite 7 ili 8 bita. 112 00:07:21,210 --> 00:07:24,120 No, kvaka je da postoje neke slova engleske abecede 113 00:07:24,120 --> 00:07:26,230 da nisu popularni kao drugima. 114 00:07:26,230 --> 00:07:31,600 Z nije sve što je popularno, Q nije sve što je popularna, ali i E su super popularan. 115 00:07:31,600 --> 00:07:37,280 I još za sve tih pisama, po defaultu svijet koristi isti broj bitova, samo osam. 116 00:07:37,280 --> 00:07:42,690 Dakle, ne bi to bilo pametnije da umjesto 8 bitova za svaku pismu, 117 00:07:42,690 --> 00:07:47,440 čak i većina nerijetko koriste kao Q i Z, 118 00:07:47,440 --> 00:07:51,910 što ako smo koristili manje bitova za A i E i S i najpopularnijih pisama 119 00:07:51,910 --> 00:07:55,000 i koristiti više bitova za manje popularnih slova, 120 00:07:55,000 --> 00:07:57,770 ideja bude neka je optimizirati za zajedničku slučaju, 121 00:07:57,770 --> 00:08:01,160 koja je tema u informatici od pokušaja da poboljšate ono što će se dogoditi najviše 122 00:08:01,160 --> 00:08:05,310 i provesti malo više vremena, malo više prostora na stvari koje, da, može dogoditi 123 00:08:05,310 --> 00:08:07,680 ali ne nužno kao često. 124 00:08:07,680 --> 00:08:09,330 Dakle, uzmimo primjer. 125 00:08:09,330 --> 00:08:12,610 >> Pretpostavimo da želimo kodirati informacije prilično učinkovito. 126 00:08:12,610 --> 00:08:15,090 Možda ste odrastao znajući nešto o Morseov kod, 127 00:08:15,090 --> 00:08:17,450 i izgledi su da nisu znali stvarni broj, 128 00:08:17,450 --> 00:08:21,750 ali možda podsjetiti da je barem ova serija točkica i crtica. 129 00:08:21,750 --> 00:08:26,640 To je prilično učinkovita kodiranje, i primjetiti da je najpopularniji pismo - na primjer, e - 130 00:08:26,640 --> 00:08:28,980 koristi najkraći zvučnih signala. 131 00:08:28,980 --> 00:08:31,740 Morse koda je sve o BEEP-BEEP-BEEP-BEEP-BEEP-beep i drži tonove 132 00:08:31,740 --> 00:08:34,799 bilo za kratko vrijeme ili duže vrijeme. 133 00:08:34,799 --> 00:08:40,330 E, kao obilježeni točku, je super kratki zvučni signal, samo ton, i da će predstavljati E. 134 00:08:40,330 --> 00:08:43,960 Nasuprot tome, T će biti duži zvučni signal, kao što su zvučni signal [produžuje zvuk], 135 00:08:43,960 --> 00:08:45,710 te da će predstavljati T. 136 00:08:45,710 --> 00:08:48,840 No, to je još uvijek prilično kratko, jer, za razliku od, ako pogledate Z, 137 00:08:48,840 --> 00:08:52,690 izraziti Z će ići bip, bip [više zvuk], bip, bip [kraći zvuk]. 138 00:08:52,690 --> 00:08:55,360 Dakle, to je više zato što je rjeđe. 139 00:08:55,360 --> 00:08:58,150 Ali Gotcha ovdje je da Morse koda je malo manjkav 140 00:08:58,150 --> 00:09:00,610 u da to nije odmah decodable. 141 00:09:00,610 --> 00:09:07,350 Na primjer, pretpostavimo da ste čuli o nekom kraju žice beep [kratka], zvučni [dugo]. 142 00:09:07,350 --> 00:09:12,480 Što poruku sam samo primati? Točka i crtica. Što to predstavlja? 143 00:09:12,480 --> 00:09:15,330 [Student] A. >> [Malan] Možda. 144 00:09:15,330 --> 00:09:18,270 To bi također moglo biti e slijede T. 145 00:09:18,270 --> 00:09:23,390 Drugim riječima, Morseov kod, iako to iskorištava ovaj princip optimizacije corner slučaj, 146 00:09:23,390 --> 00:09:26,250 ne sama posuditi neposrednoj decodability. 147 00:09:26,250 --> 00:09:29,850 To je, čovjek koji je čuo ili primanje ove točkice i crtice 148 00:09:29,850 --> 00:09:34,540 mora nekako shvatiti gdje pauze između slova, 149 00:09:34,540 --> 00:09:39,660 jer ako ne znate gdje se ti prekidi su, možda zbuniti za ET ili obrnuto. 150 00:09:39,660 --> 00:09:43,880 >> Dakle, što bi trebao učiniti? U Morse koda ste samo mogli pauzirati između svake od pisama. 151 00:09:43,880 --> 00:09:47,660 No, zaustavivši je vrsta brojilo za cijelu točke ubrzava stvari. 152 00:09:47,660 --> 00:09:52,880 Pa što ako umjesto toga smo došli s kodom tamo gdje nije ovo loše stanje 153 00:09:52,880 --> 00:09:56,570 gdje je E prefiks, na primjer, o - 154 00:09:56,570 --> 00:10:00,020 Drugim riječima, ako bismo mogli osigurati da uzorci su još uvijek kratki za popularne slova 155 00:10:00,020 --> 00:10:04,850 duga za manje popularnih slova, ali nema moguće konfuzije? 156 00:10:04,850 --> 00:10:08,930 Čovjek po imenu Huffman godina izumio ovu shemu zove Huffman ovo kodiranje 157 00:10:08,930 --> 00:10:12,390 da zapravo iskorištava jedan od podatkovnih struktura koje smo proveli malo vremena govori o 158 00:10:12,390 --> 00:10:16,560 ovaj prošli tjedan, da od stabala, binarni stabala posebno - 159 00:10:16,560 --> 00:10:19,710 Značenje binarno stablo koje ima ne više od dva djece. 160 00:10:19,710 --> 00:10:22,720 To je možda lijevo dijete, možda je pravo dijete, i to je to. 161 00:10:22,720 --> 00:10:26,510 Dakle, pretpostavimo samo zbog rasprave da netko želi poslati poruku 162 00:10:26,510 --> 00:10:31,270 da izgleda ovako. To je potpuna glupost, ali to je sastavljen od AS, BS, CS, DS, i Es. 163 00:10:31,270 --> 00:10:34,890 A ako zaista brojati do sve As, B, Cs, DS, i Es 164 00:10:34,890 --> 00:10:36,870 a zatim podijeliti s ukupnim brojem od slova, 165 00:10:36,870 --> 00:10:42,710 ovo malo grafikon ovdje kaže da je 45% od slova Es, 20% su Kao, 166 00:10:42,710 --> 00:10:45,010 10% B, i tako dalje. 167 00:10:45,010 --> 00:10:47,330 Dakle, drugim riječima, pretpostavimo da citira niz postoji 168 00:10:47,330 --> 00:10:49,080 je samo neka poruka koje želite poslati. 169 00:10:49,080 --> 00:10:52,180 To se događa da se gluposti samo tako možemo koristiti kao nekoliko pisama što je više moguće, 170 00:10:52,180 --> 00:10:55,220 ali to je doista slučaj da e dalje najpopularniji, 171 00:10:55,220 --> 00:11:01,450 i B i C su najmanje popularni, barem od tih 5 slova abecede. 172 00:11:01,450 --> 00:11:04,040 Pa kako možemo ići oko dolaze sa kodiranja, 173 00:11:04,040 --> 00:11:08,430 binarno kodiranje, uzorak 0s i 1s za svaki od tih pisama 174 00:11:08,430 --> 00:11:14,820 na takav način da je E je kratki obrazac i možda B i C su nešto dulji uzorci, 175 00:11:14,820 --> 00:11:19,270 opet, ideja je da želimo koristiti manje bitova većinu vremena 176 00:11:19,270 --> 00:11:21,790 i više bita samo jednom u neko vrijeme. 177 00:11:21,790 --> 00:11:26,070 Prema Huffman ovo kodiranje, možete stvoriti šumu stabala. 178 00:11:26,070 --> 00:11:31,190 Postoji neka vrsta priče da se ovdje uključuje stabala i također procese ih gradi. 179 00:11:31,190 --> 00:11:32,420 Počnimo. 180 00:11:32,420 --> 00:11:36,140 >> Ja predlažem da počnete s ovom šumi, da se tako izrazim, od pet stabala, 181 00:11:36,140 --> 00:11:38,260 od kojih je svaki prilično glupo stablo. 182 00:11:38,260 --> 00:11:42,800 Stablo se sastoji od samo jednog čvora, kao i ovdje su zastupljeni u krug. 183 00:11:42,800 --> 00:11:45,310 Dakle, svaki od tih stvari može biti C struct 184 00:11:45,310 --> 00:11:50,200 i unutar C struct može biti plovak predstavlja frekvenciju računati 185 00:11:50,200 --> 00:11:52,510 a onda možda char predstavlja pismo. 186 00:11:52,510 --> 00:11:56,470 Dakle, mislim od tih čvorova samo kao bilo koji stari C struct, ali, za sada, višu razinu. 187 00:11:56,470 --> 00:12:01,230 To je šuma pet stabala, svaka od koji imaju samo jednu čvor. 188 00:12:01,230 --> 00:12:06,830 Što Huffman Predloženi je da počnemo kombinirati one stabala 189 00:12:06,830 --> 00:12:11,140 da imaju najmanje frekvencije broji u nešto većim stabala 190 00:12:11,140 --> 00:12:13,490 povezujući ih s novim korijena čvora. 191 00:12:13,490 --> 00:12:17,560 Dakle, među slovima ovdje, primijetiti da za praktičnost sam ih izdvojiti s lijeva na desno, 192 00:12:17,560 --> 00:12:21,420 iako to nije nužno potrebno, i obavijest da su najmanji čvorovi 193 00:12:21,420 --> 00:12:23,930 trenutno 10% i 10%. 194 00:12:23,930 --> 00:12:28,940 Dakle Huffman predložio da spojimo te dvije najmanje čvorova u novom stablu 195 00:12:28,940 --> 00:12:34,450 uvođenjem novog roditeljski čvor, a zatim dati tog roditelja lijevo dijete i pravo dijete 196 00:12:34,450 --> 00:12:37,720 gdje je B samovoljno lijevo i C je samovoljno pravo. 197 00:12:37,720 --> 00:12:41,590 A onda Huffman dalje predložio da neka je sada samo misliti na lijevoj djeteta 198 00:12:41,590 --> 00:12:44,790 u jednoj od tih stabala uvijek kao zastupa s 0 199 00:12:44,790 --> 00:12:47,890 i pravo dijete uvijek kao da predstavlja broj 1. 200 00:12:47,890 --> 00:12:50,680 >> To ne smeta ako ih okrenuti tako dugo dok ste dosljedni. 201 00:12:50,680 --> 00:12:54,650 Tako sada imamo četiri stabla u ovoj šumi. 202 00:12:54,650 --> 00:12:58,050 A ja kažem četiri jer sada je stablo na lijevoj strani - 203 00:12:58,050 --> 00:13:00,570 i to ne toliko stablo u smislu da raste na ovaj način, 204 00:13:00,570 --> 00:13:05,170 to je više kao obiteljsko stablo gdje je sada od 0,2 je vrsta roditelja od dvoje djece - 205 00:13:05,170 --> 00:13:07,930 primijetiti da je u tom roditelju smo izvučeni 0,2. 206 00:13:07,930 --> 00:13:13,370 Dodali smo frekvencije točaka dvoje djece, a dobio je novi čvor ukupni zbroj. 207 00:13:13,370 --> 00:13:15,310 Dakle, sada smo samo ponoviti ovaj postupak. 208 00:13:15,310 --> 00:13:19,490 Nađi dviju najmanjih čvorove, a zatim im se pridruže u novom stablu 209 00:13:19,490 --> 00:13:21,380 , a zatim ponovite postupak dalje. 210 00:13:21,380 --> 00:13:26,390 Trenutno imamo nekoliko kandidata, 20%, 15%, a drugi 20%. 211 00:13:26,390 --> 00:13:29,780 U tom slučaju, moramo razbiti kravatu. Možemo to učiniti proizvoljno. 212 00:13:29,780 --> 00:13:31,540 Mi smo samo trebali to učiniti dosljedno. 213 00:13:31,540 --> 00:13:33,760 U tom slučaju, ja ću otići samovoljno s jedne na lijevoj strani, 214 00:13:33,760 --> 00:13:39,880 i ja sada spojiti 20% i 15% da će mi dati novi roditelj zove 35%, 215 00:13:39,880 --> 00:13:46,310 čija je lijevo dijete je 0, čije je pravo dijete je jedan, a sada imamo samo tri stabla u šumi. 216 00:13:46,310 --> 00:13:47,960 Vi možda možete vidjeti gdje se to događa. 217 00:13:47,960 --> 00:13:51,150 Ako smo ponoviti ovaj par više puta, da ćemo imati samo jedan veći stablo, 218 00:13:51,150 --> 00:13:53,900 svi čiji su rubovi su označeni 0S i 1S. 219 00:13:53,900 --> 00:13:55,710 Ajmo to učiniti opet. 220 00:13:55,710 --> 00:14:02,600 35% je to stablo je korijen. 20% i 45%, tako da ćemo spojiti 35% i 20%. 221 00:14:02,600 --> 00:14:05,610 Sada imamo ovo drvo ovdje. Mi dodati one zajedno, imamo 55%. 222 00:14:05,610 --> 00:14:07,910 Sada postoje samo dvije stabla u šumi. 223 00:14:07,910 --> 00:14:11,900 Mi radimo ovo jedan posljednji put, a nadamo se matematički sve frekvencije zbrojiti 224 00:14:11,900 --> 00:14:15,570 jer budući bi ih računaju od get-ići dodati i do 100%. 225 00:14:15,570 --> 00:14:17,960 I sada imamo jednog stabla. 226 00:14:17,960 --> 00:14:20,580 Dakle, ovo je stablo Huffman ovo kodiranje. 227 00:14:20,580 --> 00:14:24,400 To je vrsta je neko vrijeme da se tamo verbalno, ali stvarnost je s for petlje 228 00:14:24,400 --> 00:14:27,620 ili s rekurzivne funkcije, mogli izgraditi ovu stvar prilično brzo. 229 00:14:27,620 --> 00:14:32,440 Tako sada imamo jedan novi čvor, a sve od tih unutarnjih čvorova su malloc'd, 230 00:14:32,440 --> 00:14:34,690 vjerojatno, usput. 231 00:14:34,690 --> 00:14:38,650 Dakle, sada je na vrhu ovog drveta imamo 100%, ali sada primjetiti imamo put 232 00:14:38,650 --> 00:14:43,780 od ova nova pra-pra-pra-baka ili djed na sve pra-pra-praunuka 233 00:14:43,780 --> 00:14:45,930 sve na dnu, na sve lišća. 234 00:14:45,930 --> 00:14:52,840 >> Što ćemo učiniti sada je predložiti da se u cilju predstavljaju slovo E, 235 00:14:52,840 --> 00:14:55,670 jednostavno ćemo koristiti broj jedan. Zašto? 236 00:14:55,670 --> 00:15:01,000 Jer, ako smo prošli ovo drvo od konačnog korijena do lišća poznat kao E, 237 00:15:01,000 --> 00:15:06,050 pratimo samo jednu prednost, desnog ruba, i da je označen naravno u gornjem desnom jednom. 238 00:15:06,050 --> 00:15:11,550 Dakle, implikacija ovdje Huffman je da e je kodiranje u binarnom samo će biti jedan. 239 00:15:11,550 --> 00:15:14,490 I to je ljepušan osuditi učinkovit. Stvarno ne mogu dobiti bilo manje od toga. 240 00:15:14,490 --> 00:15:18,350 S druge strane, što će biti zastupljena, ako slijedite logiku, 241 00:15:18,350 --> 00:15:21,610 ono što uzorak bitova umjesto toga? 01. 242 00:15:21,610 --> 00:15:25,500 Dakle, doći do, možemo početi u korijenu i idemo lijevo i onda idemo desno, 243 00:15:25,500 --> 00:15:28,580 što znači da slijedi 0, a zatim jedan. 244 00:15:28,580 --> 00:15:32,810 Tako ćemo predstavljati pismo s uzorkom 0 i 1. 245 00:15:32,810 --> 00:15:36,010 I sada primjetiti već imamo svojstvo neposrednoj decodability 246 00:15:36,010 --> 00:15:38,090 da nismo imali u Morse kodu. 247 00:15:38,090 --> 00:15:42,840 Iako obje ove uzoraka su prilično kratka - E 1 malo, je dva bita - 248 00:15:42,840 --> 00:15:45,080 primijetiti da se oni ne mogu zamijeniti jedan ili drugi, 249 00:15:45,080 --> 00:15:54,870 jer ako vidite jedan je dobio da bude E, ako vidite 0 tada jedan očito je dobio biti A. 250 00:15:54,870 --> 00:15:58,410 Isto tako, ono što je D? 001. 251 00:15:58,410 --> 00:16:01,440 Što je C? 0001. 252 00:16:01,440 --> 00:16:05,320 I ono što je B? 0000. 253 00:16:05,320 --> 00:16:09,550 I opet, jer sve od slova mi je stalo su na lišću 254 00:16:09,550 --> 00:16:13,890 i nitko od njih su vrsta posrednika na putu od korijena do lista, 255 00:16:13,890 --> 00:16:18,760 ne postoji rizik od conflating dva slova 'različitih kodiranja 256 00:16:18,760 --> 00:16:22,300 jer sve ove bitne uzorcima deterministička. 257 00:16:22,300 --> 00:16:25,280 0000 uvijek će biti B. 258 00:16:25,280 --> 00:16:29,480 Nema čvor negdje između da bi moglo zbuniti jedno slovo za druge. 259 00:16:29,480 --> 00:16:31,150 Dakle, ono što je implikacija ovdje? 260 00:16:31,150 --> 00:16:35,080 >> Najpopularniji pismo - u ovom slučaju E - je stečen najkraći kodiranje, 261 00:16:35,080 --> 00:16:37,430 Je stečen sljedeću najkraći kodiranje, 262 00:16:37,430 --> 00:16:41,390 i B i C, koje smo već znali od get-ići su vrste najmanje popularan 263 00:16:41,390 --> 00:16:45,390 na 10% frekvencije svakog, oni su dobili najdužu kodiranje. 264 00:16:45,390 --> 00:16:49,410 I tako ono što to znači sada je da ako želite poslati poruku da je komprimirana 265 00:16:49,410 --> 00:16:51,950 preko Interneta ili na e-mail ili slično, 266 00:16:51,950 --> 00:16:56,730 radije nego da koristite standardni ASCII, možete poslati Huffman kodiranu poruku 267 00:16:56,730 --> 00:17:01,720 pri čemu ako želite poslati na slovo E, šaljete samo jedan zalogaj. 268 00:17:01,720 --> 00:17:05,680 Ako želite slati, možete poslati dva bita, 01, umjesto slanja 8 bita 269 00:17:05,680 --> 00:17:10,190 slijedi još osam bitova slijedi još osam bita i tako dalje. 270 00:17:10,190 --> 00:17:11,940 No, tu je Gotcha ovdje. 271 00:17:11,940 --> 00:17:17,079 To nije dovoljno samo izgraditi ovo stablo, a zatim početi slati iz Alice da Bob 272 00:17:17,079 --> 00:17:20,010 kraći bitni uzorak, niz od ASCII, 273 00:17:20,010 --> 00:17:23,140 jer Alice također mora obavijestiti Boba čega 274 00:17:23,140 --> 00:17:26,880 ako Bob će moći čitati svoju komprimiranu poruku? 275 00:17:26,880 --> 00:17:30,770 [Nečujno učenik odgovor] >> Što je to? 276 00:17:30,770 --> 00:17:32,310 [Nečujno učenik odgovor] >> Od ono stablo. 277 00:17:32,310 --> 00:17:35,160 Ili još točnije, ono što ti kodiranja su, 278 00:17:35,160 --> 00:17:39,010 pogotovo jer tijekom ove priče smo napravili sud poziva u jednom trenutku. 279 00:17:39,010 --> 00:17:43,640 Sjetite se da smo morali odabrati proizvoljno između dviju različitih 20% čvorova? 280 00:17:43,640 --> 00:17:49,800 Dakle, to nije slučaj da je Bob, primatelj, mogu samo rekonstruirati stablo na vlastiti 281 00:17:49,800 --> 00:17:53,390 jer možda on će stvoriti stablo ikada tako nešto drugačije od Alice. 282 00:17:53,390 --> 00:17:56,670 Štoviše, Bob ni ne znaju što je izvorna poruka 283 00:17:56,670 --> 00:18:00,770 jer je jedino Alice ga šalje, naravno, je komprimirani poruka. 284 00:18:00,770 --> 00:18:05,900 >> Tako je kvaka s kompresije kao što je to, da, Alice može uštedjeti puno bitova 285 00:18:05,900 --> 00:18:09,900 slanjem jedan za E i 01 za i tako dalje, 286 00:18:09,900 --> 00:18:15,180 ali ona također mora obavijestiti Bob što mapiranje između slova i komadići 287 00:18:15,180 --> 00:18:19,620 jer nije jasno mogu osloniti na samo ASCII više ako nećemo koristiti ASCII. 288 00:18:19,620 --> 00:18:22,200 Dakle, ona može poslati mu stablo nekako - 289 00:18:22,200 --> 00:18:26,600 zapisati, spremite ga u obliku binarnih podataka ili nešto slično - 290 00:18:26,600 --> 00:18:30,280 ili samo poslati mu malo varati list, Excel datoteka, koji pokazuje mapiranja. 291 00:18:30,280 --> 00:18:36,480 Dakle, učinkovitost kompresije stvarno pretpostavlja da su poruke koje šaljete 292 00:18:36,480 --> 00:18:40,230 su prilično veliki, barem srednje veličine, 293 00:18:40,230 --> 00:18:42,180 jer ako šaljete super kratku poruku, 294 00:18:42,180 --> 00:18:45,390 ako baš želite poslati poruku LOŠE, koji se dogoditi da bude riječ možemo čarolija ovdje, 295 00:18:45,390 --> 00:18:49,550 B-D, vjerojatno ćete koristiti manje komadiće, 296 00:18:49,550 --> 00:18:53,130 ali kvaka je ako imate obavijestiti Bob što je stablo 297 00:18:53,130 --> 00:18:57,530 ili ono što oni kodiranja su, ti si idući u vjerojatno prevagnuti sve štednje 298 00:18:57,530 --> 00:19:00,110 vlasništvo komprimirane stvari na početak. 299 00:19:00,110 --> 00:19:02,210 Dakle, to zapravo može biti slučaj da ako pokušate sažimanje 300 00:19:02,210 --> 00:19:05,330 čak i uz nešto poput zip ili datoteku formata možda biti upoznat s - 301 00:19:05,330 --> 00:19:07,780 prilično male datoteke, čak i prazne datoteke - 302 00:19:07,780 --> 00:19:10,930 ponekad te datoteke može dobiti veći i ne manje. 303 00:19:10,930 --> 00:19:14,320 No, realno, to se događa samo za male veličine datoteka, 304 00:19:14,320 --> 00:19:16,920 pa to neće napraviti gigabajta datoteka biti dva gigabajta; 305 00:19:16,920 --> 00:19:19,480 mi stvarno pričamo bajtova ili samo par kilobajta. 306 00:19:19,480 --> 00:19:22,330 >> Neki programi poput zip su dovoljno pametni da shvate da, 307 00:19:22,330 --> 00:19:24,590 "Ti ćeš potrošiti više bitova sažimanje to." 308 00:19:24,590 --> 00:19:27,460 "Dopustite mi ne smetaju ga sažimanje za vas na sve." 309 00:19:27,460 --> 00:19:30,160 Dakle, ovo je samo jedan od načina zatim sažimanje teksta format. 310 00:19:30,160 --> 00:19:32,300 Mi smo mogli provesti nešto ovako u C. 311 00:19:32,300 --> 00:19:35,370 Na primjer, ovdje je kako bismo mogli predstavljati čvor u ovom stablo 312 00:19:35,370 --> 00:19:39,320 gdje smo char za simbol, plutajući vrijednost za frekvencije, 313 00:19:39,320 --> 00:19:42,250 i kao što smo vidjeli s našim drugim strukturama podataka, 2 pokazivače, 314 00:19:42,250 --> 00:19:47,080 1 lijevo dijete, 1 na desnoj strani, od kojih bilo koji može biti NULL, 315 00:19:47,080 --> 00:19:50,850 ali ako ne, to se odnosi na lijevoj djeteta i pravo djeteta. 316 00:19:50,850 --> 00:19:55,130 Dakle, to je onda Huffman ovo kodiranje, i to je jedan od načina da možete ići oko sažimanje podataka, 317 00:19:55,130 --> 00:19:57,880 i to je sigurno jedan od najvažnijih lako provesti 318 00:19:57,880 --> 00:20:00,830 u kontekstu, recimo, prošlotjednih strukturama podataka, 319 00:20:00,830 --> 00:20:03,250 iako čak i više sofisticirane algoritme postoje 320 00:20:03,250 --> 00:20:08,220 koji može učiniti čak i više sofisticirane mutacije vaših podataka. 321 00:20:08,220 --> 00:20:11,640 Sva pitanja onda na stablima, binarnih stabala, ili kompresije teksta? 322 00:20:11,640 --> 00:20:15,590 [Student] Ima li neki dvosmislenosti, kao i ako [nečujno] podijeljen na 01, 323 00:20:15,590 --> 00:20:19,160 zatim 011 će biti dvosmislena, zar ne? 324 00:20:19,160 --> 00:20:22,730 [Nečujno] >> Dobro pitanje. Dvosmislenost. 325 00:20:22,730 --> 00:20:25,940 Dopustite mi da sažeti pozivajući se na ovoj slici ovdje. 326 00:20:25,940 --> 00:20:29,650 Budući da su likovi koje prešanje, prikazima, 327 00:20:29,650 --> 00:20:32,850 po definiciji ovog algoritma uvijek ostati lišće, 328 00:20:32,850 --> 00:20:41,870 nikad slučajno ćete koristiti isti uzorak bitova za prefiksa od više slova. 329 00:20:41,870 --> 00:20:46,740 Dakle, drugim riječima, ti si zabrinut, to zvuči kao, dvosmislenosti koje proizlaze 330 00:20:46,740 --> 00:20:51,580 pri čemu 001 bi mogao biti početak B ili početak C ili nešto slično. 331 00:20:51,580 --> 00:20:56,780 Ali to ne može biti slučaj, jer obavijest da su sve slova abecede smo kodiranje 332 00:20:56,780 --> 00:20:58,290 su na lišću. 333 00:20:58,290 --> 00:21:01,910 >> I neodređenost može samo ustati, kao u slučaju Morse koda, 334 00:21:01,910 --> 00:21:06,770 ako, na primjer, C bio negdje na putu od korijena do B. 335 00:21:06,770 --> 00:21:12,290 [Student] Točno. Dakle, u tom slučaju, kažu ima dva lišće. >> Recimo ima - Reci to ponovno. 336 00:21:12,290 --> 00:21:18,760 [Student] Reci ima dva lišće, F i G, a zatim G - >> ok. Ali, to ne mogu. 337 00:21:18,760 --> 00:21:23,230 Sama po sebi ne bi mogao imati lišće F i G jer oni slovima F i G 338 00:21:23,230 --> 00:21:27,560 bi sami biti ostavlja negdje na lijevoj B ili pravo na E. 339 00:21:27,560 --> 00:21:28,900 Dakle, po definiciji, oni moraju biti lišće. 340 00:21:28,900 --> 00:21:32,940 Inače, ti si to točno, ne bismo si riješio problem da Morseov kod suočava. 341 00:21:32,940 --> 00:21:38,150 Dobro pitanje. Ostala pitanja? U redu. 342 00:21:38,150 --> 00:21:42,050 Taj pojam bita, ispada da smo imali snage svi zajedno da mi ne nisam zapravo koristi 343 00:21:42,050 --> 00:21:44,200 kada je došao na manipuliranje ove 0S i 1S. 344 00:21:44,200 --> 00:21:46,600 Pitali smo o tome na jednom od prvih problema seta: 345 00:21:46,600 --> 00:21:52,340 Naime, kako idete o pretvaranju veliko u mala slova ili obratno? 346 00:21:52,340 --> 00:21:55,460 Ili, konkretnije, jedan od onih prvi psets upitao 347 00:21:55,460 --> 00:22:01,090 koliko bita ti zapravo morati okrenuti kako bi se promijeniti u mala slova a ili obrnuto? 348 00:22:01,090 --> 00:22:05,580 Evo kratkog podsjetnika ono 65 i 97 izgledaju u binarnom. 349 00:22:05,580 --> 00:22:08,060 A čak i ako to pitanje je vrsta blijedi u sjećanju, 350 00:22:08,060 --> 00:22:11,290 možete vidjeti da se ovdje koliko bitova treba zrcaljeno 351 00:22:11,290 --> 00:22:15,810 promijeniti kapital u mala slova? Samo jedan. 352 00:22:15,810 --> 00:22:19,650 >> Oni se razlikuju samo u jednom mjestu, treći bitni s lijeve strane. 353 00:22:19,650 --> 00:22:24,240 Dok ima 010, malo ima 011. 354 00:22:24,240 --> 00:22:26,250 Tako nekako, moramo samo biti u mogućnosti okrenuti tu malo, 355 00:22:26,250 --> 00:22:29,410 i tada možemo kapitalizirati ili malih slova. 356 00:22:29,410 --> 00:22:32,720 Mi smo to učinili u prošlosti zapravo koristi ako se uvjeti 357 00:22:32,720 --> 00:22:35,930 i provjere da li je slovo između grada A i grada Z, 358 00:22:35,930 --> 00:22:41,480 zatim izlazi kao - + 26 ili nešto slično. 359 00:22:41,480 --> 00:22:46,130 Vjerojatno je aritmetički promjenu slova abecede. 360 00:22:46,130 --> 00:22:49,270 No, što ako smo samo mogli okrenuti tu jednu malo? 361 00:22:49,270 --> 00:22:59,080 Kako bi idete o uzimajući jedan byte vrijedi bitova, tako 8 bita kao 01000001 i 01100001? 362 00:22:59,080 --> 00:23:03,170 Ako ste imali one uzorke bitova, kako možemo ići o promjeni samo jedan od njih? 363 00:23:03,170 --> 00:23:07,610 Što ako uvedemo u žuto ovdje ovaj drugi uzorak bita? 364 00:23:07,610 --> 00:23:13,420 Ako sam napraviti cijeli žute string 0S osim za jedan bit da želim promijeniti 365 00:23:13,420 --> 00:23:17,900 i onda sam uvesti novu operatera poznat kao bitovne operatera - 366 00:23:17,900 --> 00:23:21,210 bitovni u smislu da djeluje na pojedinačne bitove, 367 00:23:21,210 --> 00:23:25,360 ne na cijeli bajt ili četiri bytes sve odjednom. 368 00:23:25,360 --> 00:23:31,170 Ova okomita traka postoji u žute sugerira da što ako uzmemo zastupljenost kapitala A 369 00:23:31,170 --> 00:23:37,060 i bitovni OR to sa žutom slijed bita? 370 00:23:37,060 --> 00:23:41,300 Drugim riječima, mislim natrag na našu raspravu o Boolean izraza u nule, a zatim u C. 371 00:23:41,300 --> 00:23:47,520 >> Doing boolean ili znači da bi bilo istinito, bilo prva stvar mora biti istina 372 00:23:47,520 --> 00:23:50,700 ili druga stvar je da bi bilo istinito ili oboje moraju biti istinita, 373 00:23:50,700 --> 00:23:53,270 , a zatim je rezultiralo izlaz je sama istina. 374 00:23:53,270 --> 00:24:00,230 U ovom slučaju ovdje, što ćemo dobiti ako uzmemo 0 "ili" ed s 0? Lažna ili lažno? 375 00:24:00,230 --> 00:24:04,280 To je još uvijek lažno, tako da je mala ostaje kao što se očekuje. 376 00:24:04,280 --> 00:24:07,540 Što ako umjesto radimo jedan ili 0? 377 00:24:07,540 --> 00:24:12,640 Ovo je sada ostaje jedan, ali primijetiti ono što će se dogoditi ovdje. 378 00:24:12,640 --> 00:24:18,630 Ako počnemo s kapitalom A i mi i dalje "ili" na pojedinačne bitove kao radimo ovdje, 379 00:24:18,630 --> 00:24:25,180 0 ili žuti nam daje ono što ovdje dolje? To nam daje jedan. 380 00:24:25,180 --> 00:24:35,120 U stvari, pretpostavljam da nismo znali što veliko verzija malo zapravo bio. 381 00:24:35,120 --> 00:24:38,270 Hajdemo to učiniti. Dopustite mi da se presele natrag u ovu ovdje. 382 00:24:38,270 --> 00:24:42,340 Ajmo to učiniti opet. 0 ili 0 mi daje 0. 383 00:24:42,340 --> 00:24:45,020 1 ili 0 mi daje jedan. 384 00:24:45,020 --> 00:24:48,020 0 ili 1 mi daje jedan. 385 00:24:48,020 --> 00:24:52,880 0 ili 0 mi daje 0. Sljedeći je 0, sljedeći je 0, sljedeći je 0. 386 00:24:52,880 --> 00:24:55,660 1 ili 0 mi daje jedan. 387 00:24:55,660 --> 00:24:59,140 I tako, čak i ako nismo znali unaprijed što kurent je, 388 00:24:59,140 --> 00:25:04,770 jednostavno "ili" ing s ovim uzorkom bitova koje smo predstavili ovdje u žuto, 389 00:25:04,770 --> 00:25:09,400 možete mala slova na kapital po flipping tu malo. 390 00:25:09,400 --> 00:25:11,580 Mi smo koristili ovaj izraz tjedana prije: flipping malo. 391 00:25:11,580 --> 00:25:13,710 Kako ste zapravo to programatski? 392 00:25:13,710 --> 00:25:16,390 Možete koristiti ono što se općenito zove masku, slijed bitova, 393 00:25:16,390 --> 00:25:19,980 da je u ovom slučaju samo tako dogodi da izgleda kao ovaj broj ovdje, 394 00:25:19,980 --> 00:25:22,980 i onda "ili" to zajedno koristeći ovu novu C operatera, 395 00:25:22,980 --> 00:25:29,940 Ne | |, koristite jedan | i ti bi zapravo dobili ovaj odgovor ovdje jer zašto? 396 00:25:29,940 --> 00:25:35,120 Ovo je mjesto 1s, 2s mjesto, 4s, 8s, 16s, 32s. 397 00:25:35,120 --> 00:25:42,280 Tako ispada da ako se slovo i bitovni OR to s integer 32, 398 00:25:42,280 --> 00:25:47,520 jer integer 32, kada na to gledate kao bita, izgleda ovako, 399 00:25:47,520 --> 00:25:50,860 to znači da možete okrenuti malo da ste zapravo želite. 400 00:25:50,860 --> 00:25:52,630 A slično - i mi ćemo pogledati koda u samo jednom trenutku - 401 00:25:52,630 --> 00:25:54,210 Pretpostavljam da želimo ići u drugom smjeru. 402 00:25:54,210 --> 00:25:58,210 >> Kako vam ići od malih slova u kapitalu A? Koji malo treba promijeniti? 403 00:25:58,210 --> 00:25:59,820 To je isti onaj. 404 00:25:59,820 --> 00:26:03,970 Želimo promijeniti taj treći zalogaj od 1 do 0. 405 00:26:03,970 --> 00:26:06,310 A kako bismo mogli ići o događaj ovaj? 406 00:26:06,310 --> 00:26:10,130 Kako smo isključili malo? Uz ono što uzorak bitova možemo isključiti malo? 407 00:26:11,580 --> 00:26:14,070 Što ako smo sortirati od invertni maske? 408 00:26:14,070 --> 00:26:17,350 Dok prije, napravili smo cijelu žutu masku 0S 409 00:26:17,350 --> 00:26:19,930 osim za jedan malo smo htjeli uključiti, 410 00:26:19,930 --> 00:26:25,580 što ako ovaj put, možemo napraviti cijeli maska ​​1s osim malo da želimo isključiti 411 00:26:25,580 --> 00:26:28,330 , a zatim koristiti ono što operator? 412 00:26:28,330 --> 00:26:30,560 Što ako mi "i" stvari? Idemo pogledati. 413 00:26:30,560 --> 00:26:34,880 Ako mi sada okrenuti na ovo, pretpostavljam da opet mogu stvoriti masku koja je sve 1s 414 00:26:34,880 --> 00:26:37,650 osim za jedan bit da želim isključiti 415 00:26:37,650 --> 00:26:43,860 i onda umjesto "ili" bijeli brojevi do vrha sa žutim brojevima ovdje dolje, 416 00:26:43,860 --> 00:26:46,940 što ako sam umjesto "i" njih zajedno? To se zove bitovni i. 417 00:26:46,940 --> 00:26:49,450 Logično, to je ista stvar kao i boolean. 418 00:26:49,450 --> 00:26:55,160 To mi daje 0 & 1 je 0. Dakle, lažno i istinito je lažna. 419 00:26:55,160 --> 00:26:58,160 Istina i istina je istina. 420 00:26:58,160 --> 00:27:04,020 I ovdje je čarolija: Istina i lažno je sada lažna, tako da smo isključili tu malo. 421 00:27:04,020 --> 00:27:06,560 I sada Ostatak priče je nešto jednostavno. 422 00:27:06,560 --> 00:27:11,970 Budući da je ostatak maske je 1s, to ne smeta što su brojevi u bijelom. 423 00:27:11,970 --> 00:27:15,580 Kada "i" nešto s istina, nećeš se promijeniti svoju vrijednost. 424 00:27:15,580 --> 00:27:20,200 Ako je to istina, to će ostati vjeran. Ako je to bila lažna, ona će ostati lažna. 425 00:27:20,200 --> 00:27:23,190 >> No, magija se događa kada se uzme nešto što je istina 426 00:27:23,190 --> 00:27:25,430 i onda "i" to s lažno. 427 00:27:25,430 --> 00:27:30,030 Ovo ima učinak isključivanja tu malo. 428 00:27:30,030 --> 00:27:31,980 Dakle, malo zagonetan postoji. 429 00:27:31,980 --> 00:27:35,390 Ajmo zapravo gledati u nekom kodu, što zapravo može izgledati čak i više zagonetan, 430 00:27:35,390 --> 00:27:38,220 ali ajmo pogledati ovdje na tolower. 431 00:27:38,220 --> 00:27:45,880 Ako gledam tolower, ide od kapitala u mala slova, 432 00:27:45,880 --> 00:27:47,730 ajmo vidjeti kako bismo mogli provesti ovaj program. 433 00:27:47,730 --> 00:27:51,280 Ovdje je glavni, i to ne uzimanje bilo kakvih naredbenog retka argumente. 434 00:27:51,280 --> 00:27:55,980 Ja sam deklariranje znaka c za pismo koje je korisnik će upisati u. 435 00:27:55,980 --> 00:28:00,690 I onda koristiti poznati učiniti dok petlja samo kako bi bili sigurni da je korisnik definitivno mi daje kapital 436 00:28:00,690 --> 00:28:05,010 ili B ili C. .. Z, tako da dajte mi nešto između i Z. 437 00:28:05,010 --> 00:28:08,580 A sad, što ja radim ovdje? 438 00:28:08,580 --> 00:28:14,870 Ja sam "ili" ing. ovo sa 0x20, ali to je zapravo isti kao i - 439 00:28:14,870 --> 00:28:19,500 a mi ćemo se vratiti na to u trenutku - 32. 440 00:28:19,500 --> 00:28:24,830 Pa opet, 32 je ovaj uzorak bitova ovdje. Zašto to znamo? 441 00:28:24,830 --> 00:28:26,320 Samo se sjetim tjedan 0. 442 00:28:26,320 --> 00:28:31,010 Ovo je mjesto 1s, 2s mjesto, 4s, 8s, 16s, 32s mjesto. 443 00:28:31,010 --> 00:28:33,470 Dakle, ovo žuto broj se dogoditi da bude 32. 444 00:28:33,470 --> 00:28:40,570 I onda se može uzeti pismo kao char ovdje, bitovni "ili" to s doslovno brojem 32, 445 00:28:40,570 --> 00:28:45,250 i što ću dobiti natrag? Mala verzija koja char. 446 00:28:45,250 --> 00:28:48,830 Trenutak prije, iako sam to izrazio na drugačiji baze zapis. 447 00:28:48,830 --> 00:28:51,370 Što je to predstavljaju? >> [Student] Heksadecimalni. 448 00:28:51,370 --> 00:28:53,050 [Malan] To se događa da predstavljaju heksadecimalnim. 449 00:28:53,050 --> 00:28:55,170 Nismo razgovarali o heksadecimalni sve to puno, 450 00:28:55,170 --> 00:28:57,330 ali to je zapravo zgodan u ovakvim slučajevima. 451 00:28:57,330 --> 00:29:01,730 >> Iako to izgleda složeniji i iako to izgleda kao 20, a ne 32, 452 00:29:01,730 --> 00:29:06,240 Ispada da heksadecimalni je zapravo super povoljno notacija 453 00:29:06,240 --> 00:29:10,810 jer u heksadecimalnom svaka znamenka nakon 0x - a to ne znači ništa; 454 00:29:10,810 --> 00:29:13,960 to je samo ljudska konvencija koja kaže ovdje dolazi heksadecimalni broj - 455 00:29:13,960 --> 00:29:18,590 svaki od tih znamenki, 2 i zatim 0, sami mogu biti predstavljeni 456 00:29:18,590 --> 00:29:20,800 s točno četiri bita. 457 00:29:20,800 --> 00:29:27,840 Dakle, ako smo to učinili, neka mi otvoriti tekst editor ovdje - čudno samodovršetak - 458 00:29:27,840 --> 00:29:35,940 ako ćemo učiniti malo tekst editor ovdje, broj 0x20 znači ovdje je 4 bita, evo još četiri bita. 459 00:29:35,940 --> 00:29:38,050 Učinimo krajnjem desnom četiri bita prvi. 460 00:29:38,050 --> 00:29:44,690 0 kada zastupljena s četiri bita je ono? Super jednostavan. Samo sve 0s. 461 00:29:44,690 --> 00:29:46,780 Dakle, četiri bita što 0S. 462 00:29:46,780 --> 00:29:53,510 Kako vam predstavljaju dva? Prošlo je neko vrijeme otkad smo to učinili, ali to je 0100. 463 00:29:53,510 --> 00:29:57,310 Dakle, ovo je mjesto 1s, ovo je 2s mjesto, a zatim ga ne smeta što je na drugim mjestima su. 464 00:29:57,310 --> 00:30:00,610 Drugim riječima, u heksadecimalnom moglo bi se reći 0x20, 465 00:30:00,610 --> 00:30:04,340 ali ako onda razmišljati o tome što je dva i kako se to predstavlja u binarnom, 466 00:30:04,340 --> 00:30:07,130 što je 0, a kako je to zastupljena u binarnom, 467 00:30:07,130 --> 00:30:10,440 odgovori na ta pitanja su to i to, respektivno. 468 00:30:10,440 --> 00:30:14,380 Dakle, 0x20 dogodi da predstavljaju ovaj uzorak 8 bita, 469 00:30:14,380 --> 00:30:16,880 koji je upravo maska ​​da smo htjeli. 470 00:30:16,880 --> 00:30:20,140 Dakle, ovo je za sada samo intelektualna vježba, 471 00:30:20,140 --> 00:30:24,520 ali stvarnost je u kodu to je obično češći pisati konstante kao što je ovaj 472 00:30:24,520 --> 00:30:28,360 u heksadecimalnom jer onda programer može relativno lako, 473 00:30:28,360 --> 00:30:32,560 čak i ako to zahtijeva neki papir i olovku, shvatiti što je to uzorak bitova je 474 00:30:32,560 --> 00:30:35,960 jer ne možete samo izraziti 0s i 1s obično u kodu. 475 00:30:35,960 --> 00:30:38,540 Vi ne možete ići 00010 i tako dalje. 476 00:30:38,540 --> 00:30:42,380 >> Morate pokupiti decimalna ili heksadecimalni ili oktalni ili druge notacije. 477 00:30:42,380 --> 00:30:47,540 Većina ljudi imaju tendenciju da odaberete heksadecimalnim jednostavno tako da se svaka znamenka predstavlja četiri bita 478 00:30:47,540 --> 00:30:49,320 i možete to učiniti brzo matematiku. 479 00:30:49,320 --> 00:30:54,990 I ja ću mahati ruku na toupper, što je gotovo isto, izgleda gotovo identično. 480 00:30:54,990 --> 00:31:01,900 Toupper dogodi koristiti a ne ili operatora nego ovaj momak i DF. 481 00:31:01,900 --> 00:31:09,300 Što df predstavljaju? df? Svatko? >> [Student] 255. 482 00:31:09,300 --> 00:31:12,780 255? Nije 255. To će biti dalje. 483 00:31:12,780 --> 00:31:15,210 Mi ćemo napustiti ovaj jedan kao malo vježbe. 484 00:31:15,210 --> 00:31:23,460 Ali ako se ide od 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 i zatim što dolazi nakon 9? 485 00:31:23,460 --> 00:31:26,510 Mi smo vrsta izvan decimalnih znamenki, ali u heksadecimalnom ono što dolazi nakon 9? 486 00:31:26,510 --> 00:31:29,510 [Student]. >> Dakle, b, c, d. 487 00:31:29,510 --> 00:31:33,470 Možete shvatiti od tamo što uzorak bitova d. zapravo predstavlja. 488 00:31:33,470 --> 00:31:38,850 A ako ćemo učiniti math, vidjet ćemo da je maska ​​ćete završiti dobivanje natrag je identičan ovome. 489 00:31:38,850 --> 00:31:45,580 Ovo je f, a sve 1s, a to je d. Dakle, df predstavlja tu masku. U redu. 490 00:31:45,580 --> 00:31:50,980 I na kraju, da ne bi stvari zvuk super, super, tehničku 491 00:31:50,980 --> 00:31:53,840 ali pretpostavljam da smo htjeli napisati program koji radi ovo. 492 00:31:53,840 --> 00:31:58,960 Dopustite mi ići naprijed i učiniti binarni, koji je program u datoteci pod nazivom binary.c. 493 00:31:58,960 --> 00:32:02,050 I sada neka mi pokrenuti binarni i dati mi ne negativan cijeli broj. 494 00:32:02,050 --> 00:32:03,960 Počnimo lako i putovanja u 0. 495 00:32:03,960 --> 00:32:09,010 Ovo sada je program koji ispisuje cijeli broj u svom binarnom reprezentacije. 496 00:32:09,010 --> 00:32:13,470 Dakle, ako sam igrati ovu igru ​​ponovno i upisati samo jedan, ja bi trebao dobiti 32-bitni prikaz jednog. 497 00:32:13,470 --> 00:32:15,490 Ako sam to učiniti opet s 2, ja bi trebao dobiti to. 498 00:32:15,490 --> 00:32:19,310 Ako radim 7, ja bi trebao dobiti nekoliko 1s na kraju i tako dalje. 499 00:32:19,310 --> 00:32:22,740 Ispada Spominjem ovo jer s bitovni operacije 500 00:32:22,740 --> 00:32:25,490 što zapravo može učiniti jedna druga stvar, kao dobro. 501 00:32:25,490 --> 00:32:29,130 Možete stvoriti ove maske dinamički. 502 00:32:29,130 --> 00:32:32,800 Pogledajte ovaj jedan završni primjer uključuje bitovni operacije. 503 00:32:32,800 --> 00:32:35,490 Ovdje je prvi dio koda, brz korisnik za broj, 504 00:32:35,490 --> 00:32:38,130 i inzistira da li mi dati ne-negativni cijeli broj. 505 00:32:38,130 --> 00:32:39,780 Dakle, to je neka vrsta stare školske stvari. 506 00:32:39,780 --> 00:32:41,980 No, ovdje je nešto što je vrsta zanimljiv. 507 00:32:41,980 --> 00:32:44,910 >> Kako mogu ići o ispisu broja u binarni? 508 00:32:44,910 --> 00:32:48,970 Prvi put sam ponoviti od čega na što? 509 00:32:48,970 --> 00:32:52,270 Što je veličina int pravilu, barem u aparatu? >> [Student] 4. 510 00:32:52,270 --> 00:32:57,130 To je četiri. Dakle, 4 * 8 je 32-1 je 31. 511 00:32:57,130 --> 00:33:02,590 Dakle, ako sam počinju računati od 31, koji predstavlja, što se ispostavilo, 512 00:33:02,590 --> 00:33:07,630 samo konceptualno, 31. malo ili bit najvišeg reda, koji je ovaj momak ovdje, 513 00:33:07,630 --> 00:33:09,650 a to će biti bitni 0. 514 00:33:09,650 --> 00:33:12,850 Dakle, ovo je malo ... 01 bitni 31. 515 00:33:12,850 --> 00:33:14,950 Pa što je to kod radi? 516 00:33:14,950 --> 00:33:20,140 Obavijest za ovu petlju, iako to izgleda zagonetan, samo je Ponavljanje od 31 do 0. To je to. 517 00:33:20,140 --> 00:33:24,530 Dakle, zanimljiv dio sada moraju biti u tih 5 redaka ovdje. 518 00:33:24,530 --> 00:33:28,110 Imajte na umu da u toj liniji sam deklariranje varijable zove masku 519 00:33:28,110 --> 00:33:30,790 biti u skladu s našim priče tih žutih brojeva. 520 00:33:30,790 --> 00:33:32,200 I onda što je to radiš? 521 00:33:32,200 --> 00:33:35,720 Ovo je još jedan bitovni operator nismo vidjeli prije, najvjerojatnije. 522 00:33:35,720 --> 00:33:38,300 To je pomak lijevo operater. 523 00:33:38,300 --> 00:33:40,060 Ovaj operater to. 524 00:33:40,060 --> 00:33:44,920 Ovdje je broj 1, a ako to ne učinite sam napustio pomak, lijevi shift, 525 00:33:44,920 --> 00:33:49,260 Što mislite da ima učinak rade na tom pojedinom 1? 526 00:33:49,260 --> 00:33:51,290 Doslovno ga prebacuje preko. 527 00:33:51,290 --> 00:33:57,540 Dakle, ako broj 1 je ono što imate na lijevoj strani, a vi početi ja inicijalizacije do 31., 528 00:33:57,540 --> 00:34:03,490 Što je to učiniti? To se događa da se ovaj broj jedan i guraju ga 31 mjesta ovdje. 529 00:34:03,490 --> 00:34:06,210 I zbog toga je očito nema druge znamenke iza njega, 530 00:34:06,210 --> 00:34:10,350 oni će po defaultu biti zamijenjen sa 0S. 531 00:34:10,350 --> 00:34:15,120 Tako ćete započeti s brojem 1, koji, naravno, izgleda ovako - 532 00:34:15,120 --> 00:34:18,659 i neka mi ga privući ovamo u centru. 533 00:34:18,659 --> 00:34:22,139 I onda, kao što pomaknuti stvari na lijevoj strani, ovaj momak suštini ide na ovaj način. 534 00:34:22,139 --> 00:34:24,659 No, čim se to, 0 dobiva popuniti 535 00:34:24,659 --> 00:34:28,360 Ako pomak ga drugi put, to ide na ovaj način, a drugi 0 dobiva popuniti 536 00:34:28,360 --> 00:34:31,000 >> Možete ga prebaciti opet i onda još 0 dobiva popuniti 537 00:34:31,000 --> 00:34:37,900 Dakle, ako ste to učinili stvar jedne << ja 31 mjesta, te kraj gore uzimajući masku 538 00:34:37,900 --> 00:34:42,550 da je 32 znakova, lijevom od kojih je 1, 539 00:34:42,550 --> 00:34:45,199 sve od ostatka koji su 0. 540 00:34:45,199 --> 00:34:50,880 I to ispada kao stranu, prebacujući broj na lijevoj strani kao što je ovaj 541 00:34:50,880 --> 00:34:53,530 Također slučajno, a ponekad i povoljno, 542 00:34:53,530 --> 00:34:57,520 ima učinak radite što na taj broj? >> [Student] to udvostručenje. 543 00:34:57,520 --> 00:35:00,980 Ga udvostručenje jer svaki od stupova - 1s mjesto, 2S mjesto, 4s mjesto, 544 00:35:00,980 --> 00:35:05,030 8s mjesto, 16s mjesto - they're sve udvostručenje kao i ti ići na lijevoj strani. 545 00:35:05,030 --> 00:35:09,500 Odnosno, kada pomak 1s ćeš završiti udvostručenje vrijednost broja. 546 00:35:09,500 --> 00:35:12,070 Možete završiti radiš zanimljive transformacije znamenki 547 00:35:12,070 --> 00:35:15,640 pomicanjem sve više na taj način po ovlasti dva. 548 00:35:15,640 --> 00:35:17,150 Pa kako to funkcionira? 549 00:35:17,150 --> 00:35:22,580 To onda daje mi masku koja je sve 0s osim jedne u točno na mjestu gdje sam ga želite, 550 00:35:22,580 --> 00:35:27,920 a onda se izraz, koji je ukraden iz toupper.c, 551 00:35:27,920 --> 00:35:31,770 jednostavno govoreći uzeti broj n da korisnik upisao u, 552 00:35:31,770 --> 00:35:34,730 "I" to s tom maskom, i što ćete dobiti? 553 00:35:34,730 --> 00:35:39,200 Ti ćeš dobiti 1 ako postoji jedan u tom maskiranom mjestu, 554 00:35:39,200 --> 00:35:41,570 ili ćeš dobiti 0 ako ne postoji. 555 00:35:41,570 --> 00:35:44,370 I tako sve ovaj program učinkovito ne je da ima petlju, 556 00:35:44,370 --> 00:35:48,340 i to stvara masku s jednom ovdje, onda je jedan ovamo, onda jedan ovamo, 557 00:35:48,340 --> 00:35:52,950 i to koristi ovu bitovni i trik reći postoji jedna bitna u korisničkom ulaz ovdje? 558 00:35:52,950 --> 00:35:59,220 >> Ima jedna bitna u korisničkom ulaz ovdje? A ako je tako, doslovno ispisati jedan, drugi ispisati 0. 559 00:35:59,220 --> 00:36:03,780 Mi smo to sa Ints samo zato to je razlog zašto smo radili 32 bita umjesto osam, 560 00:36:03,780 --> 00:36:06,900 ali ono što smo uveo onda je to bitovni I to bitovni OR, 561 00:36:06,900 --> 00:36:10,450 i to lijevo pomak operater, koji nisu često užasno korisno, 562 00:36:10,450 --> 00:36:12,230 ali ispada da mogu biti. 563 00:36:12,230 --> 00:36:16,560 U stvari, ako ste bili predstavljati nešto poput niza logičke 564 00:36:16,560 --> 00:36:21,260 samo da predstavljaju istinita ili lažna, pretpostavimo ste htjeli pratiti hoće li ili ne 565 00:36:21,260 --> 00:36:24,630 soba puna 300 studenata je prisutan, 566 00:36:24,630 --> 00:36:29,420 mogli proglasiti niz veličine 300 tipa bool, tako da ćete dobiti 300 bools, 567 00:36:29,420 --> 00:36:33,090 a možete postaviti svaki true ako je netko ovdje i lažno drugačije. 568 00:36:33,090 --> 00:36:37,550 Zašto je da reprezentacija u toj podatkovnoj strukturi neučinkovita? 569 00:36:39,370 --> 00:36:44,800 Što je loše o dizajnu te strukture podataka, polja od 300 bools? 570 00:36:46,190 --> 00:36:49,600 Što je bool, u stvari, ispod haube? 571 00:36:49,600 --> 00:36:52,310 To je, također, je nešto što se ne bi moglo biti poznato. 572 00:36:52,310 --> 00:36:53,720 Ispada nema bool. 573 00:36:53,720 --> 00:36:56,620 Sjetite se vrsta stvorena da s cs50.h datoteku, 574 00:36:56,620 --> 00:36:58,630 koja sama po sebi uključuje standardne bool. 575 00:36:58,630 --> 00:37:00,930 C je vrsta glupi, iako, kada je u pitanju bool. 576 00:37:00,930 --> 00:37:04,880 Koristi 8 bitova predstavljaju svaki bool, koji je potpuno razoran 577 00:37:04,880 --> 00:37:09,040 jer očito, koliko bita ti treba predstavljati bool? Samo jedan. 578 00:37:09,040 --> 00:37:13,190 Tako ispada da ako sada imaju mogućnost s bitovni operatori 579 00:37:13,190 --> 00:37:17,760 manipulirati pojedinačne bitove čak iu char, čak u jednom bajtu, 580 00:37:17,760 --> 00:37:21,380 ispada da bi mogao smanjiti količinu memorije potrebnu za zastupanje glupost 581 00:37:21,380 --> 00:37:25,490 poput onog radnog stil strukture podataka za faktor osam. 582 00:37:25,490 --> 00:37:29,820 Umjesto korištenja osam bita predstavljaju istinita ili lažna, doslovno mogao koristiti jedan 583 00:37:29,820 --> 00:37:34,500 pomoću jednog bajta za svakih osam učenika u razredu 584 00:37:34,500 --> 00:37:41,990 i varijantama 0-1 pojedinih bitova pomoću ove vrste low-level trikovima. 585 00:37:43,850 --> 00:37:49,460 To je stvarno stati na kraj energije. Ima li kakvih pitanja o bitovni operacije? 586 00:37:49,460 --> 00:37:52,710 >> Da. >> [Student] Ima ekskluzivni ili operater? 587 00:37:52,710 --> 00:37:56,440 Da. Tu je ekskluzivni ili operater koji izgleda ovako, ^, mrkva simbol, 588 00:37:56,440 --> 00:38:02,070 što znači samo prvi stvar ili druga stvar može biti 1 za izlaz biti 1. 589 00:38:02,070 --> 00:38:07,750 Tu je i nije, ~, koji će vam omogućiti da se izvrtati 0 do 1 ili obratno, kao dobro. 590 00:38:07,750 --> 00:38:11,600 A tu je i pravo pomak operatora, >>, što je suprotno od onoga koji smo vidjeli. 591 00:38:11,600 --> 00:38:13,850 U redu. Ajmo uzeti stvari sada na višoj razini. 592 00:38:13,850 --> 00:38:16,770 Počeli smo razgovor o tekstu, a zatim ga sažimanje 593 00:38:16,770 --> 00:38:19,650 i predstavlja tekst manjem broju bitova; 594 00:38:19,650 --> 00:38:22,890 razgovarali smo malo o tome sada možemo početi manipuliranje stvari na bitovne razini. 595 00:38:22,890 --> 00:38:26,640 Ajmo sad uvećanje natrag do 10.000 metara na zastupljenost 596 00:38:26,640 --> 00:38:29,250 od složenijih stvari poput grafike. 597 00:38:29,250 --> 00:38:32,950 Ovdje imamo zastavu Njemačke, ovdje imamo jednu od Francuske. 598 00:38:32,950 --> 00:38:36,350 To bi moglo biti zastupljena u formate možda znate - GIF-ovi, na primjer. 599 00:38:36,350 --> 00:38:40,030 Ako ste ikada vidjeli sliku na webu koja završava u. GIF, 600 00:38:40,030 --> 00:38:43,000 to je format za razmjenu grafike. 601 00:38:43,000 --> 00:38:47,530 Ove dvije zastave ovdje vrstom se posuditi za kompresiju 602 00:38:47,530 --> 00:38:52,050 za što možda očitih razloga? >> [Nečujno učenik odgovor] 603 00:38:52,050 --> 00:38:53,440 Ima puno ponavljanja, zar ne? 604 00:38:53,440 --> 00:38:57,270 Kako poslati njemačku zastavu, mislim to kao sliku na zaslonu 605 00:38:57,270 --> 00:38:59,030 natrag u svoj Scratch dana. 606 00:38:59,030 --> 00:39:02,380 Možda podsjetiti da je pojedinačni pikseli ili točkice koje tvore sliku. 607 00:39:02,380 --> 00:39:06,650 >> Tu je cijeli niz crnih točaka i drugi cijeli red crne točkice. 608 00:39:06,650 --> 00:39:10,110 Tu je hrpa redova crnih točaka koje smo mogli vidjeti, ako smo stvarno zumirani, 609 00:39:10,110 --> 00:39:13,370 puno volim kad mi zumirani na Rob lice u Photoshopu. 610 00:39:13,370 --> 00:39:15,500 Čim smo dobili sve dublje i dublje i dublje u slici, 611 00:39:15,500 --> 00:39:19,990 ste započeli viđenje pixelation, sve kvadrata koje su tvorile njegove oči u tom slučaju. 612 00:39:19,990 --> 00:39:24,130 Sve posao ovdje. Ako smo povećali vrlo malo, ti bi vidjeti pojedine točke. 613 00:39:24,130 --> 00:39:27,110 Pa, to je vrsta otpada bita. 614 00:39:27,110 --> 00:39:32,120 Ako trećina zastave je crna, a trećina zastave je žuta i tako dalje, 615 00:39:32,120 --> 00:39:34,860 zašto ne možemo nekako stisnuti ovu zastavu? 616 00:39:34,860 --> 00:39:39,560 A čak i francuski zastava mogao biti stisnut, iako uzorak je malo drugačiji. 617 00:39:39,560 --> 00:39:44,120 Ispada format GIF datoteka je format kompresije bez gubitaka, 618 00:39:44,120 --> 00:39:48,420 što znači da možete uzeti sliku kao njemačke zastave ovdje, 619 00:39:48,420 --> 00:39:53,540 možete baciti puno svojih bita, bez žrtvovanja kvalitete. 620 00:39:53,540 --> 00:39:55,340 To je u suprotnosti s nešto poput JPEG, 621 00:39:55,340 --> 00:39:57,050 s kojima je većina od nas su vjerojatno više upoznati. 622 00:39:57,050 --> 00:39:59,000 Facebook i Flickr fotografija fotografije i slično 623 00:39:59,000 --> 00:40:02,200 su gotovo uvijek spremaju kao JPEG kada oni učitao, 624 00:40:02,200 --> 00:40:08,100 ali JPEG je gubljenje - gubljenje - format pri čemu se ne bacaju bita 625 00:40:08,100 --> 00:40:10,430 ali također bacaju kvalitetu. 626 00:40:10,430 --> 00:40:13,890 I tako, ako ste komprimirati fotografija sa Photoshop ili ih prenijeti na Facebooku 627 00:40:13,890 --> 00:40:15,580 ili ih odvesti na uistinu jebani telefon, 628 00:40:15,580 --> 00:40:19,510 znaš da slika počinje da se vrlo zamrljano i pixelated, 629 00:40:19,510 --> 00:40:22,290 a to je zato što je se stisnut uz računalo ili telefon 630 00:40:22,290 --> 00:40:24,550 doslovno bacanje informacije daleko. 631 00:40:24,550 --> 00:40:28,500 No, GIF je nevjerojatna u da se može koristiti manje bitova nego što možda po defaultu 632 00:40:28,500 --> 00:40:30,750 bez gubitka informacija. 633 00:40:30,750 --> 00:40:32,410 >> I to u suštini ne kako slijedi. 634 00:40:32,410 --> 00:40:38,740 Umjesto dućan u datoteku kao BMP bi RGB triple za crna, crna, crna, crna, 635 00:40:38,740 --> 00:40:42,570 crna, crna, crna, crna, crna, crna, crna, crna i tako dalje, 636 00:40:42,570 --> 00:40:45,640 a, GIF formatu će reći, "crna" 637 00:40:45,640 --> 00:40:48,330 a zatim, "Ponovite ovaj sto puta", ili nešto slično. 638 00:40:48,330 --> 00:40:52,280 "Crno, ponavljam to sto puta, crne, ponavljam to sto puta ..." 639 00:40:52,280 --> 00:40:54,530 "Žuta, ponavljam to sto puta." 640 00:40:54,530 --> 00:40:57,200 I tako se pamti, u suštini, lijevom piksela 641 00:40:57,200 --> 00:41:02,160 i onda kodira nekako pojam ponavlja da piksel opet i opet. 642 00:41:02,160 --> 00:41:06,110 Dakle, GIF onda mogu komprimirati bez gubitka informacija. 643 00:41:06,110 --> 00:41:09,510 Ali, ako ste morali nagađati, ako je algoritam koji Animacije korištenje, 644 00:41:09,510 --> 00:41:13,180 koji od tih zastava, iako oni izgledaju identične veličine, 645 00:41:13,180 --> 00:41:19,620 će biti manja kada spremiti na disk kao GIF? >> [Student] Njemačka. 646 00:41:19,620 --> 00:41:21,660 Njemačka će biti manja? Zašto? 647 00:41:21,660 --> 00:41:26,620 [Student] Zato što ga ponavljaju mnogo, mnogo puta vodoravno 648 00:41:26,620 --> 00:41:29,010 i onda ponoviti drugi put. >> Točno. 649 00:41:29,010 --> 00:41:32,020 Budući da su ljudi koji su izmislili GIF samo vrsta samovoljno odlučio 650 00:41:32,020 --> 00:41:36,040 da je ponavljanje će utjecati horizontalno, a ne bočno. 651 00:41:36,040 --> 00:41:40,900 Tu je puno više ponavljanje bočno ovdje u njemačkom zastavom nego u francuskom zastavom. 652 00:41:40,900 --> 00:41:44,430 Dakle, ako smo zapravo otvoriti mapu na moj hard disk koji ima ove GIF, 653 00:41:44,430 --> 00:41:51,920 zapravo možete vidjeti da je njemački zastava ovdje je dva kilobajta i francuski jedan je 4 kilobajta. 654 00:41:51,920 --> 00:41:54,080 To se događa da se slučajno da je netko dvaput drugi, 655 00:41:54,080 --> 00:41:57,960 ali to je u stvari slučaj da francuski zastava je mnogo veći. 656 00:41:57,960 --> 00:42:01,250 >> Iako govorimo ovdje o slikama, iste ideje mogu primijeniti na 657 00:42:01,250 --> 00:42:05,150 ne stvari kao što su zastave, ali slike koje su malo složenije. 658 00:42:05,150 --> 00:42:08,170 Ako uzmete sliku jabuke, sigurno postoji mnogo dupliciranja postoji, 659 00:42:08,170 --> 00:42:11,040 pa smo nekako mogao sjetiti da je zadana pozadina je plava 660 00:42:11,040 --> 00:42:13,230 a ne, kao desna ruka slika sugerira, 661 00:42:13,230 --> 00:42:16,830 imati na umu boju svakog piksela u slici. 662 00:42:16,830 --> 00:42:21,060 Tako možemo baciti komadiće daleko tamo bez gubitka podataka. 663 00:42:21,060 --> 00:42:23,340 Apple još uvijek izgleda isto. 664 00:42:23,340 --> 00:42:27,510 U ovom primjeru ovdje, možda ćete vidjeti što se događa u filmu. 665 00:42:27,510 --> 00:42:31,970 Ovo predstavlja old-school filmske role čemu u gornjem Image 666 00:42:31,970 --> 00:42:36,900 imate RV vožnje prošlosti kuće i stabla. 667 00:42:36,900 --> 00:42:42,130 I kao da je kombi vozi prošlosti s lijeva na desno, što očito ne mijenja? 668 00:42:42,130 --> 00:42:45,320 Kuća se ne ide nigdje, a stablo ne ide nigdje. 669 00:42:45,320 --> 00:42:47,700 Jedina stvar koja se kreće je kombi u ovom slučaju. 670 00:42:47,700 --> 00:42:51,650 Dakle, kao što Pozadina Nepromijenjeno sugerira, što možete učiniti u filmovima 671 00:42:51,650 --> 00:42:56,530 je sličan samo baciti informacije koje se ne mijenja između okvira. 672 00:42:56,530 --> 00:42:58,900 To je opće poznato kao međuslikovno kompresije 673 00:42:58,900 --> 00:43:02,120 pri čemu ako je to okvir izgleda gotovo identičan ovom jednom, 674 00:43:02,120 --> 00:43:05,390 nemojmo zamarati pohranjivanja na disku bilo identične informacije 675 00:43:05,390 --> 00:43:09,250 na ovim intermedijarnih okvira, ajmo samo koristiti ključne okvire jednom u neko vrijeme 676 00:43:09,250 --> 00:43:13,420 koji zapravo pohraniti te podatke redundantly kao malo razum provjeriti. 677 00:43:13,420 --> 00:43:18,620 >> Nasuprot tome, drugi pristup kompresijskog video je u ovom drugom i donji primjer ovdje, 678 00:43:18,620 --> 00:43:23,970 gdje umjesto namirnicama 30 sličica, zašto ne samo pohraniti 15 sličica u drugi umjesto toga? 679 00:43:23,970 --> 00:43:27,070 Umjesto filmu vrste teče lijepo, savršeno, 680 00:43:27,070 --> 00:43:30,060 to bi moglo izgledati kao da je mucanje malo, malo stara škola, 681 00:43:30,060 --> 00:43:37,190 ali neto učinak će biti da koriste mnogo manje bitova nego inače bi moglo biti potrebno. 682 00:43:37,190 --> 00:43:39,240 Pa gdje to onda nas ostavio? 683 00:43:39,240 --> 00:43:41,700 To je bilo malo na stranu na kojoj još možete ići s kompresijom. 684 00:43:41,700 --> 00:43:45,140 Za više o tome, uzeti klasa poput CS175 ovdje. 685 00:43:45,140 --> 00:43:46,990 Evo još jedan primjer u videu. 686 00:43:46,990 --> 00:43:49,190 Ako pčela je jedina stvar kreće, 687 00:43:49,190 --> 00:43:51,790 zaista možete baciti informacije u tim okvirima srednjeg 688 00:43:51,790 --> 00:43:55,260 jer cvijet i nebo i lišće ne mijenjaju. 689 00:43:55,260 --> 00:43:57,960 Ali ajmo sada razmotriti posljednju stvar. 690 00:43:57,960 --> 00:44:03,890 U sljedećih pet minuta smo ostaviti C iza zauvijek u predavanju? Da. Ne u psets, iako. 691 00:44:03,890 --> 00:44:10,210 Posljednja priča o C, a onda ćemo doći do vrlo seksi stvari 692 00:44:10,210 --> 00:44:13,870 uključujući HTML i Web i woo-hoo. U redu. 693 00:44:13,870 --> 00:44:16,050 Ovdje ćemo ići. To je motivacija. 694 00:44:16,050 --> 00:44:20,020 Ispada sve ovo vrijeme kada smo pisanje programa smo pokrenuti zveka. 695 00:44:20,020 --> 00:44:23,890 I zveka, mi smo je rekao, od prvog tjedna prilično mnogo, traje izvornog koda 696 00:44:23,890 --> 00:44:25,740 i pretvara ga u objektnom kodu. 697 00:44:25,740 --> 00:44:28,540 To traje C i pretvara ga u 0s i 1s. 698 00:44:28,540 --> 00:44:32,150 Ja sam vrsta je laganje za vas za nekoliko tjedana, jer to nije baš tako jednostavno. 699 00:44:32,150 --> 00:44:36,750 >> Tu je puno više događa ispod haube kada pokrenete program kao jeka. 700 00:44:36,750 --> 00:44:39,560 U stvari, proces sastavljanja programa zaista može sažeti, 701 00:44:39,560 --> 00:44:42,210 kao što ste mogli sjetiti od Rob je video na prevodiocima, 702 00:44:42,210 --> 00:44:47,580 u ove četiri koraka: predobrada, sama izradu, montažu i povezivanje. 703 00:44:47,580 --> 00:44:51,950 Ali mi smo u razredu, a većina ljudi u svijetu obično sumirati sve od tih koraka 704 00:44:51,950 --> 00:44:54,410 samo kao "sastavljanje". 705 00:44:54,410 --> 00:44:58,070 No, ako ćemo početi s izvornog koda kao što je ovaj, prisjetiti to je možda najjednostavnije C program 706 00:44:58,070 --> 00:45:03,530 smo dosad napisano, podsjetiti da kada sastavio to završi izgleda kao ovo. 707 00:45:03,530 --> 00:45:07,310 No, tu je zapravo međukorak, i ti koraci su kako slijedi. 708 00:45:07,310 --> 00:45:10,750 Prvo je to stvar na samom vrhu ove i većina naših programa, 709 00:45:10,750 --> 00:45:13,550 # Include 710 00:45:13,550 --> 00:45:17,210 Što # ne uključuje učiniti za nas? 711 00:45:17,210 --> 00:45:24,150 To je prilično puno primjeraka i paste sadržaja stdio.h u moju datoteku, tako da zašto? 712 00:45:24,150 --> 00:45:27,220 Zašto mi je stalo sadržaja stdio.h? Što je u tu interesa? 713 00:45:27,220 --> 00:45:32,310 Printf je izjava, njegov prototip, tako da prevodilac onda zna na što mislim 714 00:45:32,310 --> 00:45:34,900 kad sam spomenuo tu funkciju printf. 715 00:45:34,900 --> 00:45:39,390 Dakle korak 1 u sastavljanju je pre-obrada, pri čemu program kao jeka 716 00:45:39,390 --> 00:45:43,450 ili neki pomagač program koji jeka dolazi s čita svoj kod vrha do dna, 717 00:45:43,450 --> 00:45:47,740 lijeva na desno, i bilo je to vrijeme vidi # simbol slijedi ključnu riječ kao što uključuju, 718 00:45:47,740 --> 00:45:53,980 obavlja tu operaciju, kopiranje i lijepljenje u ovom slučaju stdio.h u datoteci. 719 00:45:53,980 --> 00:45:55,510 To je korak 1. 720 00:45:55,510 --> 00:45:59,620 Tada ćete imati puno veću C datoteku zbog ogromnog copy, paste posao koji je upravo dogodilo. 721 00:45:59,620 --> 00:46:01,710 >> Korak 2 sada sastavljanja. 722 00:46:01,710 --> 00:46:04,880 No, ispostavilo se sastavljanje traje izvorni kod koji izgleda ovako 723 00:46:04,880 --> 00:46:08,160 i pretvara ga u nešto što izgleda ovako, 724 00:46:08,160 --> 00:46:12,560 koji je za one koji poznaju se zove? >> [Student] Skupština. >> Skupština jezik. 725 00:46:12,560 --> 00:46:16,700 To je zapravo nešto ako se uzme CS61 ćete zaroniti u više detalja. 726 00:46:16,700 --> 00:46:22,380 Ovo je samo oko kao bliski kao što možete dobiti za pisanje 0s i 1s sebe 727 00:46:22,380 --> 00:46:25,850 ali pisanje stvari na takav način da se još uvijek čini barem malo smisla. 728 00:46:25,850 --> 00:46:30,760 To su stroj za uporabu, a ako mi se pomaknite prema dolje do glavne funkcije ovdje, 729 00:46:30,760 --> 00:46:35,470 primijetiti da je to guranje upute, premjestiti pouku, oduzimanje pouku, 730 00:46:35,470 --> 00:46:38,550 nazvati pouku, i tako dalje. 731 00:46:38,550 --> 00:46:42,930 Kada čujete da vaše računalo ima Intel Inside, 732 00:46:42,930 --> 00:46:46,180 imate Intel procesora u vašem Mac ili PC, što to znači? 733 00:46:46,180 --> 00:46:51,200 CPU dolazi izgrađena od strane tvrtke kao što su Intel razumijevanje određene upute. 734 00:46:51,200 --> 00:46:55,770 Nemaju pojma što funkcionira kao swapa su ili glavni su same po sebi, 735 00:46:55,770 --> 00:47:00,060 ali oni ne znaju što je vrlo low-level upute kao zbrajanje, oduzimanje, gurati 736 00:47:00,060 --> 00:47:02,430 premjestiti, nazovite, i tako dalje su. 737 00:47:02,430 --> 00:47:06,170 Dakle, kada ste kompajlirati C koda u asemblerskom jeziku, 738 00:47:06,170 --> 00:47:11,820 Vaš vrlo user friendly izgleda koda se pretvara u nešto što izgleda ovako, 739 00:47:11,820 --> 00:47:21,670 da doslovno pomiče bajtova ili 4 bajta okolo u takvim malim jedinicama u i iz CPU-a. 740 00:47:21,670 --> 00:47:26,820 No, na kraju, kada je jeka je spreman iskoristiti ovu reprezentaciju programu 741 00:47:26,820 --> 00:47:30,940 u 0s i 1s, a zatim korak zove montaže dogodi, 742 00:47:30,940 --> 00:47:33,850 i to opet sve događa u tren oka kada se izvodi zveka. 743 00:47:33,850 --> 00:47:39,300 Mi smo započeli ovdje, ona izlazi datoteku ovako, a onda ga pretvara u tim 0S i 1S. 744 00:47:39,300 --> 00:47:42,000 A ako želite da se vrati u nekom trenutku i zapravo vidjeti u akciji, 745 00:47:42,000 --> 00:47:48,220 ako odem u hello1.c--ovo je jedan od prvih programa smo gledali - 746 00:47:48,220 --> 00:47:53,710 normalno bismo sastaviti ovo s zveka hello1.c i to će nam dati a.out. 747 00:47:53,710 --> 00:47:59,890 Ako za razliku od vas, umjesto dati mu-S zastavu, ono što ćete dobiti je hello1.s 748 00:47:59,890 --> 00:48:02,750 i zapravo ćete vidjeti jezik sklopa. 749 00:48:02,750 --> 00:48:05,750 >> Radim to za vrlo kratkog programa, ali ako idete natrag za Scramble 750 00:48:05,750 --> 00:48:08,740 ili Oporavak ili bilo koji program ste napisali i samo iz znatiželje 751 00:48:08,740 --> 00:48:13,240 želim vidjeti što je to zapravo izgleda, što se zapravo se plasirao u CPU, 752 00:48:13,240 --> 00:48:15,700 možete koristiti da-S zastavu s jeka. 753 00:48:15,700 --> 00:48:17,770 Ali onda na kraju, tu je još jedan izazov. 754 00:48:17,770 --> 00:48:21,810 Ovdje su 0s i 1s da predstavljaju svoju primjenu Pozdrav, svijetu. 755 00:48:21,810 --> 00:48:25,530 Ali sam koristio tuđe funkciju u mom programu. 756 00:48:25,530 --> 00:48:28,710 Dakle, iako je proces bio sam uzeti hello.c, 757 00:48:28,710 --> 00:48:34,280 to dobiva skupljaju u sabirni kodu, a onda to dobiva sklopljeni u 0S i 1s, 758 00:48:34,280 --> 00:48:37,460 samo 0s i 1s da se reproduciraju u ovom trenutku u vremenu 759 00:48:37,460 --> 00:48:40,270 su one koje nastaju iz mog koda. 760 00:48:40,270 --> 00:48:44,400 No, osoba koja je napisala printf, oni sastaviti svoj kod prije 20 godina 761 00:48:44,400 --> 00:48:47,000 i to je sada instaliran negdje na aparatu, 762 00:48:47,000 --> 00:48:51,610 pa smo nekako morati spojiti njegov ili njezin 0S i 1S s moje 0s i 1s, 763 00:48:51,610 --> 00:48:56,160 i to nas dovodi do 4. i završni korak u sastavljanju, poznat kao povezivanja. 764 00:48:56,160 --> 00:48:58,680 Dakle, na lijevoj strani imamo isti sliku kao i prije: 765 00:48:58,680 --> 00:49:02,580 hello.c postaje montaža kod postaje 0s i 1s. 766 00:49:02,580 --> 00:49:05,960 Ali sjećam da sam koristio standardni I / O biblioteka u mom kodu, 767 00:49:05,960 --> 00:49:10,350 a to znači da negdje na računalu postoji datoteka zove stdio.c 768 00:49:10,350 --> 00:49:13,980 ili barem sastavio verzija istog, jer je netko prije nekoliko godina 769 00:49:13,980 --> 00:49:18,530 sastavio stdio.c u tekućoj koda i onda cijela hrpa 0s i 1s. 770 00:49:18,530 --> 00:49:21,130 To je ono što je poznato kao statički ili dinamički knjižnici. 771 00:49:21,130 --> 00:49:23,350 To je neka datoteka sjedi negdje u aparatu. 772 00:49:23,350 --> 00:49:28,710 >> Ali na kraju, moram uzeti moj 0s i 1s i ta osoba je 0s i 1s 773 00:49:28,710 --> 00:49:32,760 i nekako ih povezati zajedno, doslovno kombinirati 0s i 1s 774 00:49:32,760 --> 00:49:37,900 u jednu datoteku pod nazivom a.out ili hello1 ili što god sam nazvao moj program 775 00:49:37,900 --> 00:49:43,320 tako da je krajnji rezultat ima sve 1s i 0s koje treba tvore moj program. 776 00:49:43,320 --> 00:49:45,660 Dakle, sve ovo vrijeme to semestru kada ste koristili zveka 777 00:49:45,660 --> 00:49:48,750 i još nedavno pokrenut napraviti kako bi se pokrenuti zveka, 778 00:49:48,750 --> 00:49:53,580 sve od tih koraka su događa svojevrsno od trenutačno, ali vrlo svjesno. 779 00:49:53,580 --> 00:49:57,830 I tako, ako ste i dalje na u informatici, naime CS61, 780 00:49:57,830 --> 00:50:00,850 ovo je sloj koji ćete nastaviti guliti natrag off postoji 781 00:50:00,850 --> 00:50:06,980 govorimo o učinkovitosti, sigurnosti implikacije, i kao što je ovih nižih razina detalja. 782 00:50:06,980 --> 00:50:09,220 Ali s tim, mi smo o tome da napusti C iza. 783 00:50:09,220 --> 00:50:11,420 Idemo naprijed i uzeti našu 5-minutni predah sada, 784 00:50:11,420 --> 00:50:14,190 a kad se vratimo: Internet. 785 00:50:17,280 --> 00:50:19,170 U redu. Mi smo natrag. 786 00:50:19,170 --> 00:50:23,590 Sada ćemo početi naš pogled ne samo na HTML, jer, kao što ćemo vidjeti, 787 00:50:23,590 --> 00:50:26,050 HTML sama po sebi je zapravo prilično jednostavna 788 00:50:26,050 --> 00:50:29,270 ali stvarno na web programiranje općenito, umrežavanje više općenito, 789 00:50:29,270 --> 00:50:31,770 i kako sve ove tehnologije dolaze zajedno 790 00:50:31,770 --> 00:50:35,400 kako bi se omogućilo nam je stvoriti mnogo sofisticiranije programe na vrhu Interneta 791 00:50:35,400 --> 00:50:38,690 nego dosad smo bili u mogućnosti da u ovim crnim i bijelim prozorima. 792 00:50:38,690 --> 00:50:42,140 Doista, u ovom trenutku u semestru, iako ćemo potrošiti relativno manje vremena 793 00:50:42,140 --> 00:50:46,200 na PHP, HTML, CSS, JavaScript, SQL i više, 794 00:50:46,200 --> 00:50:48,480 većina studenata učiniti kraj gore rade završne projekte koji su web-based 795 00:50:48,480 --> 00:50:51,230 jer kao što ćete vidjeti, pozadina sada imate u C 796 00:50:51,230 --> 00:50:54,450 je vrlo primjenjiv na ovim višoj razini jezika. 797 00:50:54,450 --> 00:50:56,800 >> I kao što počnete razmišljati o svom završnom projektu, 798 00:50:56,800 --> 00:50:59,940 koji, baš kao i problema Set 0, gdje ste bili ohrabreni 799 00:50:59,940 --> 00:51:02,160 učiniti najviše ništa od interesa za vas u nule, 800 00:51:02,160 --> 00:51:05,790 Konačni projekt je vaša prilika da se vaš novootkriveno znanje i pamet s C 801 00:51:05,790 --> 00:51:09,850 ili PHP ili Javascript ili kao iz za spin 802 00:51:09,850 --> 00:51:12,330 i stvoriti svoju vrlo vlastiti komad softvera za svijet da vidi. 803 00:51:12,330 --> 00:51:17,770 I da vas sjemena s idejama, znate da možete krenuti ovdje, projects.cs50.net. 804 00:51:17,770 --> 00:51:21,800 Svake godine, možemo tražiti ideje iz fakulteta i osoblja i studentskih grupa na kampusu 805 00:51:21,800 --> 00:51:27,330 samo da pošaljete svoje ideje za zanimljivih stvari koje bi se mogle riješiti pomoću računala, 806 00:51:27,330 --> 00:51:29,860 pomoću web stranice, koristeći softver. 807 00:51:29,860 --> 00:51:32,360 Dakle, ako ste se bore da se s idejom svom, 808 00:51:32,360 --> 00:51:35,790 svim sredstvima kretanje kroz ideja postoji od ove godine i posljednji. 809 00:51:35,790 --> 00:51:39,990 To je savršeno u redu da se pozabave projekt koji je prije rješavati. 810 00:51:39,990 --> 00:51:44,540 Vidjeli smo mnoge aplikacije za viđenje stanja rublja na kampusu, 811 00:51:44,540 --> 00:51:47,000 mnoge aplikacije za navigaciju izbornika blagovaonici, 812 00:51:47,000 --> 00:51:49,540 mnoge aplikacije za navigaciju katalog tečajeva i slično. 813 00:51:49,540 --> 00:51:53,680 I doista, u budućem predavanja iu buduće seminare, 814 00:51:53,680 --> 00:51:57,750 mi ćemo vam predstaviti neke javno dostupne API-ja, i komercijalno dostupna 815 00:51:57,750 --> 00:52:02,520 kao i ovdje dobiti od CS50 na kampusu, tako da imate pristup podacima 816 00:52:02,520 --> 00:52:04,910 i onda možete učiniti zanimljive stvari s njim. 817 00:52:04,910 --> 00:52:09,380 Dakle, više na konačnih projekata u nekoliko dana, kada smo oslobodili specifikaciju, 818 00:52:09,380 --> 00:52:12,990 ali za sada, znate da možete raditi solo ili s jednim ili dva prijatelja 819 00:52:12,990 --> 00:52:16,010 na većini bilo koji projekt od interesa za vas. 820 00:52:16,010 --> 00:52:18,080 Internet. 821 00:52:18,080 --> 00:52:22,300 Možete ići naprijed i izvucite svoj laptop, idete na facebook.com po prvi put, 822 00:52:22,300 --> 00:52:27,020 što nije zabilježen u posljednje vrijeme, i udarite Enter. Što se točno događa? 823 00:52:27,020 --> 00:52:30,150 >> Kada pritisnete tipku Enter na vašem računalu, cijela hrpa koraka 824 00:52:30,150 --> 00:52:32,600 započeti neku vrstu magično događa. 825 00:52:32,600 --> 00:52:35,960 Dakle, ovdje na lijevoj strani, web server poput Facebooka je ovdje na desnoj strani, 826 00:52:35,960 --> 00:52:42,500 i nekako ste koristeći ovaj jezik nazvan HTTP, Hypertext Transfer Protocol. 827 00:52:42,500 --> 00:52:46,770 HTTP nije programski jezik. To je više od protokola. 828 00:52:46,770 --> 00:52:52,310 To je skup konvencija koje web preglednici i web poslužitelji koriste kada intercommunicating. 829 00:52:52,310 --> 00:52:54,360 A što to znači je kako slijedi. 830 00:52:54,360 --> 00:52:56,790 Baš kao u stvarnom svijetu, mi imamo ove konvencije 831 00:52:56,790 --> 00:53:00,140 gdje ako ispunjavaju neke čovjeka za prvi put, ako vam ne smeta me humoring ovdje, 832 00:53:00,140 --> 00:53:03,980 Ja bi moglo doći do vas, reći: "Bok, moje ime je David." >> Bok, David. Moje ime je Sammy. 833 00:53:03,980 --> 00:53:05,770 "Bok, David. Moje ime je Sammy." 834 00:53:05,770 --> 00:53:08,310 Dakle, sada smo upravo bavi ovom vrstom glupog ljudskog protokola 835 00:53:08,310 --> 00:53:12,200 gdje sam pokrenuo protokol, Sammy je odgovorila, 836 00:53:12,200 --> 00:53:15,060 smo potreseni ruke, a transakcija je završena. 837 00:53:15,060 --> 00:53:18,260 HTTP je vrlo slična u duhu. 838 00:53:18,260 --> 00:53:23,350 Kada vaš web preglednik zahtjeve www.facebook.com, 839 00:53:23,350 --> 00:53:27,020 što je vaš preglednik stvarno radi proširuje svoju ruku, da se tako izrazim, 840 00:53:27,020 --> 00:53:29,960 na server i to je to slanjem poruke. 841 00:53:29,960 --> 00:53:34,220 I to je poruka obično nešto poput dobiti - što želiš dobiti? - 842 00:53:34,220 --> 00:53:38,740 me početna stranica, koji je obično označena jednom crtom na kraju URL-a. 843 00:53:38,740 --> 00:53:43,790 I samo tako da znate što jezik govorim, ja sam preglednik ću vam reći 844 00:53:43,790 --> 00:53:46,930 da sam govorio HTTP verziju 1.1, 845 00:53:46,930 --> 00:53:51,980 I također za dobru mjeru, ja ću vam reći da domaćin da želim početnu stranicu 846 00:53:51,980 --> 00:53:54,120 je facebook.com. 847 00:53:54,120 --> 00:53:57,730 Tipično, web preglednik, bez znanja tebe, ljudski, 848 00:53:57,730 --> 00:54:03,350 šalje ovu poruku preko Interneta kada jednostavno upišite www.facebook.com, 849 00:54:03,350 --> 00:54:05,370 >> Unesite, u svoj preglednik. 850 00:54:05,370 --> 00:54:07,300 A što se Facebook odgovoriti? 851 00:54:07,300 --> 00:54:12,540 To odgovara s nekim sličnim izgleda zagonetni detaljima, ali i mnogo više. 852 00:54:12,540 --> 00:54:14,310 Pusti me naprijed Facebook početnoj stranici ovdje. 853 00:54:14,310 --> 00:54:17,480 To je zaslon koji većina nas vjerojatno nikada vidjeti ako ostanu prijavljeni u sve vrijeme, 854 00:54:17,480 --> 00:54:19,830 ali to je doista njihova početna stranica. 855 00:54:19,830 --> 00:54:24,150 Ako smo to učinili u Chrome, primijetiti da možete podići ove male kontekst izbornika. 856 00:54:24,150 --> 00:54:26,980 Korištenje Chrome, da li na Mac OS, Windows, Linux, ili slično, 857 00:54:26,980 --> 00:54:31,840 ako Kontrola klik ili lijevi klik, obično možete podići izbornik koji izgleda ovako, 858 00:54:31,840 --> 00:54:35,870 gdje je nekoliko opcija čekaju, od kojih je jedan pogled Stranica Izvor. 859 00:54:35,870 --> 00:54:39,920 Također možete obično doći do tih stvari tako da odete na izbornik Prikaz i poking okolo. 860 00:54:39,920 --> 00:54:42,750 Na primjer, ovdje pod View, Developer je ista stvar. 861 00:54:42,750 --> 00:54:45,780 Ja ću ići naprijed i pogledati Pogledaj izvor stranice. 862 00:54:45,780 --> 00:54:50,800 Što ćete vidjeti je HTML da je Marko je napisao da predstavlja facebook.com. 863 00:54:50,800 --> 00:54:55,910 To je potpuna zbrka ovdje, ali vidjet ćemo kako se to čini malo više smisla prije dugo. 864 00:54:55,910 --> 00:54:59,840 Ali postoje neki obrasci ovdje. Dopustite mi dođite do stvari kao što je ovaj. 865 00:54:59,840 --> 00:55:05,730 To je teško za ljudska čitati, ali primijetiti da je ovaj uzorak ukošene zagradama 866 00:55:05,730 --> 00:55:10,360 s ključnim riječima poput opciju, ključne riječi kao što su vrijednosti, nekim kotiraju gudače. 867 00:55:10,360 --> 00:55:15,660 Ovo je mjesto gdje, kada ste se prijavili za vrlo prvi put, navedeno ono godina rođenja je. 868 00:55:15,660 --> 00:55:19,020 To padajući izbornik rođenja godina nekako je kodirana ovdje 869 00:55:19,020 --> 00:55:23,870 u tom jeziku zove HTML, HyperText Markup Language. 870 00:55:23,870 --> 00:55:27,730 Drugim riječima, kada se vaš preglednik zatraži web-stranicu, 871 00:55:27,730 --> 00:55:30,610 to govori ovu Konvenciju nazvan HTTP. 872 00:55:30,610 --> 00:55:35,170 No, ono što ne facebook.com odgovoriti na taj zahtjev s? 873 00:55:35,170 --> 00:55:38,260 >> To odgovara s nekim od tih tajnovitih poruka, kao što ćemo vidjeti u ovom trenutku. 874 00:55:38,260 --> 00:55:43,760 No, većina njegovih odgovora je u obliku HTML, HyperText Markup Language. 875 00:55:43,760 --> 00:55:47,170 To je stvarni jezik u kojem web-stranica napisana. 876 00:55:47,170 --> 00:55:52,030 A što web preglednik stvarno onda ne je, po primitku nešto što izgleda ovako, 877 00:55:52,030 --> 00:55:57,120 čita se od vrha do dna, s lijeva na desno, i bilo je to vrijeme vidi jedan od tih ukošene zagradama 878 00:55:57,120 --> 00:56:03,370 slijede ključne riječi kao što su opcije, prikazuje da je markup jezik na odgovarajući način. 879 00:56:03,370 --> 00:56:06,820 U ovom slučaju, to će prikazati padajući izbornik godina. 880 00:56:06,820 --> 00:56:09,240 Ali opet, to je potpuna zbrka pogledati. 881 00:56:09,240 --> 00:56:16,630 To nije zato što Facebook programeri manifestiraju 0 za 5 za stil, za primjer. 882 00:56:16,630 --> 00:56:20,190 To je zato što većina koda da pisati je, u stvari, napisao je lijepo, 883 00:56:20,190 --> 00:56:22,450 dobro komentirao, lijepo razvedena, i slično, 884 00:56:22,450 --> 00:56:26,080 Ali, naravno, strojeva, računala, preglednici stvarno ne daju osuditi 885 00:56:26,080 --> 00:56:27,890 da li se vaš broj je dobro stilu. 886 00:56:27,890 --> 00:56:33,100 A u stvari, to je potpuno razoran udariti tipku TAB sve one puta 887 00:56:33,100 --> 00:56:37,650 i staviti komentare cijelom kodu i odaberite stvarno opisne varijable imena 888 00:56:37,650 --> 00:56:42,340 jer ako preglednik ne zanima, sve što radite na kraju dana se troši bajtova. 889 00:56:42,340 --> 00:56:46,660 >> Tako ispada ono što većina web stranice učiniti je, iako izvorni kod za facebook.com, 890 00:56:46,660 --> 00:56:49,550 za cs50.net i svih tih drugih web stranica na internetu 891 00:56:49,550 --> 00:56:53,730 su obično dobro napisan i dobro komentirao i lijepo razvedena i slično, 892 00:56:53,730 --> 00:56:59,270 obično prije website je stavio na internet, kada je kod minified, 893 00:56:59,270 --> 00:57:02,970 pri čemu HTML i CSS - nešto drugo uskoro ćemo vidjeti - 894 00:57:02,970 --> 00:57:05,960 JavaScript kôd uskoro ćemo vidjeti je stisnut, 895 00:57:05,960 --> 00:57:09,250 pri čemu duge varijabla imena postaju X i Y i Z, 896 00:57:09,250 --> 00:57:13,900 i sve to whitespace čini da sve izgleda tako čitati sve bacio, 897 00:57:13,900 --> 00:57:17,700 jer ako mislite o tome na taj način, Facebook dobiva milijarde stranica hitova dan - 898 00:57:17,700 --> 00:57:21,670 nešto ludo kao da je - pa što ako programer samo da se analni 899 00:57:21,670 --> 00:57:26,660 hit razmaknicu jednom dodatno vrijeme samo da alineji neke linije koda ikada toliko više? 900 00:57:26,660 --> 00:57:29,500 Što je implikacija ako Facebook čuva da razmak 901 00:57:29,500 --> 00:57:32,880 u svim bajtova oni poslati natrag s ljudima na internetu? 902 00:57:32,880 --> 00:57:36,400 Udaranje razmaknicu jednom vam daje dodatni byte u datoteci. 903 00:57:36,400 --> 00:57:39,730 A ako milijardu ljudi onda nastaviti preuzimanje početnu stranicu taj dan, 904 00:57:39,730 --> 00:57:42,060 koliko više podataka ste prenosi preko interneta? 905 00:57:42,060 --> 00:57:45,200 Gigabajt bez dobrog razloga. 906 00:57:45,200 --> 00:57:48,510 I gotovo, za puno web stranica to nije takav problem skalabilan, 907 00:57:48,510 --> 00:57:51,030 ali za Facebook, za Google, za neke od najpopularnijih web stranice 908 00:57:51,030 --> 00:57:54,860 tu je velik poticaj financijski kako bi vaš kod izgledati nered 909 00:57:54,860 --> 00:57:58,980 tako da koristite što manje bajtova moguće uz zatim ga sažimanje 910 00:57:58,980 --> 00:58:01,500 koristite nešto poput zip, gzip algoritam se zove, 911 00:58:01,500 --> 00:58:04,250 da preglednik ne za vas automatski. No, to je strašno. 912 00:58:04,250 --> 00:58:08,060 Nikad nećemo saznati ništa o tuđim web stranice i kako dizajnirati web stranice 913 00:58:08,060 --> 00:58:09,680 ako moramo gledati na to ovako. 914 00:58:09,680 --> 00:58:13,620 >> Dakle, na sreću, kao što su preglednici Chrome i IE i Firefox ovih dana 915 00:58:13,620 --> 00:58:16,450 obično dolaze s ugrađenim u razvojnog alata. 916 00:58:16,450 --> 00:58:21,730 U stvari, ako odem ovdje dolje da pregleda element ili ako idem na View, Developer, 917 00:58:21,730 --> 00:58:25,220 i ići na Developer Tools eksplicitno, 918 00:58:25,220 --> 00:58:27,640 ovaj prozor na dnu moj zaslon sada iskoči. 919 00:58:27,640 --> 00:58:31,230 To je malo zastrašujuće na prvi jer ima puno nepoznatih karticama ovdje, 920 00:58:31,230 --> 00:58:34,510 ali ako ja kliknite na elemenata skroz na dnu lijevo, 921 00:58:34,510 --> 00:58:38,810 Chrome je očito prilično pametan. To zna kako protumačiti sve ove koda. 922 00:58:38,810 --> 00:58:42,320 I tako ono što čini Chrome je to čisti sve Facebook HTML. 923 00:58:42,320 --> 00:58:45,680 Iako ne postoji razmak, tamo nije bilo udubljenje, 924 00:58:45,680 --> 00:58:51,120 Sada primijetite da mogu početi kretati ovu web stranicu sve više hijerarhijski. 925 00:58:51,120 --> 00:58:56,910 Ispada da je svaka web stranica napisan u jeziku zove HTML5 bi trebao početi s tim, 926 00:58:56,910 --> 00:59:03,980 ovo DOCTYPE deklaracije, da se tako izrazim: 927 00:59:03,980 --> 00:59:07,840 To je vrsta svjetla i siva postoji, ali to je vrlo prva linija koda u ovoj datoteci, 928 00:59:07,840 --> 00:59:12,080 i to samo govori preglednik, "Hej, ovdje dolazi neki HTML5. Ovdje dolazi web stranicu." 929 00:59:12,080 --> 00:59:18,490 Prvi otvoreni nosač iznad toga se događa da se ova stvar, otvorena zagrada HTML oznaka, 930 00:59:18,490 --> 00:59:22,320 i onda ako sam zaroniti u dublje - ove strelice su potpuno besmisleno; 931 00:59:22,320 --> 00:59:25,140 oni su samo za prezentacije miloga, oni zapravo nisu u spisu - 932 00:59:25,140 --> 00:59:30,300 primijetiti da unutrašnjost Facebook HTML tag, bilo da se počne s otvorenim konzole 933 00:59:30,300 --> 00:59:32,910 , a zatim je riječ zove oznaku. 934 00:59:32,910 --> 00:59:38,610 Dakle, unutar HTML oznake je očito glava tag i tijelo oznaka. 935 00:59:38,610 --> 00:59:41,930 Unutar glave tag sada je cijeli nered za Facebook 936 00:59:41,930 --> 00:59:45,620 jer oni imaju puno metapodataka i drugih stvari za marketing i oglašavanje. 937 00:59:45,620 --> 00:59:50,600 >> Ali ako mi pomicanje prema dolje, dolje, dolje, dolje, ajmo vidjeti gdje je. Ovdje je. 938 00:59:50,600 --> 00:59:52,210 Ovo je jedna barem donekle upoznati. 939 00:59:52,210 --> 00:59:55,990 Naslov Facebook početnoj stranici, ako ste ikada gledati u kartici u naslovnoj traci, 940 00:59:55,990 --> 00:59:59,060 je Dobrodošli na Facebook - Log In, Sign Up ili Saznajte više. 941 00:59:59,060 --> 01:00:01,110 To je ono što će vidjeti u Chrome naslovnoj traci, 942 01:00:01,110 --> 01:00:03,100 a to je kako se to predstavlja u kodu. 943 01:00:03,100 --> 01:00:08,090 Ako zanemarimo sve drugo u glavi, većina utrobu web stranici su u tijelu, 944 01:00:08,090 --> 01:00:10,940 i ispada da Facebook kod će izgledati složenije 945 01:00:10,940 --> 01:00:14,540 od većine stvari ćemo pisati u početku samo zato što je bio izgrađen tijekom godina, 946 01:00:14,540 --> 01:00:17,260 ali postoji cijeli niz skripte oznaka, kod JavaScripta, 947 01:00:17,260 --> 01:00:18,870 koji čini web stranice vrlo interaktivan: 948 01:00:18,870 --> 01:00:22,330 vidim ažuriranja statusa trenutačno pomoću jezika poput JavaScripta. 949 01:00:22,330 --> 01:00:25,270 Postoji nešto što se zove div, koji je podjela stranici. 950 01:00:25,270 --> 01:00:27,940 No, prije nego što smo dobili na tom detalju, pokušajmo smanjivanje 951 01:00:27,940 --> 01:00:31,920 i pogled na jednostavniji verziji Facebook 1,0, da se tako izrazim. 952 01:00:31,920 --> 01:00:34,740 Ovdje je halo, svijet web stranicama. 953 01:00:34,740 --> 01:00:37,370 To je taj DOCTYPE deklaraciju na samom vrhu 954 01:00:37,370 --> 01:00:40,280 koji je malo drugačiji od svega. 955 01:00:40,280 --> 01:00:46,130 Ništa drugo mi pisati na web stranici će se započeti s 01:00:48,880 a osim za nešto što se zove komentara u HTML. 957 01:00:48,880 --> 01:00:53,000 No, za najveći dio, sve na web-stranici je otvorena zagrada, ključna riječ, u blizini nosača. 958 01:00:53,000 --> 01:00:56,220 >> U tom slučaju možete vidjeti najjednostavniji web stranicama moguće. 959 01:00:56,220 --> 01:01:00,260 HTML oznaka sadrži glavu oznaku i sadrži tjelesnu oznaku, 960 01:01:00,260 --> 01:01:04,580 ali primijetiti da je taj pojam pokretanja i zaustavljanja oznake. 961 01:01:04,580 --> 01:01:11,360 Ovo je početna oznaka za HTML, to je blizu tag ili završna oznaka. 962 01:01:11,360 --> 01:01:15,400 Primijetit ćete da su oni vrsta suprotnosti u smislu da se u blizini oznake ili završna oznaka 963 01:01:15,400 --> 01:01:20,030 je to naprijed slash unutar sebe. 964 01:01:20,030 --> 01:01:23,540 U međuvremenu, tu je otvorena glava oznaka i ovdje u blizini glave tag ovdje. 965 01:01:23,540 --> 01:01:26,880 >> Tu je otvorena naslov i bliski naslov tag ovdje. 966 01:01:26,880 --> 01:01:29,850 Činjenica da sam stavio naslov na jednoj liniji, čisto proizvoljne. 967 01:01:29,850 --> 01:01:33,760 To je samo izgledao kao da će stati lijepo na jednoj liniji, tako da ja ne zamaram udaranje Enter nekoliko puta. 968 01:01:33,760 --> 01:01:38,200 U međuvremenu, tijelo sam alineje samo da bude sve tako jasno. 969 01:01:38,200 --> 01:01:41,050 Primijetit ćete da je HTML prilično glupi jezik. 970 01:01:41,050 --> 01:01:43,410 U stvari, natrag u dan prije nego što su WYSIWYG editori 971 01:01:43,410 --> 01:01:46,770 a Microsoft Word, gdje možete reći: "Neka ovo podebljano, kurziv bi ovaj" 972 01:01:46,770 --> 01:01:50,850 što bi zapravo upišite malo naredbe u esejima 20 + godina 973 01:01:50,850 --> 01:01:55,740 pri čemu bi rekli, "Početak izrade ovaj tekst podebljan. Prestanite raditi ovaj tekst podebljan." 974 01:01:55,740 --> 01:01:59,010 "Početak izrade ovog teksta kurziv. Prestanite raditi ovaj tekst kurziv." 975 01:01:59,010 --> 01:02:01,850 >> To je ono što je HTML ili bilo markup jezik. 976 01:02:01,850 --> 01:02:05,530 Ovaj prvi tag kaže, "Hej, preglednik. Evo neke HTML-a." 977 01:02:05,530 --> 01:02:09,880 Sljedeći tag kaže, "Hej, preglednik. Ovdje dolazi glavu, zaglavlja moje web stranice." 978 01:02:09,880 --> 01:02:11,650 "Hej, preglednik. Ovdje dolazi titulu." 979 01:02:11,650 --> 01:02:15,880 I onda ovamo, "Hej, preglednik. To je ona za titulu." 980 01:02:15,880 --> 01:02:20,000 Dakle, ovo je kako preglednika zna da više neće prikazivati ​​više znakova nego halo, svijet 981 01:02:20,000 --> 01:02:21,860 u naslovnoj traci. 982 01:02:21,860 --> 01:02:23,640 U međuvremenu, ovaj kaže: "To je to za glavu." 983 01:02:23,640 --> 01:02:28,340 Ovaj kaže, "Ovdje dolazi tijelo Ovdje je stvarno tijelo." - Doslovno, riječi halo, svijet. 984 01:02:28,340 --> 01:02:33,190 A ovo ovdje piše: "To je to za tijelo. To je to za HTML." 985 01:02:33,190 --> 01:02:34,640 Dakle, preglednici su prilično glupi. 986 01:02:34,640 --> 01:02:39,920 Oni samo čitati ove stvari vrha do dna, s lijeva na desno, i učiniti točno ono što su rekli učiniti. 987 01:02:39,920 --> 01:02:41,860 Ajmo zapravo napraviti malo primjer ovdje. 988 01:02:41,860 --> 01:02:46,240 Dopustite mi da se otvaraju najjednostavniji programa na mom Macu ovdje, naime TextEdit. 989 01:02:46,240 --> 01:02:48,220 Na Windows možete koristiti notepad.exe. 990 01:02:48,220 --> 01:02:50,520 No, to je sve što vam je potrebno za početak izrade web stranice. 991 01:02:50,520 --> 01:02:53,730 Ja ću ići naprijed i samo kopirajte i zalijepite ovaj kod na ovu datoteku. 992 01:02:53,730 --> 01:02:57,210 Ja ću ići naprijed i spremite ga na moj radna površina, 993 01:02:57,210 --> 01:03:01,220 i ja ću spasiti to kao hello.html, 994 01:03:01,220 --> 01:03:03,840 i sada se datoteka zove hello.html. 995 01:03:03,840 --> 01:03:05,690 Ovdje je na mom desktopu. 996 01:03:05,690 --> 01:03:11,130 Dopustite mi sada ići u pregledniku i povucite datoteku u pregledniku. 997 01:03:11,130 --> 01:03:14,060 I voila, ovdje je moj vrlo prva web-stranica. 998 01:03:14,060 --> 01:03:17,340 Primijetit ćete da naslov kartici je halo, svijet po naslovu oznaku, 999 01:03:17,340 --> 01:03:20,040 i obavijest da je halo, svijet je tijelo moje web stranice, 1000 01:03:20,040 --> 01:03:22,190 i Woo-hoo, ja sam na internetu. 1001 01:03:22,190 --> 01:03:24,700 >> Nisam stvarno, pravo, jer je ova datoteka nije na internetu. 1002 01:03:24,700 --> 01:03:28,330 To se događa da se na mom lokalnom tvrdom disku na tom putu. 1003 01:03:28,330 --> 01:03:32,720 No, ideja je ista. Sve što sada trebate je web poslužitelj na koji to upload. 1004 01:03:32,720 --> 01:03:37,410 Ali prvo neka je zapravo uvesti malo više složenosti i malo više stilizacije. 1005 01:03:37,410 --> 01:03:39,890 To je jednostavan, ako dosadna, web-stranica. 1006 01:03:39,890 --> 01:03:41,990 Ispada postoje druge vrste oznaka možemo koristiti. 1007 01:03:41,990 --> 01:03:45,530 Na primjer, ovdje u žute sam upoznao dvije nove oznake. 1008 01:03:45,530 --> 01:03:49,630 Nećemo igrati puno s ovim danas, ali primijetiti da veza oznaka 1009 01:03:49,630 --> 01:03:52,520 nekako izgleda drugačije od svega ostalog. 1010 01:03:52,520 --> 01:03:55,370 Veza tag uzima ono što se zove atributi, 1011 01:03:55,370 --> 01:03:59,770 i atribut je nešto što mijenja ponašanje oznaku. 1012 01:03:59,770 --> 01:04:03,840 U ovom slučaju to nije najbolji izbor imena, veze, jer to je vrsta besmisleno, 1013 01:04:03,840 --> 01:04:11,590 ali ovaj link tag kaže, u suštini, uključuje datoteku pod nazivom styles.css unutar moje web stranice. 1014 01:04:11,590 --> 01:04:15,400 Možete misliti o tome kao analogan Cs # include direktivu. 1015 01:04:15,400 --> 01:04:19,650 Styles.css se odnosi na drugom jeziku uopce da nećemo igrati sa danas, 1016 01:04:19,650 --> 01:04:23,790 ali to je za estetiku: veličina slova, boje, padding, uvlake, margine, 1017 01:04:23,790 --> 01:04:26,040 i sve takve estetike detalje. 1018 01:04:26,040 --> 01:04:28,820 U međuvremenu, skripta tag je funkcionalno sličan, 1019 01:04:28,820 --> 01:04:33,140 ali umjesto uključuju CSS, taj jezik, to uključuje i neki drugi jezik, JavaScript. 1020 01:04:33,140 --> 01:04:37,810 Dakle, drugim riječima, s tih dviju oznaka na kraju sam će biti u stanju napisati svoju vlastitu web stranicu 1021 01:04:37,810 --> 01:04:41,490 ali i povući u kodu da ja ili netko drugi je napisao 1022 01:04:41,490 --> 01:04:44,350 tako da možemo stajati na tuđim ramenima, možemo vježbati dobar dizajn, 1023 01:04:44,350 --> 01:04:46,120 faktoring iz zajedničkog koda. 1024 01:04:46,120 --> 01:04:49,090 Ako imam 10 različite web stranice, to znači da su neki od mojih estetike 1025 01:04:49,090 --> 01:04:52,490 može biti factored van, baš kao # include, u zasebnoj datoteci. 1026 01:04:52,490 --> 01:04:54,420 Dakle, mi smo uzimajući tamo. 1027 01:04:54,420 --> 01:04:57,180 Ali ajmo zapravo prvi učiniti nešto više zanimljiv s tom datotekom. 1028 01:04:57,180 --> 01:05:01,110 >> Opet, to je samo TextEdit. Nisam tehnički na internetu, no mi ćemo doći. 1029 01:05:01,110 --> 01:05:04,910 Htio bih napraviti halo, svijet malo hrabriji nego što jest. 1030 01:05:04,910 --> 01:05:10,890 Pa halo, ajmo reći proizvoljno za bold. 1031 01:05:10,890 --> 01:05:15,910 Opet, priča je ista: Pozdrav, zarez, početi izradu ovo podebljano, 1032 01:05:15,910 --> 01:05:19,730 onda svijet dobiva tiskane podebljano, a to znači zaustaviti tiskanje ovo podebljano. 1033 01:05:19,730 --> 01:05:24,020 Pusti me naprijed i spasiti svoju datoteku, vratiti Chrome, ja ću povećali samo tako možemo vidjeti da je bolje, 1034 01:05:24,020 --> 01:05:27,870 i ponovno, i vidjet ćete da je svijet sada u bold. 1035 01:05:27,870 --> 01:05:31,810 Web je sve o hiperveza, pa idemo naprijed i to: 1036 01:05:31,810 --> 01:05:38,550 moj omiljeni website je, recimo, youtube.com. 1037 01:05:38,550 --> 01:05:43,810 Spremi, ponovno. Ok. Postoji nekoliko problema sada, osim u grozota na web stranici. 1038 01:05:43,810 --> 01:05:47,310 1, prilično sam siguran da sam pogodio Unesite ovdje. I ja sam učinio. 1039 01:05:47,310 --> 01:05:51,590 Ja ne samo pritisnite Enter, također sam razvedena, vježbajući ono što smo propovijeda o stilu, 1040 01:05:51,590 --> 01:05:54,930 ali moje je tik do svijeta. 1041 01:05:54,930 --> 01:05:58,410 Pa zašto je to? Preglednici samo učiniti ono što vam reći da učine. 1042 01:05:58,410 --> 01:06:04,010 Nisam rekao preglednik, "Break linije ovdje. Umetnite stavak slomiti ovdje." 1043 01:06:04,010 --> 01:06:07,820 Dakle, preglednik, to ne smeta ako sam pogodio Return 30 puta, 1044 01:06:07,820 --> 01:06:10,820 to još uvijek ide staviti moje pravo pored svijetu. 1045 01:06:10,820 --> 01:06:15,930 Ono što sam stvarno morati učiniti ovdje reći nešto poput
, umetnite prijelom retka. 1046 01:06:15,930 --> 01:06:17,940 >> A zapravo, prijelom retka je vrsta čudan stvar 1047 01:06:17,940 --> 01:06:21,650 jer stvarno ne mogu početi kretati na drugoj liniji, a zatim učinite nešto, 1048 01:06:21,650 --> 01:06:25,380 i onda prestati kreće u novu liniju. To je vrsta atomske operacije. 1049 01:06:25,380 --> 01:06:28,140 Ili to učiniti ili ne. Vi pritisnite Enter ili ne. 1050 01:06:28,140 --> 01:06:33,390 Dakle, br je malo drugačiji krpa, pa moram sortirati oba otvorene i zatvoriti 1051 01:06:33,390 --> 01:06:35,230 sve odjednom. 1052 01:06:35,230 --> 01:06:37,500 Sintaksa za to je to. 1053 01:06:37,500 --> 01:06:41,760 Tehnički gledano, ti bi mogao učiniti nešto ovako u nekim verzijama HTML, 1054 01:06:41,760 --> 01:06:45,600 ali to je samo glupo, jer nema razloga za pokretanje i zaustavljanje nešto 1055 01:06:45,600 --> 01:06:48,420 ako umjesto toga može učiniti sve odjednom. 1056 01:06:48,420 --> 01:06:52,310 Shvatite da HTML5 strogo ne zahtijevaju ovu crtu, 1057 01:06:52,310 --> 01:06:55,410 pa ćete vidjeti udžbenika i online izvore koji ga nemaju, 1058 01:06:55,410 --> 01:06:59,780 ali za dobru mjeru ajmo vježbati simetriju da smo vidjeli dosad. 1059 01:06:59,780 --> 01:07:02,870 To znači da oznaka je i otvorena i zatvorena. 1060 01:07:02,870 --> 01:07:05,220 Pa sada neka mi spasiti moj datoteku, vratiti ovdje. 1061 01:07:05,220 --> 01:07:10,240 Ok, tako da je počela izgledati bolje, osim Weba znam je vrsta kliknuti, 1062 01:07:10,240 --> 01:07:13,610 i još youtube ovdje ne čini da će dovesti do bilo čega. 1063 01:07:13,610 --> 01:07:17,560 To je zato što, iako to izgleda kao link, web preglednik ne znaju da po sebi, 1064 01:07:17,560 --> 01:07:20,670 pa moram reći preglednik da je to poveznica. 1065 01:07:20,670 --> 01:07:22,620 >> Način da to učinite je da koristite sidro oznaku: 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 i neka mi premjestiti ovo na novu liniju samo tako da je malo više čitati, 1069 01:07:38,490 --> 01:07:40,060 a ja ću smanjiti veličinu fonta. 1070 01:07:40,060 --> 01:07:43,890 Jesam li učinio još? Ne postoji će biti ova dihotomija. 1071 01:07:43,890 --> 01:07:46,760 Ova oznaka, oznaka sidra, doista ne uzeti atribut, 1072 01:07:46,760 --> 01:07:52,900 koja mijenja svoje ponašanje, a vrijednost tog atributa je očito YouTube URL. 1073 01:07:52,900 --> 01:07:56,380 Ali primijetite dihotomiju je da samo zato što je URL idete, 1074 01:07:56,380 --> 01:08:01,020 to ne znači da mora biti riječ koju ste ističući i čineći vezu. 1075 01:08:01,020 --> 01:08:03,960 Umjesto toga, to može biti nešto ovako. 1076 01:08:03,960 --> 01:08:10,870 Dakle, moram reći da se zaustavi izradu ova riječ hiperveza pomoću zatvoriti sidro oznaku. 1077 01:08:10,870 --> 01:08:12,650 Obavijest Ja ne radim to. 1078 01:08:12,650 --> 01:08:15,890 1, to bi samo biti otpad svačijeg vremena i to nije potrebno. 1079 01:08:15,890 --> 01:08:19,290 >> Za zatvaranje oznaku, što je samo spomenuti ime oznaku opet. 1080 01:08:19,290 --> 01:08:21,800 Vi ne spominjem bilo koji od atributa. 1081 01:08:21,800 --> 01:08:26,189 Tako ćemo spasiti da, vratiti. Ok, voila, sad je plava i hipervezom. 1082 01:08:26,189 --> 01:08:29,430 Ako sam ga kliknite, ja zapravo ne ići na YouTube. 1083 01:08:29,430 --> 01:08:32,529 Dakle, iako je moja web-stranica nije na internetu, to je najmanje HTML, 1084 01:08:32,529 --> 01:08:37,930 i ako mi dopustite Internet nadoknaditi, mi zapravo bi završiti ovdje na youtube.com. 1085 01:08:37,930 --> 01:08:40,670 I mogu se vratiti i evo moja web-stranica. Ali primijetiti. 1086 01:08:40,670 --> 01:08:43,120 Ako ste ikada stečen spam ili krađi identiteta, 1087 01:08:43,120 --> 01:08:45,850 Sada imate mogućnost nakon samo pet minuta da učine isto. 1088 01:08:45,850 --> 01:08:50,920 Možemo ići tamo i napraviti nešto poput www.badguy.com 1089 01:08:50,920 --> 01:08:59,319 ili što god nedorečena web stranice, a zatim možete reći potvrditi svoj PayPal račun. 1090 01:08:59,319 --> 01:09:04,840 [Smijeh] I sada će to ići na badguy.com, što ja ne idem kliknuti na 1091 01:09:04,840 --> 01:09:08,000 jer ja nemam pojma gdje da vodi. [Smijeh] 1092 01:09:08,000 --> 01:09:10,859 >> No, sada imamo mogućnost da se zapravo završiti tamo. 1093 01:09:10,859 --> 01:09:12,640 Tako smo stvarno tek počinje ispočetka površine. 1094 01:09:12,640 --> 01:09:15,830 Nećemo programiranje po sebi; pišemo markup jezik. 1095 01:09:15,830 --> 01:09:18,569 No, čim smo zaokružiti naše vokabulara u HTML, 1096 01:09:18,569 --> 01:09:21,520 ćemo predstaviti PHP, stvarna programskom jeziku 1097 01:09:21,520 --> 01:09:26,859 koji će nam omogućiti da generirati HTML automatski generirati CSS automatski, 1098 01:09:26,859 --> 01:09:29,430 tako da možemo početi u srijedu provesti, recimo, 1099 01:09:29,430 --> 01:09:31,700 naša vlastita tražilice i više. 1100 01:09:31,700 --> 01:09:34,770 Ali više o tome u par dana. Vidjet ćemo vam onda. 1101 01:09:34,870 --> 01:09:39,000 >> [CS50.TV]