[Powered by Google Translate] [Недеља 7] [Давид Ј. Малан - Универзитет Харвард] [Ово је ЦС50. - ЦС50.ТВ] У реду. Добродошли назад. Ово је ЦС50, и то је почетак седмице 7. Неколико малих најавама: Псет5 је сада у току, или ће ускоро бити, и дозволите ми да кажем, сасвим искрено, то не теже да буду међу већи изазов проблематичних Курсу је сетовима, тако да поменем ово сада тако да је ове седмице више него икада не чекати, рецимо, у среду вече или четвртак увече да ускочите Ово је дефинитивно интересантно псет. Мислимо да је то забавно. Ако заиста добити то потпуно тачно и онда могу да изазову такозвани Биг одбор, имаћете прилику да се поклапа са неким од страха особља наравно о и неки од ваших школских другова. Шта Велики одбор је поново имате спелл ​​цхецкер рад, ћете моћи да иде на цс50.нет после покретања команде, чисто се определе, а онда количина времена и количина РАМ-а и више које сте користили у имплементацији ће се овде изложен на почетној страници се курс је. Приметићете да гомила тих људи овде су наведени као особље јер током викенда, особље је мислио да би било забавно да покуша да надмаши другог. Дакле, схватите да је циљ овде није да надмаши особље. Чак сам овде само на броју 13. Чисто одлучим, али је прилика да се види колико мало РАМ-а и колико мало процесора секунди можете користити вис-а-вис неке од ваших школских другова. А ја ћу признати да је Кевин Мајкл Шмит, тренутно у позицији број 1, као један од тфс, ово је имплементација која не позива могуће с обзиром да је он користи скоро 0 РАМ и скоро 0 секунди за утовар. Дакле, ми ћемо се побринути за Кевина оффлине. [Смех] Постоје одређене вештине које Кевин ставља на пробу овде. Једна од ствари које смо мислили да ћемо урадити исто је сада ЦС50к је недељу дана у току, а ви момци су исто толико део овог експеримента, као они ученици су. Смо их питали као део њиховог псет0, који је на сличан начин да достави пројекат прављења од интереса за њих - игра, интерактивна уметничко дело, анимација, или као - 1 - да 2-минута видеа, уколико желите, здраво на свету и ко су они заиста јесу. Мислио сам да ћу поделити са вама само неколико видео снимака који су поднети до сада јер за нас, на особље барем, заиста је било узбудљиво и инспиративно видети ове људе из целог света - земље широм света - тунинг у, од свих ствари, на курс информатике на Интернету, да ли је то зато што желе да наставе своје студије, желе да своју каријеру у новом правцу, они желе да попуне празнине у свом знању, тако да неки од истих разлога које сте можда били овде. Зато сам вам овде један такав студента. Ти би могао да подигне јачину звука само мало. Овде је један од 1-минутних наше студентских поднесака. Здраво, свете. Ја сам студент индустријског инжењерства овде у Малаги, Шпанија. Узбуђена сам због овог онлине курса јер волим рачунарске науке, заиста, и ја заиста ценим то што имам да га истражују. А чињеница да ја могу научити исто сви ви радите али уместо да буде на Харварду сам у Малаги, како је то супер? Па, ја сам Фернандо, и то је ЦС50. Видимо се момци. [Смех] Други снимак ми се посебно свиђа, видећете да овог господина енглески није толико јак. Изгледа као да је то машина преведено, тако да су сами преводи су мало несавршен, али ово је био један од наших омиљених сада као добро. [♪ ♪] Здраво, свете. [Говорећи у јапанском] [Морам да поздравим на јапанском јер мој енглески је врло непоуздана.] [Ја сам доставио поруку да вас из града Гифу, Јапан.] [Могу бити студент први пут у 20 година, као што се може видети.] [Ја сам веома захвалан на Харвард универзитету, који ми је дао прилику и ЕДКС.] [Голф је гитара и моја омиљена ствар ради.] [Смех] [♪ ♪] [Зашто мислиш да сам покушавао да присуствује цс50к.] [Универзитет Харвард, то је моја жудња.] [Поготово ако сам далеко присуство живео у Јапану.] [Желео сам да пробам одмах свесни постојања таквог ЕДКС када.] [Зар не мислите тако да не односе на доба учења И.] [Цс50 је моја жудња. Моје име је Казу, а ово је цс50.] [♪ ♪] [аплауз и навијање] Друга омиљена наша је ова тврдња овде од некога. [♪ ♪] [Малан] Гоогле је ако сте упознати са овим мема. И онда на крају, пар других које је добио постављене да можда освоји награду неодољив. [Студенти] Ауу! >> [Малан] Мораћемо да слушају. То је кратак, зато слушајте пажљиво. [Женски говорник] Како се зовеш? >> Луи. [Женски говорник] Шта је ово? >> [Кикоће] ЦС50. [Смех] [Малан] Он је два узима, мада. Идемо, последњи. Моје име је Луи, а ово је ЦС50. [Смех] То је онда ЦС50к. Хвала свима вама, а после заједно код куће који су учешће до сада. Данас, ми закључујемо расправу о структурама података, бар неки од најосновнијег, и онда ћемо наставити наш разговор о ХТМЛ и веб програмирање. Заиста смо провели прошлост неких седам недеља гледа основе програмирања - алгоритми, структуре података и слично - и Ц, као што сте можда доживели тако далеко, није нужно најприступачнија језика са којима се спроводе неке од тих идеја. И тако почиње ове недеље и следеце недеље и онда следеће, коначно ћемо бити у стању да спроведе транзицију из Ц, која је опште позната као прилично ниском нивоу језика, да се ствари виши ниво, међу њима ПХП, ЈаваСцрипт, и слично, што ћемо видети извући на истим лекцијама које смо научили у протеклих неколико недеља, али видећете да проглашава такве ствари низова и хеш табела и претраживање и сортирање постало много лакше, јер су и сами језици ћемо почети коришћењем ће постати моћнији. Али прво, примена дрвећа. То је врло уобичајена ових дана морати да компримовање информације. У ком контексту би желите да компримујете неку врсту дигиталних информација? Да. >> [Ученик] Када треба да пошаљете преко Интернета. Да, када желите да пошаљете нешто преко Интернета. Ако желите да преузмете велики фајл, то је идеално ако неко на другом крају је компримовани тај фајл помоћу зип формат или нешто слично тако да шаљете мање битни него што би иначе пренети. Па како да компримујете информације? Све се своди на коришћење мање битова од неопходне подразумевано. Али, то је нека врста чудна ствар, јер мислим назад недеља 0 и 1 када смо причали о АСЦИИ и бинарни и разговарали смо о АСЦИИ посебно као и коришћење 8 бита представљају слова алфабета тако да слово представља 65 година, мала је број 97, и колико сте представник 65 или 97, ви користите 7 или 8 бита. Али цака је да постоје нека слова у енглеском алфабету који нису толико популарни као други. З није тако популаран, К није толико популаран, али и Е су супер популарна. А ипак за све од ових писама, по дефаулту свет користи исти број битова, само 8. Дакле, не би било паметније да уместо коришћења 8 бита за свако писмо, чак највише ретко користе као К и З, шта ако смо користили мање битова за А и Е и С и најпопуларнијих писама и користи више битова за мање популарне слова, идеја је била хајде да оптимизују за заједничку случају, која је тема у компјутерске науке у покушају да оптимизује шта ће се догодити највише и проведем мало више времена, мало више простора на ствари које, да, може доћи али не нужно као често. Па хајде да узмемо један пример. Претпоставимо да желимо да кодира информацију прилично ефикасно. Можда сте одрасли знају нешто о Морзе кода, а квоте су нисте знали стварну кода, али можда се сећате да је барем ова серија тачака и цртица. Ово је прилично ефикасна кодирање и обавештење да најпопуларнији писмо - на пример, Е - користи најкраћи од звучних сигнала. Морзеова азбука је све о бип-бип-бип-бип-бип-бип и одржавање тонове ни за кратке периоде времена или дугих периода времена. Е као означени су тачком, је супер кратак бип, бип само, као и да би представљала Е. Насупрот томе, Т ће бити дужи бип, бип као [продужава звук], и да ће представљати Т. Али то је још увек прилично кратко, јер, за разлику од, ако се осврнемо на З, да изрази З да ће ићи бип, бип [више звук], бип, бип [краћи звук]. Дакле, то је више због тога што је мање уобичајено. Али готцха овде је да је Морзеова азбука је мало погрешна у смислу да то није одмах децодабле. На пример, претпоставимо да сте чули на неком крају жице сигнала [кратак], бип [дуго]. Какву поруку сам управо примио? Тачка и црта. Шта то представља? [Ученик] А. >> [Малан] Можда. То такође може бити праћен Е Т. Другим речима, Морзеова азбука, иако полуге овај принцип оптимизације угаони случај, не буде подесна за непосредну могућност декодирања. То јест, човек који чује или прима те тачкице и цртице мора некако да схватим где су преломи су између слова, јер ако не знате где су олакшице, можда збунити за ЕТ или обрнуто. Дакле, шта би ти урадио? У Морзе кода само можете да паузирате између сваке од ових писама. Али паузирање је врста шалтера до целе тачке убрзавање ствари. Па шта ако уместо тога дошао са шифром у којој није било овако лоше стање где је Е префикс, на пример, од - Другим речима, ако бисмо могли да се уверите да су обрасци су још увек кратак за популарне слова дуго за мање популарне слова, али нема могућност забуне? Човек по имену Хуффман пре неколико година изумео ову шему зове Хуффман кодирање да заправо полуге једну од структура података које смо провели мало времена причајући о прошле недеље, да од дрвећа, посебно бинарни дрвећа - бинарно стабло значи да она нема више од 2 деце. Можда има леви дете, можда је право дете, и то је то. Ваљда само зарад дискусије да неко жели да пошаље поруку то изгледа овако. То је потпуна бесмислица, али то је састављена од Ас, БС, ЦС, ДС, и Ес. А ако сте заиста рачунају се све Ас, БС, ЦС, ДС, и Ес а затим поделите са укупним бројем слова, овај мали графикон овде каже да је 45% од писама су Ес, 20% су Ас, 10% БС, и тако даље. Другим речима, претпостављам да је цитирао ниска тамо само нека порука коју желите да пошаљете. То се дешава да се глупости само тако можемо користити као пар писама могуће, али заиста је тако да Е остаје најпопуларнији, и Б и Ц су најмање популарна, барем од ових 5 слова алфабета. Па како да идемо о долази са кодирањем, бинарни кодирање, образац 0с и 1с за сваки од ових слова на такав начин да је Е кратки образац и можда Б и Ц су нешто дужи обрасци, опет, идеја је била да желимо да троше мање битове већину времена и више бита само једном у неко време. Према Хуффман кодирање, можете да креирате шуму дрвећа. Постоји нека врста причом овде да подразумева стабла и процес њиховог изградњу. Почнимо. Ја предлажем да почнете са овом шумом, да тако кажем, од 5 стабала, од којих је прилично глупо дрво. Стабло се састоји од само једног чвора, као представљен овде круг. Дакле, свака од ових ствари можда Ц струцт и унутар Ц струцт можда пловак представља фреквенцију бројање и онда можда знак представља писмо. Дакле, мислим да од ових чворова само као било који стари Ц струцт али, за сада, виши ниво. То је шума од 5 стабала, сваки ко има само један чвор. Шта Хафман предложена је да почнемо да комбинујете те дрвеће који имају најмање фреквентне тачке у нешто веће дрвеће повезујући их са новим корена чвора. Дакле, међу словима овде, приметићете да је за удобност сам их сортира слева на десно, мада то није стриктно неопходно, а обавештење да је најмањи чворови Тренутно су 10% и 10%. Тако Хофман је предложио да се спајање тих 2 најситније чворове у нову дрво увођењем новог родитеља чвора и онда дати тај родитељ лево дете и десно дете где је Б је произвољно лево и Ц је самовољно право. А онда Хафман даље предложио да хајде да сада само мислим на левој детета у једном од ових стабала увек као што представља 0 и право дете увек као да је представљао по броју 1. Није битно да ли их окренете докле год си доследан. Тако да сада имамо четири стабала у овој шуми. А ја кажем четири јер сада дрво лево - и није толико дрво у смислу да расте на овај начин, то је више као породичног стабла, где је сада 0,2 је нека родитељ двоје деце - приметити да је у том родитељу смо извући 0,2. Додали смо фреквенцијским тачкама двоје деце и дати нови чвор укупан збир. Дакле, сада смо само поновите овај процес. Пронађите две најмање чворове и онда им се придружи у нову дрво а затим поновите процес даље. Сада имамо неколико кандидата, 20%, 15%, а још 20%. У том случају, морамо да се пробије кравату. Можемо то урадити произвољно. Ми само треба да уради доследно. У том случају, ја ћу ићи са произвољно онај са леве стране, и ја сад споји 20% и 15% да ми дају нови родитељ зове 35% чије лево дете је 0, чије је право дете је 1, а сада имамо само три стабла у шуми. Ви можда можете видети где то иде. Ако се понови ова још пар пута, ми ћемо имати само једну већу дрво, сви чије ивице су означене 0с и 1с. Хајде да то урадимо поново. 35% је то дрво је корен. 20% и 45%, тако да ћемо да споји 35% и 20%. Сада овде имамо ово дрво. Ми саберете они, ми имамо 55%. Сада постоје само две дрвећа у шуми. Ми радимо овај један последњи пут, и надамо се математички све фреквенције саберете јер будући да смо их израчунати из добити-ићи да додате до 100%. И сада имамо једно дрво. Дакле, ово је Хуффман кодирање дрво. Некако је времена да стигнем тамо вербално, али реалност је са за петљу или са рекурзивна функција, можете да изгради ову ствар прилично брзо. Тако да сада имамо једну нову чвор, а све ове унутрашњих чворова су маллоц'д, вероватно, успут. Тако сада на врху овог дрвета имамо 100%, али сада приметили смо пут од овог новог пра-пра-пра-деда на све пра-пра-пра-унучади скроз на дну, на све лишћа. Шта ћемо сада да урадимо је да предложи да у циљу представљају Е писмо, ми једноставно ће користити број 1. Зашто? Јер ако смо прешли ово дрво од коначног корена до листа познат као Е, следимо само једну ивицу, на десној ивици, а то је наравно означен на горњој десној 1. Дакле Импликација овде за Хуффман је да ће Е је кодирање у бинарном бити само 1. И то је прилично проклето ефикасан. Стварно не могу добити било мање од тога. Насупрот томе, ће бити представљени, ако пратите логику, по ономе образац бита уместо? 01. Тако да дођете до, почнемо у корену и идемо лево и онда десно, што значи да је уследила 0, а затим 1. Тако ћемо представљати писмо са шаром 0 и 1. И сада приметили смо већ својство непосредне могућност декодирања да ми нисмо имали у Морзеова азбука. Иако оба модела су прилично кратко - Е је 1 бит је 2 бита - приметити да се они не могу мешати једно или друго, јер ако видите 1 то мора да буде Е, ако видите 0 онда 1 је то очигледно мора да буде А. Слично томе, шта је Д? 001. Шта је Ц? 0001. А шта је Б? 0000. И опет, јер сви смо слова стало се на листовима и ниједна од њих су нека врста посредника на путу од корена до листа, нема ризика од мешање различитих кодирања 2 слова ' због свих ових битних образаца су детерминистичка. 0000 ће увек бити Б. Нема чвор негде између да могу збунити једно писмо за друге. Дакле, шта је импликација овде? Најпопуларније писмо - у овом случају Е - је стечен најкраћи кодирање, Је стечен следећи најкраћи кодирање, и Б и Ц, који смо већ знали од гет-ићи били врстом најмање популарна на 10% фреквенцији сваки, они су стекли најдужи кодирање. И шта сад ово значи да ако желите да пошаљете поруку да је компримовани преко Интернета или у е-маил или слично, уместо коришћења стандардног АСЦИИ, можете послати Хуффман шифровану поруку чиме ако желите да пошаљете Е писмо, пошаљете само једну мало. Ако желите да пошаљете, можете послати 2 бита, 01, уместо слања 8 битова затим још 8 бита следе још 8 битова и тако даље. Али, овде је готцха. Није довољно само да изграде ово дрво, а затим почети да шаље од Алисе Бобану краћи битни образац, стринг из АСЦИИ, јер Алиса такође мора да обавести Боба цега ако Боб ће бити у стању да прочита њену компресовани поруку? [Нечујан ученик одговор] >> Шта је то? [Нечујан ученик одговор] >> Од какве дрво. Или још конкретније, шта ти кодирања су, поготово јер током ове приче коју смо направили пресуда позив у једном тренутку. Запамтите да смо морали да произвољно изабрати између 2 различита 20% чворова? Дакле, то није случај да Бобе, прималац, само реконструишу дрво на своје јер можда ће створити дрво икада тако нешто другачије од Алисе. Штавише, Боб не знају шта је оригинална порука јер једино Елис је да га пошаљете, наравно, је компримовани порука. Дакле, цака са стезником као да је ово, да, Алиса може уштедети много битова шаљући 1 за Е и 01 за и тако даље, али она такође мора да обавести Боба шта мапирање између слова и битова јер не могу јасно да се ослоне на само АСЦИИ више ако не користите АСЦИИ. Дакле, она је или да му пошаљем некако дрво - напиши га доле, чувајте га као бинарних података или нешто слично - или само му пошаљем мало лист варања, Екцел фајл, који приказује мапирања. Дакле, ефикасност компресије заиста претпоставља да су поруке које шаљете су прилично велики, барем средње величине, јер ако шаљете супер кратку поруку, ако само желите да пошаљете поруку ЛОШЕ, која се дешава да се реч овде можемо да спелујем, Б-Д, вероватно ћеш користити мање бита, али цака је ако имате да обавести Боба оно дрво или шта ти кодирања, ви идете да је вероватно надмашују све штедње поседовања компресоване ствари за почетак. Тако да заиста може бити случај да ако покушате компресије чак и са нечим као зип или датотека формата можда бити упознат са - Прилично мали фајлови, чак и празне датотеке - понекад ти фајлови могу добити веће, а не мање. Али реално, да се дешава само за мале величине датотека, па то неће да гигабајт датотека бити 2 гигабајта; ми заиста говоримо бајтова или само пар килобајта. Неки програми као што су поштански довољно паметан да схватим да, "Ти ћеш потрошити више битова компримовањем ово." "Дозволите ми да не замарам компресије је за вас уопште." Дакле, ово је само један од начина затим компримовањем текстуалном формату. Могли имплементирати нешто слично овоме Ц. На пример, ево како бисмо могли да представљају чвор у овом дрвету где имамо карактер за симбол, плутајући вредност за фреквенцију, и као што смо видели са нашим другим структурама података, 2 показивачи, 1 на левој дете, 1 десно, или који може бити НУЛЛ али ако не, то се односи на леву детета и право детета. Дакле, ово је онда Хафман кодирање, и то је један од начина да идете о компресије података, и свакако је један од највише лако спровести у контексту, рецимо, података прошлонедељних структурама, Иако чак и софистицираније алгоритми постоје да још више софистициране мутације ваших података. Сва питања затим на дрвећу, бинарних стабала, или компресије текста? [Ученик] Да ли постоји неки двосмисленост, као да [нечујан] расцеп у 01, онда би 011 бити двосмислена, зар не? [Нечујан] >> Добро питање. Двосмисленост. Дозволите ми да резимирам позивајући се на овој слици овде. Јер ликови сте ролокипери, представама, по дефиницији овог алгоритма увек остају лишће, никада нећете случајно користе исти образац бита за префикс вишеструких слова. Другим речима, ви сте забринути, то звучи као, на настале двосмислености чиме 001 може бити почетак Б или Ц почетак или нешто слично томе. Али то не може бити случај, јер обавештење да су сви слова азбуке смо кодирање су на листовима. Двосмисленост може настати само, као у случају Морзе кода, ако, на пример, Ц је негде на путу од корена до Б. [Ученик] Тачно. Дакле, у том случају, кажу има 2 лишће. >> Реци има - Реци то поново. [Ученик] Саи има 2 лишће, Ф и Г, а затим г - >> реду. Али не могу. Не би могао да оде Ф и Г, јер они словима Ф и Г би и сами бити оставља негде лево од Б или право на Е. Дакле, по дефиницији, морају бити лишће. Иначе, ти си потпуно у праву, ми смо не решили проблем који Морзеова азбука суочава. Добро питање. Остала питања? У реду. Овај појам бита, испада да смо имали моћ све заједно да нисмо ми заправо користи када је дошло до манипулације ове 0с и 1с. Питали смо о томе на једном од најранијих проблема сетовима: наиме, како идете о конвертовање великих у мала и обрнуто? Или, још конкретније, један од оних првих псетс питао колико битова ти стварно треба да окренете у циљу промене у мала а или обрнуто? Ево брзи подсетник на оно 65 и 97 изгледају као у бинарном. А чак и ако то питање је некако избледела у сећању, поново можете видети овде да колико битова треба окренути да промените капитал у мала? Само један. Они се разликују само по једној локацији, трећи бит са леве стране. Док има 010, мало има 011. Тако некако, морамо само да би могли да окренете ту мало, а онда можемо да капитализује или мала слова. Урадили смо то у прошлости заправо употребом ако услови и провере да ли писмо је између капитала и капитала А З, онда излази као - + 26 или нешто слично томе. Вероватно урадио аритметички промену слова абецеде. Али шта ако бисмо само могли да окренете ту једну мало? Како си могао отићи о узимању вреди један бајт је битова, тако да 8 бита као 01000001 01100001 и? Ако сте имали те обрасце бита, како да идемо о промени само један од њих? Шта ако уведемо у жуто овде ову другу образац бита? Ако направим цео жуте ниски 0с осим једног мало да желим да промените и онда сам се уведе нови оператор познат као над битовима оператора - над битовима у смислу да делује на појединачне битова, не на целу бајта или четири бајта одједном. Ова вертикална трака постоји у жутој сугерише да шта ако узмемо заступљеност капитала А и над битовима ИЛИ га са жутом низа битова? Другим речима, мислим да вратимо на дискусију Булових израза у Огреби и онда у Ц Доинг Боолеан или значи да је то истина, или је прва ствар коју треба да буде истина или друга ствар мора да буде истина, или обоје морају да буду истините, и онда Резултујућа сама истина. У том случају овде, шта ћемо добити ако узмемо 0 "или" ур са 0? Нетачно или лаж? Још увек је лажна, тако мала остаје као што је очекивано. Шта ако уместо радимо 1 или 0? Ово сада остаје 1, али погледајмо шта ће да се деси овде. Ако почнемо са капиталом А и ми настављамо да "или" своје појединачне делове као што радимо овде, 0 или зути даје нам оно доле? То нам даје 1. У ствари, претпоставимо да нисмо знали шта велика верзија мало заправо била. Идемо то. Дозволите ми да померим ово назад овамо. Хајде да то урадимо поново. 0 или 0 ми даје 0. 1 или 0 ми даје 1. 0 или 1 ми даје 1. 0 или 0 ми даје 0. Следећи је 0, следећи је 0, следећи је 0. 1 или 0 ми даје 1. И тако, чак и ако нисмо знали унапред шта мала била, једноставно "или" Инг са овом обрасцу битова који смо овде представили у жуто, можете мала капиталом окретањем тај део. Користили смо тај израз пре недеља: Флиппинг мало. Како сте заправо то програмски? Можете користити оно што се обично зове маску, секвенце битова, да је у овом случају само тако се дешава да изгледају као овај број овде, и онда "или" то заједно користећи ову нову Ц оператера, Не | |, користите један | а ти би заиста добити овај одговор овде, јер зашто? Ово је 1с место, 2с место, 4с, 8с, 16с, 32с. Тако испада да ако узмете слово и над битовима ИЛИ то са целобројног 32, јер целобројног 32, када погледате то као бита, изгледа овако, то значи да можете да окренете мало да заправо желите. И слично - а ми ћемо погледати код за само један тренутак - Претпоставимо да желимо да идемо у другом правцу. Како идете са малим словима у капиталу А? Које бит треба да се промени? То је исто један. Желимо да променимо тај трећи мало од 1 до 0. И како бисмо иде о радиш ово? Како да искључите мало? Са оним образац бита можемо искључити мало? Шта ако ми некако инвертни маске? Док раније, направили смо цео жути маске 0с осим једног мало смо желели да укључите, шта ако овај пут, правимо читав маске 1с осим мало да желимо да искључите а затим користите оператор шта? Шта ако ми "и" ствари? Хајде да погледамо. Ако сада окренете на то, претпоставимо да поново направим маску и то је све 1с осим једног мало да желим да искључите и онда уместо "или" бели бројеви до врха са жутим бројевима овде доле, шта ако уместо "и" њих заједно? То се зове над битовима и. Логично, то је иста ствар као и Боолеан. То ми даје 0 & 1 је 0. Тако лажни и прави је лажна. Истинита и истина је истина. И овде је магија: Прави и лажни сада лажно, тако да смо искључили тај део. И сада је остатак приче је нешто једноставно. Пошто је остатак маске је 1с, није битно шта су бројеви су у белом. Када "и" нешто са истина, нећеш променити своју вредност. Ако је то истина, то ће остати истина. Ако је то била лажна, она ће остати лажна. Али магија се дешава када узмете нешто што је истина и онда "и" то са лажна. Ово има за последицу искључивање тај део. Дакле, мало криптичан тамо. Хајде да погледамо ствари на неком закону, који би заправо изгледају још криптично, али хајде да погледамо овде у толовер. Ако погледам толовер, идући од капитала у мала, хајде да видимо како бисмо могли реализовати овај програм. Ево главни, а не узима никакве аргументе командне линије. Ја проглашења знакова ц за писмо које корисник ће откуцати унутра Ја сам тада користили познати раде док петља само да се уверите да корисник дефинитивно ми даје капитал или Б или Ц. .. З, тако да су ми нешто између и З. А сад шта ја радим овде? Ја сам "или" Инг ово са 0к20, али то је у ствари исто као - и ми ћемо вратити на то у тренутку - 32. Па опет, 32 је овај образац бита овде. Зашто знамо? Само мислим назад у недељу 0. Ово је 1с место, 2с место, 4с, 8с, 16с, 32с место. Дакле, ово жуто број деси да буде 32. И онда могу да овде писмо онолику знак, над битовима "или" То са буквално бројем 32, и шта се вратим? Тхе мала верзија која знак. Пре тренутак, ипак, изразио ово у другом базном нотацији. Шта је ово представља? >> [Ученик] Хексадецимални. [Малан] Ово се дешава да представљају хексадецималне. Нисмо разговарали о хексадецималном све то много, али то је заправо згодно у случајевима као што је овај. Иако изгледа много сложенији и иако изгледа као 20, а не 32, Испоставило се да је хексадецимална је заправо супер згодно нотација јер у хексадецимални свака цифра после 0к - а то не значи ништа; ово је само људско конвенција које каже долази хексадецимални број - сваки од ових цифара, 2, а затим 0, сами могу бити представљени са тачно 4 бита. Дакле, ако смо то урадили, дозволите ми да отворим овде текст едитор - чудно аутоцомплете - ако урадимо овде мало текст едитор, број 0к20 значи овде је 4 бита, ево још 4 бита. Хајде прво да крајње десне 4 бита. 0 када заступљена са 4 бита је шта? Супер лако. Само све 0с. Дакле, 4 бита, као 0с. Како представљају 2? Прошло је време од нас то урадио, али је 0100. Дакле, ово је место 1с, ово је 2с место, а онда није битно шта други места су. Другим речима, у хексадецимални можете рећи 0к20, али ако онда размислите шта је 2 и како се представљао у бинарном, шта је 0, а како је представљен у бинарном, одговори на та питања су ово и ово, респективно. Тако се дешава да представљају 0к20 овај образац 8 бита, који је управо маска која смо хтели. Дакле, ово је за сада само интелектуална вежба, али реалност је у коду обично је више уобичајено да се напише константи оваква у хексадецимални јер онда програмер може релативно лако, чак и ако то захтева неки папир и оловку, схватим шта је то образац бита је јер не можеш само изразити 0с и 1с обично у коду. Не можете ићи 00010 и тако даље. Мораш изабрати децималне или хексадецималне или октални или друге ознаке. Већина људи имају тенденцију да покупи хексадецималном једноставно тако да се свака цифра представља 4 бита и ви можете да урадите овај кратак математику. А ја ћу махати руку на тоуппер, што је готово исти, изгледа скоро идентично. Тоуппер дешава да користе а не оператера или већ тај момак и ДФ. Шта дф представља? дф? Зна ли ко? >> [Ученик] 255. 255? Није 255. То би било даље. Оставићемо ово као мало вежбе. Али ако идете од 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 и онда шта долази после 9? Некако смо ван децималних цифара, али у хексадецимални оно што долази после 9? [Ученик]. >> Дакле, б, ц, д. Можете да схватим шта је одатле образац бита д заправо представља. А ако радимо математику, ми ћемо видети да ли маска завршити вратимо идентична је ово. Ово је ф, све 1с, а ово је д. Дакле, дф представља ту маску. У реду. И на крају, не да ствари супер звук, супер техничке, али претпостављам да смо хтели да напишете програм који ради ово. Дозволите ми да иде напред и да бинарни, који је програм у датотеци под називом бинари.ц. И сада пусти ме покренути бинарни и дај ми није негативан цео број. Почнимо лако и тип у 0. Ово сада је програм који исписује цео број у свом бинарном представљању. Дакле, ако ја играм ову игру поново укуцате само 1, ја би требало да добије 32-битну репрезентацију 1. Ако урадим ово опет са 2, требало би да добије то. Ако урадим 7, требало би да добије неколико 1с на крају и тако даље. Испоставило се да сам споменуо зато што са операцијама над битовима ви у ствари можете да урадите једну другу ствар, као добро. Можете да креирате динамички ове маске. Баците поглед на ове једне финалне примеру укључује над битовима операције. Овде је први део кода, упитати корисника за бројем, и инсистира да ми дају не-негативан цео број. Дакле, то је нека врста старе школске ствари. Али овде је нешто што је на неки начин занимљиво. Како иде о штампању број у бинарни? Први пут сам прелазили из чега у шта? Шта је величина једног инт типицно, барем у апарат? >> [Ученик] 4. То је 4. Дакле 4 * 8 је 32 - 1 је 31. Дакле, ако сам почиње да броји од 31, која представља, испоставило се, само концептуално, 31. битни или највишег реда мало, што је овај момак овде, а ово ће бити битне 0. Дакле, ово је мало ... 01 бита 31. Па шта је ово код ради? Обавештење ово за петљу, иако изгледа криптично, је само итератинг од 31 па све до 0. То је то. Дакле, занимљив део сада мора да буде у ових 5 линија овде. Приметите да у овој линији сам проглашења променљиве зове маску да буде у складу са нашим приче ових жутих бројева. И онда шта је ово радиш? Ово је још један над битовима Оператор нисмо видели раније, највероватније. То је лева смена оператер. Овај оператор ради. Овде је број 1, а ако ти сам напустио смену, лево смени, Шта мислите да има ефекат раде у том индивидуалном 1? Буквално је пребацивање преко. Дакле, ако је број 1 је оно што имате на левој и почнете тако ја иницијализација до 31, шта ће то урадити? То ће да се овај број 1 и пребаце га 31 места овде. И зато што је очигледно нема друге цифре иза њега, они ће подразумевано бити замењен са 0с. Тако ћете почети са бројем 1, који је, наравно изгледа овако - и пусти ме да скренем овде у центру. А онда као да пребаци ствари на левој страни, овај момак у суштини иде на овај начин. Али, чим се то деси, 0 добија попунити Ако га смени други пут, то иде овако, а други 0 добија попунити Ви га пребаце поново и онда још 0 добија попунити Дакле, ако сте урадили нешто од 1 << и 31. места, можете завршити све маске да је 32 знакова, леве стране од којих је 1, све остале који су 0. И испоставило се, као страни, пребацујући број са леве стране овако Такође случајно, а понекад згодно, има ефекат раде шта да тај број? >> [Ученик] Дуплирајући га. Дуплирање га јер сваки од стубова - 1с место, 2с место, 4с место, 8с место, 16с место - они су сви удвостручавање као идете лево. Односно, када пребаци 1с ћеш завршити удвостручује вредност броја. Можете завршити радите занимљиве трансформације цифара померањем све више на овај начин од стране сила 2. Па како то функционише? То онда даје ми маску и то је све 0с осим 1 у тачно где сам га желите, и онда овај израз, који је украден од тоуппер.ц, једноставно каже узме број н који корисник откуцао у, "И" то са том маском, и шта ћеш добити? Ти ћеш добити 1 ако постоји 1 у тој маскиране локацији, или ћеш добити 0 ако не постоји. И тако све то програм се ефикасно је да има петљу, и то ствара маску са 1 овде, онда је 1 овде, онда 1 овамо, и она користи овај трик над битовима И да кажем да ли постоји 1 бит у улазу овде корисника? Да ли постоји 1 бит у улазу овде корисника? И ако је тако, буквално штампање 1, други штампа 0. Ми ово радимо са Интс само зато зато и радимо 32 бита уместо 8, али оно што смо тада уведен је ово над битовима и то над битовима ОР, а ово лево промена оператера, који су често не претерано корисно, али се испоставило да може бити. У ствари, ако сте били да представљају нешто попут низа боолеанс само да представљају истините или лажне, претпоставимо да је желео да пратите да ли је или није соба пуна 300 студената је присутан, бисте могли да прогласи низ величине 300 типа боол, тако да можете добити 300 боолс, и можете подесити сваки да важи ако је неко овде и лажна другачије. Зашто је то представништво у тој структури података неефикасна? Шта је лоше у дизајну те структуре података, низа од 300 боолс? Шта је боол, у ствари, испод хаубе? Ово је, такође, нешто што можда није познато. Испоставило се да нема боол. Сећам се да смо некако створили да са цс50.х фајлу, која сама укључује стандардну Боол. Ц је врста глупо, мада, када је у питању Боол. Она користи 8 бита за представљање сваког боол, који је потпуно расипна јер очигледно, колико бита ти треба да представљају боол? Само 1. Тако испада да ако сада имате могућност са операторима над битовима да манипулишу појединачне битове чак иу знак, чак у једном бајту, Испоставило се да могу да смање меморију потребно да представља нешто глупо као да је посјећеност стилизованог структуру података од фактора 8. Уместо коришћења осам бита представљају истините или лажне, буквално може да користи један помоћу једног бајта на сваких осам ученика у разреду и пребацивање од 0 до 1 појединачних битова коришћењем ове врсте ниског нивоа трикове. То је заиста ставио тачку на енергије. Има ли било каквих питања у вези над битовима операција? Да. >> [Ученик] Да ли постоји искључива или оператер? Да. Ту је ексклузивна или оператер који изгледа овако ^, шаргарепа симбол, што значи само прву ствар, или друга ствар може да буде 1 за излаз буде 1. Ту је и није, ~, што ће вам омогућити да инверзију 0 до 1 или обратно, као добро. И ту је у праву смена оператор >>, која је супротна од оне коју смо видели. У реду. Узмимо ствари сада на виши ниво. Почели смо разговор о тексту, а затим га компресију и представља текст са мањим бројем битова; Разговарали смо мало о томе, сада можемо почети манипулише ствари на нивоу над битовима. Хајде сада увећали назад 10.000 метара на заступање више сложених ствари као графика. Овде имамо заставу Немачке, овде имамо једну од Француске. То могу бити представљени у форматима можда знате - ГИФ, на пример. Ако сте икада видели неку слику на Интернету, који се завршава у гиф., ово је Грапхицс Интерцханге Формат. Ове две заставе овде некако дају се на притисак за шта можда очигледног разлога? >> [Нечујан ученик одговор] Постоји много понављања, зар не? Да би послао немачке заставе, мисли о овоме као слика на екрану подржати у вашим огреботину дана. Можда се сећате да постоји појединачни пиксели или тачке које чине слику. Постоји читав низ црних тачака и још цео ред црних тачака. Постоји гомила редова црних тачака које смо могли да видимо да ли смо стварно зумирао, много волим када зумира на лице Роб у Пхотосхопу. Чим смо све дубље и дубље и дубље у слику, сте почели види пикелатион, сви квадрата који је компоновао своју пажњу у том случају. Иста ствар овде. Ако се зумира сасвим мало, видели бисте појединачне тачке. Па, ово је нека врста отпада битова. Ако трећина заставе је црна и трећину заставе је жута и тако даље, зашто не можемо некако сабити ову заставу? А чак и Французи застава може бити компримована иако образац је мало другачија. Испоставило ГИФ формат је лосслесс формат компресије, што значи да можете овде узети слику попут немачке заставе, можете бацити доста својих бита, без жртвовања квалитета. Ово је у супротности са нечим као ЈПЕГ, са којом је већина нас су вероватно упознати. Фејсбук фотографије и Флицкр фотографија и као се скоро увек чувају као ЈПЕГ, када они отпремио, али ЈПЕГ је губитком - Лосси - формат чиме можете да баците бита али такође баци квалитет. И тако, ако се компресује фотографије са Пхотосхоп или да их отпремате на Фацебоок или да их на заиста усраном телефона, Ви знате да слика почиње да се веома умрљан и пикселизован, и то зато што је се сабија у компјутеру или телефона буквално бацање информације даље. Али ГИФ је невероватна у томе што може да користи мање бита него што би могао по дефаулту без губљења информација. И то у суштини не тако као што следи. Уместо продавници у фајлу попут БМП би РГБ троструки за црно, црно, црно, црно, црна, бела, сива, црна, бела, сива, црна, бела и тако даље, уместо тога, ГИФ формату ће рећи, "Блацк" и онда, "Поновите ово 100 пута", или нешто слично томе. "Црно, поновите 100 пута, црне, поновите 100 пута ..." "Жута, поновите 100 пута." И тако памти, у суштини, леве стране пиксела и онда кодира некако појам понављање пиксел поново и поново. Дакле, ГИФ онда могу се компримовати без губљења информација. Али, ако сте имали да погодите, ако је алгоритам који ГИФ коришћење, који од ових застава, иако они изгледају идентично у величини, ће бити мања када чувају на диску као ГИФ? >> [Ученик] Немачка. Немачка ће бити мањи? Зашто? Хоризонтално [студент] Зато што га поновите много, много пута и онда поновите други пут. >> Тачно. Јер људи који су измислили ГИФ некако самовољно одлучио да ће понављање се ускладе хоризонтално, а не бочно. Има много више понављање бочно овде у немачком заставом него у француском заставом. Дакле, ако смо заиста отворити фасциклу на мом хард диску који има ове ГИФ, можете заправо видети да немачки застава овде је 2 килобајта, а Французи један је 4 килобајта. То се дешава да се случајно да је неко два пута друге, али то је, у ствари, о томе да је француски застава је много већи. Иако смо овде говоримо о графици, исте идеје могу применити на не ствари попут заставе, али слике које су мало сложенији. Ако сликате јабуку, сигурно има много дуплирања, па смо некако могао да се сети да је подразумевана позадина је плава а не, као десна рука слика сугерише, имати на уму боју сваког пиксела у овој слици. Дакле, можемо да баци бита даље постоји без губљења информација. Јабука и даље изгледа исто. У овом примеру овде, можда ћете видети шта се дешава у филму. Оне представљају стара школа филмске бубњевима чиме у горњем слике тамо имате РВ пролазили кућу и дрво. И као да вози комби прошлост слева на десно, шта се очигледно не мења? Кућа се не иде нигде, а дрво не иде нигде. Једина ствар која се креће је комби у овом случају. Дакле, као Позадина Непромењена сугерише, шта можете да урадите у филмовима је сличан само баци информацију која се не мења између рамова. То је опште позната као интерфраме компресије чиме ако овај рам изгледа готово идентично овоме, немојмо смета чување на диску било идентичном информација на овим интермедијарних рамовима, идемо користите само кључне оквире времена на време да заправо складиште те информације редундантно као мало разум провере. Насупрот томе, други приступ компресију видеа у овој другој и доњи пример овде, где уместо продавници 30 фрејмова, зашто једноставно не складиштите уместо 15 фрејмова у секунди? Уместо филма врсте тече лепо, савршено, она може да изгледа као да је муцање мало, мало старе школе, али нето ефекат ће бити да користи далеко мање него што би иначе бита бити потребно. Па где се то онда нас оставите? То је било мало по страни, где другде можете ићи са компресијом. За више информација о томе, узети класу као ЦС175 овде. Ево још једног примера у видеу. Ако пчела је једина ствар креће, заиста можете бацити информације у тим оквирима средње јер цвет и небо и лишће се не мењају. Али, хајде да сада размотрити једну ствар. У наредних 5 минута оставимо иза себе Ц заувек у предавању? Да. Није у псетс, мада. Последња прича о Ц и онда ћемо доћи до врло секси ствари укључујући ХТМЛ и Веб и ву-ху. У реду. Идемо. То је мотивација. Испоставило се све ово време када смо писали програме смо покренули кланг. И цланг смо рекли, јер у првој недељи веома много, узима изворног кода и да га претвара у објектном коду. Потребно Ц и претвара га у 0с и 1с. Ја сам некако лагао да вас за неколико недеља, јер то није баш тако једноставно. Има много више дешава испод хаубе када покренете програм као јека. У ствари, процес израде програма може заиста бити сумирани као што сте можда сећате из видео Робов на компајлера, у ове 4 корака: пред-обраду, састављање себе, монтажа и повезивање. Али ми у класи и већина људи у свету обично сумира све ове кораке као само "састављања". Али ако почнемо са изворним кодом овако, сећам ово је можда најједноставнији Ц програм Писали смо до сада, сећам се да када саставио заврши изгледа овако. Али заправо постоји средњи корак, а ти кораци су следећи. Прво, ту је та ствар у самом врху ове и већина наших програма, # Инцлуде Шта # инцлуде не за нас? Прилично много примерака и пасте садржину стдио.х у мом досијеу, тако да зашто? Зашто брига о садржају стдио.х? Шта је ту интереса? Принтф је декларација, његов прототип, тако да компајлер онда зна на шта мислим када сам поменуо иф ову функцију. Дакле, корак 1 у састављању је пре обраде, при чему сличан програм кланг или неки помагач програм који долази са кланг чита вашу шифру врха до дна, лева на десно, и сваки пут се види # симбол прати кључне речи као што укључује, обавља ту операцију копирања и лепљења у овом случају стдио.х у датотеци. То је корак 1. Онда имате много већу Ц фајл због огромног цопи, пасте посла који се управо десило. Корак 2 Сада се компајлирање. Али испоставило се изворни код састављања која изгледа овако и да га претвара у нешто што личи на ово, која је за оне који познају се зове? >> [Ученик] Скупштина. >> Скупштина језик. То је заправо нешто што, ако се узме ЦС61 ћете уроните у више детаља. Ово је само о тако близу као што можете добити за писање 0с и 1с себе али писања ствари на такав начин да и даље чини барем мало смисла. То су машине за употребу, а ако се спустите се до главне функције овде, приметити да је ово притисак инструкција, померите наставу, одузимање наставу, позива инструкцију, и тако даље. Када чујете да ваш рачунар има Интел унутра, имате Интел процесор у вашем Мац или ПЦ, шта то значи? Процесор долази гради компанија као што су Интел ® разумевање одређене инструкције. Они немају појма шта функционише као замене или су главни су по себи, али они не знају шта је веома ниском нивоу инструкције као сабирање, одузимање, гурај, преместите, позив, и тако даље су. Дакле, када сте компајлирати код у Ц асемблеру, Ваш врло корисник пријатан изглед код претвара у нешто што личи на ово, буквално се креће бајтова или 4 бајта около у таквим малим јединицама и од процесора. Али на крају, када кланг је спремна да преузме ову заступљеност вашег програма у 0с и 1с, затим корак зове монтаже дешава, и то опет све се дешава у трептају ока када ради кланг. Ми смо овде започели, он избацује фајл овако, а онда га претвара у овим 0с и 1с. А ако желите да се вратите у неком тренутку и заправо видели у акцији, ако одем у хелло1.ц--ово је један од првих програма које смо тестирали - нормално би саставе ово са кланг хелло1.ц и то ће нам дати а.оут. Ако насупрот томе што уместо да дају-с заставу, оно што ћете добити је хелло1.с а ви у ствари видећете језик скупштине. Ја ово радим за врло кратко програм, али ако се вратимо на Сцрамбле или поврати или било који програм који сте написали и само из радозналости Хоћу да видим шта је то у ствари изгледа, шта заправо се хранио у ЦПУ, можете да користите да-С заставу са кланг. Али онда на крају, постоји још једна готцха. Ево 0с и 1с да представљам своју примену Здраво, свете. Али ја користио туђи функцију у свом програму. Дакле, иако је процес био узимам хелло.ц, добија саставио је у скупштинску кода, а онда добија склопљени у 0с и 1с, Само 0с и 1с да излазног у овом тренутку су оне које проистичу из мог кода. Али човек који је написао иф су саставили своју шифру пре 20 година и то је сада инсталирана негде на апарату, па смо некако да споји његове или њене 0с и 1с са мојим 0с и 1с, а то нас доводи до 4. и коначно корак састављања, познат као повезивање. Дакле, на левој страни имамо потпуно исту слику као и раније: хелло.ц постаје асемблерског кода постаје 0с и 1с. Али сећам се да сам користио стандардну И / О библиотеке у мом коду, а то значи да негде на рачунару постоји фајл под стдио.ц или барем саставили верзију истог, јер је неко пре неколико година, саставио стдио.ц у скупштинску кода и онда гомила 0с и 1с. То је оно што је познато као статична или динамичан библиотеке. То је неки фајл седи негде у апарату. Али на крају, морам да узмем 0с и 1с, а та особа је 0с и 1с и некако их повежу, буквално комбинују оне 0с и 1с у једној датотеци зове а.оут или хелло1 или како год сам звао мој програм тако да крајњи резултат има све 1с и 0с да сачињавају мој програм. Дакле, све ово време, ова семестра када сте користили кланг и још је недавно покренут да би се покренули кланг, све ове кораке се дешава некако моментално, али врло намерно. И тако, ако наставимо у компјутерске науке, наиме ЦС61, ово је слој који ћете наставити да одлепите одатле говори о ефикасности, безбедности импликације и слично ових нижих нивоа детаља. Али са тим, ми смо о томе да напусти Ц иза себе. Идемо напред и да се сада наше 5-минута паузе, а кад се вратимо: Интернет. У реду. Вратили смо се. Сада смо почели нашу поглед не само на ХТМЛ јер, као што ћете видети, ХТМЛ сама је заправо прилично једноставна али заиста на веб програмирање генерално, умрежавање генерално, и како све ове технологије долазе заједно да нам омогући да створи много више софистициране програме на врху Интернета него до сада смо били у стању да у овим црно-беле прозора. Заиста, у овом тренутку у току семестра, иако ћемо провести релативно мање времена на ПХП, ХТМЛ, ЦСС, ЈаваСцрипт, СКЛ и више, већина студената не завршавају ради коначне пројекте који су веб-басед јер, као што ћете видети, позадина сада имате у Ц је веома применљив на овим вишег нивоа језика. А када почнете да размишљате о свом завршном пројекту, који је, као и много проблема Сет 0, где сте били охрабрени да највише било од интереса за вас у Огреби, коначни пројекат је ваша прилика да своје новостечено знање и памет са Ц или ПХП или ЈаваСцрипт или као се за Спин и направите свој сопствени комад софтвера за свет да види. И да семе са вама идеја, знате да можете кренути овде, пројецтс.цс50.нет. Сваке године смо тражити идеје из факултета и особља и студената групе на кампусу само да доставе своје идеје за интересантне ствари које се могу решити помоћу рачунара, коришћењем сајтова, користећи софтвер. Дакле, ако сте боре да дођу до идеје о своје, свим средствима крећете идеја постоји од ове године и последњи. То је савршено у реду да се позабави пројекат који је бавити раније. Видели смо многе апликације за видео статуса веша на кампусу, многе апликације за навигацију трпезарији мени, многе апликације за навигацију курса каталог и слично. И заиста, у будућем предавања и семинара у будућности, ми ћемо вас упознати са неким јавно доступних АПИ, како комерцијално доступне као и овде на располагању од ЦС50 у кампусу, тако да имате приступ подацима а затим могу да ураде занимљиве ствари са њим. Дакле, више на завршним пројектима за неколико дана када смо ослободили спецификацију, али за сада, знате да можете да радите самостално или са једним или два пријатеља на већини било који пројекат од интереса за вас. Интернет. Ти иди и извуците свој лаптоп, идете на фацебоок.цом по први пут, што није пријављен недавно, и притисните Ентер. Шта тачно дешава? Када кликнете Ентер на рачунару, гомила корака почети врсту магично дешава. Дакле, овде на левој, веб сервера попут Фацебоок је овде на десној страни, и некако користите тај језик зове ХТТП Хипертект Трансфер Протоцол. ХТТП није програмски језик. То је више од протокола. То је скуп конвенција које веб претраживачи и веб сервери користе када интерцоммуницатинг. А шта то значи као што следи. Слично као иу стварном свету, имамо ове конвенције где ако испуни неке људске први пут, ако вам не смета Подилажење ме овде, Можда ћу доћи до вас, рецимо, "Здраво, моје име је Давид." >> Здраво, Дејвиде. Моје име је Самми. "Здраво, Дејвиде. Моје име је Семи." Дакле, сада смо већ ангажовани у овој врсти смешне људске протокола где сам ја иницирао протокол, Семи је одговорила, Добили смо потресени руке, а трансакција је завршена. ХТТП је веома слично у духу. Када ваш веб бровсер захтева ввв.фацебоок.цом, шта ваш претраживач заиста ради проширује своју руку, да тако кажем, на сервер и то је то шаље поруку. А та порука је обично нешто слично се - шта желите да добијете? - ме хоме паге, који се обично означава једним црте на крају УРЛ-а. И само да знате који језик говорим, ја претраживач ћу вам рећи да ја говорим ХТТП верзију 1.1, А и за добру меру, ја ћу вам рећи да домаћин који желим почетну страницу је фацебоок.цом. Типично, веб претраживач, нити знали за вас, људи, шаље ову поруку преко интернета када сте једноставно куцате ввв.фацебоок.цом, Ентер, у вашем претраживачу. А шта на Фацебоок одговорити? Она реагује са неким сличним изгледа криптичне детаља али и много више. Пусти ме само напред на почетну страницу Фацебоок овде. То је екран који већина нас вероватно никада нећете видети да ли оволико све време, али ово је заиста њихова почетна страна. Ако урадимо ово Цхроме, приметићете да можете попети ове мале меније контекст. Користећи Цхроме, било на Мац ОС, Виндовс, Линук или слично, Ако Контрола клик или леви тастер миша, обично се попните мени који изгледа овако, где је неколико опција чекају, од којих је један преглед Паге Соурце. Такође можете да добијете обично на ове ствари које ће у Види менију и боде око. На пример, овде под Виев, Програмер је иста ствар. Идем да иде напред и погледајте Извор приказу. Шта ћете видети је ХТМЛ који Марк је написао да представља фацебоок.цом. То је потпуна збрка овде, али ћемо видети да то чини мало више смисла пре дуго. Али постоје неке обрасце овде. Дозволите ми дођите да ствари овако. То је тешко за човека да чита, али примећујемо да постоји овај образац угаоним заградама са кључним речима као што су опције, кључне речи као што су вредности, неке котирају гудача. Ово је место где, када сте се пријавили за први пут, навели шта ваш година рођења је. То падајући мени годишта некако кодирано овде на овом језику зове ХТМЛ ХиперТект Маркуп Лангуаге. Другим речима, када ваш прегледач тражи веб страницу, то говори ову конвенцију зове ХТТП. Али шта фацебоок.цом одговори на тај захтев са? Она реагује са неким од ових криптичне порука, као што ћете видети у једном тренутку. Али већина њеног одговора је у облику ХТМЛ, ХиперТект Маркуп Лангуаге. То је стварна језик на коме је написана веб страницу. А шта бровсер заиста је онда, по пријему нечега што личи на ово, чита се одозго надоле, с лева на десно, и сваки пут се види један од ових угаоним заградама следи кључне речи као што су опције, приказује да је програмски језик на одговарајући начин. У овом случају, то би приказали падајући мени година. Али опет, то је потпуна збрка да погледамо. То није због тога што Фацебоок програмери манифестују 0 за 5 за стил, на пример. То је зато што већина кода да напише је, у ствари, написао лепо, и прокоментарисао, лепо разведена и слично, Али, наравно, машина, компјутера, претраживачи стварно не дају проклети да ли је ваш код је добро стилизован. А у ствари, то је потпуно расипнички да удари Таб тастер све оне пута и стави коментаре током целог кода и да изаберу баш описна имена променљивих јер ако претраживач не занима, све радиш на крају дана се троши бајтова. Тако испада оно што већина сајтова урадите је, иако изворни код фацебоок.цом, за цс50.нет и свих ових других сајтова на Интернету су обично добро написан и добро коментарисали и лепо разуђена и слично, обично пред сајт стави на Интернету, код минифиед, чиме ХТМЛ и ЦСС - нешто ускоро ћемо видети - ЈаваСцрипт код ускоро ћемо видети је компримовани, чиме дуге имена променљивих постају Кс и И и З, и све те белине која чини све изгледа тако читљиво је све баци, јер ако мислите о томе на овај начин, Фацебоок добија милијарду страница погоди дан - нешто лудо тако - па шта ако је програмер само да буде анални ударио размакницу једном додатно време само да увучете неку линију кода икада тако далеко? Шта је импликација да Фацебоок чува тај размак у свим бајтова они шаљу назад људи на Интернету? Ударање размакницу када вам даје додатну бајт у датотеци. А ако милијарду људи затим наставите да преузмете страницу тог дана, колико више података сте преносе преко Интернета? Гигабите без доброг разлога. И готово, за доста сајтова ово није скалабилна питање, али за Фацебоок, за Гоогле, за неке од најпопуларнијих сајтова ту је велики подстицај финансијски да ваш код изгледа као неред тако да користите што мање бајтова могуће поред онда компресије користите нешто као поштански, алгоритам се зове гзип, да претраживач ради за вас аутоматски. Али ово је грозно. Никада нећемо ништа сазнати о сајтовима туђим и како да дизајнирате веб странице ако морамо да погледамо на то овако. Дакле, на срећу, претраживачи попут Цхроме и ИЕ и Фирефок ових дана обично долазе са уграђеним Девелопер Тоолс. У ствари, ако одем доле да Инспецт елемент или ако идем на Виев, Девелопер и идите на Девелопер Тоолс експлицитно, овај прозор на дну мог екрана сада искочи. То је помало одбојно на први, јер овде је много непознатих картицама, али ако кликнете на елементима скроз на дну леве стране, Цхроме је очигледно веома паметан. Она зна како да тумаче све ове кода. И шта је то Цхроме ради чисти све ХТМЛ Фацебоока. Иако не постоји размак тамо, не постоји улегнуће тамо, Запазите сада да почнем да се крећете ову страницу све више хијерархијски. Испада да сваки веб страница написана на језику зове ХТМЛ5 почне са овим, ово ДОЦТИПЕ декларација, да тако кажем: <ДОЦТИПЕ хтмл> То је врста светлости и сиве тамо, али то је веома прва линија кода у овом фајлу, и то само говори бровсер, "Хеј, ево мало ХТМЛ5 Ево веб страницу.". Први отворени заграда иза тога се дешава да се ова ствар, отворена заграда ХТМЛ ознака, и онда ако уронимо у дубље - ове стрелице су потпуно бесмислене; они су само ради ПРЕЗЕНТАЦИЈА, они заправо и нису у спису - приметити да унутар ХТМЛ ознаке Фацебоока, све што почиње са отвореним носачем а онда је реч зове ознаку. Дакле, унутар ХТМЛ таг је очигледно глава ознака и ознака тело. Унутар главе таг сада је цела збрка за Фацебоок јер они имају доста метаподатака и друге ствари за маркетинг и рекламирање. Али, ако ми доле помицати, доле, доле, доле, хајде да видимо где је. Овде је. Ово је један бар донекле познато. Наслов почетне странице Фацебоок, ако сте икада погледати у картици у насловној траци, Добродошли на Фацебоок је - Лог Ин, Сигн Уп ор Леарн Море. То је оно што ће видети у насловној линији Цхроме, и то је како се представити у коду. Ако занемаримо све остало у глави, већина утроби веб страници су у телу, и испоставило се да је код Фацебоока ће изгледати сложеније него у већини ствари ћемо прво писати само зато што је била изграђена током година, али постоји много писма ознака, ЈаваСцрипт код, који чини веома интерактиван веб сајт: видевши статус ажурирања тренутно користе језике као што су ЈаваСцрипт. Постоји нешто што се зове див, који је подела странице. Али пре него што дођемо до тог детаља, хајде да покушамо да умањите и погледајте на једноставнију верзију Фацебоока 1.0, да тако кажем. Овде је здраво, светски веб страница. Она има ту ДОЦТИПЕ декларацију на самом врху која је мало другачија од свега осталог. Ништа друго ми пишемо у веб странице ће почети са за масна. Опет, прича је иста: здраво, зарез, почните тако да је ово подебљано, онда свет добија масно штампане, а то значи да заустави штампање ово подебљано. Дозволите ми да иде напред и сачувајте свој досије, вратите се на Цхроме, ја ћу повећати само тако можемо видети боље, и поново, и видећете да је свет сада у подебљан. Веб је све о хиперлинковима, па идемо напред и урадите ово: мој омиљени сајт је, рецимо, иоутубе.цом. Саве, поново. Ок. Постоји неколико проблема сада поред грозота на сајту. 1, прилично сам сигуран да сам погодио Ентер овде. И јесам. Не само да сам погодио Ентер, ја увучен, вежбају оно што смо проповедали о стилу, али мој је одмах на свету. Дакле, зашто је ово? Бровсери само оно што кажете да ураде. Нисам рекао претраживача, "Бреак линије овде Убаците став паузе овде.". Дакле претраживача, није битно да ли сам погодио Повратак 30 пута, ипак ће ставити моје право поред свету. Оно што заиста треба да урадите је да овде кажем нешто <бр/>, убаците нови ред. И заправо, прелом је некако чудно ствар зато што не могу заиста почети да се помера на другу линију, а затим урадите нешто, и онда престати да се помера на новој линији. То је нека врста атомског операције. Или то или не. Ударио Унесите или не. Дакле, БР је мало другачије ознаке, па морам да некако како се отварају и затварају га одједном. Синтакса за то је то. Технички, можете да урадите нешто овако у неким верзијама ХТМЛ, али ово је само глупо, јер нема разлога да се покрене и заустави нешто Ако уместо тога можете да урадите све одједном. Схватите да ХТМЛ5 није стриктно траже овај црта, па ћете видети уџбенике и онлајн ресурсе који га немају, али за добру меру идемо практикују симетрију коју смо видели до сада. То значи да је и ознака отворена и затворена. Дакле, сада пусти ме спаси свој досије, врати овде. Ок, тако да почиње да изгледа боље, осим Веб знам је некако кликне, и још иоутубе овде не изгледа да води ничему. То је зато што, иако изгледа као везу, бровсер не зна да по себи, па морам да кажем да је ово бровсер веза. Начин да се ово уради је да се користи таг сидро: <Хреф за хипер референцу, која је стара школа начин да се каже везу, = "Хттп://ввв.иоутубе.цом"> и пусти ме да преместите ово у нову линију само да је мало више читљивим, а ја ћу скупити величину фонта. Јесам ли готов? Не постоји Биће ово дихотомија. Овај таг, сидро ознака, заиста узме атрибут, која мења своје понашање, а вредност тог атрибута је очигледно ИоуТубе УРЛ. Али приметио дихотомију је то само зато што је УРЛ адреса ћеш, то не значи да мора да буде реч да си нагласио и чинећи везу. Уместо тога, то може да буде нешто овако. Зато морам да кажем да ово заустави реч хипервеза помоћу блиску сидро ознаку. Обратите пажњу да не радим ово. 1, ово би само губљење времена свачији и то није потребно. Да бисте затворили ознаку, само помињати име ознаком. Не помињу неки од атрибута. Дакле, хајде да спасе, врати се. Ок, воила, сада је плава и хипервезе. Ако га изаберите, ја заправо идем на ИоуТубе. Дакле, иако је моја веб страница није на Интернету, то је барем ХТМЛ, и ако ми дозволите интернет сустигне, заправо завршити овде на иоутубе.цом. И ја могу да се вратим и ево је моја веб страница. Али приметити. Ако сте икада стечен спам или пхисхинг напад, Сада имате могућност после само пет минута да ураде исто. Овде можемо отићи и урадити нешто слично ввв.бадгуи.цом или било скромно сајт је, и онда можете да кажете да верификујете свој ПаиПал рачун. [Смех] А сад ово да идем на бадгуи.цом, што ја не идем да кликнете на јер ја немам појма где то води. [Смех] Али ми сада имамо могућност да се заиста завршити тамо. Дакле, ми смо стварно тек почиње да огребу површину. Нећемо програмирање по себи; пишемо маркуп језик. Али чим смо заокружују нашу речник у ХТМЛ, ћемо увести ПХП, стварна програмски језик који ће нам омогућити да генерише ХТМЛ аутоматски генерисати ЦСС аутоматски, тако да можемо почети у среду да спроведе, рецимо, наше претраживач и још много тога. Али више о томе у неколико дана. Видимо онда. [ЦС50.ТВ]