[Powered by Google Translate] [Wiki 7]
[David J. Malan - Chuo Kikuu cha Harvard]
[Hii ni CS50. - CS50.TV]
Wote haki. Karibu tena. Hii ni CS50, na hii ni mwanzo wa wiki 7.
michache ya matangazo kidogo:
Pset5 ni sasa katika maendeleo, au hivi karibuni itakuwa,
na napenda kusema, kabisa uaminifu, hii haina huwa na kuwa miongoni mwa changamoto zaidi
wa seti kozi ya tatizo, hivyo basi mimi kutaja hili sasa
hivyo kwamba wiki hii zaidi ya milele wewe usingoje mpaka, kusema, Jumatano usiku
au Alhamisi usiku kwa kupiga mbizi in
Hii ni dhahiri pset kuvutia. Tunadhani ni fun.
Kama kweli kupata kikamilifu sahihi na unaweza kisha changamoto kinachojulikana Big Bodi,
utakuwa na fursa ya mechi Wits na baadhi ya wafanyakazi wa kozi
na baadhi ya wanafunzi wako.
Nini Bodi Big ni ni mara moja una yako Spell-Checker kazi,
wewe utakuwa na uwezo wa kwenda kwa cs50.net baada ya mbio amri,
rena opt katika, na kisha kiasi cha muda na kiasi cha RAM na zaidi
kwamba una kutumika katika utekelezaji yako itakuwa exhibited hapa nyumbani ukurasa kozi ya.
Utagundua kuwa rundo zima la folks hizi hapa ni waliotajwa kama wafanyakazi
tangu mwishoni mwa wiki, wafanyakazi walidhani itakuwa furaha kwa kujaribu outdo kila mmoja.
Hivyo kutambua kwamba lengo hapa ni si kwa outdo wafanyakazi.
Hata mimi tu hapa katika idadi ya 13.
Rena opt katika, lakini ni fursa ya kuona jinsi tu kidogo RAM
na jinsi wachache CPU sekunde unaweza kutumia vis-a-vis baadhi ya wanafunzi wako.
>> Na mimi itabidi kukubali kwamba Kevin Michael Schmid,
sasa katika idadi 1 nafasi kama moja ya TFS,
hii ni utekelezaji kwamba sisi kuwaita haiwezekani
kutokana na kwamba yeye kutumia RAM karibu na karibu sekunde 0 0 kwa upakiaji.
Hivyo tutaweza kutunza offline Kevin. [Kicheko]
Kuna baadhi ya ujuzi Kevin ni kuweka kwa mtihani hapa.
Moja ya mambo sisi mawazo tunatarajia kufanya pia ni sasa CS50x ni wiki katika maendeleo,
na wewe guys ni kama sehemu kubwa ya jaribio hili kama wale wanafunzi ni.
Tumekuwa akawauliza kama sehemu ya pset0 yao, ambayo ilikuwa vile vile kuwasilisha mradi Scratch
ya maslahi yao - mchezo, kipande maingiliano ya sanaa, uhuishaji, au kama -
1 - 2 video kwa dakika, kama wangependa, kusema hello dunia na ambao wao kweli ni.
Nilidhani ningependa kushiriki na wewe michache tu ya video ambayo yamekuwa in hivi sasa
kwa sababu kwa ajili yetu, juu ya wafanyakazi angalau, ni kweli imekuwa kusisimua
na msukumo wa kuona folks hizi kutoka duniani kote - nchi zote duniani kote -
tuning katika, juu ya mambo yote, bila shaka kwa sayansi ya kompyuta kwenye mtandao,
kama ni kwa sababu wanataka kuendelea yao masomo wenyewe,
wanataka kuchukua kazi yao katika mwelekeo mpya,
wanataka kujaza mapengo katika maarifa yao wenyewe,
hivyo baadhi ya sababu moja kwamba wewe guys labda kuwa hapa.
>> Basi, mimi kukupa moja vile mwanafunzi hapa. Unaweza kuongeza kiasi kidogo tu.
Hapa ni moja ya maoni mwanafunzi wetu wa 1-dakika.
Hello, ulimwengu. Mimi ni mwanafunzi wa uhandisi viwanda hapa katika Malaga, Hispania.
Mimi msisimko juu ya kozi hii online kwa sababu nampenda sayansi ya kompyuta, kweli mimi,
na mimi kweli kufahamu kwamba mimi kupata kuchunguza yake.
Na ukweli kwamba naweza kujifunza huo wote wa guys kufanya
lakini badala ya kuwa katika Harvard mimi ni katika Malaga, jinsi ya kushangaza ni kwamba?
Naam, mimi Fernando, na hii ni CS50. Angalia guys wewe.
[Kicheko] Mwingine clip sisi hasa kama, utapata kwamba Kiingereza hii muungwana ni si hivyo nguvu.
Inaonekana kama yeye alikuwa ni mashine kutafsiriwa, hivyo tafsiri wenyewe ni kidogo si mkamilifu,
lakini hii ilikuwa ni moja ya favorites yetu hivi sasa vilevile.
[♪ ♪]
Hello, ulimwengu. [Akizungumza katika Kijapani]
[Nina kusalimia kwa Kijapani kwa sababu Kiingereza yangu ni wa uhakika.]
[Nimeitia ujumbe kutoka kwa mji wa Gifu, Japan.]
[Naweza kuwa mwanafunzi kwa mara ya kwanza katika miaka 20, kama inaweza kuonekana.]
[Ninamshukuru sana kwa Chuo Kikuu cha Harvard ambaye alinipa nafasi hii na edX.]
[Golf ni gitaa na kitu favorite mbio.] [Kicheko]
[♪ ♪]
[Kwa nini unafikiri mimi alikuwa anajaribu kuhudhuria cs50x.]
[Chuo Kikuu cha Harvard, ni shauku yangu.]
[Hasa kama mimi ni uwepo mbali aliishi katika Japan.]
[Mimi alitaka kujaribu mara moja na ufahamu wa kuwepo kwa edX vile wakati.]
[Je, unafikiri hivyo huna kuhusiana na umri wa kujifunza I.]
[Cs50 ni hamu yangu. Jina langu ni Kazu, na hii ni cs50.]
[♪ ♪] [applause na cheering]
Mwingine favorite ya yetu ilikuwa hii kuwasilisha hapa kutoka kwa mtu.
[♪ ♪] [Malan] Google ni kama wewe ni unfamiliar na meme hii.
>> Na kisha mwisho, wanandoa wengine kwamba got posted kwamba labda kushinda tuzo adorable.
[Wanafunzi] Aww! >> [Malan] Sisi itabidi kusikiliza. Hii ni mfupi, hivyo kusikiliza kwa makini.
[Kike msemaji] Nini jina lako? >> Louie.
[Kike msemaji] Nini hii? >> [Giggles] CS50. [Kicheko]
[Malan] hakuwa mbili inachukua, ingawa.
Hapa sisi kwenda, mwisho.
Jina langu ni Louie, na hii ni CS50.
[Kicheko] Hii basi ni CS50x.
Asante kwa wale wote wa wewe wakati kufuatia pamoja nyumbani
ambao wamekuwa wanashiriki hivi sasa.
Leo, sisi kuhitimisha mjadala wetu wa miundo data,
angalau baadhi ya msingi kabisa,
na kisha sisi kuendelea mazungumzo yetu kuhusu HTML na mtandao programu.
Hakika, tumekuwa alitumia iliyopita baadhi ya wiki saba kuangalia misingi ya programu -
algorithms, miundo data, na kama -
na C, kama unaweza kuwa na uzoefu hivi sasa,
ni lazima si zaidi kupatikana ya lugha
na ambayo kwa kutekeleza baadhi ya mawazo hayo.
Na hivyo kuanzia wiki hii na wiki ijayo na kisha zifuatazo,
tutaweza hatimaye kuwa na uwezo wa mpito kutoka C, ambayo ni ujumla inayojulikana kama lugha ya uungwana ngazi ya chini,
mambo ngazi za juu, kati yao PHP, JavaScript, na kama,
ambayo tutaweza kuona kuteka juu ya masomo sawa kwamba tumejifunza katika wiki chache zilizopita,
lakini utapata kwamba kutangaza vitu kama arrays na meza hash na kutafuta na kuchagua
kuwa rahisi sana kwa sababu lugha wenyewe tutaweza kuanza kutumia
itakuwa na nguvu zaidi.
Lakini kwanza, maombi ya miti.
Ni kawaida sana siku hizi kwa haja ya compress habari.
Katika mazingira gani ingekuwa unataka compress baadhi ya aina ya digital habari?
>> Yeah. >> [Mwanafunzi] Wakati unahitaji kutuma zaidi ya Mtandao.
Yeah, wakati unataka kutuma kitu juu ya mtandao.
Kama unataka kupakua faili kubwa, ni bora kama mtu juu ya nyingine ya mwisho
ina USITUMIE kwamba faili kwa kutumia muundo zip au kitu kama hicho
hivyo kwamba wewe ni kutuma bits wachache kuliko ili vinginevyo kuambukizwa.
Hivyo ni jinsi gani compress habari?
Ni wote majipu chini kutumia bits wachache kuliko wanatakiwa na default.
Lakini hii ni aina ya kitu curious kwa sababu kufikiri nyuma kwa wiki 0 na 1
wakati sisi aliyesema kuhusu ASCII na binary na kuongelea ASCII hasa
kama kutumia bits 8 kuwakilisha wa alfabeti
hivyo kwamba barua ni kuwakilishwa na 65, Herufi za chini ni idadi 97,
na hata hivyo wewe kuwakilisha 65 au 97, unatumia bits 7 au 8.
Lakini catch ni kwamba kuna baadhi ya barua katika alfabeti ya Kiingereza
ambayo si kama maarufu kama watu wengine.
Z si maarufu kwamba wote, Q si maarufu kwamba wote, lakini na E ni super maarufu.
Na bado kwa wote wa barua hizi, kwa default dunia anatumia idadi sawa ya bits, 8 tu.
Hivyo ingekuwa si hivyo wamekuwa nadhifu kama badala ya kutumia bits 8 kwa kila barua,
hata wengi infrequently kutumika kama Q na Z,
nini kama sisi kutumika bits machache kwa ajili ya E na na S na barua maarufu
na kutumika zaidi kwa bits barua chini maarufu,
wazo kuwa optimize wacha kwa kesi ya kawaida,
ambayo ni mandhari katika sayansi ya kompyuta ya kujaribu optimize nini kitatokea zaidi
na kutumia zaidi kidogo wakati, kidogo nafasi zaidi kwenye mambo ambayo, yeah, inaweza kutokea
lakini si lazima kama mara kwa mara.
Basi hebu chukua mfano.
>> Tuseme kwamba tunataka encode taarifa hizo kwa haki kwa ufanisi.
Unaweza kuwa mzima kujua kitu kidogo kuhusu Morse kificho,
na ni tabia mbaya wewe hakujua code halisi,
lakini unaweza kukumbuka kwamba ni angalau mfululizo huu wa dots na dashes.
Hii ni coding uungwana ufanisi, na taarifa kwamba barua maarufu - kwa mfano, E -
anatumia mfupi beeps.
Morse code ni wote kuhusu beep beep-beep--beep beep beep--na kufanya tani
aidha kwa muda mfupi au muda mrefu.
E, kama ulionyehsa kwa dot, ni super short beep, tu beep, na kwamba itakuwa kuwakilisha E.
Kwa kulinganisha, T itakuwa beep tena, kama beep [prolongs sauti],
na ambacho kitawakilisha T.
Lakini kwamba bado pretty mfupi kwa sababu, kwa kulinganisha, kama ukiangalia Z,
kueleza Z ungependa kwenda beep, beep [tena sauti], beep, beep [mfupi sauti].
Hivyo ni tena kwa sababu ni chini ya kawaida.
Lakini gotcha hapa ni kwamba Morse code ni kidogo kiujanja
katika kwamba si mara moja decodable.
Kwa mfano, tuseme kwamba wewe kusikia juu ya baadhi ya mwisho wa beep waya [short], beep [mrefu].
Ni ujumbe gani mimi tu kupokea? dot na dash. Gani kwamba kuwakilisha?
[Mwanafunzi] A. >> [Malan] Labda.
Pia inaweza kuwa E ikifuatiwa na T.
Kwa maneno mengine, Morse code, ingawa leverages kanuni hii ya optimizing kesi kona,
haina kukopesha yenyewe decodability haraka.
Hiyo ni, binadamu ambaye ni kusikia au kupokea dots hizi na dashes
ina namna fulani takwimu nje ambapo mapumziko ni kati ya herufi,
kwa sababu kama wewe sijui wapi wale mapumziko ni, unaweza kuwachanganya kwa ET au kinyume chake.
>> Basi nini ili unaweza kufanya? Katika code Morse unaweza tu pause kati ya kila moja ya barua.
Lakini pausing ni aina ya kukabiliana na hatua wote wa kasi ya mambo juu.
Basi nini kama badala ya sisi kuja na code ambapo hapakuwa na hali hii mbaya
ambapo E ni kiambishi awali, kwa mfano, ya -
kwa maneno mengine, kama tunaweza kuhakikisha kwamba mifumo ni bado mfupi kwa barua maarufu
muda mrefu kwa barua chini maarufu, lakini hakuna machafuko inawezekana?
mtu mmoja kwa jina Huffman miaka iliyopita zuliwa mpango huu huitwa Huffman coding
kwamba kweli leverages moja ya miundo data tumekuwa alitumia muda kidogo kuzungumza kuhusu
wiki hii iliyopita, kwamba miti, binary miti hasa -
mti binary maana ya kuwa hakuna zaidi ya watoto 2.
Ina labda mtoto wa kushoto, labda mtoto wa kulia, na hiyo ni yake.
Hivyo kudhani tu kwa ajili ya majadiliano ya kwamba mtu anataka kupeleka ujumbe
kwamba inaonekana kama hii. Ni kamili nonsense lakini ni linajumuisha Kama, Bs, Cs, Ds, na Es Salaam.
Na kama kweli kuhesabu juu wote wa Kama, Bs, Cs, Ds, na Es
na kisha kugawanya na jumla ya idadi ya herufi,
hii chati kidogo hapa anasema kwamba 45% ya barua ni Salaam, 20% ni Kama,
10% Bs, na kadhalika.
Hivyo kwa maneno mengine, kudhani kuwa string alinukuliwa huko
ni baadhi tu ujumbe kwamba unataka kutuma.
Hutokea kwa kuwa nonsense hivyo tu tunaweza kutumia kama barua chache iwezekanavyo,
lakini ni kweli kwamba kesi E inabakia maarufu zaidi,
A na B na C ni angalau maarufu, angalau ya barua hizi 5 za alfabeti.
Hivyo ni jinsi gani tunaweza kwenda kuhusu kuja na encoding,
encoding binary, mfano wa sekunde 0 na 1s kwa kila moja ya barua hizi
katika namna kwamba E ni mfano mfupi na labda B na C ni kidogo tena mwelekeo,
tena, wazo kuwa kuwa tunataka kutumia wachache bits zaidi ya muda
na zaidi bits tu mara moja kwa wakati.
Kulingana na Huffman coding, unaweza kuunda msitu wa miti.
Kuna aina ya line hadithi hapa ambao unahusisha miti na pia mchakato wa kujenga yao juu.
Hebu kuanza.
>> Napendekeza kwamba kuanza kwa msitu huu, ili kuzungumza, ya miti 5,
ambayo kila mmoja ni mti pretty kijinga.
mti linajumuisha nodi moja tu, kama kuwakilishwa hapa na mduara.
Basi kila mmoja wa mambo haya yanaweza kuwa struct C
na ndani ya struct C inaweza kuwa kuelea anayewakilisha kuhesabu frequency
na kisha labda Char anayewakilisha barua.
Hivyo kufikiri ya nodi hiyo kama struct tu umri wowote C lakini, kwa sasa, ngazi za juu.
Hii ni msitu wa miti 5, kila mmoja ambaye tu nodi moja.
Nini Huffman mapendekezo ni kwamba sisi kuanza kuchanganya miti wale
kwamba kuwa na makosa madogo ndani ya miti frequency kubwa kidogo
kwa kuunganisha yao na node mpya mizizi.
Hivyo kati ya barua hapa, taarifa kwamba kwa urahisi nimekuwa sorted yao kutoka kushoto kwenda kulia,
ingawa si kwamba madhubuti muhimu, na taarifa kwamba nodes ndogo
sasa ni 10% na 10%.
Hivyo Huffman mapendekezo kwamba sisi kuunganisha wale 2 nodes ndogo ndani ya mti mpya
kwa kuanzisha mpya mzazi nodi na kisha kutoa kuwa mzazi wa mtoto wa kushoto na mtoto wa kulia
ambapo B ni kiholela kushoto na C ni kiholela haki.
Na kisha Huffman inapendekezwa kwamba hebu sasa tu kufikiri ya mtoto wa kushoto
katika moja ya miti hii daima kama kuwa na kuwakilishwa na 0
na mtoto haki daima kama kuwa na kuwakilishwa na idadi 1.
>> Haijalishi kama wewe flip yao ya muda mrefu kama wewe ni thabiti.
Hivyo sasa tuna nne miti katika misitu hii.
Na mimi kusema nne kwa sababu sasa mti upande wa kushoto -
na si sana mti kwa maana kwamba kukua kwa njia hii,
ni zaidi kama mti wa familia ambapo sasa 0.2 ni aina ya mzazi wa watoto wawili -
taarifa kwamba katika mzazi kwamba tumepata 0.2.
Tumeongeza makosa frequency ya watoto wawili na kupewa nodi mpya jumla.
Hivyo sasa sisi tu kurudia utaratibu huu.
Kupata mbili nodes ndogo na kisha kujiunga nao katika mti mpya
na kisha kurudia utaratibu zaidi.
Hivi sasa tuna wagombea wachache, 20%, 15%, na 20%.
Katika kesi hiyo, tuna kuvunja tie. Tunaweza kufanya hivyo kiholela.
Tunapaswa tu kufanya hivyo mara kwa mara.
Katika kesi hiyo, mimi itabidi kiholela kwenda kwa moja upande wa kushoto,
na mimi sasa kuunganisha% 20% 15 na kunipa mzazi mpya iitwayo 35%,
ambao kushoto mtoto ni 0, ambaye ni haki ya mtoto ni 1, na sasa tuna tatu tu miti katika msitu.
Unaweza labda kuona ambapo hii ni kwenda.
Kama sisi kurudia mara kadhaa zaidi, sisi itawabidi moja tu kubwa mti,
yote ambaye edges ni lebo na sekunde 0 na 1s.
Hebu kufanya hivyo tena.
35% ni shina la mti. 20% na 45%, hivyo sisi ni kwenda kuunganisha% 35 na 20%.
Sasa tuna mti huu hapa. Sisi kuongeza wale pamoja, tuna 55%.
Sasa kuna wawili tu miti katika msitu.
Sisi kufanya hili moja ya mwisho ya muda, na hopefully mathematically frekvenser wote kuongeza up
kwa sababu wanapaswa tangu sisi computed yao kutoka kupata-go na kuongeza hadi 100%.
Na sasa tuna mti mmoja.
Hivyo hii ni Huffman coding mti.
Ni aina ya alichukua muda kupata kuna maneno, lakini ukweli ni pamoja na kwa kitanzi
au na kazi ya kujirudia, unaweza kujenga jambo hili up pretty kufunga.
Hivyo sasa sisi moja mpya wa nodi, na wote wa nodi hiyo ndani wamekuwa malloc'd,
labda, njiani.
Hivyo sasa wakati juu ya mti huu tuna 100%, lakini sasa ilani tuna njia
kutoka hii mpya kubwa-kubwa-kubwa-grandparent yote ya kubwa-kubwa-kubwa-wajukuu
njia yote chini, na yote ya majani.
>> Nini sisi ni kwenda kufanya sasa ni kupendekeza kwamba ili kuwakilisha E barua,
sisi tu kutumia namba 1. Kwa nini?
Kwa sababu kama sisi traverse mti huu kutoka mizizi ya mwisho chini ya jani inayojulikana kama E,
sisi kufuata moja tu makali, makali haki, na kwamba bila shaka katika labeled 1 ya juu kulia.
Hivyo Kidokezo hapa kwa Huffman ilikuwa kwamba encoding E katika binary itakuwa tu kuwa 1.
Na kwamba ni pretty damn ufanisi. Je, si kweli kupata yoyote ndogo kuliko hiyo.
Kwa kulinganisha, ni kwenda kuwa kuwakilishwa, kama wewe kufuata mantiki,
kwa nini muundo wa bits badala yake? 01.
Hivyo kupata, sisi kuanza katika mizizi na sisi kwenda kushoto na kisha sisi kwenda kulia,
ambayo ina maana sisi ikifuatiwa 0 na kisha 1.
Hivyo tutakuwa kuwakilisha barua na mfano 0 na 1.
Na sasa taarifa tayari tuna mali ya decodability haraka
kwamba hatukuwa na katika code Morse.
Hata ingawa wote wa mifumo haya ni pretty mfupi - E ni 1 kidogo, ni 2 bits -
taarifa kwamba wao hawawezi kuwa na kuchanganyikiwa moja au nyingine,
kwa sababu kama wewe angalia 1 ni got kuwa E, kama kuona 0 kisha 1 ni wazi got kuwa A.
Vile vile, nini D? 001.
Nini ni C? 0001.
Na ni nini B? 0000.
Na tena, kwa sababu kila barua sisi huduma ya juu ni katika majani
na hakuna hata mmoja wao ni aina ya kati katika njia kutoka mizizi na majani,
hakuna hatari ya conflating 2 barua 'encodings tofauti
kwa sababu wote wa mifumo haya ni kidogo deterministic.
0000 daima kuwa B.
Hakuna kipingili mahali fulani katika kati ya kwamba unaweza kuwavurugia barua moja kwa nyingine.
Basi nini maana hapa?
>> barua maarufu - katika kesi hii E - imenipatia encoding mfupi,
imenipatia ijayo mfupi encoding,
A na B na C, ambayo sisi tayari alijua kutoka aina kupata-go walikuwa maarufu angalau
mara kwa mara 10% kila, wao wamezipata encoding mrefu.
Na hivyo nini maana ya hii sasa ni kwamba kama unataka kutuma ujumbe hiyo Komprimerade
juu ya internet au katika barua pepe au kama,
badala ya kutumia ASCII standard, unaweza kutuma ujumbe Huffman coded
ambapo kama unataka kutuma E barua, kutuma kidogo tu moja.
Kama unataka kutuma, kutuma bits 2, 01, badala ya kupeleka bits 8
ikifuatiwa na bits mwingine 8 ikifuatiwa na bits mwingine 8 na kadhalika.
Lakini kuna gotcha hapa.
Ni si ya kutosha tu kujenga mti huu na kisha kuanza kutuma kutoka Alice kwa Bob
mfupi kidogo mfano, kamba kutoka ASCII,
kwa sababu Alice pia ina taarifa Bob ya kile
kama Bob ni kwenda kuwa na uwezo wa kusoma ujumbe wake USITUMIE?
[Inaudible mwanafunzi majibu] >> gani hiyo?
[Inaudible mwanafunzi majibu] >> Of nini mti ni.
Au hata zaidi hasa, nini wale encodings ni,
hasa tangu wakati wa hadithi hii sisi alitoa wito hukumu kwa wakati mmoja.
Kumbuka kwamba tulikuwa na pick kiholela kati ya pingili 2 tofauti 20%?
Hivyo si kesi hiyo Bob, mpokeaji, unaweza tu upya mti juu yake mwenyewe
kwa sababu labda yeye itakuwa kujenga mti milele hivyo tofauti kidogo kutoka Alice.
Aidha, Bob hana hata kujua nini ujumbe halisi ni
kwa sababu neno tu Alice ni kutuma yake, bila shaka, ni ujumbe Komprimerade.
>> Hivyo samaki na compression kama hii ni kwamba, ndiyo, Alice inaweza kuokoa mengi yote ya bits
kwa kutuma 1 kwa Barua na 01 kwa na kadhalika,
lakini yeye pia ana kuwajulisha Bob nini ramani ni kati ya herufi na bits
sababu hawawezi wazi wanategemea tu ASCII tena kama sisi siyo kutumia ASCII.
Hivyo anaweza ama kumpeleka mti namna fulani -
kuandika ni chini, kuhifadhi data kama binary au kitu kama hicho -
au tu kutuma naye kidogo kudanganya karatasi, faili Excel, ambayo inaonyesha upangaji.
Hivyo ufanisi wa compression kweli akubali kwamba ujumbe kwamba wewe ni kutuma
ni pretty kubwa, angalau ukubwa wa kati,
kwa sababu kama wewe ni kutuma ujumbe mfupi wa super,
kama wewe tu unataka kutuma ujumbe BAD, ambayo hufanyika kuwa neno tunaweza Spell hapa,
B-A-D, pengine wewe kwenda kutumia bits wachache,
lakini samaki ni kama wewe pia kuwa na kuwajulisha kile Bob mti ni
au nini wale encodings ni, wewe ni kwenda pengine outweigh yote ya akiba
ya kuwa na mambo USITUMIE kwa kuanzia.
Hivyo ni kweli anaweza kuwa kesi kwamba kama wewe jaribu compressing
hata na kitu kama format zip file au unaweza kuwa ukoo na -
pretty ndogo files, hata tupu files -
wakati mwingine wale files ili kupata kubwa na si ndogo.
Lakini realistically, ambayo hufanyika tu kwa ukubwa ndogo ya SVG,
hivyo si kwenda kufanya faili gigabyte kuwa 2 gigabytes;
sisi ni kweli kuzungumza ka au tu kilobytes wanandoa.
>> Baadhi ya mipango kama zip ni smart kutosha kutambua kwamba,
"Wewe ni kwenda kutumia bits zaidi compressing hii."
"Basi mimi si bother compressing ni kwa ajili yenu wakati wote."
Hivyo hii ni moja ya njia ya basi compressing Nakala format.
Tunaweza kutekeleza kitu kama hiki katika C.
Kwa mfano, hapa ni jinsi sisi wanaweza kuwakilisha nodi katika mti huu
ambapo tuna Char kwa ishara, thamani floating kwa frequency,
na kama tumeona na miundo yetu nyingine data, kuyatumia 2,
1 kwa mtoto wa kushoto, 1 kwa haki, ama ya ambayo inaweza kuwa null,
lakini kama si, lina maana ya mtoto wa kushoto na mtoto wa kulia.
Hivyo hii ni kisha Huffman coding, na ni njia moja ambayo unaweza kwenda kuhusu compressing habari,
na hakika moja ya wengi rahisi kutekeleza
katika mazingira ya, wanasema, miundo ya wiki iliyopita data,
ingawa hata kisasa zaidi algorithms zipo
kwamba anaweza kufanya mabadiliko hata kisasa zaidi wa data zako.
Maswali yoyote juu ya basi miti, miti binary, au compression ya maandishi?
[Mwanafunzi] Je, kuna utata fulani, kama ikiwa [inaudible] iligawanyika katika 01,
kisha 011 itakuwa mafumbo, haki?
[Inaudible] >> Bora swali. Utata.
Hebu muhtasari kwa akimaanisha hii picha hapa.
Kwa sababu wewe ni wahusika compressing, uwakilishi wa,
kwa ufafanuzi wa algorithm hii daima kubaki majani,
hutaweza ajali kutumia mfano huo wa bits kwa kiambishi awali ya barua nyingi.
Hivyo kwa maneno mengine, wewe ni wasiwasi kuhusu, inaonekana kama, utata kutokana
ambapo 001 inaweza kuwa mwanzo wa B au mwanzo wa C au kitu kama hicho.
Lakini hiyo inaweza kuwa kesi kwa sababu taarifa kwamba wote wa herufi za alfabeti tuko usimbaji
ni katika majani.
>> ambiguity unaweza tu kujitokeza, kama katika kesi ya code Morse,
ikiwa, kwa mfano, C alikuwa mahali fulani njiani kutoka mizizi kwa B.
[Mwanafunzi] Haki. Hivyo katika kesi hiyo, wanasema ina majani 2. >> Sema ina - Sema kwamba tena.
[Mwanafunzi] Sema ina majani 2, F na G, na kisha G - >> Sawa. Lakini hawawezi.
yenyewe hakuweza kuwa majani F na G kwa sababu barua hizo F na G
ingekuwa wenyewe kuwa majani fulani ya kushoto ya B au haki ya E.
Hivyo kwa ufafanuzi, ni lazima kuwa na majani.
Vinginevyo, uko sahihi kabisa, tumekuwa si kutatuliwa tatizo kwamba Morse code nyuso.
Nzuri swali. Maswali mengine? Wote haki.
Dhana hii ya bits, zinageuka tumekuwa alikuwa na nguvu ya wote pamoja kwamba tumekuwa si kweli kutumika
wakati alikuja kufanyia haya sekunde 0 na 1s.
Tuliuliza kuhusu hili kwenye moja ya seti ya mwanzo tatizo:
yaani, ni jinsi gani wewe kwenda juu ya kuwabadili uppercase kwa Herufi za chini au kinyume chake?
Au, zaidi concretely, mmoja wa wale psets kwanza aliuliza
wangapi bits je kweli kuwa flip ili kubadili kwa Herufi za chini au kinyume chake?
Hapa ni ukumbusho ya haraka ya nini 65 na 97 katika kuangalia kama binary.
Na hata kama swali kwamba ina aina ya Faded katika kumbukumbu yako,
unaweza kuona tena hapa kwamba wangapi bits haja ya kuwa na flipped
kubadili mtaji wa Herufi za chini? Moja tu.
>> Wao tu tofauti katika eneo moja, kidogo ya tatu kutoka kushoto.
Ambapo ina 010, kidogo ina 011.
Hivyo kwa namna fulani, tunahitaji tu kuwa na uwezo wa flip kwamba kidogo,
na tunaweza basi capitalize au Herufi za chini barua.
Tumefanya hii katika siku za nyuma kwa kweli kwa kutumia kama hali ya
na kuangalia kama barua ni kati ya mji mkuu na mji mkuu A Z,
kisha matokeo kama - a + 26 au kitu kama hicho.
Wewe pengine alifanya mabadiliko hesabu kwa herufi za alfabeti.
Lakini nini kama tunaweza tu flip kwamba moja kidogo?
Jinsi gani unaweza kwenda juu ya kuchukua thamani moja Byte ya bits, hivyo 8 bits kama 01,000,001 na 01,100,001?
Kama alikuwa na mwelekeo wa wale wa bits, jinsi gani tunaweza kwenda juu ya kubadilisha tu mmoja wao?
Nini kama sisi kuanzisha katika njano hapa ruwaza hii nyingine ya bits?
Kama mimi kufanya zima sekunde 0 string njano ila kwa kidogo moja kwamba mimi unataka kubadilisha
na kisha mimi kuanzisha operator mpya inayojulikana kama operator bitwise -
bitwise kwa maana kwamba kazi kwenye bits mtu binafsi,
si juu ya Byte nzima au ka nne wote mara moja.
Hii bar wima huko katika njano unaonyesha kwamba nini kama sisi kuchukua ya uwakilishi wa mji mkuu
na bitwise AU kwa mlolongo wa manjano bits?
Kwa maneno mengine, kufikiri nyuma kwa majadiliano yetu ya misemo Boolean katika Scratch na kisha katika C.
>> Kufanya Boolean au ina maana kwamba kuwa ni kweli, ama kitu kwanza ina kuwa kweli
au kitu pili ina kuwa kweli au wao wote wana kwa kuwa ni kweli,
na kisha kusababisha pato ni yenyewe kweli.
Katika kesi hii hapa, je, sisi kupata kama sisi kuchukua 0 "au" ed na 0? Uongo au uongo?
Ni bado uongo, hivyo lowercase bado kama ilivyotarajiwa.
Nini kama badala ya sisi kufanya au 1 0?
Hii sasa bado 1, lakini taarifa nini kuhusu kutokea hapa.
Kama sisi kuanza na mtaji na sisi kuendelea "au" yake bits mtu binafsi kama sisi ni kufanya hapa,
0 au mmoja wa manjano inatupa nini hapa chini? Hii inatupa 1.
Kwa kweli, tuseme hatukujua nini toleo uppercase ya kweli ilikuwa kidogo.
Hebu kwenda kufanya hili. Hebu hoja hii nyuma zaidi ya hapa.
Hebu kufanya hii tena. 0 0 au anitiaye 0.
1 au 0 anitiaye 1.
0 au 1 anitiaye 1.
0 0 au anitiaye 0. moja ijayo ni 0, moja ijayo ni 0, moja ijayo ni 0.
1 au 0 anitiaye 1.
Na hivyo hata kama hatukujua mapema kile Herufi za chini ilikuwa,
tu kwa "au" ing na muundo huu wa bits kwamba tumekuwa iliyotolewa hapa katika njano,
unaweza Herufi za chini mtaji kwa flipping kwamba kidogo.
Sisi alitumia usemi wiki iliyopita: flipping kidogo.
Jinsi gani unaweza kweli kufanya kwamba programmatically?
Unatumia nini ujumla iitwayo mask, mfululizo wa bits,
kwamba katika kesi hii tu hivyo hutokea kuangalia kama idadi hii hapa,
na kisha wewe "au" ni pamoja kutumia hii mpya C operator,
si | |, unatumia moja | na wewe ingekuwa kweli kupata jibu hili hapa kwa sababu kwa nini?
Hii ni mahali 1s, 2S mahali, 4s, 8s, 16S, 32s.
Hivyo ni zinageuka kuwa kama wewe kuchukua barua mtaji na bitwise AU kwa 32 integer,
kwa sababu 32 integer, wakati ukiangalia hiyo kama bits, inaonekana kama hii,
hiyo ina maana unaweza flip kidogo kwamba wewe kweli unataka.
Na vile vile - na tutaangalia code katika muda tu -
tuseme tunataka kwenda upande mwingine.
>> Jinsi gani unaweza kwenda kutoka mji mkuu lowercase kwa? Ambayo inahitaji mabadiliko kidogo?
Ni moja moja.
Tunataka mabadiliko ya kwamba kidogo ya tatu 1-0.
Na jinsi tunavyoweza kwenda juu ya kufanya hii?
Jinsi gani sisi kugeuka mbali kidogo? Kwa nini mfano wa bits tunaweza kugeuka mbali kidogo?
Nini kama sisi aina ya Geuza mask?
Wakati kabla, sisi mzima manjano mask sekunde 0
isipokuwa kwa kidogo moja tulitaka kurejea kwenye,
nini kama wakati huu, sisi kufanya yote mask 1s isipokuwa kwa kidogo kwamba tunataka kugeuka mbali
na kisha kutumia kile operator?
Nini kama sisi "na" mambo? Hebu tuangalie.
Kama sisi sasa flip na hii, tuseme kwamba mimi tena kujenga mask kwamba wote 1s
isipokuwa kwa kidogo moja kwamba mimi nataka kuzima
na kisha badala ya "au" namba nyeupe juu juu na idadi ya njano chini hapa,
nini kama mimi badala yake "na" yao pamoja? Ni wito bitwise na.
Kimantiki, ni kitu kimoja kama Boolean na.
Hii inanipa 0 & 1 ni 0. Hivyo uongo na kweli ni uongo.
Kweli na kweli ni kweli.
Na hapa ni uchawi: Kweli na uongo ni uongo sasa, hivyo tumekuwa akageuka mbali kwamba kidogo.
Na sasa wengine wa hadithi fulani ni moja kwa moja.
Kwa sababu ya mapumziko ya mask ni 1s, haijalishi nini idadi ni nyeupe.
Wakati wewe "na" kitu kwa kweli, wewe si kwenda na mabadiliko ya thamani yake.
Kama ni kweli, itakuwa kubaki kweli. Kama ilikuwa uongo, itakuwa kubaki uongo.
>> Lakini uchawi hutokea wakati wewe kuchukua kitu ambacho ni kweli
na wewe basi, "na" kwa uongo.
Hii ina athari ya kugeuka mbali ya kuwa kidogo.
Hivyo cryptic kidogo huko.
Hebu kweli kuangalia code baadhi, ambayo ili kweli kuangalia hata zaidi cryptic,
lakini hebu tuangalie hapa tolower.
Kama mimi kuangalia tolower, kwenda kutoka mji mkuu wa Herufi za chini,
hebu angalia jinsi tuweze kutekeleza mpango huu.
Hapa ni kuu, na si kuchukua hoja amri yoyote-line.
Mimi kutangaza c tabia kwa barua kwamba mtumiaji anaenda aina in
Mimi kisha kutumia do familiar wakati kitanzi tu kuhakikisha kwamba mtumiaji dhahiri anitiaye mtaji
au B au C. .. Z, hivyo nipe kitu kati na Z.
Na sasa nini mimi nafanya nini hapa?
Mimi nina "au" hii ing na 0x20, lakini hiyo ni kweli sawa -
na tutaweza kurudi huu katika wakati - 32.
Hivyo tena, 32 ni muundo huu wa bits hapa. Kwa nini sisi kujua hili?
Hebu fikiria nyuma wiki 0.
Hii ni mahali 1s, 2S mahali, 4s, 8s, 16S, 32s mahali.
Hivyo hii idadi ya njano hutokea kwa kuwa 32.
Naweza kuchukua sehemu ya barua kama Char hapa, bitwise "au" kwa idadi halisi 32,
na nini mimi kupata nyuma? toleo lowercase ya kwamba Char.
wakati uliopita, ingawa, mimi walionyesha hii katika nukuu mbalimbali ya msingi.
Nini hii kuwakilisha? >> [Mwanafunzi] hexadesimoli.
[Malan] Hii hutokea kwa kuwakilisha hexadesimoli.
Sisi si aliyesema kuhusu hexadesimoli yote kwamba mengi,
lakini ni kweli rahisi katika kesi kama hii.
>> Hata ingawa inaonekana ngumu zaidi na hata kama inaonekana kama 20 na si 32,
zinageuka kuwa hexadesimoli ni kweli super rahisi nukuu
kwa sababu katika kila hexadesimoli tarakimu baada 0x - na hii si kitu;
hii ni binadamu mkataba kwamba anasema hapa inakuja idadi hexadesimoli -
kila ya tarakimu hizi, 2 na kisha 0, wao wenyewe inaweza kuwakilishwa
na hasa 4 bits.
Hivyo kama sisi kufanya hivyo, basi mimi kufungua mhariri Nakala hapa - weird oto kukamilisha -
kama sisi kufanya Nakala kidogo mhariri hapa, 0x20 idadi maana hapa ni 4 bits, hapa mwingine bits 4.
Hebu kufanya rightmost bits 4 kwanza.
0 wakati kuwakilishwa na bits 4 ni nini? Super rahisi. Tu wote sekunde 0.
Hivyo 4 bits kama sekunde 0.
Jinsi gani unaweza kuwakilisha 2? Ni muda tangu sisi alifanya hivyo, lakini ni 0,100.
Hivyo hii ni mahali 1s, hii ni mahali 2S, na kisha Haijalishi nini maeneo mengine ni.
Kwa maneno mengine, katika hexadesimoli unaweza kusema 0x20,
lakini kama wewe basi kufikiri kuhusu nini ni 2 na ni jinsi gani kuwakilishwa katika binary,
kile ni 0 na ni jinsi gani kuwakilishwa katika binary,
majibu ya maswali hayo ni hii na hii, kwa mtiririko huo.
Hivyo 0x20 kinachotokea kwa kuwakilisha muundo huu wa bits 8,
ambayo ni just mask kwamba tulitaka.
Hivyo hii ni kwa muda tu zoezi miliki,
lakini ukweli ni katika code ni kawaida zaidi ya kawaida ya kuandika constants kama hii
katika hexadesimoli kwa sababu kisha unaweza programu kiasi urahisi,
hata kama ni inahitaji baadhi ya karatasi na penseli, kufikiri nini kwamba mfumo wa bits ni
kwa sababu huwezi kueleza sekunde 0 na 1s kawaida katika code.
Huwezi kwenda 00,010 na kadhalika.
>> Una kuchukua notations decimal au hexadesimoli au octal au nyingine.
Watu wengi huwa na pick hexadesimoli tu ili tarakimu kila inawakilisha bits 4
na unaweza kufanya hili math haraka.
Na mimi itabidi kupitisha mkono wangu katika toupper, ambayo ni karibu sawa; inaonekana karibu kufanana.
Toupper kinachotokea kwa kutumia si operator au bali this guy na df.
Je df kuwakilisha? df? Mtu yeyote? >> [Mwanafunzi] 255.
255? Si 255. Hiyo itakuwa ff.
Tutaweza kuondoka hii moja kama zoezi kidogo.
Lakini kama wewe kwenda kutoka 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 na kisha nini inakuja baada ya 9?
Sisi ni aina ya nje ya tarakimu decimal, lakini katika hexadesimoli kile unakuja baada ya 9?
[Mwanafunzi] a. >> Hivyo, b, c, d.
Unaweza kufikiri kutoka huko nini muundo wa bits d kweli inawakilisha.
Na kama sisi kufanya math, tutaweza kuona kwamba mask wewe kuishia kupata nyuma ni sawa na hii.
Hii ni f, wote 1s, na hii ni d. Hivyo df inawakilisha kwamba mask. Wote haki.
Na mwisho, si kufanya mambo sound super, super kiufundi,
lakini nadhani sisi alitaka kuandika mpango kwamba hana huu.
Hebu kwenda mbele na kufanya binary, ambayo ni programu katika faili inayoitwa binary.c.
Na sasa napenda kukimbia binary na kunipa integer zisizo hasi.
Hebu kuanza rahisi na aina katika 0.
Hii sasa ni mpango kwamba Prints nje integer katika binary uwakilishi wake.
Hivyo kama mimi kucheza mchezo huu tena na aina katika 1 tu, mimi lazima kupata uwakilishi 32-bit ya 1.
Kama mimi kufanya hii tena na 2, mimi lazima kupata hiyo.
Kama mimi kufanya 7, mimi lazima kupata 1s chache mwishoni na kadhalika.
Ni zinageuka mimi kutaja hili kwa sababu pamoja na shughuli bitwise
unaweza kweli kufanya kitu kimoja nyingine pia.
Unaweza kuunda masks haya dynamically.
Kuangalia mfano huu moja ya mwisho ya kuwashirikisha shughuli bitwise.
Hapa ni sehemu ya kwanza ya kificho, na kuchochea mtumiaji kwa idadi,
na anasisitiza kwamba wewe nipe integer zisizo hasi.
Basi hiyo ni aina ya mambo ya kale shule.
Lakini hapa ni kitu ambacho ni aina ya kuvutia.
>> Jinsi gani mimi kwenda kuhusu uchapishaji idadi katika binary?
Mimi kwanza iterate kutoka kile kile?
Nini ukubwa wa int kawaida, angalau katika appliance? >> [Mwanafunzi] 4.
Ni 4. Hivyo 4 * 8 ni 32-1 ni 31.
Basi, ikiwa mimi nina kuanza kuhesabu kutoka 31, kwamba inawakilisha, ni zamu nje,
tu conceptually, kidogo 31 au zaidi kidogo ili, ambayo ni guy hii zaidi ya hapa,
ambapo hii ni kwenda kuwa kidogo 0.
Hivyo hii ni kidogo kidogo ... 01 31.
Hivyo kile ni kanuni hii kufanya?
Taarifa hii kwa kitanzi, ingawa inaonekana cryptic, ni tu iterating kutoka 31 chini ya 0. Hiyo ni.
Hivyo sehemu ya kuvutia sasa lazima katika mistari haya 5 hapa.
Ona kwamba katika mstari huu mimi nina kutangaza variable kuitwa mask
kuwa thabiti na hadithi yetu ya namba hizi njano.
Na kisha nini hii kufanya?
Hii ni nyingine operator bitwise tumekuwa si kuona mbele, uwezekano mkubwa.
Ni kushoto kuhama operator.
Operator Hii haina hii.
Hapa ni namba 1, na kama huna i kushoto kuhama, kushoto kuhama,
nini unafikiri kwamba ina athari ya kufanya kwa 1 kwamba mtu binafsi?
Literally shifting ni juu.
Hivyo kama namba 1 ni nini una upande wa kushoto na kuanza kwa initializing i kwa 31,
kile ni kwamba anaenda kufanya nini? Ni kwenda kuchukua namba 1 na kuhama ni maeneo 31 zaidi ya hapa.
Na kwa sababu kuna wazi hakuna tarakimu nyingine nyuma yake,
hizo na default kubadilishwa na sekunde 0.
Hivyo itabidi kuanza nje na idadi 1, ambayo bila shaka inaonekana kama hii -
na basi mimi kuteka ni zaidi ya hapa katikati.
Na kisha kama wewe kuhama mambo kwa upande wa kushoto, guy hii kimsingi inakwenda kwa njia hii.
Lakini kwa haraka kama wewe kufanya hivyo, 0 anapata kujazwa ndani
Kama wewe kuhama mara ya pili, unaendelea kwa njia hii na mwingine anapata kujazwa 0 in
>> Wewe kuhama tena na kisha 0 mwingine anapata kujazwa ndani
Hivyo kama wewe kufanya jambo hili la << 1 i 31, maeneo, wewe kuishia kupata mask
kwamba ni 32 wahusika muda mrefu, mmoja leftmost ambayo ni 1,
yote ya mapumziko ya ambayo ni 0.
Na zinageuka, kama kando, shifting idadi ya kushoto kama hii
pia kiajali, na wakati mwingine conveniently,
ina athari ya kufanya nini kwa idadi hiyo? >> [Mwanafunzi] kutaka kuongezwa.
Kutaka kuongezwa kwa sababu kila moja ya nguzo - mahali 1s, 2S mahali, 4s mahali,
8s mahali, 16S mahali - they're wote mara dufu kama wewe kwenda kushoto.
Au tuseme, wakati wewe kuhama 1s utaenda kuishia kutaka kuongezwa thamani ya idadi.
Unaweza kuishia kufanya mabadiliko ya kuvutia ya tarakimu
na shifting kila kitu juu kwa namna hii kwa nguvu ya 2.
Hivyo ni jinsi gani kazi hii?
Hii basi anitiaye mask kwamba wote isipokuwa kwa sekunde 0 1 katika mahali just mimi nataka,
na kisha hii kujieleza, ambayo ni kuibiwa kutoka toupper.c,
ni kusema tu kuchukua idadi n kwamba mtumiaji typed katika,
"Na" kwa mask kwamba, na nini ni wewe kwenda kupata?
Wewe ni kwenda kupata 1 kama kuna 1 katika eneo kwamba Masked,
au wewe ni kwenda kupata 0 kama kuna si.
Na hivyo programu hii yote haina ufanisi ni ina kitanzi,
na inajenga mask na 1 zaidi ya hapa, basi 1 zaidi ya hapa, basi 1 zaidi ya hapa,
na inatumia hii bitwise NA hila kusema ni kuna kidogo 1 katika pembejeo ya mtumiaji hapa?
>> Je, kuna kidogo 1 katika pembejeo ya mtumiaji hapa? Na kama hivyo, literally magazeti 1, mwingine magazeti 0.
Sisi ni kufanya hii kwa sababu tu ints kwamba ni kwa nini sisi ni kufanya bits 32 badala ya 8,
lakini kile ambacho tumekuwa kuletwa basi ni hii bitwise NA, AU hii bitwise,
na hii kushoto kuhama operator, ambayo si mara nyingi sana msaada,
lakini zinageuka wanaweza kuwa.
Kwa kweli, kama ungekuwa na kuwakilisha kitu kama safu ya Booleans
tu kuwakilisha kweli au uongo, tuseme alitaka kuweka wimbo wa kama au
chumba kamili ya wanafunzi 300 ni sasa,
unaweza kutangaza safu ya ukubwa 300 ya aina bool ili kupata bools 300,
na unaweza kuweka kila kweli kama mtu ni hapa na uongo vinginevyo.
Kwa nini ni kuwa uwakilishi katika muundo kwamba data ufanisi?
Nini mbaya kuhusu mpango wa kuwa muundo data, safu ya bools 300?
Nini ni bool, kwa kweli, chini ya Hood?
Hii pia, ni kitu ambacho wanaweza kuwa familiar.
Ni zinageuka hakuna bool.
Kumbuka sisi aina ya umba kwamba na faili cs50.h,
ambayo yenyewe ni pamoja bool standard.
C ni aina ya bubu, ingawa, linapokuja bool.
Ni matumizi ya bits 8 kuwakilisha kila bool, ambayo ni kabisa fujo
kwa sababu ni wazi, jinsi wengi bits gani unahitaji kuwakilisha bool? 1 tu.
Hivyo ni zinageuka kuwa kama wewe sasa una uwezo pamoja na waendesha bitwise
kuendesha bits mtu binafsi hata katika Char, hata katika Byte moja,
zinageuka unaweza kupungua kumbukumbu inahitajika kuwakilisha kitu kijinga
kama kwamba mahudhurio styled data muundo kwa sababu ya 8.
Badala ya kutumia bits nane kuwakilisha kweli au uongo, unaweza kutumia moja literally
kwa kutumia Byte moja kwa kila wanafunzi nane katika darasa
na toggling kutoka bits 0-1 mtu binafsi kwa kutumia aina hii ya tricks ngazi ya chini.
Kwamba kwa kweli kukomesha nishati. Je, kuna maswali kuhusu shughuli bitwise?
>> Yeah. >> [Mwanafunzi] Je, kuna operator kipekee au?
Ndiyo. Kuna operator kipekee au kwamba inaonekana kama hii, ^, alama karoti,
ambayo ina maana tu jambo la kwanza au kitu pili inaweza kuwa 1 kwa pato kuwa 1.
Kuna pia si, ~, ambayo itawawezesha Geuza 0 kwa kinyume 1 au makamu pia.
Na pia kuna haki ya kuhama operator, >>, ambayo ni kinyume moja tuliona.
Wote haki. Hebu sasa mambo kwa kiwango cha juu.
Sisi kuanza kwa kuzungumza kuhusu maandishi na kisha compressing ni
na anayewakilisha asilia na idadi chache ya bits;
sisi aliyesema kidogo kuhusu jinsi gani tunaweza sasa kuanza kufanyia mambo katika ngazi bitwise.
Hebu sasa zoom nyuma juu ya miguu 10,000 kwa uwakilishi
mambo magumu zaidi kama graphics.
Hapa tuna bendera ya Ujerumani, hapa tuna moja ya Ufaransa.
Haya yanaweza kuwakilishwa katika format faili unaweza kujua - GIFs, kwa mfano.
Kama ve milele kuonekana picha kwenye mtandao kwamba mwisho katika. Gif,
hii ni interchange graphics format.
Hizi bendera mbili hapa aina ya mikopo wenyewe kwa compression
kwa nini labda dhahiri sababu? >> [Inaudible mwanafunzi majibu]
Kuna mengi ya marudio, haki?
Ili kutuma bendera ya Ujerumani, kufikiri ya hii kama kuwa picha kwenye screen
nyuma katika siku yako Scratch.
Unaweza kukumbuka kwamba kuna mtu au saizi ya dots kwamba compose picha.
>> Kuna mstari mzima wa dots nyeusi na mwingine safu nzima ya dots nyeusi.
Kuna kundi la safu ya dots nyeusi kwamba tunaweza kuona kama kweli sisi zoomed katika,
sana kama wakati sisi zoomed katika juu ya uso Rob katika Photoshop.
Haraka kama sisi got zaidi na zaidi na zaidi katika picha,
wewe kuanza kuona pixelation, wote wa viwanja kuwa linajumuisha jicho lake katika kesi hiyo.
Same mpango hapa. Kama sisi zoomed katika kidogo kabisa, ungependa kuona dots mtu binafsi.
Naam, hii ni aina ya taka ya bits.
Kama tatu wa bendera ni nyeusi na ya tatu ya bendera ni njano na kadhalika,
kwa nini tushindwe kwa namna fulani compress hii bendera?
Na hata bendera Kifaransa inaweza kuwa Komprimerade ingawa muundo ni tofauti kidogo.
Ni zinageuka faili GIF format ni lossless compression format,
ambayo ina maana unaweza kuchukua sura kama bendera ya Ujerumani hapa,
unaweza kutupa mbali mengi ya bits yake bila kutoa sadaka quality.
Hii ni tofauti na kitu kama JPEGs,
ambayo wengi wetu pengine ni zaidi ya ukoo.
Facebook photos na Flickr picha na kama
ni karibu daima kuokolewa kama JPEGs wakati wao ni uploaded,
lakini JPEGs ni lossy - format ambapo huna kutupa bits - LOSSY
lakini wewe pia kutupa quality.
Na hivyo kama wewe compress photos kwa Photoshop au upload yao kwa Facebook
au kuchukua kwenye simu kweli crappy,
unajua kwamba picha ya kuanza kupata sana splotchy na pixelated,
na kwamba kwa sababu ni kuwa Komprimerade na kompyuta au simu
na literally kutupa taarifa mbali.
Lakini GIF ni ajabu kwa kuwa unaweza kutumia bits wachache kuliko nguvu, kwa default
bila ya kupoteza taarifa yoyote.
>> Na kimsingi anafanya hivyo kama ifuatavyo.
Badala ya kuhifadhi katika faili kama BMP ingekuwa mara tatu kwa RGB nyeusi, nyeusi, nyeusi, nyeusi,
nyeusi, nyeusi, nyeusi, nyeusi, nyeusi, nyeusi, nyeusi, nyeusi na kadhalika,
badala yake, format GIF ni kwenda kusema, "Black,"
na kisha, "Rudia hivi mara 100," au kitu kama hicho.
"Black, kurudia mara hii 100, nyeusi, kurudia mara hii 100 ..."
"Yellow, kurudia mara hii 100."
Na hivyo anakumbuka, kimsingi, pixel leftmost
na kisha husimba namna fulani dhana ya kurudia kwamba pixel tena na tena.
Hivyo basi unaweza GIFs compress wenyewe bila ya kupoteza taarifa yoyote.
Lakini kama alikuwa na nadhani, kama kwamba ni algorithm kwamba gifs matumizi,
ambayo ya bendera hizi, ingawa wao kuangalia kufanana katika kawaida,
ni kwenda kuwa ndogo wakati kuokolewa kwenye disk kama GIF? >> [Mwanafunzi] Ujerumani.
Ujerumani ni kwenda kuwa ndogo? Kwa nini?
[Mwanafunzi] Kwa sababu wewe kurudia hivyo wengi, mara nyingi usawa
na kisha wewe kurudia wakati mwingine. >> Hasa.
Kwa sababu watu ambao zuliwa GIF aina tu ya kiholela aliamua
kwamba marudio itakuwa leveraged usawa na si laterally.
Kuna mengi zaidi marudio laterally hapa katika bendera ya Ujerumani kuliko katika bendera ya Kifaransa.
Hivyo kama sisi kweli kufungua folda kwenye gari yangu ngumu ambayo ina GIFs hizi,
unaweza kuona kwamba bendera ya Ujerumani hapa ni 2 kilobytes na moja ni Kifaransa 4 kilobytes.
Hutokea kwa kuwa kwa bahati mbaya kuwa moja ni mara mbili nyingine,
lakini ni kwa kweli kesi hiyo bendera Kifaransa ni kubwa zaidi.
>> Hata ingawa sisi ni kuzungumza hapa kuhusu graphics, mawazo huo unaweza kuomba
si mambo kama bendera lakini picha ambazo ni kidogo ngumu zaidi.
Kama wewe kuchukua picha ya apple, hakika kuna mengi ya kurudia huko,
hivyo tunaweza kukumbuka kwamba kwa namna fulani background default ni bluu
na hivyo, kama picha kulia unaonyesha,
na kukumbuka rangi ya pixel kila moja katika picha hii.
Hivyo tunaweza kutupa bits mbali huko bila ya kupoteza habari.
apple bado inaonekana tu sawa.
Katika mfano huu hapa, unaweza kuona nini kinatokea katika movie.
Hizi kuwakilisha reels filamu zamani-shule ambapo katika picha ya juu kuna
una kuendesha gari RV zamani nyumba na mti.
Na kama kwamba van anatoa nyuma kutoka kushoto kwenda kulia, ni nini wazi si kubadilisha?
nyumba si kwenda popote, na mti si kwenda popote.
Kitu pekee ambacho ni kusonga van katika kesi hii.
Hivyo kama Background Kutobadilika unaonyesha, nini unaweza kufanya katika sinema
ni vile vile tu kutupa taarifa kwamba haina mabadiliko katika kati ya muafaka.
Hii ni kwa ujumla inayojulikana kama compression interframe
ambapo kama frame hii inaonekana karibu kufanana na hii moja,
basi si bother kuhifadhi kwenye disk yoyote ya habari kufanana
juu ya muafaka haya kati, hebu tu kutumia muafaka muhimu mara moja kwa wakati
kwamba kweli kuhifadhi kwamba taarifa redundantly tu kama sanity kidogo kuangalia.
>> Kwa kulinganisha, njia nyingine ya video compressing ni katika mfano huu wa pili na ya chini hapa,
ambapo badala ya kuhifadhi 30 muafaka, kwa nini sio tu kuhifadhi muafaka 15 pili badala yake?
Badala ya aina ya movie inapita uzuri, kikamilifu,
inaweza kuangalia kama ni stuttering kidogo, kidogo umri wa shule,
lakini athari wavu itakuwa kutumia bits mbali wachache kuliko ili vinginevyo kuwa muhimu.
Hivyo ambapo gani hii kisha kuondoka sisi?
Hiyo ilikuwa kidogo ya kando ambapo mwingine unaweza kwenda kwa compression.
Kwa zaidi juu ya kwamba, kuchukua darasa kama CS175 hapa.
Hapa ni mfano mwingine ndani ya video.
Kama nyuki ni kitu tu kusonga,
kweli unaweza kutupa habari katika muafaka wale katikati
kwa sababu ya maua na anga na majani si kubadilisha.
Lakini hebu fikiria sasa moja ya mwisho kitu.
Katika dakika 5 ijayo sisi kuondoka C nyuma ya milele katika hotuba? Ndiyo. Si katika psets, ingawa.
Mwisho hadithi kuhusu C na kisha sisi kupata stuff sexy sana
kuwashirikisha HTML na Mtandao na woo-hoo. Wote haki.
Hapa sisi kwenda. Hiyo ni motisha.
Ni zinageuka wakati huu wote wakati tumekuwa kuandika programu sisi kukimbia Clang.
Na Clang, tumekuwa alisema tangu wiki ya kwanza pretty much, inachukua chanzo code
na waongofu katika kanuni kitu.
Inachukua C na waongofu katika sekunde 0 na 1s.
Nimekuwa aina ya kuwa amelala na wewe kwa muda wa wiki chache kwa sababu si kabisa kama rahisi kama hayo.
>> Kuna mengi zaidi kinachoendelea chini ya Hood wakati kukimbia mpango kama Clang.
Kwa kweli, mchakato wa kuandaa mpango unaweza kweli kuwa muhtasari,
kama unaweza kukumbuka kutoka video Rob juu compilers,
ndani ya hatua hizi 4: kabla ya usindikaji, kuandaa yenyewe, kukusanyika, na kuunganisha.
Lakini sisi katika darasa na watu wengi katika ulimwengu kawaida muhtasari hatua zote hizi
kama tu "kuandaa."
Lakini kama sisi kuanza na chanzo code kama hii, wanakumbuka hili ni rahisi labda C mpango
tumekuwa imeandikwa hivi sasa, kukumbuka kwamba wakati compiled inaishia kuangalia kama hii.
Lakini kuna kweli hatua ya kati, na wale hatua ni kama ifuatavyo.
Kwanza kuna kitu hii ifikapo sana juu ya hili na wengi wa mipango yetu,
# Pamoja
Je ni pamoja na kufanya # ajili yetu?
Ni pretty much nakala na pastes yaliyomo ndani ya faili stdio.h yangu ili kwamba kwa nini?
Mbona mimi huduma kuhusu yaliyomo ya stdio.h? Nini katika huko wa maslahi?
Tamko Printf wa, mfano wake, ili compiler basi anajua nini namaanisha
wakati mimi kutaja kazi hii printf.
Hivyo hatua ya 1 katika kuandaa ni kabla ya usindikaji, ambapo mpango kama Clang
au baadhi ya mpango msaidizi kwamba Clang kuja na wasomaji code yako juu hadi chini,
kushoto na kulia, na wakati wowote anaona ishara # ikifuatiwa na Keyword kama ni pamoja na,
hufanya kwamba operesheni, kuiga na pasting katika hii stdio.h kesi ndani ya faili yako.
Hiyo ni hatua ya 1.
Kisha una kubwa sana C faili sababu ya nakala kubwa, kuweka kazi hiyo ilitokea tu.
>> Hatua ya 2 sasa ni kuandaa.
Lakini zinageuka kuandaa inachukua chanzo kificho kwamba inaonekana kama hii
na anarudi katika kitu ambacho inaonekana kama hii,
ambayo kwa wale jamaa ni wito? >> [Mwanafunzi] Bunge. >> Baraza lugha.
Hii ni kweli kitu kama wewe kuchukua CS61 utasikia kupiga mbizi katika kwa undani zaidi.
Hii ni kuhusu karibu kama unaweza kupata kwa kuandika sekunde 0 na 1s mwenyewe
lakini kuandika mambo katika njia ambayo bado inafanya angalau kidogo ya akili vile.
Hizi ni mashine ya maelekezo, na kama sisi kitabu chini na kazi kuu hapa,
taarifa kwamba kuna maelekezo haya kushinikiza, hoja mafundisho, Ondoa mafundisho,
piga mafundisho, na kadhalika.
Wakati kusikia kwamba kompyuta yako ina Intel ndani,
una CPU Intel katika Mac au PC yako, nini maana ya kwamba?
CPU huja lililojengwa na makampuni kama Intel kuelewa maelekezo fulani.
Wao hawana wazo nini kazi kama byta ni au kuu ni per se,
lakini wao kujua nini ngazi ya chini sana maelekezo kama kuongeza, Ondoa, kushinikiza,
hoja, piga, na kadhalika ni.
Hivyo wakati wewe kukusanya C code katika lugha mkutano,
user yako sana code kirafiki-kuangalia ni waongofu katika kitu ambacho inaonekana kama hii,
kwamba literally moves ka au ka 4 kuzunguka katika vitengo vile ndogo ndani na nje ya CPU.
Lakini hatimaye, wakati Clang ni tayari kuchukua hii ya uwakilishi wa mpango wako
ndani ya sekunde 0 na 1s, basi hatua inayoitwa kukusanyika kinachotokea,
na hii tena wote hutokea katika kupepesa jicho wakati wa mbio Clang.
Sisi kuanza hapa, ni matokeo ya faili kama hii, na kisha ni waongofu kwa sekunde 0 hizi na 1s.
Na kama unataka kwenda nyuma katika baadhi ya uhakika na kweli kuona hii katika hatua,
kama mimi kwenda katika hello1.c-hii ni moja ya mipango ya kwanza kabisa tuliangalia -
kawaida sisi ingekuwa kukusanya hii kwa hello1.c Clang na hii atatupa a.out.
Kama kwa kulinganisha wewe badala kuwapa-S bendera, nini utapata ni hello1.s
na wewe utakuwa kweli kuona lugha ya mkutano.
>> Mimi nina kufanya hili kwa ajili ya mpango mfupi sana, lakini kama wewe kurudi nyuma kwa kinyang'anyiro
au Kuokoa au na mpango wowote ve imeandikwa tu nje ya udadisi
wanataka kuona nini kweli inaonekana kama, nini kweli kuwa kulishwa ndani ya CPU,
unaweza kutumia kwamba-S bendera na Clang.
Lakini basi mwisho, bado kuna moja gotcha.
Hapa ni sekunde 0 na 1s kwamba kuwakilisha utekelezaji wangu wa hujambo dunia.
Lakini mimi kutumika kazi ya mtu mwingine katika mpango wangu.
Hivyo ingawa mchakato imekuwa mimi kuchukua hello.c,
anapata compiled katika code mkutano, na kisha anapata wamekusanyika ndani ya sekunde 0 na 1s,
tu sekunde 0 na 1s kwamba ni outputted katika hatua hii kwa wakati
ni wale ambao matokeo kutoka code yangu.
Lakini mtu ambaye aliandika printf, wao compiled kanuni zao miaka 20 iliyopita
na ni sasa imewekwa mahali fulani kwenye appliance,
hivyo sisi kwa namna fulani kuwa na kuunganisha sekunde 0 wake au wake na 1s kwa sekunde 0 yangu na 1s,
na kwamba inatuleta hatua 4 na mwisho wa kuandaa, unaojulikana kama kuunganisha.
Hivyo upande wa mkono wa kushoto tuna exact picha kama kabla ya:
hello.c inakuwa mkutano code inakuwa sekunde 0 na 1s.
Lakini kumbuka kwamba mimi kutumika kiwango I / O maktaba katika code yangu,
na kwamba maana mahali fulani kwenye kompyuta kuna faili inayoitwa stdio.c
au angalau version compiled yake kwa sababu mtu baadhi ya miaka iliyopita
compiled stdio.c katika kanuni mkutano na kisha rundo zima la sekunde 0 na 1s.
Hii ni nini inayojulikana kama tuli au maktaba ya nguvu.
Ni baadhi ya faili wamekaa mahali fulani katika appliance.
>> Lakini mwishowe, nina kuchukua sekunde 0 yangu na 1s na kwamba ni mtu sekunde 0 na 1s
na kwa namna fulani kuwaunganisha pamoja, literally kuchanganya wale sekunde 0 na 1s
ndani ya faili moja iitwayo a.out au hello1 au chochote mimi kuitwa mpango wangu
ili matokeo ya mwisho ina wote wa 1s na sekunde 0 kwamba lazima kutunga mpango wangu.
Hivyo wakati huu wote hii muhula wakati tumekuwa kutumia Clang
na hata hivi karibuni zaidi mbio kufanya ili kuendesha Clang,
hatua zote hizi zimekuwa zikijitokeza aina ya mara lakini sana kwa makusudi.
Na hivyo kama wewe kuendelea katika sayansi ya kompyuta, yaani CS61,
hii ni safu kwamba utasikia kuendelea peel nyuma mbali huko
kuzungumza juu ya ufanisi, matokeo ya usalama, na kama ya maelezo haya chini ya kiwango.
Lakini pamoja na kwamba, sisi ni kuhusu kuondoka C nyuma.
Hebu kwenda mbele na kuchukua yetu 5-dakika kuvunja sasa,
na wakati sisi kurudi: Internet.
Wote haki. Sisi ni nyuma.
Sasa tunaanza kuangalia wetu siyo tu katika HTML kwa sababu, kama utaona,
HTML yenyewe ni kweli pretty rahisi
lakini kwa kweli katika programu mtandao kwa ujumla zaidi, mitandao kwa ujumla zaidi,
na jinsi Teknolojia zote hizi kuja pamoja
kuruhusu sisi kujenga mipango kiasi kisasa zaidi atop Internet
kuliko hivi sasa tumekuwa na uwezo wa katika madirisha haya nyeusi na nyeupe.
Hakika, katika hatua hii katika muhula ingawa sisi kutumia kiasi kidogo wakati
juu ya PHP, HTML, CSS, JavaScript, SQL na zaidi,
wanafunzi wengi wanaishia kufanya miradi ya mwisho kwamba ni mtandao msingi
kwa sababu kama utaona, background sasa una katika C
ni mengi sana zinazotumika kwa lugha hizi ngazi ya juu.
>> Na kama wewe kuanza kufikiri juu ya mradi wako wa mwisho,
ambayo, kiasi kama Tatizo Set 0, ambapo walikuwa na moyo
kufanya zaidi kitu chochote cha riba na wewe katika Scratch,
mradi wa mwisho ni nafasi yako kuchukua maarifa yako newfound na savvy na C
au PHP au JavaScript au kama nje kwa spin
na kujenga kipande yako mwenyewe sana ya programu kwa ajili ya dunia ya kuona.
Na uzao wewe na mawazo, tunajua kwamba wewe unaweza kichwa hapa, projects.cs50.net.
Kila mwaka, sisi kukusanya mawazo kutoka Kitivo na wafanyakazi na vikundi mwanafunzi juu ya chuo
tu ya kuwasilisha mawazo yao kwa ajili ya mambo ya kuvutia ambayo inaweza kutatuliwa kwa kutumia kompyuta,
kutumia tovuti, kwa kutumia programu.
Hivyo kama wewe ni zinakabiliwa na kuja na wazo yako mwenyewe,
kwa njia zote kitabu kupitia mawazo kuna kutoka mwaka huu na mwisho.
Ni sawa kikamilifu kukabiliana na mradi ambayo imekuwa kukabiliana kabla.
Tumeona programu nyingi kwa ajili ya kuona hali ya kufulia ya chuo,
wengi Apps kwa navigering ukumbi dining menu,
wengi Apps kwa navigering catalog kozi na kama.
Na hakika, katika hotuba ya baadaye na katika semina ya baadaye,
sisi kuanzisha wewe APIs baadhi hadharani, wote inauzwa
kama vile hapa zinapatikana kutoka CS50 juu ya chuo ili kufikia data
na wanaweza kufanya mambo ya kuvutia na hayo.
Hivyo zaidi katika miradi ya mwisho katika siku chache wakati sisi kutolewa vipimo,
lakini kwa sasa, kujua kwamba unaweza kufanya kazi solo au na marafiki moja au mbili
juu zaidi mradi wowote wa maslahi na wewe.
Internet.
Wewe kwenda mbele na kujiondoa Laptop yako, wewe kwenda facebook.com kwa mara ya kwanza,
wasijazipokea watumiaji katika hivi karibuni, na hit Enter. Nini hasa hutokea?
>> Wakati wewe hit Enter kwenye kompyuta yako, rundo zima la hatua
kuanza aina ya magically kinachotokea.
Hivyo hapa kwenye server kushoto, mtandao kama Facebook ni hapa juu ya haki,
na kwa namna fulani unatumia hii lugha inayoitwa HTTP, HyperText Transfer itifaki.
HTTP ni si lugha ya programu. Ni zaidi ya itifaki.
Ni seti ya mikataba ya kwamba mtandao browsers na servrar mtandao kutumia wakati intercommunicating.
Na nini maana ya hii ni kama ifuatavyo.
Mengi kama katika ulimwengu wa kweli, tuna mikataba haya
ambapo kama wewe kukutana na baadhi ya binadamu kwa mara ya kwanza, kama huna akili humoring yangu hapa,
Nipate kuja kwenu, kusema, "Hi, jina langu ni David." >> Hi, Daudi. Jina langu ni Sammy.
"Hi, Daudi. Jina langu ni Sammy."
Hivyo sasa sisi tu kushiriki katika aina hii ya itifaki silly binadamu
ambapo mimi wameanzisha itifaki, Sammy ina alijibu,
tumekuwa unaotikiswa mikono, na manunuzi ni kamili.
HTTP ni sawa sana katika roho.
Wakati mtandao wako browser maombi www.facebook.com,
nini browser yako ni kweli kufanya ni kupanua mkono wake, ili kuzungumza,
server na ni kupeleka ujumbe.
Na ujumbe kuwa ni kawaida kitu kama kupata - unataka nini ili kupata? -
kupata yangu ukurasa wa nyumbani, ambayo ni kawaida ulionyehsa kwa kufyeka moja katika mwisho wa URL.
Na hivyo tu kujua nini lugha nina kuzungumza, mimi browser naenda kukuambia
kwamba mimi nina akizungumza HTTP version 1.1,
Na pia kwa hatua nzuri, mimi naenda kukuambia kwamba jeshi kwamba mimi nataka ukurasa wa nyumbani wa
ni facebook.com.
Kawaida, kivinjari, unbeknownst na wewe, mwanadamu,
hutuma ujumbe huu katika mtandao wakati wewe tu aina www.facebook.com,
>> Kuingia, katika browser yako.
Na nini Facebook kujibu kwa?
Ni anajibu na baadhi ya maelezo sawa-kuangalia cryptic lakini pia mengi zaidi.
Hebu kwenda mbele nyumbani ukurasa wa Facebook hapa.
Hii ni screen kwamba wengi wetu pengine kamwe kuona kama wewe kukaa watumiaji katika muda wote,
lakini hii ni kweli nyumba zao ukurasa.
Kama sisi kufanya hili katika Chrome, taarifa kwamba unaweza kuvuta up haya menus muktadha kidogo.
Kutumia Chrome, iwe juu Mac OS, Windows, Linux, au kama,
kama wewe Udhibiti click au click kushoto, unaweza kawaida kuvuta up menu kwamba inaonekana kama hii,
ambapo chaguzi chache wakisubiri, moja ambayo ni View Kwanza Chanzo.
Unaweza pia kawaida kupata mambo haya kwa kwenda menu View na poking kote.
Kwa mfano, hapa chini View, Developer ni kitu kimoja.
Mimi nina kwenda mbele na kuangalia View Chanzo Kwanza.
Nini utaona ni HTML kwamba Marko ameandika kuwakilisha facebook.com.
Ni fujo kamili hapa, lakini tutaweza kuona kwamba hii hufanya kidogo maana zaidi kabla ya muda mrefu.
Lakini kuna baadhi ya mifumo hapa. Hebu kitabu chini stuff kama hii.
Hii ni ngumu kwa binadamu kusoma, lakini taarifa kwamba kuna muundo huu wa mabano angled
na maneno kama chaguo, maneno kama thamani, masharti baadhi alinukuliwa.
Hii ni wapi, wakati saini up kwa mara ya kwanza, maalum kile yako ya kuzaliwa ni mwaka.
Menyu kunjuzi ya miaka ya kuzaliwa kwa namna fulani encoded hapa
katika hii lugha inayoitwa HTML, HyperText Markup lugha.
Kwa maneno mengine, wakati browser yako maombi ya ukurasa wa mtandao,
inazungumzia hii mkataba kuitwa HTTP.
Lakini ni nini facebook.com kujibu ombi kwamba pamoja na?
>> Ni anajibu na baadhi ya ujumbe huu cryptic, kama tutaweza kuona katika wakati huu.
Lakini zaidi ya majibu yake ni katika aina ya HTML, HyperText Markup lugha.
Hiyo ni lugha halisi ambayo ukurasa mtandao yaliyoandikwa.
Na nini kivinjari kweli haina kisha ni, juu ya ofisi ya kitu ambacho inaonekana kama hii,
husoma juu hadi chini, kushoto na kulia, na wakati wowote anaona moja ya mabano haya angled
ikifuatiwa na Keyword kama chaguo, ni maonyesho ya kwamba lugha ghafi katika njia sahihi.
Katika kesi hii, itakuwa kuonyesha drop-down menu ya miaka.
Lakini tena, hii ni fujo kamili ya kuangalia.
Hii ni kwa sababu si Facebook watengenezaji yatangaza 0 5 kwa ajili ya mtindo, kwa mfano.
Hii ni kwa sababu wengi wa kificho kwamba wao kuandika ni, kwa kweli, imeandikwa uzuri,
vizuri maoni, nicely indented, na kama,
lakini wa mashine ya shaka, kompyuta, browsers kweli si kutoa damn
kama code yako ni vizuri-styled.
Na kwa kweli, ni kabisa fujo kwa hit muhimu tab wale mara zote
na kuweka maoni yote katika code yako na kuchagua kweli maelezo majina variable
kwa sababu kama browser hajali, kila unachokifanya mwisho wa siku ni kupoteza bytes.
>> Hivyo zinageuka kile wengi tovuti kufanya ni hata kama chanzo code kwa facebook.com,
kwa cs50.net na wote wa tovuti hizo nyingine kwenye mtandao
ni kawaida vizuri imeandikwa na vizuri maoni na nicely indented na kama,
kawaida kabla ya tovuti ni kuweka kwenye mtandao, code ni minified,
ambapo HTML na CSS - kitu kingine tutaweza kuona hivi karibuni -
Code JavaScript tutaweza kuona hivi karibuni inasukumwa,
ambapo kwa muda mrefu majina variable kuwa X na Y na Z,
na yote ya kwamba whitespace kwamba inafanya kila kitu ili kuangalia ni someka wote kutupwa mbali,
kwa sababu kama wewe kufikiri juu yake kwa njia hii, Facebook anapata ukurasa bilioni hits siku -
kitu mambo kama hayo - hivyo nini kama programu tu kuwa anal
hit bar nafasi moja ya ziada wakati tu Indent baadhi mstari wa kanuni milele hivyo zaidi?
Nini maana kama Facebook huhifadhi kwamba whitespace
katika yote ya ka wao kutuma nyuma kwa watu juu ya mtandao?
Kupiga nafasi bar mara moja inakupa Byte ziada katika faili yako.
Na kama watu bilioni kisha kuendelea na kupakua ukurasa wa nyumbani siku hiyo,
kiasi gani zaidi data kuwa wewe zinaa juu ya mtandao?
gigabyte kwa sababu si nzuri.
Na nafasi, kwa mengi ya Nje hii si suala vile scalable,
lakini kwa Facebook, kwa ajili ya Google, kwa baadhi ya tovuti maarufu zaidi
kuna motisha kubwa kifedha kufanya code yako kuangalia kama fujo
hivyo kwamba wewe ni kutumia kama ka machache iwezekanavyo kwa kuongeza kisha compressing ni
kutumia kitu kama zip, algorithm kuitwa gzip,
kwamba browser gani kwa ajili ya wewe moja kwa moja. Lakini hii ni kubwa.
Hatutawahi kujifunza chochote kuhusu tovuti za watu wengine na jinsi ya kubuni mtandao kurasa
kama tuna kuangalia ni kama hii.
>> Hivyo bahati nzuri, kama browsers Chrome na IE na Firefox siku hizi
kawaida kuja na zana developer kujengwa katika.
Kwa kweli, kama mimi kwenda chini hapa Kagua Element au kama mimi kwenda View, Developer,
na kwenda Vyombo vya Developer waziwazi,
dirisha hili chini ya screen yangu sasa pops up.
Ni kidogo vitisho kwa sababu kwanza kuna mengi ya tabo unfamiliar hapa,
lakini kama mimi bonyeza Elements njia yote katika kushoto chini,
Chrome ni wazi pretty smart. Ni anajua jinsi ya kutafsiri yote ya kanuni hii.
Na hivyo kile Chrome gani ni safisha up wote wa HTML Facebook.
Hata ingawa sio whitespace huko, kuna si indentation huko,
sasa ona kwamba naweza kuanza navigate ukurasa huu mtandao wote zaidi hierarchically.
Ni zinageuka kuwa kila ukurasa wa mtandao yaliyoandikwa katika lugha inayoitwa HTML5 lazima kuanza na hii,
tamko hili DOCTYPE, hivyo kusema: <! DOCTYPE html>
Ni aina ya mwanga na kijivu huko, lakini hiyo ni mstari wa kwanza kabisa wa kificho katika faili hili,
na kwamba tu anamwambia browser, "Hey, inakuja baadhi HTML5 inakuja ukurasa wa mtandao.".
kwanza wazi bracket zaidi ya kuwa hutokea kwa kuwa jambo hili, wazi bracket HTML tag,
na kisha kama mimi kupiga mbizi katika undani - haya ni mishale kabisa maana;
wao ni kwa ajili tu ya uwasilishaji wa, wao si kweli katika faili -
taarifa kwamba ndani ya tag Facebook HTML, chochote huanza na bracket wazi
na kisha ina neno inaitwa tag.
Hivyo ndani tag HTML ni inaonekana tag kichwa na tag mwili.
Ndani ya tag kichwa sasa ni fujo nzima kwa ajili ya Facebook
kwa sababu wana mengi ya metadata na mambo mengine kwa ajili ya masoko na matangazo.
>> Lakini kama sisi kitabu chini, chini, chini, chini, hebu angalia ambapo ni. Hapa ni.
Hii ni moja angalau kiasi fulani familiar.
hatimiliki ya nyumbani ukurasa wa Facebook, kama umewahi kuangalia katika tab katika cheo bar yako,
ni Karibu Facebook - Ingia, Jiandikishe au Jifunze Zaidi.
Hiyo ni nini ungependa kuona katika cheo bar Chrome,
na kwamba ni jinsi gani kuwakilishwa katika code.
Kama sisi kupuuza kila kitu kingine katika kichwa, wengi wa guts ya ukurasa wa mtandao ni katika mwili,
na zinageuka kuwa code Facebook ni kwenda kuangalia zaidi tata
kuliko wengi mambo tutaweza kuandika awali kwa sababu tu ni kuwa kujengwa kwa miaka,
lakini kuna mengi yote ya tags script, JavaScript code,
kwamba inafanya tovuti sana maingiliano:
kuona updates hadhi mara kwa kutumia lugha kama JavaScript.
Kuna kitu kinachoitwa div, ambayo ni zamu ya ukurasa.
Lakini kabla ya sisi kupata undani kwamba, hebu jaribu kwa zoom nje
na kuangalia toleo rahisi ya Facebook 1.0, hivyo kusema.
Hapa ni hello, dunia ya kurasa za mtandao.
Ina kuwa tamko DOCTYPE saa ya juu sana
ambayo ni tofauti kidogo kutoka kila kitu kingine.
Hakuna kitu kingine chochote sisi kuandika katika ukurasa wa mtandao ni kwenda kuanza na <! ila mstari kwamba kuna
na isipokuwa kwa kitu kinachoitwa maoni katika HTML.
Lakini kwa sehemu kubwa, kila kitu katika ukurasa wa mtandao ni wazi bracket, Keyword, karibu bracket.
>> Katika kesi hii unaweza kuona rahisi ya kurasa za mtandao iwezekanavyo.
Tag HTML ina tag kichwa na ina tag mwili,
lakini taarifa kwamba kuna wazo hili la kuanzia na kuacha tags.
Hii ni tag kuanza kwa HTML, hii ni karibu au tag tag mwisho.
Ona kwamba wao ni aina ya kinyume katika maana ya kwamba tag karibu au tag mwisho
ina hii mbele kufyeka ndani ya yenyewe.
Wakati huo huo, kuna wazi kichwa tag hapa na karibu tag kichwa hapa.
>> Kuna cheo wazi na karibu tag cheo hapa.
ukweli kwamba mimi ve kuweka cheo juu ya mstari mmoja, rena holela.
Ni tu inaonekana kama ingekuwa nicely fit kwenye mstari mmoja, hivyo mimi haikujali kupiga Ingiza mara kadhaa.
Wakati huo huo, mwili sikuwa Indent tu kuwa milele hivyo wazi.
Ona kwamba HTML ni lugha pretty bubu.
Kwa kweli, nyuma katika siku kabla kulikuwa WYSIWYG wahariri
na Microsoft Word ambapo unaweza kusema, "Fanya huu ujasiri, italics kufanya hili,"
wewe ingekuwa kweli aina amri kidogo katika insha 20 + miaka iliyopita
ambapo wewe kusema, "Anza kufanya Nakala hii koze Acha kufanya Nakala hii koze.".
"Kuanza kufanya italics hii Nakala Acha kufanya italics hii maandishi.".
>> Hiyo ni nini HTML au lugha yoyote ya kuashiria ni.
Hii tag kwanza anasema, "Hey, browser. Inakuja baadhi HTML."
tag ijayo anasema, "Hey, browser. inakuja kichwa, header wa mtandao ukurasa wangu."
"Hey, browser. Inakuja cheo."
Na kisha zaidi ya hapa, "Hey, browser. Hiyo ni kwa cheo."
Hivyo hii ni jinsi browser anajua tena kuonyesha wahusika zaidi ya hello, dunia
katika title bar.
Wakati huo huo, hii anasema, "Hiyo ni kwa kichwa."
Hii inasema, "Hiyo inakuja mwili Hapa ni mwili halisi." - Literally, maneno hello, ulimwengu.
Na hii anasema hapa, "Hiyo ni kwa ajili ya mwili Hiyo ni kwa HTML.".
Hivyo browsers ni pretty bubu.
Wao tu kusoma hii mambo juu hadi chini, kushoto na kulia, na kufanya nini hasa wanaambiwa kufanya.
Hebu kweli kufanya mfano kidogo hapa.
Hebu kufungua rahisi ya programu juu ya Mac yangu hapa, yaani TextEdit.
On Windows unaweza kutumia Notepad.exe.
Lakini haya ni yote unahitaji kuanza kufanya kurasa za mtandao.
Mimi nina kwenda mbele na nakala tu na kuweka hii code katika faili hii.
Mimi nina kwenda mbele na kuokoa ni kwenye desktop yangu,
na mimi nina kwenda kuokoa hii kama hello.html,
na sasa faili ni jina hello.html.
Hapa ni kwenye desktop yangu.
Hebu sasa kwenda katika browser na Drag faili katika browser.
Na voilà, hapa ni mtandao yangu ya kwanza kabisa ya ukurasa.
Ona kwamba jina la tab ni hello, dunia kama kwa tag cheo,
na taarifa kwamba hello, dunia ni mwili wa mtandao ukurasa wangu,
na woo-hoo, mimi niko kwenye mtandao.
>> Mimi si kweli, haki, kwa sababu faili hii si kwenye mtandao.
Hutokea kwa kuwa kwenye gari yangu mitaa bidii katika kwamba njia fulani.
Lakini wazo ni sawa. Wote sisi sasa haja ni server mtandao ambayo kwa upload.
Lakini kwanza hebu kweli kuanzisha kidogo zaidi utata na zaidi kidogo stylization.
Hii ni rahisi, kama boring, mtandao ukurasa.
Ni zinageuka kuna aina nyingine ya vitambulisho tunaweza kutumia.
Kwa mfano, hapa katika njano nimekuwa ilianzisha 2 tags mpya.
Sisi si kucheza sana na leo hii, lakini taarifa kwamba tag kiungo
namna fulani inaonekana tofauti na kila kitu kingine.
tag kiungo inachukua kile kinachojulikana sifa,
na sifa ni kitu ambacho hugeuza tabia ya tag.
Katika kesi hii hii si chaguo bora ya majina, kiungo, kwa sababu ni aina ya maana,
lakini hii tag kiungo anasema, kimsingi, ni pamoja na faili inayoitwa styles.css ndani ya mtandao ukurasa wangu.
Unaweza kufikiri ya hii kama sawa na C ya # ni pamoja na maelekezo.
Styles.css ni akimaanisha lugha tofauti kabisa kwamba sisi si kucheza kwa leo,
lakini ni kwa aesthetics: font ukubwa, rangi, padding, indentation, gharama za uzalishaji,
na wote wa aina hiyo ya undani aesthetics.
Wakati huo huo, tag script ni functionally sawa,
lakini badala ya ni pamoja na CSS, kwamba lugha, ni pamoja na lugha nyingine, JavaScript.
Hivyo kwa maneno mengine, na vitambulisho hizi 2 mimi hatimaye kuwa na uwezo wa kuandika mtandao wangu mwenyewe ukurasa
lakini pia kuvuta katika kificho kwamba mimi au mtu mwingine ameandika
ili tuweze kusimama juu ya mabega ya watu wengine, tunaweza mazoezi ya design nzuri,
factoring nje code ya kawaida.
Kama mimi nimepata 10 kurasa za mtandao tofauti, hii ina maana kwamba baadhi ya aesthetics yangu
inaweza kuwa zitawekwa nje, kiasi kama # ni pamoja na, ndani ya faili tofauti.
Hivyo sisi ni kupata huko.
Lakini hebu kweli kwanza kufanya kitu zaidi ya kuvutia na faili hii.
>> Tena, hii ni tu TextEdit. Mimi si kitaalam juu ya Internet bado, lakini tutaweza kupata huko.
Ningependa kufanya hello, ulimwengu kidogo bolder kuliko ilivyo.
Hivyo hello, hebu kiholela kusema kwa ujasiri.
Tena, hadithi ni sawa: hello, comma, kuanza kufanya hii ujasiri,
basi dunia anapata kuchapishwa katika ujasiri, na hii ina maana kuacha uchapishaji hii koze.
Hebu kwenda mbele na kuokoa faili yangu, kurudi nyuma na Chrome, mimi itabidi zoom katika tu ili tuweze kuona ni bora zaidi,
na Reload, na utaona dunia kwamba ni sasa katika koze.
Mtandao ni wote kuhusu viungo, hivyo hebu kwenda mbele na kufanya hili:
tovuti yangu favorite ni, hebu sema, youtube.com.
Ila, Reload. Sawa. Kuna matatizo ya wanandoa sasa badala hideousness wa tovuti.
1, nina uhakika pretty mimi hit Enter hapa. Na mimi.
Mimi si tu hit Enter, mimi pia indented, kufanya mazoezi nini tumekuwa kuhubiri kuhusu mtindo,
lakini yangu ni haki ya karibu na ulimwengu.
Hivyo kwa nini hii? Browsers kufanya kile tu wewe kuwaambia cha kufanya.
Sikumwambia browser, "Break mistari hapa Ingiza. Aya kuvunja hapa."
Hivyo browser, haijalishi kama mimi hit Kurudi mara 30,
ni bado kwenda kuweka sahihi yangu ijayo kwa ulimwengu.
Nini mimi kwa kweli kufanya hapa ni kusema kitu kama , ingiza kuvunja line.
>> Na kweli, kuvunja line ni aina ya kitu weird
sababu huwezi kweli kuanza kuhamia mstari mwingine, kisha kufanya kitu,
na kisha kuacha kuhamia mstari mpya. Ni aina ya operesheni atomic.
Wewe ama kufanya hivyo au haujui. Wewe hit Enter au huna.
Hivyo br ni kidogo kidogo ya tag tofauti, na hivyo mimi unahitaji aina ya wote wazi na karibu ni
wote kwa mara moja.
syntax kwa kuwa ni hii.
Kitaalam, unaweza kufanya kitu kama hiki katika matoleo baadhi ya HTML,
lakini hii ni wajinga tu kwa sababu hakuna sababu ya kuanza na kuacha kitu
kama unaweza kufanya hivyo badala wote mara moja.
Kutambua HTML5 kuwa haina madhubuti zinahitaji hii slash,
hivyo utaona vitabu na rasilimali online kwamba hawana hiyo,
lakini kwa hatua nzuri hebu mazoezi ulinganifu kwamba tumekuwa kuonekana hivi sasa.
Hii ina maana kwamba wote tag ni kufunguliwa na imefungwa.
Hivyo sasa basi mimi ila faili yangu, kurudi nyuma hapa.
Okay, kwa hivyo ni mapya kwa kuangalia bora, isipokuwa Mtandao najua ni aina ya Clickable,
na bado youtube hapa haionekani kusababisha kitu chochote.
Hiyo ni kwa sababu hata kama inaonekana kama kiungo, browser hajui kwamba per se,
hivyo nina kuwaambia browser kwamba hii ni kiungo.
>> njia ya kufanya hili ni kwa kutumia tag nanga:
<Href kwa mfumuko kumbukumbu, ambayo ni umri wa shule ya njia ya kusema kiungo,
= "Http://www.youtube.com">
na napenda hoja hii kwa mstari mpya tu hivyo ni kidogo zaidi someka,
na mimi itabidi shrink ukubwa font.
Mimi ni kufanyika bado? No Itakuja kuwa hii dichotomy.
Hii tag, tag nanga, haina kweli kuchukua sifa,
ambayo hugeuza tabia yake, na thamani ya sifa ya kuwa ni inaonekana URL YouTube.
Lakini taarifa dichotomy ni kwamba kwa sababu tu kwamba URL utaenda,
hiyo haina maana kwamba ina kuwa neno kwamba wewe ni betona na maamuzi ya kiungo.
Badala yake, ambayo inaweza kuwa kitu kama hiki.
Hivyo mimi kusema kuacha kufanya neno hili kwa kutumia hyperlink karibu nanga tag.
Ilani Mimi si kufanya hili.
1, hii ingekuwa tu ni kupoteza muda wa kila mtu na si lazima.
>> Kuifunga tag, wewe tu kutaja jina la tag tena.
Huwezi kutaja yoyote ya sifa.
Basi hebu kuokoa, kurudi nyuma. Okay, voilà, sasa ni rangi ya bluu na hyperlinked.
Kama mimi bonyeza yake, mimi kwa kweli kufanya kwenda YouTube.
Hivyo hata kama mtandao wangu ukurasa si juu ya Internet, ni angalau HTML,
na kama sisi basi Internet catch up, tunataka kweli kuishia hapa kwenye youtube.com.
Na naweza kurudi nyuma na hapa ni mtandao wangu ukurasa. Lakini taarifa hii.
Kama ve milele wamezipata spam au shambulio la hadaa,
sasa una uwezo baada ya dakika tano tu ya kufanya hivyo.
Tunaweza kwenda hapa na kufanya kitu kama www.badguy.com
au chochote tovuti sketchy ni, na kisha unaweza kusema kuthibitisha akaunti yako PayPal.
[Kicheko] Na sasa hii ni ya kwenda kwenda badguy.com, ambayo mimi si kwenda na bonyeza
kwa sababu mimi sina wazo ambapo ambayo inaongoza. [Kicheko]
>> Lakini sisi sasa kuwa na uwezo wa kweli kuishia hapo.
Hivyo sisi ni kweli tu mapya scratch ya uso.
Sisi siyo programu per se, sisi ni kuandika ghafi lugha.
Lakini kwa haraka kama sisi pande zote nje ya msamiati wetu katika HTML,
tutaweza kuanzisha PHP, halisi ya programu ya lugha
ambayo itaruhusu sisi kuzalisha HTML moja kwa moja, kuzalisha CSS moja kwa moja,
ili tuweze kuanza Jumatano kutekeleza, kusema,
tafuta injini yetu wenyewe na zaidi.
Lakini zaidi juu ya kwamba katika siku kadhaa. Tutaweza kuona wewe hapo.
>> [CS50.TV]