1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [Semajno 7] 2 00:00:02,440 --> 00:00:04,730 [Davido J. Malan - Universitato Harvard] 3 00:00:04,730 --> 00:00:07,490 [Jen CS50. - CS50.TV] 4 00:00:07,490 --> 00:00:12,280 Bone. Bonvenon dorso. Ĉi tiu estas CS50, kaj ĉi tiu estas la komenco de semajno 7. 5 00:00:12,280 --> 00:00:14,690 Paro de malmulta anoncoj: 6 00:00:14,690 --> 00:00:18,150 Pset5 estas nun en progreso, aŭ baldaŭ estos, 7 00:00:18,150 --> 00:00:21,590 kaj lasu min diri, tute honeste, ĉi tio inklinas esti inter la plej defia 8 00:00:21,590 --> 00:00:24,460 de la kurso la problemo aroj, do lasu min mencii ĉi nun 9 00:00:24,460 --> 00:00:28,190 por ke ĉi tiu semajno pli ol iam vi ne atendu, ni diru, merkredo nokte 10 00:00:28,190 --> 00:00:29,920 aŭ ĵaŭdo nokte bucear in 11 00:00:29,920 --> 00:00:32,369 Tio estas definitive interesan pset. Ni kredas ke estas amuza. 12 00:00:32,369 --> 00:00:36,110 Se vi reale preni ĝin plene korekta kaj povas defii la tn Granda Estraro, 13 00:00:36,110 --> 00:00:39,830 vi havas ŝancon por kongrui intelektojn kun iuj de la kurso de dungitaro 14 00:00:39,830 --> 00:00:41,620 kaj kelkaj el viaj kompanoj. 15 00:00:41,620 --> 00:00:44,670 Kio The Big Estraro estas estas iam vi havas vian literumilo laboristino, 16 00:00:44,670 --> 00:00:48,860 vi povos iri al cs50.net post kuri komando, 17 00:00:48,860 --> 00:00:52,430 pure elekti en, kaj tiam la kvanto de tempo kaj la kvanto de RAM kaj pli 18 00:00:52,430 --> 00:00:56,130 ke vi uzas en via efektivigo estos elmetitaj tie sur la kurson ĉefpaĝon. 19 00:00:56,130 --> 00:00:59,740 Vi rimarkos ke tuta aro da tiuj homoj ĉi tie estas listigitaj kiel bastono 20 00:00:59,740 --> 00:01:04,220 ekde dum la semajnfino, la personaro pensis ke estus amuze provi superi unu la alian. 21 00:01:04,220 --> 00:01:07,390 Do rimarkas ke la celo tie estas ne superi la bastonon. 22 00:01:07,390 --> 00:01:09,790 Eĉ mi nur tie en la numero 13. 23 00:01:09,790 --> 00:01:13,790 Pure elekti in, sed estas ŝanco por vidi kiom iom RAM 24 00:01:13,790 --> 00:01:16,790 kaj kiom malmultaj CPU sekundoj vi povas uzi vis-a-vis iuj viaj kompanoj. 25 00:01:16,790 --> 00:01:20,540 >> Kaj mi agnoskas ke Kevin Michael Schmid, 26 00:01:20,540 --> 00:01:23,750 aktuale en la numero 1 posteno kiel unu el la TFs, 27 00:01:23,750 --> 00:01:28,120 ĉi tiu estas efektivigo ke ni nomas ne eblas 28 00:01:28,120 --> 00:01:32,700 pro tio ke li uzas preskaŭ 0 RAM kaj preskaŭ 0 sekundoj por loading. 29 00:01:32,700 --> 00:01:35,670 Do ni zorgos de Kevin offline. [Ridado] 30 00:01:35,670 --> 00:01:40,950 Estas iuj kapabloj ke Kevin metas al la provo tie. 31 00:01:40,950 --> 00:01:45,280 Unu el la aferoj ni pensis ke ni volas fari tro estas nun CS50x estas semajno en progreso, 32 00:01:45,280 --> 00:01:49,520 kaj vi infanoj estas tiel parto de ĉi tiu eksperimento kiel tiuj studentoj estas. 33 00:01:49,520 --> 00:01:53,720 Ni demandis ilin kiel parto de ilia pset0, kiu estis simile al prezenti Scratch projekto 34 00:01:53,720 --> 00:01:58,280 de intereso al ili - ludo, interaktiva peco de arto, kuraĝigo, aŭ la kiel - 35 00:01:58,280 --> 00:02:03,700 1 - al 2-minuta video, se ili volus, dirante saluton al la mondo kaj kiu reale estas. 36 00:02:03,700 --> 00:02:06,780 Mi pensis mi dividos kun vi nur paro de la videoj kiuj estis donita ĝis nun 37 00:02:06,780 --> 00:02:10,759 ĉar por ni, sur la bastono almenaŭ, ĝi vere estis ekscita 38 00:02:10,759 --> 00:02:14,220 kaj inspira por vidi tiujn ulojn el la tuta mondo - landoj tra la tuta mondo - 39 00:02:14,220 --> 00:02:18,160 agordi en, de ĉiuj aĵoj, komputika kurso sur la interreto, 40 00:02:18,160 --> 00:02:20,410 ĉu ĝi estas ĉar ili volas daŭrigi siajn proprajn studojn, 41 00:02:20,410 --> 00:02:22,300 ili volas preni lian karierojn en nova direkto, 42 00:02:22,300 --> 00:02:24,390 ili volas plenigi truojn en siaj propraj konoj, 43 00:02:24,390 --> 00:02:27,190 tial iuj de la samaj kialoj ke vi infanoj eble estis tie. 44 00:02:27,190 --> 00:02:31,090 >> Do mi donas al vi unu tia studento tie. Vi povus levi la volumo malmulta. 45 00:02:31,090 --> 00:02:35,520 Jen unu el niaj studenta 1-minuto sendoj. 46 00:02:35,520 --> 00:02:40,380 Saluton, mondo. Mi estas studento de industria inĝenierio tie en Málaga, Hispanio. 47 00:02:40,380 --> 00:02:45,840 Mi ekscitiĝas pri tiu interreta kurso ĉar mi amas komputiko, mi vere faros, 48 00:02:45,840 --> 00:02:48,880 kaj mi vere dankas ke mi alvenas al esplori ĝin. 49 00:02:48,880 --> 00:02:51,940 Kaj la fakto, ke mi povas lerni la saman vi ĉiuj infanoj fari 50 00:02:51,940 --> 00:02:57,040 sed anstataŭ esti en Harvard mi estas en Málaga, kiom awesome estas kiu? 51 00:02:57,040 --> 00:03:02,040 Nu, mi estas Fernando, kaj ĉi tiu estas CS50. See you guys. 52 00:03:02,040 --> 00:03:07,100 [Ridado] Alia klipo ni aparte deziras, vi trovos ke tiu sinjoro estas la angla estas ne tiom forta. 53 00:03:07,100 --> 00:03:11,520 Ĝi aspektas kiel li havis ĝin maŝino tradukis, do la tradukoj mem estas iom neperfekta, 54 00:03:11,520 --> 00:03:15,790 sed tio estis unu el niaj favoritos tiel malproksime kiel bone. 55 00:03:25,080 --> 00:03:29,980 [♪ ♪] 56 00:03:29,980 --> 00:03:32,370 Saluton, mondo. [Parolante en la japana] 57 00:03:32,370 --> 00:03:39,830 [Mi devas saluti japane ĉar mia Esperanto estas tre nefidinda.] 58 00:03:39,830 --> 00:03:45,380 [Mi transdonas la mesaĝon al vi el la urbo de Gifu, Japanio.] 59 00:03:45,380 --> 00:03:49,820 [Mi povas esti studento por la unua fojo en 20 jaroj, kiel povas vidiĝi.] 60 00:03:49,820 --> 00:03:54,640 [Mi estas tre dankema al Harvard Universitato kiu donis al mi ĉi tiun ŝancon kaj edX.] 61 00:03:54,640 --> 00:04:01,510 [Golfo estas gitaro kaj mia favorita afero kuri.] [Ridado] 62 00:04:01,510 --> 00:04:05,750 [♪ ♪] 63 00:04:05,750 --> 00:04:10,790 [Kial vi kredas ke mi provis ĉeesti cs50x.] 64 00:04:10,790 --> 00:04:14,990 [Universitato Harvard, estas mia sopiro.] 65 00:04:14,990 --> 00:04:19,740 [Precipe se mi malproksima ĉeesto vivis en Japanio.] 66 00:04:19,740 --> 00:04:26,680 [Mi volis provi tuj konsciis pri la ekzisto de tiaj edX kiam.] 67 00:04:26,680 --> 00:04:32,500 [Ĉu vi ne opinias ke vi ne rilataj al la aĝo de lernado I.] 68 00:04:32,500 --> 00:04:38,350 [Cs50 estas mia sopiro. Mia nomo estas Kazu, kaj ĉi tiu estas cs50.] 69 00:04:38,350 --> 00:04:43,090 [♪ ♪] [aplaŭdoj kaj huraoj] 70 00:04:43,090 --> 00:04:49,220 Alia favorito de nia erao ĉi submetiĝo tien el iu. 71 00:04:51,070 --> 00:04:55,380 [♪ ♪] [Malan] Google ĝin se vi ne konas tiun meme. 72 00:04:55,380 --> 00:05:01,480 >> Kaj poste persiste, paro de la aliaj kiuj got afiŝis ke eble gajni la adorable premio. 73 00:05:01,480 --> 00:05:06,820 [Studentoj] Aww! >> [Malan] Ni devos aŭskulti. Tio estas mallonga, do aŭskultu atente. 74 00:05:08,580 --> 00:05:11,150 [Homina parolanto] Kio estas via nomo? >> Louie. 75 00:05:11,150 --> 00:05:16,120 [Homina parolanto] Kio estas tio? >> [Risitas] CS50. [Ridado] 76 00:05:16,120 --> 00:05:19,510 [Malan] Li prenas du, though. 77 00:05:19,510 --> 00:05:22,240 Ĉi tie ni iru, la lasta. 78 00:05:23,030 --> 00:05:26,980 Mia nomo estas Louie, kaj ĉi tiu estas CS50. 79 00:05:26,980 --> 00:05:30,250 [Ridado] Ĉi tiam estas CS50x. 80 00:05:30,250 --> 00:05:33,230 Dankon al ĉiuj el la de vi dum sekvaj kune hejme 81 00:05:33,230 --> 00:05:35,620 kiuj estis partopreno ĝis nun. 82 00:05:35,620 --> 00:05:39,510 Hodiaŭ, ni konkludi nian diskuton de datumstrukturoj, 83 00:05:39,510 --> 00:05:41,160 almenaŭ iuj el la plej fundamenta, 84 00:05:41,160 --> 00:05:44,760 kaj poste ni daŭrigos nian konversacion pri HTML kaj ttt programado. 85 00:05:44,760 --> 00:05:48,520 Ja, ni pasigis la pasintaj kelkaj sep semajnoj rigardi la fundamentojn de programado - 86 00:05:48,520 --> 00:05:50,450 algoritmoj, datumstrukturoj, kaj similaj - 87 00:05:50,450 --> 00:05:53,050 kaj C, kiel vi eble spertas tiel malproksime, 88 00:05:53,050 --> 00:05:57,060 ne estas nepre la plej atingebla de lingvoj 89 00:05:57,060 --> 00:05:59,090 kun kiu apliki iujn el tiuj ideoj. 90 00:05:59,090 --> 00:06:01,880 Kaj tiel komenci ĉi tiun semajnon kaj proksima semajno kaj tiam la sekva, 91 00:06:01,880 --> 00:06:07,110 ni fine povos transiro de C, kiu estas ĝenerale konata kiel sufiĉe malalta nivelo lingvo, 92 00:06:07,110 --> 00:06:11,190 al aĵoj pli alta nivelo, inter ili PHP, JavaScript, kaj similaj, 93 00:06:11,190 --> 00:06:14,850 kiuj ni vidos desegni sur la sama lecionoj kiujn ni lernis dum la pasintaj semajnoj, 94 00:06:14,850 --> 00:06:19,430 sed vi trovos, ke deklari aĵojn kiel tabeloj kaj hash tabloj kaj serĉado kaj ordigi 95 00:06:19,430 --> 00:06:23,370 tiom pli facile ĉar la lingvoj mem ni ekuzi 96 00:06:23,370 --> 00:06:25,290 fariĝos pli potencaj. 97 00:06:25,290 --> 00:06:27,410 Sed unue, apliko de arboj. 98 00:06:27,410 --> 00:06:30,240 Ĝi estas tre komuna tiuj tagoj por bezonas kunpremi informo. 99 00:06:30,240 --> 00:06:34,770 En kio kunteksto vi volas kunpremi ia cifereca informo? 100 00:06:37,190 --> 00:06:39,670 >> Yeah. >> [Studento] Kiam vi bezonas sendi ĝin super la TTT. 101 00:06:39,670 --> 00:06:41,450 Yeah, kiam vi volas sendi ion sur la interreto. 102 00:06:41,450 --> 00:06:44,950 Se vi volas elŝuti grandan dosieron, estas idealo se iu en la alia fino 103 00:06:44,950 --> 00:06:48,760 estas kunpremita tiu dosiero uzante zip formato aŭ io simila 104 00:06:48,760 --> 00:06:53,760 por ke vi sendas malpli bitoj ol povus alie esti transdonita. 105 00:06:53,760 --> 00:06:55,500 Do kiel vi kunpremi informo? 106 00:06:55,500 --> 00:07:00,540 Ĉiu abscesoj malsupren uzi malpli bitoj ol estas postulitaj de defaŭlta. 107 00:07:00,540 --> 00:07:03,220 Sed ĉi tiu estas speco de kurioza afero ĉar pensas reen al semajnoj 0 kaj 1 108 00:07:03,220 --> 00:07:07,370 kiam ni parolis pri ASCII kaj binaraj kaj ni parolis pri ASCII en aparta 109 00:07:07,370 --> 00:07:10,690 kiel uzante 8 bitojn por reprezenti literojn de la alfabeto 110 00:07:10,690 --> 00:07:16,120 tiel ke la litero A estas prezentita per 65, minuskla a estas la nombro 97, 111 00:07:16,120 --> 00:07:21,210 kaj kontraŭe vi reprezentas la 65 aŭ 97, vi uzas 7 aŭ 8 bitojn. 112 00:07:21,210 --> 00:07:24,120 Sed la ruzo estas ke estas iuj literoj en la angla alfabeto 113 00:07:24,120 --> 00:07:26,230 kiuj ne estas tiel populara kiel aliaj. 114 00:07:26,230 --> 00:07:31,600 Z estas ne ĉiuj kiuj populara, Q estas ne ĉiuj kiuj populara, sed A kaj E estas super populara. 115 00:07:31,600 --> 00:07:37,280 Kaj tamen por ĉiuj ĉi tiuj literoj, defaŭlte la mondo uzas la sama nombro de bitoj, nur 8. 116 00:07:37,280 --> 00:07:42,690 Do ĉu ne estis pli inteligenta se anstataŭ uzi 8 bitojn por ĉiu litero, 117 00:07:42,690 --> 00:07:47,440 eĉ la plej malofte uzata kiel Q kaj Z, 118 00:07:47,440 --> 00:07:51,910 kio se ni uzas malpli bitoj por A kaj E kaj S kaj la plej populara literoj 119 00:07:51,910 --> 00:07:55,000 kaj uzis pli bitojn por la malpli populara literoj, 120 00:07:55,000 --> 00:07:57,770 la ideo esti let la optimizar por la komuna kazo, 121 00:07:57,770 --> 00:08:01,160 kio estas temo en komputiko de klopodi optimizar kio okazos la plej 122 00:08:01,160 --> 00:08:05,310 kaj pasigi iom pli da tempo, iom pli da spaco sur la aĵoj kiuj, jes, povus okazi 123 00:08:05,310 --> 00:08:07,680 sed ne nepre kiel ofte. 124 00:08:07,680 --> 00:08:09,330 Do ni prenu ekzemplon. 125 00:08:09,330 --> 00:08:12,610 >> Supozu ke ni volas kodi informo sufiĉe efike. 126 00:08:12,610 --> 00:08:15,090 Vi povus esti plenkreska sciante iom ion pri Morsa kodo, 127 00:08:15,090 --> 00:08:17,450 kaj malakordo vi ne scias la realan kodo, 128 00:08:17,450 --> 00:08:21,750 sed vi eble memoras, ke ĝi estas almenaŭ tiu serio de punktoj kaj strekoj. 129 00:08:21,750 --> 00:08:26,640 Tio estas sufiĉe efika kodigo, kaj rimarkas ke la plej populara letero - ekzemple, E - 130 00:08:26,640 --> 00:08:28,980 Uzas la plej mallonga de beeps. 131 00:08:28,980 --> 00:08:31,740 Morsa kodo estas pri beep-beep-beep-beep-beep-beep kaj tenante tonoj 132 00:08:31,740 --> 00:08:34,799 ĉu por mallongaj periodoj de tempo aŭ longaj periodoj de tempo. 133 00:08:34,799 --> 00:08:40,330 Kaj, kiel signifis per la punkto, estas super mallongaj pepi, nur pepi, kaj kiu reprezentus E. 134 00:08:40,330 --> 00:08:43,960 Kontraŭe, T estus plu pepi, kiel pepi [daŭrigas sono], 135 00:08:43,960 --> 00:08:45,710 kaj kiu reprezentus T. 136 00:08:45,710 --> 00:08:48,840 Sed tio ankoraŭ bela mallonga ĉar, kontraŭe, se vi rigardas Z, 137 00:08:48,840 --> 00:08:52,690 esprimi Z vi irus pepi, pepi [plu sono], pepi, pepi [pli mallongaj sonas]. 138 00:08:52,690 --> 00:08:55,360 Do ĝi estas pli longa ĉar ĝi estas malpli kutimaj. 139 00:08:55,360 --> 00:08:58,150 Sed la gotcha tie estas kiu kodo Morse estas iom misa 140 00:08:58,150 --> 00:09:00,610 en tiu ĝi ne estas tuj decodable. 141 00:09:00,610 --> 00:09:07,350 Ekzemple, supozu ke vi aŭdas sur iu fino de la drato pepi [mallonga], pepi [longa]. 142 00:09:07,350 --> 00:09:12,480 Kio mesaĝon ĉu mi ĝuste ricevis? Al punkto kaj streko. Kion tio reprezentas? 143 00:09:12,480 --> 00:09:15,330 [Studento] A. >> [Malan] Eble. 144 00:09:15,330 --> 00:09:18,270 Ĝi povus ankaŭ esti E sekvita de T. 145 00:09:18,270 --> 00:09:23,390 En aliaj vortoj, Morsa kodo, kvankam leverages tiu principo de optimizando la angulo kazo, 146 00:09:23,390 --> 00:09:26,250 ĝi ne pruntedonos al tuja decodability. 147 00:09:26,250 --> 00:09:29,850 Tio estas, la homo kiu estas aŭdante aŭ ricevi tiuj punktoj kaj strekoj 148 00:09:29,850 --> 00:09:34,540 devas iel eltrovi kie la paŭzoj estas inter literoj, 149 00:09:34,540 --> 00:09:39,660 ĉar se vi ne scias, kie tiuj paŭzoj estas, vi eble konfuzas A por et aŭ inverse. 150 00:09:39,660 --> 00:09:43,880 >> Do kio povus fari? En Morsa kodo vi povus nur detenas inter ĉiu de la literoj. 151 00:09:43,880 --> 00:09:47,660 Sed paŭzante estas speco de kontraŭpezo al la tuta punkto de rapidigo aĵojn. 152 00:09:47,660 --> 00:09:52,880 Do kion se anstataŭe ni iris kun kodo en kiu ne estis tiu malbona situacio 153 00:09:52,880 --> 00:09:56,570 kie E estas prefikso, ekzemple, de A - 154 00:09:56,570 --> 00:10:00,020 en aliaj vortoj, se ni povus certigi ke la ŝablonoj estas ankoraŭ mallonga por la populara literoj 155 00:10:00,020 --> 00:10:04,850 longa por la malpli populara literoj, sed mankas ebla konfuzo? 156 00:10:04,850 --> 00:10:08,930 Viro en la nomo de Huffman jaroj elpensis tiun skemon nomis Huffman kodigo 157 00:10:08,930 --> 00:10:12,390 ke efektive leverages unu el la datumstrukturoj ni pasigis iom da tempo paroli pri 158 00:10:12,390 --> 00:10:16,560 ĉi pasinta semajno, tiu de arboj, duumaj arboj specife - 159 00:10:16,560 --> 00:10:19,710 duuma arbo signifo ke ĝi havas ne pli ol 2 infanoj. 160 00:10:19,710 --> 00:10:22,720 Ĝi havas eble maldekstra infano, eble dekstra infano, kaj tio estas ĝi. 161 00:10:22,720 --> 00:10:26,510 Do supozu nur pro diskuto ke iu volas sendi mesaĝon 162 00:10:26,510 --> 00:10:31,270 kiu similas ĉi. Estas kompleta sensencaĵon sed ĝi konsistas el Kiel, Bs, C, D, kaj Es. 163 00:10:31,270 --> 00:10:34,890 Kaj se vi vere rakonti ĝis ĉiuj Kiel, Bs, C, D, kaj Es 164 00:10:34,890 --> 00:10:36,870 kaj poste dividi per la totala nombro de literoj, 165 00:10:36,870 --> 00:10:42,710 tiu malgranda abako tie diras ke 45% de la literoj estas Es, 20% estas mezuro, 166 00:10:42,710 --> 00:10:45,010 10% Bs, ks. 167 00:10:45,010 --> 00:10:47,330 Do alivorte, supozi, ke la citita linio tie 168 00:10:47,330 --> 00:10:49,080 estas nur kelkaj mesaĝo kiu vi volas sendi. 169 00:10:49,080 --> 00:10:52,180 Ĝi okazas esti sensencaĵoj nur tiel ni povas uzi kiel kelkaj leteroj kiel eble plej 170 00:10:52,180 --> 00:10:55,220 sed estas ja la kazo ke E restas la plej populara, 171 00:10:55,220 --> 00:11:01,450 kaj B kaj C estas la malplej populara, almenaŭ de tiuj 5 literoj de la alfabeto. 172 00:11:01,450 --> 00:11:04,040 Do kiel ni povas iri antaŭvidi kun kodigo, 173 00:11:04,040 --> 00:11:08,430 duuma kodigo, kaj tia sinteno de _0s_ kaj _1s_ por ĉiu el tiuj literoj 174 00:11:08,430 --> 00:11:14,820 en tia maniero, ke E estas mallonga mastro kaj eble B kaj C estas iomete pli longa ŝablonoj, 175 00:11:14,820 --> 00:11:19,270 denove, la ideo estas, ke ni volas uzi malpli bitoj plejofte 176 00:11:19,270 --> 00:11:21,790 kaj pli bitojn nur tempaltempe. 177 00:11:21,790 --> 00:11:26,070 Laŭ Huffman kodigo, vi povas krei arbaro de arboj. 178 00:11:26,070 --> 00:11:31,190 Estas speco de rakonto linio tie kiu implikas arboj kaj ankaŭ la procezon de konstruado ilin. 179 00:11:31,190 --> 00:11:32,420 Ni komencos. 180 00:11:32,420 --> 00:11:36,140 >> Mi proponas ke vi komencu per tiu arbaro, por tiel diri, de 5 arboj, 181 00:11:36,140 --> 00:11:38,260 el kiuj ĉiu estas sufiĉe stulta arbo. 182 00:11:38,260 --> 00:11:42,800 La arbo estas formita de nur sola nodo, kiel reprezentis tie de rondo. 183 00:11:42,800 --> 00:11:45,310 Do ĉiu el tiuj aĵoj povus esti C struct 184 00:11:45,310 --> 00:11:50,200 kaj ene de la C struct eblus kaleŝego reprezentantaj la ofteco grafo 185 00:11:50,200 --> 00:11:52,510 kaj poste eble char reprezentas la letero. 186 00:11:52,510 --> 00:11:56,470 Do pensu pri tiuj nodoj kiel Iu maljuna C struct sed, nuntempe, pli alta nivelo. 187 00:11:56,470 --> 00:12:01,230 Tiu estas arbaro de 5 arboj, ĉiu el kiuj havas nur unu nodo. 188 00:12:01,230 --> 00:12:06,830 Kio Huffman proponita estas ke ni komencu kombini tiujn arbojn 189 00:12:06,830 --> 00:12:11,140 kiuj havas la plej malgrandan ofteco grafoj en iomete pli granda arboj 190 00:12:11,140 --> 00:12:13,490 konektante ilin kun nova radiko nodo. 191 00:12:13,490 --> 00:12:17,560 Do inter la literoj ĉi tie, rimarki ke por oportuneco mi ordo ilin de maldekstre al dekstre, 192 00:12:17,560 --> 00:12:21,420 kvankam tio ne estas strikte necesa, kaj rimarkas ke la plej malgranda nodoj 193 00:12:21,420 --> 00:12:23,930 Nuntempe 10% kaj 10%. 194 00:12:23,930 --> 00:12:28,940 Do Huffman proponis ke ni kunfandi tiujn 2 pli malgranda nodoj en nova arbo 195 00:12:28,940 --> 00:12:34,450 enkondukante novan patro nodo kaj tiam donas ke patro maldekstra infano kaj dekstra infano 196 00:12:34,450 --> 00:12:37,720 kie B estas arbitre la maldekstra kaj C estas arbitre dekstre. 197 00:12:37,720 --> 00:12:41,590 Kaj tiam Huffman plu proponis ke estu la nun nur pensu pri la maldekstra infano 198 00:12:41,590 --> 00:12:44,790 en unu el tiuj arboj ĉiam kiel esti reprezentita per 0 199 00:12:44,790 --> 00:12:47,890 kaj la dekstra infano ĉiam kiel esti prezentita per la nombro 1. 200 00:12:47,890 --> 00:12:50,680 >> Ne gravas se vi klaki ilin tiel longe kiel vi estas kohera. 201 00:12:50,680 --> 00:12:54,650 Do nun ni havas kvar arboj en ĉi tiu arbaro. 202 00:12:54,650 --> 00:12:58,050 Kaj mi diras kvar ĉar nun la arbo sur la maldekstra - 203 00:12:58,050 --> 00:13:00,570 kaj ne tiel arbo en la senco ke ĝi kreskas tiel, 204 00:13:00,570 --> 00:13:05,170 ĝi estas pli simila al familio arbo kie nun la 0,2 estas varo de la patro de la du infanoj - 205 00:13:05,170 --> 00:13:07,930 rimarkas, ke en tiu patro ni desegnita 0.2. 206 00:13:07,930 --> 00:13:13,370 Ni aldonis la ofteco grafoj de la du infanoj kaj donis al la nova vertico al la tuta sumo. 207 00:13:13,370 --> 00:13:15,310 Do nun ni nur ripeti tiun procezon. 208 00:13:15,310 --> 00:13:19,490 Trovu la du pli malgrandaj nodoj kaj tiam kunigi ilin en nova arbo 209 00:13:19,490 --> 00:13:21,380 kaj poste ripeti la procezon plu. 210 00:13:21,380 --> 00:13:26,390 Nun ni havas kelkajn kandidatojn, 20%, 15%, kaj aliaj 20%. 211 00:13:26,390 --> 00:13:29,780 En ĉi tiu kazo, ni devas rompi la egaleco. Ni povas fari ĝin arbitre. 212 00:13:29,780 --> 00:13:31,540 Ni devas nur fari tion konstante. 213 00:13:31,540 --> 00:13:33,760 En ĉi tiu kazo, mi arbitre iri kun la unu maldekstre, 214 00:13:33,760 --> 00:13:39,880 kaj mi nun kunfandi la 20% kaj la 15% por doni al mi novan patro nomis 35%, 215 00:13:39,880 --> 00:13:46,310 kies maldekstra infano estas 0, kies dekstra infano estas 1, kaj nun ni havas nur tri arboj en la arbaro. 216 00:13:46,310 --> 00:13:47,960 Vi povas eble vidi kie ĉi iras. 217 00:13:47,960 --> 00:13:51,150 Se ni ripetu ĉi paro pli tempoj, ni havos nur unu granda arbo, 218 00:13:51,150 --> 00:13:53,900 ĉiuj el kies randoj estas etikedita kun _0s_ kaj _1s_. 219 00:13:53,900 --> 00:13:55,710 Ni faru tion denove. 220 00:13:55,710 --> 00:14:02,600 35% estas tiu arbo radiko. 20% kaj 45%, do ni tuj kunfandi la 35% kaj 20%. 221 00:14:02,600 --> 00:14:05,610 Nun ni havas ĉi arbo tie ĉi. Ni aldonu tiujn kune, ni havas 55%. 222 00:14:05,610 --> 00:14:07,910 Nun ekzistas nur du arboj en la arbaro. 223 00:14:07,910 --> 00:14:11,900 Ni faras ĉi tiu fina tempo, kaj espereble matematike ĉiuj frekvencoj adicii 224 00:14:11,900 --> 00:14:15,570 ĉar ili devus ekde ni komputita ilin el la get-go aldoni ĝis 100%. 225 00:14:15,570 --> 00:14:17,960 Kaj nun ni havas unu arbo. 226 00:14:17,960 --> 00:14:20,580 Do ĉi tiu estas Huffman kodigo arbo. 227 00:14:20,580 --> 00:14:24,400 Ĉio prenis tempon alveni parole, sed la realo estas kun a por buklo 228 00:14:24,400 --> 00:14:27,620 aŭ kun rekursie funkcio, vi povus konstrui tiun aferon ĉe belaj rapidaj. 229 00:14:27,620 --> 00:14:32,440 Do nun ni havas unu nova nodo, kaj ĉiuj el tiuj internaj nodoj estis malloc'd, 230 00:14:32,440 --> 00:14:34,690 supozeble, dum la vojo. 231 00:14:34,690 --> 00:14:38,650 Do nun ĉe la supro de tiu arbo ni havas 100%, sed nun rimarki ni havas vojon 232 00:14:38,650 --> 00:14:43,780 de tiu nova granda-granda-granda-avo al chiuj grandaj-granda-pranepoj 233 00:14:43,780 --> 00:14:45,930 tuta vojo al la fundo, al ĉiuj de la folioj. 234 00:14:45,930 --> 00:14:52,840 >> Kion ni faros nun estas proponi, ke por reprezenti la letero E, 235 00:14:52,840 --> 00:14:55,670 ni simple uzas la numero 1. Kial? 236 00:14:55,670 --> 00:15:01,000 Ĉar se ni trairi ĉi tiu arbo el la fina radiko malsupren al la folio konata kiel E, 237 00:15:01,000 --> 00:15:06,050 ni sekvas nur unu rando, la rajto rando, kaj tio etikeditaj kompreneble en supra dekstra 1. 238 00:15:06,050 --> 00:15:11,550 Do la implikacio tie por Huffman estis ke E de kodigo en duuma estos nur esti 1. 239 00:15:11,550 --> 00:15:14,490 Kaj tio estas bela malbenita efika. Ne povas vere akiri ajna pli malgrandaj ol tio. 240 00:15:14,490 --> 00:15:18,350 Kontraste, A tuj estos reprezentitaj, se vi komprenas la logikon, 241 00:15:18,350 --> 00:15:21,610 per kio mastro de bitoj anstataŭe? 01. 242 00:15:21,610 --> 00:15:25,500 Do por atingi A, ni komencu en la radiko kaj ni iru maldekstren kaj poste ni iros dekstren, 243 00:15:25,500 --> 00:15:28,580 kio signifas ke ni sekvis 0 kaj tiam 1. 244 00:15:28,580 --> 00:15:32,810 Do ni estos reprezenti la litero A kun la mastro 0 kaj 1. 245 00:15:32,810 --> 00:15:36,010 Kaj nun rimarki ni jam havas proprieton de tuja decodability 246 00:15:36,010 --> 00:15:38,090 ke ni ne havis en Morsa kodo. 247 00:15:38,090 --> 00:15:42,840 Kvankam ambaŭ de ĉi tiuj ŝablonoj estas sufiĉe mallonga - E estas 1 bito, A estas 2 bitoj - 248 00:15:42,840 --> 00:15:45,080 rimarki, ke ili ne povas konfuzi unu aŭ la alia, 249 00:15:45,080 --> 00:15:54,870 ĉar se vi vidas 1 ĝi estas alvenis al esti E, se vi vidas 0 tiam a 1 ĝi estas evidente alvenis al esti A. 250 00:15:54,870 --> 00:15:58,410 Simile, kio estas D? 001. 251 00:15:58,410 --> 00:16:01,440 Kio estas C? 0001. 252 00:16:01,440 --> 00:16:05,320 Kaj kio estas B? 0000. 253 00:16:05,320 --> 00:16:09,550 Kaj denove, ĉar ĉiuj el la literoj ni zorgas pri estas ĉe la folioj 254 00:16:09,550 --> 00:16:13,890 kaj neniu el ili estas speco de intermediarios en la vojo de radiko al folio, 255 00:16:13,890 --> 00:16:18,760 ne estas risko de conflating 2 literoj 'malsamaj kodigoj 256 00:16:18,760 --> 00:16:22,300 ĉar ĉiuj el tiuj bitĉenoj estas determina. 257 00:16:22,300 --> 00:16:25,280 0000 estos ĉiam B. 258 00:16:25,280 --> 00:16:29,480 Ne nodo ie inter kiuj vi eble konfuzas unu litero por la aliaj. 259 00:16:29,480 --> 00:16:31,150 Do kio estas la implikaĵon tie? 260 00:16:31,150 --> 00:16:35,080 >> La plej populara leteron - en tiu kazo E - alvenis la plej mallonga kodigo, 261 00:16:35,080 --> 00:16:37,430 Al alvenis la venonta plej mallonga kodigo, 262 00:16:37,430 --> 00:16:41,390 kaj B kaj C, kiun ni jam sciis de la get-go estis speco de la malplej popularaj 263 00:16:41,390 --> 00:16:45,390 ĉe 10% ofteco ĉiu, ili alvenis la plej longa kodigo. 264 00:16:45,390 --> 00:16:49,410 Kaj tiel kion ĉi tio signifas nun estas ke se vi volas sendi mesaĝon ke tio kunpremita 265 00:16:49,410 --> 00:16:51,950 super la Interreto aŭ en retpoŝto aŭ similaj, 266 00:16:51,950 --> 00:16:56,730 anstataŭ uzi norma ASCII, vi povas sendi Huffman kodita mesaĝo 267 00:16:56,730 --> 00:17:01,720 per se vi volas sendi la leteron E, vi sendas nur unu bito. 268 00:17:01,720 --> 00:17:05,680 Se vi volas sendi A, vi sendu 2 bitoj, 01, anstataŭ sendi 8 bitoj 269 00:17:05,680 --> 00:17:10,190 sekvata de alia 8 bitoj sekvita de alia 8 bitoj ks. 270 00:17:10,190 --> 00:17:11,940 Sed estas gotcha tie. 271 00:17:11,940 --> 00:17:17,079 Ne sufiĉas simple konstrui ĉi arbo kaj poste komencu sendi de Alico al Bob 272 00:17:17,079 --> 00:17:20,010 malplilongigita bita aranĝo, kordoj de ASCII, 273 00:17:20,010 --> 00:17:23,140 ĉar Alico ankaŭ devas informi Bob, kion 274 00:17:23,140 --> 00:17:26,880 se Bob tuj povos legi ŝia kunpremita mesaĝon? 275 00:17:26,880 --> 00:17:30,770 [Inaudible studento respondon] >> Kio estas tio? 276 00:17:30,770 --> 00:17:32,310 [Inaudible studento respondon] >> De kio la arbo estas. 277 00:17:32,310 --> 00:17:35,160 Aŭ eĉ pli specife, kion tiuj kodigoj estas, 278 00:17:35,160 --> 00:17:39,010 speciale pro tio ke dum tiu rakonto ni faris juĝon alvoko je unu punkto. 279 00:17:39,010 --> 00:17:43,640 Memoru ke ni devis elekti arbitre inter la 2 malsamaj 20% nodoj? 280 00:17:43,640 --> 00:17:49,800 Do ĝi ne estas la kazo ke Bob, la ricevanto, povas simple rekonstrui la arbo sur sia propra 281 00:17:49,800 --> 00:17:53,390 ĉar eble li kreos la arbo nur milde malsame de Alice. 282 00:17:53,390 --> 00:17:56,670 Cetere, Bob eĉ ne scias, kion la originala mesaĝo estas 283 00:17:56,670 --> 00:18:00,770 ĉar la sola afero Alico sendas lin, kompreneble, estas la kunpremita mesaĝo. 284 00:18:00,770 --> 00:18:05,900 >> Do la kaptita per kunpremo kiel tiu estas kiu, jes, Alico povas savi tutajn multajn bitojn 285 00:18:05,900 --> 00:18:09,900 sendante 1 por E kaj 01 por A kaj tiel plu, 286 00:18:09,900 --> 00:18:15,180 sed ŝi ankaŭ devas informi Bob, kion la surĵeto estas inter literoj kaj bitoj 287 00:18:15,180 --> 00:18:19,620 ĉar ili ne povas klare fidi nur ASCII plu se ni ne uzas ASCII. 288 00:18:19,620 --> 00:18:22,200 Do ŝi povas aŭ sendu lin al la arbo iel - 289 00:18:22,200 --> 00:18:26,600 skribi ĝin sube, stoki ĝin kiel duuma datumoj aŭ io simila - 290 00:18:26,600 --> 00:18:30,280 aŭ simple sendu lin iom cheat folio, la Excel-dosiero, kiu montras la surĵetoj. 291 00:18:30,280 --> 00:18:36,480 Do la efikeco de kunpremo vere supozas ke la mesaĝoj kiujn vi sendas 292 00:18:36,480 --> 00:18:40,230 estas sufiĉe granda, almenaŭ mezgranda, 293 00:18:40,230 --> 00:18:42,180 ĉar se vi sendas la super mallonga mesaĝo, 294 00:18:42,180 --> 00:18:45,390 se vi nur volas sendi la mesaĝon BAD, kiu hazarde estas vorto ni povas literumi tie, 295 00:18:45,390 --> 00:18:49,550 B-Al-D, vi probable tuj uzos malpli bitoj, 296 00:18:49,550 --> 00:18:53,130 sed la ruzo estas se vi ankaŭ devas informi Bob, kion la arbo estas 297 00:18:53,130 --> 00:18:57,530 aŭ kio tiuj kodigoj estas, vi tuj probable superpezas ĉiuj ŝparadoj 298 00:18:57,530 --> 00:19:00,110 havi kunpremita aĵoj por komenci. 299 00:19:00,110 --> 00:19:02,210 Do ĝi povas efektive esti la kazo, ke se vi provos kunpremante 300 00:19:02,210 --> 00:19:05,330 eĉ kun iu kiel zip aŭ formatoj vi eble konas - 301 00:19:05,330 --> 00:19:07,780 bela malgrandaj dosieroj, eĉ malplenajn dosierojn - 302 00:19:07,780 --> 00:19:10,930 kelkfoje tiuj dosieroj povus akiri pli grandan kaj ne pli malgranda. 303 00:19:10,930 --> 00:19:14,320 Sed realisme, kiu okazas nur por malgrandaj dosieron grandecoj, 304 00:19:14,320 --> 00:19:16,920 tial ĝi ne iras fari gigabajto dosieron esti 2 gigabajtoj; 305 00:19:16,920 --> 00:19:19,480 ni vere parolas bitokoj aŭ nur kelkaj kilobajtoj. 306 00:19:19,480 --> 00:19:22,330 >> Iuj programoj kiel zip estas inteligenta sufiĉe por realigi tion, 307 00:19:22,330 --> 00:19:24,590 "Vi tuj elspezi pli bitojn kunpremante ĉi." 308 00:19:24,590 --> 00:19:27,460 "Lasu min, ne ĝeni kunpremante ĝin por vi." 309 00:19:27,460 --> 00:19:30,160 Do ĉi tiu estas nur unu vojo tiam de kunpremante teksto formato. 310 00:19:30,160 --> 00:19:32,300 Ni povus apliki io ​​tiamaniere en C. 311 00:19:32,300 --> 00:19:35,370 Ekzemple, jen kiel ni povus reprezenti nodo en la arbo 312 00:19:35,370 --> 00:19:39,320 kie ni havas char por la simbolo, flosanta valoro por la frekvenco, 313 00:19:39,320 --> 00:19:42,250 kaj kiel ni vidis per niaj aliaj datumstrukturoj, 2 punteros, 314 00:19:42,250 --> 00:19:47,080 1 al la maldekstra infano, 1 al dekstre, ĉu de kion eblas NULL, 315 00:19:47,080 --> 00:19:50,850 sed se ne, ĝi referencas al maldekstra infano kaj dekstra infano. 316 00:19:50,850 --> 00:19:55,130 Do ĉi tiam estas Huffman kodigon, kaj estas unu vojo, kiun vi povas iri sur kunpremante informo, 317 00:19:55,130 --> 00:19:57,880 kaj estas certe unu el la plej facila por apliki 318 00:19:57,880 --> 00:20:00,830 en la kunteksto de, ekzemple, la pasinta semajno datumstrukturoj, 319 00:20:00,830 --> 00:20:03,250 kvankam eĉ pli kompleksa algoritmoj ekzistas 320 00:20:03,250 --> 00:20:08,220 kiu povas fari eĉ pli kompleksa mutacioj de via datumo. 321 00:20:08,220 --> 00:20:11,640 Demandojn tiam arboj, duumaj arboj, aŭ kunpremo de teksto? 322 00:20:11,640 --> 00:20:15,590 [Studento] Ĉu estas iuj ambigueco, kiel se [inaudible] divido en 01, 323 00:20:15,590 --> 00:20:19,160 tiam 011 estus ambigua, ĉu ne? 324 00:20:19,160 --> 00:20:22,730 [Inaudible] >> Bona demando. Ambigueco. 325 00:20:22,730 --> 00:20:25,940 Lasu min resumi pro mencio tiu bildo ĉi tie. 326 00:20:25,940 --> 00:20:29,650 Ĉar la karakteroj vi kunpremante, la reprezentoj de, 327 00:20:29,650 --> 00:20:32,850 per difino de ĉi tiu algoritmo ĉiam restas la folioj, 328 00:20:32,850 --> 00:20:41,870 vi neniam hazarde apliki la saman strukturon de bitoj por la prefikso de multnombraj leteroj. 329 00:20:41,870 --> 00:20:46,740 Do alivorte, vi estas maltrankviligita, ĝi sonas kiel, equívoco ekestanta 330 00:20:46,740 --> 00:20:51,580 per 001 povus esti la komenco de B aŭ la komenco de C aŭ io kiel tio. 331 00:20:51,580 --> 00:20:56,780 Sed tio ne povas esti la kazo pro avizon ke ĉiuj de la literoj de la alfabeto ni kodi 332 00:20:56,780 --> 00:20:58,290 estas je la folioj. 333 00:20:58,290 --> 00:21:01,910 >> La ambigueco povas nur levigxu, kiel en la kazo de Morsa kodo, 334 00:21:01,910 --> 00:21:06,770 se, ekzemple, C estis ie laŭ la vojo de la radiko al B. 335 00:21:06,770 --> 00:21:12,290 [Studento] Ĝuste. Do en tiu kazo, diras A havas 2 folioj. >> Diru A havas - Diru tion denove. 336 00:21:12,290 --> 00:21:18,760 [Studento] Diru A havas 2 foliojn, F kaj G, kaj tiam G - >> Bone. Sed ne povas. 337 00:21:18,760 --> 00:21:23,230 A sin ne povis havi foliojn F kaj G ĉar tiuj literoj C kaj G 338 00:21:23,230 --> 00:21:27,560 estus sin esti lasas ie maldekstren de B aŭ la rajton de E. 339 00:21:27,560 --> 00:21:28,900 Do per difino, ili devas esti folioj. 340 00:21:28,900 --> 00:21:32,940 Alie, vi estas ekzakte pravas, ni ne solvis la problemon, ke Morsa kodo alfrontas. 341 00:21:32,940 --> 00:21:38,150 Bona demando. Aliaj demandoj? Bone. 342 00:21:38,150 --> 00:21:42,050 Ĉi tiu nocio de bitoj, rezultas ni havis potencon tuta tempo, ke ni fakte ne uzis 343 00:21:42,050 --> 00:21:44,200 kiam venis al manipuli tiujn _0s_ kaj _1s_. 344 00:21:44,200 --> 00:21:46,600 Ni demandis pri tio sur unu el la plej fruaj problemo aroj: 345 00:21:46,600 --> 00:21:52,340 nome, kiel vi iradas tra igi majuskle por minuskla aŭ inverse? 346 00:21:52,340 --> 00:21:55,460 Aŭ, pli konkrete, unu el tiuj unuaj psets demandis 347 00:21:55,460 --> 00:22:01,090 kiom da bitoj vi vere devas klaki por ŝanĝi A al minuskla a aŭ inverse? 348 00:22:01,090 --> 00:22:05,580 Jen rapida memoro de kio 65 kaj 97 aspekti en duuma. 349 00:22:05,580 --> 00:22:08,060 Kaj eĉ se tiu demando ia velkis en via memoro, 350 00:22:08,060 --> 00:22:11,290 vi povas vidi denove tie kiom bitoj bezonas esti spegulita 351 00:22:11,290 --> 00:22:15,810 ŝanĝi ĉefurbo A al minuskla a? Nur unu. 352 00:22:15,810 --> 00:22:19,650 >> Ili malsamas nur en unu loko, la tria bito de la maldekstra. 353 00:22:19,650 --> 00:22:24,240 Dum A havas 010, iom oni havas 011. 354 00:22:24,240 --> 00:22:26,250 Do iel ni bezonas nur povos klaki ke iom, 355 00:22:26,250 --> 00:22:29,410 kaj ni povas tiam profiti aŭ minuskla literoj. 356 00:22:29,410 --> 00:22:32,720 Ni faris tion en la pasinteco per efektive uzante se kondiĉoj 357 00:22:32,720 --> 00:22:35,930 kaj kontrolado se la litero estas inter ĉefurbo A kaj ĉefurbo Z, 358 00:22:35,930 --> 00:22:41,480 tiam eligoj kiel A - a + 26 aŭ io kiel tio. 359 00:22:41,480 --> 00:22:46,130 Vi verŝajne faris aritmetika ŝanĝo al la literoj de la alfabeto. 360 00:22:46,130 --> 00:22:49,270 Sed kion se ni povus simple klaki ke sola iom? 361 00:22:49,270 --> 00:22:59,080 Kiel vi povis iri pri preni unu bajto la valoron de bitoj, do 8 bitoj kiel 01000001 kaj 01100001? 362 00:22:59,080 --> 00:23:03,170 Se vi havis tiujn mastrojn de bitoj, kiel oni povas iri ŝanĝi nur unu el ili? 363 00:23:03,170 --> 00:23:07,610 Kio se ni enkondukas en flava tie ĉi aliajn mastro de bitoj? 364 00:23:07,610 --> 00:23:13,420 Se mi faras la tutan flavan string _0s_ krom la malmulto, kiun mi volas ŝanĝi 365 00:23:13,420 --> 00:23:17,900 kaj tiam mi enkonduki novan operatoro konata kiel bitlarĝa operatoro - 366 00:23:17,900 --> 00:23:21,210 Bitlarĝa en la senco ke ĝi funkcias sur individua bitoj, 367 00:23:21,210 --> 00:23:25,360 ne sur tutan bajto aŭ kvar bitokoj ĉiuj samtempe. 368 00:23:25,360 --> 00:23:31,170 Ĉi vertikala streko tie en flava sugestas ke kion se ni prenas la reprezento de kapitalo A 369 00:23:31,170 --> 00:23:37,060 kaj bitlarĝa AŬ ĝin kun la flava vico de bitoj? 370 00:23:37,060 --> 00:23:41,300 Alivorte, pensu denove al nia diskuto de Buleaj esprimoj en Scratch kaj poste en C. 371 00:23:41,300 --> 00:23:47,520 >> Farante Bulea aŭ signifas ke esti vera, ĉu la unua afero devas esti vera 372 00:23:47,520 --> 00:23:50,700 aŭ la dua afero devas esti vera aŭ ili ambaŭ esti vera, 373 00:23:50,700 --> 00:23:53,270 kaj tiam la rezultanta eliro estas sin vera. 374 00:23:53,270 --> 00:24:00,230 En ĉi tiu kazo tie ĉi, kion ni preni se ni 0 "aŭ" ed kun 0? Falsa aŭ falsa? 375 00:24:00,230 --> 00:24:04,280 Estas ankoraŭ falsa, do la minuskla a restas kiel atendita. 376 00:24:04,280 --> 00:24:07,540 Kio se anstataŭe ni faru 1 aŭ 0? 377 00:24:07,540 --> 00:24:12,640 Tiu nun restas 1, sed rimarki kio estas okazonta tie. 378 00:24:12,640 --> 00:24:18,630 Se ni komencos kun ĉefurbo A kaj ni daŭre "aŭ" lia individua bitoj kiel ni faras ĉi tie, 379 00:24:18,630 --> 00:24:25,180 0 aŭ flava donas al ni, kion cxi tie? Ĉi tiu donas ni 1. 380 00:24:25,180 --> 00:24:35,120 Fakte, supozu ke ni ne scias, kion la majuskla versio de iom pli efektive estis. 381 00:24:35,120 --> 00:24:38,270 Ni iru do this. Lasu min movi ĉi reen super tie. 382 00:24:38,270 --> 00:24:42,340 Ni faru ĉi denove. 0 aŭ 0 donas min 0. 383 00:24:42,340 --> 00:24:45,020 1 aŭ 0 donas min 1. 384 00:24:45,020 --> 00:24:48,020 0 aŭ 1 donas al mi 1. 385 00:24:48,020 --> 00:24:52,880 0 aŭ 0 donas min 0. La sekva estas 0, la sekva estas 0, la sekva estas 0. 386 00:24:52,880 --> 00:24:55,660 1 aŭ 0 donas min 1. 387 00:24:55,660 --> 00:24:59,140 Kaj tiel eĉ se ni ne scias anticipe kion minuskla a estis, 388 00:24:59,140 --> 00:25:04,770 simple per "aŭ" ing A kun ĉi ŝablono de bitoj, kiujn ni prezentis tie en flava, 389 00:25:04,770 --> 00:25:09,400 vi povas minuskla majuskla A per flipping ke iom. 390 00:25:09,400 --> 00:25:11,580 Ni uzis tiun esprimon semajnoj: klakanta iom. 391 00:25:11,580 --> 00:25:13,710 Kiel vi efektive fari tion programmatically? 392 00:25:13,710 --> 00:25:16,390 Vi uzas kio ĝenerale nomis maskon, sekvenco de bitoj, 393 00:25:16,390 --> 00:25:19,980 ke en ĉi tiu kazo nur tiel pasas por rigardi kiel ĉi tiu numero tie, 394 00:25:19,980 --> 00:25:22,980 kaj tiam vi "aŭ" ĝi kune uzante tiun novan C operatoro, 395 00:25:22,980 --> 00:25:29,940 Ne | |, vi uzas solan | kaj vi reale preni tiu respondo tie ĉar kial? 396 00:25:29,940 --> 00:25:35,120 Ĉi tiu estas la 1s loko, 2s loko, 4s, 8s, 16s, 32s. 397 00:25:35,120 --> 00:25:42,280 Do rezultas ke se vi prenos majusklo A kaj bitlarĝa AŬ ĝin kun la entjero 32, 398 00:25:42,280 --> 00:25:47,520 ĉar la entjero 32, kiam vi rigardas ĝin kiel bitoj, aspektas kiel ĉi tiu, 399 00:25:47,520 --> 00:25:50,860 kiu signifu vi povas klaki la bito, ke vi efektive volas. 400 00:25:50,860 --> 00:25:52,630 Kaj simile - kaj ni rigardu kodo en nur momento - 401 00:25:52,630 --> 00:25:54,210 supozi ni volas iri la alia direkto. 402 00:25:54,210 --> 00:25:58,210 >> Kiel vi iros de minuskla a al ĉefurbo A? Kiu iom bezonas ŝanĝi? 403 00:25:58,210 --> 00:25:59,820 Ĝi estas la sama. 404 00:25:59,820 --> 00:26:03,970 Ni volas ŝanĝi tion tria bito de 1 al 0. 405 00:26:03,970 --> 00:26:06,310 Kaj kiel povus ni iru sur faras tion? 406 00:26:06,310 --> 00:26:10,130 Kiel ni elŝalti iom? Kun kio mastro de bitoj povis ni elŝalti iom? 407 00:26:11,580 --> 00:26:14,070 Kio se ni ordigi de Inversigar la masko? 408 00:26:14,070 --> 00:26:17,350 Dum antaŭe, ni faris la tuta flava masko _0s_ 409 00:26:17,350 --> 00:26:19,930 krom la iom ni volis ŝalti, 410 00:26:19,930 --> 00:26:25,580 kion se ĉi tiu tempo, ni faros la tuta masko 1s krom la bito, ke ni volas elŝalti 411 00:26:25,580 --> 00:26:28,330 kaj tiam uzi kion operatoro? 412 00:26:28,330 --> 00:26:30,560 Kio se ni "kaj" tion? Ni rigardu. 413 00:26:30,560 --> 00:26:34,880 Se ni nun klaki al ĉi tion, supozu ke denove mi krei masko kiu estas ĉio 1s 414 00:26:34,880 --> 00:26:37,650 krom la malmulto, kiun mi volas elŝalti 415 00:26:37,650 --> 00:26:43,860 kaj tiam, pli ol "aŭ" la blanka nombroj supren supro kun la flava nombroj cxi tie, 416 00:26:43,860 --> 00:26:46,940 kio se mi anstataŭ "kaj" ilin kune? Ĝi estas nomata bitlarĝa kaj. 417 00:26:46,940 --> 00:26:49,450 Logike, ĝi estas la sama afero kiel Bulea kaj. 418 00:26:49,450 --> 00:26:55,160 Tio donas min 0 & 1 estas 0. Do falsaj kaj veraj estas falsaj. 419 00:26:55,160 --> 00:26:58,160 Vera kaj vera estas vera. 420 00:26:58,160 --> 00:27:04,020 Kaj jen la magio: Vera kaj falsa estas nun falsa, do ni elŝaltis ke iom. 421 00:27:04,020 --> 00:27:06,560 Kaj nun la resto de la rakonto estas iom simpla. 422 00:27:06,560 --> 00:27:11,970 Ĉar la resto de la masko estas 1s, ne gravas kion la numeroj estas en blankaj. 423 00:27:11,970 --> 00:27:15,580 Kiam vi "kaj" iu kun vera, vi ne tuj ŝanĝu ĝian valoron. 424 00:27:15,580 --> 00:27:20,200 Se ĝi estas vera, ĝi restos vera. Se ĝi estis falsa, restos falsaj. 425 00:27:20,200 --> 00:27:23,190 >> Sed la magio okazas kiam vi prenas ion kiu estis vera 426 00:27:23,190 --> 00:27:25,430 kaj vi tiam "kaj" ĝin per falsaj. 427 00:27:25,430 --> 00:27:30,030 Ĉi tiu havas la efiki de elŝaltante ke iom. 428 00:27:30,030 --> 00:27:31,980 Do iom críptico tie. 429 00:27:31,980 --> 00:27:35,390 Ni efektive rigardi iom da kodo, kiu povus efektive aspektas eĉ pli kripta, 430 00:27:35,390 --> 00:27:38,220 sed ni rigardu tie en tolower. 431 00:27:38,220 --> 00:27:45,880 Se mi rigardas tolower, irante de ĉefurbo A al minuskla a, 432 00:27:45,880 --> 00:27:47,730 ni vidu kiel ni povus efektivigi ĉi tiun programon. 433 00:27:47,730 --> 00:27:51,280 Jen ĉefa, kaj ĝi ne prenante ajnan komand-linio argumentoj. 434 00:27:51,280 --> 00:27:55,980 Mi deklarante karakteron c por la letero, kiun la uzanto tuj tajpi in 435 00:27:55,980 --> 00:28:00,690 Mi tiam uzi familiara do dum buklo justaj certigi ke la uzanto definitive donas al mi ĉefurbo A 436 00:28:00,690 --> 00:28:05,010 aŭ B aŭ C. .. Z, do ili donas al mi ion inter A kaj Z. 437 00:28:05,010 --> 00:28:08,580 Kaj nun kion mi faras cxi tie? 438 00:28:08,580 --> 00:28:14,870 Mi estas "aŭ" ing ĉi kun 0x20, sed tio estas vere la sama kiel - 439 00:28:14,870 --> 00:28:19,500 kaj ni revenos al tio en momento - 32. 440 00:28:19,500 --> 00:28:24,830 Do denove, 32 estas ĉi ŝablono de bitoj tie. Kial ni scias ĉi tion? 441 00:28:24,830 --> 00:28:26,320 Nur pensu al semajno 0. 442 00:28:26,320 --> 00:28:31,010 Ĉi tiu estas la 1s loko, 2s loko, 4s, 8s, 16s, 32s loko. 443 00:28:31,010 --> 00:28:33,470 Do tiu flava nombro okazas al esti 32. 444 00:28:33,470 --> 00:28:40,570 Mi povas tiam porti leteron kiel la char tie, bitlarĝa "aŭ" ĝi kun laŭvorte la numeron 32, 445 00:28:40,570 --> 00:28:45,250 kaj kion mi reiros? La minuskla versio de tiu char. 446 00:28:45,250 --> 00:28:48,830 Post momento antaŭe, kvankam, mi esprimis tion en alia bazo skribmaniero. 447 00:28:48,830 --> 00:28:51,370 Kion tio reprezentas? >> [Studento] Deksesuma. 448 00:28:51,370 --> 00:28:53,050 [Malan] Tio okazas por reprezenti deksesuma. 449 00:28:53,050 --> 00:28:55,170 Ni ne parolis pri deksesuma cxiuj multe, 450 00:28:55,170 --> 00:28:57,330 sed estas vere konvena en kazoj kiel ĉi tio. 451 00:28:57,330 --> 00:29:01,730 >> Kvankam ĝi aspektas pli kompleksa kaj kvankam ĝi aspektas kiel 20 kaj ne 32, 452 00:29:01,730 --> 00:29:06,240 ĝi rezultas ke deksesuma fakte super konvena notacio 453 00:29:06,240 --> 00:29:10,810 ĉar en deksesuma ĉiu cifero post la 0x - kaj tio signifas nenion; 454 00:29:10,810 --> 00:29:13,960 ĉi tiu estas nur homa konvencio kiu diras tie venas deksesuma nombro - 455 00:29:13,960 --> 00:29:18,590 ĉiu el tiuj ciferoj, la 2 kaj tiam la 0, sin povas esti prezentita 456 00:29:18,590 --> 00:29:20,800 kun precize 4 bitoj. 457 00:29:20,800 --> 00:29:27,840 Do, se ni faras tion, lasu min malfermi tekstoredaktilo tie - bizara autocomplete - 458 00:29:27,840 --> 00:29:35,940 se ni iom tekstoredaktilo tie, la nombro 0x20 signifas ĉi tie estas 4 bitoj, jen alian 4 bitoj. 459 00:29:35,940 --> 00:29:38,050 Ni faros la plej dekstra 4 bitoj unue. 460 00:29:38,050 --> 00:29:44,690 0 kiam reprezentis kun 4 bitoj estas kio? Super facila. Nur ĉiuj _0s_. 461 00:29:44,690 --> 00:29:46,780 Do 4 bitoj kiel _0s_. 462 00:29:46,780 --> 00:29:53,510 Kiel vi reprezentas 2? Jam pasis iom da tempo post kiam ni faris tion, sed estas 0100. 463 00:29:53,510 --> 00:29:57,310 Do ĉi tiu estas la 1s loko, ĉi tiu estas la 2s lokon, kaj tiam ne gravas kion la aliaj lokoj estas. 464 00:29:57,310 --> 00:30:00,610 En aliaj vortoj, en deksesuma vi povus diri 0x20, 465 00:30:00,610 --> 00:30:04,340 sed se vi pensu pri kio estas la 2 kaj kiel estas reprezentita en duuma, 466 00:30:04,340 --> 00:30:07,130 kio estas la 0 kaj kiel estas reprezentita en duuma, 467 00:30:07,130 --> 00:30:10,440 la respondojn al tiuj demandoj estas tio kaj tio, respektive. 468 00:30:10,440 --> 00:30:14,380 Do 0x20 okazas por reprezenti tiun modelon el 8 bitoj, 469 00:30:14,380 --> 00:30:16,880 kiu estas precize la masko kiun ni volis. 470 00:30:16,880 --> 00:30:20,140 Do ĉi tiu estas la momento nur intelekta ekzerco, 471 00:30:20,140 --> 00:30:24,520 sed la realo estas en kodo estas tipe pli komune skribi konstantoj kiel tiu 472 00:30:24,520 --> 00:30:28,360 en deksesuma ĉar tiam la programisto povas relative facile, 473 00:30:28,360 --> 00:30:32,560 eĉ se tio postulas iujn papero kaj krajono, elkompreni kiel tiu ŝablono de bitoj estas 474 00:30:32,560 --> 00:30:35,960 ĉar ne eblas simple esprimi _0s_ kaj _1s_ tipe en kodo. 475 00:30:35,960 --> 00:30:38,540 Vi ne povas iri 00010 ks. 476 00:30:38,540 --> 00:30:42,380 >> Vi devas elekti dekuma aŭ deksesuma aŭ okuma aŭ aliaj notacioj. 477 00:30:42,380 --> 00:30:47,540 Plej multaj homoj emas repreni deksesuma simple por ke ĉiu cifero reprezentas 4 bitoj 478 00:30:47,540 --> 00:30:49,320 kaj vi povas fari tion rapide math. 479 00:30:49,320 --> 00:30:54,990 Kaj mi skuos mian manon je toupper, kiu estas preskaŭ la samaj: ĝi aspektas preskaŭ identaj. 480 00:30:54,990 --> 00:31:01,900 Toupper okazas uzi ne la aŭ operatoro sed prefere tiu ulo kaj df. 481 00:31:01,900 --> 00:31:09,300 Kion df reprezenti? df? Iu? >> [Studento] 255. 482 00:31:09,300 --> 00:31:12,780 255? Ne 255. Tio estus ff. 483 00:31:12,780 --> 00:31:15,210 Ni lasos ĉi tiu kiel iom ekzerco. 484 00:31:15,210 --> 00:31:23,460 Sed se vi iras de 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 kaj tiam kio venas post 9? 485 00:31:23,460 --> 00:31:26,510 Ni estas speco de el decimaloj, sed en deksesuma kio venas post 9? 486 00:31:26,510 --> 00:31:29,510 [Studento] a. >> Do a, b, c, d. 487 00:31:29,510 --> 00:31:33,470 Vi povas kalkuli de tie kio mastro de bitoj d fakte reprezentas. 488 00:31:33,470 --> 00:31:38,850 Kaj se ni faros la math, ni vidos, ke la masko vi finos contrarestar estas identa al tiu. 489 00:31:38,850 --> 00:31:45,580 Tiu estas f, la tuta 1s, kaj ĉi tiu estas d. Do df reprezentas tiun maskon. Bone. 490 00:31:45,580 --> 00:31:50,980 Kaj laste, ne fari tion sonon super, super teknika, 491 00:31:50,980 --> 00:31:53,840 sed supozu ni volis skribi programon kiu faras tion. 492 00:31:53,840 --> 00:31:58,960 Lasu min kaj fari duuma, kiu estas programo en dosiero nomata binary.c. 493 00:31:58,960 --> 00:32:02,050 Kaj nun mi kuros duuma kaj donu al mi nenegativa entjero. 494 00:32:02,050 --> 00:32:03,960 Ni komencu facila kaj tajpu 0. 495 00:32:03,960 --> 00:32:09,010 Tiu nun estas programo kiu presas el entjero en lia duuma reprezento. 496 00:32:09,010 --> 00:32:13,470 Do se mi ludi ĉi tiun ludon denove kaj tajpu en nur 1, mi devus preni 32-bita reprezento de 1. 497 00:32:13,470 --> 00:32:15,490 Se mi faras tion denove kun 2, mi devus preni tion. 498 00:32:15,490 --> 00:32:19,310 Se mi faras 7, mi devus preni kelkajn 1s fine ks. 499 00:32:19,310 --> 00:32:22,740 Ĝi rezultas Mi mencias tion, ĉar kun bitlarĝa operacioj 500 00:32:22,740 --> 00:32:25,490 vi povas reale fari aliajn afero ankaŭ. 501 00:32:25,490 --> 00:32:29,130 Vi povas krei ĉi tiuj maskoj dinamike. 502 00:32:29,130 --> 00:32:32,800 Rigardu ĉi tiu fina ekzemplo engaĝante bitlarĝa operaciojn. 503 00:32:32,800 --> 00:32:35,490 Jen la unua parto de la kodo, instigas la uzanton por nombro, 504 00:32:35,490 --> 00:32:38,130 kaj insistas ke vi donu al mi nenegativa entjero. 505 00:32:38,130 --> 00:32:39,780 Do jen speco de malnova lernejo stuff. 506 00:32:39,780 --> 00:32:41,980 Sed ĉi tie estas iu kiu estas speco de interesa. 507 00:32:41,980 --> 00:32:44,910 >> Kiel mi iros sur presi serion en duuma? 508 00:32:44,910 --> 00:32:48,970 Mi unue persisti el kio al kio? 509 00:32:48,970 --> 00:32:52,270 Kio estas la grandeco de int tipe, almenaŭ en la aparaton? >> [Studento] 4. 510 00:32:52,270 --> 00:32:57,130 Estas 4. Do 4 * 8 estas 32 - 1 estas 31. 511 00:32:57,130 --> 00:33:02,590 Do, se mi komencas rakonti de 31, tio reprezentas, ĝi rezultas, 512 00:33:02,590 --> 00:33:07,630 nur koncepte, la 31 bitoj aŭ la plej alta celo iom, kiu estas tiu ulo super ĉi tie, 513 00:33:07,630 --> 00:33:09,650 dum ĉi tiu tuj estos iom 0. 514 00:33:09,650 --> 00:33:12,850 Do ĉi tiu estas iom 01 ... iom 31. 515 00:33:12,850 --> 00:33:14,950 Do kio estas ĉi tiu kodo faras? 516 00:33:14,950 --> 00:33:20,140 Rimarki tion por ciklo, kvankam ĝi aspektas críptico, estas nur ripetanta el 31 malsupren al 0. Estas tio. 517 00:33:20,140 --> 00:33:24,530 Do la interesa parto nun devas esti en tiuj 5 linioj tie. 518 00:33:24,530 --> 00:33:28,110 Rimarku ke en ĉi tiu lineo mi deklari variablon nomis masko 519 00:33:28,110 --> 00:33:30,790 esti konsekvenca kun nia historio de tiuj flavaj nombroj. 520 00:33:30,790 --> 00:33:32,200 Kaj poste kio ĉi faras? 521 00:33:32,200 --> 00:33:35,720 Tio estas alia bitlarĝa operatoro ni ne vidis antaŭe, plej verŝajne. 522 00:33:35,720 --> 00:33:38,300 Estas la maldekstra skipa operatoro. 523 00:33:38,300 --> 00:33:40,060 Ĉi operatoro tion faras. 524 00:33:40,060 --> 00:33:44,920 Jen estas la nombro 1, kaj se vi faras i forlasis ŝanĝo, maldekstra movo, 525 00:33:44,920 --> 00:33:49,260 kion vi opinias ke ĝi havas la efiki de farante al tiu individua 1? 526 00:33:49,260 --> 00:33:51,290 Laŭvorte sxangxigxantaj aferon. 527 00:33:51,290 --> 00:33:57,540 Do se la nombro 1 estas kion vi havas sur la maldekstra kaj vi komencos per inicializar i al 31, 528 00:33:57,540 --> 00:34:03,490 kio ke tuj fari? Oni tuj prenos ĉi tiu numero 1 kaj ŝanĝi ĝin 31 lokoj super tie. 529 00:34:03,490 --> 00:34:06,210 Kaj ĉar estas evidente neniu alia ciferoj malantaŭ ĝi, 530 00:34:06,210 --> 00:34:10,350 tiuj estos defaŭlte esti anstataŭita per _0s_. 531 00:34:10,350 --> 00:34:15,120 Do vi komencos evi la numeron 1, kiu kompreneble aspektas kiel tiu - 532 00:34:15,120 --> 00:34:18,659 kaj lasu min eltiri ĝin ĉi tie en la centro. 533 00:34:18,659 --> 00:34:22,139 Kaj tiam kiel vi ŝanĝi aferojn al la maldekstra, this guy esence iras tiamaniere. 534 00:34:22,139 --> 00:34:24,659 Sed tuj kiam vi faras tion, 0 gets plenigis in 535 00:34:24,659 --> 00:34:28,360 Se vi ŝanĝi ĝin duafoje, ĝi iras tien kaj alia 0 gets plenigis in 536 00:34:28,360 --> 00:34:31,000 >> Vi ŝanĝi ĝin denove kaj tiam alia 0 gets plenigis in 537 00:34:31,000 --> 00:34:37,900 Do, se vi tion faros el 1 << i 31 lokoj, vi finos duumaj masko 538 00:34:37,900 --> 00:34:42,550 tio estas 32 signojn longa, la plej maldekstra unu el kiuj estas 1, 539 00:34:42,550 --> 00:34:45,199 ĉiuj de la resto de kiuj estas 0. 540 00:34:45,199 --> 00:34:50,880 Kaj ĝi rezultas, kiel flanken, ŝanĝante numero al la maldekstra kiel tiu 541 00:34:50,880 --> 00:34:53,530 Ankaŭ hazarde, kaj kelkfoje oportune, 542 00:34:53,530 --> 00:34:57,520 havas la efiki de farante kion tiu numero? >> [Studento] Dublante ĝin. 543 00:34:57,520 --> 00:35:00,980 Dubli ĉar ĉiu kolono - la 1s loko, 2s loko, 4s loko, 544 00:35:00,980 --> 00:35:05,030 8s loko, 16s loko - they're ĉiuj duobligo kiel vi iros maldekstren. 545 00:35:05,030 --> 00:35:09,500 Aŭ pli ĝuste, kiam vi ŝanĝi la 1s vi tuj finos duobligante la valoron de la nombro. 546 00:35:09,500 --> 00:35:12,070 Vi povas fini faras interesan transformoj de ciferoj 547 00:35:12,070 --> 00:35:15,640 per movo ĉio super tiamaniere per potencoj de 2. 548 00:35:15,640 --> 00:35:17,150 Do kiel faras ĉi tiu laboro? 549 00:35:17,150 --> 00:35:22,580 Ĉi tiam donas al mi masko kiu estas ĉio _0s_ krom 1 en precize la lokon mi volas ĝin, 550 00:35:22,580 --> 00:35:27,920 kaj tiam ĉi tiu esprimo, kiu estas ŝtelita de toupper.c, 551 00:35:27,920 --> 00:35:31,770 Estas simple diri preni la nombro n kiu la uzanto tajpas en, 552 00:35:31,770 --> 00:35:34,730 "Kaj" ĝin kun tiu masko, kaj kion vi intencas akiri? 553 00:35:34,730 --> 00:35:39,200 Vi ricevos de 1 se estas 1 en tiu maskita situo, 554 00:35:39,200 --> 00:35:41,570 aŭ vi tuj ricevas 0 se ne. 555 00:35:41,570 --> 00:35:44,370 Kaj tial ĉiuj ĉi programo ne efektive estas ĝi havas buklo, 556 00:35:44,370 --> 00:35:48,340 kaj ĝi kreas masko kun 1 pli tie, tiam 1 pli tie, tiam 1 pli tie, 557 00:35:48,340 --> 00:35:52,950 kaj uzas ĉi bitlarĝa KAJ lertaĵo por diri ĉu estas a 1 bito en la uzanto enigo tie? 558 00:35:52,950 --> 00:35:59,220 >> Ĉu estas a 1 bito en la uzanto enigo tie? Kaj se jes, laŭvorte presi 1, alie presi 0. 559 00:35:59,220 --> 00:36:03,780 Ni faras tion kun ints nur ĉar tio estas kial ni faras 32 bitoj anstataŭ 8, 560 00:36:03,780 --> 00:36:06,900 sed kion ni enkondukis do estas ĉi bitlarĝa KAJ, ĉi bitlarĝa _OR_, 561 00:36:06,900 --> 00:36:10,450 kaj ĉi maldekstra skipa operatoro, kiu estas ne ofte terure helpema, 562 00:36:10,450 --> 00:36:12,230 sed ĝi rezultas ke ili povas esti. 563 00:36:12,230 --> 00:36:16,560 Fakte, se vi estus por reprezenti iun kiel tabelo de Booleans 564 00:36:16,560 --> 00:36:21,260 nur por reprezenti vera aŭ falsa, supozas ke vi volis konservi trako de ĉu ĉu ne 565 00:36:21,260 --> 00:36:24,630 ĉambron plenan de 300 lernantoj ĉeestas, 566 00:36:24,630 --> 00:36:29,420 vi povus deklari tabelo de grandeco 300 de tipo bool tiel ke vi ricevas 300 bools, 567 00:36:29,420 --> 00:36:33,090 kaj vi povas agordi ĉiun al vera se iu estas cxi tie kaj falsaj alie. 568 00:36:33,090 --> 00:36:37,550 Kial estas ke reprezento en tiu datumstrukturo ineficiente? 569 00:36:39,370 --> 00:36:44,800 Kio estas malbona pri la dezajno de tiu datumstrukturo, tabelo de 300 bools? 570 00:36:46,190 --> 00:36:49,600 Kio estas bool, fakte, sub la kapuĉo? 571 00:36:49,600 --> 00:36:52,310 Ĉi tio, ankaŭ, estas iu kiu povus ne esti konata. 572 00:36:52,310 --> 00:36:53,720 Ĝi rezultas ne ekzistas bool. 573 00:36:53,720 --> 00:36:56,620 Memoru ni ia kreis tiun kun la cs50.h dosiero, 574 00:36:56,620 --> 00:36:58,630 kiuj sin inkluzivas normo bool. 575 00:36:58,630 --> 00:37:00,930 C estas speco de mutaj, tamen, kiam temas pri bool. 576 00:37:00,930 --> 00:37:04,880 Ĝi uzas 8 bitojn por reprezenti ĉiun bool, kiu estas tute malŝparo 577 00:37:04,880 --> 00:37:09,040 ĉar evidente, kiom da bitoj vi bezonas por reprezenti bool? Nur 1. 578 00:37:09,040 --> 00:37:13,190 Do rezultas ke se vi nun havas la kapablon kun bitlarĝa operatoroj 579 00:37:13,190 --> 00:37:17,760 manipuli individuaj bitoj eĉ en char, eĉ en sola bajto, 580 00:37:17,760 --> 00:37:21,380 rezultu vi povus malgrandiĝi la memoro necesa por reprezenti ion stulta 581 00:37:21,380 --> 00:37:25,490 kiel tiu asistencia styled datumstrukturo per faktoro de 8. 582 00:37:25,490 --> 00:37:29,820 Anstataŭ uzi ok bitoj por reprezenti vera aŭ malvera, vi povus laŭvorte uzi unu 583 00:37:29,820 --> 00:37:34,500 uzante nur bajton por cxiu ok studentoj en la klaso 584 00:37:34,500 --> 00:37:41,990 kaj toggling de 0 al 1 individuaj bitoj por uzi ĉi tiuj specoj de malalta nivelo trukojn. 585 00:37:43,850 --> 00:37:49,460 Tio vere ĉesigis la energio. Ĉu estas demandoj pri bitlarĝa operacioj? 586 00:37:49,460 --> 00:37:52,710 >> Yeah. >> [Studento] Ĉu estas ekskluziva aŭ operatoro? 587 00:37:52,710 --> 00:37:56,440 Jes. Tie estas ekskluziva aŭ operatoro kiu similas tiun, ^, la karoto simbolo, 588 00:37:56,440 --> 00:38:02,070 kio signifas nur la unua horo aŭ la dua afero povas esti 1 por la eligo esti 1. 589 00:38:02,070 --> 00:38:07,750 Estas ankaŭ ne, ~, kion permesos al vi inversigi a 0 al 1 aŭ inverse kiel bone. 590 00:38:07,750 --> 00:38:11,600 Kaj estas ankaŭ dekstra skipa operatoro, >>, kiu estas la malo de la ni vidis. 591 00:38:11,600 --> 00:38:13,850 Bone. Ni prenu tion nun al pli alta nivelo. 592 00:38:13,850 --> 00:38:16,770 Ni komencas per paroli pri teksto kaj tiam kunpremante ĝin 593 00:38:16,770 --> 00:38:19,650 kaj reprezentante la tekston kun malpli nombroj de bitoj; 594 00:38:19,650 --> 00:38:22,890 ni parolis iom pri kiel ni povas nun starti manipulanta aĵoj sur bitlarĝa nivelo. 595 00:38:22,890 --> 00:38:26,640 Ni nun zoom back up 10.000 piedojn reprezento 596 00:38:26,640 --> 00:38:29,250 de pli kompleksaj aĵoj kiel grafikaĵoj. 597 00:38:29,250 --> 00:38:32,950 Jen ni havas flago de Germanio, tie ni havas unu el Francio. 598 00:38:32,950 --> 00:38:36,350 Tiuj povus esti reprezentita en formatoj vi eble scias - gifs, ekzemple. 599 00:38:36,350 --> 00:38:40,030 Se vi iam vidis bildon en la retejo kiu enfluas en. Gif, 600 00:38:40,030 --> 00:38:43,000 ĉi tiu estas grafika interŝanĝo formato. 601 00:38:43,000 --> 00:38:47,530 Tiuj du flagoj tie ia pruntas al kunpremo 602 00:38:47,530 --> 00:38:52,050 por kio eble evidenta kialo? >> [Inaudible studento respondon] 603 00:38:52,050 --> 00:38:53,440 Ekzistas multe da ripetado, ĉu ne? 604 00:38:53,440 --> 00:38:57,270 Por sendi la germana flago, pensu pri ĉi tion kiel esti bildo sur la ekrano 605 00:38:57,270 --> 00:38:59,030 apogi en via Scratch tagoj. 606 00:38:59,030 --> 00:39:02,380 Vi povus memori ke estas individuaj rastrumeroj aŭ punktoj kiuj formas bildon. 607 00:39:02,380 --> 00:39:06,650 >> Ekzistas tuta vico de nigraj punktoj kaj alia tuta vico de nigraj punktoj. 608 00:39:06,650 --> 00:39:10,110 Ekzistas aro da vicoj de nigraj punktoj, ke ni povus vidi se ni vere zoomed en, 609 00:39:10,110 --> 00:39:13,370 multe kiel kiam ni zoomed en sur Rob vizaĝon en Photoshop. 610 00:39:13,370 --> 00:39:15,500 Tuj kiam ni atingis pli kaj pli profunden kaj pli profunden en la bildo, 611 00:39:15,500 --> 00:39:19,990 vi komencis vidi la pixelation, ĉiuj de la kvadratoj kiuj formis lian okulon en tiu kazo. 612 00:39:19,990 --> 00:39:24,130 Sama traktado ĉi tie. Se ni zoomed en sufiĉe, vi vidus individuaj punktoj. 613 00:39:24,130 --> 00:39:27,110 Nu, jen speco de malŝparo de bitoj. 614 00:39:27,110 --> 00:39:32,120 Se triono de la flago estas nigra kaj triono de la flago estas flava kaj tiel plu, 615 00:39:32,120 --> 00:39:34,860 kial ne povas ni iel kunpremi ĉi flago? 616 00:39:34,860 --> 00:39:39,560 Kaj eĉ la franca flago povis kunpremita kvankam la ŝablono estas iomete malsamaj. 617 00:39:39,560 --> 00:39:44,120 Rezultas la GIF-dosiero formato estas _lossless_ kompakta formato, 618 00:39:44,120 --> 00:39:48,420 kio signifas ke vi povas preni bildon kiel la germana flago tie, 619 00:39:48,420 --> 00:39:53,540 vi povas forĵeti multe da liaj bitoj sen oferi kvalito. 620 00:39:53,540 --> 00:39:55,340 Ĉi tiu estas en kontrasto kun iu kiel JPEG-oj, 621 00:39:55,340 --> 00:39:57,050 kun kiu la plimulto de ni estas probable pli familiara. 622 00:39:57,050 --> 00:39:59,000 Facebook fotoj kaj Flickr fotoj kaj similaj 623 00:39:59,000 --> 00:40:02,200 estas preskaŭ ĉiam savis kiel JPEG-oj kiam ili estas alŝutis, 624 00:40:02,200 --> 00:40:08,100 sed JPEG-oj estas perdoj - Lossy - formato per vi forĵetu bitoj 625 00:40:08,100 --> 00:40:10,430 sed vi ankaŭ forĵeti kvalito. 626 00:40:10,430 --> 00:40:13,890 Kaj do se vi kunpremi fotoj kun Photoshop aŭ alŝuti ilin al Facebook 627 00:40:13,890 --> 00:40:15,580 aŭ preni ilin sur vere sterko telefono, 628 00:40:15,580 --> 00:40:19,510 vi scias, ke la bildo komencas akiri tre splotchy kaj pixelated, 629 00:40:19,510 --> 00:40:22,290 kaj tio estas ĉar ĝi estas esti kompresita por la komputilo aŭ telefono 630 00:40:22,290 --> 00:40:24,550 per laŭvorte ĵeti informoj for. 631 00:40:24,550 --> 00:40:28,500 Sed GIF estas mirinda en tiu povas uzi malpli da bitoj ol forto defaŭlte 632 00:40:28,500 --> 00:40:30,750 sen perdi iun informon. 633 00:40:30,750 --> 00:40:32,410 >> Kaj esence faras jene. 634 00:40:32,410 --> 00:40:38,740 Anstataŭ vendejo en dosiero kiel BMP would RGB triobla por nigro, nigra, nigra, nigra, 635 00:40:38,740 --> 00:40:42,570 nigraj, nigraj, nigraj, nigraj, nigraj, nigraj, nigraj, nigraj kaj tiel plu, 636 00:40:42,570 --> 00:40:45,640 pli ĝuste, la GIF formato tuj diru "Nigra", 637 00:40:45,640 --> 00:40:48,330 kaj tiam, "Ripetu tiun 100 fojojn," aŭ io simila. 638 00:40:48,330 --> 00:40:52,280 "Nigra, ripeti ĉi 100 fojojn, nigra, ripeti ĉi 100 fojoj ..." 639 00:40:52,280 --> 00:40:54,530 "Flava, ripeti ĉi 100-foje." 640 00:40:54,530 --> 00:40:57,200 Kaj tiel memoras, esence, la plej maldekstra rastrumeroj 641 00:40:57,200 --> 00:41:02,160 kaj tiam kodas iel la nocio de ripeti ke rastrumeroj denove kaj denove. 642 00:41:02,160 --> 00:41:06,110 Do gifs povas tiam kunpremi sin sen perdi iun informon. 643 00:41:06,110 --> 00:41:09,510 Sed se vi devis diveni, se tiu estas la algoritmo kiu gifs uzo, 644 00:41:09,510 --> 00:41:13,180 kiu el tiuj flagoj, kvankam ili aspektas identa en grandeco, 645 00:41:13,180 --> 00:41:19,620 tuj estos pli malgranda kiam savis en disko kiel GIF? >> [Studento] Germanio. 646 00:41:19,620 --> 00:41:21,660 Germanio tuj estos pli malgranda? Kial? 647 00:41:21,660 --> 00:41:26,620 [Studento] Ĉar vi ripetas multfoje horizontale 648 00:41:26,620 --> 00:41:29,010 kaj tiam vi ripetu alia tempo. >> Ekzakte. 649 00:41:29,010 --> 00:41:32,020 Ĉar la homoj kiuj elpensis GIF nur speco de arbitre decidis 650 00:41:32,020 --> 00:41:36,040 ke la ripeto estos leveraged horizontale kaj ne flanke. 651 00:41:36,040 --> 00:41:40,900 Estas multe pli ripeto flanke tie en la germana flago ol en la franca flago. 652 00:41:40,900 --> 00:41:44,430 Do, se ni vere malfermi dosierujon sur mia malmola disko kiu havas tiujn gifs, 653 00:41:44,430 --> 00:41:51,920 vi povas fakte vidi ke la germana flago tie estas 2 kilobajtoj kaj la franca estas 4 kilobajtoj. 654 00:41:51,920 --> 00:41:54,080 Okazas ke estas koincido ke unu estas dufoje la alia, 655 00:41:54,080 --> 00:41:57,960 sed estas fakte la kazo ke la franca flago estas multe pli granda. 656 00:41:57,960 --> 00:42:01,250 >> Kvankam ni parolas tie ĉi pri grafiko, la samaj ideoj povas apliki al 657 00:42:01,250 --> 00:42:05,150 ne aĵojn kiel flagoj sed bildojn kiuj estas iom pli kompleksa. 658 00:42:05,150 --> 00:42:08,170 Se vi fotu pomon, certe ekzistas multaj duobligo tie, 659 00:42:08,170 --> 00:42:11,040 do ni povus iel memoras ke la defaŭlta fono estas blua 660 00:42:11,040 --> 00:42:13,230 kaj ne, kiel la dekstra bildo sugestas, 661 00:42:13,230 --> 00:42:16,830 devas memori la koloro de ĉiu unuopa rastrumeroj en ĉi foto. 662 00:42:16,830 --> 00:42:21,060 Do ni povas ĵeti bitoj for tie sen perdi informojn. 663 00:42:21,060 --> 00:42:23,340 La pomo ankoraŭ aspektas precize la sama. 664 00:42:23,340 --> 00:42:27,510 En ĉi tiu ekzemplo tie ĉi, eble vi vidos kio okazas en filmo. 665 00:42:27,510 --> 00:42:31,970 Tiuj reprezentas la malnova lernejo filmo bobenoj per la supro bildo tie 666 00:42:31,970 --> 00:42:36,900 vi havas RV kondukado pasinteco domon kaj arbo. 667 00:42:36,900 --> 00:42:42,130 Kaj kiel tiu iras pelas pasinteco de maldekstre al dekstre, kio evidente ne ŝanĝi? 668 00:42:42,130 --> 00:42:45,320 La domo ne tuj ie, kaj la arbo estas iras nenien. 669 00:42:45,320 --> 00:42:47,700 La sola afero, kiu moviĝas estas la kamioneto en ĉi tiu kazo. 670 00:42:47,700 --> 00:42:51,650 Do kiel Fona neŝanĝita sugestas, kion vi povas fari en filmoj 671 00:42:51,650 --> 00:42:56,530 Estas simile simple forĵeti informon kiu ne ŝanĝas en inter kulisoj. 672 00:42:56,530 --> 00:42:58,900 Ĉi tiu estas ĝenerale konata kiel interframe kunpremo 673 00:42:58,900 --> 00:43:02,120 per se ĉi tiu kadro aspektas preskaŭ identa al ĉi tiu, 674 00:43:02,120 --> 00:43:05,390 ni ne tedis stokante en disko iu el la identa informoj 675 00:43:05,390 --> 00:43:09,250 pri tiuj interaj kadroj, ni nur uzas ŝlosilo kadroj tempaltempe 676 00:43:09,250 --> 00:43:13,420 ke efektive stoki tiun informon redundantly same iom prudento kontroli. 677 00:43:13,420 --> 00:43:18,620 >> Kontraŭe, alia alproksimiĝo al kunpremante video estas en ĉi tiu dua kaj suba ekzemplo tie ĉi, 678 00:43:18,620 --> 00:43:23,970 kie anstataŭ vendejo 30 kadroj, kial vi ne simple stoki 15 kadroj por dua loko? 679 00:43:23,970 --> 00:43:27,070 Anstataŭ la filmo speco de fluanta bele, perfekte, 680 00:43:27,070 --> 00:43:30,060 eble aspektas kiel ĝi estas balbutas iom, iom malnova lernejo, 681 00:43:30,060 --> 00:43:37,190 sed la pura efekto estos uzi multe malpli ol bitoj povus alie esti necesa. 682 00:43:37,190 --> 00:43:39,240 Do kie tio ĉi do lasu nin? 683 00:43:39,240 --> 00:43:41,700 Tio estis iom de flanken sur kie ajn vi povas iri per kunpremo. 684 00:43:41,700 --> 00:43:45,140 Por pli sur tiu, preni klaso kiel CS175 tie. 685 00:43:45,140 --> 00:43:46,990 Jen alia ekzemplo ene video. 686 00:43:46,990 --> 00:43:49,190 Se la abelo estas la sola afero movanta, 687 00:43:49,190 --> 00:43:51,790 vi povas vere forĵeti informoj en tiuj mezo kadroj 688 00:43:51,790 --> 00:43:55,260 ĉar la floro kaj ĉielo kaj folioj ne ŝanĝas. 689 00:43:55,260 --> 00:43:57,960 Sed ni nun konsideras unu lastan aferon. 690 00:43:57,960 --> 00:44:03,890 En la sekvaj 5 minutoj ni lasas C malantaŭ ĉiam en prelego? Jes. Ne en la psets, though. 691 00:44:03,890 --> 00:44:10,210 Lasta rakonto pri C kaj tiam ni atingos tre sexy stuff 692 00:44:10,210 --> 00:44:13,870 engaĝante HTML kaj retejo kaj woo-hoo. Bone. 693 00:44:13,870 --> 00:44:16,050 Ĉi tie ni iru. Tio estas la motivado. 694 00:44:16,050 --> 00:44:20,020 Ĝi rezultas tiel tempo kiam ni estis skribante programoj ni kuras Clang. 695 00:44:20,020 --> 00:44:23,890 Kaj Clang, ni diris ekde la unua semajno preskaux, prenas fontokodo 696 00:44:23,890 --> 00:44:25,740 kaj konvertas ĝin en celkodo. 697 00:44:25,740 --> 00:44:28,540 Ĝi prenas C kaj konvertas ĝin en _0s_ kaj _1s_. 698 00:44:28,540 --> 00:44:32,150 Mi ia kuŝis kun vi dum kelkaj semajnoj pro tio ne tiom simpla. 699 00:44:32,150 --> 00:44:36,750 >> Estas multe pli okazas sub la kapuĉo, kiam vi kuris de programo kiel Clang. 700 00:44:36,750 --> 00:44:39,560 Fakte, la procezo de kompili programo povas vere resumi, 701 00:44:39,560 --> 00:44:42,210 kiel vi eble memoras de Rob la video sur tradukiloj, 702 00:44:42,210 --> 00:44:47,580 en tiuj 4 paŝoj: antaŭ-prilaborado, kompilante, ariganta, kaj kunligi. 703 00:44:47,580 --> 00:44:51,950 Sed ni en la klaso kaj plej multaj homoj en la mondo tipe resumi ĉiuj tiuj ŝtupoj 704 00:44:51,950 --> 00:44:54,410 kiel simple "kompili". 705 00:44:54,410 --> 00:44:58,070 Sed se ni komencos kun fontkodo kiel ĉi tiu, memori ĉi estas eble la plej simpla C programon 706 00:44:58,070 --> 00:45:03,530 ni skribas tiel malproksime, memori ke kiam kompilis finu rigardante kiel ĉi tio. 707 00:45:03,530 --> 00:45:07,310 Sed estas vere intera paŝo, kaj tiuj paŝoj estas kiel sekvas. 708 00:45:07,310 --> 00:45:10,750 Unue estas tio afero ĉe la plejsupro de ĉi tiu kaj la plimulto de niaj programoj, 709 00:45:10,750 --> 00:45:13,550 # Include 710 00:45:13,550 --> 00:45:17,210 Kion # include do por ni? 711 00:45:17,210 --> 00:45:24,150 Ĝi sufiĉe kopioj kaj pastes la enhavo de stdio.h en mian dosieron por ke kial? 712 00:45:24,150 --> 00:45:27,220 Kial mi zorgas pri la enhavo de stdio.h? Kio estas en tie de intereso? 713 00:45:27,220 --> 00:45:32,310 Printf deklaro, lia prototipo, por ke la tradukilo do scias, kion mi volas diri 714 00:45:32,310 --> 00:45:34,900 kiam mi mencias ĉi funkcio printf. 715 00:45:34,900 --> 00:45:39,390 Do paŝo 1 en kompili estas antaŭ-prilaborado, per programo kiel Clang 716 00:45:39,390 --> 00:45:43,450 aŭ iu helpanto programo kiu Clang venas kun legas viajn kodo supre sube, 717 00:45:43,450 --> 00:45:47,740 maldekstre dekstren, kaj iam vidas # simbolo sekvis per ŝlosilvorto kiel inkluzivas, 718 00:45:47,740 --> 00:45:53,980 ĝi plenumas ke operacio, kopii kaj bati en ĉi tiu kazo stdio.h en vian dosieron. 719 00:45:53,980 --> 00:45:55,510 Tio estas paŝo 1. 720 00:45:55,510 --> 00:45:59,620 Tiam vi havas multe pli grandan C dosieron pro la grandega kopion, alglui Tasko nur okazis. 721 00:45:59,620 --> 00:46:01,710 >> Paŝo 2 nun kompili. 722 00:46:01,710 --> 00:46:04,880 Sed ĝi rezultas kompili prenas fontkodon kiu similas tiun 723 00:46:04,880 --> 00:46:08,160 kaj li igas iun kiu aspektas kiel ĉi tiu, 724 00:46:08,160 --> 00:46:12,560 kiu por tiuj, kiuj konas nomas? >> [Studento] Asembleo. >> Asembleo lingvo. 725 00:46:12,560 --> 00:46:16,700 Tio estas vere io se vi prenos CS61 vi plonĝi en pli detale. 726 00:46:16,700 --> 00:46:22,380 Tio estas preskaŭ kiel fermi kiel vi povas alveni al skribi _0s_ kaj _1s_ mem 727 00:46:22,380 --> 00:46:25,850 sed skribi tion en tia maniero, ke ankoraŭ faras almenaŭ iomete da senco. 728 00:46:25,850 --> 00:46:30,760 Tio estas maŝino instrukciojn, kaj se ni rulu suben ĝis la ĉefa funkcio ĉi tie, 729 00:46:30,760 --> 00:46:35,470 rimarki, ke ekzistas tiu puŝo instrukcio, movi instrukcio, subtrahi instrukcio, 730 00:46:35,470 --> 00:46:38,550 voki instrukcio, kaj tiel plu. 731 00:46:38,550 --> 00:46:42,930 Kiam vi aŭdos, ke via komputilo havas Intel ene, 732 00:46:42,930 --> 00:46:46,180 vi havas Intel CPU en via Mac aŭ PC, kion tio signifas? 733 00:46:46,180 --> 00:46:51,200 Al CPU venas konstruita de kompanioj kiel Intel kompreni iujn instrukciojn. 734 00:46:51,200 --> 00:46:55,770 Ili ne havas ideon kion funkciojn kiel interŝanĝa estas aŭ ĉefa estas per si mem, 735 00:46:55,770 --> 00:47:00,060 sed ili scias kio tre malalta nivelo instrukcioj kiel aldoni, subtrahi, push, 736 00:47:00,060 --> 00:47:02,430 movi, nomita ks estas. 737 00:47:02,430 --> 00:47:06,170 Do kiam vi kompili C kodon en asembla lingvo, 738 00:47:06,170 --> 00:47:11,820 viaj tre amikaj uzanto-aspekta kodo estas igita iu kiu aspektas kiel ĉi tiu, 739 00:47:11,820 --> 00:47:21,670 kiu laŭvorte movas bitokoj aŭ 4 bitokoj ĉirkaŭe en tia malgranda unuoj ene kaj ekstere de la CPU. 740 00:47:21,670 --> 00:47:26,820 Sed fine, kiam Clang pretas preni tiun reprezenton de via programo 741 00:47:26,820 --> 00:47:30,940 en _0s_ kaj _1s_, tiam la paŝo nomis ensamblando okazas, 742 00:47:30,940 --> 00:47:33,850 kaj ĉi denove ĉio okazas en la blink de okulo al la kuri Clang. 743 00:47:33,850 --> 00:47:39,300 Ni komencas tie, ĝi eligas dosieron kiel ĉi tiu, kaj tiam ĝi konvertas ĝin al tiuj _0s_ kaj _1s_. 744 00:47:39,300 --> 00:47:42,000 Kaj se vi volas reiri al iu punkto kaj reale vidas ĉi tion en ago, 745 00:47:42,000 --> 00:47:48,220 se mi iros en hello1.c--ĉi estas unu el la unuaj programoj ni rigardis - 746 00:47:48,220 --> 00:47:53,710 kutime ni kompilos tion kun Clang hello1.c kaj ĉi tio donas al ni a.out. 747 00:47:53,710 --> 00:47:59,890 Se kontraste vi anstataŭ doni al ĝi la-S flago, kion vi ricevos estas hello1.s 748 00:47:59,890 --> 00:48:02,750 kaj vi reale vidi la asembla lingvo. 749 00:48:02,750 --> 00:48:05,750 >> Mi faras tion por tre mallonga programo, sed se vi reiros por Scramble 750 00:48:05,750 --> 00:48:08,740 aŭ reakiri aŭ ajna programo vi skribis kaj nur pro scivolemo 751 00:48:08,740 --> 00:48:13,240 volas vidi kio reale similas, kio reale esti nutrata en la CPU, 752 00:48:13,240 --> 00:48:15,700 vi povas uzi tiun-S flago kun Clang. 753 00:48:15,700 --> 00:48:17,770 Sed tiam laste, ekzistas ankoraŭ unu gotcha. 754 00:48:17,770 --> 00:48:21,810 Jen la _0s_ kaj _1s_ kiuj reprezentas mian efektivigo de saluton, mondo. 755 00:48:21,810 --> 00:48:25,530 Sed mi uzis iu alia funkcio en mia programo. 756 00:48:25,530 --> 00:48:28,710 Do kvankam la procezo estis mi prenos hello.c, 757 00:48:28,710 --> 00:48:34,280 ĝi prenas kompilita en asembleo kodo, kaj poste ĝi prenas kolektiĝis en _0s_ kaj _1s_, 758 00:48:34,280 --> 00:48:37,460 la sola _0s_ kaj _1s_ kiuj outputted je ĉi tiu punkto en tempo 759 00:48:37,460 --> 00:48:40,270 estas kiuj rezultas el mia kodo. 760 00:48:40,270 --> 00:48:44,400 Sed la persono, kiu skribis printf, ili kompilis sian kodon 20 jaroj 761 00:48:44,400 --> 00:48:47,000 kaj ĝi estas nun instalita ie sur la aparaton, 762 00:48:47,000 --> 00:48:51,610 do ni iel devas mem kunfandi sia _0s_ kaj _1s_ kun mia _0s_ kaj _1s_, 763 00:48:51,610 --> 00:48:56,160 kaj kiu alportas al ni la 4a kaj lasta paŝo de kompili, konata kiel kunligi. 764 00:48:56,160 --> 00:48:58,680 Do sur la maldekstra flanko havas la ĝusta sama bildo kiel antaŭe: 765 00:48:58,680 --> 00:49:02,580 hello.c igas asembleo kodo igas _0s_ kaj _1s_. 766 00:49:02,580 --> 00:49:05,960 Sed memoru, ke mi uzis la normo / S biblioteko en mia kodo, 767 00:49:05,960 --> 00:49:10,350 kaj tio signifas ie en la komputilo ekzistas dosiero nomata stdio.c 768 00:49:10,350 --> 00:49:13,980 aŭ almenaŭ la kompilita versio gxiaj ĉar iu kelkajn jarojn antaŭe 769 00:49:13,980 --> 00:49:18,530 kompilita stdio.c en asembleo kodo kaj tiam tuta amaso de _0s_ kaj _1s_. 770 00:49:18,530 --> 00:49:21,130 Tio estas kio konata kiel statika aŭ dinamika biblioteko. 771 00:49:21,130 --> 00:49:23,350 Estas iuj dosieron sidis ie en la aparaton. 772 00:49:23,350 --> 00:49:28,710 >> Sed laste, mi devas preni mian _0s_ kaj _1s_ kaj tiu persono _0s_ kaj _1s_ 773 00:49:28,710 --> 00:49:32,760 kaj iel ligi ilin kune, laŭvorte kombini tiujn _0s_ kaj _1s_ 774 00:49:32,760 --> 00:49:37,900 en sola dosiero nomata a.out aŭ hello1 aŭ kion ajn mi nomis mia programo 775 00:49:37,900 --> 00:49:43,320 tiel ke la fina rezulto havas ĉiujn 1s kaj _0s_ kiu devus formi mian programon. 776 00:49:43,320 --> 00:49:45,660 Do ĉio ĉi tempo ĉi semestro kiam vi estis uzante Clang 777 00:49:45,660 --> 00:49:48,750 kaj eĉ pli ĵus kuras fari por kuri Clang, 778 00:49:48,750 --> 00:49:53,580 ĉiuj el tiuj paŝoj ili okazas ia instantáneamente sed tre intence. 779 00:49:53,580 --> 00:49:57,830 Kaj do se vi daŭrigas sur en komputiko, nome CS61, 780 00:49:57,830 --> 00:50:00,850 ĉi tiu estas la mantelo ke vi daŭre senŝeligi reen ekstere tie 781 00:50:00,850 --> 00:50:06,980 parolante pri efikeco, sekureco implikaĵoj, kaj similaj de tiuj malsupera nivelo detaloj. 782 00:50:06,980 --> 00:50:09,220 Sed kun tio, ni estas irontaj C malantaŭe. 783 00:50:09,220 --> 00:50:11,420 Ni iru antaŭen kaj prenu nian 5-minuta paŭzo nun, 784 00:50:11,420 --> 00:50:14,190 kaj kiam ni revenos: Interreto. 785 00:50:17,280 --> 00:50:19,170 Bone. Ni estas dorso. 786 00:50:19,170 --> 00:50:23,590 Nun ni komencas nian rigardon ne nur en HTML ĉar, kiel vi vidas, 787 00:50:23,590 --> 00:50:26,050 HTML mem estas fakte bela simpla 788 00:50:26,050 --> 00:50:29,270 sed vere en retejo programado pli ĝenerale, retoj pli ĝenerale, 789 00:50:29,270 --> 00:50:31,770 kaj kiel ĉiu el tiuj teknologioj kunfluos 790 00:50:31,770 --> 00:50:35,400 por permesi al ni krei multe pli kompleksajn programojn sur de la Interreto 791 00:50:35,400 --> 00:50:38,690 ol ĝis nun ni povis en tiuj nigraj kaj blankaj fenestroj. 792 00:50:38,690 --> 00:50:42,140 Ja, en ĉi tiu punkto en la semestro kvankam ni elspezos relative malpli da tempo 793 00:50:42,140 --> 00:50:46,200 en PHP, HTML, CSS, JavaScript, SQL kaj pli, 794 00:50:46,200 --> 00:50:48,480 plej lernantoj fari finas faras finon projektoj kiuj estas ttt-bazita 795 00:50:48,480 --> 00:50:51,230 ĉar kiel vi vidas, la fono vi nun havas en C 796 00:50:51,230 --> 00:50:54,450 estas tre aplikebla al tiuj pli altnivelaj lingvoj. 797 00:50:54,450 --> 00:50:56,800 >> Kaj kiel vi starti pensante pri via fina projekto, 798 00:50:56,800 --> 00:50:59,940 kiu, multe kiel Problemo Ara 0, kie vi kuraĝigis 799 00:50:59,940 --> 00:51:02,160 fari preskaŭ kion ajn de intereso al vi en Scratch, 800 00:51:02,160 --> 00:51:05,790 la fina projekto estas via ŝanco por preni vian ĵus malkovrita scio kaj savvy kun C 801 00:51:05,790 --> 00:51:09,850 aŭ PHP aŭ JavaScript aŭ similaj ekster di spino 802 00:51:09,850 --> 00:51:12,330 kaj krei viajn tre propra peco de programaro por la mondo por vidi. 803 00:51:12,330 --> 00:51:17,770 Kaj al semoj vi kun ideoj, sciu ke vi povas direkti tie, projects.cs50.net. 804 00:51:17,770 --> 00:51:21,800 Ĉiu jaro, ni petas ideojn de fakultato kaj bastonon kaj studento grupoj sur kampuso 805 00:51:21,800 --> 00:51:27,330 nur por submeti siajn ideojn por interesaj aĵoj kiuj povus esti solvita uzanta komputiloj, 806 00:51:27,330 --> 00:51:29,860 uzante retejoj, uzante programaro. 807 00:51:29,860 --> 00:51:32,360 Do se vi luktas por veni supren kun ideo de via propra, 808 00:51:32,360 --> 00:51:35,790 por supozita rulumi tra la ideoj tie ĉi jaro kaj daŭras. 809 00:51:35,790 --> 00:51:39,990 Estas perfekte bone por pritrakti projekto kiu estis traktitaj antaŭe. 810 00:51:39,990 --> 00:51:44,540 Ni vidis multajn apps por vidi la staton de lesivejo sur campus, 811 00:51:44,540 --> 00:51:47,000 multaj apps por navigi la manĝejo menuo, 812 00:51:47,000 --> 00:51:49,540 multaj apps por navigi la kurso katalogo kaj similaj. 813 00:51:49,540 --> 00:51:53,680 Kaj efektive, en estonta konferenco kaj en estonteco seminarioj, 814 00:51:53,680 --> 00:51:57,750 ni enkondukos vin al iu publike havebla API, ambaŭ komerce havebla 815 00:51:57,750 --> 00:52:02,520 tiel kiel tie disponeblaj de CS50 la campus por ke vi havas aliron al la datumoj 816 00:52:02,520 --> 00:52:04,910 kaj povas fari interesajn aferojn kun ĝi. 817 00:52:04,910 --> 00:52:09,380 Do pli en fino projektoj en kelkaj tagoj kiam ni liberigos la specifo, 818 00:52:09,380 --> 00:52:12,990 sed por nun, sciu ke vi povas labori sole aŭ kun unu aŭ du amikoj 819 00:52:12,990 --> 00:52:16,010 sur plej ajna projekto de intereso al vi. 820 00:52:16,010 --> 00:52:18,080 Interreto. 821 00:52:18,080 --> 00:52:22,300 Vi antaŭeniri kaj eltiri via portebla, iru al facebook.com por la unua fojo, 822 00:52:22,300 --> 00:52:27,020 ne esti ensalutinta ĵus, kaj poste premu butonon Enter. Kion ekzakte okazas? 823 00:52:27,020 --> 00:52:30,150 >> Kiam vi batis Entajpu en via komputilo, tuta aro da paŝoj 824 00:52:30,150 --> 00:52:32,600 komenci ia magie okazas. 825 00:52:32,600 --> 00:52:35,960 Do vi tie sur la maldekstra, retservilo kiel Facebook estas ĉi tie sur la dekstra, 826 00:52:35,960 --> 00:52:42,500 kaj iel vi uzas ĉi lingvo nomata HTTP, Hipertextual Transfer Protocol. 827 00:52:42,500 --> 00:52:46,770 HTTP estas ne programlingvo. Estas pli de protokolo. 828 00:52:46,770 --> 00:52:52,310 Ĝi estas aro de konvencioj, ke TTT-legiloj kaj ttt-serviloj uzas kiam intercommunicating. 829 00:52:52,310 --> 00:52:54,360 Kaj kion tio signifas estas kiel sekvas. 830 00:52:54,360 --> 00:52:56,790 Multe kiel en la reala mondo, ni havas ĉi tiujn konvenciojn 831 00:52:56,790 --> 00:53:00,140 kie se vi renkontas iun homa por la unua fojo, se vi ne ĝenas humoring min ĉi tie, 832 00:53:00,140 --> 00:53:03,980 Mi ne venis al vi, diru: "Saluton, mia nomo estas David." >> Saluton, Davido. Mia nomo estas Sammy. 833 00:53:03,980 --> 00:53:05,770 "Saluton, Davido. Mia nomo estas Sammy." 834 00:53:05,770 --> 00:53:08,310 Do nun ni jxus partoprenis en ĉi tia stulta homo protokolo 835 00:53:08,310 --> 00:53:12,200 kie mi komencis la protokolo, Sammy respondis, 836 00:53:12,200 --> 00:53:15,060 ni skuis manon, kaj la transakcio estas kompleta. 837 00:53:15,060 --> 00:53:18,260 HTTP estas tre simila en spirito. 838 00:53:18,260 --> 00:53:23,350 Kiam via retumilo petoj www.facebook.com, 839 00:53:23,350 --> 00:53:27,020 kion via retumilo estas vere faras estas etendante lia mano, por tiel diri, 840 00:53:27,020 --> 00:53:29,960 al la servilo kaj ĝin sendi ĝin mesaĝon. 841 00:53:29,960 --> 00:53:34,220 Kaj tiu mesaĝo estas tipe iu kiel get - Kion vi volas? - 842 00:53:34,220 --> 00:53:38,740 min la hejmpaĝo, kiu estas tipe signifita per sola oblikvo fine de URL. 843 00:53:38,740 --> 00:53:43,790 Kaj ĝuste tial vi scias kiu lingvo mi parolas, mi la retumilo tuj rakontos al vi 844 00:53:43,790 --> 00:53:46,930 ke mi parolas HTTP versio 1.1, 845 00:53:46,930 --> 00:53:51,980 Kaj ankaŭ por bonan mezuron, mi tuj diros al vi ke la gastiganto, ke mi volas la hejmpaĝo de 846 00:53:51,980 --> 00:53:54,120 estas facebook.com. 847 00:53:54,120 --> 00:53:57,730 Tipe, retumilo, Sen scii al vi, la homo, 848 00:53:57,730 --> 00:54:03,350 sendas ĉi tiun mesaĝon tra la Interreto, kiam vi simple tajpi www.facebook.com, 849 00:54:03,350 --> 00:54:05,370 >> Enter, en via retumilo. 850 00:54:05,370 --> 00:54:07,300 Kaj kion tio Facebook respondi kun? 851 00:54:07,300 --> 00:54:12,540 Ĝi respondas kun iu simila aspekto críptico detaloj sed ankaŭ multe pli. 852 00:54:12,540 --> 00:54:14,310 Lasu min al Facebook ĉefpaĝon ĉi tie. 853 00:54:14,310 --> 00:54:17,480 Ĉi tiu estas la ekrano ke la plimulto el ni probable neniam vidos se vi restas ensalutinta tuta tempo, 854 00:54:17,480 --> 00:54:19,830 sed ĉi tiu estas ja ilia hejmpaĝo. 855 00:54:19,830 --> 00:54:24,150 Se ni faras tion en Chrome, rimarkos, ke vi povos tiri tiujn iom kuntekston menuoj. 856 00:54:24,150 --> 00:54:26,980 Uzanta Chrome, ĉu en Mac OS, Vindozo, Linukso, aŭ similaj, 857 00:54:26,980 --> 00:54:31,840 se vi Kontrolo klako aŭ maldekstra klako, oni povas tipe elsxiros menuo kiu similas tiun, 858 00:54:31,840 --> 00:54:35,870 kie kelkaj ebloj atendi, unu el kiuj estas Montri Paĝo Fonto. 859 00:54:35,870 --> 00:54:39,920 Vi povas ankaŭ tipe atingos tion irante al la Montri menuon kaj ŝovas ĉirkaŭe. 860 00:54:39,920 --> 00:54:42,750 Ekzemple, jen sub View, Developer estas la sama afero. 861 00:54:42,750 --> 00:54:45,780 Mi tuj iros antaŭen kaj rigardu Montri Paĝo Fonto. 862 00:54:45,780 --> 00:54:50,800 Kion vi vidas estas la HTML kiu Mark skribis por reprezenti facebook.com. 863 00:54:50,800 --> 00:54:55,910 Estas kompleta salaton tie, sed ni vidos ke tio igas iom pli sentita antaŭ longe. 864 00:54:55,910 --> 00:54:59,840 Sed estas iuj ŝablonoj ĉi tie. Lasu min rulumi malsupren al plenigos ŝatas tion. 865 00:54:59,840 --> 00:55:05,730 Tio estas malfacile por homa legi, sed rimarkas ke estas tio mastro de angled krampoj 866 00:55:05,730 --> 00:55:10,360 kun ŝlosilvortoj kiel eblo, ŝlosilvortoj kiel valoro, iuj quoted kordoj. 867 00:55:10,360 --> 00:55:15,660 Tie estas kie, kiam vi subskribis ĉe la unua fojo, specifita kion via naskiĝo jaro estas. 868 00:55:15,660 --> 00:55:19,020 Ke falmenuo de naskiĝo jaroj iel kodas tie 869 00:55:19,020 --> 00:55:23,870 en tiu ĉi lingvo nomata HTML, hiperteksta Markup Language. 870 00:55:23,870 --> 00:55:27,730 En aliaj vortoj, kiam via retumilo petas retpaĝon, 871 00:55:27,730 --> 00:55:30,610 ĝi parolas ĉi konvencio nomata HTTP. 872 00:55:30,610 --> 00:55:35,170 Sed kion signifas facebook.com respondi al tiu peto kun? 873 00:55:35,170 --> 00:55:38,260 >> Ĝi respondas kun iuj de tiuj críptico mesaĝojn, kiel ni vidos en momento. 874 00:55:38,260 --> 00:55:43,760 Sed la plejparto de ĝia respondo estas en la formo de HTML, hiperteksta Markup Language. 875 00:55:43,760 --> 00:55:47,170 Tio estas la reala lingvo en kiu retpaĝo estas skribita. 876 00:55:47,170 --> 00:55:52,030 Kaj kia foliumilo ja do, sur ricevo de iu kiu aspektas kiel ĉi tiu, 877 00:55:52,030 --> 00:55:57,120 legas supre sube, maldekstre dekstren, kaj iam vidas unu el tiuj angled krampoj 878 00:55:57,120 --> 00:56:03,370 sekvate de ŝlosilvorto kiel eblo, ĝi montras ke markado lingvo en la taŭgan vojon. 879 00:56:03,370 --> 00:56:06,820 En ĉi tiu kazo, estus montri al falmenuo da jaroj. 880 00:56:06,820 --> 00:56:09,240 Sed denove, tio estas kompletan malordon por rigardi. 881 00:56:09,240 --> 00:56:16,630 Tio ne estas ĉar Facebook programistoj manifestas 0 por 5 por stilon, ekzemple. 882 00:56:16,630 --> 00:56:20,190 Tiu estas ĉar la plejparto de la kodo kiun ili skribas estas, fakte, skribita bele, 883 00:56:20,190 --> 00:56:22,450 bone dirita, bonguste dentado, kaj similaj, 884 00:56:22,450 --> 00:56:26,080 sed kompreneble maŝinoj, komputiloj, kroziloj vere ne fajfas 885 00:56:26,080 --> 00:56:27,890 ĉu via kodo estas bone-styled. 886 00:56:27,890 --> 00:56:33,100 Kaj fakte, ĝi estas tute malŝparo bati la langeton ŝlosilo ĉiuj tiuj epokoj 887 00:56:33,100 --> 00:56:37,650 kaj meti komentojn ĉiuj viaj kodo kaj elekti vere priskriba variablo nomoj 888 00:56:37,650 --> 00:56:42,340 ĉar se la retumilo ne zorgas, ĉiuj vi faras al la fino de la tago estas malŝparas bajtoj. 889 00:56:42,340 --> 00:56:46,660 >> Do rezultas kio plej retejoj fari estas kvankam la fontkodon por facebook.com, 890 00:56:46,660 --> 00:56:49,550 por cs50.net kaj ĉiuj tiuj aliaj retejoj en Interreto 891 00:56:49,550 --> 00:56:53,730 estas tipe bone skribita kaj bone dirita kaj bele dentado kaj similaj, 892 00:56:53,730 --> 00:56:59,270 tipe antaux la retejo estas metita sur la Interreto, la kodo estas minified, 893 00:56:59,270 --> 00:57:02,970 per la HTML kaj la CSS - ion alian ni baldaŭ vidos - 894 00:57:02,970 --> 00:57:05,960 la kodo JavaScript ni baldaŭ vidos kunpremas, 895 00:57:05,960 --> 00:57:09,250 per longa variablo nomoj fariĝis X kaj Y kaj Z, 896 00:57:09,250 --> 00:57:13,900 kaj ĉiuj de tiu spaceto, kiu faras ĉion tiel legebla estas ĉiuj forĵetis, 897 00:57:13,900 --> 00:57:17,700 ĉar se vi opinias pri tio ĉi maniero, Facebook ricevas miliardoj paĝo batas unu tago - 898 00:57:17,700 --> 00:57:21,670 ion frenezan tiel - tiel kion se programisto nur esti anal 899 00:57:21,670 --> 00:57:26,660 batis la spaco trinkejo unu ekstra tempo nur por indent iu linio de kodo iam tiel pli? 900 00:57:26,660 --> 00:57:29,500 Kio estas la implikacio se Facebook konfitas ke spaceto 901 00:57:29,500 --> 00:57:32,880 en ĉiuj bitokoj ili redonu al homoj sur la interreto? 902 00:57:32,880 --> 00:57:36,400 Bati la spaco trinkejo fojo donas ekstran bajto en via dosiero. 903 00:57:36,400 --> 00:57:39,730 Kaj se miliardo da homoj tiam procedi por elŝuti la hejmpaĝo tiu tago, 904 00:57:39,730 --> 00:57:42,060 kiom pli datumoj vi transdonita en la Interreto? 905 00:57:42,060 --> 00:57:45,200 Al gigabajto sen bona kialo. 906 00:57:45,200 --> 00:57:48,510 Kaj donis, por multaj retejoj ĉi tio ne estas tiom skalebla afero, 907 00:57:48,510 --> 00:57:51,030 sed por Facebook, por Google, por iu el la plej popularaj retejoj 908 00:57:51,030 --> 00:57:54,860 ekzistas granda stimulo finance fari vian kodo aspektas kiel salaton 909 00:57:54,860 --> 00:57:58,980 por ke vi uzas kiel malmultaj bitokoj kiel eble krom tiam kunpremante ĝin 910 00:57:58,980 --> 00:58:01,500 uzante iun kiel zip, algoritmo nomita gzip, 911 00:58:01,500 --> 00:58:04,250 ke la retumilo faras por vi aŭtomate. Sed tio estas terura. 912 00:58:04,250 --> 00:58:08,060 Ni neniam lernos ion pri fremdaj retejojn kaj kiel desegni retpaĝoj 913 00:58:08,060 --> 00:58:09,680 se ni devas rigardi ĝin kiel ĉi tio. 914 00:58:09,680 --> 00:58:13,620 >> Do feliĉe, retumiloj kiel Chrome kaj IE kaj Firefox tiujn tagojn 915 00:58:13,620 --> 00:58:16,450 tipe venas kun enkonstruita en programisto iloj. 916 00:58:16,450 --> 00:58:21,730 Fakte, se mi iros tien por Esploru Elemento aŭ se mi iras al Rigardi, Developer, 917 00:58:21,730 --> 00:58:25,220 kaj iru al Developer Agordoj eksplicite, 918 00:58:25,220 --> 00:58:27,640 tiun fenestron ĉe la fundo de mia ekrano nun Popoj supren. 919 00:58:27,640 --> 00:58:31,230 Ĝi estas iom timiga unue ĉar ekzistas multe da nekonataj langetoj tie, 920 00:58:31,230 --> 00:58:34,510 sed se mi alklaku Elementoj tuta vojo ĉe la malsupro maldekstro, 921 00:58:34,510 --> 00:58:38,810 Chrome estas evidente tre saĝa. Ĝi scias kiel interpreti ĉio ĉi kodon. 922 00:58:38,810 --> 00:58:42,320 Kaj tiel kion Chrome faras estas ĝi purigas la tutan de Facebook HTML. 923 00:58:42,320 --> 00:58:45,680 Kvankam tie ne estas spaceto tie, tie ne estas deŝovon tie, 924 00:58:45,680 --> 00:58:51,120 nun rimarkas, ke mi povas komenci navigi ĉi retpaĝo des pli jerárquicamente. 925 00:58:51,120 --> 00:58:56,910 Rezultas, ke ĉiu retpaĝo skribita en lingvo nomita HTML5 devus komenci per tio, 926 00:58:56,910 --> 00:59:03,980 ĉi DOCTYPE deklaro, por tiel diri: 927 00:59:03,980 --> 00:59:07,840 Estas speco de lumo kaj griza tie, sed tio estas la unua linio de kodo en tiu dosiero, 928 00:59:07,840 --> 00:59:12,080 kaj ke nur rakontas la retumilo, "Hej, jen venas iu HTML5. Jen venas retpaĝo." 929 00:59:12,080 --> 00:59:18,490 La unua malferma krampo preter tiu hazarde estas tiu afero, malferma krampo HTML tag, 930 00:59:18,490 --> 00:59:22,320 kaj poste, se mi plonĝi en profundan - tiuj sagoj estas tute sensignifa; 931 00:59:22,320 --> 00:59:25,140 ili nur por prezento, kalkaj, ili ne estas reale en la dosiero - 932 00:59:25,140 --> 00:59:30,300 rimarki, ke ene de Facebook HTML tag, io kiu komencas kun malferma krampo 933 00:59:30,300 --> 00:59:32,910 kaj tiam vorto nomiĝas etikedo. 934 00:59:32,910 --> 00:59:38,610 Do ene de la HTML-etikedo estas ŝajne kapo etikedo kaj korpo etikedo. 935 00:59:38,610 --> 00:59:41,930 Ene de la kapo etikedo nun estas tuta salaton ĉe Facebook 936 00:59:41,930 --> 00:59:45,620 ĉar ili havas multajn pridatumon kaj aliaj aĵoj por marketing kaj publikeco. 937 00:59:45,620 --> 00:59:50,600 >> Sed se ni rulumu malsupren, suben, suben, suben, vidu kie estas. Jen ĝi. 938 00:59:50,600 --> 00:59:52,210 Ĉi tiu estas almenaŭ iom familiara. 939 00:59:52,210 --> 00:59:55,990 La titolo de Facebook ĉefpaĝon, se vi iam rigardas en la langeton en via titolo trinkejo, 940 00:59:55,990 --> 00:59:59,060 Estas Bonvenon al Facebook - Log In, Membriĝi aŭ Lerni pli. 941 00:59:59,060 --> 01:00:01,110 Tio estas kion vi vidus en Chrome titolo trinkejo, 942 01:00:01,110 --> 01:00:03,100 kaj tiel estas kiel ĝi estas reprezentita en kodo. 943 01:00:03,100 --> 01:00:08,090 Se ni ignoras ĉion alian en la kapo, la plejparto de la intestoj de paĝo retejo estas en la korpo, 944 01:00:08,090 --> 01:00:10,940 kaj tio rezultas ke Facebook kodo tuj serĉos pli kompleksa 945 01:00:10,940 --> 01:00:14,540 ol la plimulto tion ni skribas komence nur ĉar ĝi estas konstruitaj super la jaroj, 946 01:00:14,540 --> 01:00:17,260 sed ekzistas tuta amaso de skripto etikedoj, JavaScript kodo, 947 01:00:17,260 --> 01:00:18,870 kiu faras la retejo tre interaga: 948 01:00:18,870 --> 01:00:22,330 vidante stato ĝisdatigoj instantáneamente uzante lingvoj kiel JavaScript. 949 01:00:22,330 --> 01:00:25,270 Estas io nomata div, kiu estas divido de artikolo. 950 01:00:25,270 --> 01:00:27,940 Sed antaŭ ol atingi tiun detalon, ni provu malzomi 951 01:00:27,940 --> 01:00:31,920 kaj rigardi pli simplan version de Facebook 1.0, por tiel diri. 952 01:00:31,920 --> 01:00:34,740 Jen la saluton, mondo de retpaĝoj. 953 01:00:34,740 --> 01:00:37,370 Ĝi havas tiun DOCTYPE deklaro ĉe la plejsupro 954 01:00:37,370 --> 01:00:40,280 kiu estas iom malsama ĉio alia. 955 01:00:40,280 --> 01:00:46,130 Nenio pli ni skribu en retpaĝo tuj komenci kun 01:00:48,880 kaj krom iu nomita komentoj en HTML. 957 01:00:48,880 --> 01:00:53,000 Sed plejparte, ĉiu en retpaĝo estas malferma krampo, ŝlosilvorto, proksime krampo. 958 01:00:53,000 --> 01:00:56,220 >> En ĉi tiu kazo vi vidas la plej simpla el retpaĝoj eblas. 959 01:00:56,220 --> 01:01:00,260 La HTML tag enhavas kapo etikedo kaj enhavas korpo etikedo, 960 01:01:00,260 --> 01:01:04,580 sed rimarkas ke estas tiu nocio de startanta kaj haltante etikedoj. 961 01:01:04,580 --> 01:01:11,360 Ĉi tiu estas la komenco etikedo por HTML, ĉi tiu estas la proksima tag aŭ fino etikedo. 962 01:01:11,360 --> 01:01:15,400 Rimarku ke ili estas speco de kontraŭaj en la senco ke la proksima tag aŭ fino etikedo 963 01:01:15,400 --> 01:01:20,030 tio ĉi antaŭen slash interne de mem. 964 01:01:20,030 --> 01:01:23,540 Dume, estas malfermita kapo etikedo tie kaj proksima kapo etikedo tie. 965 01:01:23,540 --> 01:01:26,880 >> Estas malfermita titolo kaj proksima titolo etikedo tie. 966 01:01:26,880 --> 01:01:29,850 La fakto ke mi metis la titolon en unu linio, pure arbitra. 967 01:01:29,850 --> 01:01:33,760 Simple aspektis kiel ĝi taŭgus bele en unu linio, do mi ne tedis bati Entajpu paron foje. 968 01:01:33,760 --> 01:01:38,200 Dume, la korpo, mi faris indent nur esti cxiam tiom klara. 969 01:01:38,200 --> 01:01:41,050 Rimarku ke HTML estas bela muta lingvo. 970 01:01:41,050 --> 01:01:43,410 Fakte, tie en la tago antaŭ ol estis WYSIWYG redaktiloj 971 01:01:43,410 --> 01:01:46,770 kaj Microsoft Word, kie vi povas diri, "Faru ĉi kuraĝa, klarigu kursivo," 972 01:01:46,770 --> 01:01:50,850 vi fakte tajpi iom ordonojn en eseoj 20 + jaroj 973 01:01:50,850 --> 01:01:55,740 per vi dirus, "Start farante ĉi tiu teksto grasaj. Ĉesu farante ĉi tiu teksto grasaj." 974 01:01:55,740 --> 01:01:59,010 "Komenci realigi tiun tekston kursive. Ĉesu farante ĉi tiu teksto kursivo." 975 01:01:59,010 --> 01:02:01,850 >> Tion HTML aŭ iu ajn markado lingvo estas. 976 01:02:01,850 --> 01:02:05,530 Ĉi tiu unua etikedo diras, "Hej, foliumilo. Jen venas iu HTML." 977 01:02:05,530 --> 01:02:09,880 La venonta tag diras, "Hej, foliumilo. Jen venas la kapo, la kaplinio de mia retpaĝo." 978 01:02:09,880 --> 01:02:11,650 "Hej, foliumilo. Jen venas la titolo." 979 01:02:11,650 --> 01:02:15,880 Kaj tiam tie, "Hej, foliumilo. Estas tio por la titolo." 980 01:02:15,880 --> 01:02:20,000 Do jen kiel la retumilo scias ne plu montras pli signoj ol saluton, mondo 981 01:02:20,000 --> 01:02:21,860 en la titolo trinkejo. 982 01:02:21,860 --> 01:02:23,640 Dume, tiu diras, "Tio estas por la kapo." 983 01:02:23,640 --> 01:02:28,340 Ĉi tio diras, "Jen venas la korpo. Jen la efektiva korpo" - laŭvorte, la vortoj saluton, mondo. 984 01:02:28,340 --> 01:02:33,190 Kaj tion diras ĉi tie, "Tio estas por la korpo. Estas tio por la HTML." 985 01:02:33,190 --> 01:02:34,640 Do foliumiloj estas bela muta. 986 01:02:34,640 --> 01:02:39,920 Ili nur legi tiun stuff supre sube, maldekstre dekstren, kaj faru precize kion ili diras al li. 987 01:02:39,920 --> 01:02:41,860 Ni efektive fari iom ekzemplo tie. 988 01:02:41,860 --> 01:02:46,240 Lasu min malfermi la plej simpla de programoj sur mia Mac ĉi tie, nome TextEdit. 989 01:02:46,240 --> 01:02:48,220 En Windows vi povus uzi Notepad.exe. 990 01:02:48,220 --> 01:02:50,520 Sed tio estas ĉio kion vi bezonas por komenci farante retpaĝoj. 991 01:02:50,520 --> 01:02:53,730 Mi tuj iros antaŭen kaj nur kopii kaj alglui ĉi tiun kodon al ĉi tiu dosiero. 992 01:02:53,730 --> 01:02:57,210 Mi tuj iros antaŭen per ĝi sur mia labortablo, 993 01:02:57,210 --> 01:03:01,220 kaj mi tuj por savi ĉi tiun kiel hello.html, 994 01:03:01,220 --> 01:03:03,840 kaj nun la dosiero nomata hello.html. 995 01:03:03,840 --> 01:03:05,690 Jen ĝi en mia labortablo. 996 01:03:05,690 --> 01:03:11,130 Permesu al mi iri en foliumilo kaj treni la dosieron en la foliumilo. 997 01:03:11,130 --> 01:03:14,060 Kaj voila, tie estas mia unua retpaĝo. 998 01:03:14,060 --> 01:03:17,340 Rimarku ke la titolo de la langeton estas saluton, mondo kiel por la titolo etikedo, 999 01:03:17,340 --> 01:03:20,040 kaj avertas ke saluton, mondo estas la korpo de mia retpaĝo, 1000 01:03:20,040 --> 01:03:22,190 kaj woo-hoo, mi estas en la interreto. 1001 01:03:22,190 --> 01:03:24,700 >> Mi ne vere, rajto, ĉar ĉi dosiero ne estas en la interreto. 1002 01:03:24,700 --> 01:03:28,330 Ĝi okazas al esti sur mia loka malmola disko en tiu aparta vojo. 1003 01:03:28,330 --> 01:03:32,720 Sed la ideo estas la sama. Ĉiuj ni nun bezonas estas servanto retejo al kiu alŝuti ĝin. 1004 01:03:32,720 --> 01:03:37,410 Sed unue ni vere enkonduki iom pli komplekseco kaj iom pli estilización. 1005 01:03:37,410 --> 01:03:39,890 Tiu estas simpla, se enuiga, retpaĝo. 1006 01:03:39,890 --> 01:03:41,990 Ĝi rezultas estas aliaj tipoj de etikedoj ni povas uzi. 1007 01:03:41,990 --> 01:03:45,530 Ekzemple, jen en flava mi enkondukis 2 novaj etikedoj. 1008 01:03:45,530 --> 01:03:49,630 Ni ne ludis multe kun tiuj hodiaŭ, sed rimarki ke la ligilo etikedo 1009 01:03:49,630 --> 01:03:52,520 iel aspektas malsama ĉio alia. 1010 01:03:52,520 --> 01:03:55,370 La ligilo etikedo prenas kion nomas atributoj, 1011 01:03:55,370 --> 01:03:59,770 kaj atributo estas iu kiu modifas la konduton de etikedo. 1012 01:03:59,770 --> 01:04:03,840 En ĉi tiu kazo ne estas la pli bona elekto de nomoj, ligilo, ĉar ĝi estas iom sensignifa, 1013 01:04:03,840 --> 01:04:11,590 sed ĉi ligilon etikedo diras, esence, inkluzivi la dosieron nomata styles.css interne de mia retpaĝo. 1014 01:04:11,590 --> 01:04:15,400 Vi povas pensi pri tio kiel analogan al C estas # include direktivo. 1015 01:04:15,400 --> 01:04:19,650 Styles.css estas referenco al alia lingvo tute, ke ni ne ludas kun hodiaŭ, 1016 01:04:19,650 --> 01:04:23,790 sed estas por estetiko: tiparo grandecoj, koloroj, Plenigado, deŝovon, randoj, 1017 01:04:23,790 --> 01:04:26,040 kaj ĉiuj de tiu speco de estetiko detalo. 1018 01:04:26,040 --> 01:04:28,820 Dume, la skripto etikedo estas funkcie simila, 1019 01:04:28,820 --> 01:04:33,140 sed anstataŭ inkluzivas CSS, ke lingvo, ĝi inkludas alian lingvon, JavaScript. 1020 01:04:33,140 --> 01:04:37,810 Do alivorte, kun tiuj 2 etikedoj mi eventuale povos skribi mian propran retpaĝon 1021 01:04:37,810 --> 01:04:41,490 sed ankaŭ tiri en kodo, ke mi aŭ iu alia skribis 1022 01:04:41,490 --> 01:04:44,350 por ke ni povas stari sur fremda ŝultroj, ni povas praktiki bonan dezajnon, 1023 01:04:44,350 --> 01:04:46,120 faktoranta ekster komuna kodo. 1024 01:04:46,120 --> 01:04:49,090 Se mi havas 10 malsamajn retpaĝojn, ĉi tio signifas ke iuj el miaj estetiko 1025 01:04:49,090 --> 01:04:52,490 povas esti faktorita eksteren, multe kiel # include, en aparta dosiero. 1026 01:04:52,490 --> 01:04:54,420 Do ni ricevas tie. 1027 01:04:54,420 --> 01:04:57,180 Sed ni fakte unue faru ion pli interesan kun ĉi tiu dosiero. 1028 01:04:57,180 --> 01:05:01,110 >> Denove, tio estas nur TextEdit. Mi ne estas teknike en Interreto ankoraŭ, sed ni ricevos tie. 1029 01:05:01,110 --> 01:05:04,910 Mi ŝatus fari saluton, mondo iom revenante pli aŭdacaj ol ĝi estas. 1030 01:05:04,910 --> 01:05:10,890 Do saluton, ni arbitre diras por grasaj. 1031 01:05:10,890 --> 01:05:15,910 Denove, la historio estas la sama: saluton, komo, starti farante tiun aŭdacan, 1032 01:05:15,910 --> 01:05:19,730 tiam mondo gets presita en grasaj, kaj ĉi tio signifas halti presi tion en grasaj. 1033 01:05:19,730 --> 01:05:24,020 Lasu min, kaj savu mian dosieron, reiru al Chrome, mi zomi en nur tiel ni povas vidi ĝin pli bone, 1034 01:05:24,020 --> 01:05:27,870 kaj reŝarĝi, kaj vi vidos ke mondo estas nun en grasaj. 1035 01:05:27,870 --> 01:05:31,810 La retejo estas ĉion pri hiperligoj, do ni faru ĉi: 1036 01:05:31,810 --> 01:05:38,550 mia preferita retejo estas, diru, youtube.com. 1037 01:05:38,550 --> 01:05:43,810 Savi, reŝargi. Okay. Jen kelkaj problemoj nun krom la hideousness de la retejo. 1038 01:05:43,810 --> 01:05:47,310 1, Mi sufiĉe certas ke mi batis Entajpu ĉi tie. Kaj mi faris. 1039 01:05:47,310 --> 01:05:51,590 Mi ne nur batis Enter, mi ankaŭ dentado, praktikante kion ni estis predikante pri stilo, 1040 01:05:51,590 --> 01:05:54,930 sed mia estas tuj apud mondo. 1041 01:05:54,930 --> 01:05:58,410 Do kial estas tio? Foliumiloj nur faras kion vi diros al ili. 1042 01:05:58,410 --> 01:06:04,010 Mi ne diris al la retumilo, "Break linioj tie. Enmeti alineon rompi ĉi tie." 1043 01:06:04,010 --> 01:06:07,820 Do la retumilo, ne gravas se mi batis Reiri 30 fojojn, 1044 01:06:07,820 --> 01:06:10,820 ĝi estas ankoraŭ tuj metos Mian tuj apud mondo. 1045 01:06:10,820 --> 01:06:15,930 Kion mi vere devas fari ĉi tie estas diri ion kiel
, enŝovu linerompo. 1046 01:06:15,930 --> 01:06:17,940 >> Kaj fakte, linio rompo estas speco de stranga afero 1047 01:06:17,940 --> 01:06:21,650 ĉar vi ne povas vere komenci movi al alia linio, tiam faru ion, 1048 01:06:21,650 --> 01:06:25,380 kaj tiam haltas movanta al nova linio. Estas speco de atoma operacio. 1049 01:06:25,380 --> 01:06:28,140 Vi ĉu fari ĝin aŭ vi ne. Vi batis Enigu aux vi ne. 1050 01:06:28,140 --> 01:06:33,390 Do br estas iom malmulto de malsama etikedo, do mi bezonas ordigi de ambaŭ malfermita kaj fermi ĝin 1051 01:06:33,390 --> 01:06:35,230 ĉiuj samtempe. 1052 01:06:35,230 --> 01:06:37,500 La sintakso por tiu estas ĉi. 1053 01:06:37,500 --> 01:06:41,760 Teknike, vi povus fari ion kiel tiu en kelkaj versioj de HTML, 1054 01:06:41,760 --> 01:06:45,600 sed ĉi tiu estas nur stulta ĉar ne estas kialo por komenci kaj ĉesi ion 1055 01:06:45,600 --> 01:06:48,420 se vi povas anstataŭe fari ĉion samtempe. 1056 01:06:48,420 --> 01:06:52,310 Rimarkas ke HTML5 ne strikte tion postulas oblikvo, 1057 01:06:52,310 --> 01:06:55,410 tiel vi vidos lernolibroj kaj rimedojn pri kiuj ne havas ĝin, 1058 01:06:55,410 --> 01:06:59,780 sed por bone mezuri ni praktiki la simetrio, ke ni vidis ĝis nun. 1059 01:06:59,780 --> 01:07:02,870 Tio signifas, ke la etikedo estas ambaŭ malfermita kaj fermita. 1060 01:07:02,870 --> 01:07:05,220 Do nun mi savos mian dosieron, revenu ĉi tien. 1061 01:07:05,220 --> 01:07:10,240 Okay, do ĝi estas komenci aspektas pli, krom la TTT mi scias estas speco de traktata, 1062 01:07:10,240 --> 01:07:13,610 kaj tamen youtube tie ne ŝajnas konduki al nenio. 1063 01:07:13,610 --> 01:07:17,560 Tio estas ĉar kvankam ĝi aspektas kiel ligilo, la retumilo ne scias ke per, 1064 01:07:17,560 --> 01:07:20,670 do mi devas diri al la retumilo kiun ĉi estas ligilo. 1065 01:07:20,670 --> 01:07:22,620 >> La maniero fari tion estas uzi ankron tag: 1066 01:07:22,620 --> 01:07:26,770 01:07:35,900 = "Http://www.youtube.com"> 1068 01:07:35,900 --> 01:07:38,490 kaj lasu min movi tiun al nova linio nur tiel ĝi estas iom pli legebla, 1069 01:07:38,490 --> 01:07:40,060 kaj mi hezitis la tiparon grandeco. 1070 01:07:40,060 --> 01:07:43,890 Mi faris ankoraŭ? Ne ekzistas tuj estos ĉi dicotomía. 1071 01:07:43,890 --> 01:07:46,760 Ĉi etikedo, la ankron etikedo, faras ja prenos atributo, 1072 01:07:46,760 --> 01:07:52,900 kiu modifas lian konduton, kaj la valoro de tiu atributo estas ŝajne YouTube la URL. 1073 01:07:52,900 --> 01:07:56,380 Sed rimarki la dicotomía estas ke nur pro tio la URL vi tuj, 1074 01:07:56,380 --> 01:08:01,020 tio ne signifas ke devas esti la vorto, kiun vi substrekante kaj farante ligon. 1075 01:08:01,020 --> 01:08:03,960 Pli ĝuste, tiu povas esti io kiel tio. 1076 01:08:03,960 --> 01:08:10,870 Do mi devas diri ĉesi fari ĉi vorto hyperlink uzante la proksimaj ankron etikedo. 1077 01:08:10,870 --> 01:08:12,650 Rimarku ke mi ne faras tion. 1078 01:08:12,650 --> 01:08:15,890 1, ĉi tiu devus esti nur malŝparo de ĉies tempon kaj ne necesa. 1079 01:08:15,890 --> 01:08:19,290 >> Fermi etikedo, vi nur mencias la nomon de la etikedo denove. 1080 01:08:19,290 --> 01:08:21,800 Vi ne mencias neniun de la atributoj. 1081 01:08:21,800 --> 01:08:26,189 Do ni savu ke, reiru. Konsentite, voila, nun estas blua kaj hyperlinked. 1082 01:08:26,189 --> 01:08:29,430 Se mi premas ĝin, mi reale fari iri al YouTube. 1083 01:08:29,430 --> 01:08:32,529 Do eĉ se mia retpaĝo ne estas en Interreto, estas almenaŭ HTML, 1084 01:08:32,529 --> 01:08:37,930 kaj se ni lasas la interreto reatingi, ni vere finu tie en youtube.com. 1085 01:08:37,930 --> 01:08:40,670 Kaj mi povas reiri kaj jen mia retpaĝo. Sed rimarki tion. 1086 01:08:40,670 --> 01:08:43,120 Se vi iam alveninta spamado aŭ phishing atako, 1087 01:08:43,120 --> 01:08:45,850 nun vi havas la kapablon post nur kvin minutoj fari la samon. 1088 01:08:45,850 --> 01:08:50,920 Ni povas iri ĉi tie kaj fari ion kiel www.badguy.com 1089 01:08:50,920 --> 01:08:59,319 aŭ kion ajn la Sketchy retejo estas, kaj tiam vi povas diri kontroli viajn PayPal konton. 1090 01:08:59,319 --> 01:09:04,840 [Ridado] Kaj nun ĉi tiu tuj iri al badguy.com, kiu mi ne tuj alklaku 1091 01:09:04,840 --> 01:09:08,000 ĉar mi ne havas ideon kie kiu stiras. [Ridado] 1092 01:09:08,000 --> 01:09:10,859 >> Sed ni nun havas la kapablon vere fini tie. 1093 01:09:10,859 --> 01:09:12,640 Do ni vere nur komencas skrapi la surfaco. 1094 01:09:12,640 --> 01:09:15,830 Ni ne programado per si mem; ni skribas markado lingvo. 1095 01:09:15,830 --> 01:09:18,569 Sed tuj kiam ni ĉirkaŭ nian vortprovizon en HTML, 1096 01:09:18,569 --> 01:09:21,520 ni enkonduki PHP, reala programlingvo 1097 01:09:21,520 --> 01:09:26,859 ke ni permesos generi HTML aŭtomate, generi CSS aŭtomate, 1098 01:09:26,859 --> 01:09:29,430 tiel ke ni povas komenci la merkredon por apliki, diru, 1099 01:09:29,430 --> 01:09:31,700 nian propran serĉilon kaj pli. 1100 01:09:31,700 --> 01:09:34,770 Sed pli en kiuj en kelkaj tagoj. Ni vidos vin do. 1101 01:09:34,870 --> 01:09:39,000 >> [CS50.TV]