1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [Teden 7] 2 00:00:02,440 --> 00:00:04,730 [David J. Malan - Harvard University] 3 00:00:04,730 --> 00:00:07,490 [To je CS50. - CS50.TV] 4 00:00:07,490 --> 00:00:12,280 V redu. Dobrodošel nazaj. To je CS50, in to je začetek tedna 7. 5 00:00:12,280 --> 00:00:14,690 Nekaj ​​malih objav: 6 00:00:14,690 --> 00:00:18,150 Pset5 je sedaj v teku, ko se bo, 7 00:00:18,150 --> 00:00:21,590 in naj povem, čisto iskreno, to pa so ponavadi med bolj zahtevno 8 00:00:21,590 --> 00:00:24,460 problemskih sklopov v teku, zato naj omenim to zdaj 9 00:00:24,460 --> 00:00:28,190 tako da ta teden bolj kot kdaj koli prej ne boste počakati, recimo, sredo zvečer 10 00:00:28,190 --> 00:00:29,920 ali četrtek zvečer se potopite noter 11 00:00:29,920 --> 00:00:32,369 To je vsekakor zanimiva pset. Mislimo, da je zabavno. 12 00:00:32,369 --> 00:00:36,110 Če ste dejansko dobili v celoti pravilen in nato lahko izpodbija tako imenovano Big Board, 13 00:00:36,110 --> 00:00:39,830 boste imeli priložnost, da se ujema razum z nekaj osebja seveda v 14 00:00:39,830 --> 00:00:41,620 in nekatere od vaših sošolcev. 15 00:00:41,620 --> 00:00:44,670 Kaj Veliki svet je spet imate črkovalnika delo, 16 00:00:44,670 --> 00:00:48,860 boste mogli iti na cs50.net po zagonu ukaza, 17 00:00:48,860 --> 00:00:52,430 samo izbere, nato pa koliko časa in količina RAM in več 18 00:00:52,430 --> 00:00:56,130 ki ste ga uporabljali v svojem izvajanju Tukaj bo razstavljal na domačem teku na stran. 19 00:00:56,130 --> 00:00:59,740 Opazili boste, da se cel kup ti ljudje tu na seznamu zaposlenih 20 00:00:59,740 --> 00:01:04,220 ker čez vikend, je osebje mislil, da bi bilo zabavno, da bi poskušali Preseči seboj. 21 00:01:04,220 --> 00:01:07,390 Torej zavedati, da je cilj tukaj je, da ne Preseči osebje. 22 00:01:07,390 --> 00:01:09,790 Tudi jaz sem tukaj samo na številki 13. 23 00:01:09,790 --> 00:01:13,790 Povsem se odločijo, toda to je priložnost, da vidite, kako malo RAM-a 24 00:01:13,790 --> 00:01:16,790 in kako malo CPU sekund, lahko uporabite vis-a-vis nekaj tvojih sošolcev. 25 00:01:16,790 --> 00:01:20,540 >> In jaz priznam, da je Kevin Michael Schmid, 26 00:01:20,540 --> 00:01:23,750 trenutno številko 1 mesto kot ena od TF, 27 00:01:23,750 --> 00:01:28,120 To je izvedba, ki ji pravimo ni mogoče 28 00:01:28,120 --> 00:01:32,700 glede na to, da je z uporabo skoraj 0 RAM in skoraj 0 sekund za nakladanje. 29 00:01:32,700 --> 00:01:35,670 Torej bomo poskrbeli offline Kevin. [Smeh] 30 00:01:35,670 --> 00:01:40,950 Obstajajo določene veščine, ki Kevin odpluje na preizkušnji tukaj. 31 00:01:40,950 --> 00:01:45,280 Ena od stvari, ki smo mislili, da bomo tudi mi je zdaj CS50x je teden v teku, 32 00:01:45,280 --> 00:01:49,520 in vi ste toliko del tega eksperimenta, kot so tisti študenti. 33 00:01:49,520 --> 00:01:53,720 Smo jih prosili, kot del njihovega pset0, ki je bil prav tako predložiti projekt scratch 34 00:01:53,720 --> 00:01:58,280 od obresti, ki so jim - igre, interaktivno umetniško delo, animacija, ali podobno - 35 00:01:58,280 --> 00:02:03,700 1 - do 2-minutni video, če bi želeli, pozdravljanja na svetu in kdo v resnici so. 36 00:02:03,700 --> 00:02:06,780 Sem mislil, da sem z vami deliti le nekaj videoposnetkov, ki so bili predloženi doslej 37 00:02:06,780 --> 00:02:10,759 ker je za nas, za zaposlene vsaj, da je bilo res razburljivo 38 00:02:10,759 --> 00:02:14,220 in navdih, da se te ljudje iz vsega sveta - držav po vsem svetu - 39 00:02:14,220 --> 00:02:18,160 tuning v, od vseh stvari, na tečaj računalništva na internetu, 40 00:02:18,160 --> 00:02:20,410 ali je to zato, ker želijo nadaljevati svoje študije, 41 00:02:20,410 --> 00:02:22,300 želijo, da se njihove poklicne poti v novo smer, 42 00:02:22,300 --> 00:02:24,390 želijo zapolniti vrzeli v svojem znanju, 43 00:02:24,390 --> 00:02:27,190 tako da nekaj istih razlogov, da fantje so morda bili tukaj. 44 00:02:27,190 --> 00:02:31,090 >> Torej, ti dam en tak študent tukaj. Lahko Povečati obseg le malo. 45 00:02:31,090 --> 00:02:35,520 Tukaj je ena 1-minutnih našega študenta vlogah. 46 00:02:35,520 --> 00:02:40,380 Pozdravljen, svet. Sem študent industrijskega inženiringa tukaj v Malagi, Španija. 47 00:02:40,380 --> 00:02:45,840 Jaz sem navdušen nad tem spletnem seveda zato, ker imam rad računalništva, res, 48 00:02:45,840 --> 00:02:48,880 in sem resnično cenim, da sem dobil to razišče. 49 00:02:48,880 --> 00:02:51,940 In dejstvo, da se lahko naučim isto vse počnete 50 00:02:51,940 --> 00:02:57,040 toda namesto da bi v Harvardu sem v Malagi, kako super je to? 51 00:02:57,040 --> 00:03:02,040 No, jaz sem Fernando, in to je CS50. Se vidimo. 52 00:03:02,040 --> 00:03:07,100 [Smeh] Še en posnetek, smo še posebej všeč, boste ugotovili, da je ta gospod je angleščina ni tako močna. 53 00:03:07,100 --> 00:03:11,520 Izgleda, da je imel stroj prevod, tako da so prevodi so same malo nepopolna, 54 00:03:11,520 --> 00:03:15,790 ampak to je bil eden od naših najljubših doslej, kot dobro. 55 00:03:25,080 --> 00:03:29,980 [♪ ♪] 56 00:03:29,980 --> 00:03:32,370 Pozdravljen, svet. [Govorijo v japonščini] 57 00:03:32,370 --> 00:03:39,830 [Moram pozdraviti v japonščini, ker moja angleščina je zelo nezanesljiva.] 58 00:03:39,830 --> 00:03:45,380 [Sem podal sporočilo za vas od mesta Gifu, Japonska.] 59 00:03:45,380 --> 00:03:49,820 [Lahko sem študent prvič v 20 letih, kot je mogoče videti.] 60 00:03:49,820 --> 00:03:54,640 [Zelo sem hvaležen, da Harvard University, ki mi je dal to možnost in EDX.] 61 00:03:54,640 --> 00:04:01,510 [Golf je kitaro in moja najljubša stvar deluje.] [Smeh] 62 00:04:01,510 --> 00:04:05,750 [♪ ♪] 63 00:04:05,750 --> 00:04:10,790 [Zakaj misliš, da sem se trudil, da se udeležijo cs50x.] 64 00:04:10,790 --> 00:04:14,990 [Harvard University, to je moje hrepenenje.] 65 00:04:14,990 --> 00:04:19,740 [Še posebej, če sem daleč prisotnost živel na Japonskem.] 66 00:04:19,740 --> 00:04:26,680 [Sem poskušal takoj zavedati obstoja takega EDX kdaj.] 67 00:04:26,680 --> 00:04:32,500 [Se ti ne zdi, da ne boste z njegovo starostjo učenja I.] 68 00:04:32,500 --> 00:04:38,350 [Cs50 je moje hrepenenje. Moje ime je Kazu, in to je cs50.] 69 00:04:38,350 --> 00:04:43,090 [♪ ♪] [ploskanje in navijanje] 70 00:04:43,090 --> 00:04:49,220 Druga priljubljena naša je bila ta trditev sem od nekoga. 71 00:04:51,070 --> 00:04:55,380 [♪ ♪] [Malan] Google je, če ste seznanjeni s tem meme. 72 00:04:55,380 --> 00:05:01,480 >> In potem končno, par drugih, da imam napotenih da morda zmagal čudovit nagrado. 73 00:05:01,480 --> 00:05:06,820 [Študenti] Ah! >> [Malan] bomo morali poslušati. To je kratek, tako poslušajte pozorno. 74 00:05:08,580 --> 00:05:11,150 [Ženska govornik] Kako ti je ime? >> Louie. 75 00:05:11,150 --> 00:05:16,120 [Ženska govornik] Kaj je to? >> [Zahihita] CS50. [Smeh] 76 00:05:16,120 --> 00:05:19,510 [Malan] Ni 2 traja, čeprav. 77 00:05:19,510 --> 00:05:22,240 Gremo, zadnja. 78 00:05:23,030 --> 00:05:26,980 Moje ime je Louie, in to je CS50. 79 00:05:26,980 --> 00:05:30,250 [Smeh] To je torej CS50x. 80 00:05:30,250 --> 00:05:33,230 Hvala za vse tiste, ki ste med sledenjem vzdolž doma 81 00:05:33,230 --> 00:05:35,620 , ki so bili deležno doslej. 82 00:05:35,620 --> 00:05:39,510 Danes smo zaključimo razpravo o podatkovnih struktur, 83 00:05:39,510 --> 00:05:41,160 vsaj nekatere najbolj temeljne, 84 00:05:41,160 --> 00:05:44,760 in potem bomo nadaljevali pogovor o HTML in spletno programiranje. 85 00:05:44,760 --> 00:05:48,520 Dejansko smo porabili preteklosti nekateri sedem tednov si ogleduje osnove programiranja - 86 00:05:48,520 --> 00:05:50,450 algoritmi, podatkovne strukture in podobno - 87 00:05:50,450 --> 00:05:53,050 in C, kot ste morda imeli doslej, 88 00:05:53,050 --> 00:05:57,060 ni nujno najbolj dostopna jezikov 89 00:05:57,060 --> 00:05:59,090 , s katero bi se izvedli nekateri od teh idej. 90 00:05:59,090 --> 00:06:01,880 In tako se začne ta teden in naslednji teden, nato pa naslednje, 91 00:06:01,880 --> 00:06:07,110 bomo končno lahko prehod iz C, ki je na splošno znana kot dokaj nizko raven jezika, 92 00:06:07,110 --> 00:06:11,190 da se stvari na višji ravni, med njimi PHP, Javascript in podobno, 93 00:06:11,190 --> 00:06:14,850 kar bomo videli, zasnovani na istih lekcij, ki smo se naučili v zadnjih nekaj tednih, 94 00:06:14,850 --> 00:06:19,430 vendar boste ugotovili, da razglasitev stvari, kot so nizi in hash tabele in iskanje in razvrščanje 95 00:06:19,430 --> 00:06:23,370 postalo tako veliko lažje, ker bodo jeziki sami smo začeli uporabljati 96 00:06:23,370 --> 00:06:25,290 bo postal močnejši. 97 00:06:25,290 --> 00:06:27,410 Ampak najprej, uporaba dreves. 98 00:06:27,410 --> 00:06:30,240 To je zelo pogosti v teh dneh, da je treba stisniti podatke. 99 00:06:30,240 --> 00:06:34,770 V kakšnem kontekstu bi si želeli stisniti neke vrste digitalnih informacij? 100 00:06:37,190 --> 00:06:39,670 >> Ja. >> [Študent] Če želite poslati preko spleta. 101 00:06:39,670 --> 00:06:41,450 Ja, ko želite poslati nekaj preko spleta. 102 00:06:41,450 --> 00:06:44,950 Če želite prenesti velike datoteke, je idealno, če nekdo na drugi strani 103 00:06:44,950 --> 00:06:48,760 stisnjenim te datoteke z uporabo zip formatu ali kaj podobnega 104 00:06:48,760 --> 00:06:53,760 tako da vam pošilja manj bitov, kot bi se sicer prenašajo. 105 00:06:53,760 --> 00:06:55,500 Torej, kako stisniti podatke? 106 00:06:55,500 --> 00:07:00,540 Vse izvira na katerih se uporablja manj bitov, kot jih zahteva privzeto. 107 00:07:00,540 --> 00:07:03,220 Ampak to je nekako nenavadna stvar, ker mislim nazaj na 0 in 1 tedna 108 00:07:03,220 --> 00:07:07,370 ko smo govorili o ASCII in binarni in se pogovarjala o ASCII zlasti 109 00:07:07,370 --> 00:07:10,690 kot z uporabo 8 bitov za zastopanje črke abecede 110 00:07:10,690 --> 00:07:16,120 tako da je črka zastopa 65, male črke, je število 97, 111 00:07:16,120 --> 00:07:21,210 in pa ti predstavljajo 65 ali 97, ki ga uporabljate 7 ali 8 bitov. 112 00:07:21,210 --> 00:07:24,120 Ampak ulov je, da so nekatere črke v angleške abecede 113 00:07:24,120 --> 00:07:26,230 da ni tako priljubljena kot drugi. 114 00:07:26,230 --> 00:07:31,600 Z sploh ni tako priljubljen, Q sploh ni tako priljubljen, ampak A in E, so super priljubljena. 115 00:07:31,600 --> 00:07:37,280 In še za vse te črke, ki ga privzeto svet uporablja isto število bitov, le 8. 116 00:07:37,280 --> 00:07:42,690 Torej ne bi bilo pametneje, če bi namesto z uporabo 8 bitov za vsako pismo, 117 00:07:42,690 --> 00:07:47,440 še najbolj pogosto uporablja kot Q in Z, 118 00:07:47,440 --> 00:07:51,910 Kaj pa, če smo uporabili manj bitov za A in E in S in najbolj priljubljenih črk 119 00:07:51,910 --> 00:07:55,000 in uporabili več bitov za manj priljubljenih pisem, 120 00:07:55,000 --> 00:07:57,770 Ideja je optimističen dajva za skupno primeru, 121 00:07:57,770 --> 00:08:01,160 ki je tema računalništva poskuša optimizirati, kaj se bo zgodilo, najbolj 122 00:08:01,160 --> 00:08:05,310 in porabili malo več časa, nekoliko več prostora za stvari, ki so, seveda, bi lahko zgodijo 123 00:08:05,310 --> 00:08:07,680 vendar ni nujno tako pogosto. 124 00:08:07,680 --> 00:08:09,330 Dajmo torej zgled. 125 00:08:09,330 --> 00:08:12,610 >> Recimo, da želimo kodiranje podatkov dokaj učinkovito. 126 00:08:12,610 --> 00:08:15,090 Morda ste odraščali vedo nekaj o Morse kode, 127 00:08:15,090 --> 00:08:17,450 in so možnosti, da niste vedeli, dejansko kodo, 128 00:08:17,450 --> 00:08:21,750 vendar pa bi vas opozoriti, da je vsaj ta serija pik in pomišljajev. 129 00:08:21,750 --> 00:08:26,640 To je dokaj učinkovito kodiranje in obvestila, da je najbolj priljubljen pismo - na primer, E - 130 00:08:26,640 --> 00:08:28,980 uporablja Najkrajši piskov. 131 00:08:28,980 --> 00:08:31,740 Morsejeva abeceda je vse o beep-beep-beep-beep-beep-pisk in gospodarstvo tone 132 00:08:31,740 --> 00:08:34,799 bodisi za krajše časovno obdobje ali daljše obdobje. 133 00:08:34,799 --> 00:08:40,330 E, kot je označena s piko, je zelo kratek pisk, samo piska in da bi predstavljal E. 134 00:08:40,330 --> 00:08:43,960 Po drugi strani pa bi bilo T daljši pisk, kot pisk [podaljšuje zvok] 135 00:08:43,960 --> 00:08:45,710 in da bo zastopa T. 136 00:08:45,710 --> 00:08:48,840 Ampak to je še vedno precej kratka, saj v nasprotju s tem, če pogledaš na Z, 137 00:08:48,840 --> 00:08:52,690 Z izrazi bi šel pisk, pisk [več zvoka], pisk, pisk [krajši zvok]. 138 00:08:52,690 --> 00:08:55,360 Torej, to je več, ker je manj pogosta. 139 00:08:55,360 --> 00:08:58,150 Toda kavelj tukaj je, da je Morse code malo pomanjkljiv 140 00:08:58,150 --> 00:09:00,610 v tem, da to ni takoj decodable. 141 00:09:00,610 --> 00:09:07,350 Recimo, da ste slišali o nekaterih koncu žice pisku [kratko], piska [časa]. 142 00:09:07,350 --> 00:09:12,480 Kakšno sporočilo pa sem dobil? Pika in vezaj. Kaj to pomeni? 143 00:09:12,480 --> 00:09:15,330 [Študent] A. >> [Malan] Mogoče. 144 00:09:15,330 --> 00:09:18,270 Lahko bi bilo tudi po elektronski sledi T. 145 00:09:18,270 --> 00:09:23,390 Z drugimi besedami, Morse code, čeprav se dopolnjuje to načelo optimizacije kotiček primer, 146 00:09:23,390 --> 00:09:26,250 da ni primerna za takojšnjo decodability. 147 00:09:26,250 --> 00:09:29,850 To pomeni, da je človek, ki je slušno ali je prejemnik teh pik in pomišljajev 148 00:09:29,850 --> 00:09:34,540 je nekako ugotoviti, kje so odmori med črkami, 149 00:09:34,540 --> 00:09:39,660 ker če ne veš, če ti odmori, boste morda zamenjali za ET ali obratno. 150 00:09:39,660 --> 00:09:43,880 >> Torej, kaj lahko naredite? V Morse code lahko samo premor med vsako od črk. 151 00:09:43,880 --> 00:09:47,660 Ampak premori je nekako v nasprotju s celotno točke pospešitev stvari. 152 00:09:47,660 --> 00:09:52,880 Pa kaj, če namesto tega smo prišli gor z oznako, kjer ni bilo tako slabo stanje 153 00:09:52,880 --> 00:09:56,570 kjer je E predpona, na primer, od - 154 00:09:56,570 --> 00:10:00,020 z drugimi besedami, če bi se prepričajte, da so vzorci, ki so še vedno okrajšava za priljubljene črk 155 00:10:00,020 --> 00:10:04,850 dolgo manj priljubljenih pisem, vendar ni mogoče zmeda? 156 00:10:04,850 --> 00:10:08,930 Človek z imenom Huffman leti izumil ta sistem se imenuje Huffmanovo kodiranje 157 00:10:08,930 --> 00:10:12,390 ki dejansko dopolnjuje enega od podatkovnih struktur, ki smo jih porabili nekaj časa govorimo o 158 00:10:12,390 --> 00:10:16,560 ta teden, da dreves, dvojiška drevesa posebej - 159 00:10:16,560 --> 00:10:19,710 binarno drevo pomeni, da nima več kot 2 otroka. 160 00:10:19,710 --> 00:10:22,720 Ima morda levo otroka, morda pravo otroka, in to je to. 161 00:10:22,720 --> 00:10:26,510 Torej, predvidevam samo zaradi razprave, da nekdo želi poslati sporočilo 162 00:10:26,510 --> 00:10:31,270 ki je videti takole. To je popoln nesmisel, vendar je sestavljen iz As, Bs, Cs, Ds, in Es. 163 00:10:31,270 --> 00:10:34,890 In če ste dejansko prešteti vse As, Bs, Cs, Ds, in Es 164 00:10:34,890 --> 00:10:36,870 in nato delite s skupnim številom pisem, 165 00:10:36,870 --> 00:10:42,710 tale graf pravi, da 45% teh pisem so Es, 20% pa kot, 166 00:10:42,710 --> 00:10:45,010 10% Bs, in tako naprej. 167 00:10:45,010 --> 00:10:47,330 Torej, z drugimi besedami, domneva, da je borzna niz je 168 00:10:47,330 --> 00:10:49,080 je le nekaj sporočil, ki jih želite poslati. 169 00:10:49,080 --> 00:10:52,180 To se zgodi, da je nesmisel samo zato, da bomo lahko uporabite kot nekaj črk, kot je mogoče, 170 00:10:52,180 --> 00:10:55,220 ampak to je res tako, da je E ostaja najbolj priljubljen, 171 00:10:55,220 --> 00:11:01,450 in B in C so najmanj priljubljeni, vsaj v teh 5 črkami abecede. 172 00:11:01,450 --> 00:11:04,040 Torej, kako lahko greste o prihajajo s kodiranjem, 173 00:11:04,040 --> 00:11:08,430 binarno kodiranje, vzorec 0s in 1s za vsako od teh pisem 174 00:11:08,430 --> 00:11:14,820 na tak način, da je E kratek vzorec in morda B in C so nekoliko daljše vzorci, 175 00:11:14,820 --> 00:11:19,270 spet ideja je, da želimo uporabiti manj bitov večino časa 176 00:11:19,270 --> 00:11:21,790 in več bitov le enkrat v nekaj časa. 177 00:11:21,790 --> 00:11:26,070 Po Huffmanovo kodiranje, lahko ustvarite gozd dreves. 178 00:11:26,070 --> 00:11:31,190 Tukaj je neke vrste fabule tukaj, ki vključuje dreves in tudi postopek za njihovo vzpostavitev. 179 00:11:31,190 --> 00:11:32,420 Začnimo. 180 00:11:32,420 --> 00:11:36,140 >> Predlagam, da začnete s tem gozdu, tako rekoč od 5 dreves, 181 00:11:36,140 --> 00:11:38,260 vsak, ki je precej neumno drevo. 182 00:11:38,260 --> 00:11:42,800 Drevo je sestavljeno iz samo enega vozlišča, kot je predstavljena tu krogu. 183 00:11:42,800 --> 00:11:45,310 Torej bi lahko vsaka od teh stvari je struct C 184 00:11:45,310 --> 00:11:50,200 in bi znotraj struct C se plovec, ki predstavlja število frekvenc 185 00:11:50,200 --> 00:11:52,510 in potem morda znak, ki predstavlja črko. 186 00:11:52,510 --> 00:11:56,470 Torej menite o teh vozlišč, kot navaden struct C, vendar za zdaj, višjo raven. 187 00:11:56,470 --> 00:12:01,230 To je gozd 5 dreves, pri čemer je vsak, ki imajo le eno vozlišče. 188 00:12:01,230 --> 00:12:06,830 Kaj Huffman predlog je, da smo začeli združevati drevesa, 189 00:12:06,830 --> 00:12:11,140 ki imajo najmanjše frekvence šteje v nekoliko večjih dreves 190 00:12:11,140 --> 00:12:13,490 jih povezujejo z novo vozlišče koren. 191 00:12:13,490 --> 00:12:17,560 Torej, med črkami tukaj, opazite, da zaradi lažjega sem jih ločijo od leve proti desni, 192 00:12:17,560 --> 00:12:21,420 čeprav to ni nujno potrebno, in obvestilo, da je najmanjši vozlišča 193 00:12:21,420 --> 00:12:23,930 Trenutno je 10% in 10%. 194 00:12:23,930 --> 00:12:28,940 Torej Huffman predlaga, da združi te najmanjše 2 vozlišča v novo drevo 195 00:12:28,940 --> 00:12:34,450 z uvedbo novega nadrejeno vozlišče, nato pa se te matične levo otroka in pravico otroka 196 00:12:34,450 --> 00:12:37,720 kjer je B poljubno levo in C je samovoljno pravico. 197 00:12:37,720 --> 00:12:41,590 In potem Huffman še predlaga, da lets 'zdaj samo pomislite na levi otroka 198 00:12:41,590 --> 00:12:44,790 V enem od teh dreves se vedno, kot jo zastopa 0 199 00:12:44,790 --> 00:12:47,890 ter pravico otrok, pri čemer se vedno ga zastopa številko 1. 200 00:12:47,890 --> 00:12:50,680 >> Ni važno, če si jih obrnite tako dolgo, kot ste dosledni. 201 00:12:50,680 --> 00:12:54,650 Torej, zdaj imamo štiri drevesa v tem gozdu. 202 00:12:54,650 --> 00:12:58,050 In rečem 4, ker zdaj drevo na levi - 203 00:12:58,050 --> 00:13:00,570 in to ni tako veliko drevo v smislu, da raste na ta način, 204 00:13:00,570 --> 00:13:05,170 to je več kot družinsko drevo, kjer je zdaj 0,2 je vrsta staršev dveh otrok - 205 00:13:05,170 --> 00:13:07,930 opazili, da se v tej staršev smo sestavljeni 0,2. 206 00:13:07,930 --> 00:13:13,370 Dodali smo frekvenčne štetja dveh otrok, in glede na novo vozlišče skupno vsoto. 207 00:13:13,370 --> 00:13:15,310 Torej, zdaj pa ponovite ta postopek. 208 00:13:15,310 --> 00:13:19,490 Poišči najmanjša dva vozlišča, nato pa se jim pridružijo v novo drevo 209 00:13:19,490 --> 00:13:21,380 in ponovite postopek naprej. 210 00:13:21,380 --> 00:13:26,390 Zdaj imamo nekaj kandidatov, 20%, 15% in 20% drugo. 211 00:13:26,390 --> 00:13:29,780 V tem primeru moramo prekiniti kravato. Mi lahko to storite samovoljno. 212 00:13:29,780 --> 00:13:31,540 Morali bi narediti dosledno. 213 00:13:31,540 --> 00:13:33,760 V tem primeru bom šel samovoljno s tisto na levi strani 214 00:13:33,760 --> 00:13:39,880 in zdaj združiti z 20% in 15%, da mi nov staršev, imenovano 35% 215 00:13:39,880 --> 00:13:46,310 čigavo je otrok 0, katere pravica otrok 1, in zdaj imamo le tri drevesa v gozdu. 216 00:13:46,310 --> 00:13:47,960 Lahko morda videli, kam to pelje. 217 00:13:47,960 --> 00:13:51,150 Če bomo ponovite nekaj več časa, da bomo imeli samo eno večjo drevo, 218 00:13:51,150 --> 00:13:53,900 vse katerega robovi so označeni s 0s in 1s. 219 00:13:53,900 --> 00:13:55,710 Dajmo še enkrat. 220 00:13:55,710 --> 00:14:02,600 35% je, da je koren drevesa. 20% in 45%, tako da bomo za združitev 35% in 20%. 221 00:14:02,600 --> 00:14:05,610 Zdaj imamo to drevo tukaj. Mi dodamo tiste, skupaj imamo 55%. 222 00:14:05,610 --> 00:14:07,910 Zdaj je na voljo le dve drevesi v gozdu. 223 00:14:07,910 --> 00:14:11,900 Mi to en končni čas, in upam, da se vse frekvence matematično sešteti 224 00:14:11,900 --> 00:14:15,570 ker bi morali, saj smo jih izračuna od zaslužiti-go, da dodate do 100%. 225 00:14:15,570 --> 00:14:17,960 In zdaj imamo eno drevo. 226 00:14:17,960 --> 00:14:20,580 Torej, to je Huffmanovo kodiranje drevo. 227 00:14:20,580 --> 00:14:24,400 Nekako je nekaj časa do tja verbalno, ampak realnost je z zanko za 228 00:14:24,400 --> 00:14:27,620 ali z rekurzivno funkcijo, bi lahko zgradili to stvar zelo hitro. 229 00:14:27,620 --> 00:14:32,440 Torej, zdaj imamo eno novo vozlišče, in vseh teh notranjih vozlišč so malloc'd, 230 00:14:32,440 --> 00:14:34,690 domnevno na poti. 231 00:14:34,690 --> 00:14:38,650 Torej, zdaj na vrhu tega drevesa imamo 100%, zdaj pa smo opazili pot 232 00:14:38,650 --> 00:14:43,780 Iz tega novega pra-pra-pra-stari starši z vsemi pra-pra-pra vnuki 233 00:14:43,780 --> 00:14:45,930 vse na dnu, da bi vse liste. 234 00:14:45,930 --> 00:14:52,840 >> Kaj bomo pa zdaj predlaga, da se z namenom, da zastopa črko E, 235 00:14:52,840 --> 00:14:55,670 bomo preprosto uporabo številko 1. Zakaj? 236 00:14:55,670 --> 00:15:01,000 Ker če prečkala to drevo iz končnega korena do lista znan kot E, 237 00:15:01,000 --> 00:15:06,050 sledimo samo en rob, desni rob, in ki je označena seveda v zgornjem desnem 1. 238 00:15:06,050 --> 00:15:11,550 Torej posledice tukaj za Huffman je bil, da se kodiranje E v binarno bodi 1. 239 00:15:11,550 --> 00:15:14,490 In to je prekleto učinkovit. Ne morem dobiti vse manjše od tega. 240 00:15:14,490 --> 00:15:18,350 Nasprotno pa se bo zastopan, če boste sledili logiki, 241 00:15:18,350 --> 00:15:21,610 na kakšen vzorec bitov namesto? 01. 242 00:15:21,610 --> 00:15:25,500 Torej, da bi dobili, bomo začeli pri korenu in gremo levo in nato gremo desno, 243 00:15:25,500 --> 00:15:28,580 kar pomeni, da je sledila 0 in nato 1. 244 00:15:28,580 --> 00:15:32,810 Zato bomo predstavljajo pismo z vzorcem 0 in 1. 245 00:15:32,810 --> 00:15:36,010 In sedaj opazil že imamo lastnost neposredni decodability 246 00:15:36,010 --> 00:15:38,090 da nismo imeli v Morse code. 247 00:15:38,090 --> 00:15:42,840 Čeprav sta oba vzorcev precej kratek - E je 1 bit, je bit 2 - 248 00:15:42,840 --> 00:15:45,080 opazite, da jih ni mogoče zamenjati za eno ali drugo, 249 00:15:45,080 --> 00:15:54,870 ker če vidite 1 to je dobil, da je E, če vidite 0, potem 1 Očitno moraš biti A. 250 00:15:54,870 --> 00:15:58,410 Prav, kaj je D? 001. 251 00:15:58,410 --> 00:16:01,440 Kaj je C? 0001. 252 00:16:01,440 --> 00:16:05,320 In kaj je B? 0000. 253 00:16:05,320 --> 00:16:09,550 In še enkrat, ker so vse črke nam je mar, so na listi 254 00:16:09,550 --> 00:16:13,890 in nobeden od njih so vrste posrednikov na poti od korena do listov, 255 00:16:13,890 --> 00:16:18,760 ni nevarnosti conflating 2 črk "različne kodiranja 256 00:16:18,760 --> 00:16:22,300 ker so vsi ti bitnih vzorcev so deterministične. 257 00:16:22,300 --> 00:16:25,280 0000 bo vedno B. 258 00:16:25,280 --> 00:16:29,480 Ni vozlišče nekje vmes, da boste zamenjali eno pismo za drugo. 259 00:16:29,480 --> 00:16:31,150 Torej, kaj je tu posledice? 260 00:16:31,150 --> 00:16:35,080 >> Najbolj priljubljena pismo - v tem primeru E - je dobila najkrajšo kodiranje 261 00:16:35,080 --> 00:16:37,430 Je dobila naslednjo najkrajšo kodiranje 262 00:16:37,430 --> 00:16:41,390 in B in C, ki smo že vedeli od get-go so bile vrste najmanj priljubljena 263 00:16:41,390 --> 00:16:45,390 pri frekvenci 10% vseh, ki so jih dobila najdaljšo kodiranje. 264 00:16:45,390 --> 00:16:49,410 In kaj zdaj to pomeni, da če želite poslati sporočilo, ki je stisnjen 265 00:16:49,410 --> 00:16:51,950 prek interneta ali v e-pošti ali podobno, 266 00:16:51,950 --> 00:16:56,730 namesto z uporabo standardnih ASCII, lahko pošljete Huffman kodirano sporočilo 267 00:16:56,730 --> 00:17:01,720 pri čemer, če želite poslati črko E, pošljete samo en bit. 268 00:17:01,720 --> 00:17:05,680 Če želite poslati, pošljete 2 bitov, 01, namesto pošiljanja 8 bitov 269 00:17:05,680 --> 00:17:10,190 sledi še 8 bitov sledi še 8 bitov in tako naprej. 270 00:17:10,190 --> 00:17:11,940 Vendar pa je kavelj tukaj. 271 00:17:11,940 --> 00:17:17,079 Ni dovolj, da samo zgraditi to drevo in nato začeli pošiljati od Alice Bob na 272 00:17:17,079 --> 00:17:20,010 krajše bitni vzorec, niz iz ASCII, 273 00:17:20,010 --> 00:17:23,140 Alice, ker ima tudi obvestiti Bob česa 274 00:17:23,140 --> 00:17:26,880 Bob, če se bo lahko prebrali njeno stisnjen sporočilo? 275 00:17:26,880 --> 00:17:30,770 [Neslišno študentski odziv] >> Kaj je to? 276 00:17:30,770 --> 00:17:32,310 [Neslišno študentski odziv] >> Od kar je drevo. 277 00:17:32,310 --> 00:17:35,160 Ali še natančneje, kaj ti kodiranja so 278 00:17:35,160 --> 00:17:39,010 zlasti zato, ker v tej zgodbi smo naredili sodbo klic na enem mestu. 279 00:17:39,010 --> 00:17:43,640 Ne pozabite, da smo morali samovoljno izbrati med 2 različnih 20% vozlišč? 280 00:17:43,640 --> 00:17:49,800 Torej ni res, da lahko Janez, prejemnik, samo rekonstruirati drevo na svojo lastno 281 00:17:49,800 --> 00:17:53,390 morda zato, ker bo ustvariti drevo vedno tako malo drugače od Alice. 282 00:17:53,390 --> 00:17:56,670 Poleg tega Bob ne ve, kaj je izvirno sporočilo 283 00:17:56,670 --> 00:18:00,770 ker edina stvar, Alice ga poslali, seveda, je stisnjen sporočilo. 284 00:18:00,770 --> 00:18:05,900 >> Torej ulov s kompresijo, kot je to, da, ja, lahko Alice prihranite cel kup bitov 285 00:18:05,900 --> 00:18:09,900 s pošiljanjem 1 za E in 01 za in tako naprej, 286 00:18:09,900 --> 00:18:15,180 ampak ona ima tudi obvestiti Bob, kaj je preslikava med črkami in bitov 287 00:18:15,180 --> 00:18:19,620 saj ni mogoče jasno sklicevati na samo ASCII več, če ne uporabljate ASCII. 288 00:18:19,620 --> 00:18:22,200 Torej ona lahko bodisi pošlje mu nekako drevo - 289 00:18:22,200 --> 00:18:26,600 zapisal, ga shranite kot binarnih podatkov ali nekaj takega - 290 00:18:26,600 --> 00:18:30,280 ali pa mu poslal malo list goljufija, Excelove datoteke, ki prikazuje preslikave. 291 00:18:30,280 --> 00:18:36,480 Tako je učinkovitost stiskanja res predpostavlja, da so sporočila, ki jih pošiljate 292 00:18:36,480 --> 00:18:40,230 so precej veliki, vsaj srednje velika podjetja, 293 00:18:40,230 --> 00:18:42,180 ker če boste super kratko sporočilo, 294 00:18:42,180 --> 00:18:45,390 Če si želite poslati sporočilo BAD, ki se zgodi, da je beseda, ki jo lahko tukaj napiše, 295 00:18:45,390 --> 00:18:49,550 B-D, ste verjetno, da bo uporabila manj bitov, 296 00:18:49,550 --> 00:18:53,130 vendar pa je ulov je, če imate tudi obvestiti Bob, kaj je drevo 297 00:18:53,130 --> 00:18:57,530 ali kaj ti kodiranja, ti boš verjetno odtehta vse prihranke 298 00:18:57,530 --> 00:19:00,110 da imajo stisnjenih stvari za začetek. 299 00:19:00,110 --> 00:19:02,210 Tako lahko bilo dejansko res, da če poskusite stiskanje 300 00:19:02,210 --> 00:19:05,330 celo z nekaj podobnega formatih zip datoteko ali bi morali biti seznanjeni z - 301 00:19:05,330 --> 00:19:07,780 zelo majhne datoteke, tudi prazne slike - 302 00:19:07,780 --> 00:19:10,930 Včasih pa te datoteke dobili večji in ne manjši. 303 00:19:10,930 --> 00:19:14,320 Ampak realno, da se zgodi samo za majhne velikosti datotek, 304 00:19:14,320 --> 00:19:16,920 tako da to ne dogaja, da bi GB datoteka 2 gigabajta; 305 00:19:16,920 --> 00:19:19,480 smo res govorimo bajte ali le nekaj kilobajtov. 306 00:19:19,480 --> 00:19:22,330 >> Nekateri programi, kot zadrgo dovolj pameten, da zavedaš, da 307 00:19:22,330 --> 00:19:24,590 "Ti boš, da bi porabili več bitov stiskanjem to." 308 00:19:24,590 --> 00:19:27,460 "Naj se ne trudi se ga stisne za vas vse." 309 00:19:27,460 --> 00:19:30,160 Torej je to le eden od načinov, potem stiskanje besedila. 310 00:19:30,160 --> 00:19:32,300 Mi lahko izvajajo kaj takega v C. 311 00:19:32,300 --> 00:19:35,370 Na primer, tukaj je, kako bi lahko predstavljajo vozlišče v tem drevesu 312 00:19:35,370 --> 00:19:39,320 kjer imamo sloj simbola, plavajoče vrednost za frekvence, 313 00:19:39,320 --> 00:19:42,250 in kot smo videli pri naših drugih podatkovnih struktur, 2 kazalci, 314 00:19:42,250 --> 00:19:47,080 1 na levi otroka, 1 desno, bodisi od katerih je lahko NULL, 315 00:19:47,080 --> 00:19:50,850 če pa ne, se nanaša na levi in ​​desni otroka otroka. 316 00:19:50,850 --> 00:19:55,130 Torej, to je potem Huffmanovo kodiranje, in to je eden od načinov, da lahko greste o stiskanje podatkov, 317 00:19:55,130 --> 00:19:57,880 in to je zagotovo ena izmed najbolj enostaven za izvedbo 318 00:19:57,880 --> 00:20:00,830 v kontekstu, recimo, prejšnji teden podatkovnih struktur, 319 00:20:00,830 --> 00:20:03,250 čeprav še bolj sofisticirane algoritme obstaja 320 00:20:03,250 --> 00:20:08,220 da lahko naredimo še bolj dovršene mutacije vaših podatkov. 321 00:20:08,220 --> 00:20:11,640 Vsa vprašanja potem na drevesih, binarnih dreves ali stiskanje besedila? 322 00:20:11,640 --> 00:20:15,590 [Študent] Ali obstaja nekaj nejasnosti, kot če [neslišno] razdeli na 01, 323 00:20:15,590 --> 00:20:19,160 potem bi bilo 011 dvoumno, kajne? 324 00:20:19,160 --> 00:20:22,730 [Neslišno] >> Dobro vprašanje. Dvoumnost. 325 00:20:22,730 --> 00:20:25,940 Naj povzamem, s sklicevanjem na to sliko tukaj. 326 00:20:25,940 --> 00:20:29,650 Ker znaki pa so stiskanje, predstavništva, 327 00:20:29,650 --> 00:20:32,850 po definiciji tega algoritma vedno ostanejo listi, 328 00:20:32,850 --> 00:20:41,870 nikoli ne boste pomotoma uporabite isti vzorec bitov za predpono več pisem. 329 00:20:41,870 --> 00:20:46,740 Torej, z drugimi besedami, ste zaskrbljeni, da se sliši kot, na dvoumnosti, ki izhajajo 330 00:20:46,740 --> 00:20:51,580 po kateri se lahko 001 kot začetek B ali C ali začetek kaj podobnega. 331 00:20:51,580 --> 00:20:56,780 Ampak to ne more biti tako, ker obvestilo, da vse črke abecede smo kodiranje 332 00:20:56,780 --> 00:20:58,290 so na listi. 333 00:20:58,290 --> 00:21:01,910 >> Dvoumnost lahko nastane le, kot v primeru Morse code, 334 00:21:01,910 --> 00:21:06,770 Če, na primer, C je nekje na poti od korena do B. 335 00:21:06,770 --> 00:21:12,290 [Študent] desno. Torej, v tem primeru torej ima 2 liste. Povejte >> ima - Reci to še enkrat. 336 00:21:12,290 --> 00:21:18,760 [Študent] Povejte, da ima 2 liste, F in G, nato pa G - >> redu. Ampak ne morem. 337 00:21:18,760 --> 00:21:23,230 Sama ne bi mogla listi F in G, ker ta pisma F in G 338 00:21:23,230 --> 00:21:27,560 bi tudi sami pušča nekje na levi B ali pravice do E. 339 00:21:27,560 --> 00:21:28,900 Torej po definiciji, morajo biti listi. 340 00:21:28,900 --> 00:21:32,940 Sicer pa imaš popolnoma prav, jaz pa ne reši problema, ki se sooča Morsejeva abeceda. 341 00:21:32,940 --> 00:21:38,150 Dobro vprašanje. Druga vprašanja? V redu. 342 00:21:38,150 --> 00:21:42,050 Ta pojem bitov, se je izkazalo, da smo imeli moč ves čas, da smo dejansko ne uporablja 343 00:21:42,050 --> 00:21:44,200 ko je šlo za manipulacijo te 0s in 1s. 344 00:21:44,200 --> 00:21:46,600 Vprašali smo o tem na enem od prvih problematičnih skupin: 345 00:21:46,600 --> 00:21:52,340 in sicer, kako si šel o pretvorbi velikih na male črke ali obratno? 346 00:21:52,340 --> 00:21:55,460 Ali, bolj konkretno, eden od teh prvih psets prosil 347 00:21:55,460 --> 00:22:01,090 koliko bitov si dejansko morali obrniti, da bi se spremenili v male črke a ali obratno? 348 00:22:01,090 --> 00:22:05,580 Tukaj je kratek spomin, kaj 65 in 97 izgledal v binarno. 349 00:22:05,580 --> 00:22:08,060 In čeprav je to vprašanje nekako zbledela v spominu, 350 00:22:08,060 --> 00:22:11,290 lahko ponovno ogledate tukaj, da koliko bitov je treba zrcaljeno 351 00:22:11,290 --> 00:22:15,810 sprememb kapitala v male? Samo eno. 352 00:22:15,810 --> 00:22:19,650 >> So le razlikujejo po eni lokaciji, tretji bit na levi. 353 00:22:19,650 --> 00:22:24,240 Ker je 010, nekaj je 011. 354 00:22:24,240 --> 00:22:26,250 Tako nekako se moramo le lahko, da flip bit, 355 00:22:26,250 --> 00:22:29,410 in potem bomo lahko izkoristili ali male črke. 356 00:22:29,410 --> 00:22:32,720 Naredili smo to v preteklosti dejansko uporabljate, če pogoji 357 00:22:32,720 --> 00:22:35,930 in preverjanje, če je črka med kapitalom in kapitalsko Z, 358 00:22:35,930 --> 00:22:41,480 potem rezultati podobni - + 26 ali kaj podobnega. 359 00:22:41,480 --> 00:22:46,130 Verjetno si naredil aritmetično spremembo črk abecede. 360 00:22:46,130 --> 00:22:49,270 Kaj pa, če bi lahko samo flip, da je en košček? 361 00:22:49,270 --> 00:22:59,080 Kako bi se lotili pri čemer vrednost enega bajta bitov, tako kot 8 bitov 01000001 01100001 in? 362 00:22:59,080 --> 00:23:03,170 Če ste imeli te vzorce bitov, kako bomo šli o spreminjanju le ena od njih? 363 00:23:03,170 --> 00:23:07,610 Kaj pa, če bomo predstavili v rumeni barvi, sem ta drugi vzorec bitov? 364 00:23:07,610 --> 00:23:13,420 Če naredim celotno rumene niz 0S razen enega bita, ki ga želim spremeniti 365 00:23:13,420 --> 00:23:17,900 in potem bom predstavil novega najemnika, znano kot upravljavec bitni - 366 00:23:17,900 --> 00:23:21,210 bitni v smislu, da deluje na posameznih bitov, 367 00:23:21,210 --> 00:23:25,360 ne na celotno bajt ali štiri bajte, vse na enkrat. 368 00:23:25,360 --> 00:23:31,170 To je navpična vrstica v rumeni predlaga, da kaj pa če vzamemo zastopanosti kapitala 369 00:23:31,170 --> 00:23:37,060 in bitni ali pa z rumeno zaporedje bitov? 370 00:23:37,060 --> 00:23:41,300 Z drugimi besedami, mislim nazaj na našo razpravo o logičnih izrazov v Scratch, nato pa v C. 371 00:23:41,300 --> 00:23:47,520 >> Narediti logičnim ali pomeni, da bi bilo res, ali je prva stvar je, da bi bilo res 372 00:23:47,520 --> 00:23:50,700 ali druga stvar je, da bi bilo res, ali imata da bi bilo res, 373 00:23:50,700 --> 00:23:53,270 in potem kar sama proizvodnja je res. 374 00:23:53,270 --> 00:24:00,230 V tem primeru je tu, kaj dobimo, če vzamemo 0 "ali" ed z 0? Lažni ali napačna? 375 00:24:00,230 --> 00:24:04,280 To je še vedno napačen, tako malih še vedno v skladu s pričakovanji. 376 00:24:04,280 --> 00:24:07,540 Kaj če bi namesto naredimo 1 ali 0? 377 00:24:07,540 --> 00:24:12,640 To je zdaj še 1, ampak obvestilo, kaj se bo zgodilo. 378 00:24:12,640 --> 00:24:18,630 Če začnemo s kapitalom A in bomo še naprej "ali" njegove posamezne koščke, kot smo tukaj, 379 00:24:18,630 --> 00:24:25,180 0 ali 1 rumena nam daje vse, kar sem? To nam daje 1. 380 00:24:25,180 --> 00:24:35,120 Dejstvo je, recimo, da nismo vedeli, kaj velikimi različica malo dejansko bil. 381 00:24:35,120 --> 00:24:38,270 Pojdimo to storiti. Naj premakniti nazaj sem. 382 00:24:38,270 --> 00:24:42,340 Naredimo to še enkrat. 0 ali 0 0 mi daje. 383 00:24:42,340 --> 00:24:45,020 1 ali 0 mi daje 1. 384 00:24:45,020 --> 00:24:48,020 0 ali 1 mi daje 1. 385 00:24:48,020 --> 00:24:52,880 0 ali 0 0 mi daje. Naslednji 1 0, naslednji 1 0, je naslednjič 0. 386 00:24:52,880 --> 00:24:55,660 1 ali 0 mi daje 1. 387 00:24:55,660 --> 00:24:59,140 In tudi če nismo vedeli vnaprej, kaj male bila 388 00:24:59,140 --> 00:25:04,770 preprosto "ali" številke s tega vzorca bitov, da smo tukaj predstavljenih v rumeni barvi, 389 00:25:04,770 --> 00:25:09,400 lahko male kapitalski z listanjem, da je malo. 390 00:25:09,400 --> 00:25:11,580 Uporabili smo ta izraz tedni: lahkota malo. 391 00:25:11,580 --> 00:25:13,710 Kako ste dejansko naredil načrtno? 392 00:25:13,710 --> 00:25:16,390 Uporabite tisto, kar je splošno imenujemo masko, zaporedje bitov, 393 00:25:16,390 --> 00:25:19,980 da v tem primeru prav tako se zgodi, da izgledajo kot to številko tukaj, 394 00:25:19,980 --> 00:25:22,980 in potem "ali" da skupaj s to novo C operaterja, 395 00:25:22,980 --> 00:25:29,940 ne | |, lahko uporabite eno | in bi dejansko dobil ta odgovor sem zakaj? 396 00:25:29,940 --> 00:25:35,120 To je kraj, 1s, 2s mesto, 4S, 8s, 16s, 32s. 397 00:25:35,120 --> 00:25:42,280 Tako se izkaže, da če ste vzeli črko in bitni ali pa celo z 32, 398 00:25:42,280 --> 00:25:47,520 saj je celo 32, če gledate na to kot bitov, izgleda tako, 399 00:25:47,520 --> 00:25:50,860 to pomeni, da lahko flip bit, da si dejansko želite. 400 00:25:50,860 --> 00:25:52,630 In prav - pa bomo pogled na kodo čez nekaj trenutkov - 401 00:25:52,630 --> 00:25:54,210 Recimo, da želimo iti v drugo smer. 402 00:25:54,210 --> 00:25:58,210 >> Kako greste z malimi črkami od A do A kapitala? Kar malo je treba spremeniti? 403 00:25:58,210 --> 00:25:59,820 To je ista. 404 00:25:59,820 --> 00:26:03,970 Želimo spremeniti, da se 3. malo od 1 do 0. 405 00:26:03,970 --> 00:26:06,310 In kako bi lahko šel o tem? 406 00:26:06,310 --> 00:26:10,130 Kako izklopiti malo? S kakšnim vzorec bitov lahko zavijemo malo? 407 00:26:11,580 --> 00:26:14,070 Kaj, če bi nekako obrnemo masko? 408 00:26:14,070 --> 00:26:17,350 Ker pred tem, smo naredili celo rumeno masko 0s 409 00:26:17,350 --> 00:26:19,930 razen enega bita smo želeli vklopiti, 410 00:26:19,930 --> 00:26:25,580 Kaj pa če tokrat naredimo celotno masko 1s razen za malo, da želimo, da izklopite 411 00:26:25,580 --> 00:26:28,330 nato pa operator, kaj? 412 00:26:28,330 --> 00:26:30,560 Kaj pa, če mi "in" stvari? Oglejmo si. 413 00:26:30,560 --> 00:26:34,880 Če bomo zdaj flip na to, recimo, da sem spet ustvarili masko, ki je vse 1s 414 00:26:34,880 --> 00:26:37,650 razen za en bit, da sem želite izklopiti 415 00:26:37,650 --> 00:26:43,860 in potem namesto "ali" bele številke do vrha z rumenimi številkami tukaj, 416 00:26:43,860 --> 00:26:46,940 Kaj pa če namesto "in" oni skupaj? Imenuje bitni in. 417 00:26:46,940 --> 00:26:49,450 Logično je, da je to ista stvar kot logičnim in. 418 00:26:49,450 --> 00:26:55,160 To mi daje 0 & 1 je 0. Torej, napačne in res je napačen. 419 00:26:55,160 --> 00:26:58,160 Res je, in res je res. 420 00:26:58,160 --> 00:27:04,020 In tu je magija: pravimi in lažnimi, je zdaj napačen, zato smo izklopili ta del. 421 00:27:04,020 --> 00:27:06,560 In zdaj ostali del zgodbe je nekoliko preprosta. 422 00:27:06,560 --> 00:27:11,970 Ker preostali del maske je 1s, ni važno, kaj so številke v beli barvi. 423 00:27:11,970 --> 00:27:15,580 Ko "in" nekaj, s drži, ne boš šel, da spremeni svojo vrednost. 424 00:27:15,580 --> 00:27:20,200 Če je to res, bo to še vedno velja. Če je bila napačna, bo ostala lažna. 425 00:27:20,200 --> 00:27:23,190 >> Vendar pa se zgodi čarovnija, ko ste vzeli nekaj, kar je res 426 00:27:23,190 --> 00:27:25,430 in potem "in", je z napačne. 427 00:27:25,430 --> 00:27:30,030 To ima za posledico, da izklopite bit. 428 00:27:30,030 --> 00:27:31,980 Tako malo skrivnosten tam. 429 00:27:31,980 --> 00:27:35,390 Poglejmo dejansko pogled na nekatere oznake, ki bi dejansko videti še bolj skrivnosten, 430 00:27:35,390 --> 00:27:38,220 vendar pa si lahko ogledate tukaj na tolower. 431 00:27:38,220 --> 00:27:45,880 Če gledam tolower, ki gre od kapitala v male črke, 432 00:27:45,880 --> 00:27:47,730 Poglejmo, kako bi lahko izvajanje tega programa. 433 00:27:47,730 --> 00:27:51,280 Tukaj je glavni, in to ne jemljete ukazni vrstici nekaj argumentov. 434 00:27:51,280 --> 00:27:55,980 Jaz razglasitvi znakov c za pisma, ki si bo tip noter 435 00:27:55,980 --> 00:28:00,690 I potem uporabite znano storiti, medtem ko zanke, da samo poskrbite, da si definitivno mi daje kapital 436 00:28:00,690 --> 00:28:05,010 ali B ali C. .. Z, tako da mi dajo nekaj med in Z. 437 00:28:05,010 --> 00:28:08,580 In zdaj, kaj počnem tukaj? 438 00:28:08,580 --> 00:28:14,870 Jaz sem "ali" ing to z 0x20, ampak to je dejansko isto kot - 439 00:28:14,870 --> 00:28:19,500 in se vrnemo na to v trenutku - 32. 440 00:28:19,500 --> 00:28:24,830 Torej, še enkrat, 32 je ta vzorec bitov tukaj. Zakaj to vemo? 441 00:28:24,830 --> 00:28:26,320 Samo pomislite nazaj v tednu 0. 442 00:28:26,320 --> 00:28:31,010 To je kraj, 1s, 2s mesto, 4s, 8s, 16s, 32s mesto. 443 00:28:31,010 --> 00:28:33,470 Torej, ta rumena število zgodi, da je 32. 444 00:28:33,470 --> 00:28:40,570 Lahko pa se tako pismo char tukaj bitni "ali" To s dobesedno številko 32, 445 00:28:40,570 --> 00:28:45,250 in kaj dobim nazaj? Napisane z malimi različica, ki zna. 446 00:28:45,250 --> 00:28:48,830 Trenutek nazaj, čeprav sem izrazil to v drugačnem zapisu osnove. 447 00:28:48,830 --> 00:28:51,370 Kaj je to pomenilo? >> [Študent] Šestnajstiški. 448 00:28:51,370 --> 00:28:53,050 [Malan] To se zgodi, da predstavlja šestnajstiški. 449 00:28:53,050 --> 00:28:55,170 Nismo se pogovarjali o šestnajstiški vse to veliko, 450 00:28:55,170 --> 00:28:57,330 vendar je dejansko primeren v primerih, kot je ta. 451 00:28:57,330 --> 00:29:01,730 >> Čeprav izgleda bolj zapletena in čeprav izgleda 20 in ne 32, 452 00:29:01,730 --> 00:29:06,240 Izkazalo se je, da je pravzaprav zelo šestnajstiški zapis v bližini 453 00:29:06,240 --> 00:29:10,810 ker v šestnajstiško vsako številko po 0x - in to ne pomeni nič; 454 00:29:10,810 --> 00:29:13,960 To je samo človek konvencije, ki pravi, prihaja šestnajstiško število - 455 00:29:13,960 --> 00:29:18,590 vsako od teh številk, 2, nato pa 0, lahko sami zastopani 456 00:29:18,590 --> 00:29:20,800 z natanko 4 bitov. 457 00:29:20,800 --> 00:29:27,840 Torej, če bomo to storili, naj odpre urejevalnik besedila, tukaj - čudno autocomplete - 458 00:29:27,840 --> 00:29:35,940 če naredimo malo urejevalnik besedila tukaj, število 0x20 pomeni, tu je 4-bitno, tukaj je še 4 bitov. 459 00:29:35,940 --> 00:29:38,050 Naredimo desnega 4 bite prvi. 460 00:29:38,050 --> 00:29:44,690 0, kadar je zastopana s 4 bitov je kaj? Super enostavno. Samo vse 0s. 461 00:29:44,690 --> 00:29:46,780 Tako kot 4 bitov 0s. 462 00:29:46,780 --> 00:29:53,510 Kako si predstavlja 2? To je bilo nekaj časa, odkar smo to naredili, ampak to je 0100. 463 00:29:53,510 --> 00:29:57,310 Torej, to je kraj, 1s, 2s je to mesto, potem pa ni važno, kaj drugi kraji so. 464 00:29:57,310 --> 00:30:00,610 Z drugimi besedami, v šestnajstiškem bi lahko rekli 0x20, 465 00:30:00,610 --> 00:30:04,340 če pa potem razmišljati o tem, kaj je 2 in kako se predstavlja v binarno, 466 00:30:04,340 --> 00:30:07,130 kaj je 0 in kako je zastopana v binarno, 467 00:30:07,130 --> 00:30:10,440 odgovori na ta vprašanja so to in to, oz. 468 00:30:10,440 --> 00:30:14,380 Torej 0x20 zgodi, da predstavlja ta vzorec 8 bitov, 469 00:30:14,380 --> 00:30:16,880 ki je ravno maska, ki smo želeli. 470 00:30:16,880 --> 00:30:20,140 Torej, to je za zdaj le intelektualna vaja, 471 00:30:20,140 --> 00:30:24,520 ampak realnost je v kodi, da je običajno bolj pogosto, da napišete konstante, kot je ta 472 00:30:24,520 --> 00:30:28,360 v šestnajstiškem ker potem programer lahko relativno enostavno, 473 00:30:28,360 --> 00:30:32,560 tudi če to zahteva nekaj papirja in svinčnik, ugotoviti, kaj je vzorec bitov je 474 00:30:32,560 --> 00:30:35,960 saj ne moreš kar predstavljajo 0s in 1s običajno v kodi. 475 00:30:35,960 --> 00:30:38,540 Ne moreš iti 00.010 in tako naprej. 476 00:30:38,540 --> 00:30:42,380 >> Moraš izbrati decimalke ali šestnajstiški ali oktal ali drugi simboli. 477 00:30:42,380 --> 00:30:47,540 Večina ljudi se nagibajo k izbrati šestnajstiški preprosto tako, da vsaka številka predstavlja 4 bitov 478 00:30:47,540 --> 00:30:49,320 in lahko to storite hitro matematike. 479 00:30:49,320 --> 00:30:54,990 In jaz bom mahal z roko v toupper, kar je skoraj enako, da izgleda skoraj enako. 480 00:30:54,990 --> 00:31:01,900 Toupper zgodi, da uporaba ne na operaterja ali pa namesto tega tipa in df. 481 00:31:01,900 --> 00:31:09,300 Kaj df predstavlja? df? Kdorkoli? >> [Študent] 255. 482 00:31:09,300 --> 00:31:12,780 255? Ni 255. To bi bilo naslednje. 483 00:31:12,780 --> 00:31:15,210 Bomo zapustiti tole je malo vaje. 484 00:31:15,210 --> 00:31:23,460 Ampak, če greš od 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 in kaj potem pride za 9? 485 00:31:23,460 --> 00:31:26,510 Mi smo nekako out decimalnih mest, vendar v šestnajstiškem kar pride po 9? 486 00:31:26,510 --> 00:31:29,510 [Študent]. >> Torej, b, c, d. 487 00:31:29,510 --> 00:31:33,470 Lahko ugotovimo, od tam kaj vzorec bitov d dejansko predstavlja. 488 00:31:33,470 --> 00:31:38,850 In če ne bomo v matematiki, bomo videli, da je maska ​​lahko na koncu dobili nazaj enaka tem. 489 00:31:38,850 --> 00:31:45,580 To je f, vse 1s, in to je d. Torej df pomeni, da masko. V redu. 490 00:31:45,580 --> 00:31:50,980 In nenazadnje, ne da stvari dobro super, super tehnično, 491 00:31:50,980 --> 00:31:53,840 ampak, da smo želeli napisati program, ki počne to. 492 00:31:53,840 --> 00:31:58,960 Naj gredo naprej in da binarno, ki je program v datoteko z imenom binary.c. 493 00:31:58,960 --> 00:32:02,050 In sedaj mi deluje binarno in mi ni negativno celo število. 494 00:32:02,050 --> 00:32:03,960 Začnimo enostavno in vnesite 0. 495 00:32:03,960 --> 00:32:09,010 To je zdaj program, ki izpiše celo število v svojem binarni predstavitvi. 496 00:32:09,010 --> 00:32:13,470 Torej, če sem to igro znova in vnesite v samo 1, bi moral dobiti 32-bitni prikaz 1. 497 00:32:13,470 --> 00:32:15,490 Če sem to spet z 2, bi jaz. 498 00:32:15,490 --> 00:32:19,310 Če naredim 7 naj dobim nekaj 1s konec in tako naprej. 499 00:32:19,310 --> 00:32:22,740 Izkazalo se je, da sem omenil zato, ker se nanašajo na poslovanje bitni 500 00:32:22,740 --> 00:32:25,490 lahko dejansko narediti eno drugo stvar, kot dobro. 501 00:32:25,490 --> 00:32:29,130 Ustvarite lahko te maske dinamično. 502 00:32:29,130 --> 00:32:32,800 Oglejte si ta primer, ki vključuje enega končnega bitni operacij. 503 00:32:32,800 --> 00:32:35,490 Tukaj je prvi del kode, poziv uporabniku za nekaj, 504 00:32:35,490 --> 00:32:38,130 in vztraja, da se mi ne negativno celo število. 505 00:32:38,130 --> 00:32:39,780 Torej, to je neke stare stvari v šoli. 506 00:32:39,780 --> 00:32:41,980 Ampak tukaj je nekaj, kar je zanimivo. 507 00:32:41,980 --> 00:32:44,910 >> Kako naj grem o tiskanju število v binarno? 508 00:32:44,910 --> 00:32:48,970 Ponovil sem prvič od česa, kaj? 509 00:32:48,970 --> 00:32:52,270 Kakšna je velikost notr Značilno je, vsaj v aparatu? >> [Študent] 4. 510 00:32:52,270 --> 00:32:57,130 To je 4. Torej, 4 * 8 32 - 1 je 31. 511 00:32:57,130 --> 00:33:02,590 Torej, če sem začel šteti od 31, ki predstavlja, se je izkazalo, 512 00:33:02,590 --> 00:33:07,630 Samo konceptualno, 31.-bitne ali najvišji Da malo, kar je ta človek tukaj, 513 00:33:07,630 --> 00:33:09,650 ker to se bo bit 0. 514 00:33:09,650 --> 00:33:12,850 Torej, to je bit 01 bit ... 31. 515 00:33:12,850 --> 00:33:14,950 Torej, kaj je ta koda počne? 516 00:33:14,950 --> 00:33:20,140 Obvestilo ta zanka, čeprav izgleda skrivnosten, je samo ponavljanjem od 31 do 0. To je to. 517 00:33:20,140 --> 00:33:24,530 Torej mora biti zanimiv del sedaj v teh 5 vrstic tukaj. 518 00:33:24,530 --> 00:33:28,110 Obvestilo, da je v tej vrstici sem razglasitvi spremenljivko z imenom masko 519 00:33:28,110 --> 00:33:30,790 da je v skladu z našo zgodbo o teh rumenih številk. 520 00:33:30,790 --> 00:33:32,200 In potem, kaj je to delaš? 521 00:33:32,200 --> 00:33:35,720 To je še en bitni subjekt, ki smo jih nismo videli, verjetno. 522 00:33:35,720 --> 00:33:38,300 To je premik levo operaterja. 523 00:33:38,300 --> 00:33:40,060 Ta operater to naredi. 524 00:33:40,060 --> 00:33:44,920 Tu je številka 1, in če ne bom zapustil premik, premik v levo, 525 00:33:44,920 --> 00:33:49,260 Kaj menite, da je učinek tem v tem posameznem 1? 526 00:33:49,260 --> 00:33:51,290 Dobesedno se premikajo več. 527 00:33:51,290 --> 00:33:57,540 Torej, če je število 1 je tisto, kar imate na levi strani in začnete z inicializacijo i do 31, 528 00:33:57,540 --> 00:34:03,490 Kaj je to storil? To se dogaja, da se to številko 1 in se osredotočiti na to 31 mest tukaj. 529 00:34:03,490 --> 00:34:06,210 In zato, ker je očitno ni drugih mest za njo, 530 00:34:06,210 --> 00:34:10,350 ki bo privzeto nadomesti z 0s. 531 00:34:10,350 --> 00:34:15,120 Torej boste začeli s številko 1, kar seveda izgleda takole - 532 00:34:15,120 --> 00:34:18,659 in mi ga pripravijo tukaj v centru. 533 00:34:18,659 --> 00:34:22,139 In potem, ko se premakne stvari na levo, ta človek v bistvu gre v to smer. 534 00:34:22,139 --> 00:34:24,659 Toda takoj, ko je to storil, dobi 0 vpisati 535 00:34:24,659 --> 00:34:28,360 Če premik ga drugič, gre v to smer in še 0 napolni noter 536 00:34:28,360 --> 00:34:31,000 >> Si ga spet premika in potem se še 0 vpisati 537 00:34:31,000 --> 00:34:37,900 Torej, če vam to stvar 1 << i 31 mest, boste na koncu dobili masko 538 00:34:37,900 --> 00:34:42,550 da je 32 znakov, skrajno levo od katerih je 1, 539 00:34:42,550 --> 00:34:45,199 vsi preostali, ki so 0. 540 00:34:45,199 --> 00:34:50,880 In izkazalo se je, kot prahi, prenos številke na levi, kot je ta 541 00:34:50,880 --> 00:34:53,530 Prav tako po naključju, in včasih priročno, 542 00:34:53,530 --> 00:34:57,520 učinkuje tem, kaj to številko? >> [Študent] je debelejše. 543 00:34:57,520 --> 00:35:00,980 Podvojitev ga, ker vsak od stebrov - 1s mesto, 2s mesto, 4s mesto, 544 00:35:00,980 --> 00:35:05,030 8s mesto, 16s mesto - Povsod podvojitev kot greš na levi strani. 545 00:35:05,030 --> 00:35:09,500 Oziroma, ko prestavite 1s boš končal podvojitev vrednosti števila. 546 00:35:09,500 --> 00:35:12,070 Lahko na koncu delaš zanimive preobrazbe mest 547 00:35:12,070 --> 00:35:15,640 S preusmeritvijo vse na ta način s pooblastili 2. 548 00:35:15,640 --> 00:35:17,150 Torej, kako to deluje? 549 00:35:17,150 --> 00:35:22,580 To potem mi daje masko, ki je vse 0s, razen za 1 v točno mesto sem jo želite, 550 00:35:22,580 --> 00:35:27,920 in potem je to izraz, ki je bil ukraden iz toupper.c, 551 00:35:27,920 --> 00:35:31,770 je preprosto rekel da je število n, ki si jih vnesli v, 552 00:35:31,770 --> 00:35:34,730 "In" se s tem masko, kaj boš dobil? 553 00:35:34,730 --> 00:35:39,200 Boš dobil 1, če obstaja 1 v tej prikriti lokaciji, 554 00:35:39,200 --> 00:35:41,570 ali boš dobil 0, če ni. 555 00:35:41,570 --> 00:35:44,370 In tako vse to program pa je dejansko ima zanko, 556 00:35:44,370 --> 00:35:48,340 in ustvarja masko z 1 tukaj, potem pa 1 tukaj, potem pa sem 1, 557 00:35:48,340 --> 00:35:52,950 in uporablja to bitni in trik reči, da je 1 bit na vhodu uporabnikov tukaj? 558 00:35:52,950 --> 00:35:59,220 >> Ali obstaja 1 bit na vhodu uporabnikov tukaj? In če je tako, dobesedno tiskanje 1, sicer 0 natisniti. 559 00:35:59,220 --> 00:36:03,780 Delamo to z ints samo zato, ker je to, zakaj delamo 32 bitov namesto 8, 560 00:36:03,780 --> 00:36:06,900 ampak kaj smo potem uvedli to bitni in to bitni ALI 561 00:36:06,900 --> 00:36:10,450 in ta levi premik operater, ki pogosto niso strašno pomoč, 562 00:36:10,450 --> 00:36:12,230 vendar se je izkazalo, so lahko. 563 00:36:12,230 --> 00:36:16,560 V bistvu, če ste bili, da so nekaj podobnega paleto Booleans 564 00:36:16,560 --> 00:36:21,260 Samo, da predstavlja resničen ali neresničen, da ste želeli slediti ali ne 565 00:36:21,260 --> 00:36:24,630 soba polna 300 študentov je prisotna, 566 00:36:24,630 --> 00:36:29,420 bi lahko razglasi niz velikosti 300 tipa int, tako da boste dobili 300 bools, 567 00:36:29,420 --> 00:36:33,090 in lahko nastavite na vsaki pravi, če je nekdo tu in lažno drugače. 568 00:36:33,090 --> 00:36:37,550 Zakaj je to predstavništvo v tej strukturi podatkov neučinkovita? 569 00:36:39,370 --> 00:36:44,800 Kaj je slabo načrtovanje te podatkovne strukture, polja od 300 bools? 570 00:36:46,190 --> 00:36:49,600 Kaj je bool, v resnici, pod pokrovom? 571 00:36:49,600 --> 00:36:52,310 Tudi to je nekaj, kar ne bi bilo znano. 572 00:36:52,310 --> 00:36:53,720 Izkazalo se je, da ni int. 573 00:36:53,720 --> 00:36:56,620 Ne pozabite, smo nekako ustvarjena, da se z cs50.h datoteke 574 00:36:56,620 --> 00:36:58,630 ki sam po sebi vsebuje standard int. 575 00:36:58,630 --> 00:37:00,930 C je malo neumno, čeprav, ko gre za int. 576 00:37:00,930 --> 00:37:04,880 Uporablja 8 bitov za zastopanje vsak bool, ki je povsem potratno 577 00:37:04,880 --> 00:37:09,040 saj je očitno, koliko bitov rabiš za zastopanje int? Samo 1. 578 00:37:09,040 --> 00:37:13,190 Tako se izkaže, da če imate sedaj možnost z upravljavci bitni 579 00:37:13,190 --> 00:37:17,760 vplivati ​​posamezne bite tudi v char, niti v enem samem bajtu, 580 00:37:17,760 --> 00:37:21,380 Izkazalo se lahko zmanjša količino pomnilnika, potrebnega za zastopanje nekaj neumnega 581 00:37:21,380 --> 00:37:25,490 tako, da je udeležba styled strukture podatkov s faktorjem 8.. 582 00:37:25,490 --> 00:37:29,820 Namesto z uporabo 8 bitov za zastopanje resničen ali neresničen, lahko dobesedno uporabite enega 583 00:37:29,820 --> 00:37:34,500 z uporabo enega zloga za vsakih osem učencev v razredu 584 00:37:34,500 --> 00:37:41,990 in preklapljanje 0-1 posameznih bitov z uporabo te vrste na nizki ravni trikov. 585 00:37:43,850 --> 00:37:49,460 To je res odpravila do energije. Ali obstajajo vprašanja o bitni operacij? 586 00:37:49,460 --> 00:37:52,710 >> Ja. >> [Študent] Ali obstaja izključna ali upravljavec? 587 00:37:52,710 --> 00:37:56,440 Da. Tu je izključna ali subjekt, ki izgleda tako, ^, korenček simbol, 588 00:37:56,440 --> 00:38:02,070 kar pomeni, da samo prvo stvar ali druga stvar je lahko 1 za izhod za 1. 589 00:38:02,070 --> 00:38:07,750 Obstaja tudi ni ~, kar bo omogočilo, da obrniti 0 v 1 ali obratno, kot dobro. 590 00:38:07,750 --> 00:38:11,600 In tam je tudi pravica premik operater >>, ki je nasprotno od tistega, ki smo ga videli. 591 00:38:11,600 --> 00:38:13,850 V redu. Vzemimo stvari zdaj na višjo raven. 592 00:38:13,850 --> 00:38:16,770 Začeli smo s pogovorom o besedilu in ga nato stisnili 593 00:38:16,770 --> 00:38:19,650 in predstavlja besedilo s manjšem številu bitov; 594 00:38:19,650 --> 00:38:22,890 smo se pogovarjali malo o tem, kako lahko zdaj začnete manipulira stvari na ravni bitni. 595 00:38:22,890 --> 00:38:26,640 Pojdimo zdaj povečavo nazaj 10.000 metrov do zastopanja 596 00:38:26,640 --> 00:38:29,250 za bolj zapletene stvari, kot so grafike. 597 00:38:29,250 --> 00:38:32,950 Tukaj imamo pod zastavo Nemčije, tukaj imamo enega Franciji. 598 00:38:32,950 --> 00:38:36,350 Ti so lahko zastopane v oblikah zapisa datotek, boste morda poznate - GIF, na primer. 599 00:38:36,350 --> 00:38:40,030 Če ste že kdaj videli sliko na spletu, ki se konča. GIF, 600 00:38:40,030 --> 00:38:43,000 To je Graphics Interchange Format. 601 00:38:43,000 --> 00:38:47,530 Ti dve zastavi tukaj nekako mogoča stiskanje 602 00:38:47,530 --> 00:38:52,050 Za kaj morda očitnega razloga? >> [Neslišno študentski odziv] 603 00:38:52,050 --> 00:38:53,440 Obstaja veliko ponavljanja, kajne? 604 00:38:53,440 --> 00:38:57,270 Za pošiljanje zastavo Nemčije, pomislite na to kot slika na zaslonu 605 00:38:57,270 --> 00:38:59,030 nazaj v Scratch dni. 606 00:38:59,030 --> 00:39:02,380 Morda se spomni, da obstaja posameznih točk ali pik, ki sestavljajo sliko. 607 00:39:02,380 --> 00:39:06,650 >> Tam je celotna vrsta črnih pik in drugi cele vrste črnih pik. 608 00:39:06,650 --> 00:39:10,110 Obstaja kup vrstic črnih pik, da smo lahko videli, če bomo res povečani, 609 00:39:10,110 --> 00:39:13,370 zelo všeč, ko smo povečujete na obrazu oropal v Photoshop. 610 00:39:13,370 --> 00:39:15,500 Takoj ko smo dobili globlje in globlje in globlje v sliko, 611 00:39:15,500 --> 00:39:19,990 ste začeli videnje pixelation, vse kvadratov, ki sestavljajo njegovo pozornost v tej zadevi. 612 00:39:19,990 --> 00:39:24,130 Enako se ukvarjajo tukaj. Če bomo povečani zelo malo, bi videli posamezne pike. 613 00:39:24,130 --> 00:39:27,110 No, to je neke vrste odpadkov bitov. 614 00:39:27,110 --> 00:39:32,120 Če tretjino zastave je črn in tretjino zastave je rumena in tako naprej, 615 00:39:32,120 --> 00:39:34,860 zakaj ne moremo nekako stisniti to zastavo? 616 00:39:34,860 --> 00:39:39,560 In mogoče tudi francosko zastavo stisnjen čeprav vzorec je nekoliko drugačen. 617 00:39:39,560 --> 00:39:44,120 Izkazalo se je datoteka GIF je lossless format kompresije, 618 00:39:44,120 --> 00:39:48,420 kar pomeni, da lahko sliko, kot je nemška zastava tukaj, 619 00:39:48,420 --> 00:39:53,540 lahko mečejo veliko njegovih bitov brez žrtvovanja kakovosti. 620 00:39:53,540 --> 00:39:55,340 To je v nasprotju z nekaj podobnega JPEG, 621 00:39:55,340 --> 00:39:57,050 , s katero je večina od nas verjetno bolje pozna. 622 00:39:57,050 --> 00:39:59,000 Facebook in Flickr fotografije fotografije in podobno 623 00:39:59,000 --> 00:40:02,200 so skoraj vedno shranijo kot JPEG, ko si naložil, da, 624 00:40:02,200 --> 00:40:08,100 ampak JPEG je izgubno - Trošenje format - pri čemer ti mečejo bitov 625 00:40:08,100 --> 00:40:10,430 ampak tudi mečejo kakovosti. 626 00:40:10,430 --> 00:40:13,890 In tako, če obkladek fotografije z Photoshop ali jih naložite na Facebook 627 00:40:13,890 --> 00:40:15,580 ali pri njih na zelo crappy telefon, 628 00:40:15,580 --> 00:40:19,510 Veš, da je slika začne, da bi dobili zelo Umrljan in pixelated, 629 00:40:19,510 --> 00:40:22,290 in da je zato, ker je se stisne računalnika ali telefona 630 00:40:22,290 --> 00:40:24,550 jih dobesedno vrgel proč informacij. 631 00:40:24,550 --> 00:40:28,500 Ampak GIF je neverjetno, v tem, da lahko uporabljajo manjše koščke, kot bi jih lahko privzeto 632 00:40:28,500 --> 00:40:30,750 ne da bi izgubili vse podatke. 633 00:40:30,750 --> 00:40:32,410 >> In to v bistvu počne, kot sledi. 634 00:40:32,410 --> 00:40:38,740 Namesto trgovini v datoteki, kot je na BMP bi RGB trojno za črna, črna, črna, črna, 635 00:40:38,740 --> 00:40:42,570 črna, črna, črna, črna, črna, črna, črna, črna in tako naprej, 636 00:40:42,570 --> 00:40:45,640 namesto tega je format GIF bo rekel, "Black" 637 00:40:45,640 --> 00:40:48,330 in potem: "To ponovite 100-krat," ali nekaj takega. 638 00:40:48,330 --> 00:40:52,280 "Črna, ponovite 100-krat, črna, ponovite 100-krat ..." 639 00:40:52,280 --> 00:40:54,530 "Rumena, ponovite 100-krat." 640 00:40:54,530 --> 00:40:57,200 In tako se spominja, v bistvu skrajno levo pixel 641 00:40:57,200 --> 00:41:02,160 in potem kodira nekako pojem ponavljanje, da je piko znova in znova. 642 00:41:02,160 --> 00:41:06,110 Tako lahko GIF, nato se stisne, ne da bi izgubili vse podatke. 643 00:41:06,110 --> 00:41:09,510 Toda če bi moral ugibati, če je algoritem, ki Gif uporabo, 644 00:41:09,510 --> 00:41:13,180 katera od teh zastav, čeprav so videti enake velikosti, 645 00:41:13,180 --> 00:41:19,620 bo manjša, če se posname na disk kot GIF? >> [Študent] Nemčija. 646 00:41:19,620 --> 00:41:21,660 Nemčija bo manjša? Zakaj? 647 00:41:21,660 --> 00:41:26,620 [Študentskih] Ker si ponovitev veliko, veliko krat vodoravno 648 00:41:26,620 --> 00:41:29,010 in nato ponovite še čas. >> Točno tako. 649 00:41:29,010 --> 00:41:32,020 Ker so ljudje, ki so izumili GIF nekako odločil za samovoljno 650 00:41:32,020 --> 00:41:36,040 da bo ponovitev vzvod vodoravno in ne vstran. 651 00:41:36,040 --> 00:41:40,900 Tam je veliko več ponovitev bočno tukaj v nemški zastavi kot v francosko zastavo. 652 00:41:40,900 --> 00:41:44,430 Torej, če smo dejansko odprli mapo na mojem trdem disku, ki je te GIF, 653 00:41:44,430 --> 00:41:51,920 lahko dejansko videli, da je nemška zastava tu 2 kilobajtov in francoski ena 4 kilobajtov. 654 00:41:51,920 --> 00:41:54,080 To se zgodi, da je naključje, da je ena dvakrat drugi, 655 00:41:54,080 --> 00:41:57,960 ampak to je dejansko res, da je francosko zastavo veliko večji. 656 00:41:57,960 --> 00:42:01,250 >> Čeprav smo tukaj govorimo o grafiki, te iste ideje uporablja 657 00:42:01,250 --> 00:42:05,150 ne stvari, kot so zastave, ampak slike, ki so malo bolj zapletena. 658 00:42:05,150 --> 00:42:08,170 Če ste vzeli sliko jabolka, zagotovo obstaja veliko podvajanja tam, 659 00:42:08,170 --> 00:42:11,040 tako da smo nekako ne pozabite, da je privzeto ozadje modra 660 00:42:11,040 --> 00:42:13,230 in ne, kot desna slika kaže, 661 00:42:13,230 --> 00:42:16,830 zapomniti barvo vsakega posameznega piksla na sliki. 662 00:42:16,830 --> 00:42:21,060 Tako smo lahko vrgel koščke stran pa ne da bi izgubili podatke. 663 00:42:21,060 --> 00:42:23,340 Jabolko še vedno izgleda enako. 664 00:42:23,340 --> 00:42:27,510 V tem primeru je tu, lahko vidite, kaj se zgodi v filmu. 665 00:42:27,510 --> 00:42:31,970 Ti so stari filmski šoli koluti, s katerim v zgornji sliki tam 666 00:42:31,970 --> 00:42:36,900 imate RV vožnji mimo hiše in drevesa. 667 00:42:36,900 --> 00:42:42,130 In kot da vozi mimo van od leve proti desni, kar se seveda ne spreminja? 668 00:42:42,130 --> 00:42:45,320 Hiša se ne grem nikamor, drevo pa ne gre nikamor. 669 00:42:45,320 --> 00:42:47,700 Edina stvar, ki se premika, je van v tej zadevi. 670 00:42:47,700 --> 00:42:51,650 Tako kot ozadje Nespremenjen pove, kaj lahko storite v filmih 671 00:42:51,650 --> 00:42:56,530 Podobno se vržemo proč informacije, ki se ne spreminja v času med okvirji. 672 00:42:56,530 --> 00:42:58,900 To je splošno znano kot stiskanje interframe 673 00:42:58,900 --> 00:43:02,120 pri čemer, če je ta okvir izgleda skoraj identično tej, 674 00:43:02,120 --> 00:43:05,390 naj ne moti shranjevanje na disku koli enake informacije 675 00:43:05,390 --> 00:43:09,250 o teh vmesnih okvirjev, greva samo uporabo ključnih okvirjev vsake toliko časa 676 00:43:09,250 --> 00:43:13,420 ki dejansko shrani te informacije redundantly prav tako malo duševno zdravje preverite. 677 00:43:13,420 --> 00:43:18,620 >> Nasprotno, drugačen pristop k stiskanje video je v tem drugem in spodnji primer tukaj, 678 00:43:18,620 --> 00:43:23,970 kjer namesto trgovine 30 slik, zakaj preprosto ne hranite 15 sličic na sekundo namesto tega? 679 00:43:23,970 --> 00:43:27,070 Namesto filma vrste teče lepo, odlično, 680 00:43:27,070 --> 00:43:30,060 je morda videti, kot da je jecljanje malo, malo stara šola, 681 00:43:30,060 --> 00:43:37,190 vendar bo neto učinek je v uporabi veliko manj bitov, kot bi sicer lahko bili potrebni. 682 00:43:37,190 --> 00:43:39,240 Torej, če ne to potem pusti nas? 683 00:43:39,240 --> 00:43:41,700 To je bilo malo na stran, kje še lahko greš s stiskanjem. 684 00:43:41,700 --> 00:43:45,140 Za več informacij o tem, da razred, kot CS175 tukaj. 685 00:43:45,140 --> 00:43:46,990 Tu je še en primer, v videu. 686 00:43:46,990 --> 00:43:49,190 Če čebela je edina stvar, ki se gibljejo, 687 00:43:49,190 --> 00:43:51,790 lahko res vrgel proč informacije v teh okvirih srednjih 688 00:43:51,790 --> 00:43:55,260 ker cvet in nebo in listi se ne spreminja. 689 00:43:55,260 --> 00:43:57,960 Ampak kaj je zdaj preučiti še zadnjo stvar. 690 00:43:57,960 --> 00:44:03,890 V naslednjih 5 minut pustimo za sabo C vedno v predavanju? Da. Ne v psets, čeprav. 691 00:44:03,890 --> 00:44:10,210 Zadnja zgodba o C, nato pa pridemo do zelo seksi stvari 692 00:44:10,210 --> 00:44:13,870 vključujejo HTML in interneta woo-hoo. V redu. 693 00:44:13,870 --> 00:44:16,050 Pa gremo. To je motivacija. 694 00:44:16,050 --> 00:44:20,020 Izkazalo se je ves ta čas, ko smo bili pisanje programov Vodimo Jek. 695 00:44:20,020 --> 00:44:23,890 In Jek, je dejal, da smo po prvem tednu zelo veliko, meni izvorno kodo 696 00:44:23,890 --> 00:44:25,740 in ga pretvori v objektni kodi. 697 00:44:25,740 --> 00:44:28,540 To traja C in jo pretvori v 0s in 1s. 698 00:44:28,540 --> 00:44:32,150 Sem nekako je lagal za nekaj tednov, saj to ni tako enostavno, kot to. 699 00:44:32,150 --> 00:44:36,750 >> Tam je veliko več dogaja pod pokrovom motorja, ko zaženete program, kot je Jek. 700 00:44:36,750 --> 00:44:39,560 V bistvu, lahko proces priprave programa, res je mogoče povzeti, 701 00:44:39,560 --> 00:44:42,210 kot ste morda spomnite iz video Rob o prevajalniki, 702 00:44:42,210 --> 00:44:47,580 v teh 4 korakih: predobdelava, se sestavljanje, montaža in povezovanje. 703 00:44:47,580 --> 00:44:51,950 Vendar pa smo v razredu in večina ljudi na svetu običajno povzame vse te korake 704 00:44:51,950 --> 00:44:54,410 kot le "zbiranje". 705 00:44:54,410 --> 00:44:58,070 Ampak, če začnemo z izvorno kodo, kot je ta, spomnim je to morda najpreprostejši C program 706 00:44:58,070 --> 00:45:03,530 smo napisal doslej, opozarjajo, da pri zbiranju se konča videti takole. 707 00:45:03,530 --> 00:45:07,310 Ampak tam je pravzaprav vmesni korak, in ti ukrepi so naslednji. 708 00:45:07,310 --> 00:45:10,750 Najprej je tu ta stvar na sam vrh seznama in večina naših programov, 709 00:45:10,750 --> 00:45:13,550 # Vključujejo 710 00:45:13,550 --> 00:45:17,210 Kaj # include ne za nas? 711 00:45:17,210 --> 00:45:24,150 To zal veliko kopij in prilepi vsebino stdio.h v moje datoteke, tako da, zakaj? 712 00:45:24,150 --> 00:45:27,220 Zakaj me briga o vsebini stdio.h? Kaj je tam zanimivega? 713 00:45:27,220 --> 00:45:32,310 Printf izjavo, njen prototip, tako da prevajalnik potem ve, kaj mislim 714 00:45:32,310 --> 00:45:34,900 Ko sem omenil to funkcijo printf. 715 00:45:34,900 --> 00:45:39,390 Torej, korak 1 v pripravi, je pred-obdelavo, pri čemer program, kot Jek 716 00:45:39,390 --> 00:45:43,450 ali nekaj pomočnik program, ki prihaja z Jek bere svojo kodo vrha do dna, 717 00:45:43,450 --> 00:45:47,740 od leve proti desni in kadarkoli vidi # simbol, ki mu sledi ključna beseda, kot vključujejo, 718 00:45:47,740 --> 00:45:53,980 opravlja to operacijo, kopiranje in lepljenje v tem primeru stdio.h v datoteki. 719 00:45:53,980 --> 00:45:55,510 To je korak 1. 720 00:45:55,510 --> 00:45:59,620 Potem imate veliko večji C datoteke zaradi velikega kopiranje, lepljenje novih delovnih mest, ki je pravkar zgodilo. 721 00:45:59,620 --> 00:46:01,710 >> 2. korak: zdaj se pripravi. 722 00:46:01,710 --> 00:46:04,880 Vendar se je izkazalo zbiranje meni izvorno kodo, ki je videti takole 723 00:46:04,880 --> 00:46:08,160 in jo spremeni v nekaj, kar je videti tako, 724 00:46:08,160 --> 00:46:12,560 ki je za tiste, ki poznajo poklical? >> [Študent] skupščine. Skupščina >> jezik. 725 00:46:12,560 --> 00:46:16,700 To je pravzaprav nekaj, če jemljete CS61 boste lahko potopite v bolj podrobno. 726 00:46:16,700 --> 00:46:22,380 To je skoraj tako blizu, kot lahko dobite za pisanje 0s in 1s se 727 00:46:22,380 --> 00:46:25,850 ampak pisanje stvari na tak način, da se še vedno naredi vsaj malo občutka. 728 00:46:25,850 --> 00:46:30,760 To so navodila za stroj, in če se pomaknite navzdol do glavne funkcije tukaj, 729 00:46:30,760 --> 00:46:35,470 opazite, da je ta pritisk navodilo, premaknite pouk, pouk odštevanje, 730 00:46:35,470 --> 00:46:38,550 pokličite pouk, in tako naprej. 731 00:46:38,550 --> 00:46:42,930 Ko slišite, da ima računalnik Intel Inside 732 00:46:42,930 --> 00:46:46,180 imate procesor Intel v vašem Mac ali PC, kaj to pomeni? 733 00:46:46,180 --> 00:46:51,200 Procesor prihaja zgradili podjetij, kot so Intel razumevanje določena navodila. 734 00:46:51,200 --> 00:46:55,770 Nimajo pojma, kaj funkcije, kot so zamenjave ali glavni per se, 735 00:46:55,770 --> 00:47:00,060 ampak oni vedo, kaj zelo nizko stopnjo navodila, kot so seštevanje, odštevanje, potiskanje, 736 00:47:00,060 --> 00:47:02,430 premakniti, klic, in tako naprej so. 737 00:47:02,430 --> 00:47:06,170 Torej, ko se zbere C kodo v zbirnem jeziku, 738 00:47:06,170 --> 00:47:11,820 vaš zelo uporabniku prijazen usmerjena koda pretvori v nekaj, kar je videti tako, 739 00:47:11,820 --> 00:47:21,670 ki dobesedno premika bajtov ali 4 bajte okrog v tako majhnih enot v in iz CPU. 740 00:47:21,670 --> 00:47:26,820 Ampak na koncu, ko Jek je pripravljena prevzeti to predstavitev vašega programa 741 00:47:26,820 --> 00:47:30,940 v 0s in 1s, nato pa korak se imenuje montaža zgodi, 742 00:47:30,940 --> 00:47:33,850 in še enkrat vse se zgodi v hipu, ko teče Jek. 743 00:47:33,850 --> 00:47:39,300 Začeli smo tu, da oddaja datoteko, kot je ta, nato pa jo pretvori v teh 0s in 1s. 744 00:47:39,300 --> 00:47:42,000 In če želite, da se vrnete na neki točki in dejansko videti v akciji, 745 00:47:42,000 --> 00:47:48,220 če grem v hello1.c--to je eden od prvih programov smo pogledal na - 746 00:47:48,220 --> 00:47:53,710 običajno želimo pripraviti to z hello1.c Jek in to bi nam a.out. 747 00:47:53,710 --> 00:47:59,890 Če je nasprotno namesto tega ji dajejo-S zastavo, kar boste dobili, je hello1.s 748 00:47:59,890 --> 00:48:02,750 in boste dejansko videli zbirni jezik. 749 00:48:02,750 --> 00:48:05,750 >> To delam že zelo kratkem programu, če pa greš nazaj za Scramble 750 00:48:05,750 --> 00:48:08,740 ali obnovitev ali kateri koli program, ki ste jih napisal in samo iz radovednosti 751 00:48:08,740 --> 00:48:13,240 želite videti, kaj se dejansko izgleda, je tisto, kar se dejansko vnašajo v CPU, 752 00:48:13,240 --> 00:48:15,700 lahko uporabite, da-S zastavo z Jek. 753 00:48:15,700 --> 00:48:17,770 Ampak potem na koncu, tam je še vedno ena te. 754 00:48:17,770 --> 00:48:21,810 Tu so 0s in 1s, da zastopa moje izvajanje Pozdravljen svet. 755 00:48:21,810 --> 00:48:25,530 Ampak sem nekoga drugega funkcijo v mojem programu. 756 00:48:25,530 --> 00:48:28,710 Torej, čeprav je bil postopek vzamem hello.c, 757 00:48:28,710 --> 00:48:34,280 da dobi zbrane v zbirniku, in potem se je sestavljen v 0s in 1s, 758 00:48:34,280 --> 00:48:37,460 samo 0 in 1s, da so izhodne v tem trenutku 759 00:48:37,460 --> 00:48:40,270 so tisti, ki so posledica mojo kodo. 760 00:48:40,270 --> 00:48:44,400 Toda tisti, ki je napisal printf so sestavili svojo kodo pred 20 leti 761 00:48:44,400 --> 00:48:47,000 in je sedaj nameščen nekje na napravi, 762 00:48:47,000 --> 00:48:51,610 tako da smo nekako morali združiti njegove 0 in 1 sekundo z mojo 0s in 1s, 763 00:48:51,610 --> 00:48:56,160 in to nas pripelje do 4. in zadnji korak v pripravi, znan kot povezovanje. 764 00:48:56,160 --> 00:48:58,680 Torej, na levi strani imamo povsem enako sliko kot pred: 765 00:48:58,680 --> 00:49:02,580 hello.c postane montažo koda postane 0s in 1s. 766 00:49:02,580 --> 00:49:05,960 Ampak spomnim, da sem uporabil standardno I / O knjižnici v moji kodo, 767 00:49:05,960 --> 00:49:10,350 kar pomeni, da nekje na računalniku, obstaja datoteka z imenom stdio.c 768 00:49:10,350 --> 00:49:13,980 ali vsaj zbrati različica, ker je nekdo pred nekaj leti 769 00:49:13,980 --> 00:49:18,530 zbrati stdio.c v zbirniku in potem cel kup 0s in 1s. 770 00:49:18,530 --> 00:49:21,130 To je tisto, kar je znano kot statični ali dinamični knjižnici. 771 00:49:21,130 --> 00:49:23,350 To je nekaj datotek sedi nekje v napravi. 772 00:49:23,350 --> 00:49:28,710 >> Ampak na koncu, moram opraviti svoje 0s in 1s in 0s te osebe in 1s 773 00:49:28,710 --> 00:49:32,760 in nekako povežejo skupaj, dobesedno kombinirate 0s in 1s 774 00:49:32,760 --> 00:49:37,900 v eno samo datoteko z imenom a.out ali hello1 ali karkoli sem poklical moj program 775 00:49:37,900 --> 00:49:43,320 tako da je končni rezultat je vse od 1s in 0s, da sestavljajo moj program. 776 00:49:43,320 --> 00:49:45,660 Torej vsem tem času ta semester, ko ste uporabljali Jek 777 00:49:45,660 --> 00:49:48,750 in še bolj v zadnjem času izvaja bo, da bi prost Jek, 778 00:49:48,750 --> 00:49:53,580 vse te korake se dogajajo nekakšnega takoj, vendar zelo premišljeno. 779 00:49:53,580 --> 00:49:57,830 In tako, če boste še naprej v računalništvu, in sicer CS61, 780 00:49:57,830 --> 00:50:00,850 To je plast, da boste še naprej lupine nazaj dol tam 781 00:50:00,850 --> 00:50:06,980 govorimo o učinkovitosti, varnosti in posledice, kot so te nižje ravni podrobnosti. 782 00:50:06,980 --> 00:50:09,220 Ampak s tem, da smo na odhod C zadaj. 783 00:50:09,220 --> 00:50:11,420 Gremo naprej in vzamemo 5-minutni odmor zdaj, 784 00:50:11,420 --> 00:50:14,190 in ko smo prišli nazaj: Internet. 785 00:50:17,280 --> 00:50:19,170 V redu. Mi smo nazaj. 786 00:50:19,170 --> 00:50:23,590 Zdaj smo začeli naš pogled ne le na HTML, saj, kot boste videli, 787 00:50:23,590 --> 00:50:26,050 HTML sama je pravzaprav zelo preprost 788 00:50:26,050 --> 00:50:29,270 ampak res na spletnem programiranju bolj na splošno, mreženje na splošno 789 00:50:29,270 --> 00:50:31,770 in kako vse te tehnologije srečajo 790 00:50:31,770 --> 00:50:35,400 , ki nam omogočajo, da ustvarite bolj zapletene programe na vrhu interneta 791 00:50:35,400 --> 00:50:38,690 kot doslej smo uspeli v teh črnih in belih oken. 792 00:50:38,690 --> 00:50:42,140 Dejansko je v tem trenutku v polletju, čeprav bomo porabili precej manj časa 793 00:50:42,140 --> 00:50:46,200 na PHP, HTML, CSS, JavaScript, SQL in še več, 794 00:50:46,200 --> 00:50:48,480 večina študentov ne končajo tem končne projekte, ki so spletno 795 00:50:48,480 --> 00:50:51,230 saj, kot boste videli, ozadje imate zdaj v C 796 00:50:51,230 --> 00:50:54,450 je zelo primerno za ta višji ravni jezikih. 797 00:50:54,450 --> 00:50:56,800 >> In ko začneš razmišljati o svoji končni projekt, 798 00:50:56,800 --> 00:50:59,940 ki, podobno kot Set Problem 0, kjer so spodbujali si 799 00:50:59,940 --> 00:51:02,160 storiti skoraj karkoli od vas zanima v Scratch, 800 00:51:02,160 --> 00:51:05,790 Končni projekt je vaša priložnost, da svoje novo pridobljeno znanje in zdrava pamet s C 801 00:51:05,790 --> 00:51:09,850 ali PHP ali JavaScript ali podobno ven za spin 802 00:51:09,850 --> 00:51:12,330 in ustvarite svoj kos programske opreme za svet za prikaz. 803 00:51:12,330 --> 00:51:17,770 In tebi semena z idejami, vedo, da se lahko odpravite tukaj, projects.cs50.net. 804 00:51:17,770 --> 00:51:21,800 Vsako leto smo zbirati ideje iz univerzitetne predavatelje in osebje in študentske skupine na univerzi 805 00:51:21,800 --> 00:51:27,330 samo, da predložijo svoje ideje za zanimive stvari, ki bi jih lahko rešili z uporabo računalnikov, 806 00:51:27,330 --> 00:51:29,860 z uporabo spletnih strani, ki uporabljajo programsko opremo. 807 00:51:29,860 --> 00:51:32,360 Torej, če ste borijo da bi prišli do zamisli o svojem, 808 00:51:32,360 --> 00:51:35,790 Z vsemi sredstvi pomikanje po zamisli je od letos in zadnje. 809 00:51:35,790 --> 00:51:39,990 To je popolnoma v redu za reševanje projekt, ki se je spoprijel prej. 810 00:51:39,990 --> 00:51:44,540 Videli smo številne aplikacije za videnje položaja perila na univerzi, 811 00:51:44,540 --> 00:51:47,000 številne aplikacije za navigacijo meni, jedilnici, 812 00:51:47,000 --> 00:51:49,540 številne aplikacije za navigacijo tečaja katalog in podobno. 813 00:51:49,540 --> 00:51:53,680 In res, v prihodnjem predavanju in v prihodnjih seminarjev, 814 00:51:53,680 --> 00:51:57,750 vam bomo predstavili nekaj javno dostopnih API, tako komercialno dostopna 815 00:51:57,750 --> 00:52:02,520 kakor tudi tukaj na voljo CS50 na univerzi, tako da imate dostop do podatkov 816 00:52:02,520 --> 00:52:04,910 in lahko naredite nekaj zanimivih stvari z njim. 817 00:52:04,910 --> 00:52:09,380 Torej, več o končnih projektov v nekaj dneh, ko smo sprostite specifikacijo, 818 00:52:09,380 --> 00:52:12,990 vendar za zdaj, vem, da boste lahko delali samostojno ali z enim ali dvema prijateljema 819 00:52:12,990 --> 00:52:16,010 na večini kakršen koli projekt, ki vas zanima. 820 00:52:16,010 --> 00:52:18,080 Internet. 821 00:52:18,080 --> 00:52:22,300 Ti pojdi naprej in potegnite prenosni računalnik, greš na facebook.com prvič, 822 00:52:22,300 --> 00:52:27,020 da ni prijavljen v zadnjem času, in pritisnite tipko Enter. Kaj točno se je zgodilo? 823 00:52:27,020 --> 00:52:30,150 >> Ko zadeti nastopiti na vašem računalniku, cel kup koraki 824 00:52:30,150 --> 00:52:32,600 začetek neke vrste čudežno dogaja. 825 00:52:32,600 --> 00:52:35,960 Torej si tukaj na levi, spletni strežnik, kot so Facebook, je tukaj na desni strani, 826 00:52:35,960 --> 00:52:42,500 in nekako boste uporabljali ta jezik, imenovan HTTP Hypertext Transfer Protocol. 827 00:52:42,500 --> 00:52:46,770 HTTP ni programski jezik. To je več od protokola. 828 00:52:46,770 --> 00:52:52,310 To je skupek konvencij, da spletni brskalniki in spletnih strežnikov uporabijo, ko prehajajo. 829 00:52:52,310 --> 00:52:54,360 In kaj to pomeni, je, kot sledi. 830 00:52:54,360 --> 00:52:56,790 Podobno kot v resničnem svetu, imamo te konvencije 831 00:52:56,790 --> 00:53:00,140 če ste dosegli nekaj človeka prvič, če vas ne moti me humoring tukaj 832 00:53:00,140 --> 00:53:03,980 Morda bom prišel do tebe, rekel: "Zdravo, moje ime je David." >> Zdravo, David. Moje ime je Sammy. 833 00:53:03,980 --> 00:53:05,770 "Zdravo, David. Moje ime je Sammy." 834 00:53:05,770 --> 00:53:08,310 Torej, zdaj smo pravkar ukvarjajo s to vrsto neumne ljudi protokola 835 00:53:08,310 --> 00:53:12,200 kjer sem začel protokol je Sammy odgovorila, 836 00:53:12,200 --> 00:53:15,060 smo pretrese roke, in posel je končan. 837 00:53:15,060 --> 00:53:18,260 HTTP je zelo podobno v duhu. 838 00:53:18,260 --> 00:53:23,350 Ko se vaše želje spletnega brskalnika www.facebook.com, 839 00:53:23,350 --> 00:53:27,020 kaj ima vaš brskalnik res delaš širi svojo roko, tako rekoč, 840 00:53:27,020 --> 00:53:29,960 na strežnik in to je da mu je poslala sporočilo. 841 00:53:29,960 --> 00:53:34,220 In to sporočilo je ponavadi nekaj podobnega dobil - kaj želite? - 842 00:53:34,220 --> 00:53:38,740 me domačo stran, ki je običajno označen z eno poševnico na koncu URL-ja. 843 00:53:38,740 --> 00:53:43,790 In samo da veš, kateri jezik govorim, jaz brskalnik bom povedal, 844 00:53:43,790 --> 00:53:46,930 da govorim HTTP različice 1.1, 845 00:53:46,930 --> 00:53:51,980 In tudi za dobro mero, bom povedal, da je gostitelj, ki ga želim domačo stran 846 00:53:51,980 --> 00:53:54,120 je facebook.com. 847 00:53:54,120 --> 00:53:57,730 Značilno je, da spletni brskalnik, nevede vas, ljudi, 848 00:53:57,730 --> 00:54:03,350 to sporočilo pošlje prek interneta, ko preprosto vpišite www.facebook.com, 849 00:54:03,350 --> 00:54:05,370 >> Vnesite, v svoj brskalnik. 850 00:54:05,370 --> 00:54:07,300 In kaj Facebook odzval s? 851 00:54:07,300 --> 00:54:12,540 Odziva se z nekaj podobnega videza Grobni informacij, ampak tudi veliko več. 852 00:54:12,540 --> 00:54:14,310 Naj gredo naprej na domačo stran Facebook je tukaj. 853 00:54:14,310 --> 00:54:17,480 To je zaslon, da je večina od nas verjetno nikoli videli, če boste ostali prijavljeni ves čas, 854 00:54:17,480 --> 00:54:19,830 ampak to je res njihova spletna stran. 855 00:54:19,830 --> 00:54:24,150 Če to storimo v Chrome, opazili, da lahko dvigni te male menije konteksta. 856 00:54:24,150 --> 00:54:26,980 Uporaba Chrome, ali na Mac OS, Windows, Linux ali kaj podobnega, 857 00:54:26,980 --> 00:54:31,840 če Nadzor klik ali levi klik, lahko običajno dvigni meni, da je videti takole, 858 00:54:31,840 --> 00:54:35,870 kjer je nekaj možnosti čakajo, od katerih je ena View Page Source. 859 00:54:35,870 --> 00:54:39,920 Lahko tudi tipično za te stvari, ki jih bo na meniju Pogled in poking okoli. 860 00:54:39,920 --> 00:54:42,750 Na primer, tukaj pod pogled Developer je ista stvar. 861 00:54:42,750 --> 00:54:45,780 Grem, da gredo naprej in si oglejte Stran za ogled vira. 862 00:54:45,780 --> 00:54:50,800 Kaj boste videli, HTML, da je Mark napisal, da predstavlja facebook.com. 863 00:54:50,800 --> 00:54:55,910 To je popolna zmešnjava tukaj, pa bomo videli, da to naredi malo bolj smiselno kmalu. 864 00:54:55,910 --> 00:54:59,840 Vendar pa obstajajo nekateri vzorci tukaj. Naj se pomaknite navzdol, da stvari, kot je ta. 865 00:54:59,840 --> 00:55:05,730 To je težko za ljudi, da se glasi, ampak obvestilo, da je ta vzorec kotne oklepaje 866 00:55:05,730 --> 00:55:10,360 s ključnimi besedami, kot so opcije, ključne besede, kot so vrednosti, ki kotirajo na nekatere strune. 867 00:55:10,360 --> 00:55:15,660 To je, če, ko ste se prijavili za zelo prvič, iz katere je tvoje leto rojstva. 868 00:55:15,660 --> 00:55:19,020 To spustnem rojstva letih je nekako kodiran tukaj 869 00:55:19,020 --> 00:55:23,870 V tem jeziku se imenuje HTML, HyperText Markup Language. 870 00:55:23,870 --> 00:55:27,730 Z drugimi besedami, če vaš brskalnik zahteva spletno stran, 871 00:55:27,730 --> 00:55:30,610 govori to konvencijo, imenovano HTTP. 872 00:55:30,610 --> 00:55:35,170 Toda kaj facebook.com odgovor na to zahtevo z? 873 00:55:35,170 --> 00:55:38,260 >> Odziva se z nekaterimi od teh Grobni sporočil, kot bomo videli v trenutku. 874 00:55:38,260 --> 00:55:43,760 Toda večino svojega odgovora v obliki HTML, HyperText Markup Language. 875 00:55:43,760 --> 00:55:47,170 To je dejansko jezik, v katerem je napisana spletna stran. 876 00:55:47,170 --> 00:55:52,030 In kaj je spletni brskalnik, res pa je, da po prejemu nekaj, kar je videti tako, 877 00:55:52,030 --> 00:55:57,120 prebere od zgoraj navzdol, od leve proti desni, in kadar koli se mu zdi ena od teh kotne oklepaje 878 00:55:57,120 --> 00:56:03,370 sledi ključna beseda, kot je možnost, da se prikaže, da je označevalni jezik za ustrezen način. 879 00:56:03,370 --> 00:56:06,820 V tem primeru bi bilo prikazati spustni meni let. 880 00:56:06,820 --> 00:56:09,240 Ampak spet, to je popolna zmeda gledati. 881 00:56:09,240 --> 00:56:16,630 To ni zato, ker Facebook razvijalci manifest 0 za 5 stila, na primer. 882 00:56:16,630 --> 00:56:20,190 To je zato, ker večino kode, ki jih pišejo, je v resnici napisal lepo, 883 00:56:20,190 --> 00:56:22,450 dobro komentiral, lepo razgibana in podobno, 884 00:56:22,450 --> 00:56:26,080 ampak seveda strojev, računalnikov, brskalniki res ne briga 885 00:56:26,080 --> 00:56:27,890 ali je vaša koda je dobro opremljen. 886 00:56:27,890 --> 00:56:33,100 In v resnici je popolnoma potratno zadeti tipko TAB vse tiste čase 887 00:56:33,100 --> 00:56:37,650 in naj pripomb vse skozi svojo kodo in izbrati res opisna imena spremenljivk 888 00:56:37,650 --> 00:56:42,340 ker če brskalnik ne skrbi, vse ti gre na koncu dneva se zapravlja bajte. 889 00:56:42,340 --> 00:56:46,660 >> Tako se izkaže, kaj je večina spletnih strani storiti, je, čeprav je izvorna koda za facebook.com, 890 00:56:46,660 --> 00:56:49,550 za cs50.net in vseh teh drugih spletnih strani na internetu 891 00:56:49,550 --> 00:56:53,730 so praviloma dobro napisana in dobro komentiral in lepo razgibana in podobno, 892 00:56:53,730 --> 00:56:59,270 Običajno pred spletno dal na internet, je minified koda 893 00:56:59,270 --> 00:57:02,970 pri čemer je HTML in CSS - nekaj drugega, da bomo kmalu videli - 894 00:57:02,970 --> 00:57:05,960 kode JavaScript, da bomo kmalu videli je stisnjen, 895 00:57:05,960 --> 00:57:09,250 pri čemer dolgi imeni spremenljivk postane X in Y in Z, 896 00:57:09,250 --> 00:57:13,900 in vse te presledki, da naredi vse, kar si tako berljivo vse vrže proč, 897 00:57:13,900 --> 00:57:17,700 ker če pomislite, da na ta način, Facebook dobi milijardo stran zadetkov na dan - 898 00:57:17,700 --> 00:57:21,670 nekaj norega kot je ta - pa kaj, če programer samo, da je analni 899 00:57:21,670 --> 00:57:26,660 hit preslednico še en čas samo za alinea nekaj kode še toliko več? 900 00:57:26,660 --> 00:57:29,500 Kaj posledice, če Facebook ohranja, da presledkov 901 00:57:29,500 --> 00:57:32,880 v vseh bajtov jih poslali nazaj na ljudi na internetu? 902 00:57:32,880 --> 00:57:36,400 S pritiskom na preslednico, ko vam daje dodatno bajt v datoteki. 903 00:57:36,400 --> 00:57:39,730 In če milijarda ljudi, nato nadaljuje, da prenesete domačo stran tisti dan, 904 00:57:39,730 --> 00:57:42,060 koliko več podatkov, ki so jih prenaša preko interneta? 905 00:57:42,060 --> 00:57:45,200 GB brez pravega razloga. 906 00:57:45,200 --> 00:57:48,510 In odobrena za veliko spletnih strani, to ni tako prilagodljiva vprašanje, 907 00:57:48,510 --> 00:57:51,030 ampak za Facebook za Google, nekatere od najbolj priljubljenih spletnih strani 908 00:57:51,030 --> 00:57:54,860 obstaja velika spodbuda, da bo vaše finančno koda izgledati nered 909 00:57:54,860 --> 00:57:58,980 tako da boste uporabljali kot nekaj bajtov, kot je mogoče poleg potem stisniti 910 00:57:58,980 --> 00:58:01,500 z uporabo nekaj podobnega zadrgo, algoritem se imenuje gzip, 911 00:58:01,500 --> 00:58:04,250 da brskalnik ne za vas samodejno. Ampak to je grozno. 912 00:58:04,250 --> 00:58:08,060 Nikoli ne bomo izvedeli kaj o drugih ljudi spletnih strani in kako oblikovati spletne strani 913 00:58:08,060 --> 00:58:09,680 Če moramo gledati na to, kot je ta. 914 00:58:09,680 --> 00:58:13,620 >> Torej, na srečo, kot so brskalniki Chrome in IE in Firefox v teh dneh 915 00:58:13,620 --> 00:58:16,450 običajno prihajajo z vgrajeno v razvojnih orodij. 916 00:58:16,450 --> 00:58:21,730 V bistvu, če grem dol, da preverite, ali element, če grem Poglej, razvijalcem, 917 00:58:21,730 --> 00:58:25,220 in pojdite na Orodja za razvijalce eksplicitno, 918 00:58:25,220 --> 00:58:27,640 To okno na dnu mojega zaslona, ​​zdaj izskoči. 919 00:58:27,640 --> 00:58:31,230 To je malo zastrašujoče na prvi, ker tam je veliko neznanih kartic tukaj 920 00:58:31,230 --> 00:58:34,510 ampak če sem kliknite na elemente vso pot na spodnji levi strani, 921 00:58:34,510 --> 00:58:38,810 Chrome je očitno zelo pameten. To zna razložiti vse te kode. 922 00:58:38,810 --> 00:58:42,320 In kaj počne Chrome je počisti vse HTML je Facebook. 923 00:58:42,320 --> 00:58:45,680 Kljub temu, da ni presledkov tam, ni zamik tam, 924 00:58:45,680 --> 00:58:51,120 zdaj opazil, da sem lahko začela pluti to spletno stran še toliko bolj hierarhično. 925 00:58:51,120 --> 00:58:56,910 Izkazalo se je, da bi morala vsaka spletna stran napisana v jeziku, ki se imenuje HTML5 začeti s tem, 926 00:58:56,910 --> 00:59:03,980 To DOCTYPE izjavo, tako rekoč: 927 00:59:03,980 --> 00:59:07,840 To je nekako svetlo siva in tam, ampak to je prva vrstica kode v tej datoteki, 928 00:59:07,840 --> 00:59:12,080 in da samo pove, brskalnik, "Hej, tukaj prihaja nekaj HTML5. Prihaja spletno stran." 929 00:59:12,080 --> 00:59:18,490 Prvi oklepaj tistega, ki se zgodi, da je to stvar, oklepaj HTML tag, 930 00:59:18,490 --> 00:59:22,320 in potem, če sem se potopite v globlje - te puščice so popolnoma brez pomena; 931 00:59:22,320 --> 00:59:25,140 so samo zaradi Predstavitev je, da niso dejansko v spisu - 932 00:59:25,140 --> 00:59:30,300 opazite, da je notranjost HTML oznake Facebook, karkoli, ki se začne z odprtjem 933 00:59:30,300 --> 00:59:32,910 in je nato besedo imenujemo oznako. 934 00:59:32,910 --> 00:59:38,610 Tako znotraj oznake HTML je očitno glavo tag in telo tag. 935 00:59:38,610 --> 00:59:41,930 Znotraj glavo tag je zdaj celoten kaos na Facebooku 936 00:59:41,930 --> 00:59:45,620 zato, ker imajo veliko metapodatkov in drugih stvari, za trženje in oglaševanje. 937 00:59:45,620 --> 00:59:50,600 >> Ampak, če se pomaknite dol, dol, dol, dol, da vidimo, kje je. Tukaj je. 938 00:59:50,600 --> 00:59:52,210 Ta je vsaj nekoliko pozna. 939 00:59:52,210 --> 00:59:55,990 Naslov domače strani Facebook je, če si kdaj pogledaš na kartici v vašem naslovni vrstici, 940 00:59:55,990 --> 00:59:59,060 Dobrodošli je na Facebooku - Prijava, da se prijavite ali Več o tem. 941 00:59:59,060 --> 01:00:01,110 To je tisto, kar boste videli v naslovni vrstici brskalnika Chrome, 942 01:00:01,110 --> 01:00:03,100 in to je, kako se je predstavljala v kodi. 943 01:00:03,100 --> 01:00:08,090 Če odmislimo vse ostalo v glavi, večina drobovje spletni strani, so se v telesu 944 01:00:08,090 --> 01:00:10,940 in se izkaže, da je koda Facebook bo videti bolj zapleteno 945 01:00:10,940 --> 01:00:14,540 kot večina stvari bomo napisali sprva samo zato, ker je bila zgrajena v zadnjih letih, 946 01:00:14,540 --> 01:00:17,260 vendar pa je cel kup skript oznak, JavaScript kode, 947 01:00:17,260 --> 01:00:18,870 ki omogoča spletna stran zelo interaktivna: 948 01:00:18,870 --> 01:00:22,330 videl stanje posodobitve takoj uporabo jezikov, kot so JavaScript. 949 01:00:22,330 --> 01:00:25,270 Tukaj je nekaj, kar ti div, ki je delitev strani. 950 01:00:25,270 --> 01:00:27,940 Toda preden bomo prišli do te podrobnosti, poskusimo za pomanjšanje 951 01:00:27,940 --> 01:00:31,920 in pogled na preprostejšo različico Facebook 1,0, če se tako izrazim. 952 01:00:31,920 --> 01:00:34,740 Tukaj je zdravo, svet spletnih strani. 953 01:00:34,740 --> 01:00:37,370 To je, da DOCTYPE izjavo na vrhu 954 01:00:37,370 --> 01:00:40,280 , ki je malo drugačna od vsega drugega. 955 01:00:40,280 --> 01:00:46,130 Nič drugega nam pišite na spletni strani, se bo začela z 01:00:48,880 in razen za nekaj, kar ti komentarji v HTML. 957 01:00:48,880 --> 01:00:53,000 Toda za večino del, vse na spletni strani, je oklepaj, ključne besede, zaklepaj. 958 01:00:53,000 --> 01:00:56,220 >> V tem primeru si lahko ogledate najpreprostejši spletnih strani mogoče. 959 01:00:56,220 --> 01:01:00,260 Oznako HTML vsebuje oznako glavo in telo vsebuje oznako, 960 01:01:00,260 --> 01:01:04,580 ampak obvestilo, da je ta pojem zagon in ustavitev oznake. 961 01:01:04,580 --> 01:01:11,360 To je začetna oznaka za HTML, to je blizu oznake ali končna oznaka. 962 01:01:11,360 --> 01:01:15,400 Obvestilo, da so si nekako nasprotij v tem smislu, da je blizu oznake ali končna oznaka 963 01:01:15,400 --> 01:01:20,030 to poševnico znotraj sebe. 964 01:01:20,030 --> 01:01:23,540 Medtem pa je odprta glava tag tu in zapri glavo tag tukaj. 965 01:01:23,540 --> 01:01:26,880 >> Tam je odprt naslov in tesno naslov tag tukaj. 966 01:01:26,880 --> 01:01:29,850 Dejstvo, da sem dal naslov v eni vrstici, povsem samovoljno. 967 01:01:29,850 --> 01:01:33,760 Je bilo videti, kot bi bilo primerno lepo v eno vrstico, tako da ni motilo, pritisnemo Enter nekajkrat. 968 01:01:33,760 --> 01:01:38,200 Medtem, telo sem alinee le, da je vedno tako jasna. 969 01:01:38,200 --> 01:01:41,050 Vedite, da je HTML zelo neumen jezik. 970 01:01:41,050 --> 01:01:43,410 V bistvu, nazaj v dan, preden je bilo WYSIWYG uredniki 971 01:01:43,410 --> 01:01:46,770 in Microsoft Word, kjer lahko rečeš: "Naredite mi to krepko, da bi to poąevne" 972 01:01:46,770 --> 01:01:50,850 , ki bi jih dejansko vnesete malo ukaze v esejih 20 + let 973 01:01:50,850 --> 01:01:55,740 pri čemer bi rekli, "Start bi to krepko. delajte to krepko." 974 01:01:55,740 --> 01:01:59,010 "Start bi to besedilo, ležeče. Ne delajte tega besedila so poąevne." 975 01:01:59,010 --> 01:02:01,850 >> To je tisto, HTML ali katero koli označevalni jezik je. 976 01:02:01,850 --> 01:02:05,530 Ta prva oznaka reče: "Hej, brskalnik. Prihaja nekaj HTML." 977 01:02:05,530 --> 01:02:09,880 Naslednji tag pravi: "Hej, brskalnik. Prihaja glavo, glavi moji spletni strani." 978 01:02:09,880 --> 01:02:11,650 "Hej, brskalnik. Prihaja naslov." 979 01:02:11,650 --> 01:02:15,880 In potem sem "Hej, brskalnik. To je to za ta naziv." 980 01:02:15,880 --> 01:02:20,000 Torej, to je, kako brskalnik ve, da ne bo več prikazal več znakov, kot zdravo, svet 981 01:02:20,000 --> 01:02:21,860 V naslovni vrstici. 982 01:02:21,860 --> 01:02:23,640 Medtem, ta pravi: "To je to v glavo." 983 01:02:23,640 --> 01:02:28,340 Ta pravi: "Prihaja telo Tu je dejansko telo." - Dobesedno, besede halo, svet. 984 01:02:28,340 --> 01:02:33,190 In to tukaj piše: "To je to za telo. To je to za HTML." 985 01:02:33,190 --> 01:02:34,640 Torej brskalniki so precej neumno. 986 01:02:34,640 --> 01:02:39,920 So samo brati te stvari od zgoraj navzdol, od leve proti desni in to točno tisto, kar so jim povedali, da ne. 987 01:02:39,920 --> 01:02:41,860 Kaj je dejansko naredil malo primer tukaj. 988 01:02:41,860 --> 01:02:46,240 Naj odprejo najpreprostejši programov na mojem računalniku Mac tukaj, in sicer TextEdit. 989 01:02:46,240 --> 01:02:48,220 V sistemu Windows lahko uporabite Notepad.exe. 990 01:02:48,220 --> 01:02:50,520 Ampak to je vse, kar potrebujete za začetek oblikovanja spletnih strani. 991 01:02:50,520 --> 01:02:53,730 Grem naprej in samo kopirajte in prilepite kodo v to datoteko. 992 01:02:53,730 --> 01:02:57,210 Grem, da gredo naprej in ga shranite na mojem namizju, 993 01:02:57,210 --> 01:03:01,220 in bom shranite kot hello.html, 994 01:03:01,220 --> 01:03:03,840 in zdaj je datoteka z imenom hello.html. 995 01:03:03,840 --> 01:03:05,690 Tukaj je na mojem namizju. 996 01:03:05,690 --> 01:03:11,130 Naj gre zdaj v brskalnik in povlecite datoteko v brskalniku. 997 01:03:11,130 --> 01:03:14,060 In voila, tukaj je moja prva spletna stran. 998 01:03:14,060 --> 01:03:17,340 Obvestilo, da je naslov na kartici je zdravo, svetovni kot na naslovu tag, 999 01:03:17,340 --> 01:03:20,040 in obvestilo, da je zdravo, svet je organ moji spletni strani, 1000 01:03:20,040 --> 01:03:22,190 in woo-hoo, sem na internetu. 1001 01:03:22,190 --> 01:03:24,700 >> Jaz nisem, prav, saj je ta datoteka ne na internetu. 1002 01:03:24,700 --> 01:03:28,330 To se zgodi, da je na moji lokalni trdi disk, pri tej poti. 1003 01:03:28,330 --> 01:03:32,720 Toda ideja je ista. Vse, kar zdaj potrebujemo, je spletni strežnik, ki ga naložite. 1004 01:03:32,720 --> 01:03:37,410 Ampak najprej kaj je dejansko uvedla malo več kompleksnost in malo več stilizacije. 1005 01:03:37,410 --> 01:03:39,890 To je preprosta, če je dolgočasen, spletna stran. 1006 01:03:39,890 --> 01:03:41,990 Izkazalo se je, da so druge vrste oznak lahko uporabite. 1007 01:03:41,990 --> 01:03:45,530 Na primer, tu v rumeni barvi, sem uvedel novo oznako 2. 1008 01:03:45,530 --> 01:03:49,630 Ne bomo se več igrati s temi danes, ampak obvestilo, da link tag 1009 01:03:49,630 --> 01:03:52,520 nekako je videti drugačen od vsega drugega. 1010 01:03:52,520 --> 01:03:55,370 Povezava tag vzame, kar imenujemo atributi, 1011 01:03:55,370 --> 01:03:59,770 in atribut je nekaj, kar vpliva na obnašanje oznako. 1012 01:03:59,770 --> 01:04:03,840 V tem primeru to ni najboljša izbira imen, zvez, saj je kar nekako brez pomena, 1013 01:04:03,840 --> 01:04:11,590 vendar ta link tag pravi, da v bistvu tudi datoteko z imenom styles.css znotraj moji spletni strani. 1014 01:04:11,590 --> 01:04:15,400 Si lahko zamislite, da je to podobno C je # include direktivo. 1015 01:04:15,400 --> 01:04:19,650 Styles.css se nanaša na povsem drugem jeziku, da ne bomo igrali z današnjim dnem 1016 01:04:19,650 --> 01:04:23,790 vendar je za estetiko: velikost pisave, barve, oblazinjenje, vtiskovanje, marže, 1017 01:04:23,790 --> 01:04:26,040 in vse te vrste podrobno estetike. 1018 01:04:26,040 --> 01:04:28,820 Medtem script tag je funkcionalno podobna, 1019 01:04:28,820 --> 01:04:33,140 vendar ne sodita CSS, da se jezik, pa tudi drug jezik, JavaScript. 1020 01:04:33,140 --> 01:04:37,810 Torej, z drugimi besedami, s temi oznakami 2 bom sčasoma lahko napisali svojo spletno stran 1021 01:04:37,810 --> 01:04:41,490 ampak tudi potegnite v kodeksu, ki je jaz ali kdo drug napisal 1022 01:04:41,490 --> 01:04:44,350 tako da lahko stojimo na ramenih drugih ljudi, lahko vadimo dober dizajn 1023 01:04:44,350 --> 01:04:46,120 faktoring iz skupne kode. 1024 01:04:46,120 --> 01:04:49,090 Če imam 10 različnih spletnih strani, to pomeni, da nekateri moji estetike 1025 01:04:49,090 --> 01:04:52,490 je lahko vključeno ven, podobno kot # vključujejo v ločeno datoteko. 1026 01:04:52,490 --> 01:04:54,420 Torej smo tam dobili. 1027 01:04:54,420 --> 01:04:57,180 Toda kaj je dejansko najprej narediti nekaj bolj zanimivega s to datoteko. 1028 01:04:57,180 --> 01:05:01,110 >> Še enkrat, to je samo TextEdit. Nisem tehnično na internetu še ni, vendar bomo prišli tja. 1029 01:05:01,110 --> 01:05:04,910 Želel bi, da bi zdravo, svet nekoliko drznejši kot je. 1030 01:05:04,910 --> 01:05:10,890 Torej zdravo, kaj je rekel samovoljno za krepko. 1031 01:05:10,890 --> 01:05:15,910 Spet zgodba je enaka: Pozdravljeni, vejica, začeli delati to krepko, 1032 01:05:15,910 --> 01:05:19,730 potem se svet natisnjeni v krepkem tisku, in to pomeni prenehala tiskati to krepko. 1033 01:05:19,730 --> 01:05:24,020 Naj gredo naprej in shranite svojo datoteko, pojdite nazaj na Chrome, bom povečate tako, da lahko vidimo, da je bolje, 1034 01:05:24,020 --> 01:05:27,870 in osveži, pa boste videli, da je svet zdaj krepko. 1035 01:05:27,870 --> 01:05:31,810 Internet je vse o hiperpovezave, tako da gremo naprej in to je to: 1036 01:05:31,810 --> 01:05:38,550 moja najljubša spletna stran je, recimo, youtube.com. 1037 01:05:38,550 --> 01:05:43,810 Razen, osvežite. Ok. Tukaj je nekaj težav zdaj poleg hideousness spletne strani. 1038 01:05:43,810 --> 01:05:47,310 1, sem prepričan, da sem zadeti nastopiti tukaj. In sem. 1039 01:05:47,310 --> 01:05:51,590 Ne samo pritisnite tipko Enter, sem tudi zamaknjena, vadil kar smo pridiga o slogu, 1040 01:05:51,590 --> 01:05:54,930 ampak moja je tik svetu. 1041 01:05:54,930 --> 01:05:58,410 Torej, zakaj je to? Brskalniki samo to, kar si povedal, da storijo. 1042 01:05:58,410 --> 01:06:04,010 Nisem rekel, da brskalnik, "Break proge tukaj. Vstavite odstavek prekinil tukaj." 1043 01:06:04,010 --> 01:06:07,820 Torej brskalnika, ni važno, če sem udaril Prikaz 30 krat, 1044 01:06:07,820 --> 01:06:10,820 to je še vedno tekoč, da dam zraven svetu. 1045 01:06:10,820 --> 01:06:15,930 Kaj res moram tukaj narediti, je reči kaj takega
, vstavite prelom vrstice. 1046 01:06:15,930 --> 01:06:17,940 >> In dejansko, prelom vrstice je nekako čudna stvar 1047 01:06:17,940 --> 01:06:21,650 zato, ker si ne morem začnejo premikati v drugo vrstico, nato pa naredite nekaj, 1048 01:06:21,650 --> 01:06:25,380 in potem stop selitev v novo vrstico. To je neke vrste atomske operacije. 1049 01:06:25,380 --> 01:06:28,140 Ali ga naredili ali ne. Vi pritisnite tipko Enter ali pa ne. 1050 01:06:28,140 --> 01:06:33,390 Torej br je malce drugačno oznako, zato moram nekako tako odprta in zapreti 1051 01:06:33,390 --> 01:06:35,230 vse naenkrat. 1052 01:06:35,230 --> 01:06:37,500 Skladnja za to je to. 1053 01:06:37,500 --> 01:06:41,760 Tehnično bi lahko naredil kaj takega v nekaterih različicah HTML, 1054 01:06:41,760 --> 01:06:45,600 ampak to je neumno, ker ni razloga za vklop in izklop nekaj 1055 01:06:45,600 --> 01:06:48,420 če lahko namesto narediti vse naenkrat. 1056 01:06:48,420 --> 01:06:52,310 Zavedaj se, da HTML5 izrecno ne zahtevajo takšne poševnice, 1057 01:06:52,310 --> 01:06:55,410 Tako boste videli, učbenike in spletne vire, ki ga nimajo, 1058 01:06:55,410 --> 01:06:59,780 ampak za dober ukrep dajmo vaditi simetrijo, ki smo jih videli do sedaj. 1059 01:06:59,780 --> 01:07:02,870 To pomeni, da je oznaka tako odpirajo in zapirajo. 1060 01:07:02,870 --> 01:07:05,220 Torej, zdaj mi rešil sliko, pojdi nazaj. 1061 01:07:05,220 --> 01:07:10,240 Ok, tako da je začel iskati boljše, razen na spletu vem, je nekako klikniti, 1062 01:07:10,240 --> 01:07:13,610 in še youtube tu ne zdi, da vodi v nič. 1063 01:07:13,610 --> 01:07:17,560 To je zato, ker, čeprav je videti kot povezavo, brskalnik ne veš, da sam po sebi 1064 01:07:17,560 --> 01:07:20,670 tako da moram povedati, da je to brskalnik link. 1065 01:07:20,670 --> 01:07:22,620 >> Način za to je, da uporabite sidro oznako: 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 in mi prestavili v novo vrstico le tako, da je malo bolj berljivo, 1069 01:07:38,490 --> 01:07:40,060 in bom skrči velikost pisave. 1070 01:07:40,060 --> 01:07:43,890 Sem že končal? Ne Prišlo bo to deljenje. 1071 01:07:43,890 --> 01:07:46,760 Ta oznaka, sidro tag, res da atribut, 1072 01:07:46,760 --> 01:07:52,900 , ki spreminja svoje vedenje, in vrednost tega atributa je očitno URL YouTube. 1073 01:07:52,900 --> 01:07:56,380 Ampak opazite razkorak je, da samo zato, ker je to URL boš, 1074 01:07:56,380 --> 01:08:01,020 to ne pomeni, da mora biti beseda, ki si poudarjanju in tako povezavo. 1075 01:08:01,020 --> 01:08:03,960 Namesto, da bi se lahko kaj takega. 1076 01:08:03,960 --> 01:08:10,870 Torej, moram reči, da se ta beseda ustaviti povezavo s pomočjo tesnega sidro oznako. 1077 01:08:10,870 --> 01:08:12,650 Obvestilo ne delam tega. 1078 01:08:12,650 --> 01:08:15,890 1, bi to lahko samo zapravljanje časa vsakogar in to ni potrebno. 1079 01:08:15,890 --> 01:08:19,290 >> Če želite zapreti oznako, da omenim samo ime oznake znova. 1080 01:08:19,290 --> 01:08:21,800 Vi ne omenja nobene od lastnosti. 1081 01:08:21,800 --> 01:08:26,189 Torej le da, pojdi nazaj. Ok, voila, zdaj pa je modra in hiperpovezavo. 1082 01:08:26,189 --> 01:08:29,430 Če ga kliknete, pravzaprav ne gre za YouTube. 1083 01:08:29,430 --> 01:08:32,529 Torej, čeprav je moja spletna stran ni na internetu, je vsaj HTML, 1084 01:08:32,529 --> 01:08:37,930 in če bomo pustili internet dohitevanju bi dejansko končal tukaj na youtube.com. 1085 01:08:37,930 --> 01:08:40,670 In sem šel nazaj in tukaj je moja spletna stran. Toda opazil. 1086 01:08:40,670 --> 01:08:43,120 Če ste kdaj gotten vsiljeno ali gre za lažno predstavljanje, 1087 01:08:43,120 --> 01:08:45,850 Zdaj imate možnost, po samo petih minutah, da storijo enako. 1088 01:08:45,850 --> 01:08:50,920 Tu se lahko pojdi in naredi nekaj podobnega www.badguy.com 1089 01:08:50,920 --> 01:08:59,319 ali karkoli površno spletne strani je, in potem lahko rečeš preverili svoj PayPal račun. 1090 01:08:59,319 --> 01:09:04,840 [Smeh] In zdaj to, da bo šel na badguy.com, kar ne bom, da kliknete na 1091 01:09:04,840 --> 01:09:08,000 ker nimam pojma, kje ki vodi. [Smeh] 1092 01:09:08,000 --> 01:09:10,859 >> Ampak sedaj imamo možnost, da dejansko konča tam. 1093 01:09:10,859 --> 01:09:12,640 Torej smo res šele začenjajo praska površino. 1094 01:09:12,640 --> 01:09:15,830 Ne bomo programiranje po sebi, smo pisno označevalni jezik. 1095 01:09:15,830 --> 01:09:18,569 Toda takoj, ko smo zaokrožujejo našo besedišča v HTML, 1096 01:09:18,569 --> 01:09:21,520 bomo uvesti PHP, dejansko programski jezik 1097 01:09:21,520 --> 01:09:26,859 ki nam bo omogočil ustvarjanje HTML samodejno ustvari CSS samodejno 1098 01:09:26,859 --> 01:09:29,430 tako da bomo lahko začeli izvajati v sredo, recimo, 1099 01:09:29,430 --> 01:09:31,700 naše iskalnik in še več. 1100 01:09:31,700 --> 01:09:34,770 Ampak več o tem v nekaj dneh. Bomo videli potem. 1101 01:09:34,870 --> 01:09:39,000 >> [CS50.TV]