[Powered by Google Translate] [Semajno 7]
[Davido J. Malan - Universitato Harvard]
[Jen CS50. - CS50.TV]
Bone. Bonvenon dorso. Ĉi tiu estas CS50, kaj ĉi tiu estas la komenco de semajno 7.
Paro de malmulta anoncoj:
Pset5 estas nun en progreso, aŭ baldaŭ estos,
kaj lasu min diri, tute honeste, ĉi tio inklinas esti inter la plej defia
de la kurso la problemo aroj, do lasu min mencii ĉi nun
por ke ĉi tiu semajno pli ol iam vi ne atendu, ni diru, merkredo nokte
aŭ ĵaŭdo nokte bucear in
Tio estas definitive interesan pset. Ni kredas ke estas amuza.
Se vi reale preni ĝin plene korekta kaj povas defii la tn Granda Estraro,
vi havas ŝancon por kongrui intelektojn kun iuj de la kurso de dungitaro
kaj kelkaj el viaj kompanoj.
Kio The Big Estraro estas estas iam vi havas vian literumilo laboristino,
vi povos iri al cs50.net post kuri komando,
pure elekti en, kaj tiam la kvanto de tempo kaj la kvanto de RAM kaj pli
ke vi uzas en via efektivigo estos elmetitaj tie sur la kurson ĉefpaĝon.
Vi rimarkos ke tuta aro da tiuj homoj ĉi tie estas listigitaj kiel bastono
ekde dum la semajnfino, la personaro pensis ke estus amuze provi superi unu la alian.
Do rimarkas ke la celo tie estas ne superi la bastonon.
Eĉ mi nur tie en la numero 13.
Pure elekti in, sed estas ŝanco por vidi kiom iom RAM
kaj kiom malmultaj CPU sekundoj vi povas uzi vis-a-vis iuj viaj kompanoj.
>> Kaj mi agnoskas ke Kevin Michael Schmid,
aktuale en la numero 1 posteno kiel unu el la TFs,
ĉi tiu estas efektivigo ke ni nomas ne eblas
pro tio ke li uzas preskaŭ 0 RAM kaj preskaŭ 0 sekundoj por loading.
Do ni zorgos de Kevin offline. [Ridado]
Estas iuj kapabloj ke Kevin metas al la provo tie.
Unu el la aferoj ni pensis ke ni volas fari tro estas nun CS50x estas semajno en progreso,
kaj vi infanoj estas tiel parto de ĉi tiu eksperimento kiel tiuj studentoj estas.
Ni demandis ilin kiel parto de ilia pset0, kiu estis simile al prezenti Scratch projekto
de intereso al ili - ludo, interaktiva peco de arto, kuraĝigo, aŭ la kiel -
1 - al 2-minuta video, se ili volus, dirante saluton al la mondo kaj kiu reale estas.
Mi pensis mi dividos kun vi nur paro de la videoj kiuj estis donita ĝis nun
ĉar por ni, sur la bastono almenaŭ, ĝi vere estis ekscita
kaj inspira por vidi tiujn ulojn el la tuta mondo - landoj tra la tuta mondo -
agordi en, de ĉiuj aĵoj, komputika kurso sur la interreto,
ĉu ĝi estas ĉar ili volas daŭrigi siajn proprajn studojn,
ili volas preni lian karierojn en nova direkto,
ili volas plenigi truojn en siaj propraj konoj,
tial iuj de la samaj kialoj ke vi infanoj eble estis tie.
>> Do mi donas al vi unu tia studento tie. Vi povus levi la volumo malmulta.
Jen unu el niaj studenta 1-minuto sendoj.
Saluton, mondo. Mi estas studento de industria inĝenierio tie en Málaga, Hispanio.
Mi ekscitiĝas pri tiu interreta kurso ĉar mi amas komputiko, mi vere faros,
kaj mi vere dankas ke mi alvenas al esplori ĝin.
Kaj la fakto, ke mi povas lerni la saman vi ĉiuj infanoj fari
sed anstataŭ esti en Harvard mi estas en Málaga, kiom awesome estas kiu?
Nu, mi estas Fernando, kaj ĉi tiu estas CS50. See you guys.
[Ridado] Alia klipo ni aparte deziras, vi trovos ke tiu sinjoro estas la angla estas ne tiom forta.
Ĝi aspektas kiel li havis ĝin maŝino tradukis, do la tradukoj mem estas iom neperfekta,
sed tio estis unu el niaj favoritos tiel malproksime kiel bone.
[♪ ♪]
Saluton, mondo. [Parolante en la japana]
[Mi devas saluti japane ĉar mia Esperanto estas tre nefidinda.]
[Mi transdonas la mesaĝon al vi el la urbo de Gifu, Japanio.]
[Mi povas esti studento por la unua fojo en 20 jaroj, kiel povas vidiĝi.]
[Mi estas tre dankema al Harvard Universitato kiu donis al mi ĉi tiun ŝancon kaj edX.]
[Golfo estas gitaro kaj mia favorita afero kuri.] [Ridado]
[♪ ♪]
[Kial vi kredas ke mi provis ĉeesti cs50x.]
[Universitato Harvard, estas mia sopiro.]
[Precipe se mi malproksima ĉeesto vivis en Japanio.]
[Mi volis provi tuj konsciis pri la ekzisto de tiaj edX kiam.]
[Ĉu vi ne opinias ke vi ne rilataj al la aĝo de lernado I.]
[Cs50 estas mia sopiro. Mia nomo estas Kazu, kaj ĉi tiu estas cs50.]
[♪ ♪] [aplaŭdoj kaj huraoj]
Alia favorito de nia erao ĉi submetiĝo tien el iu.
[♪ ♪] [Malan] Google ĝin se vi ne konas tiun meme.
>> Kaj poste persiste, paro de la aliaj kiuj got afiŝis ke eble gajni la adorable premio.
[Studentoj] Aww! >> [Malan] Ni devos aŭskulti. Tio estas mallonga, do aŭskultu atente.
[Homina parolanto] Kio estas via nomo? >> Louie.
[Homina parolanto] Kio estas tio? >> [Risitas] CS50. [Ridado]
[Malan] Li prenas du, though.
Ĉi tie ni iru, la lasta.
Mia nomo estas Louie, kaj ĉi tiu estas CS50.
[Ridado] Ĉi tiam estas CS50x.
Dankon al ĉiuj el la de vi dum sekvaj kune hejme
kiuj estis partopreno ĝis nun.
Hodiaŭ, ni konkludi nian diskuton de datumstrukturoj,
almenaŭ iuj el la plej fundamenta,
kaj poste ni daŭrigos nian konversacion pri HTML kaj ttt programado.
Ja, ni pasigis la pasintaj kelkaj sep semajnoj rigardi la fundamentojn de programado -
algoritmoj, datumstrukturoj, kaj similaj -
kaj C, kiel vi eble spertas tiel malproksime,
ne estas nepre la plej atingebla de lingvoj
kun kiu apliki iujn el tiuj ideoj.
Kaj tiel komenci ĉi tiun semajnon kaj proksima semajno kaj tiam la sekva,
ni fine povos transiro de C, kiu estas ĝenerale konata kiel sufiĉe malalta nivelo lingvo,
al aĵoj pli alta nivelo, inter ili PHP, JavaScript, kaj similaj,
kiuj ni vidos desegni sur la sama lecionoj kiujn ni lernis dum la pasintaj semajnoj,
sed vi trovos, ke deklari aĵojn kiel tabeloj kaj hash tabloj kaj serĉado kaj ordigi
tiom pli facile ĉar la lingvoj mem ni ekuzi
fariĝos pli potencaj.
Sed unue, apliko de arboj.
Ĝi estas tre komuna tiuj tagoj por bezonas kunpremi informo.
En kio kunteksto vi volas kunpremi ia cifereca informo?
>> Yeah. >> [Studento] Kiam vi bezonas sendi ĝin super la TTT.
Yeah, kiam vi volas sendi ion sur la interreto.
Se vi volas elŝuti grandan dosieron, estas idealo se iu en la alia fino
estas kunpremita tiu dosiero uzante zip formato aŭ io simila
por ke vi sendas malpli bitoj ol povus alie esti transdonita.
Do kiel vi kunpremi informo?
Ĉiu abscesoj malsupren uzi malpli bitoj ol estas postulitaj de defaŭlta.
Sed ĉi tiu estas speco de kurioza afero ĉar pensas reen al semajnoj 0 kaj 1
kiam ni parolis pri ASCII kaj binaraj kaj ni parolis pri ASCII en aparta
kiel uzante 8 bitojn por reprezenti literojn de la alfabeto
tiel ke la litero A estas prezentita per 65, minuskla a estas la nombro 97,
kaj kontraŭe vi reprezentas la 65 aŭ 97, vi uzas 7 aŭ 8 bitojn.
Sed la ruzo estas ke estas iuj literoj en la angla alfabeto
kiuj ne estas tiel populara kiel aliaj.
Z estas ne ĉiuj kiuj populara, Q estas ne ĉiuj kiuj populara, sed A kaj E estas super populara.
Kaj tamen por ĉiuj ĉi tiuj literoj, defaŭlte la mondo uzas la sama nombro de bitoj, nur 8.
Do ĉu ne estis pli inteligenta se anstataŭ uzi 8 bitojn por ĉiu litero,
eĉ la plej malofte uzata kiel Q kaj Z,
kio se ni uzas malpli bitoj por A kaj E kaj S kaj la plej populara literoj
kaj uzis pli bitojn por la malpli populara literoj,
la ideo esti let la optimizar por la komuna kazo,
kio estas temo en komputiko de klopodi optimizar kio okazos la plej
kaj pasigi iom pli da tempo, iom pli da spaco sur la aĵoj kiuj, jes, povus okazi
sed ne nepre kiel ofte.
Do ni prenu ekzemplon.
>> Supozu ke ni volas kodi informo sufiĉe efike.
Vi povus esti plenkreska sciante iom ion pri Morsa kodo,
kaj malakordo vi ne scias la realan kodo,
sed vi eble memoras, ke ĝi estas almenaŭ tiu serio de punktoj kaj strekoj.
Tio estas sufiĉe efika kodigo, kaj rimarkas ke la plej populara letero - ekzemple, E -
Uzas la plej mallonga de beeps.
Morsa kodo estas pri beep-beep-beep-beep-beep-beep kaj tenante tonoj
ĉu por mallongaj periodoj de tempo aŭ longaj periodoj de tempo.
Kaj, kiel signifis per la punkto, estas super mallongaj pepi, nur pepi, kaj kiu reprezentus E.
Kontraŭe, T estus plu pepi, kiel pepi [daŭrigas sono],
kaj kiu reprezentus T.
Sed tio ankoraŭ bela mallonga ĉar, kontraŭe, se vi rigardas Z,
esprimi Z vi irus pepi, pepi [plu sono], pepi, pepi [pli mallongaj sonas].
Do ĝi estas pli longa ĉar ĝi estas malpli kutimaj.
Sed la gotcha tie estas kiu kodo Morse estas iom misa
en tiu ĝi ne estas tuj decodable.
Ekzemple, supozu ke vi aŭdas sur iu fino de la drato pepi [mallonga], pepi [longa].
Kio mesaĝon ĉu mi ĝuste ricevis? Al punkto kaj streko. Kion tio reprezentas?
[Studento] A. >> [Malan] Eble.
Ĝi povus ankaŭ esti E sekvita de T.
En aliaj vortoj, Morsa kodo, kvankam leverages tiu principo de optimizando la angulo kazo,
ĝi ne pruntedonos al tuja decodability.
Tio estas, la homo kiu estas aŭdante aŭ ricevi tiuj punktoj kaj strekoj
devas iel eltrovi kie la paŭzoj estas inter literoj,
ĉar se vi ne scias, kie tiuj paŭzoj estas, vi eble konfuzas A por et aŭ inverse.
>> Do kio povus fari? En Morsa kodo vi povus nur detenas inter ĉiu de la literoj.
Sed paŭzante estas speco de kontraŭpezo al la tuta punkto de rapidigo aĵojn.
Do kion se anstataŭe ni iris kun kodo en kiu ne estis tiu malbona situacio
kie E estas prefikso, ekzemple, de A -
en aliaj vortoj, se ni povus certigi ke la ŝablonoj estas ankoraŭ mallonga por la populara literoj
longa por la malpli populara literoj, sed mankas ebla konfuzo?
Viro en la nomo de Huffman jaroj elpensis tiun skemon nomis Huffman kodigo
ke efektive leverages unu el la datumstrukturoj ni pasigis iom da tempo paroli pri
ĉi pasinta semajno, tiu de arboj, duumaj arboj specife -
duuma arbo signifo ke ĝi havas ne pli ol 2 infanoj.
Ĝi havas eble maldekstra infano, eble dekstra infano, kaj tio estas ĝi.
Do supozu nur pro diskuto ke iu volas sendi mesaĝon
kiu similas ĉi. Estas kompleta sensencaĵon sed ĝi konsistas el Kiel, Bs, C, D, kaj Es.
Kaj se vi vere rakonti ĝis ĉiuj Kiel, Bs, C, D, kaj Es
kaj poste dividi per la totala nombro de literoj,
tiu malgranda abako tie diras ke 45% de la literoj estas Es, 20% estas mezuro,
10% Bs, ks.
Do alivorte, supozi, ke la citita linio tie
estas nur kelkaj mesaĝo kiu vi volas sendi.
Ĝi okazas esti sensencaĵoj nur tiel ni povas uzi kiel kelkaj leteroj kiel eble plej
sed estas ja la kazo ke E restas la plej populara,
kaj B kaj C estas la malplej populara, almenaŭ de tiuj 5 literoj de la alfabeto.
Do kiel ni povas iri antaŭvidi kun kodigo,
duuma kodigo, kaj tia sinteno de _0s_ kaj _1s_ por ĉiu el tiuj literoj
en tia maniero, ke E estas mallonga mastro kaj eble B kaj C estas iomete pli longa ŝablonoj,
denove, la ideo estas, ke ni volas uzi malpli bitoj plejofte
kaj pli bitojn nur tempaltempe.
Laŭ Huffman kodigo, vi povas krei arbaro de arboj.
Estas speco de rakonto linio tie kiu implikas arboj kaj ankaŭ la procezon de konstruado ilin.
Ni komencos.
>> Mi proponas ke vi komencu per tiu arbaro, por tiel diri, de 5 arboj,
el kiuj ĉiu estas sufiĉe stulta arbo.
La arbo estas formita de nur sola nodo, kiel reprezentis tie de rondo.
Do ĉiu el tiuj aĵoj povus esti C struct
kaj ene de la C struct eblus kaleŝego reprezentantaj la ofteco grafo
kaj poste eble char reprezentas la letero.
Do pensu pri tiuj nodoj kiel Iu maljuna C struct sed, nuntempe, pli alta nivelo.
Tiu estas arbaro de 5 arboj, ĉiu el kiuj havas nur unu nodo.
Kio Huffman proponita estas ke ni komencu kombini tiujn arbojn
kiuj havas la plej malgrandan ofteco grafoj en iomete pli granda arboj
konektante ilin kun nova radiko nodo.
Do inter la literoj ĉi tie, rimarki ke por oportuneco mi ordo ilin de maldekstre al dekstre,
kvankam tio ne estas strikte necesa, kaj rimarkas ke la plej malgranda nodoj
Nuntempe 10% kaj 10%.
Do Huffman proponis ke ni kunfandi tiujn 2 pli malgranda nodoj en nova arbo
enkondukante novan patro nodo kaj tiam donas ke patro maldekstra infano kaj dekstra infano
kie B estas arbitre la maldekstra kaj C estas arbitre dekstre.
Kaj tiam Huffman plu proponis ke estu la nun nur pensu pri la maldekstra infano
en unu el tiuj arboj ĉiam kiel esti reprezentita per 0
kaj la dekstra infano ĉiam kiel esti prezentita per la nombro 1.
>> Ne gravas se vi klaki ilin tiel longe kiel vi estas kohera.
Do nun ni havas kvar arboj en ĉi tiu arbaro.
Kaj mi diras kvar ĉar nun la arbo sur la maldekstra -
kaj ne tiel arbo en la senco ke ĝi kreskas tiel,
ĝi estas pli simila al familio arbo kie nun la 0,2 estas varo de la patro de la du infanoj -
rimarkas, ke en tiu patro ni desegnita 0.2.
Ni aldonis la ofteco grafoj de la du infanoj kaj donis al la nova vertico al la tuta sumo.
Do nun ni nur ripeti tiun procezon.
Trovu la du pli malgrandaj nodoj kaj tiam kunigi ilin en nova arbo
kaj poste ripeti la procezon plu.
Nun ni havas kelkajn kandidatojn, 20%, 15%, kaj aliaj 20%.
En ĉi tiu kazo, ni devas rompi la egaleco. Ni povas fari ĝin arbitre.
Ni devas nur fari tion konstante.
En ĉi tiu kazo, mi arbitre iri kun la unu maldekstre,
kaj mi nun kunfandi la 20% kaj la 15% por doni al mi novan patro nomis 35%,
kies maldekstra infano estas 0, kies dekstra infano estas 1, kaj nun ni havas nur tri arboj en la arbaro.
Vi povas eble vidi kie ĉi iras.
Se ni ripetu ĉi paro pli tempoj, ni havos nur unu granda arbo,
ĉiuj el kies randoj estas etikedita kun _0s_ kaj _1s_.
Ni faru tion denove.
35% estas tiu arbo radiko. 20% kaj 45%, do ni tuj kunfandi la 35% kaj 20%.
Nun ni havas ĉi arbo tie ĉi. Ni aldonu tiujn kune, ni havas 55%.
Nun ekzistas nur du arboj en la arbaro.
Ni faras ĉi tiu fina tempo, kaj espereble matematike ĉiuj frekvencoj adicii
ĉar ili devus ekde ni komputita ilin el la get-go aldoni ĝis 100%.
Kaj nun ni havas unu arbo.
Do ĉi tiu estas Huffman kodigo arbo.
Ĉio prenis tempon alveni parole, sed la realo estas kun a por buklo
aŭ kun rekursie funkcio, vi povus konstrui tiun aferon ĉe belaj rapidaj.
Do nun ni havas unu nova nodo, kaj ĉiuj el tiuj internaj nodoj estis malloc'd,
supozeble, dum la vojo.
Do nun ĉe la supro de tiu arbo ni havas 100%, sed nun rimarki ni havas vojon
de tiu nova granda-granda-granda-avo al chiuj grandaj-granda-pranepoj
tuta vojo al la fundo, al ĉiuj de la folioj.
>> Kion ni faros nun estas proponi, ke por reprezenti la letero E,
ni simple uzas la numero 1. Kial?
Ĉar se ni trairi ĉi tiu arbo el la fina radiko malsupren al la folio konata kiel E,
ni sekvas nur unu rando, la rajto rando, kaj tio etikeditaj kompreneble en supra dekstra 1.
Do la implikacio tie por Huffman estis ke E de kodigo en duuma estos nur esti 1.
Kaj tio estas bela malbenita efika. Ne povas vere akiri ajna pli malgrandaj ol tio.
Kontraste, A tuj estos reprezentitaj, se vi komprenas la logikon,
per kio mastro de bitoj anstataŭe? 01.
Do por atingi A, ni komencu en la radiko kaj ni iru maldekstren kaj poste ni iros dekstren,
kio signifas ke ni sekvis 0 kaj tiam 1.
Do ni estos reprezenti la litero A kun la mastro 0 kaj 1.
Kaj nun rimarki ni jam havas proprieton de tuja decodability
ke ni ne havis en Morsa kodo.
Kvankam ambaŭ de ĉi tiuj ŝablonoj estas sufiĉe mallonga - E estas 1 bito, A estas 2 bitoj -
rimarki, ke ili ne povas konfuzi unu aŭ la alia,
ĉar se vi vidas 1 ĝi estas alvenis al esti E, se vi vidas 0 tiam a 1 ĝi estas evidente alvenis al esti A.
Simile, kio estas D? 001.
Kio estas C? 0001.
Kaj kio estas B? 0000.
Kaj denove, ĉar ĉiuj el la literoj ni zorgas pri estas ĉe la folioj
kaj neniu el ili estas speco de intermediarios en la vojo de radiko al folio,
ne estas risko de conflating 2 literoj 'malsamaj kodigoj
ĉar ĉiuj el tiuj bitĉenoj estas determina.
0000 estos ĉiam B.
Ne nodo ie inter kiuj vi eble konfuzas unu litero por la aliaj.
Do kio estas la implikaĵon tie?
>> La plej populara leteron - en tiu kazo E - alvenis la plej mallonga kodigo,
Al alvenis la venonta plej mallonga kodigo,
kaj B kaj C, kiun ni jam sciis de la get-go estis speco de la malplej popularaj
ĉe 10% ofteco ĉiu, ili alvenis la plej longa kodigo.
Kaj tiel kion ĉi tio signifas nun estas ke se vi volas sendi mesaĝon ke tio kunpremita
super la Interreto aŭ en retpoŝto aŭ similaj,
anstataŭ uzi norma ASCII, vi povas sendi Huffman kodita mesaĝo
per se vi volas sendi la leteron E, vi sendas nur unu bito.
Se vi volas sendi A, vi sendu 2 bitoj, 01, anstataŭ sendi 8 bitoj
sekvata de alia 8 bitoj sekvita de alia 8 bitoj ks.
Sed estas gotcha tie.
Ne sufiĉas simple konstrui ĉi arbo kaj poste komencu sendi de Alico al Bob
malplilongigita bita aranĝo, kordoj de ASCII,
ĉar Alico ankaŭ devas informi Bob, kion
se Bob tuj povos legi ŝia kunpremita mesaĝon?
[Inaudible studento respondon] >> Kio estas tio?
[Inaudible studento respondon] >> De kio la arbo estas.
Aŭ eĉ pli specife, kion tiuj kodigoj estas,
speciale pro tio ke dum tiu rakonto ni faris juĝon alvoko je unu punkto.
Memoru ke ni devis elekti arbitre inter la 2 malsamaj 20% nodoj?
Do ĝi ne estas la kazo ke Bob, la ricevanto, povas simple rekonstrui la arbo sur sia propra
ĉar eble li kreos la arbo nur milde malsame de Alice.
Cetere, Bob eĉ ne scias, kion la originala mesaĝo estas
ĉar la sola afero Alico sendas lin, kompreneble, estas la kunpremita mesaĝo.
>> Do la kaptita per kunpremo kiel tiu estas kiu, jes, Alico povas savi tutajn multajn bitojn
sendante 1 por E kaj 01 por A kaj tiel plu,
sed ŝi ankaŭ devas informi Bob, kion la surĵeto estas inter literoj kaj bitoj
ĉar ili ne povas klare fidi nur ASCII plu se ni ne uzas ASCII.
Do ŝi povas aŭ sendu lin al la arbo iel -
skribi ĝin sube, stoki ĝin kiel duuma datumoj aŭ io simila -
aŭ simple sendu lin iom cheat folio, la Excel-dosiero, kiu montras la surĵetoj.
Do la efikeco de kunpremo vere supozas ke la mesaĝoj kiujn vi sendas
estas sufiĉe granda, almenaŭ mezgranda,
ĉar se vi sendas la super mallonga mesaĝo,
se vi nur volas sendi la mesaĝon BAD, kiu hazarde estas vorto ni povas literumi tie,
B-Al-D, vi probable tuj uzos malpli bitoj,
sed la ruzo estas se vi ankaŭ devas informi Bob, kion la arbo estas
aŭ kio tiuj kodigoj estas, vi tuj probable superpezas ĉiuj ŝparadoj
havi kunpremita aĵoj por komenci.
Do ĝi povas efektive esti la kazo, ke se vi provos kunpremante
eĉ kun iu kiel zip aŭ formatoj vi eble konas -
bela malgrandaj dosieroj, eĉ malplenajn dosierojn -
kelkfoje tiuj dosieroj povus akiri pli grandan kaj ne pli malgranda.
Sed realisme, kiu okazas nur por malgrandaj dosieron grandecoj,
tial ĝi ne iras fari gigabajto dosieron esti 2 gigabajtoj;
ni vere parolas bitokoj aŭ nur kelkaj kilobajtoj.
>> Iuj programoj kiel zip estas inteligenta sufiĉe por realigi tion,
"Vi tuj elspezi pli bitojn kunpremante ĉi."
"Lasu min, ne ĝeni kunpremante ĝin por vi."
Do ĉi tiu estas nur unu vojo tiam de kunpremante teksto formato.
Ni povus apliki io ​​tiamaniere en C.
Ekzemple, jen kiel ni povus reprezenti nodo en la arbo
kie ni havas char por la simbolo, flosanta valoro por la frekvenco,
kaj kiel ni vidis per niaj aliaj datumstrukturoj, 2 punteros,
1 al la maldekstra infano, 1 al dekstre, ĉu de kion eblas NULL,
sed se ne, ĝi referencas al maldekstra infano kaj dekstra infano.
Do ĉi tiam estas Huffman kodigon, kaj estas unu vojo, kiun vi povas iri sur kunpremante informo,
kaj estas certe unu el la plej facila por apliki
en la kunteksto de, ekzemple, la pasinta semajno datumstrukturoj,
kvankam eĉ pli kompleksa algoritmoj ekzistas
kiu povas fari eĉ pli kompleksa mutacioj de via datumo.
Demandojn tiam arboj, duumaj arboj, aŭ kunpremo de teksto?
[Studento] Ĉu estas iuj ambigueco, kiel se [inaudible] divido en 01,
tiam 011 estus ambigua, ĉu ne?
[Inaudible] >> Bona demando. Ambigueco.
Lasu min resumi pro mencio tiu bildo ĉi tie.
Ĉar la karakteroj vi kunpremante, la reprezentoj de,
per difino de ĉi tiu algoritmo ĉiam restas la folioj,
vi neniam hazarde apliki la saman strukturon de bitoj por la prefikso de multnombraj leteroj.
Do alivorte, vi estas maltrankviligita, ĝi sonas kiel, equívoco ekestanta
per 001 povus esti la komenco de B aŭ la komenco de C aŭ io kiel tio.
Sed tio ne povas esti la kazo pro avizon ke ĉiuj de la literoj de la alfabeto ni kodi
estas je la folioj.
>> La ambigueco povas nur levigxu, kiel en la kazo de Morsa kodo,
se, ekzemple, C estis ie laŭ la vojo de la radiko al B.
[Studento] Ĝuste. Do en tiu kazo, diras A havas 2 folioj. >> Diru A havas - Diru tion denove.
[Studento] Diru A havas 2 foliojn, F kaj G, kaj tiam G - >> Bone. Sed ne povas.
A sin ne povis havi foliojn F kaj G ĉar tiuj literoj C kaj G
estus sin esti lasas ie maldekstren de B aŭ la rajton de E.
Do per difino, ili devas esti folioj.
Alie, vi estas ekzakte pravas, ni ne solvis la problemon, ke Morsa kodo alfrontas.
Bona demando. Aliaj demandoj? Bone.
Ĉi tiu nocio de bitoj, rezultas ni havis potencon tuta tempo, ke ni fakte ne uzis
kiam venis al manipuli tiujn _0s_ kaj _1s_.
Ni demandis pri tio sur unu el la plej fruaj problemo aroj:
nome, kiel vi iradas tra igi majuskle por minuskla aŭ inverse?
Aŭ, pli konkrete, unu el tiuj unuaj psets demandis
kiom da bitoj vi vere devas klaki por ŝanĝi A al minuskla a aŭ inverse?
Jen rapida memoro de kio 65 kaj 97 aspekti en duuma.
Kaj eĉ se tiu demando ia velkis en via memoro,
vi povas vidi denove tie kiom bitoj bezonas esti spegulita
ŝanĝi ĉefurbo A al minuskla a? Nur unu.
>> Ili malsamas nur en unu loko, la tria bito de la maldekstra.
Dum A havas 010, iom oni havas 011.
Do iel ni bezonas nur povos klaki ke iom,
kaj ni povas tiam profiti aŭ minuskla literoj.
Ni faris tion en la pasinteco per efektive uzante se kondiĉoj
kaj kontrolado se la litero estas inter ĉefurbo A kaj ĉefurbo Z,
tiam eligoj kiel A - a + 26 aŭ io kiel tio.
Vi verŝajne faris aritmetika ŝanĝo al la literoj de la alfabeto.
Sed kion se ni povus simple klaki ke sola iom?
Kiel vi povis iri pri preni unu bajto la valoron de bitoj, do 8 bitoj kiel 01000001 kaj 01100001?
Se vi havis tiujn mastrojn de bitoj, kiel oni povas iri ŝanĝi nur unu el ili?
Kio se ni enkondukas en flava tie ĉi aliajn mastro de bitoj?
Se mi faras la tutan flavan string _0s_ krom la malmulto, kiun mi volas ŝanĝi
kaj tiam mi enkonduki novan operatoro konata kiel bitlarĝa operatoro -
Bitlarĝa en la senco ke ĝi funkcias sur individua bitoj,
ne sur tutan bajto aŭ kvar bitokoj ĉiuj samtempe.
Ĉi vertikala streko tie en flava sugestas ke kion se ni prenas la reprezento de kapitalo A
kaj bitlarĝa AŬ ĝin kun la flava vico de bitoj?
Alivorte, pensu denove al nia diskuto de Buleaj esprimoj en Scratch kaj poste en C.
>> Farante Bulea aŭ signifas ke esti vera, ĉu la unua afero devas esti vera
aŭ la dua afero devas esti vera aŭ ili ambaŭ esti vera,
kaj tiam la rezultanta eliro estas sin vera.
En ĉi tiu kazo tie ĉi, kion ni preni se ni 0 "aŭ" ed kun 0? Falsa aŭ falsa?
Estas ankoraŭ falsa, do la minuskla a restas kiel atendita.
Kio se anstataŭe ni faru 1 aŭ 0?
Tiu nun restas 1, sed rimarki kio estas okazonta tie.
Se ni komencos kun ĉefurbo A kaj ni daŭre "aŭ" lia individua bitoj kiel ni faras ĉi tie,
0 aŭ flava donas al ni, kion cxi tie? Ĉi tiu donas ni 1.
Fakte, supozu ke ni ne scias, kion la majuskla versio de iom pli efektive estis.
Ni iru do this. Lasu min movi ĉi reen super tie.
Ni faru ĉi denove. 0 aŭ 0 donas min 0.
1 aŭ 0 donas min 1.
0 aŭ 1 donas al mi 1.
0 aŭ 0 donas min 0. La sekva estas 0, la sekva estas 0, la sekva estas 0.
1 aŭ 0 donas min 1.
Kaj tiel eĉ se ni ne scias anticipe kion minuskla a estis,
simple per "aŭ" ing A kun ĉi ŝablono de bitoj, kiujn ni prezentis tie en flava,
vi povas minuskla majuskla A per flipping ke iom.
Ni uzis tiun esprimon semajnoj: klakanta iom.
Kiel vi efektive fari tion programmatically?
Vi uzas kio ĝenerale nomis maskon, sekvenco de bitoj,
ke en ĉi tiu kazo nur tiel pasas por rigardi kiel ĉi tiu numero tie,
kaj tiam vi "aŭ" ĝi kune uzante tiun novan C operatoro,
Ne | |, vi uzas solan | kaj vi reale preni tiu respondo tie ĉar kial?
Ĉi tiu estas la 1s loko, 2s loko, 4s, 8s, 16s, 32s.
Do rezultas ke se vi prenos majusklo A kaj bitlarĝa AŬ ĝin kun la entjero 32,
ĉar la entjero 32, kiam vi rigardas ĝin kiel bitoj, aspektas kiel ĉi tiu,
kiu signifu vi povas klaki la bito, ke vi efektive volas.
Kaj simile - kaj ni rigardu kodo en nur momento -
supozi ni volas iri la alia direkto.
>> Kiel vi iros de minuskla a al ĉefurbo A? Kiu iom bezonas ŝanĝi?
Ĝi estas la sama.
Ni volas ŝanĝi tion tria bito de 1 al 0.
Kaj kiel povus ni iru sur faras tion?
Kiel ni elŝalti iom? Kun kio mastro de bitoj povis ni elŝalti iom?
Kio se ni ordigi de Inversigar la masko?
Dum antaŭe, ni faris la tuta flava masko _0s_
krom la iom ni volis ŝalti,
kion se ĉi tiu tempo, ni faros la tuta masko 1s krom la bito, ke ni volas elŝalti
kaj tiam uzi kion operatoro?
Kio se ni "kaj" tion? Ni rigardu.
Se ni nun klaki al ĉi tion, supozu ke denove mi krei masko kiu estas ĉio 1s
krom la malmulto, kiun mi volas elŝalti
kaj tiam, pli ol "aŭ" la blanka nombroj supren supro kun la flava nombroj cxi tie,
kio se mi anstataŭ "kaj" ilin kune? Ĝi estas nomata bitlarĝa kaj.
Logike, ĝi estas la sama afero kiel Bulea kaj.
Tio donas min 0 & 1 estas 0. Do falsaj kaj veraj estas falsaj.
Vera kaj vera estas vera.
Kaj jen la magio: Vera kaj falsa estas nun falsa, do ni elŝaltis ke iom.
Kaj nun la resto de la rakonto estas iom simpla.
Ĉar la resto de la masko estas 1s, ne gravas kion la numeroj estas en blankaj.
Kiam vi "kaj" iu kun vera, vi ne tuj ŝanĝu ĝian valoron.
Se ĝi estas vera, ĝi restos vera. Se ĝi estis falsa, restos falsaj.
>> Sed la magio okazas kiam vi prenas ion kiu estis vera
kaj vi tiam "kaj" ĝin per falsaj.
Ĉi tiu havas la efiki de elŝaltante ke iom.
Do iom críptico tie.
Ni efektive rigardi iom da kodo, kiu povus efektive aspektas eĉ pli kripta,
sed ni rigardu tie en tolower.
Se mi rigardas tolower, irante de ĉefurbo A al minuskla a,
ni vidu kiel ni povus efektivigi ĉi tiun programon.
Jen ĉefa, kaj ĝi ne prenante ajnan komand-linio argumentoj.
Mi deklarante karakteron c por la letero, kiun la uzanto tuj tajpi in
Mi tiam uzi familiara do dum buklo justaj certigi ke la uzanto definitive donas al mi ĉefurbo A
aŭ B aŭ C. .. Z, do ili donas al mi ion inter A kaj Z.
Kaj nun kion mi faras cxi tie?
Mi estas "aŭ" ing ĉi kun 0x20, sed tio estas vere la sama kiel -
kaj ni revenos al tio en momento - 32.
Do denove, 32 estas ĉi ŝablono de bitoj tie. Kial ni scias ĉi tion?
Nur pensu al semajno 0.
Ĉi tiu estas la 1s loko, 2s loko, 4s, 8s, 16s, 32s loko.
Do tiu flava nombro okazas al esti 32.
Mi povas tiam porti leteron kiel la char tie, bitlarĝa "aŭ" ĝi kun laŭvorte la numeron 32,
kaj kion mi reiros? La minuskla versio de tiu char.
Post momento antaŭe, kvankam, mi esprimis tion en alia bazo skribmaniero.
Kion tio reprezentas? >> [Studento] Deksesuma.
[Malan] Tio okazas por reprezenti deksesuma.
Ni ne parolis pri deksesuma cxiuj multe,
sed estas vere konvena en kazoj kiel ĉi tio.
>> Kvankam ĝi aspektas pli kompleksa kaj kvankam ĝi aspektas kiel 20 kaj ne 32,
ĝi rezultas ke deksesuma fakte super konvena notacio
ĉar en deksesuma ĉiu cifero post la 0x - kaj tio signifas nenion;
ĉi tiu estas nur homa konvencio kiu diras tie venas deksesuma nombro -
ĉiu el tiuj ciferoj, la 2 kaj tiam la 0, sin povas esti prezentita
kun precize 4 bitoj.
Do, se ni faras tion, lasu min malfermi tekstoredaktilo tie - bizara autocomplete -
se ni iom tekstoredaktilo tie, la nombro 0x20 signifas ĉi tie estas 4 bitoj, jen alian 4 bitoj.
Ni faros la plej dekstra 4 bitoj unue.
0 kiam reprezentis kun 4 bitoj estas kio? Super facila. Nur ĉiuj _0s_.
Do 4 bitoj kiel _0s_.
Kiel vi reprezentas 2? Jam pasis iom da tempo post kiam ni faris tion, sed estas 0100.
Do ĉi tiu estas la 1s loko, ĉi tiu estas la 2s lokon, kaj tiam ne gravas kion la aliaj lokoj estas.
En aliaj vortoj, en deksesuma vi povus diri 0x20,
sed se vi pensu pri kio estas la 2 kaj kiel estas reprezentita en duuma,
kio estas la 0 kaj kiel estas reprezentita en duuma,
la respondojn al tiuj demandoj estas tio kaj tio, respektive.
Do 0x20 okazas por reprezenti tiun modelon el 8 bitoj,
kiu estas precize la masko kiun ni volis.
Do ĉi tiu estas la momento nur intelekta ekzerco,
sed la realo estas en kodo estas tipe pli komune skribi konstantoj kiel tiu
en deksesuma ĉar tiam la programisto povas relative facile,
eĉ se tio postulas iujn papero kaj krajono, elkompreni kiel tiu ŝablono de bitoj estas
ĉar ne eblas simple esprimi _0s_ kaj _1s_ tipe en kodo.
Vi ne povas iri 00010 ks.
>> Vi devas elekti dekuma aŭ deksesuma aŭ okuma aŭ aliaj notacioj.
Plej multaj homoj emas repreni deksesuma simple por ke ĉiu cifero reprezentas 4 bitoj
kaj vi povas fari tion rapide math.
Kaj mi skuos mian manon je toupper, kiu estas preskaŭ la samaj: ĝi aspektas preskaŭ identaj.
Toupper okazas uzi ne la aŭ operatoro sed prefere tiu ulo kaj df.
Kion df reprezenti? df? Iu? >> [Studento] 255.
255? Ne 255. Tio estus ff.
Ni lasos ĉi tiu kiel iom ekzerco.
Sed se vi iras de 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 kaj tiam kio venas post 9?
Ni estas speco de el decimaloj, sed en deksesuma kio venas post 9?
[Studento] a. >> Do a, b, c, d.
Vi povas kalkuli de tie kio mastro de bitoj d fakte reprezentas.
Kaj se ni faros la math, ni vidos, ke la masko vi finos contrarestar estas identa al tiu.
Tiu estas f, la tuta 1s, kaj ĉi tiu estas d. Do df reprezentas tiun maskon. Bone.
Kaj laste, ne fari tion sonon super, super teknika,
sed supozu ni volis skribi programon kiu faras tion.
Lasu min kaj fari duuma, kiu estas programo en dosiero nomata binary.c.
Kaj nun mi kuros duuma kaj donu al mi nenegativa entjero.
Ni komencu facila kaj tajpu 0.
Tiu nun estas programo kiu presas el entjero en lia duuma reprezento.
Do se mi ludi ĉi tiun ludon denove kaj tajpu en nur 1, mi devus preni 32-bita reprezento de 1.
Se mi faras tion denove kun 2, mi devus preni tion.
Se mi faras 7, mi devus preni kelkajn 1s fine ks.
Ĝi rezultas Mi mencias tion, ĉar kun bitlarĝa operacioj
vi povas reale fari aliajn afero ankaŭ.
Vi povas krei ĉi tiuj maskoj dinamike.
Rigardu ĉi tiu fina ekzemplo engaĝante bitlarĝa operaciojn.
Jen la unua parto de la kodo, instigas la uzanton por nombro,
kaj insistas ke vi donu al mi nenegativa entjero.
Do jen speco de malnova lernejo stuff.
Sed ĉi tie estas iu kiu estas speco de interesa.
>> Kiel mi iros sur presi serion en duuma?
Mi unue persisti el kio al kio?
Kio estas la grandeco de int tipe, almenaŭ en la aparaton? >> [Studento] 4.
Estas 4. Do 4 * 8 estas 32 - 1 estas 31.
Do, se mi komencas rakonti de 31, tio reprezentas, ĝi rezultas,
nur koncepte, la 31 bitoj aŭ la plej alta celo iom, kiu estas tiu ulo super ĉi tie,
dum ĉi tiu tuj estos iom 0.
Do ĉi tiu estas iom 01 ... iom 31.
Do kio estas ĉi tiu kodo faras?
Rimarki tion por ciklo, kvankam ĝi aspektas críptico, estas nur ripetanta el 31 malsupren al 0. Estas tio.
Do la interesa parto nun devas esti en tiuj 5 linioj tie.
Rimarku ke en ĉi tiu lineo mi deklari variablon nomis masko
esti konsekvenca kun nia historio de tiuj flavaj nombroj.
Kaj poste kio ĉi faras?
Tio estas alia bitlarĝa operatoro ni ne vidis antaŭe, plej verŝajne.
Estas la maldekstra skipa operatoro.
Ĉi operatoro tion faras.
Jen estas la nombro 1, kaj se vi faras i forlasis ŝanĝo, maldekstra movo,
kion vi opinias ke ĝi havas la efiki de farante al tiu individua 1?
Laŭvorte sxangxigxantaj aferon.
Do se la nombro 1 estas kion vi havas sur la maldekstra kaj vi komencos per inicializar i al 31,
kio ke tuj fari? Oni tuj prenos ĉi tiu numero 1 kaj ŝanĝi ĝin 31 lokoj super tie.
Kaj ĉar estas evidente neniu alia ciferoj malantaŭ ĝi,
tiuj estos defaŭlte esti anstataŭita per _0s_.
Do vi komencos evi la numeron 1, kiu kompreneble aspektas kiel tiu -
kaj lasu min eltiri ĝin ĉi tie en la centro.
Kaj tiam kiel vi ŝanĝi aferojn al la maldekstra, this guy esence iras tiamaniere.
Sed tuj kiam vi faras tion, 0 gets plenigis in
Se vi ŝanĝi ĝin duafoje, ĝi iras tien kaj alia 0 gets plenigis in
>> Vi ŝanĝi ĝin denove kaj tiam alia 0 gets plenigis in
Do, se vi tion faros el 1 << i 31 lokoj, vi finos duumaj masko
tio estas 32 signojn longa, la plej maldekstra unu el kiuj estas 1,
ĉiuj de la resto de kiuj estas 0.
Kaj ĝi rezultas, kiel flanken, ŝanĝante numero al la maldekstra kiel tiu
Ankaŭ hazarde, kaj kelkfoje oportune,
havas la efiki de farante kion tiu numero? >> [Studento] Dublante ĝin.
Dubli ĉar ĉiu kolono - la 1s loko, 2s loko, 4s loko,
8s loko, 16s loko - they're ĉiuj duobligo kiel vi iros maldekstren.
Aŭ pli ĝuste, kiam vi ŝanĝi la 1s vi tuj finos duobligante la valoron de la nombro.
Vi povas fini faras interesan transformoj de ciferoj
per movo ĉio super tiamaniere per potencoj de 2.
Do kiel faras ĉi tiu laboro?
Ĉi tiam donas al mi masko kiu estas ĉio _0s_ krom 1 en precize la lokon mi volas ĝin,
kaj tiam ĉi tiu esprimo, kiu estas ŝtelita de toupper.c,
Estas simple diri preni la nombro n kiu la uzanto tajpas en,
"Kaj" ĝin kun tiu masko, kaj kion vi intencas akiri?
Vi ricevos de 1 se estas 1 en tiu maskita situo,
aŭ vi tuj ricevas 0 se ne.
Kaj tial ĉiuj ĉi programo ne efektive estas ĝi havas buklo,
kaj ĝi kreas masko kun 1 pli tie, tiam 1 pli tie, tiam 1 pli tie,
kaj uzas ĉi bitlarĝa KAJ lertaĵo por diri ĉu estas a 1 bito en la uzanto enigo tie?
>> Ĉu estas a 1 bito en la uzanto enigo tie? Kaj se jes, laŭvorte presi 1, alie presi 0.
Ni faras tion kun ints nur ĉar tio estas kial ni faras 32 bitoj anstataŭ 8,
sed kion ni enkondukis do estas ĉi bitlarĝa KAJ, ĉi bitlarĝa _OR_,
kaj ĉi maldekstra skipa operatoro, kiu estas ne ofte terure helpema,
sed ĝi rezultas ke ili povas esti.
Fakte, se vi estus por reprezenti iun kiel tabelo de Booleans
nur por reprezenti vera aŭ falsa, supozas ke vi volis konservi trako de ĉu ĉu ne
ĉambron plenan de 300 lernantoj ĉeestas,
vi povus deklari tabelo de grandeco 300 de tipo bool tiel ke vi ricevas 300 bools,
kaj vi povas agordi ĉiun al vera se iu estas cxi tie kaj falsaj alie.
Kial estas ke reprezento en tiu datumstrukturo ineficiente?
Kio estas malbona pri la dezajno de tiu datumstrukturo, tabelo de 300 bools?
Kio estas bool, fakte, sub la kapuĉo?
Ĉi tio, ankaŭ, estas iu kiu povus ne esti konata.
Ĝi rezultas ne ekzistas bool.
Memoru ni ia kreis tiun kun la cs50.h dosiero,
kiuj sin inkluzivas normo bool.
C estas speco de mutaj, tamen, kiam temas pri bool.
Ĝi uzas 8 bitojn por reprezenti ĉiun bool, kiu estas tute malŝparo
ĉar evidente, kiom da bitoj vi bezonas por reprezenti bool? Nur 1.
Do rezultas ke se vi nun havas la kapablon kun bitlarĝa operatoroj
manipuli individuaj bitoj eĉ en char, eĉ en sola bajto,
rezultu vi povus malgrandiĝi la memoro necesa por reprezenti ion stulta
kiel tiu asistencia styled datumstrukturo per faktoro de 8.
Anstataŭ uzi ok bitoj por reprezenti vera aŭ malvera, vi povus laŭvorte uzi unu
uzante nur bajton por cxiu ok studentoj en la klaso
kaj toggling de 0 al 1 individuaj bitoj por uzi ĉi tiuj specoj de malalta nivelo trukojn.
Tio vere ĉesigis la energio. Ĉu estas demandoj pri bitlarĝa operacioj?
>> Yeah. >> [Studento] Ĉu estas ekskluziva aŭ operatoro?
Jes. Tie estas ekskluziva aŭ operatoro kiu similas tiun, ^, la karoto simbolo,
kio signifas nur la unua horo aŭ la dua afero povas esti 1 por la eligo esti 1.
Estas ankaŭ ne, ~, kion permesos al vi inversigi a 0 al 1 aŭ inverse kiel bone.
Kaj estas ankaŭ dekstra skipa operatoro, >>, kiu estas la malo de la ni vidis.
Bone. Ni prenu tion nun al pli alta nivelo.
Ni komencas per paroli pri teksto kaj tiam kunpremante ĝin
kaj reprezentante la tekston kun malpli nombroj de bitoj;
ni parolis iom pri kiel ni povas nun starti manipulanta aĵoj sur bitlarĝa nivelo.
Ni nun zoom back up 10.000 piedojn reprezento
de pli kompleksaj aĵoj kiel grafikaĵoj.
Jen ni havas flago de Germanio, tie ni havas unu el Francio.
Tiuj povus esti reprezentita en formatoj vi eble scias - gifs, ekzemple.
Se vi iam vidis bildon en la retejo kiu enfluas en. Gif,
ĉi tiu estas grafika interŝanĝo formato.
Tiuj du flagoj tie ia pruntas al kunpremo
por kio eble evidenta kialo? >> [Inaudible studento respondon]
Ekzistas multe da ripetado, ĉu ne?
Por sendi la germana flago, pensu pri ĉi tion kiel esti bildo sur la ekrano
apogi en via Scratch tagoj.
Vi povus memori ke estas individuaj rastrumeroj aŭ punktoj kiuj formas bildon.
>> Ekzistas tuta vico de nigraj punktoj kaj alia tuta vico de nigraj punktoj.
Ekzistas aro da vicoj de nigraj punktoj, ke ni povus vidi se ni vere zoomed en,
multe kiel kiam ni zoomed en sur Rob vizaĝon en Photoshop.
Tuj kiam ni atingis pli kaj pli profunden kaj pli profunden en la bildo,
vi komencis vidi la pixelation, ĉiuj de la kvadratoj kiuj formis lian okulon en tiu kazo.
Sama traktado ĉi tie. Se ni zoomed en sufiĉe, vi vidus individuaj punktoj.
Nu, jen speco de malŝparo de bitoj.
Se triono de la flago estas nigra kaj triono de la flago estas flava kaj tiel plu,
kial ne povas ni iel kunpremi ĉi flago?
Kaj eĉ la franca flago povis kunpremita kvankam la ŝablono estas iomete malsamaj.
Rezultas la GIF-dosiero formato estas _lossless_ kompakta formato,
kio signifas ke vi povas preni bildon kiel la germana flago tie,
vi povas forĵeti multe da liaj bitoj sen oferi kvalito.
Ĉi tiu estas en kontrasto kun iu kiel JPEG-oj,
kun kiu la plimulto de ni estas probable pli familiara.
Facebook fotoj kaj Flickr fotoj kaj similaj
estas preskaŭ ĉiam savis kiel JPEG-oj kiam ili estas alŝutis,
sed JPEG-oj estas perdoj - Lossy - formato per vi forĵetu bitoj
sed vi ankaŭ forĵeti kvalito.
Kaj do se vi kunpremi fotoj kun Photoshop aŭ alŝuti ilin al Facebook
aŭ preni ilin sur vere sterko telefono,
vi scias, ke la bildo komencas akiri tre splotchy kaj pixelated,
kaj tio estas ĉar ĝi estas esti kompresita por la komputilo aŭ telefono
per laŭvorte ĵeti informoj for.
Sed GIF estas mirinda en tiu povas uzi malpli da bitoj ol forto defaŭlte
sen perdi iun informon.
>> Kaj esence faras jene.
Anstataŭ vendejo en dosiero kiel BMP would RGB triobla por nigro, nigra, nigra, nigra,
nigraj, nigraj, nigraj, nigraj, nigraj, nigraj, nigraj, nigraj kaj tiel plu,
pli ĝuste, la GIF formato tuj diru "Nigra",
kaj tiam, "Ripetu tiun 100 fojojn," aŭ io simila.
"Nigra, ripeti ĉi 100 fojojn, nigra, ripeti ĉi 100 fojoj ..."
"Flava, ripeti ĉi 100-foje."
Kaj tiel memoras, esence, la plej maldekstra rastrumeroj
kaj tiam kodas iel la nocio de ripeti ke rastrumeroj denove kaj denove.
Do gifs povas tiam kunpremi sin sen perdi iun informon.
Sed se vi devis diveni, se tiu estas la algoritmo kiu gifs uzo,
kiu el tiuj flagoj, kvankam ili aspektas identa en grandeco,
tuj estos pli malgranda kiam savis en disko kiel GIF? >> [Studento] Germanio.
Germanio tuj estos pli malgranda? Kial?
[Studento] Ĉar vi ripetas multfoje horizontale
kaj tiam vi ripetu alia tempo. >> Ekzakte.
Ĉar la homoj kiuj elpensis GIF nur speco de arbitre decidis
ke la ripeto estos leveraged horizontale kaj ne flanke.
Estas multe pli ripeto flanke tie en la germana flago ol en la franca flago.
Do, se ni vere malfermi dosierujon sur mia malmola disko kiu havas tiujn gifs,
vi povas fakte vidi ke la germana flago tie estas 2 kilobajtoj kaj la franca estas 4 kilobajtoj.
Okazas ke estas koincido ke unu estas dufoje la alia,
sed estas fakte la kazo ke la franca flago estas multe pli granda.
>> Kvankam ni parolas tie ĉi pri grafiko, la samaj ideoj povas apliki al
ne aĵojn kiel flagoj sed bildojn kiuj estas iom pli kompleksa.
Se vi fotu pomon, certe ekzistas multaj duobligo tie,
do ni povus iel memoras ke la defaŭlta fono estas blua
kaj ne, kiel la dekstra bildo sugestas,
devas memori la koloro de ĉiu unuopa rastrumeroj en ĉi foto.
Do ni povas ĵeti bitoj for tie sen perdi informojn.
La pomo ankoraŭ aspektas precize la sama.
En ĉi tiu ekzemplo tie ĉi, eble vi vidos kio okazas en filmo.
Tiuj reprezentas la malnova lernejo filmo bobenoj per la supro bildo tie
vi havas RV kondukado pasinteco domon kaj arbo.
Kaj kiel tiu iras pelas pasinteco de maldekstre al dekstre, kio evidente ne ŝanĝi?
La domo ne tuj ie, kaj la arbo estas iras nenien.
La sola afero, kiu moviĝas estas la kamioneto en ĉi tiu kazo.
Do kiel Fona neŝanĝita sugestas, kion vi povas fari en filmoj
Estas simile simple forĵeti informon kiu ne ŝanĝas en inter kulisoj.
Ĉi tiu estas ĝenerale konata kiel interframe kunpremo
per se ĉi tiu kadro aspektas preskaŭ identa al ĉi tiu,
ni ne tedis stokante en disko iu el la identa informoj
pri tiuj interaj kadroj, ni nur uzas ŝlosilo kadroj tempaltempe
ke efektive stoki tiun informon redundantly same iom prudento kontroli.
>> Kontraŭe, alia alproksimiĝo al kunpremante video estas en ĉi tiu dua kaj suba ekzemplo tie ĉi,
kie anstataŭ vendejo 30 kadroj, kial vi ne simple stoki 15 kadroj por dua loko?
Anstataŭ la filmo speco de fluanta bele, perfekte,
eble aspektas kiel ĝi estas balbutas iom, iom malnova lernejo,
sed la pura efekto estos uzi multe malpli ol bitoj povus alie esti necesa.
Do kie tio ĉi do lasu nin?
Tio estis iom de flanken sur kie ajn vi povas iri per kunpremo.
Por pli sur tiu, preni klaso kiel CS175 tie.
Jen alia ekzemplo ene video.
Se la abelo estas la sola afero movanta,
vi povas vere forĵeti informoj en tiuj mezo kadroj
ĉar la floro kaj ĉielo kaj folioj ne ŝanĝas.
Sed ni nun konsideras unu lastan aferon.
En la sekvaj 5 minutoj ni lasas C malantaŭ ĉiam en prelego? Jes. Ne en la psets, though.
Lasta rakonto pri C kaj tiam ni atingos tre sexy stuff
engaĝante HTML kaj retejo kaj woo-hoo. Bone.
Ĉi tie ni iru. Tio estas la motivado.
Ĝi rezultas tiel tempo kiam ni estis skribante programoj ni kuras Clang.
Kaj Clang, ni diris ekde la unua semajno preskaux, prenas fontokodo
kaj konvertas ĝin en celkodo.
Ĝi prenas C kaj konvertas ĝin en _0s_ kaj _1s_.
Mi ia kuŝis kun vi dum kelkaj semajnoj pro tio ne tiom simpla.
>> Estas multe pli okazas sub la kapuĉo, kiam vi kuris de programo kiel Clang.
Fakte, la procezo de kompili programo povas vere resumi,
kiel vi eble memoras de Rob la video sur tradukiloj,
en tiuj 4 paŝoj: antaŭ-prilaborado, kompilante, ariganta, kaj kunligi.
Sed ni en la klaso kaj plej multaj homoj en la mondo tipe resumi ĉiuj tiuj ŝtupoj
kiel simple "kompili".
Sed se ni komencos kun fontkodo kiel ĉi tiu, memori ĉi estas eble la plej simpla C programon
ni skribas tiel malproksime, memori ke kiam kompilis finu rigardante kiel ĉi tio.
Sed estas vere intera paŝo, kaj tiuj paŝoj estas kiel sekvas.
Unue estas tio afero ĉe la plejsupro de ĉi tiu kaj la plimulto de niaj programoj,
# Include
Kion # include do por ni?
Ĝi sufiĉe kopioj kaj pastes la enhavo de stdio.h en mian dosieron por ke kial?
Kial mi zorgas pri la enhavo de stdio.h? Kio estas en tie de intereso?
Printf deklaro, lia prototipo, por ke la tradukilo do scias, kion mi volas diri
kiam mi mencias ĉi funkcio printf.
Do paŝo 1 en kompili estas antaŭ-prilaborado, per programo kiel Clang
aŭ iu helpanto programo kiu Clang venas kun legas viajn kodo supre sube,
maldekstre dekstren, kaj iam vidas # simbolo sekvis per ŝlosilvorto kiel inkluzivas,
ĝi plenumas ke operacio, kopii kaj bati en ĉi tiu kazo stdio.h en vian dosieron.
Tio estas paŝo 1.
Tiam vi havas multe pli grandan C dosieron pro la grandega kopion, alglui Tasko nur okazis.
>> Paŝo 2 nun kompili.
Sed ĝi rezultas kompili prenas fontkodon kiu similas tiun
kaj li igas iun kiu aspektas kiel ĉi tiu,
kiu por tiuj, kiuj konas nomas? >> [Studento] Asembleo. >> Asembleo lingvo.
Tio estas vere io se vi prenos CS61 vi plonĝi en pli detale.
Tio estas preskaŭ kiel fermi kiel vi povas alveni al skribi _0s_ kaj _1s_ mem
sed skribi tion en tia maniero, ke ankoraŭ faras almenaŭ iomete da senco.
Tio estas maŝino instrukciojn, kaj se ni rulu suben ĝis la ĉefa funkcio ĉi tie,
rimarki, ke ekzistas tiu puŝo instrukcio, movi instrukcio, subtrahi instrukcio,
voki instrukcio, kaj tiel plu.
Kiam vi aŭdos, ke via komputilo havas Intel ene,
vi havas Intel CPU en via Mac aŭ PC, kion tio signifas?
Al CPU venas konstruita de kompanioj kiel Intel kompreni iujn instrukciojn.
Ili ne havas ideon kion funkciojn kiel interŝanĝa estas aŭ ĉefa estas per si mem,
sed ili scias kio tre malalta nivelo instrukcioj kiel aldoni, subtrahi, push,
movi, nomita ks estas.
Do kiam vi kompili C kodon en asembla lingvo,
viaj tre amikaj uzanto-aspekta kodo estas igita iu kiu aspektas kiel ĉi tiu,
kiu laŭvorte movas bitokoj aŭ 4 bitokoj ĉirkaŭe en tia malgranda unuoj ene kaj ekstere de la CPU.
Sed fine, kiam Clang pretas preni tiun reprezenton de via programo
en _0s_ kaj _1s_, tiam la paŝo nomis ensamblando okazas,
kaj ĉi denove ĉio okazas en la blink de okulo al la kuri Clang.
Ni komencas tie, ĝi eligas dosieron kiel ĉi tiu, kaj tiam ĝi konvertas ĝin al tiuj _0s_ kaj _1s_.
Kaj se vi volas reiri al iu punkto kaj reale vidas ĉi tion en ago,
se mi iros en hello1.c--ĉi estas unu el la unuaj programoj ni rigardis -
kutime ni kompilos tion kun Clang hello1.c kaj ĉi tio donas al ni a.out.
Se kontraste vi anstataŭ doni al ĝi la-S flago, kion vi ricevos estas hello1.s
kaj vi reale vidi la asembla lingvo.
>> Mi faras tion por tre mallonga programo, sed se vi reiros por Scramble
aŭ reakiri aŭ ajna programo vi skribis kaj nur pro scivolemo
volas vidi kio reale similas, kio reale esti nutrata en la CPU,
vi povas uzi tiun-S flago kun Clang.
Sed tiam laste, ekzistas ankoraŭ unu gotcha.
Jen la _0s_ kaj _1s_ kiuj reprezentas mian efektivigo de saluton, mondo.
Sed mi uzis iu alia funkcio en mia programo.
Do kvankam la procezo estis mi prenos hello.c,
ĝi prenas kompilita en asembleo kodo, kaj poste ĝi prenas kolektiĝis en _0s_ kaj _1s_,
la sola _0s_ kaj _1s_ kiuj outputted je ĉi tiu punkto en tempo
estas kiuj rezultas el mia kodo.
Sed la persono, kiu skribis printf, ili kompilis sian kodon 20 jaroj
kaj ĝi estas nun instalita ie sur la aparaton,
do ni iel devas mem kunfandi sia _0s_ kaj _1s_ kun mia _0s_ kaj _1s_,
kaj kiu alportas al ni la 4a kaj lasta paŝo de kompili, konata kiel kunligi.
Do sur la maldekstra flanko havas la ĝusta sama bildo kiel antaŭe:
hello.c igas asembleo kodo igas _0s_ kaj _1s_.
Sed memoru, ke mi uzis la normo / S biblioteko en mia kodo,
kaj tio signifas ie en la komputilo ekzistas dosiero nomata stdio.c
aŭ almenaŭ la kompilita versio gxiaj ĉar iu kelkajn jarojn antaŭe
kompilita stdio.c en asembleo kodo kaj tiam tuta amaso de _0s_ kaj _1s_.
Tio estas kio konata kiel statika aŭ dinamika biblioteko.
Estas iuj dosieron sidis ie en la aparaton.
>> Sed laste, mi devas preni mian _0s_ kaj _1s_ kaj tiu persono _0s_ kaj _1s_
kaj iel ligi ilin kune, laŭvorte kombini tiujn _0s_ kaj _1s_
en sola dosiero nomata a.out aŭ hello1 aŭ kion ajn mi nomis mia programo
tiel ke la fina rezulto havas ĉiujn 1s kaj _0s_ kiu devus formi mian programon.
Do ĉio ĉi tempo ĉi semestro kiam vi estis uzante Clang
kaj eĉ pli ĵus kuras fari por kuri Clang,
ĉiuj el tiuj paŝoj ili okazas ia instantáneamente sed tre intence.
Kaj do se vi daŭrigas sur en komputiko, nome CS61,
ĉi tiu estas la mantelo ke vi daŭre senŝeligi reen ekstere tie
parolante pri efikeco, sekureco implikaĵoj, kaj similaj de tiuj malsupera nivelo detaloj.
Sed kun tio, ni estas irontaj C malantaŭe.
Ni iru antaŭen kaj prenu nian 5-minuta paŭzo nun,
kaj kiam ni revenos: Interreto.
Bone. Ni estas dorso.
Nun ni komencas nian rigardon ne nur en HTML ĉar, kiel vi vidas,
HTML mem estas fakte bela simpla
sed vere en retejo programado pli ĝenerale, retoj pli ĝenerale,
kaj kiel ĉiu el tiuj teknologioj kunfluos
por permesi al ni krei multe pli kompleksajn programojn sur de la Interreto
ol ĝis nun ni povis en tiuj nigraj kaj blankaj fenestroj.
Ja, en ĉi tiu punkto en la semestro kvankam ni elspezos relative malpli da tempo
en PHP, HTML, CSS, JavaScript, SQL kaj pli,
plej lernantoj fari finas faras finon projektoj kiuj estas ttt-bazita
ĉar kiel vi vidas, la fono vi nun havas en C
estas tre aplikebla al tiuj pli altnivelaj lingvoj.
>> Kaj kiel vi starti pensante pri via fina projekto,
kiu, multe kiel Problemo Ara 0, kie vi kuraĝigis
fari preskaŭ kion ajn de intereso al vi en Scratch,
la fina projekto estas via ŝanco por preni vian ĵus malkovrita scio kaj savvy kun C
aŭ PHP aŭ JavaScript aŭ similaj ekster di spino
kaj krei viajn tre propra peco de programaro por la mondo por vidi.
Kaj al semoj vi kun ideoj, sciu ke vi povas direkti tie, projects.cs50.net.
Ĉiu jaro, ni petas ideojn de fakultato kaj bastonon kaj studento grupoj sur kampuso
nur por submeti siajn ideojn por interesaj aĵoj kiuj povus esti solvita uzanta komputiloj,
uzante retejoj, uzante programaro.
Do se vi luktas por veni supren kun ideo de via propra,
por supozita rulumi tra la ideoj tie ĉi jaro kaj daŭras.
Estas perfekte bone por pritrakti projekto kiu estis traktitaj antaŭe.
Ni vidis multajn apps por vidi la staton de lesivejo sur campus,
multaj apps por navigi la manĝejo menuo,
multaj apps por navigi la kurso katalogo kaj similaj.
Kaj efektive, en estonta konferenco kaj en estonteco seminarioj,
ni enkondukos vin al iu publike havebla API, ambaŭ komerce havebla
tiel kiel tie disponeblaj de CS50 la campus por ke vi havas aliron al la datumoj
kaj povas fari interesajn aferojn kun ĝi.
Do pli en fino projektoj en kelkaj tagoj kiam ni liberigos la specifo,
sed por nun, sciu ke vi povas labori sole aŭ kun unu aŭ du amikoj
sur plej ajna projekto de intereso al vi.
Interreto.
Vi antaŭeniri kaj eltiri via portebla, iru al facebook.com por la unua fojo,
ne esti ensalutinta ĵus, kaj poste premu butonon Enter. Kion ekzakte okazas?
>> Kiam vi batis Entajpu en via komputilo, tuta aro da paŝoj
komenci ia magie okazas.
Do vi tie sur la maldekstra, retservilo kiel Facebook estas ĉi tie sur la dekstra,
kaj iel vi uzas ĉi lingvo nomata HTTP, Hipertextual Transfer Protocol.
HTTP estas ne programlingvo. Estas pli de protokolo.
Ĝi estas aro de konvencioj, ke TTT-legiloj kaj ttt-serviloj uzas kiam intercommunicating.
Kaj kion tio signifas estas kiel sekvas.
Multe kiel en la reala mondo, ni havas ĉi tiujn konvenciojn
kie se vi renkontas iun homa por la unua fojo, se vi ne ĝenas humoring min ĉi tie,
Mi ne venis al vi, diru: "Saluton, mia nomo estas David." >> Saluton, Davido. Mia nomo estas Sammy.
"Saluton, Davido. Mia nomo estas Sammy."
Do nun ni jxus partoprenis en ĉi tia stulta homo protokolo
kie mi komencis la protokolo, Sammy respondis,
ni skuis manon, kaj la transakcio estas kompleta.
HTTP estas tre simila en spirito.
Kiam via retumilo petoj www.facebook.com,
kion via retumilo estas vere faras estas etendante lia mano, por tiel diri,
al la servilo kaj ĝin sendi ĝin mesaĝon.
Kaj tiu mesaĝo estas tipe iu kiel get - Kion vi volas? -
min la hejmpaĝo, kiu estas tipe signifita per sola oblikvo fine de URL.
Kaj ĝuste tial vi scias kiu lingvo mi parolas, mi la retumilo tuj rakontos al vi
ke mi parolas HTTP versio 1.1,
Kaj ankaŭ por bonan mezuron, mi tuj diros al vi ke la gastiganto, ke mi volas la hejmpaĝo de
estas facebook.com.
Tipe, retumilo, Sen scii al vi, la homo,
sendas ĉi tiun mesaĝon tra la Interreto, kiam vi simple tajpi www.facebook.com,
>> Enter, en via retumilo.
Kaj kion tio Facebook respondi kun?
Ĝi respondas kun iu simila aspekto críptico detaloj sed ankaŭ multe pli.
Lasu min al Facebook ĉefpaĝon ĉi tie.
Ĉi tiu estas la ekrano ke la plimulto el ni probable neniam vidos se vi restas ensalutinta tuta tempo,
sed ĉi tiu estas ja ilia hejmpaĝo.
Se ni faras tion en Chrome, rimarkos, ke vi povos tiri tiujn iom kuntekston menuoj.
Uzanta Chrome, ĉu en Mac OS, Vindozo, Linukso, aŭ similaj,
se vi Kontrolo klako aŭ maldekstra klako, oni povas tipe elsxiros menuo kiu similas tiun,
kie kelkaj ebloj atendi, unu el kiuj estas Montri Paĝo Fonto.
Vi povas ankaŭ tipe atingos tion irante al la Montri menuon kaj ŝovas ĉirkaŭe.
Ekzemple, jen sub View, Developer estas la sama afero.
Mi tuj iros antaŭen kaj rigardu Montri Paĝo Fonto.
Kion vi vidas estas la HTML kiu Mark skribis por reprezenti facebook.com.
Estas kompleta salaton tie, sed ni vidos ke tio igas iom pli sentita antaŭ longe.
Sed estas iuj ŝablonoj ĉi tie. Lasu min rulumi malsupren al plenigos ŝatas tion.
Tio estas malfacile por homa legi, sed rimarkas ke estas tio mastro de angled krampoj
kun ŝlosilvortoj kiel eblo, ŝlosilvortoj kiel valoro, iuj quoted kordoj.
Tie estas kie, kiam vi subskribis ĉe la unua fojo, specifita kion via naskiĝo jaro estas.
Ke falmenuo de naskiĝo jaroj iel kodas tie
en tiu ĉi lingvo nomata HTML, hiperteksta Markup Language.
En aliaj vortoj, kiam via retumilo petas retpaĝon,
ĝi parolas ĉi konvencio nomata HTTP.
Sed kion signifas facebook.com respondi al tiu peto kun?
>> Ĝi respondas kun iuj de tiuj críptico mesaĝojn, kiel ni vidos en momento.
Sed la plejparto de ĝia respondo estas en la formo de HTML, hiperteksta Markup Language.
Tio estas la reala lingvo en kiu retpaĝo estas skribita.
Kaj kia foliumilo ja do, sur ricevo de iu kiu aspektas kiel ĉi tiu,
legas supre sube, maldekstre dekstren, kaj iam vidas unu el tiuj angled krampoj
sekvate de ŝlosilvorto kiel eblo, ĝi montras ke markado lingvo en la taŭgan vojon.
En ĉi tiu kazo, estus montri al falmenuo da jaroj.
Sed denove, tio estas kompletan malordon por rigardi.
Tio ne estas ĉar Facebook programistoj manifestas 0 por 5 por stilon, ekzemple.
Tiu estas ĉar la plejparto de la kodo kiun ili skribas estas, fakte, skribita bele,
bone dirita, bonguste dentado, kaj similaj,
sed kompreneble maŝinoj, komputiloj, kroziloj vere ne fajfas
ĉu via kodo estas bone-styled.
Kaj fakte, ĝi estas tute malŝparo bati la langeton ŝlosilo ĉiuj tiuj epokoj
kaj meti komentojn ĉiuj viaj kodo kaj elekti vere priskriba variablo nomoj
ĉar se la retumilo ne zorgas, ĉiuj vi faras al la fino de la tago estas malŝparas bajtoj.
>> Do rezultas kio plej retejoj fari estas kvankam la fontkodon por facebook.com,
por cs50.net kaj ĉiuj tiuj aliaj retejoj en Interreto
estas tipe bone skribita kaj bone dirita kaj bele dentado kaj similaj,
tipe antaux la retejo estas metita sur la Interreto, la kodo estas minified,
per la HTML kaj la CSS - ion alian ni baldaŭ vidos -
la kodo JavaScript ni baldaŭ vidos kunpremas,
per longa variablo nomoj fariĝis X kaj Y kaj Z,
kaj ĉiuj de tiu spaceto, kiu faras ĉion tiel legebla estas ĉiuj forĵetis,
ĉar se vi opinias pri tio ĉi maniero, Facebook ricevas miliardoj paĝo batas unu tago -
ion frenezan tiel - tiel kion se programisto nur esti anal
batis la spaco trinkejo unu ekstra tempo nur por indent iu linio de kodo iam tiel pli?
Kio estas la implikacio se Facebook konfitas ke spaceto
en ĉiuj bitokoj ili redonu al homoj sur la interreto?
Bati la spaco trinkejo fojo donas ekstran bajto en via dosiero.
Kaj se miliardo da homoj tiam procedi por elŝuti la hejmpaĝo tiu tago,
kiom pli datumoj vi transdonita en la Interreto?
Al gigabajto sen bona kialo.
Kaj donis, por multaj retejoj ĉi tio ne estas tiom skalebla afero,
sed por Facebook, por Google, por iu el la plej popularaj retejoj
ekzistas granda stimulo finance fari vian kodo aspektas kiel salaton
por ke vi uzas kiel malmultaj bitokoj kiel eble krom tiam kunpremante ĝin
uzante iun kiel zip, algoritmo nomita gzip,
ke la retumilo faras por vi aŭtomate. Sed tio estas terura.
Ni neniam lernos ion pri fremdaj retejojn kaj kiel desegni retpaĝoj
se ni devas rigardi ĝin kiel ĉi tio.
>> Do feliĉe, retumiloj kiel Chrome kaj IE kaj Firefox tiujn tagojn
tipe venas kun enkonstruita en programisto iloj.
Fakte, se mi iros tien por Esploru Elemento aŭ se mi iras al Rigardi, Developer,
kaj iru al Developer Agordoj eksplicite,
tiun fenestron ĉe la fundo de mia ekrano nun Popoj supren.
Ĝi estas iom timiga unue ĉar ekzistas multe da nekonataj langetoj tie,
sed se mi alklaku Elementoj tuta vojo ĉe la malsupro maldekstro,
Chrome estas evidente tre saĝa. Ĝi scias kiel interpreti ĉio ĉi kodon.
Kaj tiel kion Chrome faras estas ĝi purigas la tutan de Facebook HTML.
Kvankam tie ne estas spaceto tie, tie ne estas deŝovon tie,
nun rimarkas, ke mi povas komenci navigi ĉi retpaĝo des pli jerárquicamente.
Rezultas, ke ĉiu retpaĝo skribita en lingvo nomita HTML5 devus komenci per tio,
ĉi DOCTYPE deklaro, por tiel diri: <! DOCTYPE html>
Estas speco de lumo kaj griza tie, sed tio estas la unua linio de kodo en tiu dosiero,
kaj ke nur rakontas la retumilo, "Hej, jen venas iu HTML5. Jen venas retpaĝo."
La unua malferma krampo preter tiu hazarde estas tiu afero, malferma krampo HTML tag,
kaj poste, se mi plonĝi en profundan - tiuj sagoj estas tute sensignifa;
ili nur por prezento, kalkaj, ili ne estas reale en la dosiero -
rimarki, ke ene de Facebook HTML tag, io kiu komencas kun malferma krampo
kaj tiam vorto nomiĝas etikedo.
Do ene de la HTML-etikedo estas ŝajne kapo etikedo kaj korpo etikedo.
Ene de la kapo etikedo nun estas tuta salaton ĉe Facebook
ĉar ili havas multajn pridatumon kaj aliaj aĵoj por marketing kaj publikeco.
>> Sed se ni rulumu malsupren, suben, suben, suben, vidu kie estas. Jen ĝi.
Ĉi tiu estas almenaŭ iom familiara.
La titolo de Facebook ĉefpaĝon, se vi iam rigardas en la langeton en via titolo trinkejo,
Estas Bonvenon al Facebook - Log In, Membriĝi aŭ Lerni pli.
Tio estas kion vi vidus en Chrome titolo trinkejo,
kaj tiel estas kiel ĝi estas reprezentita en kodo.
Se ni ignoras ĉion alian en la kapo, la plejparto de la intestoj de paĝo retejo estas en la korpo,
kaj tio rezultas ke Facebook kodo tuj serĉos pli kompleksa
ol la plimulto tion ni skribas komence nur ĉar ĝi estas konstruitaj super la jaroj,
sed ekzistas tuta amaso de skripto etikedoj, JavaScript kodo,
kiu faras la retejo tre interaga:
vidante stato ĝisdatigoj instantáneamente uzante lingvoj kiel JavaScript.
Estas io nomata div, kiu estas divido de artikolo.
Sed antaŭ ol atingi tiun detalon, ni provu malzomi
kaj rigardi pli simplan version de Facebook 1.0, por tiel diri.
Jen la saluton, mondo de retpaĝoj.
Ĝi havas tiun DOCTYPE deklaro ĉe la plejsupro
kiu estas iom malsama ĉio alia.
Nenio pli ni skribu en retpaĝo tuj komenci kun <! krom tiun linion tie
kaj krom iu nomita komentoj en HTML.
Sed plejparte, ĉiu en retpaĝo estas malferma krampo, ŝlosilvorto, proksime krampo.
>> En ĉi tiu kazo vi vidas la plej simpla el retpaĝoj eblas.
La HTML tag enhavas kapo etikedo kaj enhavas korpo etikedo,
sed rimarkas ke estas tiu nocio de startanta kaj haltante etikedoj.
Ĉi tiu estas la komenco etikedo por HTML, ĉi tiu estas la proksima tag aŭ fino etikedo.
Rimarku ke ili estas speco de kontraŭaj en la senco ke la proksima tag aŭ fino etikedo
tio ĉi antaŭen slash interne de mem.
Dume, estas malfermita kapo etikedo tie kaj proksima kapo etikedo tie.
>> Estas malfermita titolo kaj proksima titolo etikedo tie.
La fakto ke mi metis la titolon en unu linio, pure arbitra.
Simple aspektis kiel ĝi taŭgus bele en unu linio, do mi ne tedis bati Entajpu paron foje.
Dume, la korpo, mi faris indent nur esti cxiam tiom klara.
Rimarku ke HTML estas bela muta lingvo.
Fakte, tie en la tago antaŭ ol estis WYSIWYG redaktiloj
kaj Microsoft Word, kie vi povas diri, "Faru ĉi kuraĝa, klarigu kursivo,"
vi fakte tajpi iom ordonojn en eseoj 20 + jaroj
per vi dirus, "Start farante ĉi tiu teksto grasaj. Ĉesu farante ĉi tiu teksto grasaj."
"Komenci realigi tiun tekston kursive. Ĉesu farante ĉi tiu teksto kursivo."
>> Tion HTML aŭ iu ajn markado lingvo estas.
Ĉi tiu unua etikedo diras, "Hej, foliumilo. Jen venas iu HTML."
La venonta tag diras, "Hej, foliumilo. Jen venas la kapo, la kaplinio de mia retpaĝo."
"Hej, foliumilo. Jen venas la titolo."
Kaj tiam tie, "Hej, foliumilo. Estas tio por la titolo."
Do jen kiel la retumilo scias ne plu montras pli signoj ol saluton, mondo
en la titolo trinkejo.
Dume, tiu diras, "Tio estas por la kapo."
Ĉi tio diras, "Jen venas la korpo. Jen la efektiva korpo" - laŭvorte, la vortoj saluton, mondo.
Kaj tion diras ĉi tie, "Tio estas por la korpo. Estas tio por la HTML."
Do foliumiloj estas bela muta.
Ili nur legi tiun stuff supre sube, maldekstre dekstren, kaj faru precize kion ili diras al li.
Ni efektive fari iom ekzemplo tie.
Lasu min malfermi la plej simpla de programoj sur mia Mac ĉi tie, nome TextEdit.
En Windows vi povus uzi Notepad.exe.
Sed tio estas ĉio kion vi bezonas por komenci farante retpaĝoj.
Mi tuj iros antaŭen kaj nur kopii kaj alglui ĉi tiun kodon al ĉi tiu dosiero.
Mi tuj iros antaŭen per ĝi sur mia labortablo,
kaj mi tuj por savi ĉi tiun kiel hello.html,
kaj nun la dosiero nomata hello.html.
Jen ĝi en mia labortablo.
Permesu al mi iri en foliumilo kaj treni la dosieron en la foliumilo.
Kaj voila, tie estas mia unua retpaĝo.
Rimarku ke la titolo de la langeton estas saluton, mondo kiel por la titolo etikedo,
kaj avertas ke saluton, mondo estas la korpo de mia retpaĝo,
kaj woo-hoo, mi estas en la interreto.
>> Mi ne vere, rajto, ĉar ĉi dosiero ne estas en la interreto.
Ĝi okazas al esti sur mia loka malmola disko en tiu aparta vojo.
Sed la ideo estas la sama. Ĉiuj ni nun bezonas estas servanto retejo al kiu alŝuti ĝin.
Sed unue ni vere enkonduki iom pli komplekseco kaj iom pli estilización.
Tiu estas simpla, se enuiga, retpaĝo.
Ĝi rezultas estas aliaj tipoj de etikedoj ni povas uzi.
Ekzemple, jen en flava mi enkondukis 2 novaj etikedoj.
Ni ne ludis multe kun tiuj hodiaŭ, sed rimarki ke la ligilo etikedo
iel aspektas malsama ĉio alia.
La ligilo etikedo prenas kion nomas atributoj,
kaj atributo estas iu kiu modifas la konduton de etikedo.
En ĉi tiu kazo ne estas la pli bona elekto de nomoj, ligilo, ĉar ĝi estas iom sensignifa,
sed ĉi ligilon etikedo diras, esence, inkluzivi la dosieron nomata styles.css interne de mia retpaĝo.
Vi povas pensi pri tio kiel analogan al C estas # include direktivo.
Styles.css estas referenco al alia lingvo tute, ke ni ne ludas kun hodiaŭ,
sed estas por estetiko: tiparo grandecoj, koloroj, Plenigado, deŝovon, randoj,
kaj ĉiuj de tiu speco de estetiko detalo.
Dume, la skripto etikedo estas funkcie simila,
sed anstataŭ inkluzivas CSS, ke lingvo, ĝi inkludas alian lingvon, JavaScript.
Do alivorte, kun tiuj 2 etikedoj mi eventuale povos skribi mian propran retpaĝon
sed ankaŭ tiri en kodo, ke mi aŭ iu alia skribis
por ke ni povas stari sur fremda ŝultroj, ni povas praktiki bonan dezajnon,
faktoranta ekster komuna kodo.
Se mi havas 10 malsamajn retpaĝojn, ĉi tio signifas ke iuj el miaj estetiko
povas esti faktorita eksteren, multe kiel # include, en aparta dosiero.
Do ni ricevas tie.
Sed ni fakte unue faru ion pli interesan kun ĉi tiu dosiero.
>> Denove, tio estas nur TextEdit. Mi ne estas teknike en Interreto ankoraŭ, sed ni ricevos tie.
Mi ŝatus fari saluton, mondo iom revenante pli aŭdacaj ol ĝi estas.
Do saluton, ni arbitre diras por grasaj.
Denove, la historio estas la sama: saluton, komo, starti farante tiun aŭdacan,
tiam mondo gets presita en grasaj, kaj ĉi tio signifas halti presi tion en grasaj.
Lasu min, kaj savu mian dosieron, reiru al Chrome, mi zomi en nur tiel ni povas vidi ĝin pli bone,
kaj reŝarĝi, kaj vi vidos ke mondo estas nun en grasaj.
La retejo estas ĉion pri hiperligoj, do ni faru ĉi:
mia preferita retejo estas, diru, youtube.com.
Savi, reŝargi. Okay. Jen kelkaj problemoj nun krom la hideousness de la retejo.
1, Mi sufiĉe certas ke mi batis Entajpu ĉi tie. Kaj mi faris.
Mi ne nur batis Enter, mi ankaŭ dentado, praktikante kion ni estis predikante pri stilo,
sed mia estas tuj apud mondo.
Do kial estas tio? Foliumiloj nur faras kion vi diros al ili.
Mi ne diris al la retumilo, "Break linioj tie. Enmeti alineon rompi ĉi tie."
Do la retumilo, ne gravas se mi batis Reiri 30 fojojn,
ĝi estas ankoraŭ tuj metos Mian tuj apud mondo.
Kion mi vere devas fari ĉi tie estas diri ion kiel , enŝovu linerompo.
>> Kaj fakte, linio rompo estas speco de stranga afero
ĉar vi ne povas vere komenci movi al alia linio, tiam faru ion,
kaj tiam haltas movanta al nova linio. Estas speco de atoma operacio.
Vi ĉu fari ĝin aŭ vi ne. Vi batis Enigu aux vi ne.
Do br estas iom malmulto de malsama etikedo, do mi bezonas ordigi de ambaŭ malfermita kaj fermi ĝin
ĉiuj samtempe.
La sintakso por tiu estas ĉi.
Teknike, vi povus fari ion kiel tiu en kelkaj versioj de HTML,
sed ĉi tiu estas nur stulta ĉar ne estas kialo por komenci kaj ĉesi ion
se vi povas anstataŭe fari ĉion samtempe.
Rimarkas ke HTML5 ne strikte tion postulas oblikvo,
tiel vi vidos lernolibroj kaj rimedojn pri kiuj ne havas ĝin,
sed por bone mezuri ni praktiki la simetrio, ke ni vidis ĝis nun.
Tio signifas, ke la etikedo estas ambaŭ malfermita kaj fermita.
Do nun mi savos mian dosieron, revenu ĉi tien.
Okay, do ĝi estas komenci aspektas pli, krom la TTT mi scias estas speco de traktata,
kaj tamen youtube tie ne ŝajnas konduki al nenio.
Tio estas ĉar kvankam ĝi aspektas kiel ligilo, la retumilo ne scias ke per,
do mi devas diri al la retumilo kiun ĉi estas ligilo.
>> La maniero fari tion estas uzi ankron tag:
<A href por hiper referenco, kiu estas la malnova lernejo maniero diri ligon,
= "Http://www.youtube.com">
kaj lasu min movi tiun al nova linio nur tiel ĝi estas iom pli legebla,
kaj mi hezitis la tiparon grandeco.
Mi faris ankoraŭ? Ne ekzistas tuj estos ĉi dicotomía.
Ĉi etikedo, la ankron etikedo, faras ja prenos atributo,
kiu modifas lian konduton, kaj la valoro de tiu atributo estas ŝajne YouTube la URL.
Sed rimarki la dicotomía estas ke nur pro tio la URL vi tuj,
tio ne signifas ke devas esti la vorto, kiun vi substrekante kaj farante ligon.
Pli ĝuste, tiu povas esti io kiel tio.
Do mi devas diri ĉesi fari ĉi vorto hyperlink uzante la proksimaj ankron etikedo.
Rimarku ke mi ne faras tion.
1, ĉi tiu devus esti nur malŝparo de ĉies tempon kaj ne necesa.
>> Fermi etikedo, vi nur mencias la nomon de la etikedo denove.
Vi ne mencias neniun de la atributoj.
Do ni savu ke, reiru. Konsentite, voila, nun estas blua kaj hyperlinked.
Se mi premas ĝin, mi reale fari iri al YouTube.
Do eĉ se mia retpaĝo ne estas en Interreto, estas almenaŭ HTML,
kaj se ni lasas la interreto reatingi, ni vere finu tie en youtube.com.
Kaj mi povas reiri kaj jen mia retpaĝo. Sed rimarki tion.
Se vi iam alveninta spamado aŭ phishing atako,
nun vi havas la kapablon post nur kvin minutoj fari la samon.
Ni povas iri ĉi tie kaj fari ion kiel www.badguy.com
aŭ kion ajn la Sketchy retejo estas, kaj tiam vi povas diri kontroli viajn PayPal konton.
[Ridado] Kaj nun ĉi tiu tuj iri al badguy.com, kiu mi ne tuj alklaku
ĉar mi ne havas ideon kie kiu stiras. [Ridado]
>> Sed ni nun havas la kapablon vere fini tie.
Do ni vere nur komencas skrapi la surfaco.
Ni ne programado per si mem; ni skribas markado lingvo.
Sed tuj kiam ni ĉirkaŭ nian vortprovizon en HTML,
ni enkonduki PHP, reala programlingvo
ke ni permesos generi HTML aŭtomate, generi CSS aŭtomate,
tiel ke ni povas komenci la merkredon por apliki, diru,
nian propran serĉilon kaj pli.
Sed pli en kiuj en kelkaj tagoj. Ni vidos vin do.
>> [CS50.TV]