[Powered by Google Translate] [Тыдзень 7]
[David J. малая - Гарвардскі універсітэт]
[Гэта CS50. - CS50.TV]
Добра. Сардэчна запрашаем назад. Гэта CS50, і гэта пачатак тыдня 7.
Два маленькіх аб'явы:
Pset5 У цяперашні час вядзецца ці хутка будзе,
і дазвольце мне сказаць, шчыра кажучы, гэта, як правіла, сярод больш складанай
задачы курса набораў, таму дазвольце мне казаць пра гэта цяпер
так што на гэтым тыдні больш, чым калі-небудзь вы не чакайце, пакуль, скажам, у сераду ўвечары
ці ў чацвер ноччу, каб пагрузіцца цалі
Гэта, безумоўна, цікавая PSET. Мы лічым, што гэта весела.
Калі вы сапраўды атрымаеце яго цалкам правільным і можа кінуць выклік так званага Вялікага савета,
Вы будзеце мець магчымасць спаборнічаць з некаторымі супрацоўнікамі курсу
і некаторыя з вашых аднакласнікаў.
Што Вялікага Савета з'яўляецца адзін раз у вас ёсць для праверкі арфаграфіі працы,
Вы будзеце ў стане пайсці ў cs50.net пасля запуску каманды,
чыста адмовіцца, і затым колькасць часу і аб'ём аператыўнай памяці і больш
, Якія вы выкарыстоўвалі ў сваёй рэалізацыі будуць выстаўлены тут, на хатняй старонцы курса.
Вы заўважыце, што цэлая куча гэтых людзей тут пазначаны ў якасці супрацоўнікаў
так як у мінулыя выходныя, супрацоўнікі думалі, што гэта было б цікава імкнуцца пераўзышлі адзін аднаго.
Так разумею, што мэта тут не перасягнуць персаналу.
Нават я толькі тут, пад нумарам 13.
Чыста абраць у, але гэта магчымасць убачыць, як мала аператыўнай памяці
і як мала працэсара секунд вы можаце выкарыстоўваць VIS-A-VIS некаторыя з вашых аднакласнікаў.
>> І я прызнаю, што Kevin Michael Schmid,
У цяперашні час нумар 1 пазіцыю як аднаго з ТФ,
Гэта рэалізацыя, якую мы называем не ўяўляецца магчымым
улічваючы, што ён выкарыстоўвае амаль 0 аператыўнай памяці і амаль 0 секунд для загрузкі.
Такім чынам, мы будзем клапаціцца пра форум Кевін. [Смех]
Ёсць пэўныя навыкі, Кевін ставіць на тэст тут.
Адна з рэчаў, мы думалі, што рабіць таксама цяпер CS50x з'яўляецца тыдні ў прагрэс,
і вы, хлопцы, такая ж частка гэтага эксперыменту, як тыя студэнты.
Мы спыталіся ў іх, як частка іх pset0, які быў гэтак жа прадставіць праект да драпін
якія ўяўляюць цікавасць для іх - гульня, інтэрактыўныя творы мастацтва, анімацыі і да т.п. -
1 - 2-хвіліннае відэа, калі яны хацелі б, каб павітацца з мірам і хто яны на самай справе.
Я думаў, што я падзялюся з вамі ўсяго некалькі відэа, якія былі прадстаўлены да гэтага часу
таму што для нас, у штабе па крайняй меры, гэта сапраўды была захапляльнай
і натхняльным, каб убачыць гэтых людзей з усяго свету - краін па ўсім свеце -
наладзе на, усіх рэчаў, на курс інфарматыкі ў Інтэрнэце,
ці з'яўляецца гэта таму, што яны хочуць працягнуць сваю адукацыю,
яны хочуць узяць сваю кар'еру ў новым напрамку,
яны хочуць, каб запоўніць прабелы ў сваіх ведах,
таму некаторыя з тых жа прычынах, што вы, хлопцы, магчыма, былі тут.
>> Таму я прывяду вам адзін такі студэнт тут. Вы можаце павялічыць гучнасць толькі трохі.
Вось адзін з 1-хвілінны нашых студэнтаў уяўленняў.
Добры дзень, свет. Я студэнт прамысловага будаўніцтва тут, у Малазе, Іспанія.
Я вельмі рады гэтай онлайн-курс, таму што я люблю інфарматыку, я сапраўды раблю,
і я сапраўды цаню, што я атрымліваю, каб вывучыць яе.
І тое, што я магу навучыцца ж усе вы, хлопцы,
але замест таго, каб у Гарвардзе я ў Малазе, якім дзіўным з'яўляецца тое, што?
Ну, я Фернанда, і гэта CS50. Глядзіце вас, хлопцы.
[Смех] Іншы кліп нам асабліва падабаецца, вы выявіце, што ангельскае гэтага спадара не так моцна.
Падобна на тое, ён яго машына перакладаецца, такім чынам, пераклады самі трохі недасканалы,
але гэта было адным з нашых любімых да гэтага часу, а таксама.
[♪ ♪]
Добры дзень, свет. [Кажа на Японскай]
[Я павінен вітаць на японскай мове, таму што мой англійская вельмі ненадзейна.]
[Я перадаў пасланне да вас з горада Гифу, Японія.]
[Я магу быць студэнтам у першы раз у 20 гадоў, як гэта можна бачыць.]
[Я вельмі ўдзячная Гарвардскага універсітэта, які даў мне гэтую магчымасць і EDX.]
[Гольф-гітара і мая любімая рэч працуе.] [Смех]
[♪ ♪]
[Чаму вы думаеце, што я спрабаваў прыняць удзел у cs50x.]
[Гарвардскага універсітэта, гэта мая туга.]
[Асабліва, калі я далёкага прысутнасці жыў у Японіі.]
[Я хацеў паспрабаваць адразу ведаюць пра існаванне такіх EDX, калі.]
[Ці не падаецца вам, каб вы не звязана з узростам навучання I.]
[CS50 мой сум. Мяне клічуць Kazu, і гэта CS50.]
[♪ ♪] [апладысменты і крыкі]
Іншая любімая наша была тут гэта прадстаўленне ад кагосьці.
[♪ ♪] [малая] Google, калі вы не знаёмыя з гэтым мемом.
>> І тады, нарэшце, некалькі іншых, якія атрымалі адказваў, што, магчыма, выйграць чароўныя ўзнагароду.
[Студэнтаў] Ой! >> [Малая] Мы павінны слухаць. Гэта кароткі, так што слухайце ўважліва.
[Жанчынай-спікерам] Як цябе завуць? >> Луі.
[Жанчынай-спікерам] Што гэта? >> [Смех] CS50. [Смех]
[Малая] Ён двух дубляў, аднак.
Тут мы ідзем, апошні.
Мяне клічуць Луі, і гэта CS50.
[Смяецца] У гэтым і складаецца CS50x.
Дзякуй усім тым з вас, вынікаючы ўздоўж дома
, Якія былі Камуніі да гэтага часу.
Сёння мы заканчваем абмеркаванне структур дадзеных,
па крайняй меры некаторыя з найбольш фундаментальных,
а потым мы працягнем нашу размову аб HTML і вэб-праграмавання.
Сапраўды, мы правялі апошнія сем тыдняў некаторыя, гледзячы на ​​асновы праграмавання -
алгарытмы, структуры дадзеных і да т.п. -
і C, як вы, магчыма, выпрабавалі да гэтага часу,
не абавязкова з'яўляецца найбольш даступных моў
з якім для рэалізацыі некаторых з гэтых ідэй.
І так пачынаючы з гэтага тыдня і на наступным тыдні, а затым наступны,
мы, нарэшце, быць у стане пераходу ад З, які, як вядома, даволі нізкага ўзроўню мовы,
да рэчаў больш высокага ўзроўню, у тым ліку PHP, JavaScript, і да таго падобнае,
што мы ўбачым абапірацца на тыя ж урокі, што мы даведаліся за апошнія некалькі тыдняў,
але вы ўбачыце, што абвяшчэнне рэчаў, як масівы і хэш-табліцы і пошук і сартаванне
стала значна лягчэй, таму што самі мовы, мы пачнем выкарыстання
будзе станавіцца ўсё больш магутнымі.
Але, па-першае, прымяненне дрэў.
Гэта вельмі часта ў гэтыя дні трэба сціснуць інфармацыю.
У якім кантэксце вы жадаеце сціснуць некаторыя віды лічбавай інфармацыі?
>> Так. >> [Студэнт] Калі вам трэба, каб адправіць яго праз Інтэрнэт.
Так, калі вы хочаце адправіць нешта праз Інтэрнэт.
Калі вы жадаеце запампаваць вялікі файл, ён ідэальна падыходзіць, калі хтосьці на іншым канцы
сціснуў, што файл, выкарыстоўваючы фармат ZIP ці нешта накшталт таго
так што вы пасылаеце менш біт, чым маглі бы быць перададзеныя.
Такім чынам, як вы сціскаць інфармацыю?
Гэта ўсё зводзіцца да выкарыстання меншага колькасці бітаў, чым патрабуецца па змаўчанні.
Але гэта накшталт цікава, таму што ўспомніце тыдняў 0 і 1
калі мы казалі аб ASCII і бінарныя і мы гаварылі пра ASCII, у прыватнасці,
як з дапамогай 8 біт для прадстаўлення літары алфавіту
так што літара прадстаўлена 65, ніжні рэгістр лік 97,
і тым не менш вы ўяўляеце 65 ці 97, вы выкарыстоўваеце 7 або 8 біт.
Але загваздка ў тым, што некаторыя літары ў англійскай алфавіце
, Якія не так папулярныя, як іншыя.
Z не ўсё, што папулярна, Q не ўсё, што папулярна, але А і Е з'яўляюцца супер папулярным.
І тым не менш за ўсе гэтыя лісты, па змаўчанні свеце выкарыстоўвае такое ж колькасць бітаў, усяго ў 8.
Такім чынам, ці не было б разумней, калі б замест 8 біт для кожнага ліста,
нават самыя рэдка выкарыстоўваюцца як Q і Z,
што, калі мы выкарыстоўвалі менш біт для А і Е і S і самых папулярных літар
і выкарыстоўваецца больш бітаў для менш папулярных літары,
Ідэя ў тым, аптымізаваць давайце для агульнага выпадку,
, Якая з'яўляецца тэмай у вобласці кампутарнай навукі ў спробе аптымізаваць тое, што здарыцца самае
і выдаткаваць яшчэ крыху часу, трохі больш прасторы на тое, што, ды, можа адбыцца
але не абавязкова так часта.
Такім чынам, давайце разгледзім прыклад.
>> Выкажам здагадку, што мы хочам, каб кадаваць інфармацыю дастаткова эфектыўна.
Вы, магчыма, выраслі ведаючы сёе-тое пра азбукі Морзэ,
і цалкам верагодна, вы не ведаеце, фактычны код,
але вы, магчыма, памятаеце, што гэта па меншай меры ў гэтай серыі кропак і працяжнік.
Гэта даволі эфектыўнае кадаваньне, і заўважылі, што самыя папулярныя літары - напрыклад, E -
выкарыстоўвае самыя кароткія гукавых сігналаў.
Азбука Морзэ гэта ўсё аб БІП-БІП-БІП-БІП-БІП-БІП і правядзенне танах
або на працягу кароткага перыяду часу або працяглых перыядаў часу.
E, так як пазначаецца кропкай, гэта супер кароткі гукавы сігнал, толькі гукавы сігнал, і што будзе прадстаўляць E.
У адрозненне ад T будзе больш гукавы сігнал, як сігнал [падаўжае гук]
і што будзе прадстаўляць T.
Але гэта ўсё яшчэ даволі кароткай, таму што, наадварот, калі вы паглядзіце на Z,
каб выказаць Z вы пойдзеце БІП, БІП [больш гуку], БІП, БІП [кароткі гук].
Так што гэта больш, таму што гэта менш распаўсюджанае.
Але Гоча тут з'яўляецца тое, што код Морзэ трохі недахопаў
у тым, што гэта не адразу прайгравацца.
Напрыклад, выкажам здагадку, што вы чуеце на некаторыя канцы провада гукавы сігнал [кароткі], гукавы сігнал [доўга].
Якое паведамленне я толькі што атрымаў? Кропкі і працяжнік. Што гэта ўяўляеце?
[Студэнт] A. >> [малая] Можа быць.
Гэта таксама можа быць E наступным T.
Іншымі словамі, азбука Морзэ, хоць ён выкарыстоўвае гэты прынцып аптымізацыі кута выпадку,
яно не паддаецца непасрэднай Декодируемости.
Гэта значыць, чалавек, які чуе ці атрымання гэтых кропак і працяжнік
павінен нейкім чынам высветліць, дзе парывы ​​паміж літарамі,
таму што, калі вы не ведаеце, дзе гэтыя перапынкі, вы можаце змешваць для ET ці наадварот.
>> Так што ж вы робіце? У азбуцы Морзэ можна проста паўза паміж кожнай з літар.
Але спыняючыся гэта свайго роду лічыльнік, каб увесь сэнс паскарэння рэчы.
Так што, калі замест гэтага мы прыдумалі код, дзе не было гэтай дрэннай сітуацыі
дзе E з'яўляецца прэфіксам, напрыклад, з -
Іншымі словамі, калі б мы маглі пераканацца, што мадэлі па-ранейшаму кароткія для папулярнай літары
доўга для менш папулярных літар, але няма ніякай магчымай блытаніны?
Чалавек па імя Хафман гадоў таму прыдумалі гэтую схему называюць кадаваньне Хафман
што на самай справе выкарыстоўвае адну са структур дадзеных, мы правялі трохі часу на размовы пра
На мінулым тыдні, што дрэвы, бінарныя дрэвы канкрэтна -
Сэнс бінарнае дрэва, што яно мае не больш за 2 дзяцей.
Яна, можа быць, левая дзіцяці, можа быць, правоў дзіцяці, вось і ўсё.
Такім чынам, хай толькі дзеля абмеркавання, што хто-небудзь хоча, каб адправіць паведамленне
які выглядае наступным чынам. Гэта поўная бязглуздзіца, але ён складаецца з As, Bs, Cs, Ds, і Es.
І калі вы на самой справе падлічыць усе As, Bs, Cs, Ds, і Es
, А затым падзяліць на агульная колькасць літар,
гэтая маленькая графіка тут гаворыцца, што 45% з літар Es, 20% As,
10% B, і гэтак далей.
Такім чынам, іншымі словамі, выкажам здагадку, што двукоссі тут
толькі некаторыя паведамленні, якія вы хочаце адправіць.
Гэта, аказваецца, глупства проста так мы можам выкарыстоўваць як некалькі літар наколькі гэта магчыма,
але гэта сапраўды так, што E застаецца самым папулярным,
і B і C з'яўляюцца найменш папулярнымі, па меншай меры, з гэтых 5 літар алфавіту.
Так як мы можам ісці аб прыдумляюць кадавання,
двайковага кадавання, узор з 0 і 1 для кожнага з гэтых літар
такім чынам, што E знаходзіцца ў некалькіх хвілінах карціны і, магчыма, B і C з'яўляюцца крыху больш за мадэляў,
Зноў жа, ідэя ў тым, што мы хочам выкарыстоўваць меншая колькасць біт вялікую частку часу
і больш біт толькі адзін раз у той час.
Па словах кадаваньне Хафман, вы можаце стварыць лес дрэў.
Там накшталт сюжэтная лінія тут, што ўключае ў сябе дрэвы, а таксама працэс пабудовы іх.
Давайце пачнем.
>> Я прапаную вам пачаць з гэтага лесу, так бы мовіць, з 5 дрэў,
кожны з якіх з'яўляецца даволі дурное дрэва.
Дрэва складаецца з усяго аднаго вузла, як пададзена тут навокал.
Такім чынам, кожная з гэтых рэчаў могуць быць структуры C
і ўнутры структуры C можа быць з якая плавае кропкай ўяўляюць падліку частоты
і тады, магчыма, сімвал ўяўляе лісце.
Так што думаю аб гэтых вузлах, як толькі ўсе старыя структуры C, але, на дадзены момант, больш высокі ўзровень.
Гэта лесу з 5 дрэў, кожнае з якіх ёсць толькі адзін вузел.
Што Хафман прапанаваная ў тым, што мы пачынаем аб'ядноўваць гэтыя дрэвы
, Якія маюць найменшы разлічвае частату ў трохі больш дрэў
, Злучаючы іх з новым каранёвым вузлом.
Такім чынам, сярод літар тут, звярніце ўвагу, што для зручнасці я сартаваць іх злева направа,
хоць гэта не з'яўляецца строга абавязковым, і звярніце ўвагу, што найменшае вузлоў
У цяперашні час 10% і 10%.
Так Хафман прапанаваў, каб мы аб'яднаем гэтыя 2 найменшае вузлоў у новае дрэва
шляхам увядзення новага бацькоўскага вузла, а затым даць, што бацькі дзіцяці левым і правам дзіцяці
дзе B адвольна левай і C адвольна права.
А потым Хафман Акрамя таго, прапануецца Давайце проста думаць аб левым дзіцяці
У адным з гэтых дрэў заўсёды, як быць прадстаўленым на 0
і права дзіцяці заўсёды, як быць прадстаўленым нумарам 1.
>> Гэта не мае значэння, калі вы перавярніце іх так доўга, як вы паслядоўныя.
Так што цяпер у нас ёсць чатыры дрэвы ў гэтым лесе.
І я кажу чатыры, таму што цяпер дрэва злева -
і гэта не так шмат дрэва ў тым сэнсе, што ён расце такім чынам,
гэта больш падобна на генеалагічнае дрэва, дзе цяпер 0,2 з'яўляецца свайго роду бацька двух дзяцей -
Адзначым, што ў бацькоўскі што мы намалявалі 0,2.
Мы дадалі частоты адлікаў двух дзяцей і з улікам новых вузлоў агульнай сумы.
Так што зараз мы проста паўтарыць гэты працэс.
Знайсці два самых маленькіх вузлоў, а затым аб'яднаць іх у новае дрэва
, А затым паўтарыць працэс далей.
Цяпер у нас ёсць некалькі кандыдатаў, 20%, 15%, а яшчэ 20%.
У гэтым выпадку, мы павінны разарваць сувязь. Мы можам рабіць гэта адвольна.
Мы проста павінны рабіць гэта пастаянна.
У гэтым выпадку, я буду ісці з адвольным 1 злева,
і я цяпер аб'яднаць 20% і 15%, каб даць мне новых бацькоў называюць 35%,
, Левы дзіця 0, чыё права дзіцяці 1, і цяпер у нас ёсць толькі тры дрэвы ў лесе.
Вы, магчыма, можа бачыць, дзе гэта адбываецца.
Калі мы паўторым гэта яшчэ пару разоў, мы збіраемся мець толькі адну больш дрэў,
, Ўсе рэбры якога пазначаныя 0 і 1.
Давайце зробім гэта зноў.
35% кораня, дрэва. 20% і 45%, так што мы збіраемся аб'яднаць 35% і 20%.
Цяпер у нас ёсць гэта дрэва тут. Мы дадаем іх разам, у нас ёсць 55%.
Цяпер ёсць толькі два дрэва ў лесе.
Мы робім гэта ў апошні раз, і, спадзяюся, матэматычна ўсе частоты складваюцца
таму што яны павінны, так як мы вылічылі іх з самага пачатку ісці, каб дадаць да 100%.
І зараз у нас ёсць адно дрэва.
Такім чынам, гэта дрэва Хафман.
Гэта збольшага спатрэбілася час, каб дабрацца на словах, але на самой справе з цыклу
або з дапамогай рэкурсіўнай функцыі, можна пабудаваць гэтую рэч даволі хутка.
Так што цяпер у нас ёсць адзін новы вузел, і ўсе гэтыя ўнутраныя вузлы былі malloc'd,
Як мяркуецца, на гэтым шляху.
Так што зараз на вяршыні гэтага дрэва мы маем 100%, але цяпер заўважаю ў нас ёсць шлях
З гэтага новага пра-пра-пра-прабацькоў да ўсіх пра-пра-пра-ўнукі
ўсю дарогу на дне, каб усе лісце.
>> Тое, што мы збіраемся зрабіць цяпер, гэта прапанаваць, што для таго, каб прадстаўляць літару Е,
мы будзем проста выкарыстоўваць нумар 1. Чаму?
Таму што калі мы пройдзем гэты дрэва ад канчатковага корань ўніз да ліста вядомы як E,
мы ідзём толькі адзін край, правы бок, і гэта, вядома, пазначаныя ў правым верхнім куце 1.
Такім чынам, імплікацыі тут Хафман, што кадаваньне E у двайковым павінна быць проста 1.
І гэта па-чартоўску эфектыўна. Не магу атрымаць любую менш, чым гэта.
З іншага боку, збіраецца быць прадстаўлены, калі прытрымлівацца логіцы,
тым, што карціна біт замест гэтага? 01.
Такім чынам, каб дабрацца да, мы стартуем з кораня і ідзем налева, а затым мы ідзем направа,
якая азначае, што мы рушылі ўслед 0, а затым 1.
Такім чынам, мы будзем прадстаўляць лісты з малюнкам 0 і 1.
А цяпер заўважаю ў нас ужо ёсць ўласцівасць непасрэднай Декодируемости
што мы не маем у азбуцы Морзэ.
Хоць абодва гэтыя мадэлі з'яўляюцца даволі кароткі - Е 1 біт, складае 2 біта -
заўважыце, што яны не могуць быць зблытаны адной або з іншага боку,
таму што, калі вы бачыце ў 1 гэта павінна быць E, калі вы бачыце 0, то 1 ён, відавочна, павінен быць A.
Акрамя таго, што D? 001.
Што такое C? 0001.
А што такое B? 0000.
І зноў, таму што ўсе лісты, якія мы клапоцімся пра знаходзімся на лісці
і ніхто з іх з'яўляюцца свайго роду пасярэднікамі на шляху ад кораня да ліста,
няма рызыкі злучаючы розныя кадоўкі 2 літары "
таму што ўсе гэтыя бітаў з'яўляюцца дэтэрмінавана.
0000 заўсёды будзе B.
Там няма вузлоў дзесьці пасярэдзіне, што вы маглі зблытаць адну літару за другой.
Так што ж маецца на ўвазе тут?
>> Самы папулярны ліст - у гэтым выпадку E - атрымаў самыя кароткія кадавання,
Атрымаў наступны самыя кароткія кадавання,
і B і C, якія мы ўжо ведалі з самага пачатку ісці было выгляду найменш папулярным
на 10% частату кожнага, яны атрымалі самы доўгі кадавання.
І што гэта азначае цяпер, што калі вы хочаце адправіць паведамленне, якое сціснуты
праз Інтэрнэт або па электроннай пошце і да т.п.,
а не з дапамогай стандартнага ASCII, вы можаце адправіць Хафман закадаванае паведамленне
згодна з якім, калі вы хочаце адправіць ліст E, вы пасылаеце толькі адзін біт.
Калі вы хочаце адправіць, вы пасылаеце 2 бітамі, 01, замест адпраўкі 8 біт
затым яшчэ 8 бітаў ідуць яшчэ 8 біт і гэтак далей.
Але ёсць Гоча тут.
Гэта не дастаткова проста пабудаваць гэта дрэва, а затым пачаць перадачу ад Алісы да Боба
карацей бітаў, радок з ASCII,
таму што Эліс таксама павінен паведаміць аб тым, што Боб
калі Боб збіраецца быць у стане прачытаць яе сціснутым паведамленне?
[Неразборліва адказ студэнта] >> Што гэта такое?
[Неразборліва адказ студэнта] >> З чаго дрэва.
Ці нават больш канкрэтна, то, што гэтыя кадоўкі,
тым больш, што падчас гэтай гісторыі мы прынялі рашэнне выкліку ў адной кропцы.
Памятаеце, што мы павінны былі выбраць адвольна паміж 2 рознымі вузламі 20%?
Так што гэта не той выпадак, Боб, атрымальнік, можа проста аднавіць дрэва на сваім
таму што, магчыма, ён будзе ствараць дрэва ледзь-ледзь адрозніваецца ад Алісы.
Акрамя таго, Боб нават не ведаю, што арыгінальнае паведамленне
паколькі адзінае, што Аліса пасылае яго, вядома, з'яўляецца сціснутым паведамленні.
>> Такім чынам, вылаў з выкарыстаннем кампрэсіі, як гэта, што, так, Аліса можа выратаваць шмат бітаў
шляхам адпраўкі 1 для E і 01 і гэтак далей,
але яна таксама павінна паведаміць Бобу, што адлюстраванне паміж літарамі і біты
таму што яны не могуць выразна належыць толькі на ASCII больш, калі мы не выкарыстоўваем ASCII.
Такім чынам, яна можа альбо адправіць яго дрэвам ці інакш -
запішыце яго, захоўваць яго ў выглядзе двайковых дадзеных або нешта накшталт гэтага -
або проста паслаць яму трохі шпаргалку, файл Excel, які паказвае адлюстравання.
Такім чынам, эфектыўнасць сціску сапраўды мяркуе, што паведамленні, якія вы адпраўляеце
даволі вялікі, па меншай меры, сярэдняга,
таму што, калі вы адпраўляеце супер кароткае паведамленне,
калі вы проста хочаце адправіць паведамленне БАД, якія, здараецца, слова, якое мы можа азначаць тут,
B-A-D, вы, верагодна, будзеце выкарыстоўваць меншая колькасць біт,
але загваздка ў тым, калі вы таксама павінны паведаміць Бобу, што дрэва
або тое, што гэтыя кадоўкі, вы будзеце, верагодна, перавешваюць усе зберажэнні
наяўнасці сціснутага рэчы з самага пачатку.
Так што гэта сапраўды можа быць так, што калі вы паспрабуеце сціску
нават з чымсьці накшталт паштовы індэкс ці фарматы файлаў вы можаце быць знаёмыя з -
даволі невялікія файлы, нават пустыя файлы -
Часам гэтыя файлы могуць атрымаць больш і не менш.
Але рэальна, што адбываецца толькі для невялікіх памераў файла,
так што ён не збіраецца рабіць гігабайт файлаў складае 2 Гб;
Мы сапраўды гаворым байт ці проста пару кілабайт.
>> Некаторыя праграмы, як паштовы досыць разумныя, каб разумець, што,
"Вы збіраецеся выдаткаваць больш бітаў сціску гэтага".
"Няхай мяне не турбуюць сціскаючы яго для вас на ўсіх".
Так што гэта толькі адзін з спосабаў затым сціснуць тэкставы фармат.
Мы маглі б рэалізаваць нешта падобнае ў C.
Напрыклад, вось як мы маглі б прадстаўляць сабой вузел у гэтым дрэве
дзе ў нас ёсць знак на знак, якія плаваюць значэнне частоты,
і, як мы бачылі, з іншымі нашымі структурамі дадзеных, 2 паказальнікі,
1 налева дзіцяці, 1 направа, кожны з якіх можа быць NULL,
але калі няма, гэта ставіцца да левым дзіцяці і права дзіцяці.
Дык што ж тады кадаваньне Хафман, і гэта адзін са спосабаў, вы можаце ісці аб сціску інфармацыі,
і гэта, безумоўна, адна з найбольш простая ў рэалізацыі
ў кантэксце, скажам, дадзеныя на мінулым тыдні структур,
хоць нават больш складаныя алгарытмы існуюць
што можна зрабіць яшчэ больш складанай мутацыі вашых дадзеных.
Любыя пытанні, то на дрэвы, бінарныя дрэвы, або сціск тэксту?
[Студэнт] Ёсць некаторая двухсэнсоўнасць, як калі б [неразборліва] падзялілася на 01,
то 011 будзе неадназначным, так?
[Неразборліва] >> Добры пытанне. Неадназначнасць.
Дазвольце мне коратка, спасылаючыся на гэта фота тут.
Таму што знакі, якія вы сціскаю, прадстаўлення,
па вызначэнні гэтага алгарытму заўсёды застаюцца лісце,
Вы ніколі не будзеце выпадкова выкарыстоўваць тую ж схему біта для прэфікса некалькі літар.
Такім чынам, іншымі словамі, вы заклапочаныя, падобна, двухсэнсоўнасці, якія ўзнікаюць
якіх 001 можа быць пачаткам B або C пачатку ці нешта накшталт гэтага.
Але гэта не можа быць так, таму што заўважылі, што ўсе літары алфавіту мы кадуе
знаходзяцца на лісці.
>> Неадназначнасць можа паўстаць толькі, як і ў выпадку з азбукай Морзэ,
Калі, напрыклад, C быў дзесьці на шляху ад кораня да B.
[Студэнт] Дакладна. Так што ў гэтым выпадку, скажам, з 2 лісцем. >> Скажыце ёсць - Скажы гэта яшчэ раз.
[Студэнт] Скажы мае 2 ліста, F і G, а затым G - >> Добра. Але яна не можа.
Сама па сабе не можа мець лісце F і G, таму што гэтыя літары F і G
б самі быць пакідае недзе злева ад B або права E.
Такім чынам, па азначэнні, яны павінны быць лісцем.
У адваротным выпадку, вы маеце рацыю, мы не вырашылі праблему, што код Морзэ сутыкаецца.
Добры пытанне. Іншыя пытанні? Добра.
Гэта паняцце біта, аказваецца, у нас былі ўлады ўсё разам, што мы фактычна не выкарыстоўваецца
калі гаворка ідзе пра маніпуляванні гэтыя 0 і 1.
Мы спыталі пра гэта на адной з першых набораў задачы:
а менавіта, як вы ідзяце па нагоды пераўтварэння вялікіх і малых літар, ці наадварот?
Ці, больш канкрэтна, адзін з тых першых psets спытаў
колькі біт вы на самой справе трэба перавярнуць, каб змяніць у ніжні рэгістр ці наадварот?
Вось кароткае напамін таго, што 65 і 97 выглядаць у двайковым выглядзе.
І нават калі гэта пытанне кшталту быў згублены ў вашай памяці,
Вы можаце ўбачыць тут яшчэ раз, што, колькі біт неабходна перавярнуць
змяніць капіталу ў ніжні рэгістр? Толькі адзін.
>> Яны адрозніваюцца толькі ў адным месцы, трэці біт злева.
У той час як ёсць 010, мала мае 011.
Так ці інакш, мы павінны проста быць у стане адлюстраваць, што біт,
і мы можам капіталізаваць або малой літары.
Мы зрабілі гэта ў мінулым, фактычна выкарыстоўваючы, калі ўмовы
і праверкі, калі ліст паміж капіталам і капіталам Z,
Затым выхаду, як - + 26 ці нешта накшталт гэтага.
Вы, напэўна, зрабіў арыфметычную змены літары алфавіту.
Але што, калі мы маглі б проста перавярніце, што адзін біт?
Як вы маглі б ісці аб прыняцці кошт аднаго байта біт, 8 біт, так як 01.000.001 01.100.001 і?
Калі ў вас гэтыя паслядоўнасці бітаў, як мы можам ісці аб змене толькі аднаго з іх?
Што, калі мы ўвядзем у жоўтым вось гэта іншае структуры біта?
Калі я зраблю ўсё жоўтыя 0s радкі, за выключэннем аднаго біта, што я хачу змяніць
а потым ўвесці новы аператар вядомы як аператар пабітава -
Пабітава у тым сэнсе, што яна дзейнічае на асобныя біты,
не на ўвесь байт ці чатыры байта ўсё адразу.
Гэта вертыкальная рыса там, у жоўтым мяркуе, што тое, што калі мы возьмем ўяўленне капітал
і пабітавае АБО яго жоўтай паслядоўнасць бітаў?
Іншымі словамі, думаю, вернемся да нашага абмеркавання булева выразаў у драпін, а затым у C.
>> Робячы лагічны ці азначае, што, каб быць праўдай, альбо першае, што павінна быць сапраўдным
або другое павінна быць праўдзівымі або абодва яны маюць, каб быць праўдай,
, А затым атрыманы вынік з'яўляецца самай праўдай.
У гэтым выпадку тут, што мы атрымаем, калі возьмем 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.
І таму, нават калі мы не ведаем загадзя, што ніжні рэгістр быў,
проста "або" ИНГ з гэтай карціны біты, якія мы прадставілі тут, у жоўтых,
Вы можаце ніжні капіталу, пстрыкаючы, што няшмат.
Мы выкарыстоўвалі гэты выраз тыдняў назад: гартаць няшмат.
Як вы на самой справе зрабіць гэта праграмна?
Вы можаце выкарыстоўваць тое, што звычайна называюць маскай, паслядоўнасць бітаў,
што ў гэтым выпадку адбываецца проста так, каб паглядзець, як гэты нумар тут,
і тады вы "ці" гэта разам з выкарыстаннем гэтага новага аператара C,
Ці не | |, можна выкарыстоўваць адно |, і вы б на самой справе атрымаць адказ тут, таму што навошта?
Гэтае месца 1s, 2s месца, 4s, 8s, 16s, 32s.
Вось і атрымліваецца, што калі ўзяць вялікай літары і пабітавае АБО яго з цэлымі 32,
таму што цэлымі 32, калі вы глядзіце на гэта як на біты, выглядае так,
гэта азначае, што вы можаце перавярнуць біт, што вы сапраўды хочаце.
І сапраўды гэтак жа - і мы будзем глядзець на код праз хвіліну -
Выкажам здагадку, мы хочам пайсці ў іншым накірунку.
>> Як вы ідзяце з ніжняга рэгістра ў сталіцу? Які біт неабходна змяніць?
Гэта тая ж самая.
Мы хочам змяніць гэта трэці біт з 1 на 0.
І як мы маглі б ісці пра гэта?
Як мы згортваем крыху? З якой шаблон бітаў мы маглі выключыць крыху?
Што рабіць, калі мы накшталт інвертаваць маску?
Калі раней, мы зрабілі ўсё жоўтыя 0s маскі
за выключэннем аднаго біта мы хацелі ўключыць,
Што рабіць, калі на гэты раз, мы робім усё 1s маска, за выключэннем трохі, што мы хочам, каб выключыць
, А затым выкарыстоўваць тое, што аператар?
Што, калі мы "і" рэчы? Давайце паглядзім.
Калі зараз пстрыкнуць на гэта, выкажам здагадку, што я зноў стварыць маску, вось і ўсё 1s
за выключэннем аднаго біта, што я хачу, каб выключыць
, А затым замест "або" белымі лічбамі наверсе з жоўтымі нумарамі тут,
што, калі я замест "і" іх разам? Гэта называецца пабітава і.
Лагічна, што гэта тое ж самае, лагічнае і.
Гэта дае мне 0 і 1 роўны 0. Такім чынам, ілжывай і праўдзівай з'яўляецца ілжывым.
Праўда, і праўда, то праўда.
А вось магія: Сапраўдныя і несапраўдныя зараз ілжывым, таму мы выключаны, што няшмат.
А цяпер астатняя частка гісторыі некалькі просты.
Таму што астатняя частка маскі 1s, гэта не мае значэння тое, што лічбы ў белым.
Калі вы "і" нешта з праўдай, вы не збіраецеся, каб змяніць яго значэнне.
Калі гэта праўда, то застанецца верным. Калі б гэта была ілжывая, яна будзе заставацца ілжывымі.
>> Але чараўніцтва адбываецца, калі вы прымаеце тое, што было сапраўдным
і вы тады "і" яго з ілжывай.
Гэта мае эфект адключэння, што няшмат.
Такім чынам, трохі загадкава там.
Давайце рэальна глядзець на код, які можа на самай справе выглядаюць яшчэ больш загадкавым,
Але давайце паглядзім вось на ToLower.
Калі я гляджу на ToLower, якія ідуць ад сталіцы ў ніжні рэгістр,
Давайце паглядзім, як мы маглі б рэалізаваць гэтую праграму.
Вось асноўныя, і ён не робіць ніякіх аргументаў каманднага радка.
Я аб'яўленні характару з для лісты, якія карыстальнік збіраецца ўвесці цалі
Затым я выкарыстоўваю знаёмыя рабіць падчас цыклу проста пераканайцеся, што карыстач вызначана дае мне капітал
або B або C. .. Z, таму яны даюць мне нешта паміж А і Z.
А зараз тое, што я тут раблю?
Я "або" ИНГ гэта з 0x20, але гэта на самай справе так жа, як -
і мы вернемся да гэтага ў дадзены момант - 32.
Такім чынам, яшчэ раз, 32 гэтая карціна біты тут. Навошта нам гэта ведаць?
Проста успомніце тыдзень 0.
Гэтае месца 1s, 2s месца, 4s, 8s, 16s, 32s месца.
Такім чынам, гэта жоўты нумар, здараецца, 32.
Затым я магу ўзяць з сабой ліст, як сімвал тут, пабітавае "або" яна літаральна з лікам 32,
і што я вярнуся? Малыя версія, што знак.
Хвіліну назад, хоць, я выказаў гэта ў іншы запісу базы.
Што гэта ўяўляеце? >> [Студэнт] шаснаццатковай.
[Малая] Гэта адбываецца ўяўляюць шаснаццаткавыя.
Мы не казалі аб шаснаццатковым ўсё, што многае,
але на самой справе гэта зручна ў выпадках, падобных на гэты.
>> Нават калі гэта выглядае больш складанай і, хоць яна выглядае як 20, а не 32,
Аказваецца, што шаснаццаткавыя на самай справе супер зручныя абазначэння
таму што ў шаснаццатковай кожнай лічбы пасля 0x - і гэта нічога не значыць;
гэта проста чалавечае пагадненне, што кажа тут ідзе шаснаццатковы лік -
кожная з гэтых лічбаў, 2, а затым 0, самі па сабе могуць быць прадстаўлены
роўна з 4 біта.
Так што, калі мы зробім гэта, дазвольце мне адкрыць тэкставы рэдактар ​​тут - дзіўнае аўтазапаўнення -
калі мы трохі тэкставы рэдактар ​​тут, лік 0x20 азначае, што тут 4 біт, вось яшчэ 4 біта.
Давайце зробім правах 4 біта ў першую чаргу.
0, калі прадстаўленыя 4 біта гэта што? Супер проста. Проста ўсе 0s.
Так што 4 біта, як 0s.
Як вы ўяўляеце 2? Гэта быў час, так як мы зрабілі гэта, але гэта 0100.
Так што гэта 1s месца, гэта 2s месца, а потым гэта не мае значэння тое, што іншыя месцы.
Іншымі словамі, у шаснаццатковым вы маглі б сказаць 0x20,
Але калі вы потым думаць пра тое, што 2 і як яно прадстаўлена ў двайковай,
што такое 0 і як гэта прадстаўлена ў двайковай,
Адказы на гэтыя пытанні гэта і гэта, адпаведна.
Так адбываецца, 0x20, каб прадставіць гэтую карціну з 8 біт,
які як раз і з'яўляецца маскай, якую мы хацелі.
Так што гэта на дадзены момант проста інтэлектуальнае практыкаванне,
але на самой справе ў кодзе гэта звычайна часцей пісаць канстанты, як гэта
у шаснаццатковым, таму што тады праграміст можа адносна лёгка,
нават калі гэта патрабуе паперу і аловак, высветліць, што гэта карціна біт
таму што вы не можаце проста выказваць 0 і 1 звычайна ў кодзе.
Вы не можаце пайсці 00010 і гэтак далей.
>> Вы павінны абраць дзесятковай або шаснаццатковай або васьмярковым або іншыя абазначэння.
Большасць людзей схільныя выбіраць шаснаццатковым проста так, каб кожная лічба ўяўляе 4 біта
і вы можаце зрабіць гэта хутка матэматыцы.
І я махаю рукой у ToUpper, што амаль тое ж самае, ён выглядае амаль ідэнтычна.
ToUpper адбываецца выкарыстоўваць не або аператар, а гэты хлопец і DF.
Што DF ўяўляюць? DF? Любы? >> [Студэнт] 255.
255? Ці не 255. Гэта было б і далей.
Мы пакінем гэта адно, маленькае практыкаванне.
Але калі вы ідзяце ад 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, а затым тое, што прыходзіць пасля 9?
Мы быццам з дзесятковых лічбаў, але ў шаснаццатковым, што будзе пасля 9?
[Студэнт]. >> Так A, B, C, D.
Вы можаце высветліць адтуль тое, што карціна біт D на самай справе ўяўляе.
І калі мы робім матэматыку, мы ўбачым, што маскі ў канчатковым выніку атрымаць назад ідэнтычна гэтага.
Гэта F, усё 1s, і гэта г. Так DF заяўляе, што маскі. Добра.
І, нарэшце, не рабіць рэчаў гук супер, супер тэхнічных,
але выкажам здагадку, што мы хацелі, каб напісаць праграму, якая гэта робіць.
Дазвольце мне пайсці далей і зрабіць бінарны, які ўяўляе сабой праграму ў файле з імем binary.c.
А цяпер дазвольце мне запусціць бінарны і даць мне неадмоўнае цэлае лік.
Давайце пачнем проста і тып 0.
Гэта цяпер гэта праграма, якая выводзіць цэлы лік у падвоеным уяўленні.
Так што, калі я гуляю ў гэтую гульню зноў і ўвесці толькі 1, я павінен атрымаць 32-разраднае ўяўленне 1.
Калі я зраблю гэта зноў 2, я павінен атрымаць гэта.
Калі я раблю 7, я павінен атрымаць некалькі 1s ў канцы і гэтак далей.
Аказваецца, я кажу пра гэта, таму што з аперацыі пабітава
вы рэальна можаце зрабіць адну рэч, як добра.
Вы можаце стварыць гэтыя маскі дынамічна.
Зірніце на гэты апошні прыклад з удзелам бітавых аперацый.
Вось першая частка кода, запытвае ў карыстальніка лік,
і ён настойвае на тым, што вы даяце мне неадмоўнае цэлае лік.
Так што гэта свайго роду старое школы.
Але вось тое, што быццам цікавы.
>> Як я магу ісці аб друку ліку ў двайковым?
Я ўпершыню ітэрацыі ад чаго да чаго?
Які памер Int звычайна, па меншай меры ў прыбор? >> [Студэнт] 4.
Гэта 4. Такім чынам, 4 * 8 32 - 1, 31.
Так што, калі я пачынаю лічыць ад 31, які ўяўляе, аказваецца,
толькі канцэптуальна, 31-разрадны або вышэйшага парадку біт, што гэты хлопец тут,
у той час як гэта будзе біт 0.
Так што гэта біт 01 біт ... 31.
Так што гэты код робіць?
Звярніце ўвагу, гэта цыкл, нават калі ён выглядае загадкавым, проста перабор з 31 да 0. Вось і ўсё.
Такім чынам, самая цікавая частка зараз павінна быць у гэтых 5 радкоў тут.
Звярніце ўвагу, што ў гэтай лініі я аб'яўленні зменнай маскі
ў адпаведнасць з нашай гісторыяй гэтых жоўтых нумароў.
А тое, што гэта робіць?
Гэта яшчэ адзін аператар пабітава мы не бачылі раней, хутчэй за ўсё.
Гэта аператар левага зруху.
Гэты аператар робіць гэта.
Вось нумар 1, і калі вы робіце я пакінуў зрух, зрух налева,
Што вы думаеце, што мае эфект робіць, каб, што асобныя 1?
Літаральна зрушэння яго.
Такім чынам, калі лік 1 з'яўляецца тое, што ў вас на левым, і вы пачынаеце з ініцыялізацыі я 31,
Што гэта будзе рабіць? Ён збіраецца ўзяць гэты нумар 1 і перакласці яе 31 месцаў тут.
І таму, што тут няма іншых лічбаў за ёй,
тыя, па змаўчанні будзе заменены 0s.
Такім чынам, вы пачынаеце з нумарам 1, які, вядома, выглядае так -
і дазвольце мне зрабіць гэта тут, у цэнтры.
І тое, як вы пераносіце рэчы злева, гэты хлопец па сутнасці ідзе гэтым шляхам.
Але як толькі вы гэта зробіце, 0 атрымлівае запоўненыя
Калі перавесці яго ў другі раз, ён ідзе гэтым шляхам і іншае 0 атрымлівае запоўненыя
>> Вы перакласці яе зноў, а затым яшчэ 0 атрымлівае запоўненыя
Так што калі вы гэта зробіце з 1 << I 31 месцаў, у выніку вы атрымліваеце маску
, Што складае 32 сімвалаў, левы адным з якіх з'яўляецца 1,
Усё астатняе з якіх 0.
А то атрымліваецца, як у бок, пераходзячы лік злева, як гэта
Таксама выпадкова, а часам і зручна,
мае эфект робіць тое, што на гэты нумар? >> [Студэнт] Падваенне яго.
Падваенне гэта, таму што ў кожным з слупкоў - 1s месца, 2s месца, 4s месца,
8s месца, 16s месцы - яны ўсё падваення, як вы ідзяце налева.
Ці, дакладней, калі вы пераносіце 1s вы будзеце ў канчатковым выніку падвоіць кошт нумары.
Вы можаце ў канчатковым выніку робіць цікавае пераўтварэння лічбаў
зрушваючы ўсё больш падобным чынам па ступенях 2.
Так як жа гэта працуе?
Гэта і дае мне маску, якая ўсё 0s за выключэннем 1 у дакладнасці месцы я хачу,
а потым гэта выраз, якое скралі toupper.c,
проста кажа, узяць лік п, што карыстач увёў у,
»І« што з гэтай маскай, і што вы збіраецеся атрымаць?
Вы збіраецеся атрымаць 1, калі ёсць 1 у масках, што месца,
ці вы збіраецеся атрымаць 0, калі гэта не так.
І так усё гэта робіць праграма эфектыўна гэта мае пятлю,
і гэта стварае маску з 1 тут, то 1 тут, то 1 тут,
і ён выкарыстоўвае гэта пабітавае І трук, каб сказаць, значыць 1 біт на ўваходзе карыстальнікаў тут?
>> Значыць 1 біт на ўваходзе карыстальнікаў тут? І калі гэта так, літаральна друкаваць 1, інакш друк 0.
Мы робім гэта з цэлымі толькі таму, што менавіта таму мы робім 32 біт замест 8,
але тое, што мы ўвялі, то гэта пабітавае І гэта пабітавае АБО,
і гэты аператар левага зруху, які часта не вельмі карысна,
але аказваецца, што яны могуць быць.
На самай справе, калі б вы былі ўяўляць сабой нешта накшталт масіў лагічных
проста ўяўляюць сапраўднае або ілжывае, выкажам здагадку, вы хацелі, каб адсочваць ці не
пакой, поўную 300 студэнтаў прысутнічае,
Вы можаце абвясціць масіў памерам 300 тыпу BOOL, так што вы атрымаеце 300 Bools,
і вы можаце наладзіць кожны праўдзіва, калі хтосьці тут і хлусня ў адваротным выпадку.
Чаму гэта прадстаўленне ў тым, што структура дадзеных неэфектыўная?
Што дрэннага аб дызайне, што структура дадзеных, масіў з 300 Bools?
Што такое лагічны, на самай справе, пад капотам?
Гэта, таксама, з'яўляецца тое, што могуць быць не знаёмыя.
Аказваецца, няма BOOL.
Памятаеце, мы як бы стварылі, што з cs50.h файл,
якая сама па сабе ўключае ў сябе стандартныя BOOL.
З выглядам нямы, хоць, калі справа даходзіць да BOOL.
Ён выкарыстоўвае 8 біт для прадстаўлення кожны лагічны, які цалкам марнатраўнага
таму што відавочна, колькі біт трэба, каб прадстаўляць лагічнае? Проста 1.
Вось і атрымліваецца, што калі зараз у вас ёсць магчымасць з аператарамі пабітава
маніпуляваць асобнымі бітамі нават у знак, нават у адзін байт,
Аказваецца можна паменшыць аб'ём памяці, неабходны для прадстаўлення глупства
як, што наведвальнасць стылі структуру дадзеных у 8 разоў.
Замест таго каб выкарыстоўваць 8 бітаў ўяўляюць сапраўднае або ілжывае, вы можаце літаральна выкарыстоўваць адзін
з дапамогай аднаго байта на кожныя восем вучняў у класе
і пераключэння ад 0 да 1 асобныя біты з дапамогай гэтых відаў нізкім узроўнем трукаў.
Гэта сапраўды пакласці канец энергіі. Ці ёсць пытанні аб бітаў аперацыі?
>> Так. >> [Студэнт] Ці ёсць выключныя або аператар?
Так. Існуе выключнае або аператар, які выглядае так, ^, моркву знак,
, Што азначае толькі першае або другое можа быць 1 на выхадзе будзе 1.
Існуе таксама няма, ~, якая дазволіць вам, каб інвертаваць 0 на 1 або наадварот, а таксама.
І ёсць таксама аператар зруху направа, >>, якая з'яўляецца супрацьлегласцю той, якую мы бачылі.
Добра. Давайце рэчы цяпер на больш высокі ўзровень.
Мы пачалі казаць пра тэкст, а затым сціснуць яго
і ўяўляе тэкст з меншай колькасцю біт;
Мы крыху пагаварылі пра тое, як мы можам зараз пачаць маніпуляцыі рэчамі на ўзроўні пабітава.
Давайце цяпер маштаб да 10.000 футаў, каб ўяўленне
больш складаныя рэчы, як графіка.
Тут мы маем сцягам Германіі, тут мы маем адно з Францыі.
Яны могуць быць прадстаўлены ў фарматах, вы ведаеце - GIF-файлаў, напрыклад.
Калі вы калі-небудзь бачылі малюнак у Інтэрнэце, якія заканчваюцца на. GIF,
Гэта графічны фармат абмену.
Гэтыя два сцягі тут накшталт паддаюцца сціску
за тое, што, магчыма, відавочных прычын? >> [Неразборліва адказ студэнта]
Там вельмі шмат паўтораў, дакладна?
Для таго, каб адправіць сцягам Германіі, думаць пра гэта як малюнак на экране
назад у дні Scratch.
Вы маглі б успомніць, што ёсць асобныя кропкі, якія складаюць малюнак.
>> Там цэлы шэраг чорных кропак і яшчэ цэлага шэрагу чорных кропак.
Там куча радкоў чорнымі кропкамі, якія мы маглі бачыць, калі мы сапраўды павялічана,
многае падабаецца, калі мы павялічана на твары Роба ў Photoshop.
Як толькі мы атрымалі ўсё глыбей і глыбей і глыбей у малюнку,
Вы пачалі бачыць пікселізацыі, усе квадраты, якія складаюцца вочы ў гэтым выпадку.
Тое ж тут справа. Калі мы павялічана зусім крыху, вы б ўбачылі асобных кропак.
Ну, гэта выгляд адходаў біт.
Калі траціну сцяг чорнага і трэцяга сцяга жоўты і так далей,
чаму мы не можам нейкім чынам сціснуць гэты сьцяг?
І нават французскі сцяг можа быць сціснута, хоць карціна крыху іншая.
Аказваецца фармаце GIF файлаў фармат сціску без страт,
якая азначае, што вы можаце рабіць здымкі, як нямецкі сцяг тут,
Вы можаце выкінуць шматлікія з яго бітаў без шкоды для якасці.
Гэта ў адрозненне ад нешта накшталт JPEG,
, З якой большасць з нас, верагодна, больш знаёмыя.
Facebook фота і Flickr фатаграфій і да т.п.
Амаль заўсёды захоўваюцца як выявы ў фармаце JPEG, калі яны загружаныя,
але ў фармаце JPEG з'яўляецца стратамі - стратамі - фармат якога вы выкінулі біты
але вы таксама выкідаюць якасці.
І таму, калі вы сціскаць фатаграфіі з Photoshop або загрузіць іх на Facebook
або ўзяць іх на сапраўды брудную тэлефон,
Вы ведаеце, што карціна пачынае атрымліваць вельмі плямістым і няроўнай,
і гэта таму, што ён сціскаецца з дапамогай кампутара ці тэлефона
літаральна кідалі інфармацыя ад гатэля.
Але GIF дзіўна ў тым, што ён можа выкарыстаць менш біт, чым ён можа па змаўчанні
без страты інфармацыі.
>> І яна па сутнасці робіць гэта наступным чынам.
Замест таго, каб захоўваць у файле, як BMP бы RGB патройны для чорнага, чорнага, чорнага, чорнага,
чорны, чорны, чорны, чорны, чорны, чорны, чорны, чорны і гэтак далей,
Хутчэй за ўсё, фармат GIF збіраецца сказаць, "Black"
, А затым "Паўтарыце гэта 100 раз", ці нешта накшталт гэтага.
"Чорны паўтарыць гэта 100 раз, чорны, паўтарыць гэта 100 раз ..."
"Жоўты, паўтарыць гэта 100 раз."
І так ён памятае, па сутнасці, левае пікселяў
і затым кадуе так ці інакш паняцце паўтараў, што піксель зноў і зноў.
Так GIF-файлаў можна сціснуць сябе без страты інфармацыі.
Але калі ў вас здагадацца, калі гэта алгарытм, які ГИФС выкарыстання,
які з гэтых сцягоў, нават калі яны выглядаюць аднолькавымі па памеры,
будзе менш, калі захоўваецца на дыску ў фармаце GIF? >> [Студэнт] Нямеччына.
Нямеччына будзе менш? Чаму?
[Студэнт] Паколькі Вы паўтараеце гэта шмат, шмат разоў гарызантальна
а потым паўтарыць у іншы раз. >> Менавіта так.
Таму што людзі, якія вынайшлі GIF толькі збольшага адвольна вырашылі
, Што паўтор будуць выкарыстаны гарызантальна, а не збоку.
Там вельмі шмат больш паўтораў бакоў тут у нямецкі сцяг, чым у французскі сцяг.
Такім чынам, калі мы на самай справе адкрыць тэчку на цвёрдым дыску, які мае гэтыя GIF,
Вы можаце фактычна бачыць, што нямецкі сцяг тут 2 кілабайта і французскай складае 4 кілабайта.
Гэта здараецца супадзенне, што адзін у два разы больш іншага,
але гэта на самай справе так, што французскі сцяг значна больш.
>> Нават калі мы гаворым тут пра графіку, тыя ж ідэі можна прымяніць да
Не такія рэчы, як сцягі, але вобразы, якія з'яўляюцца крыху больш складанымі.
Калі вы возьмеце карціну яблык, безумоўна, ёсць шмат дублявання там,
, Каб мы маглі неяк памятаць, што па змаўчанні фон сіне
а не, як правая карціна мяркуе,
павінны памятаць, колер кожнага пікселя ў гэтай карціне.
Такім чынам, мы можам кінуць біт далёка значыць без страты інфармацыі.
Яблык па-ранейшаму выглядае сапраўды гэтак жа.
У гэтым прыкладзе, вы можаце ўбачыць, што адбываецца ў фільме.
Яны ўяўляюць старой школы кінахронікі якога ў верхнім малюнку ёсць
ў вас ёсць RV праязджаў міма дома і дрэва.
А што ван праязджае міма злева направа, што, відавочна, не змяняецца?
Дом нікуды не дзенецца, і дрэва нікуды не дзенецца.
Адзінае, што рухаецца з'яўляецца ван ў гэтым выпадку.
Так як фон без зменаў мяркуе, што вы можаце зрабіць у кіно
Аналагічна проста выкінуць інфармацыю, якая не змяняецца паміж кадрамі.
Гэта, як правіла, вядомыя як сціск межкадрового
згодна з якім, калі гэты кадр выглядае амаль ідэнтычна гэтаму,
давайце не будзем турбавацца захавання на дыску любога з ідэнтычнай інфармацыі
на гэтыя прамежкавыя кадры, давайце выкарыстоўваць толькі ключавыя кадры раз у той час
што на самой справе захоўваць гэтую інфармацыю залішне гэтак жа, як трохі разважнасці праверыць.
>> У адрозненне ад іншы падыход да сціск відэа ў гэтым другім і ніжняй прыклад тут,
, Дзе замест крамы 30 кадраў, чаму б вам не проста захоўваць 15 кадраў у секунду замест?
Замест таго, каб фільм выгляду цячэ прыгожа, выдатна,
гэта можа выглядаць гэта заіканне трохі, трохі старой школы,
але эфект будзе выкарыстоўваць значна менш біт, чым магло б быць неабходным.
Дык дзе ж гэта тады нам застаецца?
Гэта было трохі ў баку ад таго, дзе яшчэ вы можаце пайсці са сціскам.
Больш падрабязную інфармацыю аб тым, што ўзяць клас як CS175 тут.
Вось яшчэ адзін прыклад у відэа.
Калі пчала гэта адзінае, што рухаецца,
Вы сапраўды можаце выкінуць інфармацыі ў гэтых сярэдніх кадрах
таму што кветка і неба, і лісце не мяняецца.
Але давайце цяпер разгледзім адну рэч.
У наступныя 5 хвілін мы пакінем ззаду C вечна ў лекцыі? Так. Не ў psets, аднак.
Апошні аповяд пра С, а затым мы пяройдзем да вельмі сэксуальным матэрыялам
з удзелам HTML і вэб-і у-у-ух. Добра.
Тут мы ідзем. Гэта матывацыя.
Аказваецца, увесь гэты час, калі мы былі напісання праграм мы запускаем Clang.
І Clang, мы гаварылі з першага тыдня ў значнай ступені, бярэ зыходны код
і пераўтворыць яго ў аб'ектны код.
Гэта зойме C і пераўтворыць яго ў 0 і 1.
Я накшталт ляжаў да вас на працягу некалькіх тыдняў, таму што гэта не зусім так проста.
>> Там вельмі шмат больш адбываецца пад капотам, калі вы запускаеце праграму, як Clang.
На самай справе, працэс кампіляцыі праграмы сапраўды можа быць абагульнены,
як вы, магчыма, памятаеце з відэа Адзежа на кампілятары,
у гэтыя 4 этапы: папярэдняя апрацоўка, складанне сябе, зборкі і кампаноўкі.
Але ў нас у класе, і большасць людзей у свеце звычайна сумаваць ўсе гэтыя крокі
як толькі "кампіляцыі".
Але калі мы пачнем з зыходнага кода, як гэта, нагадаем гэта, мабыць, найпростая праграма C
мы напісалі да гэтага часу, нагадаем, што пры кампіляцыі ён заканчваецца ў такім выглядзе.
Але там на самай справе прамежкавы крок, і гэтыя крокі заключаюцца ў наступным.
Па-першае, гэтая рэч на самым версе гэтага, і большасць нашых праграм,
# Уключыць
Што # ўключыць зрабіць для нас?
Гэта ў значнай ступені капіюе і ўстаўляе змесціва stdio.h ў маім файле, так што чаму?
Чаму я клапачуся пра змест stdio.h? Што там цікавасць?
Printf ў дэкларацыі, яго прататып, так што кампілятар то ведае, што я маю на ўвазе
калі я згадваю гэтую функцыю Printf.
Такім чынам, крок 1 у зборы з'яўляецца папярэдняй апрацоўкі, у выніку чаго праграмы, як Clang
ці некаторыя дапаможныя праграмы, якая пастаўляецца з Clang чытае ваш код зверху ўніз,
Злева направа, і ў любы момант ён бачыць знак # варта ключавое слова, як ўключаць,
ён выконвае гэтую аперацыю, капіяванне і ўстаўка ў дадзеным выпадку stdio.h ў ваш файл.
Гэта крок 1.
Тады ў вас ёсць значна больш C файл з-за велізарнага капіяваць, ўставіць вакансіі, проста так атрымалася.
>> Крок 2 Зараз гэта кампіляцыя.
Але, аказваецца кампіляцыя займае зыходны код, які выглядае наступным чынам
і ператварае яго ў нешта, што выглядае так,
што для тых, хто знаёмы называецца? >> [Студэнт] асамблеі. >> Асамблеі мове.
На самай справе гэта нешта, калі вы бераце CS61 вы будзеце апускацца ў больш падрабязна.
Гэта амаль так жа блізка, як вы можаце атрымаць у пісьмовым 0 і 1 сабе
але пісаць рэчы такім чынам, што ўсё яшчэ прымушае па крайняй меры крыху сэнсу.
Гэтыя машынныя інструкцыі, і калі мы пракруціць ўніз да асноўнай функцыяй тут,
заўважыце, што гэты штуршок інструкцыі, перамяшчаць інструкцыі, адняць навучання,
тэлефануйце навучання, і гэтак далей.
Калі вы чуеце, што ваш кампутар Intel Inside,
у вас працэсар Intel у Mac ці PC, што гэта значыць?
Працэсар ўбудаваны такімі кампаніямі, як Intel разуменне пэўных інструкцый.
Яны паняцця не маюць, што такія функцыі, як свопу або асноўны самі па сабе,
але яны ведаюць, што вельмі нізкім узроўні інструкцый, як складанне, адніманне, штурхаць,
перамясціць, патэлефанаваць, і гэтак далей,.
Такім чынам, пры кампіляцыі C код на асэмблеры,
ваша вельмі зручны выгляд код пераўтворыцца ў нешта, што выглядае так,
, Што літаральна рухаецца байта або 4 байта вакол у такіх невялікіх падраздзяленняў і з CPU.
Але, нарэшце, калі Clang гатовы прыняць гэтае паданне сваёй праграмы
у 0 і 1, то крок называецца зборка адбываецца,
і гэта зноў усё адбываецца ў імгненне вока пры запуску Clang.
Мы пачынаем тут, яна выводзіць файл, як гэта, а затым пераўтворыць яго ў гэтыя 0 і 1.
І калі вы хочаце, каб вярнуцца ў нейкі момант і на самай справе ўбачыць гэта ў дзеянні,
калі я іду ў hello1.c--гэта адна з самых першых праграм, якія мы паглядзелі на -
Звычайна мы будзем кампіляваць гэта з Clang hello1.c і гэта дасць нам a.out.
Калі ў адрозненне ад вас, а даць яму-S сцяг, што вы атрымаеце гэта hello1.s
і вы на самой справе бачыце на асэмблеры.
>> Я раблю гэта для вельмі кароткай праграмы, але калі вы вернецеся на Scramble
ці аднавіць або любую праграму, вы напісалі і проста з цікаўнасці
хачу паглядзець, што гэта на самай справе падобна, што на самой справе кормяць у CPU,
Вы можаце выкарыстоўваць гэта-S сцяг з Clang.
Але потым, нарэшце, ёсць яшчэ адзін глюк.
Тут 0 і 1, якія прадстаўляюць маёй рэалізацыі Добры дзень, свет.
Але я выкарыстаў чужую функцыю ў маёй праграме.
Так што, хоць працэс быў я бяру hello.c,
ён кампілюецца ў код зборкі, а затым яна будзе збірацца ў 0 і 1,
толькі 0 і 1, якія выводзяцца на дадзены момант
тыя, што ў выніку майго кода.
Але чалавек, які напісаў Printf, яны склалі свой код 20 гадоў таму
і яна цяпер усталяваны дзесьці на прыбор,
так што мы нейкім чынам павінны аб'яднаць свае 0 і 1 з маімі 0 і 1,
і гэта падводзіць нас да 4-й і заключны этап кампіляцыі, вядомыя як спасылкі.
Такім чынам, на левай баку у нас ёсць дакладна такая ж карціна, як раней:
hello.c становіцца зборкі кода становіцца 0 і 1.
Але памятайце, што я выкарыстаў стандартныя бібліятэкі ўводу / высновы ў мой код,
і гэта азначае, што дзесьці на кампутары ёсць файл пад назвай stdio.c
або па крайняй меры скампіляваныя версіі іх таму, што хтосьці некалькі гадоў назад
складзены stdio.c ў ассемблерный код, а затым цэлы букет з 0 і 1.
Гэта тое, што вядома як статычная або дынамічная бібліятэка.
Гэта нейкі файл сядзіць дзесьці ў прыбор.
>> Але, нарэшце, я павінен узяць маю 0 і 1, і што чалавек 0 і 1
і нейкім чынам звязаць іх разам, літаральна аб'яднаць гэтыя 0 і 1
ў адзіны файл з імем a.out або hello1 або тое, што я назваў сваю праграму
так што канчатковы вынік мае ўсе 1 і 0, якія павінны скласці сваю праграму.
Так што ўвесь гэты час у гэтым семестры, калі вы выкарыстоўваеце Clang
і яшчэ нядаўна запушчаных зрабіць для таго, каб запусціць Clang,
Усе гэтыя крокі былі адбывалася роду імгненна, а цалкам свядома.
І таму, калі вы працягваць у інфарматыцы, а менавіта CS61,
гэта пласт, які вы будзеце працягваць адхіліце прэч там
казаць аб эфектыўнасці, бяспекі, наступствы, і як гэтыя дэталі ніжняга ўзроўню.
Але разам з тым, мы збіраліся сыходзіць C ззаду.
Давайце ісці наперад і прымаць наш 5-хвілінны перапынак зараз,
і калі мы вяртаемся: у інтэрнэце.
Добра. Мы вярнуліся.
Цяпер мы пачынаем наш погляд не толькі на HTML, таму што, як вы ўбачыце,
HTML сябе на самай справе даволі простая
але на самой справе на вэб-праграмавання ў цэлым, сеткі ў цэлым,
і як усе гэтыя тэхналогіі аб'ядноўваюцца
каб дазволіць нам ствараць больш складаныя праграмы па-над Інтэрнэту
чым да гэтага часу мы змаглі ў гэтых чорна-белых вокнаў.
Сапраўды, на дадзены момант у семестр, хоць мы будзем марнаваць менш часу адносна
на PHP, HTML, CSS, JavaScript, SQL і больш,
большасць студэнтаў робяць у канчатковым выніку робіць канчатковыя праекты, якія вэб-
таму што, як вы ўбачыце, фон зараз у вас ёсць у C
вельмі дастасавальныя да гэтых моў высокага ўзроўню.
>> І, як вы пачынаеце думаць аб сваім канчатковым праекце,
які, гэтак жа, як пытанне, пастаўлены 0, дзе вы былі заахвочаны
рабіць самому нічога цікавага для вас у Scratch,
Канчатковы праект гэта ваша магчымасць прыняць вашы новыя веды і кемлівасць з C
або PHP або JavaScript, або як з-за спін
і стварыць свой уласны кавалак праграмнага забеспячэння для свету, каб бачыць.
І насеньне вам ідэі, ведайце, што вы можаце ўзначаліць тут, projects.cs50.net.
Кожны год мы патрабаваць ідэй ад супрацоўнікаў і выкладчыкаў і студэнцкіх груп на тэрыторыі кампуса
проста прадставіць свае ідэі для цікавых рэчаў, якія могуць быць вырашаны з дапамогай кампутараў,
выкарыстанне вэб-сайтаў, з дапамогай праграмнага забеспячэння.
Так што, калі вы змагаецеся, каб прыдумаць ідэю самастойна,
усімі сродкамі пракруткі ідэі ёсць з гэтага года і апошні.
Гэта зусім нармальна для вырашэння праекта, якія былі вырашаны раней.
Мы бачылі шмат прыкладанняў для бачачы стан пральні на тэрыторыі кампуса,
шматлікія прыкладанні для навігацыі па меню сталовай,
шматлікія прыкладанні для навігацыі па каталогу курсаў і да таго падобнае.
І сапраўды, у будучай лекцыі і семінары ў будучыні,
Мы пазнаёмім вас з некаторымі агульнадаступных API, як камерцыйна даступныя
а таксама тут можна атрымаць CS50 на тэрыторыі кампуса, так што ў вас ёсць доступ да дадзеных
і можа рабіць цікавыя рэчы з ім.
Так што больш на канчатковае праекты ў некалькі дзён, калі мы выпускаем спецыфікацыі,
але цяпер, ведаю, што вы можаце працаваць у адзіночку ці з адным або двума сябрамі
на большасці праектаў, якія ўяўляюць цікавасць для вас.
Інтэрнэт.
Вы ідзяце наперад і выцягніце ваш ноўтбук, вы ідзяце ў facebook.com ўпершыню,
тое, што не ўвайшлі ў апошні час, і націсніце Увод. Што менавіта адбываецца?
>> Калі вы націснеце Enter на вашым кампутары, цэлую кучу крокаў
пачаць роду чароўным адбываецца.
Такім чынам, вы тут, на левым, вэб-сервер, як Facebook тут справа,
і неяк вы выкарыстоўваеце гэтую мову называецца HTTP, пратакол перадачы гіпертэксту.
HTTP не з'яўляецца мовай праграмавання. Гэта хутчэй пратакол.
Ён уяўляе сабой набор канвенцый, вэб-браўзэры і вэб-серверы выкарыстоўваюць, калі сазлучаныя.
А што гэта азначае наступнае.
Многае, як у рэальным свеце, у нас ёсць гэтыя канвенцыі
дзе, калі вы сустрэцца з некаторымі чалавека ў першы раз, калі вы не пярэчыце, пасмейваючыся мяне тут,
Я мог бы падысці да вас, кажаце: "Прывітанне, мяне завуць Дэвід». >> Прывітанне, Дэвід. Мяне клічуць Сэмі.
"Прывітанне, Дэвід. Мяне клічуць Сэмі".
Так што цяпер мы толькі што займаліся такога роду дурныя чалавечыя пратакола
дзе я ініцыяваў пратакол, Сэмі адказаў,
Мы паціснуў руку, і здзелка будзе завершана.
HTTP вельмі падобныя па духу.
Калі вашы запыты вэб-браўзэра www.facebook.com,
што ваш браўзэр на самай справе робіць пашырае сваю руку, так бы мовіць,
да сервера і пасылае яму паведамленне.
І гэта паведамленне, як правіла, нешта накшталт Get - што вы хочаце атрымаць? -
зразумейце мяне галоўная старонка, якая звычайна пазначаецца касой рысай ў канцы URL-адрасы.
І толькі так вы ведаеце на якой мове я кажу, я маю на браўзэры збіраюся расказаць вам,
што я кажу HTTP версіі 1.1,
А таксама для добрай мерай, я збіраюся расказаць вам, што гаспадар, што я хачу на галоўную старонку
з'яўляецца facebook.com.
Як правіла, вэб-браўзэр, непрыкметна для вас, чалавека,
пасылае гэта паведамленне ў Інтэрнэце, калі вы проста ўводзіце www.facebook.com,
>> Пазначце, у Вашым браўзэры.
І што Facebook адкажа?
Ён рэагуе з некаторым падобны выгляд загадкавыя дэталі, але і многае іншае.
Дазвольце мне ісці наперад на галоўную старонку Facebook тут.
Гэта экран, што большасць з нас, верагодна, ніколі не ўбачыць, калі вы заставацца ў сістэме ўвесь час,
але гэта сапраўды іх хатнюю старонку.
Калі мы зробім гэта ў Chrome, заўважылі, што вы можаце падцягнуць гэтыя маленькія кантэкстныя меню.
Выкарыстанне Chrome, ці то на Mac OS, Windows, Linux і да т.п.,
Калі вы кантралюеце мышы або пстрыкніце левай кнопкай мышы, як правіла, можна падцягнуць меню, якое выглядае так,
дзе чакаюць некалькі варыянтаў, адзін з якіх з'яўляецца прадстаўленне крыніцы старонку.
Вы таксама можаце звычайна атрымліваюць на гэтыя рэчы, перайшоўшы ў меню Выгляд і калупацца.
Напрыклад, тут, пад View, распрацоўніка адно і тое ж.
Я збіраюся ісці наперад і глядзець на View Source старонку.
Тое, што вы бачыце, HTML, што Марк напісаў для прадстаўлення facebook.com.
Гэта поўны бардак, але мы ўбачым, што гэта робіць трохі больш сэнсу ў хуткім часе.
Але ёсць некаторыя мадэлі тут. Дазвольце мне пракруціць ўніз, каб рэчы, як гэта.
Гэта цяжка для чалавека, каб чытаць, але заўважыў, што ёсць гэтая мадэль вуглавыя дужкі
з ключавымі словамі, як варыянт, ключавыя словы, як каштоўнасць, некаторыя двукоссях.
Гэта дзе, калі вы зарэгістраваліся ў першы раз, удакладніў, што ваша нараджэнне годзе.
Гэта выпадальнае меню нараджэння гады неяк закадзіраваны тут
У гэтай мове называецца HTML, мова гіпертэкставай разметкі.
Іншымі словамі, калі ваш браўзэр запытвае вэб-старонку,
яна кажа гэтая канвенцыя называецца HTTP.
Але што ж facebook.com адказаць на гэты запыт?
>> Ён рэагуе з некаторымі з гэтых загадкавых паведамленняў, як мы ўбачым праз імгненне.
Але вялікую частку свайго адказу ў выглядзе HTML, мова гіпертэкставай разметкі.
Гэта фактычна мова, на якім вэб-старонка напісана.
І тое, што вэб-браўзэр сапраўды гэта значыць, пры атрыманні нешта накшталт гэтага,
чытае яе зверху ўніз, злева направа, і ў любы момант ён бачыць адну з гэтых кутніх дужках
варта ключавое слова, як варыянт, ён паказвае, што мова разметкі адпаведным чынам.
У гэтым выпадку ён будзе адлюстроўваць выпадальнае меню гадоў.
Але зноў жа, гэта поўны бардак на што паглядзець.
Гэта не таму, што распрацоўшчыкі Facebook выяўляюцца 0, 5 для стылю, напрыклад.
Гэта адбываецца таму, што вялікая частка кода, што яны пішуць, на самай справе, напісана прыгожа,
добра прокомментірован, прыгожа водступам, і да таго падобнае,
але, вядома, машын, кампутараў, браўзэраў сапраўды не напляваць
Ці ваш код і стылі.
І на самай справе, гэта цалкам марнатраўна ударыў клавішу табуляцыі усе тыя часы
і паставіць каментарыяў на працягу ўсяго вашага кода і выбраць сапраўды апісальныя імёны зменных
таму што, калі браўзэр не хвалюе, усё, што вы робіце ў канцы працоўнага дня марнуе байт.
>> Вось і атрымліваецца, што большасць вэб-сайтаў зрабіць, гэта, нават калі зыходны код для facebook.com,
для cs50.net і ўсе гэтыя іншыя сайты ў Інтэрнэце
, Як правіла, добра напісана і добра прокомментірован і прыемна водступ і да т.п.,
Звычайна, перш чым пакласці сайт у Інтэрнэт, код паменшаная,
якой HTML і CSS - нешта яшчэ, што мы хутка ўбачым -
Код JavaScript мы хутка ўбачым сціскаецца,
якой доўгіх імёнаў зменных стаць X, У і Z,
і ўсё гэта прабел, які робіць усё выглядае так чытаецца ўсё гэта выкідваць,
таму што, калі вы думаеце пра гэта так, Facebook атрымлівае млрд зваротаў да старонцы ў дзень -
нешта вар'ят, як што - так што, калі праграміст проста быць анальны
націсніце прабел адно дадатковы час, проста для водступу некаторыя радкі кода усё настолькі больш?
Што маецца на ўвазе калі Facebook захоўваецца, што прабелы
Ва ўсіх байтаў яны адпраўляюць назад у людзей у Інтэрнэце?
Націск клавішы прабелу раз дае вам дадатковы байт у файле.
І калі мільярда чалавек затым перайсці да загрузцы хатняй старонкі ў той дзень,
наколькі больш дадзеных вы перадаюцца праз Інтэрнэт?
Gigabyte без паважлівай прычыны.
І эксплуатацыю, для многіх вэб-сайтах, гэта не такая маштабуецца пытанне,
але для Facebook, для Google, для некаторых з самых папулярных вэб-сайтаў
ёсць вялікі стымул фінансава каб зрабіць ваш код выглядае як беспарадак
так што вы будзеце выкарыстоўваць як некалькі байт, як магчыма ў дадатак да затым сціснуць яго
выкарыстоўваючы нешта накшталт маланкі, алгарытм, званы GZIP,
, Што браўзэр аўтаматычна. Але гэта жахліва.
Мы ніколі не даведаемся нічога пра сайтах іншых людзей, і, як праектаваць вэб-старонак
калі мы павінны глядзець на гэта так.
>> Так што, на шчасце, браўзэры, такія як Chrome і IE і Firefox у гэтыя дні
як правіла, маюць убудаваныя прылады распрацоўніка.
На самай справе, калі я іду сюды, каб агляд элементаў або калі я іду, каб паглядзець, распрацоўшчыкаў,
і перайдзіце да Прылады распрацоўкі відавочна,
гэта акно ў ніжняй частцы экрана цяпер мая ўсплывае.
Гэта трохі страшным спачатку, таму што там шмат незнаёмых ўкладкі тут,
але калі я націскаю на элементы на ўсім шляху ў левым ніжнім,
Chrome, відавочна, вельмі разумны. Ён ведае, як інтэрпрэтаваць ўвесь гэты код.
І тое, што Chrome робіць гэта чысціць ўсе HTML Facebook.
Нават калі там не прабелы там, не водступу там,
Цяпер заўважаю, што я магу пачаць навігацыю гэтай вэб-старонцы, тым больш іерархічна.
Атрымліваецца, што кожная вэб-старонка напісаная на мове завецца HTML5 павінны пачаць з гэтага,
гэтая дэкларацыя DOCTYPE, так сказаць: <! DOCTYPE HTML>
Гэта свайго роду святлом і шэры там, але гэта самая першая радок кода ў гэтым файле,
і што менавіта кажа браўзэру, "Гэй, вось некаторыя HTML5. вось вэб-старонку".
Першая адкрытая дужках акрамя таго, здараецца, гэтая рэч, якая адкрывае дужкі HTML тэгаў,
, А затым, калі я нырнуць у глыбокія - гэтыя стрэлкі цалкам бессэнсоўна;
яны толькі дзеля прэзентацыі, яны не з'яўляюцца на самай справе ў файле -
заўважыце, што ўнутры HTML тэга Facebook, усё, што пачынаецца з адкрывае дужкі
а затым слова называецца тэгам.
Такім чынам, усярэдзіне тэга HTML-відаць, з'яўляецца тэг галавы і цела тэга.
Усярэдзіне галавы тэгі зараз увесь беспарадак на Facebook
таму што ў іх шмат метададзеныя і іншыя рэчы для маркетынгу і рэкламы.
>> Але калі мы пракруціць ўніз, уніз, уніз, уніз, давайце паглядзім, дзе ён знаходзіцца. Вось ён.
Гэта адна крайняй меры крыху знаёмыя.
Назва галоўнай старонкі Facebook, калі вы паглядзіце на ўкладцы ў радку загалоўка,
з'яўляецца Сардэчна запрашаем на Facebook - Заходзьце, Зарэгістравацца або даведацца больш.
Вось тое, што вы бачыце ў загалоўку Chrome,
і вось як гэта прадстаўлена ў кодзе.
Калі мы будзем ігнараваць усе астатняе ў галаве, большая частка кішкі вэб-старонка знаходзіцца ў целе,
і атрымліваецца, што код Facebook, будзе выглядаць больш складанымі
чым большасць рэчаў, якія мы напішам першапачаткова толькі таму, што яна была пабудавана на працягу многіх гадоў,
але ёсць шмат сцэнарыяў тэгі, JavaScript код,
, Што робіць сайт вельмі інтэрактыўным:
бачачы абнаўлення статусу імгненна выкарыстанні моў, такіх як JavaScript.
Там-то завецца спраў, якая з'яўляецца падраздзяленнем старонку.
Але перш чым мы пяройдзем да гэтага падрабязнасці, давайце паспрабуем, каб паменшыць маштаб
і паглядзім на простую версію Facebook 1.0, так бы мовіць.
Вось Добры дзень, свет вэб-старонак.
Ён мае, што DOCTYPE дэкларацыі на самым версе
які трохі адрозніваецца ад усяго астатняга.
Нічога іншага мы пішам на вэб-старонцы будзе пачынацца з <! выключэннем таго, што лінія ёсць
і, за выключэннем так званых каментары ў HTML.
Але па большай частцы, усё ў вэб-старонка адкрыта кранштэйн, ключавое слова, якая зачыняе дужкі.
>> У гэтым выпадку можна ўбачыць самыя простыя вэб-старонак магчыма.
HTML тэгаў ўтрымлівае галавой тэгі і змяшчае цела тэга,
але зьвярніце ўвагу, што ёсць такое паняцце запуску і прыпынку тэгамі.
Гэта пачатак тэга HTML, гэта зачыняе тэг або зачыняе тэга.
Звярніце ўвагу, што яны накшталт супрацьлегласці ў тым сэнсе, што зачыняе тэг або зачыняе тэг
Ці мае гэта касую рысу ўнутры сябе.
Між тым, ёсць адкрытыя тэгі галаву тут і зачыняе тэг галаву тут.
>> Там у адкрытую назву і зачыняе тэг назвы тут.
Той факт, што я паклаў кнігу на адной лініі, чыста ўмоўна.
Ён проста глядзеў, як яна будзе змяшчаецца на адным радку, таму я не стаў ўдару Калі ласка, увядзіце пару разоў.
Між тым, цела, я зрабіў водступ проста быць ніколі так ясна.
Звярніце ўвагу, што HTML з'яўляецца даволі дурным мовай.
На самай справе, яшчэ ў дзень да з'яўлення WYSIWYG рэдактараў
і Microsoft Word, дзе вы можаце сказаць: "Зрабіце гэта адважнае, зрабіць гэта курсіў,"
вы на самой справе увядзіце мала каманд у нарысах 20 + гадоў назад
, У якім вы сказалі б, "Пачніце рабіць гэтага тэксту паўтлустым шрыфтам. Спыніце рабіць гэтага тэксту паўтлустым".
"Пачніце рабіць гэтага тэксту курсівам. Спыніце рабіць гэтага тэксту курсівам".
>> Гэта тое, што HTML або любы іншы мова разметкі.
Гэта першы тэг кажа: "Гэй, браўзэрам. Вось некаторыя HTML."
Наступны тэг кажа: "Гэй, браўзэрам. Вось галава, загаловак маёй вэб-старонкі."
"Гэй, браўзэрам. Вось тытул".
А потым сюды: "Гэй, браўзэр. Вось менавіта за тытул".
Так што гэта, як браўзэр ведае, больш не будзе адлюстроўваць больш сімвалаў, чым Добры дзень, свет!
У радку загалоўка.
Між тым, гэтая кажа: "Вось і ўсё на галаву".
Гэта кажа: "Вось ідзе цела Вось рэальнае цела." - Літаральна, словы Hello, World.
І гэта кажа тут: "Вось гэта для цела. Вось менавіта для HTML."
Так браўзэраў даволі дурное.
Яны толькі што прачыталі гэты матэрыял зверху ўніз, злева направа, і рабіць менавіта тое, што яны кажуць.
Давайце на самай справе зрабіць невялікі прыклад.
Дазвольце мне адкрыць найпростых праграм на маім Mac тут, а менавіта TextEdit.
У Windows можна выкарыстоўваць Notepad.exe.
Але гэта ўсё, што трэба, каб пачаць зарабляць вэб-старонак.
Я збіраюся ісці наперад і проста скапіяваць і ўставіць гэты код у гэты файл.
Я збіраюся ісці наперад і захаваць яго на маім працоўным стале,
і я хачу захаваць гэта як hello.html,
і цяпер файл з імем hello.html.
Вось ён на маім працоўным стале.
А цяпер дазвольце мне перайсці ў браўзэры і перацягнуць файл у браўзэры.
І вуаля, вось мой самы першы вэб-старонкі.
Звярніце ўвагу, што назвы ўкладкі Прывітанне, свет ў тэг загалоўка,
і заўважце, што Добры дзень, свет ёсць цела маё вэб-старонкі,
і у-у-ух, я ў Інтэрнэце.
>> Я не сапраўды, маюць рацыю, таму што гэты файл не ў інтэрнэце.
Гэта здараецца, на мой лакальны жорсткі дыск у дадзены канкрэтны шлях.
Але ідэя тая ж. Усё, што нам цяпер трэба, гэта вэб-сервер, да якога, каб загрузіць яго.
Але спачатку давайце на самай справе ўвесці трохі больш складаны і крыху больш стылізацыі.
Гэта проста, калі сумна, вэб-старонкі.
Аказваецца, ёсць і іншыя тыпы тэгі мы можам выкарыстоўваць.
Напрыклад, тут, у жоўтым Я прадставіў 2 новых тэгаў.
Мы не будзем гуляць шмат з гэтым сёння, але заўважыў, што спасылка тэга
неяк вонкава адрозніваецца ад усяго астатняга.
Спасылка тэгі бярэ тое, што называюць атрыбутамі,
і атрыбутам з'яўляецца тое, што змяняе паводзіны тэга.
У дадзеным выпадку гэта не лепшы выбар імёнаў, спасылкі, таму што гэта збольшага бессэнсоўна,
але гэтая спасылка тэг кажа, па сутнасці, уключае файл пад назвай styles.css ўнутры маёй вэб-старонцы.
Вы можаце думаць пра гэта як аналагічны C # ўключае ў дырэктыве.
Styles.css мае на ўвазе іншай мовы наогул, што мы не будзем гуляць з сённяшняга дня,
але гэта для эстэтыкі: памеры шрыфта, колеру, водступы, водступы, поля
і ўсё такое падрабязней эстэтыкі.
Між тым, тэг функцыянальна падобныя,
Але замест таго, ўключаюць CSS, што мова, ён уключае ў сябе іншую мову, JavaScript.
Такім чынам, іншымі словамі, з гэтымі 2 тэгі я ў канчатковым выніку будзе магчымасць напісаць сваю ўласную вэб-старонку
але і цягнуць у код, што я ці хтосьці іншы напісаў
так што мы можам стаяць на плечы іншых людзей, мы можам практыкаваць добры дызайн,
вынясенне агульнага кода.
Калі ў мяне ёсць 10 розных вэб-старонак, гэта азначае, што некаторыя з маіх эстэтыка
можна вынесці, вельмі падобны на № ўключаюць у асобны файл.
Такім чынам, мы як туды дабрацца.
Але давайце на самай справе спачатку зрабіць нешта больш цікавае з гэтым файлам.
>> Зноў жа, гэта толькі TextEdit. Я тэхнічна не ў Інтэрнэце, але мы дабяромся туды.
Я хацеў бы зрабіць Прывітанне, свет крыху смялей, чым ён ёсць.
Так што прывітанне, давай калі заўгодна казаць для смелых.
Зноў жа, гісторыя тая ж: Прывітанне, коска, пачаць рабіць гэта смелы,
тады свет становіцца тоўстым шрыфтам, а гэта значыць спыніць друк гэтым тоўстым шрыфтам.
Дазвольце мне ісці наперад і захаваць свой файл, вярніцеся да Chrome, я буду павелічэння менавіта так мы бачым гэта лепш,
і перазагрузіць, і вы ўбачыце, што свет зараз тоўстым шрыфтам.
Вэб гэта ўсё аб гіперспасылкі, так што давайце ісці наперад і рабіць гэта:
мой каханы сайт, скажам, youtube.com.
Захаваць, перазагрузіць. Добра. Там ёсць пара праблем у цяперашні час, акрамя агіднасці на сайце.
1, я ўпэўнены, я ўдарыў Калі ласка, увядзіце тут. І я зрабіў.
Я не толькі ўдарыў Enter, я таксама водступы, практыкуючы тое, што мы прапаведавалі аб стылі,
але мае знаходзіцца побач з светам.
Дык чаму ж гэта? Браўзэры толькі тое, што вы кажаце ім зрабіць.
Я не сказаў браўзэра, "Break ліній тут. Устаўце абзаца тут".
Такім чынам, браўзэр, гэта не мае значэння, калі я ударыў Вяртанне ў 30 разоў,
ён па-ранейшаму збіраецца паставіць маю побач з светам.
Што мне сапраўды трэба зрабіць, тут сказаць нешта накшталт , уставіць разрыў радка.
>> А на самай справе, разрыў радка гэта свайго роду дзіўныя рэчы
таму што вы не можаце сапраўды пачаць пераезд у іншай лініі, то нешта зрабіць,
а затым спыніць пераход на новы радок. Гэта свайго роду атамарнага аперацыі.
Вы альбо рабіць гэта ці не. Вы патрапілі Калі ласка, увядзіце або няма.
Так бр крыху іншай тэг, і таму мне трэба разабрацца як адкрыць і закрыць яго
ўсё адразу.
Сінтаксіс, што гэта.
Тэхнічна, вы маглі б зрабіць нешта накшталт гэтага ў некаторых версіях HTML,
Але гэта проста глупства, таму што няма ніякіх прычын для запуску і прыпынку нешта
калі вы можаце замест гэтага зрабіць усё адразу.
Зразумейце, што HTML5 не строга патрабуе гэтага чорта,
так што вы ўбачыце падручнікі і інтэрнэт-рэсурсы, якія не маюць яго,
але для добрай мерай давайце практыкаваць сіметрыі, якія мы бачылі да гэтага часу.
Гэта азначае, што тэг з'яўляецца як адкрываюцца і зачыняюцца.
Так што цяпер дазвольце мне захаваць мая справа, вярнуцца сюды.
Так, гэта пачынае выглядаць лепш, за выключэннем Web я ведаю, гэта свайго роду інтэрактыўным,
і ўсё ж YouTube тут, здаецца, не прывядзе ні да чаго.
Гэта таму, што, хоць яна выглядае як спасылку, браўзэр не ведае, што само па сабе,
так што я павінен сказаць браўзэру, што гэта спасылка.
>> Спосабам зрабіць гэта з'яўляецца выкарыстанне тэга:
<A HREF для гіпер спасылкай, якая з'яўляецца старой школы казаць спасылцы,
= "Http :/ / www.youtube.com">
і дазвольце мне перамясціць гэта новая лінія проста так, гэта крыху больш чытэльным,
і я буду скарачаць памер шрыфта.
Ці магу я зрабіць яшчэ? Няма. Там збіраецца быць гэтая дыхатамія.
Гэты тэг, тэг прывязкі, сапраўды мае атрыбут,
якія змяняюць яго паводзіны, і значэнне гэтага атрыбуту па-відаць URL YouTube.
Але звярніце ўвагу на тое, што дыхатамія толькі таму, што гэта URL вы збіраецеся,
гэта не значыць, што павінна быць слова, якое вы падкрэсленне і робіць спасылку.
Хутчэй за ўсё, што можа быць нешта накшталт гэтага.
Такім чынам, я павінен сказаць, спыніць гэтае слова спасылку з дапамогай зачыняе тэга якар.
Звярніце ўвагу, што я не раблю гэтага.
1, гэта будзе проста марнаванне часу кожнага, і ў гэтым няма неабходнасці.
>> Каб закрыць тэг, вы толькі згадаць імя тэга зноў.
Вы не кажучы ўжо аб любым з атрыбутаў.
Так што давайце эканоміць, што вярнуся. Добра, вуаля, цяпер гэта сіні і гіперспасылкамі.
Калі я націскаю, я на самой справе пайсці ў YouTube.
Таму, нават калі мой вэб-старонкі не ў інтэрнэце, гэта па меншай меры HTML,
і калі мы дазволім Інтэрнэт даганяць, мы на самай справе ў канчатковым выніку тут на youtube.com.
І я магу вярнуцца і вось мае вэб-старонкі. Але зьвярніце ўвагу на гэта.
Калі вы калі-небудзь атрымаў спам або фішынг-атакай,
Зараз у вас ёсць магчымасць ужо праз пяць хвілін, каб зрабіць тое ж самае.
Мы можам пайсці сюды і зрабіць нешта накшталт www.badguy.com
або што адрывістыя сайт, а затым вы можаце сказаць пацвердзіць свой PayPal рахунак.
[Смяецца] І зараз гэта будзе ісці ў badguy.com, які я не збіраюся націснуць на
таму што я паняцця не маю, што прыводзіць. [Смех]
>> Але зараз у нас ёсць магчымасць на самай справе ў канчатковым выніку там.
Такім чынам, мы сапраўды толькі пачынае драпаць паверхню.
Мы не праграмавання як такога, мы пішам на мове разметкі.
Але як толькі мы акругляецца нашу лексіку ў HTML,
мы ўвядзем PHP, фактычна мова праграмавання
, Што дазволіць нам генераваць HTML аўтаматычна генераваць CSS аўтаматычна,
так што мы можам пачаць у сераду для рэалізацыі, скажам,
нашай ўласнай пошукавай сістэмы і многае іншае.
Але пра гэта на працягу некалькіх дзён. Мы ўбачымся.
>> [CS50.TV]