[Powered by Google Translate] [Week 7]
[David J. Malan - Harvardin yliopisto]
[Tämä on CS50. - CS50.TV]
Selvä. Tervetuloa takaisin. Tämä on CS50, ja tämä on alku viikolla 7.
Pari pikku ilmoituksia:
Pset5 on nyt käynnissä, ja pian on,
ja haluan sanoa aivan rehellisesti, tämä ei yleensä joukossa enemmän haastava
Opintojakson ongelma sarjaa, joten haluan mainita tässä nyt
niin että tällä viikolla enemmän kuin koskaan et odota, sanotaanko keskiviikkona yö
tai torstai-iltana sukeltaa
Tämä on varmasti mielenkiintoinen PSET. Mielestämme se on hauskaa.
Jos itse saada se täysin oikein ja voi sitten haastaa ns Big Board,
sinulla on mahdollisuus sovittaa järkeä joidenkin kurssin henkilökunta
ja joku luokkatoverit.
Mitä Big Hallitus on kun sinulla on oikoluku työ,
voit mennä cs50.net juoksun jälkeen komennon,
puhtaasti valita, ja sitten aikaa, ja RAM-muistin määrä, ja lisää
että olet käyttänyt teidän täytäntöönpanoa on esillä täällä kurssin kotisivulta.
Huomaat, että koko joukko näistä ihmiset täällä on lueteltu henkilöstö
koska viikonloppuna, henkilökunta ajattelin että olisi hauska yrittää päihittää toisensa.
Niin ymmärtää, että tavoitteemme ei päihittää henkilöstölle.
Jopa minä olen täällä vain sijalle 13.
Puhtaasti opt in, mutta se on mahdollisuus nähdä, miten vähän RAM
ja kuinka harvat CPU sekunnin voit ennakoitu suhteessa joitakin luokkatoverit.
>> Ja minä myönnän, että Kevin Michael Schmid,
nykyisin numero 1 asemaansa yhtenä TF,
tämä on täytäntöönpano, jota kutsumme ole mahdollista
koska hän käyttää melkein 0 RAM ja lähes 0 sekuntia kuormitus.
Joten me hoidamme Kevin offline. [Naurua]
On tiettyjä taitoja, Kevin on tämänsuuntainen testi täällä.
Yksi asioista, ajattelimme tehdä liian on nyt CS50x on viikko käynnissä,
ja te olette yhtä paljon osa tätä kokeilua kuin opiskelijat ovat.
Olemme pyytäneet heitä osana pset0, mikä oli samalla esittää Scratch projektin
heitä kiinnostavia - peli, interaktiivinen taideteos, animaatio tai vastaava -
1 - 2 minuutin video, jos he haluaisivat, tervehtimässä maailmaa ja keitä he todella ovat.
Ajattelin kertoa teille vain pari videota, jotka on toimitettu tähän mennessä
koska meille on henkilökunta ainakin se todella on ollut jännittävää
ja inspiroivaa nähdä nämä ihmiset eri puolilta maailmaa - maihin ympäri maailmaa -
viritys, kaiken, jotta tietotekniikkakurssi Internetissä,
Olipa koska he haluavat jatkaa omia tutkimuksiaan,
he haluavat viedä uran uuteen suuntaan,
he haluavat täyttää aukkoja omaa osaamistaan,
joten jotkut samoista syistä kuin teillä kenties ollut täällä.
>> Joten annan teille yksi tällainen opiskelija täällä. Voisit nostaa äänenvoimakkuutta vain vähän.
Tässä on yksi opiskelijan 1 minuutin huomautuksia.
Hei, maailma. Olen opiskelija tuotantotekniikka täällä Malagassa, Espanjassa.
Olen innoissani tästä verkkokurssin koska rakastan tietojenkäsittelytiede, en todellakaan,
ja minä todella arvostan, että saan tutkia sitä.
Ja että voin oppia samalla kaikki teette
vaan olemisen Harvardin olen Malagassa, miten mahtavaa on, että?
No, olen Fernando, ja tämä on CS50. Nähdään kaverit.
[Naurua] Toinen clip me erityisen paljon, huomaat, että tämä herrasmies Englanti ei ole niin vahva.
Se näyttää kuin hän oli se kone käännetään, joten käännökset ovat hieman epätäydellisiä,
mutta tämä oli yksi meidän suosikkeja toistaiseksi samoin.
[♪ ♪]
Hei, maailma. [Puhuu Japani]
[Minun täytyy tervehtiä japani koska minun Englanti on erittäin epäluotettava.]
[Olen antanut viestin teille kaupungin Gifu, Japani.]
[I voi olla opiskelija ensimmäistä kertaa 20 vuotta, kuten voidaan nähdä.]
[Olen hyvin kiitollinen Harvardin yliopiston, joka antoi minulle tämän mahdollisuuden ja EDX.]
[Golf on kitara ja suosikkini juttu käynnissä.] [Naurua]
[♪ ♪]
[Miksi luulet yritin osallistua cs50x.]
[Harvardin yliopisto, se on minun kaipuu.]
[Varsinkin jos olen kaukana läsnäolo asunut Japanissa.]
[Halusin kokeilla välittömästi tietoinen tällaisista EDX milloin.]
[Ettekö usko et liittyy ikään oppimisen I]
[Cs50 on minun kaipuu. Nimeni on Kazu, ja tämä on cs50.]
[♪ ♪] [aplodit ja hurraavat]
Toinen suosikki meidän oli tämän väitteen tänne joku.
[♪ ♪] [Malan] Google, jos et tunne tätä meme.
>> Ja sitten lopuksi pari muuta jotka todella lähetetty, että ehkä voittaa ihana palkinto.
[Opiskelijat] Aww! >> [Malan] Meidän täytyy kuunnella. Tämä on lyhyt, niin kuuntele tarkasti.
[Naaras puhuja] Mikä sinun nimesi on? >> Louie.
[Naaras puhuja] Mikä tämä on? >> [Kikattaa] CS50. [Naurua]
[Malan] Hän teki kaksi kestää, vaikka.
Täällä mennään, viimeinen.
Nimeni on Louie, ja tämä on CS50.
[Naurua] Tämä on sitten CS50x.
Kiitos kaikille niille teistä, kun seuraavat pitkin kotona
jotka ovat nauttimalla toistaiseksi.
Tänään Päätämme keskustelun tietorakenteita,
ainakin joitakin keskeisimpiä,
ja sitten jatkamme keskustelua HTML ja Web-ohjelmointi.
Itse olemme käyttäneet aiemmin jotkut seitsemän viikko katsomalla perusteet ohjelmointi -
algoritmeja, tietorakenteita ja vastaavia -
ja C, kuten ehkä kokenut tähän mennessä
ei välttämättä helpoimmin kielten
jonka toteuttaa joitakin näistä ajatuksista.
Ja niin alkaa tällä viikolla ja ensi viikolla ja sitten seuraava,
me vihdoin siirtyminen C, joka tunnetaan yleensä melko matalan tason kieltä,
asioita korkeammalle tasolle, joukossa PHP, JavaScript, ja vastaavat,
jonka näemme ammentaa sama oppitunteja että olemme oppineet viime viikkoina,
mutta huomaat että julistamalla asioita, kuten taulukoita ja hash taulukoita ja etsiminen ja lajittelu
tullut niin paljon helpompaa, koska kielet itse alamme käyttää
tulee tehokkaampi.
Mutta ensin soveltaminen puita.
Se on hyvin yleinen näinä päivinä tarvitsee pakata tietoa.
Missä yhteydessä haluaisit pakata jonkinlaisen digitaalisen tiedon?
>> Joo. >> [Opiskelija] Kun haluat lähettää Webistä.
Joo, kun haluat lähettää jotain Webistä.
Jos haluat ladata suuri tiedosto, se on ihanteellinen, jos joku toinen pää
on pakattu tiedosto käyttäen zip-muodossa tai jotain
niin että lähetät vähemmän bittejä kuin muuten toimiteta.
Joten miten pakata tietoa?
Se on pohjimmiltaan kyse käyttämällä vähemmän bittejä kuin vaaditaan oletusarvoisesti.
Mutta tämä on sellainen kummallinen asia, koska muistelen viikoilla 0 ja 1
kun puhuimme ASCII ja binääri ja puhuimme ASCII erityisesti
kuin käyttämällä 8 bittiä edustaa aakkosten
niin että kirjain edustaa 65, pieniksi on numero 97,
ja kuitenkin te edustatte 65 tai 97, käytät 7 tai 8 bittiä.
Mutta saalis on, että on olemassa joitakin kirjaimia Englanti aakkoset
jotka eivät ole yhtä suosittuja kuin toiset.
Z ei ole kovin suosittu, Q ei ole kovin suosittu, mutta A ja E ovat erittäin suosittuja.
Ja vielä kaikki nämä kirjaimet, oletusarvoisesti maailman käyttää sama määrä bittejä, vain 8.
Niin eikö ollut fiksumpia jos sijasta 8 bittiä jokaisen kirjeen,
jopa kaikkein harvoin käytetyt, kuten Q ja Z,
mitä jos me käytetään vähemmän bittejä ja E ja S ja suosituin kirjaimet
ja käytetään enemmän bittiä vähemmän suosittu kirjeet,
Ajatuksena on katsotaanpa optimoida yhteisen asian,
mikä on teema tietojenkäsittelytieteen yrittää optimoida mitä tapahtuu eniten
ja viettää vähän enemmän aikaa, vähän enemmän tilaa asioita, joo, voi tapahtua
mutta ei välttämättä yhtä usein.
Joten ottaa esimerkin.
>> Oletetaan, että haluamme koodata tietoa varsin tehokkaasti.
Olet ehkä kasvaneet tietäen hieman jotain morseaakkoset,
ja kertoimet ovat et tiedä todellista koodia
mutta saatat muistaa, että se on ainakin tämän sarjan pisteitä ja viivoja.
Tämä on melko tehokas koodaus, ja huomaa, että suosituin kirjain - esimerkiksi E -
käyttää lyhin piippaa.
Morse koodi on kyse piip-piip-piip-piip-piip-piip ja pitämällä sävyt
joko lyhyen aikaa tai pitkän aikaa.
E, koska merkitään piste, on erittäin lyhyt piippaus, vain äänimerkki, ja se merkitsisi E.
Sen sijaan, T olisi pitempi piippaus, kuten piip [pidentää ääni]
ja jotka edustavat T.
Mutta se on silti melko lyhyt, koska toisin, jos tarkastellaan Z,
ilmaista Z menisit piip, piip [pidempään ääni], piip, piip [lyhyempi ääni].
Joten se on pitempi, koska se on harvinaisempaa.
Mutta Gotcha tässä on, että Morse koodi on vähän virheellinen
koska se ei ole välittömästi dekoodattavissa.
Oletetaan esimerkiksi, että kuulet joidenkin päähän langan äänimerkin [lyhyt], äänimerkki [pitkä].
Minkä viestin minä vain saada? Piste ja viiva. Mitä se edustaa?
[Opiskelija] A. >> [Malan] Ehkä.
Se voisi myös olla E seuraa T.
Toisin sanoen, morseaakkoset, vaikka se hyödyntää tätä periaatetta voidaan optimoida kulman tapauksessa,
se ei sovellu välittömään decodability.
Eli ihmisen joka on kuulla tai vastaanottaa näitä pisteitä ja väliviivoja
on jotenkin selvittää missä tauot ovat välillä kirjeitä,
koska jos et tiedä missä ne tauot ovat, saatat sekoittaa ET tai päinvastoin.
>> Joten mitä voisi tehdä? Vuonna morseaakkoset voisit tauko kunkin kirjaimet.
Mutta pysähtyen on tavallaan vastoin idea nopeuttaa asioita.
Joten mitä jos sen sijaan päädyimme koodi, jos ei ollut tämä paha tilanne
jossa E on etuliite, esimerkiksi A -
Toisin sanoen, jos voisimme varmistaa, että mallit ovat edelleen lyhyitä suosittu kirjaimet
kauan vähemmän suosittu kirjaimet, mutta ei ole mahdollista sekaannusta?
Mies nimeltä Huffman vuotta sitten keksi tämän järjestelmän kutsutaan Huffman-koodaus
joka todella hyödyntää yksi tietorakenteiden olemme käyttäneet vähän aikaa puhua
viime viikolla, että puiden, binääripuita erityisesti -
binääripuu merkitys, että se ei ole enempää kuin 2 lasta.
Se on ehkä vasen lapsi, ehkä oikea lapsi, ja se on siinä.
Joten olettaa vain sen vuoksi keskustelun että joku haluaa lähettää viestin
joka näyttää tältä. Se on täyttä hölynpölyä, mutta se koostuu As, Bs, Cs, Ds, ja Es.
Ja jos todella laskea kaikki As, Bs, Cs, Ds, ja Es
ja sitten jakaa kokonaismäärällä kirjaimia,
tämä pieni kaavio täällä sanoo, että 45% kirjaimet ovat Es, 20% ovat,
10% B, ja niin edelleen.
Eli toisin sanoen, oletetaan, että mainittu merkkijono on
on vain muutamia viesti, jonka haluat lähettää.
Se sattuu olemaan hölynpölyä vain jotta voimme käyttää mahdollisimman vähän kirjaimia kuin mahdollista,
mutta se on totta, että E on edelleen suosituin,
ja B ja C ovat vähiten suosittuja, ainakin nämä 5 aakkosten kirjainta.
Joten kuinka voimme edetä keksiä koodaus,
binäärimuodon, kuvio 0 ja 1s kunkin näiden kirjainten
siten, että E on lyhyt malli ja ehkä B ja C ovat hieman pidempiä malleja,
jälleen, ajatus on, että haluamme käyttää vähemmän bittejä suurimman osan ajasta
ja enemmän bittejä vain kerran taas.
Mukaan Huffman-koodausta, voit luoda metsän puita.
On eräänlainen juoni tässä, että kyse puita ja myös rakentamassa niitä.
Katsotaanpa alkaa.
>> Ehdotan, että aloitat tämän metsän, niin sanoakseni, 5 puiden,
joista kukin on melko tyhmä puu.
Puu koostuu vain yksi solmu, kuten on esitetty tässä: n ympyrä.
Joten jokainen näistä asioista voi olla C struct
sisä-ja C-struct voi olla float edustaa frekvenssiluku
ja sitten ehkä char edustaa kirjain.
Joten ajatella näitä solmuja tahansa vanha C struct, mutta nyt, korkeammalle tasolle.
Tämä on metsä 5 puita, ja jokainen joilla on vain yksi solmu.
Mikä Huffman ehdotetaan, että alamme yhdistää nämä puut
että on pienin taajuus laskee osaksi hieman isommat puut
kytkemällä ne uudella juurisolmu.
Joten joukossa kirjaimia täällä, huomaat että mukavuussyistä olen lajitellut niitä vasemmalta oikealle,
vaikka se ei ole ehdottoman välttämätöntä, ja huomaa, että pienin solmut
Tällä hetkellä 10% ja 10%.
Joten Huffman ehdotti, että me yhdistää nämä 2 pienin solmut uuteen puuhun
ottamalla käyttöön uusi isäsolmuun ja sitten antaa, että vanhempi vasen lapsi ja oikea lapsi
jossa B on mielivaltaisesti vasemmalla ja C on mielivaltaisesti oikea.
Ja sitten Huffman Lisäksi ehdotetaan, että katsotaanpa nyt ajatelkaa vasen lapsi
yksi näistä puista aina niin, että sillä edustaa 0
ja oikea lapsi aina niin, että sillä edustaa numero 1.
>> Sillä ei ole väliä, jos kääntää niitä niin kauan kuin olet johdonmukainen.
Joten nyt meillä on neljä puita tässä metsässä.
Ja sanon neljä, koska nyt puu vasemmalla -
ja se ei ole niin paljon puu siinä mielessä, että se kasvaa tällä tavalla,
se on enemmän kuin sukupuun missä nyt 0,2 on tavallaan vanhemman kaksi lasta -
Huomaan, että se vanhempi olemme piirretään 0,2.
Olemme lisänneet taajuus laskee ja kaksi lasta ja antaa uuden solmun kokonaissummasta.
Joten nyt me vain toistamaan tämän prosessin.
Etsi kaksi pienintä solmut ja sitten liittyä ne uuteen puuhun
ja toista sitten prosessia eteenpäin.
Juuri nyt meillä on muutamia ehdokkaita, 20%, 15% ja toinen 20%.
Tässä tapauksessa meidän täytyy rikkoa solmio. Voimme tehdä sen mielivaltaisesti.
Meidän pitäisi vain tehdä sitä jatkuvasti.
Tässä tapauksessa minä mielivaltaisesti mennä yksi vasemmalla,
ja nyt yhdistää 20% ja 15% antaa minulle uuden emoyhtiön nimeltään 35%,
jonka vasen lapsi on 0, jonka oikea lapsi on 1, ja nyt meillä on vain kolme puita metsässä.
Voit ehkä nähdä, mihin tämä on menossa.
Jos me toista tämä pari kertaa, me aiomme olla vain yksi isompi puu,
jonka kaikki reunat on merkitty 0 ja 1s.
Tehdään se uudestaan.
35% on, että puun juureen. 20% ja 45%, joten aiomme yhdistää 35% ja 20%.
Nyt meillä on tämä puu täällä. Me lisätä ne yhdessä, meillä on 55%.
Nyt siellä on vain kaksi metsän puiden.
Teemme tämän viimeisen kerran, ja toivottavasti matemaattisesti kaikki taajuudet täsmää
koska ne pitäisi, koska meillä lasketaan ne get-go lisätä jopa 100%.
Ja nyt meillä on yksi puu.
Joten tämä on Huffman-koodausta puu.
Se tavallaan vei taas sinne suullisesti, mutta todellisuus on kanssa on silmukka
tai rekursiivinen funktio, voit rakentaa tämän jutun aika nopeasti.
Nyt meillä on siis yksi uusi solmu, ja kaikki nämä sisemmän solmut on malloc'd,
oletettavasti, matkan varrella.
Joten nyt alkuun tämän puun meillä on 100%, mutta nyt huomaa meillä polku
Tämän uuden iso-iso-iso-isoisänsä kaikki iso-iso-iso-lastenlastenlapset
aina alaosassa, kaikkia lehtiä.
>> Mitä aiomme tehdä nyt ehdottaa, että voidakseen edustaa kirjain E,
me käyttää vain numero 1. Miksi?
Koska jos me läpi tämän puun viimeisestä juuresta alas lehtien tunnetaan E,
me seuraamme vain yksi reuna, oikea reuna, ja se on merkitty tietysti ylhäällä oikealla 1.
Joten implisiittisesti täällä Huffman oli E: n koodaus binary on vain olla 1.
Ja se on pirun tehokasta. Voi todella saada mitään pienempi.
Sen sijaan tulee olla edustettuna, jos noudatat logiikkaa,
mitä mallia bittien sijaan? 01.
Joten päästä, aloitamme juuresta ja menemme vasemmalle ja sitten oikealle,
mikä tarkoittaa sitä seurasi 0 ja sitten 1.
Joten me edustaa kirjain kanssa kuvio 0 ja 1.
Ja nyt huomaa meillä on jo ominaisuus välittömästi decodability
että meillä ei ollut vuonna morseaakkoset.
Vaikka molemmat mallit ovat melko lyhyitä - E on 1-bittinen, on 2 bittiä -
huomaa, että niitä ei voida sekoittaa yhtä tai muiden,
koska jos näet 1 se täytyy olla E, jos näet 0 sitten 1 se ilmeisesti sai olla A.
Vastaavasti mitä D? 001.
Mikä on C? 0001.
Ja mikä on B? 0000.
Ja vielä, koska kaikki kirjeet välitämme ovat lehdet
ja mikään niistä ovat sellaisia ​​välittäjien polku juuresta lehteen,
ei ole mitään vaaraa conflating 2 kirjainta erilaiset koodaukset
koska kaikki näistä bittikuvioiden deterministisiä.
0000 tulee aina olemaan B.
Ei ole solmussa jossain välissä, että saatat sekoittaa yhden kirjeen muille.
Joten mitä vaikutuksia täällä?
>> Suosituin kirjain - tässä tapauksessa E - on saanut lyhin koodaus,
On saanut ensi lyhin koodaus,
ja B ja C, jotka me jo tiesimme get-go olivat eräänlainen vähiten suosittu
10% taajuudella jokainen, he ovat saaneet pisin koodausta.
Ja niin, mitä tämä tarkoittaa nyt, että jos haluat lähettää viestin, joka on pakattu
Internetin tai sähköpostin tai vastaavan,
sijaan käyttämällä ASCII, voit lähettää Huffman koodatun viestin
jolloin jos haluat lähettää kirjain E, lähetät vain yhden bitin.
Jos haluat lähettää, voit lähettää 2 bittiä, 01, lähettämisen sijaan 8 bittiä
seurasi toinen 8 bittiä seurasi toinen 8 bittiä ja niin edelleen.
Mutta on Sainpas täällä.
Se ei riitä vain rakentaa tätä puuta ja sitten alkaa lähettää Alice Bob
lyhyempi bittikuviota, merkkijonon ASCII-
koska Alice on myös ilmoittaa Bob, mitä
jos Bob tulee pystyä lukemaan hänen pakattu viestin?
[Äänetön opiskelija vastausta] >> Mikä tuo on?
[Äänetön opiskelija vastausta] >> Minkä puu on.
Tai vielä tarkemmin, mitä nämä koodauksia ovat,
varsinkin kun tänä tarina teimme arvostele jossain vaiheessa.
Muista, että meidän piti valita mielivaltaisesti välillä 2 eri 20% solmuja?
Joten se ei pidä paikkaansa, että Bob, vastaanottaja, voi vain rekonstruoida puu omasta
koska ehkä hän luo puun koskaan niin hieman eri Alice.
Lisäksi Bob ei edes tiedä, mitä alkuperäisen viestin
koska ainoa asia, Alice lähettää hänelle, tietenkin, on kompressoitu viesti.
>> Joten saalis puristus näin on, että kyllä, Alice voi säästää paljon bittejä
lähettämällä 1 E ja 01 varten ja niin edelleen,
mutta hän on myös ilmoitettava Bob mitä kartoitus on kirjainten ja bittien
koska he eivät voi selvästi tukeutua vain ASCII enää jos emme ASCII.
Joten hän voi joko lähettää hänelle puun jotenkin -
kirjoita se ylös, säilytä sitä binaaridataa tai jotain -
tai vain lähettää hänelle hieman lunttilappua, Excel-tiedoston, joka osoittaa kuvaukset.
Joten tehokkuutta puristus todella olettaa, että viestien lähetät
ovat melko suuria, vähintään keskikokoinen,
koska jos lähetät erittäin lyhyen viestin,
Jos haluat vain lähettää viestin BAD, joka sattuu olemaan sana voimme tavata täällä,
B--D, olet todennäköisesti aio käyttää vähemmän bittejä,
mutta saalis on, jos sinulla on myös ilmoitettava Bob mitä puu on
tai mitä nuo koodauksia ovat, tulet todennäköisesti suuremmat kaikki säästöt
ottaa pakattu asioita aluksi.
Joten se voi todella olla niin, että jos yrität pakata
vaikka jotain zip tai tiedostomuotojen saatat olla perehtynyt -
melko pieniä tiedostoja, vaikka tyhjiä tiedostoja -
Joskus nämä tiedostot voivat saada isompi eikä pienempi.
Mutta realistisesti, että tapahtuu vain pienet tiedostokoot,
joten se ei aio tehdä gigatavun tiedosto on 2 gigatavua;
me todella puhumme tavua tai vain pari kilotavua.
>> Jotkin ohjelmat, kuten zip ovat tarpeeksi älykkäitä ymmärtämään, että
"Aiotko viettää enemmän bittejä pakkaamalla tätä."
"Sallikaa minun vaivautua pakkaamalla sen sinulle ollenkaan."
Joten tämä on vain yksi tapa sitten pakkaamaan tekstimuodossa.
Voisimme toteuttaa jotain tämän C.
Esimerkiksi tässä on, miten voisimme edustaa solmun tämä puu
jossa meillä on char varten symbolin, kelluva arvo taajuuden,
ja kuten olemme nähneet meidän muiden tietorakenteiden, 2 osoittimia,
1 vasen lapsi, 1 oikealle, joista kumpi tahansa voi olla NULL,
mutta jos ei, se viittaa vasen lapsi ja oikea lapsi.
Joten tämä sitten on Huffman koodaus, ja se on yksi tapa, että voit mennä noin puristamalla tiedot,
ja se on varmasti yksi helppo toteuttaa
yhteydessä vaikkapa viime viikon tietorakenteita,
vaikka vieläkin kehittyneempiä algoritmeja olemassa
joka voi tehdä entistä kehittyneempiä mutaatioita tietosi.
Kaikki kysymykset sitten puita, binääripuita tai puristus tekstiä?
[Opiskelija] Onko joitakin epäselvyyksiä, kuten jos [kuulumattomissa] jakaantui 01,
Sitten 011 olisi epäselvä, eikö?
[Kuulumattomissa] >> Hyvä kysymys. Epäselvyyttä.
Saanen tiivistää viittaamalla tätä kuvaa tänne.
Koska merkit olet puristamalla, esityksiä,
määritelmän Tämän algoritmin pysyvät aina lehdet,
et koskaan vahingossa käytä samaa mallia bittiä etuliite useita kirjeitä.
Eli toisin sanoen, olet huolissasi, se kuulostaa, epäselvyys jotka
jolloin 001 voisi olla alku B tai alku C tai jotain.
Mutta se ei voi olla kyse, koska huomaa, että kaikki aakkosten olemme koodaa
ovat lehtiä.
>> Epäselvyys voi syntyä vain, kuten tapauksessa morseaakkoset,
jos esimerkiksi C oli jonnekin pitkin polkua juuresta B.
[Opiskelija] Oikea. Joten siinä tapauksessa, sanovat on 2 lehteä. >> Say on - Sano se uudestaan.
[Opiskelija] Say on 2 lehtiä, F ja G, ja sitten G - >> Okei. Mutta se ei voi.
Ei itsessään ole lehtiä F ja G koska nämä kirjeet F ja G
itsellään olisi jättää jonnekin vasemmalle B tai oikealle E.
Niin määritelmän, niiden täytyy olla lehtiä.
Muuten, olet aivan oikeassa, olemme ei ratkaista ongelma morseaakkoset kasvot.
Hyvä kysymys. Muita kysymyksiä? Selvä.
Tämä käsite bittiä, se kääntyy pois meillä ollut valtaa koko ajan, että olemme todellisuudessa käytetä
kun se tuli manipuloimalla näitä 0s ja 1s.
Kysyimme tästä on yksi varhaisimmista ongelman sarjaa:
eli miten edetä muuntaa isoja ja pieniä kirjaimia tai päinvastoin?
Tai konkreettisemmin, yksi ensimmäisinä psets kysyi
kuinka monta bittiä sinun todella täytyy kääntää, jotta voidaan muuttaa pieniksi tai päinvastoin?
Tässä nopea muistutus siitä, mitä 65 ja 97 näyttää binary.
Ja vaikka tämä kysymys on tavallaan haalistuneet muistin,
voit nähdä taas täällä, että kuinka monta bittiä on selattava
vaihtaa pääoman pieniksi? Vain yksi.
>> Ne eroavat toisistaan ​​vain yhdessä paikassa, kolmas bitti vasemmalta.
Taas on 010, pieni on 011.
Eli jotenkin meidän on vain kyettävä kääntää että bitti,
ja voimme sitten hyödyntää tai pieniä kirjaimia.
Olemme tehneet tämän aiemmin todellisuudessa käyttävät, jos olosuhteet
ja tarkistaa, jos kirje on välillä pääoma ja pääoman Z,
Sitten lähdöt kuin - + 26 tai jotain.
Luultavasti ei aritmeettinen muutos aakkosten.
Mutta mitä jos voisimme vain kääntää että yhden vähän?
Miten te sitten ottaa yhden tavun verran bittejä, joten 8 bittiä kuten 01000001 ja 01100001?
Jos sinulla on ollut näitä malleja bittejä, miten voimme edetä muuttuvat vain yksi niistä?
Mitä jos otamme käyttöön keltaisella täällä muita malli bittiä?
Jos teen koko keltainen merkkijono 0s paitsi yhden bitin että haluan vaihtaa
ja sitten esitellä uusi toimija tunnetaan bittioperaattori -
biteittäin siinä mielessä, että se toimii yksittäisiä bittejä,
ei koko tavu tai neljän tavun kaikki kerralla.
Tämä pystypalkki siellä keltaisella ehdottaa, että mitä jos otamme edustus pääoman
ja peiton OR se keltaisella bittijono?
Toisin sanoen, muistelen meidän keskustelua Boolen Scratch ja sitten C.
>> Doing Boolen tai sitä, että on totta, joko ensimmäinen asia on ollakseen totta
tai toinen asia on ollakseen totta tai ne molemmat olla totta,
ja sen jälkeen tuloksena lähtö on itse totta.
Tässä tapauksessa täällä, mitä saamme, jos otamme 0 "tai" ed, 0? Väärät tai väärä?
Se on edelleen väärä, joten pieniä pysyy odotetusti.
Mitä jos sen sijaan teemme 1 tai 0?
Tämä nyt on edelleen 1, mutta huomaa, mitä on tapahtumassa täällä.
Jos aloitamme pääomaan ja jatkamme "tai" sen yksittäisiä bittejä kuin me teemme täällä,
0 tai keltainen antaa meille mitä tänne? Tämä antaa meille 1.
Itse kai emme tiedä, mitä isot versio pikku todellisuudessa oli.
Mennään tähän. Jatkan tästä takaisin tänne.
Tehdään tämä uudestaan. 0 tai 0 antaa minulle 0.
1 tai 0 antaa minulle 1.
0 tai 1 antaa minulle 1.
0 tai 0 antaa minulle 0. Seuraava on 0, seuraava on 0, seuraava on 0.
1 tai 0 antaa minulle 1.
Ja joten vaikka emme etukäteen tiedä, mikä pieniksi oli,
yksinkertaisesti "tai" ta tähän malliin bittien olemme esitetty täällä keltainen,
voit pieniksi pääomaa kääntämällä että vähän.
Käytimme tätä ilmaisua viikkoa sitten: flipping hieman.
Miten todella tehdä ohjelmallisesti?
Voit käyttää mitä yleisesti kutsutaan naamio, bittijono,
että tässä tapauksessa sattuu näyttää tämän numeron täällä,
ja sitten sinä "tai" se yhteen käyttämällä tätä uutta C toimija,
ei | |, käytät yhden | ja te todella saada vastaus tänne koska miksi?
Tämä on 1s paikka, 2s paikka, 4s, 8s, 16s, 32s.
Joten näyttää siltä, ​​että jos otat kirjain ja peiton OR se kokonaisluku 32,
koska kokonaisluku 32, kun katsot sitä bittiä, näyttää tältä,
se tarkoittaa, että voit kääntää hieman että te todella haluavat.
Ja samoin - ja me tutustumme koodia vain hetken -
Oletetaan haluamme mennä toiseen suuntaan.
>> Miten siirtyä pieniä pääoman? Joka bittinen tarvitsee vaihtaa?
Se on sama.
Haluamme muuttaa kyseisen kolmannen bitin 1 0.
Ja miten me menemme noin tekee tästä?
Miten sammuttaa hieman? Millä malli bittien voisimme sammuttaa hieman?
Mitä jos me tavallaan inverttisokeri maskin?
Taas ennen, teimme koko keltainen maski 0s
lukuun ottamatta yhden bitin halusimme päälle,
Mitä jos tällä kertaa teemme koko maski 1S paitsi bitti haluamme poistaa
ja sitten käyttää mitä operaattori?
Mitä jos me "ja" asioita? Katsotaanpa katsomaan.
Jos me nyt kääntää tämän Oletetaan, että jälleen luon naamion, että kaikki 1s
lukuun ottamatta yhden bitin että haluan sammuttaa
ja sitten kuin "tai" valkoiset numerot ylös keltaisella numerot tänne,
Mitä jos minä sen sijaan "ja" ne yhteen? Sitä kutsutaan peiton ja.
Loogisesti se on sama asia kuin Boolen ja.
Tämä antaa minulle 0 ja 1 on 0. Niin vääriä ja tosi on epätosi.
True ja totta on totta.
Ja tässä on taikaa: tosi ja epätosi on nyt väärä, joten olemme sammutettu että vähän.
Ja nyt loput tarina on hieman yksinkertainen.
Koska muu maski on 1s, sillä ei ole väliä, mitä luvut ovat valkoisia.
Kun "ja" jotain totta, et aio muuttaa sen arvoa.
Jos se on totta, se pysyy uskollisena. Jos se oli väärä, se pysyy vääriä.
>> Mutta taika tapahtuu, kun otat jotain, joka oli totta
ja voit sitten "ja" sille vääriä.
Tämä vaikutus on sammuttamalla että vähän.
Joten hieman arvoituksellisesti siellä.
Katsotaanpa todella katsoa koodia, joka saattaisi näyttää vieläkin salamyhkäinen,
mutta katsotaanpa katsomaan täällä tolower.
Jos katson tolower, menee pääoman pieniksi,
Katsotaanpa, miten voisimme toteuttaa tämän ohjelman.
Tässä tärkeimmät, ja se ei ole minkään komentorivin argumentteja.
Olen julistamisesta merkin C kirjeessä, että käyttäjä on menossa tyypin tuumaa
Sitten käyttää tuttua tehdä, kun silmukka vain varmistaa, että käyttäjä varmasti antaa minulle pääomaa
tai B tai C. .. Z, joten he antavat minulle jotain välillä ja Z.
Ja nyt, mitä minä teen täällä?
Olen "tai" ta tätä 0x20, mutta se on oikeastaan ​​sama kuin -
ja me palaamme tähän hetken - 32.
Joten jälleen, 32 on tämä malli bittien tässä. Miksi me tiedämme tämän?
Ajatelkaapa takaisin viikossa 0.
Tämä on 1s paikka, 2s paikka, 4s, 8s, 16s, 32s paikka.
Joten tämä keltainen numero sattuu olemaan 32.
Voin sitten ottaa kirjeen kaltainen char täällä bittikohtainen "tai" se kirjaimellisesti numero 32,
ja mitä saan takaisin? Pieniä versio että char.
Hetki sitten, vaikka olen ilmaissut tämän eri pohja merkintä.
Mitä tämä edustaa? >> [Opiskelija] Heksadesimaali.
[Malan] Tämä tapahtuu edustamaan heksadesimaalinen.
Emme ole puhuneet heksadesimaali kovinkaan paljon,
mutta se on todella kätevä tällaisissa tapauksissa.
>> Vaikka se näyttää enemmän monimutkaisia ​​ja vaikka se näyttää 20 eikä 32,
käy ilmi, että heksadesimaali on todella super kätevä notaatio
koska heksadesimaali jokaisen numeron jälkeen 0x - ja tämä ei tarkoita mitään;
tämä on vain ihmisen yleissopimus, joka sanoo tässä tulee heksadesimaaliluvuksi -
kukin näistä numeroa, 2 ja sitten 0, voivat itse olla edustettuina
täsmälleen 4 bittiä.
Joten jos teemme näin, anna minun avata tekstinkäsittelyohjelmassa täällä - weird autocomplete -
jos teemme pienen tekstieditori täällä, numero 0x20 tarkoittaa tässä on 4 bittiä, tässä on toinen 4 bittiä.
Tehdään oikeanpuoleisin 4 bitti ensin.
0, kun edustettuna 4 bittiä on mitä? Super helppoa. Vain kaikki 0s.
Joten 4 bittiä 0s.
Miten te edustatte 2? Se on ollut jonkin aikaa, koska teimme tätä, mutta se on 0100.
Joten tämä on 1s paikka, tämä on 2s paikassa, ja sitten sillä ei ole väliä, mitä muut paikat ovat.
Toisin sanoen, heksadesimaali saatat sanoa 0x20,
mutta jos sitten miettiä, mikä on 2 ja miten se edustaa binary,
Mikä on 0 ja miten se edustaa binary,
vastaukset näihin kysymyksiin ovat tämä ja tämä vastaavasti.
Niin 0x20 tapahtuu edustamaan tätä kuviota 8 bittiä,
joka on juuri maski että halusimme.
Joten tämä on tällä hetkellä vain henkinen harjoitus,
mutta todellisuus on koodi on tyypillisesti yleisempää kirjoittaa vakioita näin
heksadesimaalimuodossa koska silloin ohjelmoija voi melko helposti,
vaikka se vaatii jonkin verran paperia ja kynä, selvittää mitä se malli bittien on
koska et voi vain ilmaista 0s ja 1s tyypillisesti koodin.
Et voi mennä 00010 ja niin edelleen.
>> Sinun täytyy valita desimaali tai heksadesimaali-tai oktaali tai muita muistiinpanoja.
Useimmat ihmiset yleensä poimia heksadesimaaliluvuksi yksinkertaisesti niin, että jokainen numero on 4 bittiä
ja voit tehdä tämän nopeasti matematiikkaa.
Ja minä vilkuttaa käteni toupper, mikä on lähes sama, se näyttää melkein identtiset.
Toupper sattuu käyttämään ei tai operaattorin vaan tämä kaveri ja df.
Mitä df edustaa? df? Kukaan? >> [Opiskelija] 255.
255? Ei 255. Se olisi FF.
Jätämme tämän yhden vähän liikuntaa.
Mutta jos mennä 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ja sitten mitä tulee sen jälkeen 9?
Olemme tavallaan pois desimaalilukujen, mutta heksadesimaali mitä tulee 9 jälkeen?
[Opiskelija]. >> Joten a, b, c, d.
Voit selvittää sieltä mitä mallia bittien d todellisuudessa edustaa.
Ja jos teemme matematiikka, näemme, että maski voit lopulta saada takaisin on identtinen tämän.
Tämä on f, kaikki 1s, ja tämä on d. Joten df kertoo, että maski. Selvä.
Ja lopuksi, ettei asioita äänen super, super teknisiä,
mutta kai halusimme kirjoittaa ohjelma, joka tekee tämän.
Anna minun mennä eteenpäin ja tehdä binary, joka on ohjelma tiedostoon nimeltä binary.c.
Ja nyt haluan juosta binary ja anna minulle ei-negatiivinen kokonaisluku.
Aloitetaanpa helppoa ja kirjoita 0.
Tämä nyt on ohjelma, joka tulostaa kokonaisluvun sen binääriesityksessä.
Joten jos pelaan tätä peliä uudestaan ​​ja kirjoita vain 1, minun pitäisi saada 32-bittinen edustus 1.
Jos teen tämän jälleen 2, minun pitäisi saada se.
Jos teen 7, minun pitäisi saada muutama 1s lopussa ja niin edelleen.
Osoittautuu Mainitsen tämän siksi kanssa bittioperaatioita
voit itse tehdä yhden asian samoin.
Voit luoda näitä naamioita dynaamisesti.
Katsokaa tämä viimeinen esimerkki, jossa bittioperaatioita.
Tässä on ensimmäinen osa koodia, pyytää käyttäjältä numeron,
ja se vaatii, että annatte minulle ei-negatiivinen kokonaisluku.
Joten se on tavallaan vanhan koulun kamaa.
Mutta tässä on jotain, joka on tavallaan mielenkiintoista.
>> Miten edetä tulostaa numeron binääri?
Haluan ensin kerrata mistä mihin?
Mitä kokoa int tyypillisesti ainakin laitteen? >> [Opiskelija] 4.
Se on 4. Joten 4 * 8 on 32-1 on 31.
Joten jos olen alkanut laskea 31 päivästä, joka edustaa, se kääntyy pois,
vain käsitteellisesti, 31. bitti tai eniten merkitsevään bittiin, mikä on tämä kaveri täällä,
tämä tulee olemaan bitti 0.
Joten tämä on vähän 01 ... bitti 31.
Joten mitä tämä koodi tekee?
Huomaa tämä silmukka, vaikka se näyttää arvoituksellisesti, on vain iteroimalla 31 alas 0. Siinä kaikki.
Niin mielenkiintoinen osa nyt on näissä 5 riviä tänne.
Huomaa, että tätä linjaa olen julistaa muuttuja nimeltä naamio
oltava johdonmukaisia ​​meidän tarina nämä keltaiset numerot.
Ja mitä sitten on tämä tekee?
Tämä on toinen bittioperaattori emme ole nähnyt aiemmin, todennäköisesti.
Se VASEN VAIHTO operaattori.
Tämä operaattori tekee tämän.
Tässä on numero 1, ja jos et lähdin muutos, vasen shift,
mitä mieltä olette siitä, että on vaikutus tekee että yksittäisten 1?
Kirjaimellisesti siirtämällä sen yli.
Joten jos numero 1 on mitä on vasemmalla ja aloitat alustamalla i 31,
mitä se aikoo tehdä? Se tulee ottaa tämä numero 1 ja siirrä se 31 paikkaa täällä.
Ja koska siellä ilmeisesti ole muuta numeroa takana,
ne tulevat oletusarvoisesti korvataan 0s.
Joten voit alkaa ulos numero 1, joka tietenkin näyttää tältä -
ja esitän sen tänne keskellä.
Ja sitten kun siirtää asioita vasemmalle, tämä kaveri lähinnä menee näin.
Mutta heti kun näin, 0 Kympin sisään
Jos siirrät sen toisen kerran, se menee näin, ja toisella 0 Kympin sisään
>> Voit siirtää sen uudelleen ja sitten toinen 0 Kympin sisään
Joten jos teet näin asia 1 << i 31 paikkaa, voit päätyä saada maskia
, joka on 32 merkkiä pitkä, semmanpuoleisimmat, joka on 1,
kaikki muut, jotka ovat 0.
Ja se kääntyy pois, niin syrjään, siirtää numero vasemmalle näin
Myös sattumalta, ja joskus sopivasti,
vaikutus on tehdä mitä tähän numeroon? >> [Opiskelija] kaksinkertaistaminen sitä.
Kaksinkertaistaminen, koska jokaiseen sarakkeeseen - 1s paikka, 2s paikka, 4s paikka,
8s paikka, 16s sija - He ovat kaikki tuplaamista niin menet vasemmalle.
Tai pikemminkin, kun siirtää 1s aiot päätyä kaksinkertaistaa määrän arvon.
Voit päätyä tekemään mielenkiintoisia muutoksia numeroita
siirtämällä kaiken yli tällä tavalla toimivalta 2.
Joten miten tämä toimii?
Tämä sitten antaa minulle maski, kaikki 0s paitsi 1 juuri paikassa haluan sen,
ja sitten tämä ilmaisu, joka on varastettu toupper.c,
on yksinkertaisesti sanomalla ottaa luku n, että käyttäjä kirjoitettu,
"Ja" se, että maski, ja mitä aiot saada?
Olet menossa saada 1 jos siellä 1 että naamioituneet paikassa,
tai aiot saada 0, jos siellä ei ole.
Ja niin kaikki tämä ohjelma ei käytännössä se on silmukka,
ja se luo naamio 1 täällä, sitten 1 täällä, sitten 1 täällä,
ja se käyttää tämän peiton ja temppu sanoa onko 1 bitti käyttäjän panos täällä?
>> Onko 1 bitti käyttäjän panos täällä? Ja jos niin, kirjaimellisesti tulostaa 1, muuten tulosta 0.
Teemme tätä ints vain koska siksi teemme 32 bittiä sijasta 8,
mutta olemme ottaneet käyttöön niin tämä bittikohtainen ja tällä bittikohtainen OR,
ja tämä VASEN VAIHTO operaattori, jotka eivät ole useinkaan kovin hyödyllistä,
mutta se osoittautuu ne voivat olla.
Itse asiassa, jos olisit edustaa jotain joukko booleans
vain edustaa tosi tai epätosi, kai halusi seurata vai ei
huone täynnä 300 opiskelijaa on läsnä,
voisit julistaa joukko koko 300 tyypin bool niin että saat 300 bools,
ja voit asettaa jokaisen true jos joku on täällä ja epätosi muuten.
Miksi se edustus että tietorakenne tehoton?
Mitä huonoa suunnittelua että tietorakenne, joukko 300 bools?
Mikä on bool, itse asiassa, alla huppu?
Tämäkin on jotain, joka voi olla tuttu.
On käynyt ilmi, ei bool.
Muistakaa me tavallaan luotu että cs50.h tiedosto,
joka itsessään sisältää standardin bool.
C on eräänlainen mykkä, mutta kun se tulee bool.
Se käyttää 8 bittiä edustamaan jokaista bool, joka on täysin turhaa
koska ilmeisesti, kuinka monta bittiä tarvitset edustamaan bool? Vain 1.
Joten näyttää siltä, ​​että jos teillä on nyt kyky kanssa bittioperaatioiden
manipuloida yksittäisiä bittejä jopa char, jopa yhden tavun,
se osoittautuu voisit vähentää muistia tarvitaan edustamaan jotain tyhmää
kuten että osallistuminen tyylistä datarakenne tekijällä 8.
Sen sijaan käyttäen kahdeksan bitin tosi tai epätosi, voit kirjaimellisesti käyttää yhtä
käyttämällä yhden tavun jokaista kahdeksan opiskelijaa luokassa
ja siirrytään 0-1 yksittäisiä bittejä käyttämällä tällaisia ​​matalan tason temppuja.
Se todella lopettaa energian. Onko kysyttävää bittioperaatioita?
>> Joo. >> [Opiskelija] Onko yksinomainen tai operaattori?
Kyllä. On yksinomainen tai toimija, joka näyttää tältä, ^, porkkana symboli,
mikä tarkoittaa vain ensimmäinen asia tai toinen asia voi olla 1, lähtö on 1.
On myös ole, ~, jonka avulla voit kääntää 0-1 tai päinvastoin samoin.
Ja siellä on myös oikeus siirtymistä operaattori, >>, mikä on vastakohta yhden näimme.
Selvä. Viedään asiat nyt korkeammalle tasolle.
Aloitimme puhumalla tekstin ja sitten puristamalla sitä
ja edustavat tekstiä vähemmän bittimäärät;
puhuimme vähän siitä, miten voimme nyt aloittaa manipuloi asioita peiton tasolla.
Katsotaanpa nyt zoomata takaisin jopa 10000 jalkaa edustamiseen
Monimutkaisten asioita, kuten grafiikkaa.
Täällä meillä on Saksan lipun, täällä on yksi Ranskan.
Nämä saattavat olla edustettuna tiedostomuotoja ehkä tiedätkin - GIF, esimerkiksi.
Jos olet koskaan nähnyt kuvan Webissä, joka päättyy. Gif,
tämä on Graphics Interchange Format.
Nämä kaksi lippua tässä tavallaan ajankäytön puristus
mitä kenties selvää syytä? >> [Äänetön opiskelijan vastausta]
Siellä on paljon toistoa, eikö?
Jotta lähettää Saksan lippu, ajatella tämän olevan kuvan näytöllä
takaisin teidän Scratch päivää.
Saatat muistaa, että on olemassa yksittäisiä pikseleitä tai pisteitä, jotka muodostavat kuvan.
>> On koko rivi mustia pisteitä ja toinen koko rivi mustia pisteitä.
On joukko riviä mustia pisteitä, että voisimme nähdä, jos todella zoomataan,
mielelläni kun zoomataan Rob kasvot Photoshop.
Heti kun saimme syvemmälle ja syvemmälle ja syvemmälle kuvan,
olet alkanut nähdä pikselöitymistä, kaikki ruudut jotka sävelsi silmä tässä tapauksessa.
Sama käsitellä täällä. Jos me zoomataan varsin vähän, voit nähdä yksittäisiä pisteitä.
No, tämä on eräänlainen jätteen bittejä.
Jos kolmasosa lipun on musta ja kolmasosa lipun on keltainen, ja niin edelleen,
miksi emme jotenkin pakata tämä lippu?
Ja vaikka Ranskan lipun voi pakata vaikka malli on hieman erilainen.
On käynyt ilmi, GIF-tiedostomuoto on häviötön pakkausmuoto,
mikä tarkoittaa, että voit ottaa kuvan kaltainen Saksan lippu täällä,
voit heittää pois paljon sen bittien laadusta tinkimättä.
Tämä on päinvastoin kuin jotain JPEG,
jonka useimmat meistä ovat todennäköisesti tuttuja.
Facebook-valokuvia ja Flickr-valokuvia ja vastaavat
ovat lähes aina tallennetaan JPEG, kun ne ladataan,
mutta JPEG on häviöllinen - häviöllinen - muodossa, että et heittää pois bittiä
mutta voit myös heittää pois laatuun.
Joten jos voit pakata valokuvia Photoshop tai ladata niitä Facebook
tai ottaa ne todella kehno puhelin,
tiedät että kuva alkaa saada hyvin laikukkailta ja pixelated,
ja että koska se on puristamista tietokoneen tai puhelimen
kirjaimellisesti heittää tietoa pois.
Mutta GIF on hämmästyttävää, että se voi käyttää vähemmän bittejä kuin se voisi oletusarvoisesti
menettämättä mitään tietoja.
>> Ja se pohjimmiltaan tekee niin seuraavasti.
Sen sijaan säilytä tiedosto kuten BMP olisi RGB kolminkertainen musta, musta, musta, musta,
musta, musta, musta, musta, musta, musta, musta, musta ja niin edelleen,
pikemminkin, GIF aikoo sanoa, "musta"
ja sitten "Toista tämä 100 kertaa," tai jotain sinne päin.
"Musta, toista tämä 100 kertaa, musta, toista tämä 100 kertaa ..."
"Keltainen, toista 100 kertaa."
Ja niin se muistaa lähinnä vasemmanpuoleisin pikselin
ja sitten koodaa jotenkin käsite toistamalla, että pikselin uudestaan ​​ja uudestaan.
Joten GIF voi sitten puristaa itseään menettämättä mitään tietoja.
Mutta jos pitäisi arvata, jos se on algoritmi, joka GIF käyttöä,
mikä näistä lippuja, vaikka ne näyttävät samankokoisia,
tulee olemaan pienempi kun tallennetaan levylle GIF? >> [Opiskelija] Saksa.
Saksa tulee olemaan pienempi? Miksi?
[Opiskelija] Koska toistat sitä monta, monta kertaa vaakasuunnassa
ja sitten toista toisen kerran. >> Aivan.
Koska ihmiset keksivät GIF juuri sellainen mielivaltaisesti päätetty
että toisto on panostettava horisontaalisesti ja ei sivusuunnassa.
Siellä on paljon enemmän toistoa sivusuunnassa täällä Saksan lipun kuin Ranskan lipun.
Joten jos me todella avata kansio kiintolevyllä, jolla on nämä GIF,
voit itse nähdä, että Saksan lippu täällä on 2 kilotavua ja ranskalaisten on 4 kilotavua.
Se sattuu olemaan sattumaa, että yksi on kaksi kertaa muita,
mutta se on itse asiassa siinä tapauksessa, että Ranskan lipun on paljon suurempi.
>> Vaikka me puhumme täällä grafiikkaa, samoja ideoita voi soveltaa
ei asioita kuten lippuja, mutta kuvat ovat hieman monimutkaisempia.
Jos otat kuvan omena, varmasti siellä on paljon päällekkäisyyttä siellä,
jotta voisimme jotenkin muistaa, että oletuksena tausta on sininen
eikä, kuten oikeanpuoleisessa kuvassa ehdottaa,
täytyy muistaa värin jokaisen pikselin tätä kuvaa.
Joten voimme heittää bittiä pois siellä menettämättä tietoja.
Apple näyttää silti aivan sama.
Tässä esimerkki tästä, saatat nähdä mitä tapahtuu elokuvassa.
Nämä ovat vanhan koulun elokuva rullat jolloin parhaan kuvan siellä
sinulla RV ajo ohi talon ja puun.
Ja kuin van ajaa ohi vasemmalta oikealle, mitä ilmeisesti ei muutu?
Talo ei ole menossa minnekään, ja puu ei ole menossa minnekään.
Ainoa asia, joka liikkuu on van tässä asiassa.
Niin Taustaa Muuttumaton ehdottaa, mitä voit tehdä elokuvia
on samalla vain heittää pois tietoa, joka ei muutu kehysten välillä.
Tämä tunnetaan yleisesti välisen tiivistyksen
jolloin jos tämä runko näyttää lähes identtinen tämän yhden,
älkäämme vaivata tallentamisen levylle mitään samat tiedot
Näiden välikehykset, katsotaanpa käyttää vain avainkuvia kerran kun
tosiasiallisesti tallentaa nämä tiedot redundantisti yhtä vähän järki tarkistaa.
>> Sitä vastoin toinen lähestymistapa pakkaamalla video on tässä toisessa ja alempi esimerkki tästä,
jos sen sijaan tallentaa 30 kuvaa, mikset vain tallentaa 15 kuvaa sekunnissa sijaan?
Sen sijaan elokuva sellaista virtaa kauniisti, täydellisesti,
Se saattaa näyttää se pätkivä hieman, hieman vanha koulu,
mutta nettovaikutus on käyttää huomattavasti vähemmän bittejä kuin muuten saattaisi olla tarpeen.
Joten mistä tämä sitten jättää meidät?
Se oli hieman sivuun missä muualla voit mennä puristus.
Lisätietoja siitä, että ottaa luokassa kuin CS175 täällä.
Tässä toinen esimerkki videosta.
Jos mehiläinen on ainoa asia liikkuu,
voit todella heittää pois tiedot näiden keskellä kehykset
koska kukka ja taivas ja lehdet eivät muutu.
Mutta katsotaanpa nyt harkita yhden asian.
Seuraavan 5 minuuttia jätämme C taakse ikuisesti luento? Kyllä. Ei psets, tosin.
Viimeinen tarina C ja sitten pääsemme hyvin seksikäs juttuja
johon HTML ja Web-ja Woo-hoo. Selvä.
Täällä mennään. Se motivaatio.
On käynyt ilmi, kaikki tämä kun olemme kirjallisesti ohjelmia otamme clang.
Ja clang, olemme sanoneet, koska ensimmäisellä viikolla melko paljon, vie lähdekoodi
ja muuntaa sen kohdekoodilla.
Se vie C ja muuntaa sen 0s ja 1s.
Olen tavallaan valehdellut teille muutaman viikon, koska se ei ole aivan niin yksinkertaista.
>> Siellä on paljon enemmän tekeillä alla huppu, kun suoritat ohjelman kaltainen clang.
Itse asiassa laadintaprosessin ohjelma voidaan todella tiivistää,
kuten ehkä muistatte Rob video kerääjiä,
näitä 4 vaiheet: esikäsittely, kokoamiseen itse kokoonpano, ja yhdistää.
Mutta me luokassa ja useimmat ihmiset maailmassa tyypillisesti yhteenveto kaikista näistä toimista
vain "kokoamisessa."
Mutta jos aloitamme lähdekoodi näin, muistaa tämä on ehkä yksinkertaisin C-ohjelma
olemme kirjoittaneet toistaiseksi, muistaa, että kun käännetty se päätyy näyttämään tätä.
Mutta on todella välivaihe, ja nämä vaiheet ovat seuraavat.
Ensimmäinen on tämä juttu huipulla tämän ja useimmat ohjelmat,
# Include
Mitä # include tehdä meille?
Se aika paljon kopioita ja pastat sisältö stdio.h minun tiedoston niin, että miksi?
Miksi välitä sisällöstä stdio.h? Mitä siellä kiinnostaa?
Printf ilmoituksen, sen prototyyppi, jotta kääntäjä sitten tietää mitä tarkoitan
kun mainitsen tämän toiminnon printf.
Joten vaihe 1 kokoamisessa on esikäsittelyä, jolloin ohjelma kuten clang
tai jotkut auttaja ohjelman clang mukana lukee koodi ylhäältä alas,
vasemmalta oikealle, ja aina se näkee # symbolin jälkeen avainsanaksi sisältyy
se suorittaa kyseisen operaation, kopiointi ja liittäminen tässä tapauksessa stdio.h omaan tiedostoon.
Tuo vaihe 1.
Sitten sinulla on paljon suurempi C-tiedosto, koska valtava kopioida, liittää työn, joka on juuri tapahtunut.
>> Vaihe 2 Nyt on kokoamassa.
Mutta se osoittautuu kokoamiseen vie lähdekoodi, joka näyttää tältä
ja muuntaa sen jotain, joka näyttää tältä,
joka niille tuttuja kutsutaan? >> [Opiskelija] Assembly. >> Konekielellä.
Tämä on todella jotain jos otat CS61 sinun sukeltaa tarkemmin.
Tämä on aivan yhtä lähellä kuin voit saada kirjallisesti 0s ja 1s itse
mutta kirjoittaa asiat siten, että vielä tekee ainakin vähän järkeä.
Nämä ovat kone ohjeet, ja jos me selaa päätehtävä täällä,
huomaa, että tämä push ohje, siirrä opetusta, vähennä opetusta,
soittaa opetusta, ja niin edelleen.
Kun kuulet, että tietokoneessa on Intel Inside,
sinulla on Intel CPU Macin tai PC, mitä se tarkoittaa?
CPU tulee sisäänrakennettu yritykset, kuten Intel ymmärtämään tiettyjä ohjeita.
Heillä ei ole aavistustakaan, mitä toimintoja kuten swap tai tärkeimmät ovat sinänsä,
mutta he eivät tiedä, mitä hyvin matalan tason ohjeet, kuten lisätä, vähentää, työnnä,
liikkua, soittaa, ja niin edelleen ovat.
Joten kun käännät C koodin konekielellä,
voit hyvin käyttäjäystävällinen näyttäviä koodi muunnetaan jotain, joka näyttää tältä,
että kirjaimellisesti liikkuu tavua tai 4 tavua ympärillä niin pieniä yksiköitä ja ulos CPU.
Mutta lopulta, kun clang on valmis ottamaan tämän edustus ohjelma
osaksi 0s ja 1s, sitten vaihe nimeltään kokoonpano tapahtuu,
ja tämä taas kaikki tapahtuu silmänräpäyksessä ajettaessa clang.
Alkaa tässä, se tuottaa tiedoston, kuten tämä, ja sitten se muuntaa sen nämä 0s ja 1s.
Ja jos haluat mennä takaisin jossain vaiheessa, ja todella nähdä tämän toiminnassa,
jos menen hello1.c--tämä on yksi ensimmäisistä ohjelmista tarkastelimme -
normaalisti olisimme koota tätä clang hello1.c ja tämä antaa meille a.out.
Jos sitä vastoin olet vaan antaa sille-S lippua, mitä saat on hello1.s
ja voit itse nähdä konekielellä.
>> Teen tämän hyvin lyhyt ohjelma, mutta jos et mene takaisin Scramble
tai talteen tai minkä tahansa ohjelman olet kirjoittanut ja vain uteliaisuudesta
haluavat nähdä, mitä se todella näyttää, mitä todella syötetään CPU,
voit käyttää sitä-S lippu clang.
Mutta sitten lopuksi, siellä on vielä yksi Sainpas.
Tässä ovat 0 ja 1s jotka edustavat minun täytäntöönpano Hello, world.
Mutta käytin jonkun toisen funktion minun ohjelmaan.
Joten vaikka prosessi on ollut Otan hello.c,
se saa kootaan kokoonpano koodi, ja sitten se saa koota 0s ja 1s,
ainoa 0s ja 1s, jotka on tulostettu tässä vaiheessa
ovat niitä, jotka johtuvat minun koodi.
Mutta henkilö, joka kirjoitti printf, he koonneet koodi 20 vuotta sitten
ja se on nyt asennettu jonnekin laitteen
joten jotenkin täytyy yhdistää hänen 0s ja 1s minun 0s ja 1s,
ja että tuo meidät 4. ja viimeinen vaihe laatimisesta, tunnetaan yhdistää.
Niin vasemmalla puolella meillä on täsmälleen sama kuva kuin ennen:
hello.c tulee kokoonpano koodi tulee 0s ja 1s.
Mutta muistuttaa, että käytin vakio I / O-kirjasto minun koodi,
ja se tarkoittaa jonnekin tietokoneen siellä tiedosto nimeltä stdio.c
tai ainakin käännetyn version sen takia joku joitakin vuosia sitten
koottu stdio.c osaksi kokoonpanoon koodi ja sitten koko joukko 0s ja 1s.
Tämä on mitä kutsutaan staattinen tai dynaaminen kirjasto.
Se on joku tiedosto istuu jossain laitteessa.
>> Mutta lopuksi minun on otettava minun 0s ja 1s ja kyseisen henkilön 0s ja 1s
ja jotenkin yhdistää ne, kirjaimellisesti yhdistää nämä 0s ja 1s
yhdeksi tiedosto nimeltä a.out tai hello1 tai mitä minä kutsuin ohjelma
niin, että lopputulos on kaikki 1s ja 0s että olisi muodostavat oman ohjelman.
Joten kaiken tämän ajan tällä lukukaudella kun olet käyttänyt clang
ja vielä äskettäin käytetyistä tehdä, jotta ajaa clang,
kaikki nämä vaiheet on tapahtunut eräänlainen hetkellisesti mutta hyvin tietoisesti.
Ja niin jos jatkaa tietotekniikassa, nimittäin CS61,
tämä on kerros, voit jatkaa kuori takaisin pois sieltä
puhumme tehokkuudesta, turvallisuusnäkökohtia, ja kuten näiden alemman tason tiedot.
Mutta se, olemme lähdössä C taakse.
Mennään eteenpäin ja otamme 5 minuutin tauko nyt,
ja kun tulemme takaisin: Internet.
Selvä. Olemme takaisin.
Nyt aloitamme tarkastella ei vain HTML, koska näette,
HTML itsessään on oikeastaan ​​melko yksinkertainen
mutta todella www ohjelmointi yleisemmin, verkostoituminen yleisemmin
ja miten kaikki nämä teknologiat kohtaavat
jotta voimme luoda paljon kehittyneempiä ohjelmia huipulla Internet
kuin tähän asti olemme pystyneet näissä mustavalkoisena ikkunat.
Itse asiassa tässä vaiheessa lukukauden, vaikka vietämme suhteellisesti vähemmän aikaa
PHP, HTML, CSS, JavaScript, SQL ja enemmän,
useimmat opiskelijat päätyvät tekemään lopullisen hankkeita, jotka ovat web-pohjaisia
koska kuten näet, tausta sinulla on nyt C
on hyvin soveltaa näitä korkeamman tason kielillä.
>> Ja kun alkaa miettiä opinnäytetyö,
joka, aivan kuten Problem Set 0, jossa kehotettiin
tehdä useimmat mitään kiinnostaa sinua Scratch,
Opinnäytetyö on teidän tilaisuus ottaa newfound tietoa ja taju kanssa C
tai PHP tai JavaScript tms. ulos spin
ja luoda ikioma pala ohjelmisto maailmassa nähdä.
Ja siemen sinulle ideoita, tietävät, että voit suunnata tänne, projects.cs50.net.
Joka vuosi, me pyydämme ideoita tiedekunnan ja henkilökunnan sekä opiskelijaryhmille kampuksella
vain esittämään ideoita mielenkiintoisia asioita, jotka voidaan ratkaista käyttämällä tietokoneita,
käyttävät sivustot käyttämällä ohjelmistoa.
Joten jos olet kamppailee keksimään ajatus oman,
kaikki keinot selata ideoita siellä tänä ja viime.
Se on täysin kunnossa puuttua hankkeeseen, joka on ratkaistava ennen.
Olemme nähneet monia apps nähdä tilan pyykin kampuksella,
monet sovellukset navigointiin ruokasali valikosta
monet sovellukset navigointiin kurssiluetteloon ja vastaavat.
Ja todellakin, tulevassa luento ja tulevien seminaarien,
tuomme sinulle joitakin julkisesti saatavilla API, niin kaupallisesti saatavilla
sekä täällä saatavilla CS50 kampuksella niin, että sinulla on pääsy tietoihin
ja voi sitten tehdä mielenkiintoisia asioita sen kanssa.
Joten lisää lopullisesta hankkeita muutaman päivän kun vapautat erittely,
mutta nyt tiedän, että voit työskennellä yksin tai yhden tai kahden ystävänsä
useimmissa tahansa hanke kiinnostaa sinua.
Internetissä.
Voit mennä eteenpäin ja vedä kannettavan tietokoneen, voit mennä facebook.com ensimmäistä kertaa,
se ei ole kirjautunut äskettäin, ja paina Enter. Mitä tarkalleen tapahtuu?
>> Kun osut Anna tietokoneen, koko joukko toimenpiteitä
aloittaa tavallaan maagisesti tapahtuu.
Joten täällä vasemmalla, web-palvelin, kuten Facebook on täällä oikealla,
ja jotenkin käytät tällä kielellä kutsutaan HTTP, Hypertext Transfer Protocol.
HTTP ei ohjelmointikieli. Se on enemmän protokollan.
Se on joukko yleissopimuksia, selaimet ja www-palvelimet käyttävät kun toisiinsa yhteydessä.
Ja mitä tämä tarkoittaa on seuraavanlainen.
Aivan kuten todellisessa maailmassa, meillä on nämä yleissopimukset
jos jos tapaat joitakin ihmisen ensimmäistä kertaa, jos et pahastu humoring minua tänne,
En voisi keksiä sinulle sanoa, "Hei, nimeni on David." >> Hei, David. Nimeni on Sammy.
"Hei, David. Nimeni on Sammy."
Joten nyt olemme juuri mukana tällainen typerä ihmisen protokollan
jossa olen aloittanut protokollaa, Sammy on vastannut,
olemme ravistetaan käsissä, ja kauppa on valmis.
HTTP on hyvin samanlainen hengessä.
Kun selaimen pyyntöjä www.facebook.com,
Mikä selain on todella tekee on laajentaa sen sijaan niin sanotusti,
palvelimeen ja se lähettämällä sille sanoman.
Ja se sanoma on tyypillisesti jotain jää - mitä haluat saada? -
saada minut kotisivu, joka on tyypillisesti merkitty vinoviivalla lopussa URL.
Ja juuri niin tiedät mitä kieltä puhun, minä selaimen aion kertoa teille
että Puhun HTTP versio 1.1,
Ja myös hyvä toimenpide, aion kertoa teille, että isäntä että haluan kotisivu
on facebook.com.
Tyypillisesti selain, tietämättä sinulle, ihminen,
lähettää tämän viestin Internetin kautta, kun yksinkertaisesti kirjoittamalla www.facebook.com,
>> Anna, selaimeesi.
Ja mitä Facebook vastata?
Se vastaa joidenkin samannäköisten arvoituksellinen yksityiskohtia, mutta myös paljon enemmän.
Anna minun mennä eteenpäin Facebookin kotisivulle täällä.
Tämä on näytön että useimmat meistä luultavasti koskaan nähdä jos pysyt kirjautuneena koko ajan,
mutta tämä on todellakin heidän kotisivun.
Jos teemme tämän Chrome, huomaat, että voit vetää nämä pikku pikavalikot.
Käyttämällä Chrome, onko Mac OS, Windows, Linux tai vastaava,
Jos ohjaat napsautuksella tai vasemmalle napsautuksella voit yleensä vetää jopa valikon, joka näyttää tältä,
jossa muutamia vaihtoehtoja odottavat, joista yksi on View Page Source.
Voit myös yleensä saada näitä asioita menemällä View-valikkoon ja tönäisi ympäri.
Esimerkiksi tässä kohdassa View, kehittäjä on sama asia.
Aion mennä eteenpäin ja katsoa View Page Source.
Mitä näet on HTML että Mark on kirjoittanut edustamaan facebook.com.
Se on täydellinen sotku täällä, mutta me näemme, että tämä tekee hieman järkeä ennen pitkää.
Mutta on olemassa joitakin malleja täällä. Saanen selaa tavaraa kuten tämä.
Tämä on vaikea ihmisen lukea, mutta huomaa, että tämä malli Asennuskiinnikkeet
avainsanoilla kuten vaihtoehdossa avainsanat arvo, jotkut lainattu jouset.
Tämä on silloin, kun loit ensimmäistä kertaa, on määritelty mitä syntymävuosi on.
Että avattavasta valikosta syntymävuodet on jotenkin koodattu täällä
tällä kielellä kutsutaan HTML, Hypertext Markup Language.
Toisin sanoen, kun selain pyytää web-sivun,
se puhuu tämän yleissopimuksen nimeltään HTTP.
Mutta mitä facebook.com vastata tähän pyyntöön?
>> Se vastaa joitakin näistä kryptisiä viestejä, kuten tulemme näkemään hetken.
Mutta suurin osa sen vastaus on muodossa HTML, HyperText Markup Language.
Että on todellinen kieli, jolla web-sivulla on kirjoitettu.
Ja mikä selain todella niin on, saatuaan jotain, joka näyttää tältä,
lukee ylhäältä alas, vasemmalta oikealle, ja aina kun se näkee yhden näistä kulma suluissa
seurasi avainsanaksi vaihtoehto, se näyttää että sivunkuvauskielen asianmukaisella tavalla.
Tässä tapauksessa se näyttää pudotusvalikosta vuosia.
Mutta jälleen kerran, tämä on täydellinen sotku katsomaan.
Tämä ei johdu Facebook kehittäjät ilmenevät 0 5 tyyliä, esimerkiksi.
Tämä johtuu siitä, useimmat koodin, että ne kirjoittavat on, itse asiassa, kirjoittaneet kauniisti,
hyvin kommentoitu, kauniisti sisennetty, ja vastaavat,
mutta tietenkin, tietokoneet, selaimet eivät todellakaan kiinnosta
onko koodi on hyvin tyylistä.
Ja itse asiassa se on täysin turhaa lyödä sarkainnäppäintä kaikki ajat
ja laittaa kommentteja kaikki koko koodi ja valita todella kuvaavia muuttujan nimiä
koska jos selain ei välitä, kaikki teette lopussa päivän tuhlaa tavua.
>> Joten se osoittautuu mitä useimmat sivustot tehdä on vaikka lähdekoodi facebook.com,
varten cs50.net ja kaikki nämä muut sivustot Internetissä
ovat tyypillisesti hyvin kirjoitettu ja hyvin kommentoitu ja kauniisti sisennetään ja vastaavat,
tyypillisesti ennen sivusto on otettu kiinni Internetissä, koodi on Minified,
jolloin HTML ja CSS - jotain muuta me pian nähdä -
JavaScript-koodia me pian nähdä puristetaan,
jolloin pitkä muuttujanimet tullut X ja Y ja Z,
ja kaikki tämä välilyönnillä, joka tekee kaiken näyttämään niin luettavassa on kaikki heitetään pois,
koska jos ajattelee sitä tällä tavalla, Facebook saa miljardin sivun osumia päivässä -
jotain hullua sellaista - niin mitä jos ohjelmoija vain olla anaali
välilyöntiä yksi ylimääräinen aika vain luetelmakohdan joitakin koodirivin koskaan niin paljon enemmän?
Mitä vaikutuksia jos Facebook säilyttää että whitespace
kaikissa tavujen he lähettää takaisin ihmiset Internetissä?
Lyömällä välilyöntinäppäintä kun saat ylimääräistä tavun tiedoston.
Ja jos miljardi ihmistä jatka ladata kotisivulle sinä päivänä,
kuinka paljon enemmän tietoa olet lähetetään internetin?
Gigabyte mitään hyvää syytä.
Ja myönnetään, on paljon sivustoja tämä ei ole sellainen skaalautuva asia,
mutta Facebook, Google, joitakin suosituimmista sivustot
siellä on hyvä kannustin taloudellisesti tehdä koodia näyttämään sotku
niin että käytät mahdollisimman vähän tavua mahdollisimman lisäksi puristamalla sitä
käyttäen jotain zip, algoritmi nimeltään gzip,
että selain tekee sinulle automaattisesti. Mutta tämä on kamalaa.
Emme koskaan opi mitään muiden ihmisten sivustoja ja miten suunnitella verkkosivuja
jos meidän on tarkasteltava sitä näin.
>> Joten onneksi selaimet kuten Chrome ja IE ja Firefox näinä päivinä
tyypillisesti mukana sisäänrakennettu kehitystyökalut.
Itse asiassa, jos menen tänne Tarkasta Element tai jos menen View, Developer,
ja mene Developer Tools nimenomaisesti,
Tämän ikkunan alareunassa minun tulee nyt näkyviin.
Se on hieman uhkaava aluksi, koska siellä on paljon tuntemattomia välilehtiä tässä,
mutta jos en klikkaa Elements aina alareunassa vasemmalla
Chrome on ilmeisesti aika fiksu. Se osaa tulkita kaiken tämän koodin.
Ja niin mitä Chrome ei se puhdistaa kaikki Facebookin HTML.
Vaikka siellä ei ole välilyönnit siellä, siellä ei ole sisennys siellä,
Nyt huomaan, että voin alkaa navigoida tällä sivulla sitäkin hierarkkisesti.
On käynyt ilmi, että jokainen Web-sivu on kirjoitettu kielellä nimeltään HTML5 kannattaa aloittaa tästä,
Tämän DOCTYPE ilmoitus, niin sanotusti: <! DOCTYPE html>
Se on tavallaan valoa ja harmaan siellä, mutta se on aivan ensimmäinen rivi koodia tässä tiedostossa,
ja että vain kertoo selaimen, "Hei, tässä tulee joitakin HTML5. Täältä tulee sivun."
Ensimmäinen alkusulkumerkki pidemmälle sattuu olemaan tämä asia, alkusulkumerkki HTML tag,
ja sitten jos olen sukeltaa syvemmälle - nämä nuolet ovat täysin merkityksettömiä;
ne vain esityksen vuoksi, ne eivät ole oikeastaan ​​tiedostoon -
huomaa että sisällä Facebookin HTML tag, jotain, joka alkaa alkusulkumerkki
ja sitten on sana kutsutaan tag.
Joten sisällä HTML tagi on ilmeisesti pää tag ja body.
Sisällä pään tag nyt koko sotku Facebook
koska heillä on paljon metatietoja ja muita asioita markkinoinnin ja mainonnan.
>> Mutta jos me selaa alas, alas, alas, alas, katsotaanpa missä se on. Tässä se on.
Tämä on ainakin jonkin verran tuttuja.
Otsikko Facebook-kotisivu, jos joskus katsoa välilehteä otsikkopalkissa,
On Tervetuloa Facebook - Kirjaudu sisään, Rekisteröidy tai Lisätietoja.
Sitähän sinä näkisit Chromen otsikkopalkissa,
ja siitä se on edustettuna koodin.
Jos jätämme kaiken muun päähän, useimmat rohkeutta verkkosivun ovat elin,
ja käy ilmi, että Facebook-koodi tulee näyttämään monimutkaisempia
kuin useimmat asiat me kirjoittaa aluksi vain koska se on rakennettu vuosien varrella,
mutta siellä on koko paljon koodit itse, JavaScript-koodin,
joka tekee sivustosta erittäin vuorovaikutteinen:
nähdä tilapäivitykset heti käyttäen kieliä kuten JavaScript.
Siinä on jotain kutsutaan div, joka on jako sivun.
Mutta ennen kuin pääsemme siihen yksityiskohtia, yritetään loitontaa
ja tarkastella yksinkertaisempi versio Facebook 1,0, niin sanoakseni.
Tässä on Hello, world web-sivuja.
Se on, että DOCTYPE ilmoitus huipulla
joka on hieman erilainen kuin kaikki muu.
Mitään muuta me kirjoittaa web-sivun aikoo aloittaa <! paitsi että linja on
ja lukuun ottamatta jotain kutsutaan kommentteja HTML.
Mutta suurin osa, kaikki web-sivu on auki kiinnike, avainsanan, sulje kiinnike.
>> Tällöin näet yksinkertaisin verkkosivujen mahdollista.
HTML-tunniste sisältää pään tag ja se sisältää body,
mutta huomaa, että tämä käsite käynnistys ja pysäytys tageja.
Tämä on alku-tunniste HTML, tämä on lähellä tag tai lopputunnisteen.
Huomaa, että he tavallaan vastakohtia siinä mielessä, että läheinen tag tai lopputunniste
on tämä vinoviiva sisällä itse.
Samalla siellä Avopäinen tag täällä ja sulje pää tag täällä.
>> On avoin titteli ja tiivis otsikkokoodin täällä.
Se, että olen laittanut otsikon yhdelle riville, täysin mielivaltainen.
Se vain näytti se sopisi hyvin yhdelle riville, joten en vaivaudu Enteriä pari kertaa.
Samaan aikaan, keho tein luetelmakohta vain olla koskaan niin selvä.
Huomaa, että HTML on melko tyhmä kieli.
Itse takaisin päivää ennen oli WYSIWYG editorit
ja Microsoft Word jossa voit sanoa, "Tee tästä rohkea, jotta tämä kursiivilla"
te todella kirjoittaa vähän komentoja esseitä 20 + vuotta sitten
jolloin te sanotte: "Tehdään tämä lihavoida. lopettamaan tämän tekstin lihavoituna."
"Alkaa tehdä tästä tekstistä kursiivilla. Lopettamaan tätä tekstiä kursiivilla."
>> Sitähän HTML tai markup language on.
Tämä ensimmäinen tag sanoo, "Hei, selaimen. Sieltä tulee joitakin HTML."
Seuraava tag sanoo, "Hei, selain. Täältä tulee pään otsikkoa nettisivuilleni."
"Hei, selain. Täältä tulee otsikko."
Ja sitten tänne, "Hei, selain. Siinä se otsikko."
Joten tämä on, miten selain tietää enää muita merkkejä kuin Hello, world
vuonna otsikkorivillä.
Samalla tämä sanoo, "Se on se pään."
Tämä sanoo: "Täältä tulee ruumis. Tässä on todellinen kehon" - kirjaimellisesti, sanat Hello, world.
Ja tämä sanoo tässä: "Se on se elin. Siinä on HTML."
Joten selaimet ovat melko tyhmiä.
He vain lukea tätä kamaa ylhäältä alas, vasemmalta oikealle, ja tehdä mitä he ovat kertoneet tehdä.
Tehdään itse tehdä vähän esimerkiksi täällä.
Saanen avata yksinkertaisin ohjelmien Macin täällä, nimittäin TextEdit.
Windows voit käyttää Notepad.exe.
Mutta tämä on kaikki mitä tarvitset alkaa tehdä web-sivuja.
Aion mennä eteenpäin ja kopioi ja liitä tämä koodi tähän tiedostoon.
Aion mennä eteenpäin ja tallenna se työpöydälle,
ja aion tallentaa tämän hello.html,
ja nyt tiedosto on nimetty hello.html.
Täällä se on minun työpöydälle.
Sallikaa minun nyt mennä selain ja vedä tiedosto selaimessa.
Ja voila, tässä on minun ensimmäinen Web-sivu.
Huomaa, että nimi-välilehti on Hello, world kohti otsikkokoodien
ja huomaa, että hei, maailma on ruumis minun web-sivun,
ja Woo-hoo, olen internetissä.
>> En oikeastaan ​​ole, oikea, koska tämä tiedosto ei ole Internetissä.
Se sattuu olemaan minun paikalliselle kiintolevylle, että erityisesti polku.
Mutta ajatus on sama. Kaikki nyt tarvitsemme on web-palvelin, johon haluat ladata sen.
Mutta ensin itse ottaa hieman monimutkaisempaa ja hieman stylization.
Tämä on yksinkertainen, jos tylsää, web-sivun.
On käynyt ilmi, on olemassa muita tunnisteita voimme käyttää.
Esimerkiksi täällä keltainen Olen esitteli 2 uutta tageja.
Emme pelaa paljon näitä tänään, mutta huomaa, että linkki tag
jotenkin näyttää erilaiselta kaikesta muusta.
Link tag kestää mitä kutsutaan määritteitä,
ja attribuutti on jotain, joka muuttaa käyttäytymistä tunnisteen.
Tässä tapauksessa tämä ei ole paras valinta nimiä, linkin, koska se on tavallaan merkityksetön,
mutta tämä linkki tag sanoo, lähinnä kuuluu niminen tiedosto styles.css sisällä Web sivulla.
Voit ajatella tätä analoginen C: n # include direktiivi.
Styles.css viittaa eri kieltä kokonaan että emme pelaa tänään,
mutta se on estetiikkaa: fontin kokoa, värejä, täyte, sisennykset, reunukset,
ja kaikki tällaista estetiikkaa yksityiskohtia.
Samalla komentosarjatunnus on toiminnallisesti samanlainen,
mutta sen sijaan kuuluvat CSS, että kieli, se sisältää toisen kielen JavaScript.
Eli toisin sanoen, nämä 2 tageja minä lopulta voi kirjoittaa oman web-sivun
mutta myös vetää koodissa että minä tai joku muu on kirjoittanut
jotta voimme seistä toisten harteille, voimme harjoitella hyvän suunnittelun,
factoring yhteiset koodia.
Jos minulla 10 eri verkkosivujen, tämä tarkoittaa, että jotkut estetiikka
voidaan laskea ulos, aivan kuten # include, erilliseen tiedostoon.
Joten me lähdemme sinne.
Mutta katsotaanpa todella ensin tehdä jotain mielenkiintoisempaa tämän tiedoston.
>> Tämäkin on vain TextEdit. En ole teknisesti internetissä, mutta me pääsemme sinne.
Haluaisin tehdä Hello, world hieman rohkeampi kuin se on.
Joten hei, nyt mielivaltaisesti sanoa lihavoitu.
Jälleen tarina on sama: Hei, pilkku, alkaa tehdä tätä rohkea,
Sitten maailma saa painettu lihavalla, ja tämä tarkoittaa pysäyttää tulostuksen tämä lihavoitu.
Anna minun mennä eteenpäin ja tallennan tiedoston, siirry takaisin Chrome, minä suurentaa vain, jotta voimme nähdä sen paremmin,
ja lataa, ja huomaat, että maailma on nyt lihavoitu.
Web on kyse hyperlinkit, joten mennään eteenpäin ja tehdä tämä:
Oma suosikki sivusto on, sanotaanko, youtube.com.
Tallenna, lataa. Okei. On pari ongelmista nyt lisäksi hideousness verkkosivuilla.
1, olen melko varma, että olen Enter täällä. Ja tein.
En ole vain Enter, olen myös sisennetty, harjoitellaan mitä olemme saarnata siitä tyylistä,
mutta minun on aivan maailman.
Miksi tämä? Selaimet vain tehdä mitä kerrot heille tehdä.
En ole kertonut selainta, "Break linjat täällä. Aseta kohta rikkoa täällä."
Joten selain, sillä ei ole väliä, jos osuin tuotto 30 kertaa,
se vielä menossa laittaa vieressä maailmaan.
Mitä minun on tehtävä täällä on sanoa jotain , lisätä rivinvaihdon.
>> Ja itse asiassa, rivinvaihdon on sellainen outo juttu
koska et voi todella alkaa siirtymässä toiseen linja, tee jotain,
ja sitten lopettaa siirtymässä uudelle riville. Se on tavallaan atomi toimintaa.
Voit joko tehdä sitä tai et. Sinä Enter tai et.
Joten br on hieman erilainen tag, joten minun täytyy lajitella sekä avata ja sulkea
kaikki kerralla.
Syntaksin tämä.
Teknisesti, te voisi tehdä jotain tällaista joissakin versioissa HTML,
mutta tämä on vain tyhmä, koska ei ole mitään syytä aloittaa ja lopettaa jotain
jos voit sen sijaan tehdä kaiken kerralla.
Ymmärtäkää, että HTML5 ei ehdottomasti edellytä tätä slash,
niin näet oppikirjoja ja online-resursseja, jotka eivät ole sitä,
mutta hyvä toimenpide mennään harjoittelemaan symmetriaa että olemme nähneet tähän mennessä.
Tämä tarkoittaa sitä, että tunniste on sekä avata ja sulkea.
Joten nyt haluan pelastaa minun tiedoston, mene takaisin tänne.
Okei, joten se alkaa näyttää paremmalta, paitsi Web Tiedän sellainen klikattava,
ja vielä youtube täällä ei näytä johtavan mihinkään.
Se, koska vaikka se näyttää linkin, selain ei tiedä, että sinänsä,
joten minun täytyy kertoa selaimen tämä on linkki.
>> Tapa tehdä tämä on käyttää ankkuri tag:
<Href hyper viittaus, joka on vanhan koulun tapa sanoa linkin,
= "Http://www.youtube.com">
ja haluaisin siirtää tämän uuden linjan juuri niin se on hieman luettavampi,
ja minä kutistuu fontin kokoa.
Olenko tehnyt vielä? No Siellä tulee olemaan tämän kahtiajako.
Tämä tagi, ankkuri tag, todellakin kestää määrite,
joka muuttaa käyttäytymistä, ja arvo joka määrite on ilmeisesti YouTuben URL.
Mutta huomaa kahtiajako on, että vain koska se URL aiot,
tämä ei tarkoita sitä, että on oltava sana, että olet korostaa ja tehdä linkin.
Pikemminkin se voi olla jotain tällaista.
Joten minun on sanottava lopettamaan tämän sanan hyperlinkin käyttämällä lähelle ankkuri tag.
Ilmoitus En tee tätä.
1, tämä olisi vain tuhlausta kaikkien aikaa ja se ei ole välttämätöntä.
>> Voit sulkea tunnisteen, vain mainita nimeä tag uudelleen.
Et maininnut mitään ominaisuuksia.
Joten tallentaa että, mene takaisin. Okei, voila, nyt se on sininen ja hyperlinkitettyjä.
Jos painan sitä, minä itse tehdä mennä YouTubeen.
Joten vaikka Web-sivu ei ole internetissä, se on ainakin HTML,
ja jos annamme Internet kiinni, olisimme todella päätyä täällä youtube.com.
Ja voin mennä takaisin ja tässä on minun sivun. Mutta huomaa tätä.
Jos olet joskus saanut roskapostia tai phishing-hyökkäys,
Nyt sinulla on mahdollisuus sen jälkeen vain viiden minuutin tekemään samoin.
Voimme mennä tänne ja tehdä jotain www.badguy.com
tai mitä ylimalkaisia ​​sivusto on, ja sitten voit sanoa tarkistaa PayPal-tilin.
[Naurua] Ja nyt tämä tulee mennä badguy.com, joita en aio napsauta
koska minulla ei ole aavistustakaan mihin se johtaa. [Naurua]
>> Mutta meillä on nyt mahdollisuus todella päätyä sinne.
Joten olemme todella vain alkaa raapia pintaa.
Emme ohjelmointi sinänsä; Kirjoitamme markup language.
Mutta heti kun me pyöristää sanastosta HTML,
me käyttöön PHP, todellinen ohjelmointikieli
jonka avulla voimme luoda HTML automaattisesti, luoda CSS automaattisesti,
jotta voimme alkaa keskiviikkona toteuttaa vaikkapa
oman hakukoneen ja enemmän.
Mutta lisää, että pari päivää. Nähdään sitten.
>> [CS50.TV]