1 00:00:00,000 --> 00:00:02,440 [Powered by Google Translate] [Week 7] 2 00:00:02,440 --> 00:00:04,730 [David J. Malan - Harvard Universiteit] 3 00:00:04,730 --> 00:00:07,490 [Hierdie is CS50. - CS50.TV] 4 00:00:07,490 --> 00:00:12,280 Alles reg. Welkom terug. Dit is CS50, en dit is die begin van die week 7. 5 00:00:12,280 --> 00:00:14,690 'N paar van die min aankondiging: 6 00:00:14,690 --> 00:00:18,150 Pset5 is nou aan die gang is, of so spoedig moontlik sal wees, 7 00:00:18,150 --> 00:00:21,590 En laat ek sê, eerlik te wees, dit is geneig om te wees onder die meer uitdagende 8 00:00:21,590 --> 00:00:24,460 van die kursus se probleem stelle, so laat my noem dit nou 9 00:00:24,460 --> 00:00:28,190 sodat hierdie week ooit meer as jy wag nie tot, sê, Woensdag nag 10 00:00:28,190 --> 00:00:29,920 of Donderdag nag te duik. 11 00:00:29,920 --> 00:00:32,369 Dit is beslis 'n interessante pset. Ons dink dit is pret. 12 00:00:32,369 --> 00:00:36,110 As jy eintlik kry dit ten volle korrek en kan dan daag die sogenaamde Big Raad, 13 00:00:36,110 --> 00:00:39,830 jy het 'n geleentheid om verstand te pas met 'n paar van die kursus se personeel 14 00:00:39,830 --> 00:00:41,620 en 'n paar van jou klasmaats. 15 00:00:41,620 --> 00:00:44,670 Wat Die Groot Raad is, is wanneer jy jou speltoetser werk, 16 00:00:44,670 --> 00:00:48,860 jy sal in staat wees om te gaan na die uitvoer van 'n opdrag te cs50.net, 17 00:00:48,860 --> 00:00:52,430 suiwer kies in, en dan die bedrag van die tyd en die bedrag van RAM en meer 18 00:00:52,430 --> 00:00:56,130 wat jy gebruik het in jou implementering sal hier uitgestal word op die kursus se tuisblad. 19 00:00:56,130 --> 00:00:59,740 Jy sal sien dat 'n hele klomp van hierdie mense hier is gelys as personeel 20 00:00:59,740 --> 00:01:04,220 sedert die naweek, die personeel het gedink dit sou pret om te probeer om mekaar te oortref. 21 00:01:04,220 --> 00:01:07,390 So besef dat die doel hier is nie om die personeel te oortref. 22 00:01:07,390 --> 00:01:09,790 Selfs ek is net hier op nommer 13. 23 00:01:09,790 --> 00:01:13,790 Suiwer kies in, maar dit is 'n geleentheid om te sien hoe min RAM 24 00:01:13,790 --> 00:01:16,790 en hoe min CPU sekondes wat jy kan gebruik om vis-a-vis paar van jou klasmaats. 25 00:01:16,790 --> 00:01:20,540 >> En ek sal erken dat Kevin Michael SchmidtEndLink, 26 00:01:20,540 --> 00:01:23,750 tans in die nommer 1 posisie as een van die TFS, 27 00:01:23,750 --> 00:01:28,120 dit is 'n implementering wat ons noem nie moontlik 28 00:01:28,120 --> 00:01:32,700 gegee dat hy byna 0 RAM en byna 0 sekondes gebruik vir die laai. 29 00:01:32,700 --> 00:01:35,670 So ons sal sorg van Kevin regte pad. [Lag] 30 00:01:35,670 --> 00:01:40,950 Daar is sekere vaardighede wat Kevin is om die toets hier. 31 00:01:40,950 --> 00:01:45,280 Een van die dinge wat ons gedink het ons wil doen is ook nou CS50x is 'n week aan die gang, 32 00:01:45,280 --> 00:01:49,520 en julle is net soveel 'n deel van hierdie eksperiment as die studente. 33 00:01:49,520 --> 00:01:53,720 Ons het hulle gevra as deel van hul pset0, wat insgelyks 'n Scratch projek in te dien 34 00:01:53,720 --> 00:01:58,280 van belang is vir hulle - 'n spel, 'n interaktiewe stuk van kuns, 'n animasie, of iets dergeliks - 35 00:01:58,280 --> 00:02:03,700 'n 1 - 2-minute video, indien hulle wil, sê hallo vir die wêreld en wat hulle werklik is. 36 00:02:03,700 --> 00:02:06,780 Ek het gedink ek wil dit deel met julle net 'n paar van die video's wat tot dusver voorgelê 37 00:02:06,780 --> 00:02:10,759 want vir ons is, ten minste op die personeel, is dit regtig is opwindende 38 00:02:10,759 --> 00:02:14,220 en inspirerende hierdie mense van oor die hele wêreld om te sien - lande oor die hele wêreld - 39 00:02:14,220 --> 00:02:18,160 transaksies in, van alle dinge, 'n rekenaar wetenskap op die Internet, 40 00:02:18,160 --> 00:02:20,410 of is dit omdat hulle wil hul eie studies voort te sit, 41 00:02:20,410 --> 00:02:22,300 hulle wil hê om hul loopbane te neem in 'n nuwe rigting, 42 00:02:22,300 --> 00:02:24,390 hulle wil hê om in te vul gapings in hul eie kennis, 43 00:02:24,390 --> 00:02:27,190 so 'n paar van die dieselfde redes dat julle miskien hier. 44 00:02:27,190 --> 00:02:31,090 >> So ek gee jou 'n sodanige student hier. Jy kan die volume te verhoog net 'n bietjie. 45 00:02:31,090 --> 00:02:35,520 Hier is een van ons studente se 1-minuut voorleggings. 46 00:02:35,520 --> 00:02:40,380 Hello, world. Ek is 'n student van die industriële ingenieurswese hier in Malaga, Spanje. 47 00:02:40,380 --> 00:02:45,840 Ek is opgewonde oor hierdie aanlyn kursus, want ek is lief vir rekenaar wetenskap, Ek het regtig nie, 48 00:02:45,840 --> 00:02:48,880 en Ek het werklik waardeer dat ek kry om dit te verken. 49 00:02:48,880 --> 00:02:51,940 En die feit dat ek dieselfde al julle ouens doen, kan leer 50 00:02:51,940 --> 00:02:57,040 maar in plaas van in Harvard Ek is in Malaga, hoe ontsagwekkend is dit nie? 51 00:02:57,040 --> 00:03:02,040 Wel, ek is Fernando, en dit is CS50. Sien julle ouens. 52 00:03:02,040 --> 00:03:07,100 [Lag] Nog 'n clip wat ons veral hou, sal jy vind dat hierdie man se Engels nie so sterk is nie. 53 00:03:07,100 --> 00:03:11,520 Dit lyk asof hy dit in die masjien vertaal, sodat die vertalings self is 'n bietjie onvolmaakte, 54 00:03:11,520 --> 00:03:15,790 maar dit was een van ons gunstelinge so ver as goed. 55 00:03:25,080 --> 00:03:29,980 [♪ ♪] 56 00:03:29,980 --> 00:03:32,370 Hello, world. [Praat in Japannees] 57 00:03:32,370 --> 00:03:39,830 [Ek het om te groet in Japannees, want my Engels is baie onbetroubaar.] 58 00:03:39,830 --> 00:03:45,380 [Ek gee die boodskap aan jou uit die stad van Gifu, Japan.] 59 00:03:45,380 --> 00:03:49,820 [Ek kan 'n student vir die eerste keer in 20 jaar, soos gesien kan word.] 60 00:03:49,820 --> 00:03:54,640 [Ek is baie dankbaar aan die Universiteit van Harvard wat aan my gegee het hierdie geleentheid en EDX.] 61 00:03:54,640 --> 00:04:01,510 [Golf is 'n kitaar en my gunsteling ding aan die gang.] [Lag] 62 00:04:01,510 --> 00:04:05,750 [♪ ♪] 63 00:04:05,750 --> 00:04:10,790 [Waarom dink jy ek het probeer 'n cs50x by te woon.] 64 00:04:10,790 --> 00:04:14,990 [Universiteit van Harvard, dit is my verlange.] 65 00:04:14,990 --> 00:04:19,740 [Veral as ek ver teenwoordigheid in Japan gewoon het.] 66 00:04:19,740 --> 00:04:26,680 [Ek wil om te probeer om onmiddellik bewus van die bestaan ​​van sodanige EDX toe.] 67 00:04:26,680 --> 00:04:32,500 [Dink jy nie sodat jy nie met betrekking tot die ouderdom van leer I.] 68 00:04:32,500 --> 00:04:38,350 [Cs50 is my verlange. My naam is Kazu, en dit is cs50.] 69 00:04:38,350 --> 00:04:43,090 [♪ ♪] [applous en juig] 70 00:04:43,090 --> 00:04:49,220 Nog 'n gunsteling van ons was hierdie voorlegging hier van iemand. 71 00:04:51,070 --> 00:04:55,380 [♪ ♪] [Malan] Google dit as jy onbekend is met hierdie meme. 72 00:04:55,380 --> 00:05:01,480 >> En dan laastens, 'n paar van die ander wat het gepos dat dit dalk die pragtige toekenning wen. 73 00:05:01,480 --> 00:05:06,820 [Studente] Aww! >> [Malan] Ons sal hê om te luister. Dit is kort, so nou luister. 74 00:05:08,580 --> 00:05:11,150 [Vroulike spreker] Wat is jou naam? >> Louie. 75 00:05:11,150 --> 00:05:16,120 [Vroulike spreker] Wat is dit? >> [Giggel] CS50. [Lag] 76 00:05:16,120 --> 00:05:19,510 [Malan] Hy het twee neem, al is. 77 00:05:19,510 --> 00:05:22,240 Hier gaan ons, die laaste. 78 00:05:23,030 --> 00:05:26,980 My naam is Louie, en dit is CS50. 79 00:05:26,980 --> 00:05:30,250 [Lag] Dit is dan CS50x. 80 00:05:30,250 --> 00:05:33,230 Dankie aan almal van dié van julle, terwyl die volgende saam by die huis 81 00:05:33,230 --> 00:05:35,620 wat tot dusver deelname. 82 00:05:35,620 --> 00:05:39,510 Vandag, ons sluit ons bespreking van die data strukture, 83 00:05:39,510 --> 00:05:41,160 ten minste sommige van die mees fundamentele, 84 00:05:41,160 --> 00:05:44,760 en dan sal ons voortgaan om ons gesprek oor HTML en web ontwikkeling. 85 00:05:44,760 --> 00:05:48,520 Inderdaad, het ons het die afgelope sowat sewe weke op soek na die grondbeginsels van programmering - 86 00:05:48,520 --> 00:05:50,450 algoritmes, data strukture, en dies meer - 87 00:05:50,450 --> 00:05:53,050 en C, as jy tot dusver ervaar het, 88 00:05:53,050 --> 00:05:57,060 is nie noodwendig die mees toeganklike van tale 89 00:05:57,060 --> 00:05:59,090 waarmee sommige van daardie idees te implementeer. 90 00:05:59,090 --> 00:06:01,880 En so het die begin van hierdie week en volgende week en dan die volgende, 91 00:06:01,880 --> 00:06:07,110 ons sal uiteindelik in staat wees om die oorgang van C, wat algemeen bekend staan ​​as 'n redelik lae-vlak taal, 92 00:06:07,110 --> 00:06:11,190 aan dinge hoër vlak, onder hulle PHP, JavaScript, en dies meer, 93 00:06:11,190 --> 00:06:14,850 wat ons sal sien trek op dieselfde lesse wat ons geleer het oor die afgelope paar weke, 94 00:06:14,850 --> 00:06:19,430 maar jy sal vind dat die dinge verkondig soos skikkings en hash tabelle en soek-en sorteer 95 00:06:19,430 --> 00:06:23,370 soveel makliker geword omdat die tale self sal ons begin met behulp van 96 00:06:23,370 --> 00:06:25,290 sal meer kragtige. 97 00:06:25,290 --> 00:06:27,410 Maar eers, 'n aansoek van die bome. 98 00:06:27,410 --> 00:06:30,240 Dit is baie algemeen hierdie dae nodig om inligting te compress. 99 00:06:30,240 --> 00:06:34,770 In watter konteks wil jy 'n soort van digitale inligting te compress? 100 00:06:37,190 --> 00:06:39,670 >> Ja. >> [Student] Wanneer jy nodig het om dit te stuur oor die web. 101 00:06:39,670 --> 00:06:41,450 Ja, wanneer jy iets oor die web te stuur. 102 00:06:41,450 --> 00:06:44,950 As jy wil 'n groot lêer te laai, dit is ideaal as iemand aan die ander kant 103 00:06:44,950 --> 00:06:48,760 saamgepers om die lêer met behulp van 'n zip-formaat of iets soos dit 104 00:06:48,760 --> 00:06:53,760 sodat jy die stuur van minder stukkies as wat dit andersins oorgedra word. 105 00:06:53,760 --> 00:06:55,500 So hoe compress jy inligting? 106 00:06:55,500 --> 00:07:00,540 Dit kom alles neer op die gebruik van minder stukkies as by verstek word vereis. 107 00:07:00,540 --> 00:07:03,220 Maar dit is 'n soort van 'n snaakse ding, want dink terug aan weke 0 en 1 108 00:07:03,220 --> 00:07:07,370 toe het ons gepraat oor ASCII-en binêre en het ons gepraat oor ASCII in die besonder 109 00:07:07,370 --> 00:07:10,690 met behulp van 8 stukkies letters van die alfabet te stel 110 00:07:10,690 --> 00:07:16,120 sodat die letter A word verteenwoordig deur 65 kleinletter a is die getal 97, 111 00:07:16,120 --> 00:07:21,210 en hoe jy die 65 of 97, 7 of 8 bisse gebruik. 112 00:07:21,210 --> 00:07:24,120 Maar die vangs is dat daar is 'n paar briewe in die Engelse alfabet 113 00:07:24,120 --> 00:07:26,230 wat is nie so gewild soos die ander. 114 00:07:26,230 --> 00:07:31,600 Z is nie alles wat gewild, Q is nie al wat gewild, maar A en E is super gewild. 115 00:07:31,600 --> 00:07:37,280 En tog vir almal van hierdie briewe, by verstek die wêreld maak gebruik van die dieselfde aantal bisse, net 8. 116 00:07:37,280 --> 00:07:42,690 So sou dit nie gewees het nie slimmer as in plaas van die gebruik van 8 bisse vir elke brief, 117 00:07:42,690 --> 00:07:47,440 selfs die mees selde gebruik word soos Q en Z, 118 00:07:47,440 --> 00:07:51,910 wat as ons gebruik minder stukkies vir A en E en S en die mees gewilde letters 119 00:07:51,910 --> 00:07:55,000 en gebruik meer stukkies vir die minder gewilde letters, 120 00:07:55,000 --> 00:07:57,770 die idee laat se optimaliseer vir die algemene geval, 121 00:07:57,770 --> 00:08:01,160 wat is 'n tema in die rekenaar wetenskap probeer om te optimaliseer wat gaan die meeste om te gebeur 122 00:08:01,160 --> 00:08:05,310 en spandeer 'n bietjie meer tyd, 'n bietjie meer ruimte op die dinge wat, ja, kan gebeur 123 00:08:05,310 --> 00:08:07,680 maar nie noodwendig so dikwels. 124 00:08:07,680 --> 00:08:09,330 So laat ons neem 'n voorbeeld. 125 00:08:09,330 --> 00:08:12,610 >> Veronderstel dat ons meer inligting wil ontvang redelik doeltreffend enkodeer. 126 00:08:12,610 --> 00:08:15,090 Jy kan grootgeword het wetende dat 'n bietjie iets oor Morse kode, 127 00:08:15,090 --> 00:08:17,450 en die kans is jy nie weet wat die werklike kode, 128 00:08:17,450 --> 00:08:21,750 maar jy kan onthou dat dit is ten minste hierdie reeks van kolletjies en strepies. 129 00:08:21,750 --> 00:08:26,640 Dit is 'n redelik doeltreffende kodering, en kennis dat die mees gewilde letter - byvoorbeeld, E - 130 00:08:26,640 --> 00:08:28,980 gebruik die kortste van biep. 131 00:08:28,980 --> 00:08:31,740 Morsekode is al oor die biep-biep-biep-biep-biep-biep en hou van die toon 132 00:08:31,740 --> 00:08:34,799 hetsy vir kort periodes van tyd of lang periodes van tyd. 133 00:08:34,799 --> 00:08:40,330 E, soos aangedui deur die kolletjie, is 'n super kort biep, net biep, en dit sou verteenwoordig E. 134 00:08:40,330 --> 00:08:43,960 In teenstelling hiermee, sal T 'n lang beep, soos beep [verleng klank, 135 00:08:43,960 --> 00:08:45,710 en dit sou verteenwoordig T. 136 00:08:45,710 --> 00:08:48,840 Maar dit is nog redelik kort, want, in teenstelling, as jy kyk na Z, 137 00:08:48,840 --> 00:08:52,690 Z te druk sou jy biep, biep [meer gesonde], biep, biep [korter klank] gaan. 138 00:08:52,690 --> 00:08:55,360 So dit is meer, want dit is minder algemeen. 139 00:08:55,360 --> 00:08:58,150 Maar die Gotcha hier is dat Morsekode is 'n bietjie gebrekkig 140 00:08:58,150 --> 00:09:00,610 in die sin dat dit is nie dadelik Deco Deer. 141 00:09:00,610 --> 00:09:07,350 Byvoorbeeld, veronderstel dat jy hoor op 'n paar einde van die draad beep [short], biep [lank]. 142 00:09:07,350 --> 00:09:12,480 Watter boodskap het ek net ontvang? 'N punt en 'n streep. Wat nie dat verteenwoordig? 143 00:09:12,480 --> 00:09:15,330 [Student] A. >> [Malan] Miskien. 144 00:09:15,330 --> 00:09:18,270 Dit kan ook wees E gevolg deur T. 145 00:09:18,270 --> 00:09:23,390 Met ander woorde, Morsekode, maar dit maak gebruik van hierdie beginsel van die optimalisering van die hoek geval, 146 00:09:23,390 --> 00:09:26,250 dit leen hom nie tot onmiddellike decodability. 147 00:09:26,250 --> 00:09:29,850 Dit is die mens wat dit hoor, of die ontvangs van hierdie kolletjies en strepies 148 00:09:29,850 --> 00:09:34,540 om een ​​of ander manier uit te vind waar die breek is tussen letters, 149 00:09:34,540 --> 00:09:39,660 want as jy nie weet waar daardie pouses is, kan jy dalk verwar A vir ET of vice versa. 150 00:09:39,660 --> 00:09:43,880 >> So, wat kan jy doen? In Morsekode kan jy net breek tussen elk van die letters. 151 00:09:43,880 --> 00:09:47,660 Maar pousering is soort teenvoeter vir die hele punt van die bespoediging dinge. 152 00:09:47,660 --> 00:09:52,880 So, wat as plaas ons vorendag gekom met 'n kode, waar daar was nie hierdie slegte situasie 153 00:09:52,880 --> 00:09:56,570 waar E 'n voorvoegsel, byvoorbeeld, van 'n - 154 00:09:56,570 --> 00:10:00,020 met ander woorde, as ons seker kan maak dat die patrone is nog steeds kort vir die gewilde letters 155 00:10:00,020 --> 00:10:04,850 lank vir die minder gewilde letters, maar daar is geen moontlike verwarring? 156 00:10:04,850 --> 00:10:08,930 'N man met die naam van Huffman jaar gelede uitgevind hierdie skema, genoem Huffman kodering 157 00:10:08,930 --> 00:10:12,390 wat maak eintlik een van die data strukture wat ons het 'n bietjie tyd spandeer praat 158 00:10:12,390 --> 00:10:16,560 die afgelope week, wat van bome, binêre bome spesifiek - 159 00:10:16,560 --> 00:10:19,710 'n binêre boom wat beteken dat dit nie meer as 2 kinders. 160 00:10:19,710 --> 00:10:22,720 Dit het miskien 'n linker kind, miskien 'n regte kind, en dit is dit. 161 00:10:22,720 --> 00:10:26,510 So veronderstel net ter wille van die bespreking wat iemand wil hê om 'n boodskap te stuur 162 00:10:26,510 --> 00:10:31,270 wat lyk soos hierdie. Dit is 'n volledige nonsens maar dit saamgestel van As, Bs, Cs, Ds, en Es. 163 00:10:31,270 --> 00:10:34,890 En as jy eintlik tel tot al van die AS, BS, Cs, Ds, en Es 164 00:10:34,890 --> 00:10:36,870 en dan verdeel deur die totale getal van die briewe, 165 00:10:36,870 --> 00:10:42,710 hierdie klein grafiek hier sê dat 45% van die briewe Es is, 20% is soos, 166 00:10:42,710 --> 00:10:45,010 10% Bs, en so meer. 167 00:10:45,010 --> 00:10:47,330 So met ander woorde, aanvaar dat die aangehaalde string daar 168 00:10:47,330 --> 00:10:49,080 is net 'n boodskap wat jy wil stuur. 169 00:10:49,080 --> 00:10:52,180 Dit gebeur te wees nonsens net sodat ons dit kan gebruik as 'n paar briewe as moontlik, 170 00:10:52,180 --> 00:10:55,220 maar dit is wel die geval is dat E steeds die mees gewilde, 171 00:10:55,220 --> 00:11:01,450 en B en C is die ongewildste, ten minste van hierdie 5 letters van die alfabet. 172 00:11:01,450 --> 00:11:04,040 So hoe kan ons gaan om te kom met 'n kodering, 173 00:11:04,040 --> 00:11:08,430 'n binêre-kodering, 'n patroon van 0'e en 1s vir elk van hierdie briewe 174 00:11:08,430 --> 00:11:14,820 in so 'n manier dat die E is 'n kort patroon en miskien B en C is effens langer patrone, 175 00:11:14,820 --> 00:11:19,270 weer, die idee is dat ons wil gebruik minder stukkies die meeste van die tyd 176 00:11:19,270 --> 00:11:21,790 en nog baie meer stukkies slegs een keer in 'n rukkie. 177 00:11:21,790 --> 00:11:26,070 Volgens Huffman kodering, kan jy 'n bos van die bome. 178 00:11:26,070 --> 00:11:31,190 Daar is 'n soort van 'n storie lyn wat behels die bome en ook die proses van die bou van hulle. 179 00:11:31,190 --> 00:11:32,420 Kom ons begin. 180 00:11:32,420 --> 00:11:36,140 >> Ek stel voor dat jy begin met die bos, om so te praat, 5 bome, 181 00:11:36,140 --> 00:11:38,260 elkeen wat 'n redelik dom boom. 182 00:11:38,260 --> 00:11:42,800 Die boom is saamgestel uit net 'n enkele nodus, soos verteenwoordig deur 'n sirkel. 183 00:11:42,800 --> 00:11:45,310 So elkeen van hierdie dinge kan 'n C struct 184 00:11:45,310 --> 00:11:50,200 en binnekant van die C struct kan 'n float wat die frekwensie tel 185 00:11:50,200 --> 00:11:52,510 en dan miskien 'n char wat die brief. 186 00:11:52,510 --> 00:11:56,470 Van hierdie nodes so te dink as net 'n ou C struct, maar vir nou, 'n hoër vlak. 187 00:11:56,470 --> 00:12:01,230 Dit is 'n bos van 5 bome, elk van wat slegs 'n enkele nodus. 188 00:12:01,230 --> 00:12:06,830 Wat Huffman voorgestelde is dat ons begin om die bome te kombineer 189 00:12:06,830 --> 00:12:11,140 wat die kleinste frekwensie tellings in effens groter bome 190 00:12:11,140 --> 00:12:13,490 deur die koppeling van hulle met 'n nuwe wortel node. 191 00:12:13,490 --> 00:12:17,560 So tussen die letters hier opmerk dat ek vir gerief hulle het gesorteer van links na regs, 192 00:12:17,560 --> 00:12:21,420 alhoewel dit is nie streng noodsaaklik is, en kennis dat die kleinste nodes 193 00:12:21,420 --> 00:12:23,930 is tans 10% en 10%. 194 00:12:23,930 --> 00:12:28,940 So Huffman het voorgestel dat ons saamsmelt daardie 2 kleinste nodes in 'n nuwe boom 195 00:12:28,940 --> 00:12:34,450 deur die bekendstelling van 'n nuwe ouer node en dan gee dat die ouer 'n linker kind en 'n regte kind 196 00:12:34,450 --> 00:12:37,720 waar B arbitrêr is die linker-en C is arbitrêr die reg. 197 00:12:37,720 --> 00:12:41,590 En dan Huffman het verder voorgestel dat laat ons net nou dink van die linker kind 198 00:12:41,590 --> 00:12:44,790 in een van hierdie bome altyd soos verteenwoordig deur 0 199 00:12:44,790 --> 00:12:47,890 en die regte kind altyd soos verteenwoordig deur die aantal 1. 200 00:12:47,890 --> 00:12:50,680 >> Dit maak nie saak as jy flip hulle so lank as wat jy konsekwent. 201 00:12:50,680 --> 00:12:54,650 So nou het ons vier bome in die bos. 202 00:12:54,650 --> 00:12:58,050 En ek sê vier, want nou is die boom aan die linkerkant - 203 00:12:58,050 --> 00:13:00,570 en dit is nie soseer 'n boom in die sin dat dit groei op hierdie manier, 204 00:13:00,570 --> 00:13:05,170 dit is meer soos 'n stamboom waar nou die 0,2 is 'n soort van die ouer van die twee kinders - 205 00:13:05,170 --> 00:13:07,930 opmerk dat ons in daardie ouer 0,2 het getrek. 206 00:13:07,930 --> 00:13:13,370 Ons het bygevoeg die frekwensie tellings van die twee kinders en gegee die nuwe node die totale bedrag. 207 00:13:13,370 --> 00:13:15,310 So nou het ons net hierdie proses herhaal. 208 00:13:15,310 --> 00:13:19,490 Vind die twee kleinste nodes en dan saam met hulle in 'n nuwe boom 209 00:13:19,490 --> 00:13:21,380 en dan herhaal die proses verder. 210 00:13:21,380 --> 00:13:26,390 Reg nou is ons het 'n paar kandidate, 20%, 15%, en die ander 20%. 211 00:13:26,390 --> 00:13:29,780 In hierdie geval, ons het die staking te breek. Ons kan dit doen arbitrêr. 212 00:13:29,780 --> 00:13:31,540 Ons moet maar net doen dit konsekwent. 213 00:13:31,540 --> 00:13:33,760 In hierdie geval, sal ek na willekeur gaan met die een op die linkerkant, 214 00:13:33,760 --> 00:13:39,880 en ek nou saamsmelt om die 20% en 15% te gee vir my 'n nuwe ouer 35% genoem, 215 00:13:39,880 --> 00:13:46,310 wie se linker kind is 0, wie se regterhand kind is 1, en nou het ons net drie bome in die bos. 216 00:13:46,310 --> 00:13:47,960 Jy kan dalk sien waar dit gaan. 217 00:13:47,960 --> 00:13:51,150 As ons herhaal 'n paar keer gaan ons net een groot boom te hê, 218 00:13:51,150 --> 00:13:53,900 almal wie se rande is gemerk met 0'e en 1s. 219 00:13:53,900 --> 00:13:55,710 Kom ons doen dit weer. 220 00:13:55,710 --> 00:14:02,600 35% is dat die boom se wortel. 20% en 45%, sodat ons die 35% en 20% gaan om saam te smelt. 221 00:14:02,600 --> 00:14:05,610 Nou het ons hierdie boom hier. Ons voeg diegene saam, ons het 55%. 222 00:14:05,610 --> 00:14:07,910 Nou is daar net twee bome in die bos. 223 00:14:07,910 --> 00:14:11,900 Ons doen dit een laaste keer, en hopelik wiskundig al die frekwensies optel 224 00:14:11,900 --> 00:14:15,570 want hulle moet ons sedert bereken hulle van die get-go te voeg tot 100%. 225 00:14:15,570 --> 00:14:17,960 En nou het ons 'n boom. 226 00:14:17,960 --> 00:14:20,580 So, dit is 'n Huffman kodering boom. 227 00:14:20,580 --> 00:14:24,400 Dit soort van 'n rukkie geneem om daar te kom mondelings, maar die realiteit is met 'n lus 228 00:14:24,400 --> 00:14:27,620 of met 'n rekursiewe funksie, kan jy hierdie ding tot redelik vinnig bou. 229 00:14:27,620 --> 00:14:32,440 So nou het ons 'n nuwe node, en al van hierdie innerlike nodes is malloc'd, 230 00:14:32,440 --> 00:14:34,690 vermoedelik langs die pad. 231 00:14:34,690 --> 00:14:38,650 So nou by die top van die boom wat ons het 100% nie, maar kyk nou het ons 'n pad 232 00:14:38,650 --> 00:14:43,780 van hierdie nuwe groot-groot-groot-grootouer op alle van die groot-groot-groot-kleinkinders 233 00:14:43,780 --> 00:14:45,930 al die pad aan die onderkant, aan al die blare. 234 00:14:45,930 --> 00:14:52,840 >> Wat gaan ons nou doen, is stel voor dat ten einde die letter E voor te stel, 235 00:14:52,840 --> 00:14:55,670 ons sal net gebruik maak van die aantal 1. Hoekom? 236 00:14:55,670 --> 00:15:01,000 Want as ons deurkruis die boom van die finale wortel af aan die blaar bekend as E, 237 00:15:01,000 --> 00:15:06,050 ons volg net die een kant, die regter rand, en dit is natuurlik gemerk regs bo 1. 238 00:15:06,050 --> 00:15:11,550 So was die implikasie hier vir Huffman dat E die kodering in binêre regverdige sal wees 1. 239 00:15:11,550 --> 00:15:14,490 En dit is pretty damn doeltreffende. Kan nie regtig kry nie kleiner as dié. 240 00:15:14,490 --> 00:15:18,350 Daarenteen, is 'n lopende om verteenwoordig te word, as jy die logika volg, 241 00:15:18,350 --> 00:15:21,610 watter patroon van stukkies plaas? 01. 242 00:15:21,610 --> 00:15:25,500 So te kry om 'n, ons begin by die wortel en ons gaan links en dan gaan ons reg, 243 00:15:25,500 --> 00:15:28,580 wat beteken dat ons het gevolg op 'n 0 en dan 'n 1. 244 00:15:28,580 --> 00:15:32,810 So sal ons verteenwoordig die letter A met die patroon 0 en 1. 245 00:15:32,810 --> 00:15:36,010 En nou sien ons reeds 'n eiendom van onmiddellike decodability 246 00:15:36,010 --> 00:15:38,090 dat ons nie in Morsekode. 247 00:15:38,090 --> 00:15:42,840 Selfs al het beide van hierdie patrone is redelik kort - E is 1 bietjie, A 2 stukkies - 248 00:15:42,840 --> 00:15:45,080 agterkom dat hulle kan nie die een of die ander verwar word, 249 00:15:45,080 --> 00:15:54,870 want as jy sien 'n 1 dit het 'n E, as jy sien 'n 0 toe 'n 1 Dit is natuurlik het 'n A. 250 00:15:54,870 --> 00:15:58,410 Net so, wat is D? 001. 251 00:15:58,410 --> 00:16:01,440 Wat is C? 0001. 252 00:16:01,440 --> 00:16:05,320 En wat is B? 0000. 253 00:16:05,320 --> 00:16:09,550 En weer, omdat al die briewe wat ons omgee is op die blare 254 00:16:09,550 --> 00:16:13,890 en nie een van hulle is soort van middelmanne in die pad van wortel blaar, 255 00:16:13,890 --> 00:16:18,760 daar is geen risiko van conflating 2 letters verskillende coderingen 256 00:16:18,760 --> 00:16:22,300 omdat al die van hierdie bietjie patrone is deterministiese. 257 00:16:22,300 --> 00:16:25,280 0000 sal altyd B. 258 00:16:25,280 --> 00:16:29,480 Daar is geen node iewers tussen wat jy dalk een brief vir die ander verwar. 259 00:16:29,480 --> 00:16:31,150 So, wat is die implikasie hier? 260 00:16:31,150 --> 00:16:35,080 >> Die mees gewilde letter - in hierdie geval E - gekry het die kortste kodering, 261 00:16:35,080 --> 00:16:37,430 A gekry het die volgende kortste kodering, 262 00:16:37,430 --> 00:16:41,390 en B en C, wat ons reeds geweet van die get-go was soort van die minste populêre 263 00:16:41,390 --> 00:16:45,390 frekwensie van 10% elk, het hulle die langste kodering gekry. 264 00:16:45,390 --> 00:16:49,410 En wat beteken dit nou is, is dat as jy wil om 'n boodskap te stuur wat saamgepers 265 00:16:49,410 --> 00:16:51,950 oor die internet of in 'n e-pos of iets dergeliks, 266 00:16:51,950 --> 00:16:56,730 eerder as die gebruik van standaard ASCII, kan jy stuur 'n gekodeerde boodskap Huffman 267 00:16:56,730 --> 00:17:01,720 waardeur as jy wil die letter E te stuur, stuur net 'n bietjie. 268 00:17:01,720 --> 00:17:05,680 As jy wil 'n A te stuur, jy stuur 2 stukkies, 01, in plaas van die stuur van 8 bisse 269 00:17:05,680 --> 00:17:10,190 gevolg deur 'n ander 8 stukkies gevolg deur nog 8 stukkies en so meer. 270 00:17:10,190 --> 00:17:11,940 Maar daar is 'n Gotcha hier. 271 00:17:11,940 --> 00:17:17,079 Dit is nie voldoende om net te konstrueer hierdie boom, en dan begin die stuur van Alice te Bob 272 00:17:17,079 --> 00:17:20,010 die korter bispatroon, string van ASCII, 273 00:17:20,010 --> 00:17:23,140 omdat Alice het ook Bob in te lig van wat 274 00:17:23,140 --> 00:17:26,880 as Bob gaan in staat wees om haar saamgeperste boodskap te lees? 275 00:17:26,880 --> 00:17:30,770 [Onhoorbaar student reaksie] >> Wat is dit? 276 00:17:30,770 --> 00:17:32,310 [Onhoorbaar student reaksie] >> van wat die boom is. 277 00:17:32,310 --> 00:17:35,160 Of selfs meer spesifiek, wat die enkoderings is, 278 00:17:35,160 --> 00:17:39,010 veral omdat in hierdie storie het ons 'n oordeel oproep op 'n punt. 279 00:17:39,010 --> 00:17:43,640 Onthou wat ons gehad het om na willekeur te kies tussen die 2 verskillende 20% nodes? 280 00:17:43,640 --> 00:17:49,800 So dit is nie die geval dat Bob, die ontvanger, kan net rekonstrueer die boom op sy eie 281 00:17:49,800 --> 00:17:53,390 want miskien het hy die boom sal ooit so iets verskillend van Alice skep. 282 00:17:53,390 --> 00:17:56,670 Daarbenewens het Bob nie eens weet wat die oorspronklike boodskap is 283 00:17:56,670 --> 00:18:00,770 omdat die enigste ding Alice stuur hom, natuurlik, is die saamgeperste boodskap. 284 00:18:00,770 --> 00:18:05,900 >> So het die vangs met kompressie soos hierdie is dat, ja, kan Alice 'n hele klomp van die stukkies red 285 00:18:05,900 --> 00:18:09,900 deur die stuur van 1 vir E en 01 vir A en so meer, 286 00:18:09,900 --> 00:18:15,180 maar sy het ook Bob in te lig wat die kartering tussen letters en stukkies 287 00:18:15,180 --> 00:18:19,620 want hulle kan duidelik nie staatmaak op net ASCII meer as ons nie die gebruik van ASCII. 288 00:18:19,620 --> 00:18:22,200 Sodat sy kan hom stuur die boom op een of ander manier - 289 00:18:22,200 --> 00:18:26,600 skryf dit neer, stoor dit as binêre data of iets soos dit - 290 00:18:26,600 --> 00:18:30,280 of stuur hom net 'n bietjie cheat sheet, 'n Excel-lêer, wat die afbeeldings. 291 00:18:30,280 --> 00:18:36,480 So het die doeltreffendheid van kompressie neem regtig dat die boodskappe wat jy stuur 292 00:18:36,480 --> 00:18:40,230 is redelik groot, ten minste medium-grootte, 293 00:18:40,230 --> 00:18:42,180 want as jy die stuur van 'n super kort boodskap, 294 00:18:42,180 --> 00:18:45,390 as jy net wil stuur die boodskap sleg, wat gebeur met 'n woord wat ons hier kan spel, 295 00:18:45,390 --> 00:18:49,550 B-A-D, jy waarskynlik gaan minder stukkies te gebruik, 296 00:18:49,550 --> 00:18:53,130 maar die vangs is, as jy ook 'n Bob in te lig wat die boom is 297 00:18:53,130 --> 00:18:57,530 of wat daardie enkoderings is, gaan jy waarskynlik swaarder as al die besparing 298 00:18:57,530 --> 00:19:00,110 met saamgeperste dinge om mee te begin. 299 00:19:00,110 --> 00:19:02,210 , Sodat dit kan die geval wees dat as jy probeer om die comprimeren 300 00:19:02,210 --> 00:19:05,330 selfs met iets soos zip of lêer formate jy dalk vertroud wees met - 301 00:19:05,330 --> 00:19:07,780 redelik klein lêers, selfs leë lêers - 302 00:19:07,780 --> 00:19:10,930 soms die lêers kan kry groter en nie kleiner. 303 00:19:10,930 --> 00:19:14,320 Maar realisties, dit gebeur net vir klein lêer groottes, 304 00:19:14,320 --> 00:19:16,920 so dit is nie van plan om 'n GB-lêer 2 GB; 305 00:19:16,920 --> 00:19:19,480 ons regtig praat bytes of net 'n paar kilogrepe. 306 00:19:19,480 --> 00:19:22,330 >> Sommige programme soos ZIP is slim genoeg om te besef dat, 307 00:19:22,330 --> 00:19:24,590 "Jy gaan meer stukkies comprimeren hierdie te spandeer." 308 00:19:24,590 --> 00:19:27,460 "Laat my nie pla comprimeren dit vir jou op alle." 309 00:19:27,460 --> 00:19:30,160 So dit is net een manier om van die comprimeren van die teks formaat. 310 00:19:30,160 --> 00:19:32,300 Ons kan iets soos hierdie te implementeer in C. 311 00:19:32,300 --> 00:19:35,370 Byvoorbeeld, hier is hoe ons kan 'n node verteenwoordig in hierdie boom 312 00:19:35,370 --> 00:19:39,320 waar ons 'n kar vir die simbool, 'n drywende waarde vir die frekwensie, 313 00:19:39,320 --> 00:19:42,250 en soos ons gesien het met ons ander datastrukture, 2 pointers, 314 00:19:42,250 --> 00:19:47,080 1 aan die linkerkant kind, 1 aan die regterkant, een van wat kan wees NULL, 315 00:19:47,080 --> 00:19:50,850 maar indien nie, dit verwys na 'n links kind en 'n regte kind. 316 00:19:50,850 --> 00:19:55,130 So, dit is dan Huffman kodering, en dit is een manier wat jy kan gaan oor die comprimeren van inligting, 317 00:19:55,130 --> 00:19:57,880 en dit is beslis een van die mees maklik om te implementeer 318 00:19:57,880 --> 00:20:00,830 in die konteks van, sê, verlede week se data strukture, 319 00:20:00,830 --> 00:20:03,250 alhoewel selfs meer gesofistikeerde algoritmes bestaan 320 00:20:03,250 --> 00:20:08,220 wat selfs meer gesofistikeerd mutasies van jou data kan doen. 321 00:20:08,220 --> 00:20:11,640 Enige vrae en dan op bome, binêre bome, of kompressie van die teks? 322 00:20:11,640 --> 00:20:15,590 [Student] Is daar 'n dubbelsinnigheid, soos as [onhoorbaar] verdeel in 01, 323 00:20:15,590 --> 00:20:19,160 dan 011 sou wees dubbelsinnig, reg? 324 00:20:19,160 --> 00:20:22,730 [Onhoorbaar] >> Goeie vraag. Dubbelsinnigheid. 325 00:20:22,730 --> 00:20:25,940 Laat my opsomming te maak deur te verwys na hierdie foto hier. 326 00:20:25,940 --> 00:20:29,650 Omdat die karakters wat jy comprimeren, die vertoë van 327 00:20:29,650 --> 00:20:32,850 deur die omskrywing van hierdie algoritme altyd die blare, 328 00:20:32,850 --> 00:20:41,870 jy per ongeluk nooit gebruik maak van die dieselfde patroon van bisse vir die voorvoegsel van verskeie briewe. 329 00:20:41,870 --> 00:20:46,740 So in ander woorde, jy is bekommerd oor, dit klink soos, 'n dubbelsinnigheid wat voortspruit 330 00:20:46,740 --> 00:20:51,580 waardeur 001 kan die begin van B of die begin van C of iets soos dit. 331 00:20:51,580 --> 00:20:56,780 Maar dit kan nie die geval wees nie, want kennis dat al die letters van die alfabet ons kodering 332 00:20:56,780 --> 00:20:58,290 is op die blare. 333 00:20:58,290 --> 00:21:01,910 >> Die dubbelsinnigheid kan slegs ontstaan, soos in die geval van Morsekode, 334 00:21:01,910 --> 00:21:06,770 Indien, byvoorbeeld, C was iewers langs die pad vanaf die wortel tot B. 335 00:21:06,770 --> 00:21:12,290 [Student] Reg. Dus, in daardie geval, sê A het 2 blare. >> Sê 'n - Sê dit weer. 336 00:21:12,290 --> 00:21:18,760 [Student] Sê A het 2 blare, F en G, en dan G - >> Goed. Maar dit kan nie. 337 00:21:18,760 --> 00:21:23,230 A kon self nie die blare F en G omdat daardie briewe F en G 338 00:21:23,230 --> 00:21:27,560 sal hulle laat iewers aan die linkerkant van B of die reg van E. 339 00:21:27,560 --> 00:21:28,900 So per definisie, moet hulle blare. 340 00:21:28,900 --> 00:21:32,940 Andersins, jy is presies reg, het ons nie die probleem opgelos dat Morsekode gesigte. 341 00:21:32,940 --> 00:21:38,150 Goeie vraag. Ander vrae? Alles reg. 342 00:21:38,150 --> 00:21:42,050 Hierdie idee van bisse, dit blyk ons ​​het krag almal saam dat ons eintlik nog nie gebruik 343 00:21:42,050 --> 00:21:44,200 wanneer dit kom by hierdie 0'e en 1s te manipuleer. 344 00:21:44,200 --> 00:21:46,600 Ons het gevra oor dit op een van die vroegste probleem stelle: 345 00:21:46,600 --> 00:21:52,340 naamlik, hoe gaan jy oor die omskakeling van hoofletters na onderkas of andersom? 346 00:21:52,340 --> 00:21:55,460 Of, meer konkreet, een van daardie eerste psets gevra 347 00:21:55,460 --> 00:22:01,090 hoeveel stukkies jy het eintlik ten einde 'n A of andersom verander na onderkas om te draai? 348 00:22:01,090 --> 00:22:05,580 Hier is 'n vinnige herinnering van wat 65 en 97 kyk soos in binêre. 349 00:22:05,580 --> 00:22:08,060 En selfs as daardie vraag het soort van vervaag in jou geheue, 350 00:22:08,060 --> 00:22:11,290 jy kan weer sien hier dat Hoeveel bisse moet word omgekeer 351 00:22:11,290 --> 00:22:15,810 kapitaal te verander om 'n onderkas? Net een. 352 00:22:15,810 --> 00:22:19,650 >> Hulle verskil net in een plek, die derde bietjie van die linkerkant. 353 00:22:19,650 --> 00:22:24,240 AANGESIEN A het 'n 010, min 'n het 'n 011. 354 00:22:24,240 --> 00:22:26,250 So een of ander manier, moet ons net in staat wees om daardie bietjie om te draai, 355 00:22:26,250 --> 00:22:29,410 en dan kan ons hoofletters of kleinletters. 356 00:22:29,410 --> 00:22:32,720 Ons het dit gedoen in die verlede deur eintlik die gebruik van voorwaardes 357 00:22:32,720 --> 00:22:35,930 en te keur indien die brief is tussen kapitaal en kapitaal Z, 358 00:22:35,930 --> 00:22:41,480 dan uitsette soos 'n - a + 26 of iets soos dit. 359 00:22:41,480 --> 00:22:46,130 Jy het waarskynlik 'n rekenkundige verandering aan die letters van die alfabet. 360 00:22:46,130 --> 00:22:49,270 Maar wat as ons kon net flip dat die enkele bietjie? 361 00:22:49,270 --> 00:22:59,080 Hoe kon jy gaan oor die neem van een byte se waarde van stukkies, so 8 bisse soos 01.000.001 en 01.100.001? 362 00:22:59,080 --> 00:23:03,170 As jy het daardie patrone bisse, hoe kan ons gaan oor die verandering van net een van hulle? 363 00:23:03,170 --> 00:23:07,610 Wat gebeur as ons voer in geel hier ander patroon van bisse? 364 00:23:07,610 --> 00:23:13,420 As ek die hele geel string 0s behalwe vir die een stukkie wat ek wil om te verander 365 00:23:13,420 --> 00:23:17,900 en dan het ek 'n nuwe operateur bekend as 'n bis-operateur - 366 00:23:17,900 --> 00:23:21,210 bis in die sin dat dit werk op 'n individuele stukkies, 367 00:23:21,210 --> 00:23:25,360 nie op 'n hele byte of vier grepe alles op een slag nie. 368 00:23:25,360 --> 00:23:31,170 Hierdie vertikale bar daar in geel dui daarop dat wat as ons die voorstelling van kapitaal A 369 00:23:31,170 --> 00:23:37,060 bis of dit met die geel volgorde van stukkies? 370 00:23:37,060 --> 00:23:41,300 Met ander woorde, dink terug aan ons bespreking van Boole-uitdrukkings in Scratch en dan in C. 371 00:23:41,300 --> 00:23:47,520 >> Doen 'n Boolese of beteken dat waar te wees, óf die eerste ding om waar te wees 372 00:23:47,520 --> 00:23:50,700 of die tweede ding om waar te wees of hulle albei het om waar te wees, 373 00:23:50,700 --> 00:23:53,270 en dan die gevolglike uitset is waar. 374 00:23:53,270 --> 00:24:00,230 In hierdie geval hier, wat ons kry as ons 0 "of" ed met 0? Vals of onwaar? 375 00:24:00,230 --> 00:24:04,280 Dit is nog steeds vals is, sodat die kleinletter 'n bly soos verwag. 376 00:24:04,280 --> 00:24:07,540 Wat gebeur as in plaas ons doen 1 of 0? 377 00:24:07,540 --> 00:24:12,640 Dit bly nou 1, maar agterkom wat hier gebeur is. 378 00:24:12,640 --> 00:24:18,630 As ons begin met 'n hoofletter A en ons voortgaan om te "of" sy individuele stukkies as ons hier doen, 379 00:24:18,630 --> 00:24:25,180 0 of die geel een gee vir ons wat hier onder? Dit gee ons 1. 380 00:24:25,180 --> 00:24:35,120 Om die waarheid te sê, dink ons ​​het nie geweet wat die hoofletters weergawe van min eintlik 'n was. 381 00:24:35,120 --> 00:24:38,270 Kom ons gaan doen dit. Laat my beweeg dit terug hier. 382 00:24:38,270 --> 00:24:42,340 Kom ons doen dit weer. 0 of 0 gee my 0. 383 00:24:42,340 --> 00:24:45,020 1 of 0 gee my 1. 384 00:24:45,020 --> 00:24:48,020 0 of 1 gee my 1. 385 00:24:48,020 --> 00:24:52,880 0 of 0 gee my 0. Die volgende een is 0, die volgende een is 0, die volgende een is 0. 386 00:24:52,880 --> 00:24:55,660 1 of 0 gee my 1. 387 00:24:55,660 --> 00:24:59,140 En so selfs al het ons nie vooraf weet wat kleinletter a was, 388 00:24:59,140 --> 00:25:04,770 deur eenvoudig "of" 'n met hierdie patroon van bisse wat ons hier het in geel, 389 00:25:04,770 --> 00:25:09,400 jy kan 'n kapitaal onderkas deur daarby daardie bietjie. 390 00:25:09,400 --> 00:25:11,580 Ons gebruik hierdie uitdrukking weke gelede: 'n bietjie daarby. 391 00:25:11,580 --> 00:25:13,710 Hoe doen jy eintlik dat programmaties? 392 00:25:13,710 --> 00:25:16,390 Jy gebruik wat algemeen bekend as 'n masker, 'n reeks van bisse, 393 00:25:16,390 --> 00:25:19,980 dat in hierdie geval gebeur net so om te lyk soos hierdie getal hier, 394 00:25:19,980 --> 00:25:22,980 en dan moet jy "of" dit saam met behulp van hierdie nuwe C-operateur, 395 00:25:22,980 --> 00:25:29,940 nie | |, jy gebruik 'n enkele | en jy sou eintlik hierdie antwoord hier want hoekom? 396 00:25:29,940 --> 00:25:35,120 Dit is die 1s, 2s plek, 4s, 8s, 16s, 32s. 397 00:25:35,120 --> 00:25:42,280 So dit blyk dat as jy 'n hoofletter A en bis of dit met die heelgetal 32, 398 00:25:42,280 --> 00:25:47,520 omdat die heelgetal 32, as jy kyk na dit as stukkies, so lyk, 399 00:25:47,520 --> 00:25:50,860 wat beteken dat jy kan die bietjie wat jy eintlik wil flip. 400 00:25:50,860 --> 00:25:52,630 En insgelyks - en ons sal kyk na die kode in net 'n oomblik - 401 00:25:52,630 --> 00:25:54,210 Gestel ons wil die ander rigting te gaan. 402 00:25:54,210 --> 00:25:58,210 >> Hoe gaan jy uit kleinletter 'n hoofletter A? Watter bietjie moet verander? 403 00:25:58,210 --> 00:25:59,820 Dit is dieselfde een. 404 00:25:59,820 --> 00:26:03,970 Ons wil hê dat die derde bietjie te verander van 'n 1 na 'n 0. 405 00:26:03,970 --> 00:26:06,310 En hoe kan ons te werk gaan om dit te doen? 406 00:26:06,310 --> 00:26:10,130 Hoe draai ons 'n bietjie af? Met watter patroon van bisse kan ons 'n bietjie af? 407 00:26:11,580 --> 00:26:14,070 Wat gebeur as ons sorteer invert die masker? 408 00:26:14,070 --> 00:26:17,350 AANGESIEN dit voor, ons het die hele geel masker 0'e 409 00:26:17,350 --> 00:26:19,930 behalwe vir die een stukkie wat ons wou om te draai op, 410 00:26:19,930 --> 00:26:25,580 wat as hierdie tyd, maak ons ​​die hele masker 1s, behalwe vir die bietjie wat ons wil afskakel 411 00:26:25,580 --> 00:26:28,330 en dan gebruik wat operateur? 412 00:26:28,330 --> 00:26:30,560 Wat gebeur as ons "en" dinge? Kom ons neem 'n blik. 413 00:26:30,560 --> 00:26:34,880 As ons nou Flip, veronderstel dat ek weer 'n masker wat is al 1s 414 00:26:34,880 --> 00:26:37,650 behalwe vir die een stukkie wat ek wil om te draai af 415 00:26:37,650 --> 00:26:43,860 en dan eerder as "of" die wit getalle tot bo met die geel nommers hier onder, 416 00:26:43,860 --> 00:26:46,940 wat as ek plaas "en" hulle saam? Dit is bekend as 'n bis. 417 00:26:46,940 --> 00:26:49,450 Logies, dit is dieselfde ding as 'n Boole-en. 418 00:26:49,450 --> 00:26:55,160 Dit gee my 0 & 1 is 0. So vals en ware is vals. 419 00:26:55,160 --> 00:26:58,160 Waar en waar is, is waar. 420 00:26:58,160 --> 00:27:04,020 En hier is die magic: ware en valse nou vals is, so ons het daardie bietjie afgeskakel. 421 00:27:04,020 --> 00:27:06,560 En nou die res van die storie is ietwat eenvoudig. 422 00:27:06,560 --> 00:27:11,970 Omdat die res van die masker is 1s, dit maak nie saak wat die getalle in wit. 423 00:27:11,970 --> 00:27:15,580 Wanneer jy "en" iets met die ware, jy nie gaan om die waarde daarvan te verander. 424 00:27:15,580 --> 00:27:20,200 As dit waar is, sal dit bly waar. As dit vals was, bly dit vals. 425 00:27:20,200 --> 00:27:23,190 >> Maar die magie gebeur wanneer jy iets wat was waar 426 00:27:23,190 --> 00:27:25,430 en jy dan "en" dit met vals. 427 00:27:25,430 --> 00:27:30,030 Dit het die effek van die draai af dat die bietjie. 428 00:27:30,030 --> 00:27:31,980 So 'n bietjie kripties. 429 00:27:31,980 --> 00:27:35,390 Kom ons eintlik kyk na 'n paar kode, wat werklik kan kyk nog meer kriptiese, 430 00:27:35,390 --> 00:27:38,220 maar laat ons neem 'n blik hier by tolower. 431 00:27:38,220 --> 00:27:45,880 As ek kyk by die tolower, gaan van kapitaal 'n 'n onderkas, 432 00:27:45,880 --> 00:27:47,730 laat ons sien hoe ons hierdie program te implementeer. 433 00:27:47,730 --> 00:27:51,280 Hier is die hoof, en dit is nie die neem van 'n command-line argumente. 434 00:27:51,280 --> 00:27:55,980 Ek verklaar 'n karakter c vir die brief wat die gebruiker gaan te tik. 435 00:27:55,980 --> 00:28:00,690 Ek gebruik dan 'n bekende te doen terwyl lus te maak net seker dat die gebruiker beslis gee my 'n hoofletter A 436 00:28:00,690 --> 00:28:05,010 of B of C. .. Z, so hulle gee my iets tussen A en Z. 437 00:28:05,010 --> 00:28:08,580 En nou, wat doen ek hier? 438 00:28:08,580 --> 00:28:14,870 Ek is "of" ing met 0x20, maar dit is eintlik dieselfde as - 439 00:28:14,870 --> 00:28:19,500 en ons kom terug na hierdie in 'n oomblik - 32. 440 00:28:19,500 --> 00:28:24,830 So weer, 32 is hierdie patroon bisse hier. Waarom weet ons dit? 441 00:28:24,830 --> 00:28:26,320 Net terug dink aan week 0. 442 00:28:26,320 --> 00:28:31,010 Dit is die 1s, 2s plek, 4s, 8s, 16s, 32s plek. 443 00:28:31,010 --> 00:28:33,470 So, dit geel aantal gebeur om te wees 32. 444 00:28:33,470 --> 00:28:40,570 Ek kan dan 'n brief soos die char hier, bis "of" dit met letterlik die getal 32, 445 00:28:40,570 --> 00:28:45,250 en wat kry ek terug? Die kleinletter weergawe van daardie char. 446 00:28:45,250 --> 00:28:48,830 'N oomblik gelede, maar ek het hierdie in 'n ander basis notasie. 447 00:28:48,830 --> 00:28:51,370 Wat het dit voor? >> [Student] heksadesimaal. 448 00:28:51,370 --> 00:28:53,050 [Malan] Dit gebeur heksadesimaal te verteenwoordig. 449 00:28:53,050 --> 00:28:55,170 Ons het nie gepraat oor heksadesimale al dat daar nog baie, 450 00:28:55,170 --> 00:28:57,330 maar dit is eintlik handig in gevalle soos hierdie. 451 00:28:57,330 --> 00:29:01,730 >> Selfs al is dit lyk meer komplekse en hoewel dit lyk soos 20 en nie 32, 452 00:29:01,730 --> 00:29:06,240 dit blyk dat heksadesimaal eintlik is super gerieflike notasie 453 00:29:06,240 --> 00:29:10,810 want in heksadesimaal elke syfer na die 0x - en dit beteken niks nie; 454 00:29:10,810 --> 00:29:13,960 dit is net menslike konvensie wat sê hier kom 'n heksadesimale getal - 455 00:29:13,960 --> 00:29:18,590 elk van hierdie syfers, die 2 en dan die 0, kan hulle verteenwoordig word 456 00:29:18,590 --> 00:29:20,800 met presies 4 stukkies. 457 00:29:20,800 --> 00:29:27,840 So as ons dit doen, laat my oop te stel hier 'n teks editor - weird outovoltooiing - 458 00:29:27,840 --> 00:29:35,940 as ons dit doen hier 'n bietjie teks editor, beteken hier die aantal 0x20 4 bisse, hier is 'n ander 4 stukkies. 459 00:29:35,940 --> 00:29:38,050 Kom ons doen eers die regterkantste 4 stukkies. 460 00:29:38,050 --> 00:29:44,690 0 wanneer verteenwoordig met 4 stukkies is wat? Super maklik. Net al 0'e. 461 00:29:44,690 --> 00:29:46,780 So 4 bisse as 0S. 462 00:29:46,780 --> 00:29:53,510 Hoe stel jy 2? Dit was 'n rukkie sedert ons het dit gedoen, maar dit is 0100. 463 00:29:53,510 --> 00:29:57,310 So, dit is die 1s plek, dit is die 2s plek, en dan is dit maak nie saak wat die ander plekke is. 464 00:29:57,310 --> 00:30:00,610 Met ander woorde, in heksadesimaal jy dalk sê 0x20, 465 00:30:00,610 --> 00:30:04,340 maar as jy dan dink oor wat is die 2 en hoe word dit in binêre verteenwoordig, 466 00:30:04,340 --> 00:30:07,130 wat is die 0 en hoe word dit in binêre verteenwoordig, 467 00:30:07,130 --> 00:30:10,440 die antwoorde op hierdie vrae is dit en dit, onderskeidelik. 468 00:30:10,440 --> 00:30:14,380 So gebeur 0x20 hierdie patroon van 8 bisse te stel, 469 00:30:14,380 --> 00:30:16,880 wat is presies die masker wat ons wou. 470 00:30:16,880 --> 00:30:20,140 So, dit is vir die oomblik net 'n intellektuele oefening, 471 00:30:20,140 --> 00:30:24,520 maar die realiteit is in die kode is dit tipies is meer algemeen konstantes soos hierdie te skryf 472 00:30:24,520 --> 00:30:28,360 in heksadesimaal, want dan kan die programmeerder relatief maklik, 473 00:30:28,360 --> 00:30:32,560 selfs indien dit vereis van sommige papier en potlood, uit te vind wat daardie patroon van die stukkies is 474 00:30:32,560 --> 00:30:35,960 want jy kan nie net druk 0'e en 1s tipies in die kode. 475 00:30:35,960 --> 00:30:38,540 Jy kan nie 00.010 en so meer. 476 00:30:38,540 --> 00:30:42,380 >> Jy het desimale of hexadecimale of oktale of ander notasies te kies. 477 00:30:42,380 --> 00:30:47,540 Die meeste mense is geneig om heksadesimaal eenvoudig so dat elke syfer 4 stukkies te kies 478 00:30:47,540 --> 00:30:49,320 en wat jy kan doen hierdie vinnige wiskunde. 479 00:30:49,320 --> 00:30:54,990 En Ek sal my hand beweeg op toupper, wat is byna dieselfde, dit lyk byna identies. 480 00:30:54,990 --> 00:31:01,900 Toupper gebeur nie of operateur, maar eerder hierdie man en df te gebruik. 481 00:31:01,900 --> 00:31:09,300 Wat df verteenwoordig? df? Iemand? >> [Student] 255. 482 00:31:09,300 --> 00:31:12,780 255? Nie 255. Dit sou wees ff. 483 00:31:12,780 --> 00:31:15,210 Ons sal hierdie een laat as 'n bietjie oefening. 484 00:31:15,210 --> 00:31:23,460 Maar as jy gaan van 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 en dan wat kom na 9? 485 00:31:23,460 --> 00:31:26,510 Ons is soort van uit desimale syfers, maar in heksadesimaal wat kom na 9? 486 00:31:26,510 --> 00:31:29,510 [Student] a. >> So 'n, b, c, d. 487 00:31:29,510 --> 00:31:33,470 Jy kan uitvind van daar af watter patroon van stukkies d eintlik verteenwoordig. 488 00:31:33,470 --> 00:31:38,850 En as ons doen die wiskunde, sal ons sien dat die masker wat jy uiteindelik kry terug is identies aan hierdie een. 489 00:31:38,850 --> 00:31:45,580 Dit is f, alle 1s, en dit is d. So df daardie masker. Alles reg. 490 00:31:45,580 --> 00:31:50,980 En laastens, nie om dinge te laat klink super, super tegniese, 491 00:31:50,980 --> 00:31:53,840 maar veronderstel ons wou om 'n program te skryf wat dit doen. 492 00:31:53,840 --> 00:31:58,960 Laat my voort te gaan en maak binêre, wat is 'n program in 'n lêer genaamd binary.c. 493 00:31:58,960 --> 00:32:02,050 En nou, laat ek hardloop binêre en gee my 'n nie-negatiewe heelgetal. 494 00:32:02,050 --> 00:32:03,960 Kom ons begin maklik en tipe in 0. 495 00:32:03,960 --> 00:32:09,010 Dit is nou 'n program wat druk uit 'n heelgetal in sy binêre voorstelling. 496 00:32:09,010 --> 00:32:13,470 So as ek speel die spel weer en tik in net 1, moet ek 'n 32-bis voorstelling van 1. 497 00:32:13,470 --> 00:32:15,490 As ek dit doen weer met 2, moet ek kry. 498 00:32:15,490 --> 00:32:19,310 As ek dit doen 7, moet ek 'n paar 1s kry aan die einde en so meer. 499 00:32:19,310 --> 00:32:22,740 Dit blyk uit Ek noem dit omdat met bis-bedrywighede 500 00:32:22,740 --> 00:32:25,490 jy kan eintlik 'n ander ding doen as goed. 501 00:32:25,490 --> 00:32:29,130 Jy kan hierdie maskers dinamies. 502 00:32:29,130 --> 00:32:32,800 Neem 'n blik op hierdie een laaste voorbeeld wat bis-bedrywighede. 503 00:32:32,800 --> 00:32:35,490 Hier is die eerste deel van die kode, lei die gebruiker vir 'n aantal 504 00:32:35,490 --> 00:32:38,130 en dit dring daarop aan dat jy gee my 'n nie-negatiewe heelgetal. 505 00:32:38,130 --> 00:32:39,780 So dit is 'n soort van die ou skool stuff. 506 00:32:39,780 --> 00:32:41,980 Maar hier is iets wat interessant is soort. 507 00:32:41,980 --> 00:32:44,910 >> Hoe gaan ek oor die druk van 'n nommer in die binêre? 508 00:32:44,910 --> 00:32:48,970 Ek die eerste keer itereer van wat na wat? 509 00:32:48,970 --> 00:32:52,270 Wat is die grootte van 'n int tipies, ten minste in die toestel? >> [Student] 4. 510 00:32:52,270 --> 00:32:57,130 Dit is 4. So 4 * 8 32 - 1 is 31. 511 00:32:57,130 --> 00:33:02,590 So as ek begin te tel uit 31, wat verteenwoordig, dit blyk, 512 00:33:02,590 --> 00:33:07,630 net konseptueel, die 31ste bietjie of die hoogste orde bietjie, wat is hierdie man hier, 513 00:33:07,630 --> 00:33:09,650 terwyl dit gaan bietjie 0. 514 00:33:09,650 --> 00:33:12,850 So dit is bietjie 01 ... bietjie 31. 515 00:33:12,850 --> 00:33:14,950 So, wat is hierdie kode te doen? 516 00:33:14,950 --> 00:33:20,140 Let op hierdie lus, selfs al lyk dit kripties, net iterating van 31 af na 0. Dit is dit. 517 00:33:20,140 --> 00:33:24,530 Dus is die interessante deel moet nou in hierdie 5 lyne hier. 518 00:33:24,530 --> 00:33:28,110 Let daarop dat in hierdie lyn het ek 'n veranderlike genoem masker is verklaar 519 00:33:28,110 --> 00:33:30,790 te wees in ooreenstemming met ons storie van hierdie geel getalle. 520 00:33:30,790 --> 00:33:32,200 En dan wat is om dit te doen? 521 00:33:32,200 --> 00:33:35,720 Dit is 'n ander bis operateur het ons nie gesien het nie, waarskynlik. 522 00:33:35,720 --> 00:33:38,300 Dit is die linker verskuiwing operateur. 523 00:33:38,300 --> 00:33:40,060 Hierdie operateur doen dit. 524 00:33:40,060 --> 00:33:44,920 Hier is die getal 1, en as jy dit doen Ek het verskuiwing, links skuif, 525 00:33:44,920 --> 00:33:49,260 wat dink jy wat die effek van doen dat individuele 1? 526 00:33:49,260 --> 00:33:51,290 Letterlik skuif dit oor. 527 00:33:51,290 --> 00:33:57,540 Dus, as die nommer 1 is wat jy aan die linkerkant en jy begin deur die inisialisering i 31, 528 00:33:57,540 --> 00:34:03,490 wat dit gaan doen? Dit gaan hierdie nommer 1 te neem en skuif dit 31 plekke hier. 529 00:34:03,490 --> 00:34:06,210 En omdat daar natuurlik geen ander syfers agter dit, 530 00:34:06,210 --> 00:34:10,350 dié sal by verstek vervang word met 0s. 531 00:34:10,350 --> 00:34:15,120 So jy sal begin met die getal 1, wat natuurlik lyk soos hierdie - 532 00:34:15,120 --> 00:34:18,659 en laat my trek dit oor hier in die middel. 533 00:34:18,659 --> 00:34:22,139 En dan as jy dinge skuif na links, hierdie man gaan in wese op hierdie manier. 534 00:34:22,139 --> 00:34:24,659 Maar so gou as jy dit doen, kry 'n 0 gevul. 535 00:34:24,659 --> 00:34:28,360 As jy skuif dit 'n tweede keer, gaan dit op hierdie manier en 'n ander 0 kry gevul. 536 00:34:28,360 --> 00:34:31,000 >> Jy skuif dit weer en dan nog 'n 0 kry gevul. 537 00:34:31,000 --> 00:34:37,900 So as jy hierdie ding van 1 << i 31 plekke, jy eindig met 'n masker 538 00:34:37,900 --> 00:34:42,550 wat is 32 karakters lank, die linker een van die wat is 'n 1, 539 00:34:42,550 --> 00:34:45,199 almal van die res van wat is 'n 0. 540 00:34:45,199 --> 00:34:50,880 En dit blyk uit, as 'n eenkant, die verskuiwing van 'n nommer aan die linkerkant soos hierdie 541 00:34:50,880 --> 00:34:53,530 ook toevallig, en soms gerieflik, 542 00:34:53,530 --> 00:34:57,520 het die effek van doen wat aan daardie getal? >> [Student] Verdubbeling. 543 00:34:57,520 --> 00:35:00,980 Verdubbeling dit omdat elk van die kolomme - die 1s, 2s plek, 4s plek, 544 00:35:00,980 --> 00:35:05,030 8s, 16s plek - they're al die verdubbeling as jy links gaan. 545 00:35:05,030 --> 00:35:09,500 Of eerder, wanneer jy skuif die 1s jy gaan aan die einde die verdubbeling van die waarde van die getal. 546 00:35:09,500 --> 00:35:12,070 Jy kan beland doen interessante transformasies van syfers 547 00:35:12,070 --> 00:35:15,640 deur die verskuiwing van alles op hierdie wyse deur die magte van 2. 548 00:35:15,640 --> 00:35:17,150 So hoe werk dit? 549 00:35:17,150 --> 00:35:22,580 Dit gee dan vir my 'n masker wat alle 0'e, behalwe vir 'n 1 in presies die plek waar ek dit wil hê, 550 00:35:22,580 --> 00:35:27,920 en dan hierdie uitdrukking, wat van toupper.c gesteel word, 551 00:35:27,920 --> 00:35:31,770 is eenvoudig sê die getal n dat die gebruiker ingetik in, 552 00:35:31,770 --> 00:35:34,730 "En" dit met daardie masker, en wat is jy gaan om te kry? 553 00:35:34,730 --> 00:35:39,200 Jy gaan 'n 1 te kry as daar 'n 1 in daardie gemaskerde plek, 554 00:35:39,200 --> 00:35:41,570 of jy gaan 'n 0 te kry as daar is nie. 555 00:35:41,570 --> 00:35:44,370 En so het al hierdie program is effektief dit het 'n lus, 556 00:35:44,370 --> 00:35:48,340 en dit skep 'n masker met 'n 1 hier, dan 'n 1 hier, dan 'n 1 hier, 557 00:35:48,340 --> 00:35:52,950 en gebruik dit hierdie bis EN truuk om te sê, is daar 'n 1 bietjie in die gebruiker se insette hier? 558 00:35:52,950 --> 00:35:59,220 >> Is daar 'n 1 bietjie in die gebruiker se insette hier? En indien wel, letterlik druk 1, anders druk 0. 559 00:35:59,220 --> 00:36:03,780 Ons is om dit te doen met ints net omdat dit is die rede waarom ons doen 32 bisse in plaas van 8, 560 00:36:03,780 --> 00:36:06,900 maar wat het ons dan ingestel is hierdie bis EN, hierdie bis of, 561 00:36:06,900 --> 00:36:10,450 en hierdie links verskuiwing operateur, wat nie dikwels vreeslik nuttig, 562 00:36:10,450 --> 00:36:12,230 maar dit blyk dat hulle kan wees. 563 00:36:12,230 --> 00:36:16,560 In werklikheid, as jy iets soos 'n boolse skikking te verteenwoordig 564 00:36:16,560 --> 00:36:21,260 net waar of vals voor te stel, veronderstel jy wil om tred te hou van of 565 00:36:21,260 --> 00:36:24,630 'n kamer vol van 300 studente teenwoordig is, 566 00:36:24,630 --> 00:36:29,420 jy kan 'n verskeidenheid van grootte 300 van die tipe Bool verklaar sodat jy 300 bools, 567 00:36:29,420 --> 00:36:33,090 en jy kan elkeen na waar as iemand hier is en valse anders. 568 00:36:33,090 --> 00:36:37,550 Hoekom is dit verteenwoordiging in daardie data struktuur ondoeltreffend? 569 00:36:39,370 --> 00:36:44,800 Wat is sleg oor die ontwerp van daardie data struktuur, 'n verskeidenheid van 300 bools? 570 00:36:46,190 --> 00:36:49,600 Wat is 'n Bool, in werklikheid, onder die enjinkap? 571 00:36:49,600 --> 00:36:52,310 Hierdie, ook, is iets wat dalk nie vertroud wees. 572 00:36:52,310 --> 00:36:53,720 Dit blyk uit daar is geen Bool. 573 00:36:53,720 --> 00:36:56,620 Onthou ons soort van geskep dat met die cs50.h lêer, 574 00:36:56,620 --> 00:36:58,630 wat self sluit standaard Bool. 575 00:36:58,630 --> 00:37:00,930 C is 'n soort van dom, maar, wanneer dit kom by Bool. 576 00:37:00,930 --> 00:37:04,880 Dit maak gebruik van 8 stukkies elke Bool te stel, wat is heeltemal verkwistende 577 00:37:04,880 --> 00:37:09,040 want natuurlik, hoeveel stukkies wat jy nodig het 'n Bool te stel? Net 1. 578 00:37:09,040 --> 00:37:13,190 So dit blyk dat as jy het nou die vermoë om met bis-operateurs 579 00:37:13,190 --> 00:37:17,760 individuele stukkies selfs in 'n kar, selfs in 'n enkele greep te manipuleer, 580 00:37:17,760 --> 00:37:21,380 dit blyk dat jy kan die geheue wat nodig is om iets dom te stel verminder 581 00:37:21,380 --> 00:37:25,490 soos dat die bywoning styl data struktuur deur 'n faktor van 8. 582 00:37:25,490 --> 00:37:29,820 In plaas van die gebruik van agt bisse waar of vals voor te stel, kan jy letterlik gebruik maak van een 583 00:37:29,820 --> 00:37:34,500 deur gebruik te maak van 'n enkele greep vir elke agt studente in die klas 584 00:37:34,500 --> 00:37:41,990 en Reguliere van 0 tot 1 individuele stukkies deur die gebruik van hierdie soort van lae-vlak truuks. 585 00:37:43,850 --> 00:37:49,460 Wat werklik 'n einde aan die energie. Is daar enige vrae oor bis bedrywighede? 586 00:37:49,460 --> 00:37:52,710 >> Ja. >> [Student] Is daar 'n eksklusiewe of operateur? 587 00:37:52,710 --> 00:37:56,440 Ja. Daar is 'n eksklusiewe of operateur wat lyk soos hierdie, ^, die wortel simbool, 588 00:37:56,440 --> 00:38:02,070 wat beteken dat slegs die eerste ding of die tweede ding kan 'n 1 vir die uitset na 'n 1. 589 00:38:02,070 --> 00:38:07,750 Daar is ook 'n nie ~, wat sal toelaat dat jy 'n 0 na 'n 1 of andersom sowel omkeer. 590 00:38:07,750 --> 00:38:11,600 En daar is ook 'n regter shift-operateur, >>, wat is die teenoorgestelde van die een wat ons gesien het. 591 00:38:11,600 --> 00:38:13,850 Alles reg. Kom ons neem dinge nou na 'n hoër vlak. 592 00:38:13,850 --> 00:38:16,770 Ons het begin deur te praat oor die teks en dan dit te comprimeren 593 00:38:16,770 --> 00:38:19,650 en wat die teks met minder aantal bisse; 594 00:38:19,650 --> 00:38:22,890 ons gesels 'n bietjie oor hoe ons kan nou begin manipuleer dinge op 'n bis-vlak. 595 00:38:22,890 --> 00:38:26,640 Kom ons kyk nou zoom back-up 10.000 voete op verteenwoordiging 596 00:38:26,640 --> 00:38:29,250 van meer komplekse dinge soos grafika. 597 00:38:29,250 --> 00:38:32,950 Hier het ons het 'n vlag van Duitsland, hier het ons een van Frankryk. 598 00:38:32,950 --> 00:38:36,350 Dit kan voorgestel word in lêer formate wat jy kan weet - GIFs, byvoorbeeld. 599 00:38:36,350 --> 00:38:40,030 As jy nog ooit gesien het 'n beeld op die web wat eindig in. Gif, 600 00:38:40,030 --> 00:38:43,000 dit is 'n Graphics Interchange Format. 601 00:38:43,000 --> 00:38:47,530 Hierdie twee vlae hier soort van hulself leen tot die kompressie 602 00:38:47,530 --> 00:38:52,050 vir wat dalk voor die hand liggende rede? >> [Onhoorbaar student reaksie] 603 00:38:52,050 --> 00:38:53,440 Daar is 'n baie van die herhaling, reg? 604 00:38:53,440 --> 00:38:57,270 Ten einde Duitsland se vlag te stuur, dink aan dit as 'n beeld op die skerm 605 00:38:57,270 --> 00:38:59,030 terug in jou Scratch dae. 606 00:38:59,030 --> 00:39:02,380 Jy kan onthou dat daar is individuele pixels of kolletjies wat 'n beeld. 607 00:39:02,380 --> 00:39:06,650 >> Daar is 'n hele ry swart kolletjies en nog 'n hele ry van swart kolletjies. 608 00:39:06,650 --> 00:39:10,110 Daar is 'n klomp van die rye swart kolle wat ons kan sien of ons werklik vergrote in, 609 00:39:10,110 --> 00:39:13,370 graag wanneer ons ingezoomd op Rob se gesig in Photoshop. 610 00:39:13,370 --> 00:39:15,500 So gou as ons het dieper en dieper en dieper in die beeld, 611 00:39:15,500 --> 00:39:19,990 jy begin sien die pixelation, al die blokkies wat sy oog in daardie geval saamgestel. 612 00:39:19,990 --> 00:39:24,130 Dieselfde deal hier. As ons vergrote in nogal 'n bietjie, sou jy sien individuele kolle. 613 00:39:24,130 --> 00:39:27,110 Wel, dit is soort van 'n vermorsing van stukkies. 614 00:39:27,110 --> 00:39:32,120 As 1/3 van die vlag is swart en 1/3 van die vlag is geel en so meer, 615 00:39:32,120 --> 00:39:34,860 Daarom kan ons nie op een of ander manier compress hierdie vlag? 616 00:39:34,860 --> 00:39:39,560 En selfs die Franse vlag kan saamgepers word, selfs al is die patroon is 'n bietjie anders. 617 00:39:39,560 --> 00:39:44,120 Dit blyk uit die GIF-lêer formaat is 'n lossless kompressie-formaat, 618 00:39:44,120 --> 00:39:48,420 wat beteken dat jy kan 'n beeld soos die Duitse vlag hier, 619 00:39:48,420 --> 00:39:53,540 jy kan 'n klomp van sy stukkies weggooi sonder om afbreuk te kwaliteit. 620 00:39:53,540 --> 00:39:55,340 Dit is in teenstelling met iets soos JPEG, 621 00:39:55,340 --> 00:39:57,050 waarmee die meeste van ons is waarskynlik meer bekend. 622 00:39:57,050 --> 00:39:59,000 Facebook foto's en Flickr foto's en dies meer 623 00:39:59,000 --> 00:40:02,200 is byna altyd gestoor as JPEG wanneer hulle opgelaai, 624 00:40:02,200 --> 00:40:08,100 maar JPEG is 'n lossy lossy - waardeur jy weggooi stukkies 625 00:40:08,100 --> 00:40:10,430 maar jy moet ook weggooi gehalte. 626 00:40:10,430 --> 00:40:13,890 En so, as jy compress foto's met Photoshop of oplaai na Facebook 627 00:40:13,890 --> 00:40:15,580 of neem hulle op 'n baie crappy telefoon, 628 00:40:15,580 --> 00:40:19,510 jy weet dat die prentjie begin om te kry baie vuil en pixelated, 629 00:40:19,510 --> 00:40:22,290 en dit is omdat dit is wat saamgepers deur die rekenaar of selfoon 630 00:40:22,290 --> 00:40:24,550 deur letterlik gooi inligting weg. 631 00:40:24,550 --> 00:40:28,500 Maar GIF is ongelooflik dat dit minder stukkies kan gebruik as wat dit kan by verstek 632 00:40:28,500 --> 00:40:30,750 sonder om enige inligting te verloor. 633 00:40:30,750 --> 00:40:32,410 >> En dit nie in wese soos volg. 634 00:40:32,410 --> 00:40:38,740 Eerder as om die winkel in 'n lêer soos 'n BMP sou 'n RGB triple vir swart, swart, swart, swart, 635 00:40:38,740 --> 00:40:42,570 swart, swart, swart, swart, swart, swart, swart, swart en so meer, 636 00:40:42,570 --> 00:40:45,640 eerder die GIF-formaat gaan om te sê, "Swart," 637 00:40:45,640 --> 00:40:48,330 en dan, "Herhaal hierdie 100 keer," of iets soos dit. 638 00:40:48,330 --> 00:40:52,280 "Swart, herhaal hierdie 100 keer, swart, herhaal hierdie 100 keer ..." 639 00:40:52,280 --> 00:40:54,530 "Geel, hierdie 100 keer herhaal." 640 00:40:54,530 --> 00:40:57,200 En so is dit onthou, in wese, die linker pixel 641 00:40:57,200 --> 00:41:02,160 en kodeer dan die een of ander manier die idee van die weer en weer herhaal dat pixel. 642 00:41:02,160 --> 00:41:06,110 So GIFs kan compress hulle dan sonder om enige inligting te verloor. 643 00:41:06,110 --> 00:41:09,510 Maar as jy het om te raai, as dit die algoritme wat gifs gebruik, 644 00:41:09,510 --> 00:41:13,180 wat van hierdie vlae, selfs al is hulle lyk identies in grootte, 645 00:41:13,180 --> 00:41:19,620 gaan om te wees kleiner as op die skyf gestoor as 'n GIF? >> [Student] Duitsland. 646 00:41:19,620 --> 00:41:21,660 Duitsland gaan om kleiner te wees? Hoekom? 647 00:41:21,660 --> 00:41:26,620 [Student] Omdat jy dit herhaal baie, baie keer horisontaal 648 00:41:26,620 --> 00:41:29,010 en dan moet jy ander tyd herhaal. >> Presies. 649 00:41:29,010 --> 00:41:32,020 Omdat die mense wat GIF uitgevind net soort van arbitrêr besluit 650 00:41:32,020 --> 00:41:36,040 dat die herhaling horisontaal en nie lateraal aged. 651 00:41:36,040 --> 00:41:40,900 Daar is 'n baie meer herhaling lateraal hier in die Duitse vlag as in die Franse vlag. 652 00:41:40,900 --> 00:41:44,430 So as ons eintlik 'n gids op my harde skyf, wat het hierdie GIFs, 653 00:41:44,430 --> 00:41:51,920 jy kan eintlik sien dat die Duitse vlag hier is 2 kilogrepe en die Franse is 4 kilogrepe. 654 00:41:51,920 --> 00:41:54,080 Dit gebeur as 'n toevalligheid dat 'n mens twee keer die ander, 655 00:41:54,080 --> 00:41:57,960 maar dit is in werklikheid die geval dat die Franse vlag is veel groter. 656 00:41:57,960 --> 00:42:01,250 >> Selfs al is ons hier praat oor die graphics, kan dieselfde idees van toepassing op 657 00:42:01,250 --> 00:42:05,150 nie dinge soos vlae maar beelde wat 'n bietjie meer kompleks. 658 00:42:05,150 --> 00:42:08,170 As jy 'n foto van 'n appel, voorwaar, daar is 'n baie van duplisering, 659 00:42:08,170 --> 00:42:11,040 sodat ons kan op een of ander manier te onthou dat die standaard agtergrond is blou 660 00:42:11,040 --> 00:42:13,230 en nie, soos die regterkantste foto aandui, 661 00:42:13,230 --> 00:42:16,830 die kleur van elke enkele pixel in hierdie prentjie om te onthou. 662 00:42:16,830 --> 00:42:21,060 Sodat ons kan gooi stukkies weg daar sonder om inligting te verloor. 663 00:42:21,060 --> 00:42:23,340 Die appel lyk nog net dieselfde. 664 00:42:23,340 --> 00:42:27,510 Hier in hierdie voorbeeld, kan jy sien wat gebeur in 'n film. 665 00:42:27,510 --> 00:42:31,970 Hierdie ou-skool film rolle waardeur in die boonste prent daar verteenwoordig 666 00:42:31,970 --> 00:42:36,900 jy het 'n RV ry verby 'n huis en 'n boom. 667 00:42:36,900 --> 00:42:42,130 En as dié van verby ry van links na regs, wat natuurlik nie om te verander? 668 00:42:42,130 --> 00:42:45,320 Die huis is nie iewers heen gaan, en die boom is nie iewers heen gaan. 669 00:42:45,320 --> 00:42:47,700 Die enigste ding wat beweeg is die van in hierdie geval. 670 00:42:47,700 --> 00:42:51,650 So as agtergrond Onveranderd suggereer, wat jy kan doen in films 671 00:42:51,650 --> 00:42:56,530 is insgelyks net weggooi inligting wat nie verander tussen rame. 672 00:42:56,530 --> 00:42:58,900 Dit is algemeen bekend as interframe kompressie 673 00:42:58,900 --> 00:43:02,120 waardeur as dit raam lyk byna identies is aan hierdie een, 674 00:43:02,120 --> 00:43:05,390 laat ons nie die moeite stoor op skyf van enige van die identiese inligting 675 00:43:05,390 --> 00:43:09,250 op hierdie intermediêre rame, laat se enigste sleutel rame gebruik een keer in 'n rukkie 676 00:43:09,250 --> 00:43:13,420 wat eintlik dat inligting kere net so 'n bietjie gesonde verstand gaan stoor. 677 00:43:13,420 --> 00:43:18,620 >> In teenstelling, 'n ander benadering te comprimeren video is in hierdie tweede en laer voorbeeld hier, 678 00:43:18,620 --> 00:43:23,970 waar eerder as winkel 30 rame, hoekom doen jy nie net 15 rame per sekonde stoor plaas? 679 00:43:23,970 --> 00:43:27,070 Eerder as om die fliek soort van vloeiende pragtig, perfek, 680 00:43:27,070 --> 00:43:30,060 is dit dalk lyk dit hakkel 'n bietjie, 'n bietjie ou skool, 681 00:43:30,060 --> 00:43:37,190 maar die netto effek sal veel minder stukkies as wat dit andersins nodig wees om te gebruik. 682 00:43:37,190 --> 00:43:39,240 So waar dit laat ons dan? 683 00:43:39,240 --> 00:43:41,700 Dit was 'n bietjie van 'n eenkant waar anders kan jy gaan met kompressie. 684 00:43:41,700 --> 00:43:45,140 Vir meer inligting op daardie, neem 'n klas soos CS175 hier. 685 00:43:45,140 --> 00:43:46,990 Hier is nog 'n voorbeeld in die video. 686 00:43:46,990 --> 00:43:49,190 As die bye is die enigste ding wat beweeg, 687 00:43:49,190 --> 00:43:51,790 jy kan regtig weggooi inligting in daardie middelste rame 688 00:43:51,790 --> 00:43:55,260 omdat die blom en die lug en blare is nie besig om te verander. 689 00:43:55,260 --> 00:43:57,960 Maar laat ons nou een laaste ding wat oorweeg. 690 00:43:57,960 --> 00:44:03,890 In die volgende 5 minute het ons verlaat C agter vir ewig in die lesing? Ja. Nie in die psets, though. 691 00:44:03,890 --> 00:44:10,210 Laaste storie oor C en dan kry ons 'n baie sexy stuff 692 00:44:10,210 --> 00:44:13,870 met HTML en Web-en woo-hoo. Alles reg. 693 00:44:13,870 --> 00:44:16,050 Hier gaan ons. Dit is die motivering. 694 00:44:16,050 --> 00:44:20,020 Dit blyk uit al hierdie tyd wanneer ons programme loop ons kletteren skryf. 695 00:44:20,020 --> 00:44:23,890 En klang, ons het gesê sedert die eerste week pretty much, bronkode 696 00:44:23,890 --> 00:44:25,740 en dit omskakel in object code. 697 00:44:25,740 --> 00:44:28,540 Dit neem C en dit omskakel in 0'e en 1s. 698 00:44:28,540 --> 00:44:32,150 Ek het soort van lieg vir jou vir 'n paar weke, want dit is nie heeltemal so eenvoudig soos dit. 699 00:44:32,150 --> 00:44:36,750 >> Daar is 'n baie meer onder die enjinkap aangaan wanneer jy 'n program soos kletteren. 700 00:44:36,750 --> 00:44:39,560 In feite, kan werklik die proses van die opstel van 'n program opgesom word, 701 00:44:39,560 --> 00:44:42,210 as jy kan onthou van Rob se video op samestellers, 702 00:44:42,210 --> 00:44:47,580 in hierdie 4 stappe: pre-verwerking, samestelling self, vervaardiging, en koppel. 703 00:44:47,580 --> 00:44:51,950 Maar ons in die klas en die meeste mense in die wêreld tipies n opsomming van al hierdie stappe 704 00:44:51,950 --> 00:44:54,410 as net "die opstel van." 705 00:44:54,410 --> 00:44:58,070 Maar as ons begin met die bron kode soos hierdie, onthou dit is miskien die eenvoudigste C program 706 00:44:58,070 --> 00:45:03,530 ons het tot dusver geskryf is, onthou dat wanneer saamgestel dit eindig op soek soos hierdie. 707 00:45:03,530 --> 00:45:07,310 Maar daar is eintlik 'n intermediêre stap, en daardie stappe is soos volg. 708 00:45:07,310 --> 00:45:10,750 Eerstens is daar is hierdie ding op die top van hierdie en die meeste van ons programme, 709 00:45:10,750 --> 00:45:13,550 # Include 710 00:45:13,550 --> 00:45:17,210 Wat beteken # sluit vir ons doen? 711 00:45:17,210 --> 00:45:24,150 Dit pretty much kopieer en plak die inhoud van stdio.h in my lêer sodat hoekom? 712 00:45:24,150 --> 00:45:27,220 Waarom gee ek nie oor die inhoud van stdio.h? Wat is daar van belang? 713 00:45:27,220 --> 00:45:32,310 Printf se verklaring, sy prototipe, sodat die vertaler dan weet wat ek bedoel 714 00:45:32,310 --> 00:45:34,900 wanneer ek noem hierdie funksie printf. 715 00:45:34,900 --> 00:45:39,390 So stap 1 in die opstel van pre-verwerking, waardeur 'n program soos kletteren 716 00:45:39,390 --> 00:45:43,450 of 'n helper program wat kletteren kom met lees jou kode van bo na onder, 717 00:45:43,450 --> 00:45:47,740 links na regs, en 'n tyd wat dit 'n # simbool sien, gevolg deur 'n sleutelwoord soos sluit, 718 00:45:47,740 --> 00:45:53,980 dit voer dat die operasie, kopieer en plak in hierdie geval stdio.h in jou lêer. 719 00:45:53,980 --> 00:45:55,510 Dit is stap 1. 720 00:45:55,510 --> 00:45:59,620 Dan het jy 'n veel groter C-lêer as gevolg van die groot kopieer, plak werk wat nou net gebeur het. 721 00:45:59,620 --> 00:46:01,710 >> Stap 2 is besig om nou. 722 00:46:01,710 --> 00:46:04,880 Maar dit blyk uit die samestelling van bron-kode wat lyk soos hierdie 723 00:46:04,880 --> 00:46:08,160 en draai dit in iets wat lyk soos hierdie, 724 00:46:08,160 --> 00:46:12,560 wat vir diegene wat vertroud is genoem? >> [Student] Vergadering. >> Assembly language. 725 00:46:12,560 --> 00:46:16,700 Dit is eintlik iets as jy CS61 jy in duik in meer detail. 726 00:46:16,700 --> 00:46:22,380 Dit is net omtrent so naby as wat jy kan kry tot die skryf van 0'e en 1s jouself 727 00:46:22,380 --> 00:46:25,850 maar die skryf van dinge in so 'n manier wat nog ten minste 'n bietjie sin maak. 728 00:46:25,850 --> 00:46:30,760 Hierdie masjien instruksies, en as ons scroll af na die hooffunksie hier, 729 00:46:30,760 --> 00:46:35,470 agterkom dat daar is dit push onderrig, beweeg onderrig, aftrek onderrig, 730 00:46:35,470 --> 00:46:38,550 noem onderrig, en so meer. 731 00:46:38,550 --> 00:46:42,930 Wanneer jy hoor dat jou rekenaar Intel Inside, 732 00:46:42,930 --> 00:46:46,180 jy het 'n Intel CPU in jou Mac of PC, wat beteken dit? 733 00:46:46,180 --> 00:46:51,200 'N CPU kom wat gebou is deur maatskappye soos Intel sekere instruksies te verstaan. 734 00:46:51,200 --> 00:46:55,770 Hulle het geen idee watter funksies soos swap is of die hoof is per se, 735 00:46:55,770 --> 00:47:00,060 maar hulle weet wat baie lae-vlak instruksies soos, trek, stoot, 736 00:47:00,060 --> 00:47:02,430 beweeg, te roep, en so meer. 737 00:47:02,430 --> 00:47:06,170 So wanneer jy stel C-kode in saamsteltaal, 738 00:47:06,170 --> 00:47:11,820 jou baie gebruikers vriendelik-looking kode omgeskakel word in iets wat lyk soos hierdie, 739 00:47:11,820 --> 00:47:21,670 wat beweeg letterlik bytes of 4 bytes om in so 'n klein eenhede in en uit van die SVE. 740 00:47:21,670 --> 00:47:26,820 Maar uiteindelik, wanneer kletteren is gereed om hierdie voorstelling van jou program te neem 741 00:47:26,820 --> 00:47:30,940 in 0'e en 1s, dan is die stap met die naam byeenkoms gebeur, 742 00:47:30,940 --> 00:47:33,850 en dit gebeur weer almal in die knip van 'n oog toe hardloop kletteren. 743 00:47:33,850 --> 00:47:39,300 Ons hier begin, is dit uitgange 'n lêer soos hierdie, en dit dan moet dit omskakel na hierdie 0'e en 1s. 744 00:47:39,300 --> 00:47:42,000 En as jy wil om terug te gaan op 'n sekere punt en eintlik dit in aksie te sien, 745 00:47:42,000 --> 00:47:48,220 as ek kom in hello1.c-dit is een van die eerste programme wat ons kyk na - 746 00:47:48,220 --> 00:47:53,710 normaalweg sou ons stel dit met kletteren hello1.c en dit sou gee ons a.out. 747 00:47:53,710 --> 00:47:59,890 As jy daarenteen gee dit plaas-S vlag, wat kry jy hello1.s 748 00:47:59,890 --> 00:48:02,750 en jy sal sien die saamsteltaal. 749 00:48:02,750 --> 00:48:05,750 >> Ek doen dit vir 'n baie kort program, maar as jy terug te gaan vir Scramble 750 00:48:05,750 --> 00:48:08,740 of verhaal of enige program wat jy geskryf het en net uit nuuskierigheid 751 00:48:08,740 --> 00:48:13,240 wil om te sien wat dit werklik lyk, wat is eintlik gevoed word in die SVE, 752 00:48:13,240 --> 00:48:15,700 jy kan dat-S vlag gebruik met kletteren. 753 00:48:15,700 --> 00:48:17,770 Maar dan laastens, daar is nog steeds een Gotcha. 754 00:48:17,770 --> 00:48:21,810 Hier is die 0'e en 1s dat my implementering van Hello, world. 755 00:48:21,810 --> 00:48:25,530 Maar ek iemand anders se funksie in my program gebruik. 756 00:48:25,530 --> 00:48:28,710 Dus, selfs al is die proses was ek hello.c, 757 00:48:28,710 --> 00:48:34,280 kry dit saamgestel in vergadering-kode, en dan is dit kry vergader in 0'e en 1s, 758 00:48:34,280 --> 00:48:37,460 die enigste 0'e en 1s wat op hierdie punt in die tyd outputted 759 00:48:37,460 --> 00:48:40,270 is die een wat die gevolg is van my kode. 760 00:48:40,270 --> 00:48:44,400 Maar die persoon wat geskryf het printf, het hulle hul kode 20 jaar gelede saamgestel 761 00:48:44,400 --> 00:48:47,000 en dit is nou geïnstalleer iewers op die toestel, 762 00:48:47,000 --> 00:48:51,610 sodat ons die een of ander manier het sy of haar 0'e en 1s om saam te smelt met my 0'e en 1s, 763 00:48:51,610 --> 00:48:56,160 en dit bring ons by die 4de en finale stap van die opstel, bekend as koppel. 764 00:48:56,160 --> 00:48:58,680 So op die linkerkant ons het presies dieselfde beeld as voorheen: 765 00:48:58,680 --> 00:49:02,580 word hello.c vergadering kode 0e en 1e. 766 00:49:02,580 --> 00:49:05,960 Maar onthou dat ek gebruik die standaard I / O biblioteek in my kode, 767 00:49:05,960 --> 00:49:10,350 en dit beteken dat daar iewers op die rekenaar is 'n lêer genaamd stdio.c 768 00:49:10,350 --> 00:49:13,980 of ten minste die saamgestelde weergawe daarvan omdat iemand n paar jaar gelede 769 00:49:13,980 --> 00:49:18,530 saamgestel stdio.c in gemeente-kode en dan 'n hele klomp van 0'e en 1s. 770 00:49:18,530 --> 00:49:21,130 Dit is wat bekend staan ​​as 'n statiese of 'n dinamiese biblioteek nie. 771 00:49:21,130 --> 00:49:23,350 Dit is 'n paar lêer sit iewers in die toestel. 772 00:49:23,350 --> 00:49:28,710 >> Maar laastens, ek het my 0'e en 1s te neem en daardie persoon se 0'e en 1s 773 00:49:28,710 --> 00:49:32,760 en op een of ander manier verbind hulle saam, letterlik kombineer dié 0e en 1e 774 00:49:32,760 --> 00:49:37,900 in 'n enkele lêer genaamd a.out of hello1 of wat ookal ek het my program 775 00:49:37,900 --> 00:49:43,320 sodat die eind resultaat van die 1s en 0s wat my program saamstel. 776 00:49:43,320 --> 00:49:45,660 So het al die tyd hierdie semester wanneer jy kletteren al met behulp van 777 00:49:45,660 --> 00:49:48,750 en selfs meer onlangs loop ten einde kletteren te voer, 778 00:49:48,750 --> 00:49:53,580 al hierdie stappe het gebeur soort oombliklik maar baie doelbewus. 779 00:49:53,580 --> 00:49:57,830 En so, as jy nog steeds in rekenaarwetenskap, naamlik CS61, 780 00:49:57,830 --> 00:50:00,850 dit is die laag wat jy sal voortgaan om te skil af is daar 781 00:50:00,850 --> 00:50:06,980 praat oor die doeltreffendheid, veiligheid implikasies, en die wil van hierdie laer vlak besonderhede. 782 00:50:06,980 --> 00:50:09,220 Maar met wat ons oor C agterlaat. 783 00:50:09,220 --> 00:50:11,420 Kom ons gaan voort en neem ons 5-minute breek nou, 784 00:50:11,420 --> 00:50:14,190 en wanneer ons terug kom: die Internet. 785 00:50:17,280 --> 00:50:19,170 Alles reg. Ons is terug. 786 00:50:19,170 --> 00:50:23,590 Nou het ons begin om ons kyk nie net op HTML, want soos u sal sien, 787 00:50:23,590 --> 00:50:26,050 HTML self is eintlik redelik eenvoudig 788 00:50:26,050 --> 00:50:29,270 maar eintlik meer in die algemeen op die web programmering, netwerke meer in die algemeen, 789 00:50:29,270 --> 00:50:31,770 en hoe al hierdie tegnologie bymekaar kom 790 00:50:31,770 --> 00:50:35,400 ons in staat stel om baie meer gesofistikeerde programme te skep bo-op die Internet 791 00:50:35,400 --> 00:50:38,690 as tot dusver het ons in staat was om in hierdie swart en wit vensters. 792 00:50:38,690 --> 00:50:42,140 Inderdaad, selfs al is op hierdie punt in die semester sal ons relatief minder tyd spandeer 793 00:50:42,140 --> 00:50:46,200 op PHP, HTML, CSS, JavaScript, SQL en nog baie meer, 794 00:50:46,200 --> 00:50:48,480 die meeste studente doen einde finale projekte wat is web-gebaseerde 795 00:50:48,480 --> 00:50:51,230 want soos jy sien, die agtergrond wat jy nou in C 796 00:50:51,230 --> 00:50:54,450 is baie van toepassing op hierdie hoër vlak tale. 797 00:50:54,450 --> 00:50:56,800 >> En as jy begin dink oor jou finale projek, 798 00:50:56,800 --> 00:50:59,940 wat baie soos Problem Set 0, waar jy is aangemoedig 799 00:50:59,940 --> 00:51:02,160 die meeste enigiets van belang te doen om jou Scratch 800 00:51:02,160 --> 00:51:05,790 die finale projek is jou geleentheid om jou nuutgevonde kennis en vaardig te neem met C 801 00:51:05,790 --> 00:51:09,850 of PHP of JavaScript of die wil uit vir 'n spin 802 00:51:09,850 --> 00:51:12,330 en die skep van jou eie stukkie van die sagteware vir die wêreld te sien. 803 00:51:12,330 --> 00:51:17,770 En aan die saad wat jy met idees, weet dat jy hier kan die hoof, projects.cs50.net. 804 00:51:17,770 --> 00:51:21,800 Elke jaar het ons idees in te win van die fakulteit en personeel en studente groepe op die kampus 805 00:51:21,800 --> 00:51:27,330 net hulle idees in te dien vir die interessante dinge wat opgelos kan word deur gebruik te maak van rekenaars, 806 00:51:27,330 --> 00:51:29,860 die gebruik van webwerwe, die gebruik van sagteware. 807 00:51:29,860 --> 00:51:32,360 So as jy sukkel om te kom met 'n idee van jou eie, 808 00:51:32,360 --> 00:51:35,790 deur al beteken blaai deur die idees van hierdie jaar en verlede. 809 00:51:35,790 --> 00:51:39,990 Dit is heeltemal in orde om 'n projek aan te pak wat voorheen aangepak. 810 00:51:39,990 --> 00:51:44,540 Ons het gesien hoe baie apps vir die sien van die status van wasgoed op die kampus, 811 00:51:44,540 --> 00:51:47,000 baie apps om die eetsaal menu te opgevolg, 812 00:51:47,000 --> 00:51:49,540 baie apps vir die opgevolg deur die kursus katalogus en dies meer. 813 00:51:49,540 --> 00:51:53,680 En inderdaad, in 'n toekomstige lesing en in toekomstige seminare, 814 00:51:53,680 --> 00:51:57,750 ons sal jou bekendstel aan die publiek beskikbaar API's, beide kommersieel beskikbaar 815 00:51:57,750 --> 00:52:02,520 sowel as hier beskikbaar by CS50 op die kampus, sodat jy toegang tot inligting 816 00:52:02,520 --> 00:52:04,910 en kan dan interessante dinge doen met dit. 817 00:52:04,910 --> 00:52:09,380 Sodat meer in 'n paar dae op die finale projekte wanneer ons die vrylating van die spesifikasie, 818 00:52:09,380 --> 00:52:12,990 maar vir nou is, weet dat jy solo kan werk of met een of twee vriende 819 00:52:12,990 --> 00:52:16,010 op die meeste 'n projek van belang is vir jou. 820 00:52:16,010 --> 00:52:18,080 Die Internet. 821 00:52:18,080 --> 00:52:22,300 Jy gaan voort en trek uit jou laptop, gaan jy na facebook.com vir die eerste keer, 822 00:52:22,300 --> 00:52:27,020 nie aangemeld is onlangs, en druk Enter. Wat gebeur presies? 823 00:52:27,020 --> 00:52:30,150 >> As jy op jou rekenaar druk Enter, 'n hele klomp van die stappe 824 00:52:30,150 --> 00:52:32,600 Begin soort mettertyd gebeur. 825 00:52:32,600 --> 00:52:35,960 So jy hier aan die linkerkant, web bediener soos Facebook is hier aan die regterkant, 826 00:52:35,960 --> 00:52:42,500 en op een of ander manier is jy met behulp van hierdie taal genoem HTTP, HyperText Transfer Protocol. 827 00:52:42,500 --> 00:52:46,770 HTTP is nie 'n programmeertaal. Dit is meer van 'n protokol. 828 00:52:46,770 --> 00:52:52,310 Dit is 'n stel van die konvensies wat web blaaiers en webservers gebruik wanneer intercommunicating. 829 00:52:52,310 --> 00:52:54,360 En wat dit beteken, is soos volg. 830 00:52:54,360 --> 00:52:56,790 Graag in die werklike wêreld, ons het hierdie konvensies 831 00:52:56,790 --> 00:53:00,140 waar as jy n mens vir die eerste keer ontmoet, as jy nie omgee nie humoring my hier, 832 00:53:00,140 --> 00:53:03,980 Ek kan kom aan jou, sê: "Hallo, my naam is Dawid." >> Hi, David. My naam is Sammy. 833 00:53:03,980 --> 00:53:05,770 "Hi, David. My naam is Sammy." 834 00:53:05,770 --> 00:53:08,310 So nou het ons net wat betrokke is in hierdie soort van dom menslike protokol 835 00:53:08,310 --> 00:53:12,200 waar ek die protokol het begin, het Sammy gereageer, 836 00:53:12,200 --> 00:53:15,060 ons hande geskud het, en die transaksie voltooi is. 837 00:53:15,060 --> 00:53:18,260 HTTP is baie soortgelyk in die gees. 838 00:53:18,260 --> 00:53:23,350 Wanneer jou webblaaier versoeke www.facebook.com, 839 00:53:23,350 --> 00:53:27,020 wat jou browser is regtig doen die uitbreiding van sy hand, om so te praat, 840 00:53:27,020 --> 00:53:29,960 op die bediener en dit stuur 'n boodskap. 841 00:53:29,960 --> 00:53:34,220 En dat die boodskap is gewoonlik iets kry - wat wil jy te kry? 842 00:53:34,220 --> 00:53:38,740 kry my die tuisblad, wat gewoonlik aangedui deur 'n enkele streep aan die einde van 'n URL. 843 00:53:38,740 --> 00:53:43,790 En net sodat jy weet watter taal ek praat, ek is die leser gaan om jou te vertel 844 00:53:43,790 --> 00:53:46,930 dat ek praat HTTP weergawe 1.1, 845 00:53:46,930 --> 00:53:51,980 En ook vir 'n goeie maatreël, ek gaan om jou te vertel dat die leër te ontmoet wat ek wil die home page van 846 00:53:51,980 --> 00:53:54,120 is facebook.com. 847 00:53:54,120 --> 00:53:57,730 Tipies, 'n webblaaier, unbeknownst aan julle, die mens, 848 00:53:57,730 --> 00:54:03,350 stuur hierdie boodskap oor die internet as jy net www.facebook.com tik, 849 00:54:03,350 --> 00:54:05,370 >> Tik in jou browser. 850 00:54:05,370 --> 00:54:07,300 En wat beteken Facebook reageer met? 851 00:54:07,300 --> 00:54:12,540 Dit reageer met 'n soortgelyke soek kriptiese besonderhede, maar ook veel meer. 852 00:54:12,540 --> 00:54:14,310 Laat my voort te gaan na Facebook se home page hier. 853 00:54:14,310 --> 00:54:17,480 Dit is die skerm wat die meeste van ons waarskynlik nooit sien as jy bly aangeteken in al van die tyd, 854 00:54:17,480 --> 00:54:19,830 maar dit is inderdaad hulle tuisblad. 855 00:54:19,830 --> 00:54:24,150 As ons dit doen in Chrome, agterkom dat jy kan trek hierdie klein konteks kieslyste. 856 00:54:24,150 --> 00:54:26,980 Met Chrome, hetsy op Mac OS, Windows, Linux, of iets dergeliks, 857 00:54:26,980 --> 00:54:31,840 As jy kliek of links kliek beheer, kan jy gewoonlik trek 'n spyskaart wat lyk soos hierdie, 858 00:54:31,840 --> 00:54:35,870 waar 'n paar opsies wag, waarvan een is View Page Source. 859 00:54:35,870 --> 00:54:39,920 Jy kan gewoonlik ook van hierdie dinge deur te gaan na die kieslys en skeer rond. 860 00:54:39,920 --> 00:54:42,750 Byvoorbeeld, hier onder View Ontwikkelaars is dieselfde ding. 861 00:54:42,750 --> 00:54:45,780 Ek gaan om voort te gaan en kyk na View Page Source. 862 00:54:45,780 --> 00:54:50,800 Wat jy sien, is die HTML-kode wat Mark het geskryf facebook.com te verteenwoordig. 863 00:54:50,800 --> 00:54:55,910 Dit is 'n volledige gemors hier, maar ons sal sien dat dit 'n bietjie meer sin maak voor lank. 864 00:54:55,910 --> 00:54:59,840 Maar daar is 'n paar patrone hier. Laat my scroll af na dinge soos hierdie. 865 00:54:59,840 --> 00:55:05,730 Dit is moeilik vir 'n mens om te lees, maar sien dat daar is hierdie patroon van reghoekige hakies 866 00:55:05,730 --> 00:55:10,360 met sleutelwoorde soos opsie, sleutelwoorde soos waarde, sommige aangehaal snare. 867 00:55:10,360 --> 00:55:15,660 Dit is waar, wanneer jy ingeteken het vir die heel eerste keer gespesifiseer wat jou geboorte jaar is. 868 00:55:15,660 --> 00:55:19,020 Dit drop-down menu van geboorte jaar word een of ander manier hier geïnkripteer 869 00:55:19,020 --> 00:55:23,870 in hierdie taal genoem HTML, HyperText Markup Language. 870 00:55:23,870 --> 00:55:27,730 Met ander woorde, wanneer jou blaaier 'n webblad versoek, 871 00:55:27,730 --> 00:55:30,610 dit praat hierdie Konvensie genoem HTTP. 872 00:55:30,610 --> 00:55:35,170 Maar wat beteken facebook.com aan daardie versoek reageer? 873 00:55:35,170 --> 00:55:38,260 >> Dit reageer met 'n paar van hierdie kriptiese boodskappe, soos ons sal sien in 'n oomblik. 874 00:55:38,260 --> 00:55:43,760 Maar die meeste van sy antwoord is in die vorm van HTML, HyperText Markup Language. 875 00:55:43,760 --> 00:55:47,170 Dit is die taal waarin 'n web bladsy is geskryf. 876 00:55:47,170 --> 00:55:52,030 En wat 'n webblaaier nie regtig dan, by ontvangs van iets wat lyk soos hierdie, 877 00:55:52,030 --> 00:55:57,120 lees dit van bo na onder, links na regs, en enige tyd dit sien een van hierdie reghoekige hakies 878 00:55:57,120 --> 00:56:03,370 gevolg deur 'n sleutelwoord soos opsie, dit toon dat die opmaak taal op die gepaste manier. 879 00:56:03,370 --> 00:56:06,820 In hierdie geval, sou dit vertoon 'n drop-down menu jare. 880 00:56:06,820 --> 00:56:09,240 Maar weer, dit is 'n volledige gemors om na te kyk. 881 00:56:09,240 --> 00:56:16,630 Dit is nie omdat Facebook ontwikkelaars manifesteer 0 vir 5 styl, byvoorbeeld. 882 00:56:16,630 --> 00:56:20,190 Dit is omdat die meeste van die kode wat hulle skryf is, in werklikheid, geskryf pragtig, 883 00:56:20,190 --> 00:56:22,450 goed gedraai, mooi ingekeep, en dies meer, 884 00:56:22,450 --> 00:56:26,080 maar natuurlik masjiene, rekenaars, blaaiers gee regtig nie 'n damn 885 00:56:26,080 --> 00:56:27,890 of jou kode is 'n goed-styl. 886 00:56:27,890 --> 00:56:33,100 En in die feit, dit is heeltemal verkwistende om die Tab-sleutel te druk al die tye 887 00:56:33,100 --> 00:56:37,650 en kommentaar te plaas regdeur jou kode en regtig beskrywende veranderlike name te kies 888 00:56:37,650 --> 00:56:42,340 want as die leser nie sorg nie, is al wat jy doen aan die einde van die dag mors grepe. 889 00:56:42,340 --> 00:56:46,660 >> So dit blyk uit wat die meeste webtuistes selfs al is die bron-kode vir facebook.com 890 00:56:46,660 --> 00:56:49,550 vir cs50.net en al hierdie ander webwerwe op die Internet 891 00:56:49,550 --> 00:56:53,730 word gewoonlik goed geskryf en goed gedraai en mooi ingekeep en dies meer, 892 00:56:53,730 --> 00:56:59,270 gewoonlik voor die aangesig van die webwerf is op die Internet, is die kode minified, 893 00:56:59,270 --> 00:57:02,970 waardeur die HTML en die CSS - iets anders sal ons gou sien - 894 00:57:02,970 --> 00:57:05,960 die JavaScript-kode wat ons sal gou sien saamgepers word, 895 00:57:05,960 --> 00:57:09,250 waardeur lang veranderlike name word X en Y en Z, 896 00:57:09,250 --> 00:57:13,900 en almal van daardie spasie wat maak alles lyk so leesbare is al weggegooi, 897 00:57:13,900 --> 00:57:17,700 want as jy dink oor dit op hierdie manier, Facebook kry 'n miljard bladsy treffers 'n dag - 898 00:57:17,700 --> 00:57:21,670 iets gek soos dit - so wat as 'n programmeerder te wees anale 899 00:57:21,670 --> 00:57:26,660 druk die space bar 'n ekstra tyd net om te streepje n reël van die kode ooit soveel meer? 900 00:57:26,660 --> 00:57:29,500 Wat is die implikasie as Facebook bewaar dat witspasie 901 00:57:29,500 --> 00:57:32,880 in al die grepe stuur hulle terug na die mense op die internet? 902 00:57:32,880 --> 00:57:36,400 Slaan die spasie balk gee wanneer jy 'n ekstra greep in jou lêer. 903 00:57:36,400 --> 00:57:39,730 En as 'n miljard mense, dan gaan die tuisblad daardie dag aflaai 904 00:57:39,730 --> 00:57:42,060 hoeveel meer inligting het jy oor die internet versend word? 905 00:57:42,060 --> 00:57:45,200 'N giga byte vir geen goeie rede. 906 00:57:45,200 --> 00:57:48,510 Toegeken, vir 'n baie websites is dit nie so 'n skaal aanvaarde kwessie, 907 00:57:48,510 --> 00:57:51,030 maar vir Facebook, Google, vir 'n paar van die gewildste webwerwe 908 00:57:51,030 --> 00:57:54,860 daar is 'n groot aansporing finansieel te maak om jou kode te kyk soos 'n gemors 909 00:57:54,860 --> 00:57:58,980 sodat jy gebruik so min as moontlik bytes benewens dan dit te comprimeren 910 00:57:58,980 --> 00:58:01,500 met iets soos zip, 'n algoritme genaamd gzip, 911 00:58:01,500 --> 00:58:04,250 dat die leser nie outomaties vir jou. Maar dit is verskriklik. 912 00:58:04,250 --> 00:58:08,060 Ons sal nooit iets leer oor ander mense se websites en hoe om webbladsye te ontwerp 913 00:58:08,060 --> 00:58:09,680 as ons het om te kyk na dit soos hierdie. 914 00:58:09,680 --> 00:58:13,620 >> So gelukkig blaaiers soos Chrome en Internet Explorer en Firefox hierdie dae 915 00:58:13,620 --> 00:58:16,450 tipies kom met ingeboude ontwikkelaar gereedskap. 916 00:58:16,450 --> 00:58:21,730 In werklikheid, as ek neerdaal hier Element of indien te inspekteer, ek gaan na View, ontwikkelaar, 917 00:58:21,730 --> 00:58:25,220 en gaan na Developer Tools uitdruklik, 918 00:58:25,220 --> 00:58:27,640 hierdie venster aan die onderkant van my skerm verskyn nou. 919 00:58:27,640 --> 00:58:31,230 Dit is 'n bietjie intimiderend op die eerste, want daar is 'n baie onbekende tabs hier, 920 00:58:31,230 --> 00:58:34,510 maar as ek op Elements al die pad aan die onderkant links, 921 00:58:34,510 --> 00:58:38,810 Chrome is natuurlik redelik slim. Dit weet hoe om al hierdie kode te interpreteer. 922 00:58:38,810 --> 00:58:42,320 En so wat Chrome doen is dit skoon al van Facebook se HTML. 923 00:58:42,320 --> 00:58:45,680 Selfs al is daar nie spasie, daar is nie inkeping daar, 924 00:58:45,680 --> 00:58:51,120 nou sien dat ek kan begin om hierdie webblad aan al die meer hiërargies navigeer. 925 00:58:51,120 --> 00:58:56,910 Dit blyk dat elke webblad geskryf in 'n taal, die sogenaamde HTML5 moet begin met hierdie, 926 00:58:56,910 --> 00:59:03,980 hierdie DOCTYPE verklaring, om so te praat: 927 00:59:03,980 --> 00:59:07,840 Dit is soort van lig en grys daar, maar dit is die heel eerste lyn van die kode in die lêer, 928 00:59:07,840 --> 00:59:12,080 en wat vertel net die leser, "Hey, hier kom 'n paar HTML5 Hier kom 'n web bladsy." 929 00:59:12,080 --> 00:59:18,490 Die eerste oop bracket buite wat gebeur met hierdie ding, 'n oop bracket HTML tag, 930 00:59:18,490 --> 00:59:22,320 en dan as ek duik in dieper - hierdie pyle is heeltemal betekenisloos; 931 00:59:22,320 --> 00:59:25,140 hulle is net vir die aanbieding se onthalwe, hulle is nie eintlik in die lêer - 932 00:59:25,140 --> 00:59:30,300 let dat die binnekant van Facebook se HTML tag, enigiets wat begin met 'n oop bracket 933 00:59:30,300 --> 00:59:32,910 en dan het 'n woord is bekend as 'n tag. 934 00:59:32,910 --> 00:59:38,610 Dus, binne die HTML-tag is blykbaar 'n kop tag en 'n liggaam tag. 935 00:59:38,610 --> 00:59:41,930 Binnekant van die kop tag is nou 'n hele gemors by Facebook 936 00:59:41,930 --> 00:59:45,620 want hulle het 'n baie van metadata en ander dinge vir bemarking en advertensies. 937 00:59:45,620 --> 00:59:50,600 >> Maar as ons scroll down, down, down, down, laat ons sien waar dit is. Hier is dit. 938 00:59:50,600 --> 00:59:52,210 Hierdie een is ten minste 'n bietjie bekend is. 939 00:59:52,210 --> 00:59:55,990 Die titel van Facebook se tuisblad, as jy ooit kyk in die blad in jou titel bar, 940 00:59:55,990 --> 00:59:59,060 Welkom by Facebook - Log In Sign Up of Meer inligting. 941 00:59:59,060 --> 01:00:01,110 Dit is wat jy wil sien in Chrome se titel bar, 942 01:00:01,110 --> 01:00:03,100 en dit is hoe dit is verteenwoordig in die kode. 943 01:00:03,100 --> 01:00:08,090 As ons ignoreer alles anders in die kop, die meeste van die ingewande van 'n web bladsy is in die liggaam, 944 01:00:08,090 --> 01:00:10,940 en dit blyk dat Facebook se kode is gaan om te kyk meer komplekse 945 01:00:10,940 --> 01:00:14,540 as die meeste dinge sal ons aanvanklik skryf net omdat dit oor die jare opgebou is, 946 01:00:14,540 --> 01:00:17,260 maar daar is 'n hele klomp van die script tags, JavaScript kode, 947 01:00:17,260 --> 01:00:18,870 wat maak die webwerf baie interaktiewe: 948 01:00:18,870 --> 01:00:22,330 status updates onmiddellik die gebruik van tale soos JavaScript sien. 949 01:00:22,330 --> 01:00:25,270 Daar is iets genoem 'n div, wat is 'n afdeling van 'n bladsy. 950 01:00:25,270 --> 01:00:27,940 Maar voordat ons by daardie detail, laat ons probeer om uit te zoomen 951 01:00:27,940 --> 01:00:31,920 en kyk na 'n eenvoudiger weergawe van Facebook 1,0, om so te praat. 952 01:00:31,920 --> 01:00:34,740 Hier is die hello, wêreld van die web bladsye. 953 01:00:34,740 --> 01:00:37,370 Dit het dat die DOCTYPE verklaring by die heel boonste 954 01:00:37,370 --> 01:00:40,280 wat is 'n bietjie verskillend van alles anders. 955 01:00:40,280 --> 01:00:46,130 Niks anders wat ons skryf in 'n web bladsy gaan om te begin met 01:00:48,880 en behalwe vir iets genoem kommentaar in HTML. 957 01:00:48,880 --> 01:00:53,000 Maar vir die grootste deel, alles in 'n web bladsy is oop bracket, navraag, beslote bracket. 958 01:00:53,000 --> 01:00:56,220 >> In hierdie geval kan jy sien die eenvoudigste van webblaaie moontlik. 959 01:00:56,220 --> 01:01:00,260 Die HTML-tag bevat 'n kop-tag en dit bevat 'n liggaam tag, 960 01:01:00,260 --> 01:01:04,580 maar sien dat daar is hierdie idee van die begin en stop tags. 961 01:01:04,580 --> 01:01:11,360 Dit is die begin tag vir HTML, dit is die noue tag of einde tag. 962 01:01:11,360 --> 01:01:15,400 Let daarop dat hulle is soort van teenoorgesteldes in die sin dat die noue tag of einde tag 963 01:01:15,400 --> 01:01:20,030 het hierdie slash binnekant van homself. 964 01:01:20,030 --> 01:01:23,540 Intussen is daar 'n oop kop tag hier en 'n beslote kop tag hier. 965 01:01:23,540 --> 01:01:26,880 >> Daar is 'n ope titel en 'n beslote titel tag hier. 966 01:01:26,880 --> 01:01:29,850 Die feit dat ek die titel het op een lyn, suiwer arbitrêre. 967 01:01:29,850 --> 01:01:33,760 Dit net lyk soos dit sal mooi pas op een lyn, so ek het nie die moeite slaan 'n paar keer Enter. 968 01:01:33,760 --> 01:01:38,200 Intussen het die liggaam wat ek gedoen het, streepje net ooit so duidelik te wees. 969 01:01:38,200 --> 01:01:41,050 Let daarop dat HTML is 'n redelik stom taal. 970 01:01:41,050 --> 01:01:43,410 Om die waarheid te sê, terug in die dag voordat daar was WYSIWYG redakteurs 971 01:01:43,410 --> 01:01:46,770 en Microsoft Word waar jy kan sê, "Maak hierdie moedige, maak hierdie skuinsdruk," 972 01:01:46,770 --> 01:01:50,850 jy sou eintlik min bevele in opstelle te tik 20 + jaar gelede 973 01:01:50,850 --> 01:01:55,740 waardeur jy sou sê, "Begin die maak van hierdie teks vet Stop die maak van hierdie teks vet." 974 01:01:55,740 --> 01:01:59,010 "Begin die maak van hierdie teks kursief Stop die maak van hierdie teks kursief." 975 01:01:59,010 --> 01:02:01,850 >> Dit is wat HTML of enige opmaak taal is. 976 01:02:01,850 --> 01:02:05,530 Die eerste tag sê, "Hey, browser. Hier kom 'n paar HTML." 977 01:02:05,530 --> 01:02:09,880 Die volgende tag sê, "Hey, browser. Hier kom die kop, die bladsyboskrif ('header') van my web bladsy." 978 01:02:09,880 --> 01:02:11,650 "Hey, browser. Hier kom die titel." 979 01:02:11,650 --> 01:02:15,880 En dan hier, "Hey, die leser. Dit is dit vir die titel." 980 01:02:15,880 --> 01:02:20,000 So dit is hoe die leser weet nie meer wys meer karakters as hallo, die wêreld 981 01:02:20,000 --> 01:02:21,860 in die titel bar. 982 01:02:21,860 --> 01:02:23,640 Intussen, dit sê, "Dit is dit vir die kop." 983 01:02:23,640 --> 01:02:28,340 Dit sê: "Hier kom die liggaam Hier is die werklike liggaam." - Letterlik, die woorde Hello, world. 984 01:02:28,340 --> 01:02:33,190 En dit hier sê, "Dit is dit vir die liggaam, wat is dit vir die HTML." 985 01:02:33,190 --> 01:02:34,640 So blaaiers is redelik dom. 986 01:02:34,640 --> 01:02:39,920 Hulle het net hierdie dinge van bo na onder, links na regs lees, en doen presies wat hulle vertel is om dit te doen. 987 01:02:39,920 --> 01:02:41,860 Kom ons werklik doen 'n klein voorbeeld hier. 988 01:02:41,860 --> 01:02:46,240 Laat my oopmaak die eenvoudigste van die programme op my Mac hier, naamlik Text Editor. 989 01:02:46,240 --> 01:02:48,220 Op Windows wat jy kan gebruik Notepad.exe. 990 01:02:48,220 --> 01:02:50,520 Maar dit is al wat jy nodig het om te begin met die maak van web bladsye. 991 01:02:50,520 --> 01:02:53,730 Ek gaan om voort te gaan en net kopieer en plak die kode in die lêer. 992 01:02:53,730 --> 01:02:57,210 Ek gaan om voort te gaan en stoor dit op my lessenaar, 993 01:02:57,210 --> 01:03:01,220 en ek gaan om dit te red as hello.html, 994 01:03:01,220 --> 01:03:03,840 en nou die lêer is vernoem hello.html. 995 01:03:03,840 --> 01:03:05,690 Hier is dit op my lessenaar. 996 01:03:05,690 --> 01:03:11,130 Laat my nou gaan in 'n browser en sleep die lêer in die leser. 997 01:03:11,130 --> 01:03:14,060 En voila, hier is my heel eerste web bladsy. 998 01:03:14,060 --> 01:03:17,340 Let op dat die titel van die blad hallo is, die wêreld soos per die titel tag, 999 01:03:17,340 --> 01:03:20,040 en kennis dat hello, die wêreld is die liggaam van my web bladsy, 1000 01:03:20,040 --> 01:03:22,190 en woo-hoo, ek is op die internet. 1001 01:03:22,190 --> 01:03:24,700 >> Ek is nie regtig reg, want hierdie lêer is nie op die internet nie. 1002 01:03:24,700 --> 01:03:28,330 Dit gebeur te wees op my plaaslike hardeskyf op daardie spesifieke pad. 1003 01:03:28,330 --> 01:03:32,720 Maar die idee is dieselfde. Al wat ons nou nodig het is 'n web bediener wat om dit te laai. 1004 01:03:32,720 --> 01:03:37,410 Maar eers laat voer eintlik 'n bietjie meer kompleksiteit en 'n bietjie meer stilering. 1005 01:03:37,410 --> 01:03:39,890 Dit is 'n eenvoudige, as vervelig, web bladsy. 1006 01:03:39,890 --> 01:03:41,990 Dit blyk uit daar is ander vorme van die tags wat ons kan gebruik. 1007 01:03:41,990 --> 01:03:45,530 Byvoorbeeld, hier in geel Ek het 2 nuwe tags. 1008 01:03:45,530 --> 01:03:49,630 Ons sal speel nie veel met hierdie vandag, maar sien dat die skakel tag 1009 01:03:49,630 --> 01:03:52,520 een of ander manier lyk verskillend van alles anders. 1010 01:03:52,520 --> 01:03:55,370 Die link tag vind wat genoem word eienskappe, 1011 01:03:55,370 --> 01:03:59,770 en 'n kenmerk is iets wat verander die gedrag van 'n tag. 1012 01:03:59,770 --> 01:04:03,840 In hierdie geval is dit nie die beste keuse van name, skakel, want dit is soort van betekenisloos, 1013 01:04:03,840 --> 01:04:11,590 maar hierdie link tag sê, in wese, sluit in die lêer genaamd styles.css binnekant van my web bladsy. 1014 01:04:11,590 --> 01:04:15,400 Jy kan dink van hierdie as analoog na C # include richtlijn. 1015 01:04:15,400 --> 01:04:19,650 Styles.css verwys na 'n ander taal geheel en al dat ons nie vandag sal speel, 1016 01:04:19,650 --> 01:04:23,790 maar dit is vir estetika: font groottes, kleure, padding, inkeping, kantlyne, 1017 01:04:23,790 --> 01:04:26,040 en al daardie soort van estetika detail. 1018 01:04:26,040 --> 01:04:28,820 Intussen het die script tag is funksioneel soortgelyk, 1019 01:04:28,820 --> 01:04:33,140 maar eerder as sluit CSS, daardie taal, dit sluit in 'n ander taal, JavaScript. 1020 01:04:33,140 --> 01:04:37,810 So met ander woorde, met hierdie 2 tags ek sal uiteindelik in staat wees om my eie webblad te skryf 1021 01:04:37,810 --> 01:04:41,490 maar ook trek in die kode dat ek of iemand anders geskryf het, 1022 01:04:41,490 --> 01:04:44,350 sodat ons kan staan ​​op ander mense se skouers, kan ons goeie ontwerp te beoefen, 1023 01:04:44,350 --> 01:04:46,120 factoring uit gemeenskaplike kode. 1024 01:04:46,120 --> 01:04:49,090 As ek het 10 verskillende web bladsye, beteken dit dat sommige van my estetika 1025 01:04:49,090 --> 01:04:52,490 ingereken uit kan wees, net soos # insluit, in 'n aparte lêer. 1026 01:04:52,490 --> 01:04:54,420 Sodat ons daar kry. 1027 01:04:54,420 --> 01:04:57,180 Maar laat ons eintlik eers iets meer interessant wees met hierdie lêer doen. 1028 01:04:57,180 --> 01:05:01,110 >> Weereens, dit is net Text Editor. Ek is nie tegnies op die internet nie, maar ons sal daar kom. 1029 01:05:01,110 --> 01:05:04,910 Ek wil graag hello, wêreld 'n bietjie vetter as wat dit is. 1030 01:05:04,910 --> 01:05:10,890 So hello, laat ons sê arbitrêr vir vet. 1031 01:05:10,890 --> 01:05:15,910 Weereens, die storie is dieselfde: hello, komma, begin met die maak van hierdie moedige, 1032 01:05:15,910 --> 01:05:19,730 toenmalige wêreld kry in vetdruk, en dit beteken stop druk dit in vetdruk. 1033 01:05:19,730 --> 01:05:24,020 Laat my voort te gaan en red my lêer, gaan terug na Chrome, sal ek zoom in net sodat ons dit beter kan sien, 1034 01:05:24,020 --> 01:05:27,870 en herlaai, en jy sal sien dat die wêreld nou is in vetdruk. 1035 01:05:27,870 --> 01:05:31,810 Die Web is al oor die hiperskakels, so laat ons gaan voort en doen dit: 1036 01:05:31,810 --> 01:05:38,550 my gunsteling webwerf is, laat ons sê, youtube.com. 1037 01:05:38,550 --> 01:05:43,810 Red, herlaai. Okay. Daar is 'n paar probleme nou behalwe die afzichtelijk van die webwerf. 1038 01:05:43,810 --> 01:05:47,310 1, Ek is redelik seker ek druk Enter hier. En ek het. 1039 01:05:47,310 --> 01:05:51,590 Ek het nie net druk Enter, het ek ook ingekeep, praktiserende wat ons preek oor styl, 1040 01:05:51,590 --> 01:05:54,930 maar my is reg langs aan die wêreld. 1041 01:05:54,930 --> 01:05:58,410 So hoekom is dit? Browsers net doen wat jy vir hulle sê om te doen. 1042 01:05:58,410 --> 01:06:04,010 Ek het nie vertel die leser, "Break lyne hier Voeg paragraaf hier breek." 1043 01:06:04,010 --> 01:06:07,820 Sodat die leser, dit maak nie saak as ek Opbrengs 30 keer getref het, 1044 01:06:07,820 --> 01:06:10,820 dit is nog steeds gaan my reg langs aan die wêreld sit. 1045 01:06:10,820 --> 01:06:15,930 Wat ek regtig het om hier te doen, is iets soos sê
, voeg 'n lyn breek. 1046 01:06:15,930 --> 01:06:17,940 >> En eintlik, 'n lyn breek is 'n soort van 'n vreemde ding 1047 01:06:17,940 --> 01:06:21,650 want jy kan nie regtig begin beweeg na 'n ander lyn, dan doen iets, 1048 01:06:21,650 --> 01:06:25,380 en dan ophou beweeg na 'n nuwe reël. Dit is soort van 'n atoom operasie. 1049 01:06:25,380 --> 01:06:28,140 Jy doen nie, of jy doen nie. Jy druk Enter of jy doen nie. 1050 01:06:28,140 --> 01:06:33,390 So br is 'n bietjie van 'n ander tag, en so het ek nodig het om te sorteer van beide oop en dit sluit 1051 01:06:33,390 --> 01:06:35,230 almal gelyktydig. 1052 01:06:35,230 --> 01:06:37,500 Die sintaksis vir wat is dit. 1053 01:06:37,500 --> 01:06:41,760 Tegnies, kan jy iets soos hierdie te doen in sommige weergawes van HTML, 1054 01:06:41,760 --> 01:06:45,600 maar dit is net dom, want daar is geen rede om te begin en stop om iets 1055 01:06:45,600 --> 01:06:48,420 as jy nie kan plaas en doen dit alles in 'n keer. 1056 01:06:48,420 --> 01:06:52,310 Besef dat HTML5 streng nie vereis dat hierdie streep, 1057 01:06:52,310 --> 01:06:55,410 sodat jy sal sien handboeke en aanlyn hulpbronne wat dit nie het nie, 1058 01:06:55,410 --> 01:06:59,780 maar vir 'n goeie maatreël laat oefen die simmetrie wat ons het tot dusver gesien. 1059 01:06:59,780 --> 01:07:02,870 Dit beteken dat die merker is beide geopen en gesluit. 1060 01:07:02,870 --> 01:07:05,220 So nou, laat my my lêer red, gaan terug hier. 1061 01:07:05,220 --> 01:07:10,240 Okay, so dit is beter begin lyk, behalwe die web wat ek ken is 'n soort van klikbare, 1062 01:07:10,240 --> 01:07:13,610 en nog youtube hier lyk nie te lei tot enigiets. 1063 01:07:13,610 --> 01:07:17,560 Dit is omdat, selfs al is dit lyk soos 'n skakel, die leser nie weet dat per se, 1064 01:07:17,560 --> 01:07:20,670 so ek moet die leser om te sê dat dit is 'n skakel. 1065 01:07:20,670 --> 01:07:22,620 >> Die manier om dit te doen, is om 'n anker te gebruik 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 en laat my skuif dit na 'n nuwe lyn net so dit is 'n bietjie meer leesbare, 1069 01:07:38,490 --> 01:07:40,060 en ek sal die font grootte krimp. 1070 01:07:40,060 --> 01:07:43,890 Ek gedoen nie? Nee, daar is gaan hierdie digotomie wees. 1071 01:07:43,890 --> 01:07:46,760 Hierdie tag, die anker tag, inderdaad 'n kenmerk, 1072 01:07:46,760 --> 01:07:52,900 wat verander sy gedrag, en die waarde van die kenmerk is blykbaar YouTube se URL. 1073 01:07:52,900 --> 01:07:56,380 Maar let op die digotomie is dat net omdat dit is die URL wat jy gaan, 1074 01:07:56,380 --> 01:08:01,020 dit beteken nie dat wat aan die woord wat jy onderstreep en maak 'n skakel te wees. 1075 01:08:01,020 --> 01:08:03,960 Inteendeel, kan dit iets soos hierdie. 1076 01:08:03,960 --> 01:08:10,870 So ek het om te sê ophou om hierdie woord 'n hyperlink deur gebruik te maak van die beslote anker tag. 1077 01:08:10,870 --> 01:08:12,650 Sien ek is nie om dit te doen. 1078 01:08:12,650 --> 01:08:15,890 1, sal dit net 'n vermorsing van almal se tyd en dit is nie nodig nie. 1079 01:08:15,890 --> 01:08:19,290 >> 'N merker te sluit, jy noem net die naam van die tag weer. 1080 01:08:19,290 --> 01:08:21,800 Jy noem nie enige van die eienskappe. 1081 01:08:21,800 --> 01:08:26,189 So laat red, gaan terug. Okay, voila, nou dit is blou en hyperlink. 1082 01:08:26,189 --> 01:08:29,430 As ek dit kliek, Ek het eintlik gaan na YouTube. 1083 01:08:29,430 --> 01:08:32,529 Dus, selfs al is my web bladsy is nie op die internet, dit is ten minste HTML, 1084 01:08:32,529 --> 01:08:37,930 en as ons laat die Internet inhaal, ons sou eintlik eindig hier by youtube.com. 1085 01:08:37,930 --> 01:08:40,670 En ek kan terug gaan en hier is my web bladsy. Maar let. 1086 01:08:40,670 --> 01:08:43,120 As jy al ooit spam of 'n phishing-aanval gekry het, 1087 01:08:43,120 --> 01:08:45,850 nou het jy die vermoë om ná net vyf minute om dieselfde te doen. 1088 01:08:45,850 --> 01:08:50,920 Ons kan hier gaan en iets te doen soos www.badguy.com 1089 01:08:50,920 --> 01:08:59,319 of wat ookal die oppervlakkig webwerf is, en dan kan jy sê jou PayPal-rekening te verifieer. 1090 01:08:59,319 --> 01:09:04,840 [Lag] En nou dit gaan om te gaan na badguy.com, wat ek nie van plan om op te klik 1091 01:09:04,840 --> 01:09:08,000 want ek het geen idee waar dit lei. [Lag] 1092 01:09:08,000 --> 01:09:10,859 >> Maar nou het ons die vermoë om werklik daar beland. 1093 01:09:10,859 --> 01:09:12,640 So ons is eintlik maar net die begin van die oppervlak te krap. 1094 01:09:12,640 --> 01:09:15,830 Ons is nie die programmering per se, ons skryf opmaak taal. 1095 01:09:15,830 --> 01:09:18,569 Maar sodra ons om uit ons woordeskat in HTML, 1096 01:09:18,569 --> 01:09:21,520 ons sal stel PHP, 'n werklike programmeertaal 1097 01:09:21,520 --> 01:09:26,859 wat ons sal toelaat HTML outomaties genereer, genereer CSS outomaties, 1098 01:09:26,859 --> 01:09:29,430 sodat ons kan begin op Woensdag te implementeer, sê, 1099 01:09:29,430 --> 01:09:31,700 ons eie search engine en nog baie meer. 1100 01:09:31,700 --> 01:09:34,770 Maar meer oor wat in 'n paar dae. Ons sien julle dan. 1101 01:09:34,870 --> 01:09:39,000 >> [CS50.TV]