[Powered by Google Translate] [Tjedan 7]
[David J. Malan - Sveučilište Harvard]
[Ovo je CS50. - CS50.TV]
U redu. Dobrodošao natrag. Ovo je CS50, a to je početak tjedna 7.
Par malih najavama:
Pset5 je sada u tijeku, ili će uskoro će biti,
i neka mi kažu, sasvim iskreno, to ne imaju tendenciju da se među više izazovan
tečaja je problematična seta, pa neka mi spomenuti ovo sada
tako da ovaj tjedan više nego ikad ne čekati dok, recimo, u srijedu navečer
ili u četvrtak navečer roniti u.
Ovo je definitivno zanimljiv pset. Mislimo da je to zabavno.
Ako ste zapravo dobiti potpuno ispravna i onda mogu osporiti takozvanu Big odbor,
imat ćete priliku kako bi se slagala wits s nekim od tečaja osoblja
i neke od svojih kolega.
Što Big odbor je je kada imate svoj provjere pravopisa rad,
ćete biti u mogućnosti ići na cs50.net nakon pokretanja naredbe,
čisto uključiti, a zatim iznos vremena i količina RAM i više
koji ste koristili u provedbi će biti izloženi ovdje na stazi početnu stranicu.
Primijetit ćete da se cijela hrpa tih ljudi ovdje naveden kao osoblje
jer tijekom vikenda, osoblje mislio da će to biti zabavno pokušati nadmašiti jedni druge.
Dakle, shvatite da je cilj ovdje nije da nadmašiti osoblje.
Čak sam samo ovdje na broju 13.
Čisto odluče, ali to je prilika da se vidi koliko je malo RAM-a
i kako je malo CPU sekundi možete koristiti vis-a-vis neki od vaših kolega.
>> I ja ću priznati da je Kevin Michael Schmid,
trenutno broj jedan položaj kao jedan od TFS,
to je implementacija koja zovemo nije moguće
s obzirom da je on koristi gotovo 0 RAM i gotovo 0 sekundi za utovar.
Dakle, mi ćemo se pobrinuti za Kevina odsutan. [Smijeh]
Postoje određene vještine koje Kevin je stavljajući na kušnju ovdje.
Jedna od stvari koje smo mislili da ćemo učiniti previše je sada CS50x je tjedan u tijeku,
i vi ste koliko dio ovog eksperimenta, kao oni studenti su.
Mi smo ih pitali kao dio svog pset0, koji je na sličan način podnijeti Scratch projekt
interesa za njih - igra, interaktivni umjetničko djelo, animacija, ili kao -
1 - do 2-minutni video, ako su željeli, rekavši hello svijeta i tko su oni zapravo.
Mislio sam da bih podijeliti s vama samo nekoliko videa koji su poslali dosad
jer za nas, na osoblje najmanje, to je stvarno bio uzbudljiv
i inspirativno vidjeti ove ljude iz cijelog svijeta - zemlje diljem svijeta -
tuning, od svih stvari, na tečaj informatike na internetu,
da li je to zato što oni žele nastaviti svoj studij,
oni žele da se njihove karijere u novom smjeru,
oni žele popuniti praznine u vlastitom znanju,
pa neke od istih razloga koje vi možda su bili ovdje.
>> Tako sam vam dati jedan takav student ovdje. Ti bi mogao podići glasnoću samo malo.
Ovdje je jedan od naših učenika 1-minutnim podnesaka.
Pozdrav, svijet. Ja sam student industrijskog inženjeringa ovdje u Malagi, Španjolska.
Ja sam uzbuđen o ovom online tečaj jer volim informatike, ja stvarno učiniti,
i ja uistinu cijenimo da ću dobiti ga istražiti.
I činjenica da ja mogu naučiti isto sve vas dečki učiniti
ali umjesto da se u Harvardu sam u Malagi, kako strašan je to?
Pa, ja sam Fernando, a ovo je CS50. Vidi vam dečki.
[Smijeh] Drugi isječak smo posebno sviđa, vidjet ćete da ovaj gospodin je engleski nije toliko jak.
To izgleda kao da je to stroj prevedeno, pa su prijevodi sami malo nesavršen,
ali to je bio jedan od naših favorita tako daleko kao dobro.
[♪ ♪]
Pozdrav, svijet. [Govoreći u japanskom]
[Moram pozdraviti na japanskom, jer moj engleski je jako nepouzdan.]
[Ja sam predao poruku za vas od grada Gifu, Japan.]
[Mogu biti student po prvi put u 20 godina, što se može vidjeti.]
[Ja sam vrlo zahvalan na Sveučilištu Harvard, koji mi je dao ovu priliku i EDX.]
[Golf je gitara i moja najdraža stvar radi.] [Smijeh]
[♪ ♪]
[Zašto mislite da sam je pokušavao da prisustvuju cs50x.]
[Sveučilište Harvard, to je moja čežnja.]
[Pogotovo ako sam daleko prisutnost živio u Japanu.]
[Htjela sam probati odmah svjesni postojanja takvog EDX kada.]
[Zar ne mislite tako da ne ovisi o starosti učenja I.]
[Cs50 je moja čežnja. Moje ime je Kazu, i to je cs50.]
[♪ ♪] [pljesak i navijanje]
Druga omiljena naša je ovu tvrdnju ovdje od nekoga.
[♪ ♪] [Malan] Google je ako niste upoznati s ovim mem.
>> I onda na kraju, par drugih koje je dobio objavljena da je možda osvojiti nagradu divan.
[Studenti] Ajoj! >> [Malan] Morat ćemo slušati. To je kratka, pa pažljivo slušajte.
[Ženski govornik] Koje je vaše ime? >> Louie.
[Ženski govornik] Što je to? >> [Giggles] CS50. [Smijeh]
[Malan] On je dva traje, iako.
Ovdje ćemo ići, posljednji.
Moje ime je Louie, a ovo je CS50.
[Smijeh] To je onda CS50x.
Hvala svima vama, a nakon zajedno kod kuće
tko su učestvovanje dosad.
Danas, možemo zaključiti našu raspravu o strukturama podataka,
barem neke od najosnovnijih,
i onda ćemo nastaviti naš razgovor o HTML i web programiranja.
Doista, mi smo proveli prošlost neki sedam tjedan gleda osnovama programiranja -
algoritmi, strukture podataka, i slično -
i C, kao što ste možda doživjeli do sada,
nije nužno najdostupniji jezika
s kojim provesti neke od tih ideja.
I tako počinje ovaj tjedan i sljedeći tjedan, a onda sljedeće,
smo napokon ćete moći prijelaz iz C, koja se općenito poznat kao prilično niske razine jezika,
kako stvari višoj razini, među njima PHP, JavaScript, i slično,
što ćemo vidjeti privući na istim lekcija koje smo naučili tijekom posljednjih nekoliko tjedana,
ali vidjet ćete da proglašenje stvari poput polja i hash tablice i traženje i sortiranje
postala toliko mnogo lakše, jer su jezici sami ćemo početi koristiti
će postati moćniji.
Ali prvo, primjena stabala.
To je vrlo čest ovih dana morati stisnuti podatke.
U kojem kontekstu bi želite komprimirati neku vrstu digitalnih informacija?
>> Da. >> [Student] Kada trebate ga poslati preko interneta.
Da, kada želite poslati nešto preko weba.
Ako želite preuzeti veliku datoteku, to je idealno ako netko na drugom kraju
je stisnut tu datoteku pomoću zip formatu ili nešto slično
tako da šaljete manje bitova nego inače moglo biti poslane.
Pa kako se komprimirati podatke?
Sve se svodi na korištenje manje bitova nego su potrebni po defaultu.
No, to je neka vrsta neobične stvari, jer se sjetim tjedana 0 i 1
kada smo razgovarali o ASCII i binarnih i razgovarali smo o ASCII posebice
što je korištenje 8 bita predstavljaju slova abecede
tako da je slovo predstavlja 65, mala slova je broj 97,
i koliko god vam predstavljaju 65 ili 97, koristite 7 ili 8 bita.
No, kvaka je da postoje neke slova engleske abecede
da nisu popularni kao drugima.
Z nije sve što je popularno, Q nije sve što je popularna, ali i E su super popularan.
I još za sve tih pisama, po defaultu svijet koristi isti broj bitova, samo osam.
Dakle, ne bi to bilo pametnije da umjesto 8 bitova za svaku pismu,
čak i većina nerijetko koriste kao Q i Z,
što ako smo koristili manje bitova za A i E i S i najpopularnijih pisama
i koristiti više bitova za manje popularnih slova,
ideja bude neka je optimizirati za zajedničku slučaju,
koja je tema u informatici od pokušaja da poboljšate ono što će se dogoditi najviše
i provesti malo više vremena, malo više prostora na stvari koje, da, može dogoditi
ali ne nužno kao često.
Dakle, uzmimo primjer.
>> Pretpostavimo da želimo kodirati informacije prilično učinkovito.
Možda ste odrastao znajući nešto o Morseov kod,
i izgledi su da nisu znali stvarni broj,
ali možda podsjetiti da je barem ova serija točkica i crtica.
To je prilično učinkovita kodiranje, i primjetiti da je najpopularniji pismo - na primjer, e -
koristi najkraći zvučnih signala.
Morse koda je sve o BEEP-BEEP-BEEP-BEEP-BEEP-beep i drži tonove
bilo za kratko vrijeme ili duže vrijeme.
E, kao obilježeni točku, je super kratki zvučni signal, samo ton, i da će predstavljati E.
Nasuprot tome, T će biti duži zvučni signal, kao što su zvučni signal [produžuje zvuk],
te da će predstavljati T.
No, to je još uvijek prilično kratko, jer, za razliku od, ako pogledate Z,
izraziti Z će ići bip, bip [više zvuk], bip, bip [kraći zvuk].
Dakle, to je više zato što je rjeđe.
Ali Gotcha ovdje je da Morse koda je malo manjkav
u da to nije odmah decodable.
Na primjer, pretpostavimo da ste čuli o nekom kraju žice beep [kratka], zvučni [dugo].
Što poruku sam samo primati? Točka i crtica. Što to predstavlja?
[Student] A. >> [Malan] Možda.
To bi također moglo biti e slijede T.
Drugim riječima, Morseov kod, iako to iskorištava ovaj princip optimizacije corner slučaj,
ne sama posuditi neposrednoj decodability.
To je, čovjek koji je čuo ili primanje ove točkice i crtice
mora nekako shvatiti gdje pauze između slova,
jer ako ne znate gdje se ti prekidi su, možda zbuniti za ET ili obrnuto.
>> Dakle, što bi trebao učiniti? U Morse koda ste samo mogli pauzirati između svake od pisama.
No, zaustavivši je vrsta brojilo za cijelu točke ubrzava stvari.
Pa što ako umjesto toga smo došli s kodom tamo gdje nije ovo loše stanje
gdje je E prefiks, na primjer, o -
Drugim riječima, ako bismo mogli osigurati da uzorci su još uvijek kratki za popularne slova
duga za manje popularnih slova, ali nema moguće konfuzije?
Čovjek po imenu Huffman godina izumio ovu shemu zove Huffman ovo kodiranje
da zapravo iskorištava jedan od podatkovnih struktura koje smo proveli malo vremena govori o
ovaj prošli tjedan, da od stabala, binarni stabala posebno -
Značenje binarno stablo koje ima ne više od dva djece.
To je možda lijevo dijete, možda je pravo dijete, i to je to.
Dakle, pretpostavimo samo zbog rasprave da netko želi poslati poruku
da izgleda ovako. To je potpuna glupost, ali to je sastavljen od AS, BS, CS, DS, i Es.
A ako zaista brojati do sve As, B, Cs, DS, i Es
a zatim podijeliti s ukupnim brojem od slova,
ovo malo grafikon ovdje kaže da je 45% od slova Es, 20% su Kao,
10% B, i tako dalje.
Dakle, drugim riječima, pretpostavimo da citira niz postoji
je samo neka poruka koje želite poslati.
To se događa da se gluposti samo tako možemo koristiti kao nekoliko pisama što je više moguće,
ali to je doista slučaj da e dalje najpopularniji,
i B i C su najmanje popularni, barem od tih 5 slova abecede.
Pa kako možemo ići oko dolaze sa kodiranja,
binarno kodiranje, uzorak 0s i 1s za svaki od tih pisama
na takav način da je E je kratki obrazac i možda B i C su nešto dulji uzorci,
opet, ideja je da želimo koristiti manje bitova većinu vremena
i više bita samo jednom u neko vrijeme.
Prema Huffman ovo kodiranje, možete stvoriti šumu stabala.
Postoji neka vrsta priče da se ovdje uključuje stabala i također procese ih gradi.
Počnimo.
>> Ja predlažem da počnete s ovom šumi, da se tako izrazim, od pet stabala,
od kojih je svaki prilično glupo stablo.
Stablo se sastoji od samo jednog čvora, kao i ovdje su zastupljeni u krug.
Dakle, svaki od tih stvari može biti C struct
i unutar C struct može biti plovak predstavlja frekvenciju računati
a onda možda char predstavlja pismo.
Dakle, mislim od tih čvorova samo kao bilo koji stari C struct, ali, za sada, višu razinu.
To je šuma pet stabala, svaka od koji imaju samo jednu čvor.
Što Huffman Predloženi je da počnemo kombinirati one stabala
da imaju najmanje frekvencije broji u nešto većim stabala
povezujući ih s novim korijena čvora.
Dakle, među slovima ovdje, primijetiti da za praktičnost sam ih izdvojiti s lijeva na desno,
iako to nije nužno potrebno, i obavijest da su najmanji čvorovi
trenutno 10% i 10%.
Dakle Huffman predložio da spojimo te dvije najmanje čvorova u novom stablu
uvođenjem novog roditeljski čvor, a zatim dati tog roditelja lijevo dijete i pravo dijete
gdje je B samovoljno lijevo i C je samovoljno pravo.
A onda Huffman dalje predložio da neka je sada samo misliti na lijevoj djeteta
u jednoj od tih stabala uvijek kao zastupa s 0
i pravo dijete uvijek kao da predstavlja broj 1.
>> To ne smeta ako ih okrenuti tako dugo dok ste dosljedni.
Tako sada imamo četiri stabla u ovoj šumi.
A ja kažem četiri jer sada je stablo na lijevoj strani -
i to ne toliko stablo u smislu da raste na ovaj način,
to je više kao obiteljsko stablo gdje je sada od 0,2 je vrsta roditelja od dvoje djece -
primijetiti da je u tom roditelju smo izvučeni 0,2.
Dodali smo frekvencije točaka dvoje djece, a dobio je novi čvor ukupni zbroj.
Dakle, sada smo samo ponoviti ovaj postupak.
Nađi dviju najmanjih čvorove, a zatim im se pridruže u novom stablu
, a zatim ponovite postupak dalje.
Trenutno imamo nekoliko kandidata, 20%, 15%, a drugi 20%.
U tom slučaju, moramo razbiti kravatu. Možemo to učiniti proizvoljno.
Mi smo samo trebali to učiniti dosljedno.
U tom slučaju, ja ću otići samovoljno s jedne na lijevoj strani,
i ja sada spojiti 20% i 15% da će mi dati novi roditelj zove 35%,
čija je lijevo dijete je 0, čije je pravo dijete je jedan, a sada imamo samo tri stabla u šumi.
Vi možda možete vidjeti gdje se to događa.
Ako smo ponoviti ovaj par više puta, da ćemo imati samo jedan veći stablo,
svi čiji su rubovi su označeni 0S i 1S.
Ajmo to učiniti opet.
35% je to stablo je korijen. 20% i 45%, tako da ćemo spojiti 35% i 20%.
Sada imamo ovo drvo ovdje. Mi dodati one zajedno, imamo 55%.
Sada postoje samo dvije stabla u šumi.
Mi radimo ovo jedan posljednji put, a nadamo se matematički sve frekvencije zbrojiti
jer budući bi ih računaju od get-ići dodati i do 100%.
I sada imamo jednog stabla.
Dakle, ovo je stablo Huffman ovo kodiranje.
To je vrsta je neko vrijeme da se tamo verbalno, ali stvarnost je s for petlje
ili s rekurzivne funkcije, mogli izgraditi ovu stvar prilično brzo.
Tako sada imamo jedan novi čvor, a sve od tih unutarnjih čvorova su malloc'd,
vjerojatno, usput.
Dakle, sada je na vrhu ovog drveta imamo 100%, ali sada primjetiti imamo put
od ova nova pra-pra-pra-baka ili djed na sve pra-pra-praunuka
sve na dnu, na sve lišća.
>> Što ćemo učiniti sada je predložiti da se u cilju predstavljaju slovo E,
jednostavno ćemo koristiti broj jedan. Zašto?
Jer, ako smo prošli ovo drvo od konačnog korijena do lišća poznat kao E,
pratimo samo jednu prednost, desnog ruba, i da je označen naravno u gornjem desnom jednom.
Dakle, implikacija ovdje Huffman je da e je kodiranje u binarnom samo će biti jedan.
I to je ljepušan osuditi učinkovit. Stvarno ne mogu dobiti bilo manje od toga.
S druge strane, što će biti zastupljena, ako slijedite logiku,
ono što uzorak bitova umjesto toga? 01.
Dakle, doći do, možemo početi u korijenu i idemo lijevo i onda idemo desno,
što znači da slijedi 0, a zatim jedan.
Tako ćemo predstavljati pismo s uzorkom 0 i 1.
I sada primjetiti već imamo svojstvo neposrednoj decodability
da nismo imali u Morse kodu.
Iako obje ove uzoraka su prilično kratka - E 1 malo, je dva bita -
primijetiti da se oni ne mogu zamijeniti jedan ili drugi,
jer ako vidite jedan je dobio da bude E, ako vidite 0 tada jedan očito je dobio biti A.
Isto tako, ono što je D? 001.
Što je C? 0001.
I ono što je B? 0000.
I opet, jer sve od slova mi je stalo su na lišću
i nitko od njih su vrsta posrednika na putu od korijena do lista,
ne postoji rizik od conflating dva slova 'različitih kodiranja
jer sve ove bitne uzorcima deterministička.
0000 uvijek će biti B.
Nema čvor negdje između da bi moglo zbuniti jedno slovo za druge.
Dakle, ono što je implikacija ovdje?
>> Najpopularniji pismo - u ovom slučaju E - je stečen najkraći kodiranje,
Je stečen sljedeću najkraći kodiranje,
i B i C, koje smo već znali od get-ići su vrste najmanje popularan
na 10% frekvencije svakog, oni su dobili najdužu kodiranje.
I tako ono što to znači sada je da ako želite poslati poruku da je komprimirana
preko Interneta ili na e-mail ili slično,
radije nego da koristite standardni ASCII, možete poslati Huffman kodiranu poruku
pri čemu ako želite poslati na slovo E, šaljete samo jedan zalogaj.
Ako želite slati, možete poslati dva bita, 01, umjesto slanja 8 bita
slijedi još osam bitova slijedi još osam bita i tako dalje.
No, tu je Gotcha ovdje.
To nije dovoljno samo izgraditi ovo stablo, a zatim početi slati iz Alice da Bob
kraći bitni uzorak, niz od ASCII,
jer Alice također mora obavijestiti Boba čega
ako Bob će moći čitati svoju komprimiranu poruku?
[Nečujno učenik odgovor] >> Što je to?
[Nečujno učenik odgovor] >> Od ono stablo.
Ili još točnije, ono što ti kodiranja su,
pogotovo jer tijekom ove priče smo napravili sud poziva u jednom trenutku.
Sjetite se da smo morali odabrati proizvoljno između dviju različitih 20% čvorova?
Dakle, to nije slučaj da je Bob, primatelj, mogu samo rekonstruirati stablo na vlastiti
jer možda on će stvoriti stablo ikada tako nešto drugačije od Alice.
Štoviše, Bob ni ne znaju što je izvorna poruka
jer je jedino Alice ga šalje, naravno, je komprimirani poruka.
>> Tako je kvaka s kompresije kao što je to, da, Alice može uštedjeti puno bitova
slanjem jedan za E i 01 za i tako dalje,
ali ona također mora obavijestiti Bob što mapiranje između slova i komadići
jer nije jasno mogu osloniti na samo ASCII više ako nećemo koristiti ASCII.
Dakle, ona može poslati mu stablo nekako -
zapisati, spremite ga u obliku binarnih podataka ili nešto slično -
ili samo poslati mu malo varati list, Excel datoteka, koji pokazuje mapiranja.
Dakle, učinkovitost kompresije stvarno pretpostavlja da su poruke koje šaljete
su prilično veliki, barem srednje veličine,
jer ako šaljete super kratku poruku,
ako baš želite poslati poruku LOŠE, koji se dogoditi da bude riječ možemo čarolija ovdje,
B-D, vjerojatno ćete koristiti manje komadiće,
ali kvaka je ako imate obavijestiti Bob što je stablo
ili ono što oni kodiranja su, ti si idući u vjerojatno prevagnuti sve štednje
vlasništvo komprimirane stvari na početak.
Dakle, to zapravo može biti slučaj da ako pokušate sažimanje
čak i uz nešto poput zip ili datoteku formata možda biti upoznat s -
prilično male datoteke, čak i prazne datoteke -
ponekad te datoteke može dobiti veći i ne manje.
No, realno, to se događa samo za male veličine datoteka,
pa to neće napraviti gigabajta datoteka biti dva gigabajta;
mi stvarno pričamo bajtova ili samo par kilobajta.
>> Neki programi poput zip su dovoljno pametni da shvate da,
"Ti ćeš potrošiti više bitova sažimanje to."
"Dopustite mi ne smetaju ga sažimanje za vas na sve."
Dakle, ovo je samo jedan od načina zatim sažimanje teksta format.
Mi smo mogli provesti nešto ovako u C.
Na primjer, ovdje je kako bismo mogli predstavljati čvor u ovom stablo
gdje smo char za simbol, plutajući vrijednost za frekvencije,
i kao što smo vidjeli s našim drugim strukturama podataka, 2 pokazivače,
1 lijevo dijete, 1 na desnoj strani, od kojih bilo koji može biti NULL,
ali ako ne, to se odnosi na lijevoj djeteta i pravo djeteta.
Dakle, to je onda Huffman ovo kodiranje, i to je jedan od načina da možete ići oko sažimanje podataka,
i to je sigurno jedan od najvažnijih lako provesti
u kontekstu, recimo, prošlotjednih strukturama podataka,
iako čak i više sofisticirane algoritme postoje
koji može učiniti čak i više sofisticirane mutacije vaših podataka.
Sva pitanja onda na stablima, binarnih stabala, ili kompresije teksta?
[Student] Ima li neki dvosmislenosti, kao i ako [nečujno] podijeljen na 01,
zatim 011 će biti dvosmislena, zar ne?
[Nečujno] >> Dobro pitanje. Dvosmislenost.
Dopustite mi da sažeti pozivajući se na ovoj slici ovdje.
Budući da su likovi koje prešanje, prikazima,
po definiciji ovog algoritma uvijek ostati lišće,
nikad slučajno ćete koristiti isti uzorak bitova za prefiksa od više slova.
Dakle, drugim riječima, ti si zabrinut, to zvuči kao, dvosmislenosti koje proizlaze
pri čemu 001 bi mogao biti početak B ili početak C ili nešto slično.
Ali to ne može biti slučaj, jer obavijest da su sve slova abecede smo kodiranje
su na lišću.
>> I neodređenost može samo ustati, kao u slučaju Morse koda,
ako, na primjer, C bio negdje na putu od korijena do B.
[Student] Točno. Dakle, u tom slučaju, kažu ima dva lišće. >> Recimo ima - Reci to ponovno.
[Student] Reci ima dva lišće, F i G, a zatim G - >> ok. Ali, to ne mogu.
Sama po sebi ne bi mogao imati lišće F i G jer oni slovima F i G
bi sami biti ostavlja negdje na lijevoj B ili pravo na E.
Dakle, po definiciji, oni moraju biti lišće.
Inače, ti si to točno, ne bismo si riješio problem da Morseov kod suočava.
Dobro pitanje. Ostala pitanja? U redu.
Taj pojam bita, ispada da smo imali snage svi zajedno da mi ne nisam zapravo koristi
kada je došao na manipuliranje ove 0S i 1S.
Pitali smo o tome na jednom od prvih problema seta:
Naime, kako idete o pretvaranju veliko u mala slova ili obratno?
Ili, konkretnije, jedan od onih prvi psets upitao
koliko bita ti zapravo morati okrenuti kako bi se promijeniti u mala slova a ili obrnuto?
Evo kratkog podsjetnika ono 65 i 97 izgledaju u binarnom.
A čak i ako to pitanje je vrsta blijedi u sjećanju,
možete vidjeti da se ovdje koliko bitova treba zrcaljeno
promijeniti kapital u mala slova? Samo jedan.
>> Oni se razlikuju samo u jednom mjestu, treći bitni s lijeve strane.
Dok ima 010, malo ima 011.
Tako nekako, moramo samo biti u mogućnosti okrenuti tu malo,
i tada možemo kapitalizirati ili malih slova.
Mi smo to učinili u prošlosti zapravo koristi ako se uvjeti
i provjere da li je slovo između grada A i grada Z,
zatim izlazi kao - + 26 ili nešto slično.
Vjerojatno je aritmetički promjenu slova abecede.
No, što ako smo samo mogli okrenuti tu jednu malo?
Kako bi idete o uzimajući jedan byte vrijedi bitova, tako 8 bita kao 01000001 i 01100001?
Ako ste imali one uzorke bitova, kako možemo ići o promjeni samo jedan od njih?
Što ako uvedemo u žuto ovdje ovaj drugi uzorak bita?
Ako sam napraviti cijeli žute string 0S osim za jedan bit da želim promijeniti
i onda sam uvesti novu operatera poznat kao bitovne operatera -
bitovni u smislu da djeluje na pojedinačne bitove,
ne na cijeli bajt ili četiri bytes sve odjednom.
Ova okomita traka postoji u žute sugerira da što ako uzmemo zastupljenost kapitala A
i bitovni OR to sa žutom slijed bita?
Drugim riječima, mislim natrag na našu raspravu o Boolean izraza u nule, a zatim u C.
>> Doing boolean ili znači da bi bilo istinito, bilo prva stvar mora biti istina
ili druga stvar je da bi bilo istinito ili oboje moraju biti istinita,
, a zatim je rezultiralo izlaz je sama istina.
U ovom slučaju ovdje, što ćemo dobiti ako uzmemo 0 "ili" ed s 0? Lažna ili lažno?
To je još uvijek lažno, tako da je mala ostaje kao što se očekuje.
Što ako umjesto radimo jedan ili 0?
Ovo je sada ostaje jedan, ali primijetiti ono što će se dogoditi ovdje.
Ako počnemo s kapitalom A i mi i dalje "ili" na pojedinačne bitove kao radimo ovdje,
0 ili žuti nam daje ono što ovdje dolje? To nam daje jedan.
U stvari, pretpostavljam da nismo znali što veliko verzija malo zapravo bio.
Hajdemo to učiniti. Dopustite mi da se presele natrag u ovu ovdje.
Ajmo to učiniti opet. 0 ili 0 mi daje 0.
1 ili 0 mi daje jedan.
0 ili 1 mi daje jedan.
0 ili 0 mi daje 0. Sljedeći je 0, sljedeći je 0, sljedeći je 0.
1 ili 0 mi daje jedan.
I tako, čak i ako nismo znali unaprijed što kurent je,
jednostavno "ili" ing s ovim uzorkom bitova koje smo predstavili ovdje u žuto,
možete mala slova na kapital po flipping tu malo.
Mi smo koristili ovaj izraz tjedana prije: flipping malo.
Kako ste zapravo to programatski?
Možete koristiti ono što se općenito zove masku, slijed bitova,
da je u ovom slučaju samo tako dogodi da izgleda kao ovaj broj ovdje,
i onda "ili" to zajedno koristeći ovu novu C operatera,
Ne | |, koristite jedan | i ti bi zapravo dobili ovaj odgovor ovdje jer zašto?
Ovo je mjesto 1s, 2s mjesto, 4s, 8s, 16s, 32s.
Tako ispada da ako se slovo i bitovni OR to s integer 32,
jer integer 32, kada na to gledate kao bita, izgleda ovako,
to znači da možete okrenuti malo da ste zapravo želite.
A slično - i mi ćemo pogledati koda u samo jednom trenutku -
Pretpostavljam da želimo ići u drugom smjeru.
>> Kako vam ići od malih slova u kapitalu A? Koji malo treba promijeniti?
To je isti onaj.
Želimo promijeniti taj treći zalogaj od 1 do 0.
A kako bismo mogli ići o događaj ovaj?
Kako smo isključili malo? Uz ono što uzorak bitova možemo isključiti malo?
Što ako smo sortirati od invertni maske?
Dok prije, napravili smo cijelu žutu masku 0S
osim za jedan malo smo htjeli uključiti,
što ako ovaj put, možemo napraviti cijeli maska ​​1s osim malo da želimo isključiti
, a zatim koristiti ono što operator?
Što ako mi "i" stvari? Idemo pogledati.
Ako mi sada okrenuti na ovo, pretpostavljam da opet mogu stvoriti masku koja je sve 1s
osim za jedan bit da želim isključiti
i onda umjesto "ili" bijeli brojevi do vrha sa žutim brojevima ovdje dolje,
što ako sam umjesto "i" njih zajedno? To se zove bitovni i.
Logično, to je ista stvar kao i boolean.
To mi daje 0 & 1 je 0. Dakle, lažno i istinito je lažna.
Istina i istina je istina.
I ovdje je čarolija: Istina i lažno je sada lažna, tako da smo isključili tu malo.
I sada Ostatak priče je nešto jednostavno.
Budući da je ostatak maske je 1s, to ne smeta što su brojevi u bijelom.
Kada "i" nešto s istina, nećeš se promijeniti svoju vrijednost.
Ako je to istina, to će ostati vjeran. Ako je to bila lažna, ona će ostati lažna.
>> No, magija se događa kada se uzme nešto što je istina
i onda "i" to s lažno.
Ovo ima učinak isključivanja tu malo.
Dakle, malo zagonetan postoji.
Ajmo zapravo gledati u nekom kodu, što zapravo može izgledati čak i više zagonetan,
ali ajmo pogledati ovdje na tolower.
Ako gledam tolower, ide od kapitala u mala slova,
ajmo vidjeti kako bismo mogli provesti ovaj program.
Ovdje je glavni, i to ne uzimanje bilo kakvih naredbenog retka argumente.
Ja sam deklariranje znaka c za pismo koje je korisnik će upisati u.
I onda koristiti poznati učiniti dok petlja samo kako bi bili sigurni da je korisnik definitivno mi daje kapital
ili B ili C. .. Z, tako da dajte mi nešto između i Z.
A sad, što ja radim ovdje?
Ja sam "ili" ing. ovo sa 0x20, ali to je zapravo isti kao i -
a mi ćemo se vratiti na to u trenutku - 32.
Pa opet, 32 je ovaj uzorak bitova ovdje. Zašto to znamo?
Samo se sjetim tjedan 0.
Ovo je mjesto 1s, 2s mjesto, 4s, 8s, 16s, 32s mjesto.
Dakle, ovo žuto broj se dogoditi da bude 32.
I onda se može uzeti pismo kao char ovdje, bitovni "ili" to s doslovno brojem 32,
i što ću dobiti natrag? Mala verzija koja char.
Trenutak prije, iako sam to izrazio na drugačiji baze zapis.
Što je to predstavljaju? >> [Student] Heksadecimalni.
[Malan] To se događa da predstavljaju heksadecimalnim.
Nismo razgovarali o heksadecimalni sve to puno,
ali to je zapravo zgodan u ovakvim slučajevima.
>> Iako to izgleda složeniji i iako to izgleda kao 20, a ne 32,
Ispada da heksadecimalni je zapravo super povoljno notacija
jer u heksadecimalnom svaka znamenka nakon 0x - a to ne znači ništa;
to je samo ljudska konvencija koja kaže ovdje dolazi heksadecimalni broj -
svaki od tih znamenki, 2 i zatim 0, sami mogu biti predstavljeni
s točno četiri bita.
Dakle, ako smo to učinili, neka mi otvoriti tekst editor ovdje - čudno samodovršetak -
ako ćemo učiniti malo tekst editor ovdje, broj 0x20 znači ovdje je 4 bita, evo još četiri bita.
Učinimo krajnjem desnom četiri bita prvi.
0 kada zastupljena s četiri bita je ono? Super jednostavan. Samo sve 0s.
Dakle, četiri bita što 0S.
Kako vam predstavljaju dva? Prošlo je neko vrijeme otkad smo to učinili, ali to je 0100.
Dakle, ovo je mjesto 1s, ovo je 2s mjesto, a zatim ga ne smeta što je na drugim mjestima su.
Drugim riječima, u heksadecimalnom moglo bi se reći 0x20,
ali ako onda razmišljati o tome što je dva i kako se to predstavlja u binarnom,
što je 0, a kako je to zastupljena u binarnom,
odgovori na ta pitanja su to i to, respektivno.
Dakle, 0x20 dogodi da predstavljaju ovaj uzorak 8 bita,
koji je upravo maska ​​da smo htjeli.
Dakle, ovo je za sada samo intelektualna vježba,
ali stvarnost je u kodu to je obično češći pisati konstante kao što je ovaj
u heksadecimalnom jer onda programer može relativno lako,
čak i ako to zahtijeva neki papir i olovku, shvatiti što je to uzorak bitova je
jer ne možete samo izraziti 0s i 1s obično u kodu.
Vi ne možete ići 00010 i tako dalje.
>> Morate pokupiti decimalna ili heksadecimalni ili oktalni ili druge notacije.
Većina ljudi imaju tendenciju da odaberete heksadecimalnim jednostavno tako da se svaka znamenka predstavlja četiri bita
i možete to učiniti brzo matematiku.
I ja ću mahati ruku na toupper, što je gotovo isto, izgleda gotovo identično.
Toupper dogodi koristiti a ne ili operatora nego ovaj momak i DF.
Što df predstavljaju? df? Svatko? >> [Student] 255.
255? Nije 255. To će biti dalje.
Mi ćemo napustiti ovaj jedan kao malo vježbe.
Ali ako se ide od 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 i zatim što dolazi nakon 9?
Mi smo vrsta izvan decimalnih znamenki, ali u heksadecimalnom ono što dolazi nakon 9?
[Student]. >> Dakle, b, c, d.
Možete shvatiti od tamo što uzorak bitova d. zapravo predstavlja.
A ako ćemo učiniti math, vidjet ćemo da je maska ​​ćete završiti dobivanje natrag je identičan ovome.
Ovo je f, a sve 1s, a to je d. Dakle, df predstavlja tu masku. U redu.
I na kraju, da ne bi stvari zvuk super, super, tehničku
ali pretpostavljam da smo htjeli napisati program koji radi ovo.
Dopustite mi ići naprijed i učiniti binarni, koji je program u datoteci pod nazivom binary.c.
I sada neka mi pokrenuti binarni i dati mi ne negativan cijeli broj.
Počnimo lako i putovanja u 0.
Ovo sada je program koji ispisuje cijeli broj u svom binarnom reprezentacije.
Dakle, ako sam igrati ovu igru ​​ponovno i upisati samo jedan, ja bi trebao dobiti 32-bitni prikaz jednog.
Ako sam to učiniti opet s 2, ja bi trebao dobiti to.
Ako radim 7, ja bi trebao dobiti nekoliko 1s na kraju i tako dalje.
Ispada Spominjem ovo jer s bitovni operacije
što zapravo može učiniti jedna druga stvar, kao dobro.
Možete stvoriti ove maske dinamički.
Pogledajte ovaj jedan završni primjer uključuje bitovni operacije.
Ovdje je prvi dio koda, brz korisnik za broj,
i inzistira da li mi dati ne-negativni cijeli broj.
Dakle, to je neka vrsta stare školske stvari.
No, ovdje je nešto što je vrsta zanimljiv.
>> Kako mogu ići o ispisu broja u binarni?
Prvi put sam ponoviti od čega na što?
Što je veličina int pravilu, barem u aparatu? >> [Student] 4.
To je četiri. Dakle, 4 * 8 je 32-1 je 31.
Dakle, ako sam počinju računati od 31, koji predstavlja, što se ispostavilo,
samo konceptualno, 31. malo ili bit najvišeg reda, koji je ovaj momak ovdje,
a to će biti bitni 0.
Dakle, ovo je malo ... 01 bitni 31.
Pa što je to kod radi?
Obavijest za ovu petlju, iako to izgleda zagonetan, samo je Ponavljanje od 31 do 0. To je to.
Dakle, zanimljiv dio sada moraju biti u tih 5 redaka ovdje.
Imajte na umu da u toj liniji sam deklariranje varijable zove masku
biti u skladu s našim priče tih žutih brojeva.
I onda što je to radiš?
Ovo je još jedan bitovni operator nismo vidjeli prije, najvjerojatnije.
To je pomak lijevo operater.
Ovaj operater to.
Ovdje je broj 1, a ako to ne učinite sam napustio pomak, lijevi shift,
Što mislite da ima učinak rade na tom pojedinom 1?
Doslovno ga prebacuje preko.
Dakle, ako broj 1 je ono što imate na lijevoj strani, a vi početi ja inicijalizacije do 31.,
Što je to učiniti? To se događa da se ovaj broj jedan i guraju ga 31 mjesta ovdje.
I zbog toga je očito nema druge znamenke iza njega,
oni će po defaultu biti zamijenjen sa 0S.
Tako ćete započeti s brojem 1, koji, naravno, izgleda ovako -
i neka mi ga privući ovamo u centru.
I onda, kao što pomaknuti stvari na lijevoj strani, ovaj momak suštini ide na ovaj način.
No, čim se to, 0 dobiva popuniti
Ako pomak ga drugi put, to ide na ovaj način, a drugi 0 dobiva popuniti
>> Možete ga prebaciti opet i onda još 0 dobiva popuniti
Dakle, ako ste to učinili stvar jedne << ja 31 mjesta, te kraj gore uzimajući masku
da je 32 znakova, lijevom od kojih je 1,
sve od ostatka koji su 0.
I to ispada kao stranu, prebacujući broj na lijevoj strani kao što je ovaj
Također slučajno, a ponekad i povoljno,
ima učinak radite što na taj broj? >> [Student] to udvostručenje.
Ga udvostručenje jer svaki od stupova - 1s mjesto, 2S mjesto, 4s mjesto,
8s mjesto, 16s mjesto - they're sve udvostručenje kao i ti ići na lijevoj strani.
Odnosno, kada pomak 1s ćeš završiti udvostručenje vrijednost broja.
Možete završiti radiš zanimljive transformacije znamenki
pomicanjem sve više na taj način po ovlasti dva.
Pa kako to funkcionira?
To onda daje mi masku koja je sve 0s osim jedne u točno na mjestu gdje sam ga želite,
a onda se izraz, koji je ukraden iz toupper.c,
jednostavno govoreći uzeti broj n da korisnik upisao u,
"I" to s tom maskom, i što ćete dobiti?
Ti ćeš dobiti 1 ako postoji jedan u tom maskiranom mjestu,
ili ćeš dobiti 0 ako ne postoji.
I tako sve ovaj program učinkovito ne je da ima petlju,
i to stvara masku s jednom ovdje, onda je jedan ovamo, onda jedan ovamo,
i to koristi ovu bitovni i trik reći postoji jedna bitna u korisničkom ulaz ovdje?
>> Ima jedna bitna u korisničkom ulaz ovdje? A ako je tako, doslovno ispisati jedan, drugi ispisati 0.
Mi smo to sa Ints samo zato to je razlog zašto smo radili 32 bita umjesto osam,
ali ono što smo uveo onda je to bitovni I to bitovni OR,
i to lijevo pomak operater, koji nisu često užasno korisno,
ali ispada da mogu biti.
U stvari, ako ste bili predstavljati nešto poput niza logičke
samo da predstavljaju istinita ili lažna, pretpostavimo ste htjeli pratiti hoće li ili ne
soba puna 300 studenata je prisutan,
mogli proglasiti niz veličine 300 tipa bool, tako da ćete dobiti 300 bools,
a možete postaviti svaki true ako je netko ovdje i lažno drugačije.
Zašto je da reprezentacija u toj podatkovnoj strukturi neučinkovita?
Što je loše o dizajnu te strukture podataka, polja od 300 bools?
Što je bool, u stvari, ispod haube?
To je, također, je nešto što se ne bi moglo biti poznato.
Ispada nema bool.
Sjetite se vrsta stvorena da s cs50.h datoteku,
koja sama po sebi uključuje standardne bool.
C je vrsta glupi, iako, kada je u pitanju bool.
Koristi 8 bitova predstavljaju svaki bool, koji je potpuno razoran
jer očito, koliko bita ti treba predstavljati bool? Samo jedan.
Tako ispada da ako sada imaju mogućnost s bitovni operatori
manipulirati pojedinačne bitove čak iu char, čak u jednom bajtu,
ispada da bi mogao smanjiti količinu memorije potrebnu za zastupanje glupost
poput onog radnog stil strukture podataka za faktor osam.
Umjesto korištenja osam bita predstavljaju istinita ili lažna, doslovno mogao koristiti jedan
pomoću jednog bajta za svakih osam učenika u razredu
i varijantama 0-1 pojedinih bitova pomoću ove vrste low-level trikovima.
To je stvarno stati na kraj energije. Ima li kakvih pitanja o bitovni operacije?
>> Da. >> [Student] Ima ekskluzivni ili operater?
Da. Tu je ekskluzivni ili operater koji izgleda ovako, ^, mrkva simbol,
što znači samo prvi stvar ili druga stvar može biti 1 za izlaz biti 1.
Tu je i nije, ~, koji će vam omogućiti da se izvrtati 0 do 1 ili obratno, kao dobro.
A tu je i pravo pomak operatora, >>, što je suprotno od onoga koji smo vidjeli.
U redu. Ajmo uzeti stvari sada na višoj razini.
Počeli smo razgovor o tekstu, a zatim ga sažimanje
i predstavlja tekst manjem broju bitova;
razgovarali smo malo o tome sada možemo početi manipuliranje stvari na bitovne razini.
Ajmo sad uvećanje natrag do 10.000 metara na zastupljenost
od složenijih stvari poput grafike.
Ovdje imamo zastavu Njemačke, ovdje imamo jednu od Francuske.
To bi moglo biti zastupljena u formate možda znate - GIF-ovi, na primjer.
Ako ste ikada vidjeli sliku na webu koja završava u. GIF,
to je format za razmjenu grafike.
Ove dvije zastave ovdje vrstom se posuditi za kompresiju
za što možda očitih razloga? >> [Nečujno učenik odgovor]
Ima puno ponavljanja, zar ne?
Kako poslati njemačku zastavu, mislim to kao sliku na zaslonu
natrag u svoj Scratch dana.
Možda podsjetiti da je pojedinačni pikseli ili točkice koje tvore sliku.
>> Tu je cijeli niz crnih točaka i drugi cijeli red crne točkice.
Tu je hrpa redova crnih točaka koje smo mogli vidjeti, ako smo stvarno zumirani,
puno volim kad mi zumirani na Rob lice u Photoshopu.
Čim smo dobili sve dublje i dublje i dublje u slici,
ste započeli viđenje pixelation, sve kvadrata koje su tvorile njegove oči u tom slučaju.
Sve posao ovdje. Ako smo povećali vrlo malo, ti bi vidjeti pojedine točke.
Pa, to je vrsta otpada bita.
Ako trećina zastave je crna, a trećina zastave je žuta i tako dalje,
zašto ne možemo nekako stisnuti ovu zastavu?
A čak i francuski zastava mogao biti stisnut, iako uzorak je malo drugačiji.
Ispada format GIF datoteka je format kompresije bez gubitaka,
što znači da možete uzeti sliku kao njemačke zastave ovdje,
možete baciti puno svojih bita, bez žrtvovanja kvalitete.
To je u suprotnosti s nešto poput JPEG,
s kojima je većina od nas su vjerojatno više upoznati.
Facebook i Flickr fotografija fotografije i slično
su gotovo uvijek spremaju kao JPEG kada oni učitao,
ali JPEG je gubljenje - gubljenje - format pri čemu se ne bacaju bita
ali također bacaju kvalitetu.
I tako, ako ste komprimirati fotografija sa Photoshop ili ih prenijeti na Facebooku
ili ih odvesti na uistinu jebani telefon,
znaš da slika počinje da se vrlo zamrljano i pixelated,
a to je zato što je se stisnut uz računalo ili telefon
doslovno bacanje informacije daleko.
No, GIF je nevjerojatna u da se može koristiti manje bitova nego što možda po defaultu
bez gubitka informacija.
>> I to u suštini ne kako slijedi.
Umjesto dućan u datoteku kao BMP bi RGB triple za crna, crna, crna, crna,
crna, crna, crna, crna, crna, crna, crna, crna i tako dalje,
a, GIF formatu će reći, "crna"
a zatim, "Ponovite ovaj sto puta", ili nešto slično.
"Crno, ponavljam to sto puta, crne, ponavljam to sto puta ..."
"Žuta, ponavljam to sto puta."
I tako se pamti, u suštini, lijevom piksela
i onda kodira nekako pojam ponavlja da piksel opet i opet.
Dakle, GIF onda mogu komprimirati bez gubitka informacija.
Ali, ako ste morali nagađati, ako je algoritam koji Animacije korištenje,
koji od tih zastava, iako oni izgledaju identične veličine,
će biti manja kada spremiti na disk kao GIF? >> [Student] Njemačka.
Njemačka će biti manja? Zašto?
[Student] Zato što ga ponavljaju mnogo, mnogo puta vodoravno
i onda ponoviti drugi put. >> Točno.
Budući da su ljudi koji su izmislili GIF samo vrsta samovoljno odlučio
da je ponavljanje će utjecati horizontalno, a ne bočno.
Tu je puno više ponavljanje bočno ovdje u njemačkom zastavom nego u francuskom zastavom.
Dakle, ako smo zapravo otvoriti mapu na moj hard disk koji ima ove GIF,
zapravo možete vidjeti da je njemački zastava ovdje je dva kilobajta i francuski jedan je 4 kilobajta.
To se događa da se slučajno da je netko dvaput drugi,
ali to je u stvari slučaj da francuski zastava je mnogo veći.
>> Iako govorimo ovdje o slikama, iste ideje mogu primijeniti na
ne stvari kao što su zastave, ali slike koje su malo složenije.
Ako uzmete sliku jabuke, sigurno postoji mnogo dupliciranja postoji,
pa smo nekako mogao sjetiti da je zadana pozadina je plava
a ne, kao desna ruka slika sugerira,
imati na umu boju svakog piksela u slici.
Tako možemo baciti komadiće daleko tamo bez gubitka podataka.
Apple još uvijek izgleda isto.
U ovom primjeru ovdje, možda ćete vidjeti što se događa u filmu.
Ovo predstavlja old-school filmske role čemu u gornjem Image
imate RV vožnje prošlosti kuće i stabla.
I kao da je kombi vozi prošlosti s lijeva na desno, što očito ne mijenja?
Kuća se ne ide nigdje, a stablo ne ide nigdje.
Jedina stvar koja se kreće je kombi u ovom slučaju.
Dakle, kao što Pozadina Nepromijenjeno sugerira, što možete učiniti u filmovima
je sličan samo baciti informacije koje se ne mijenja između okvira.
To je opće poznato kao međuslikovno kompresije
pri čemu ako je to okvir izgleda gotovo identičan ovom jednom,
nemojmo zamarati pohranjivanja na disku bilo identične informacije
na ovim intermedijarnih okvira, ajmo samo koristiti ključne okvire jednom u neko vrijeme
koji zapravo pohraniti te podatke redundantly kao malo razum provjeriti.
>> Nasuprot tome, drugi pristup kompresijskog video je u ovom drugom i donji primjer ovdje,
gdje umjesto namirnicama 30 sličica, zašto ne samo pohraniti 15 sličica u drugi umjesto toga?
Umjesto filmu vrste teče lijepo, savršeno,
to bi moglo izgledati kao da je mucanje malo, malo stara škola,
ali neto učinak će biti da koriste mnogo manje bitova nego inače bi moglo biti potrebno.
Pa gdje to onda nas ostavio?
To je bilo malo na stranu na kojoj još možete ići s kompresijom.
Za više o tome, uzeti klasa poput CS175 ovdje.
Evo još jedan primjer u videu.
Ako pčela je jedina stvar kreće,
zaista možete baciti informacije u tim okvirima srednjeg
jer cvijet i nebo i lišće ne mijenjaju.
Ali ajmo sada razmotriti posljednju stvar.
U sljedećih pet minuta smo ostaviti C iza zauvijek u predavanju? Da. Ne u psets, iako.
Posljednja priča o C, a onda ćemo doći do vrlo seksi stvari
uključujući HTML i Web i woo-hoo. U redu.
Ovdje ćemo ići. To je motivacija.
Ispada sve ovo vrijeme kada smo pisanje programa smo pokrenuti zveka.
I zveka, mi smo je rekao, od prvog tjedna prilično mnogo, traje izvornog koda
i pretvara ga u objektnom kodu.
To traje C i pretvara ga u 0s i 1s.
Ja sam vrsta je laganje za vas za nekoliko tjedana, jer to nije baš tako jednostavno.
>> Tu je puno više događa ispod haube kada pokrenete program kao jeka.
U stvari, proces sastavljanja programa zaista može sažeti,
kao što ste mogli sjetiti od Rob je video na prevodiocima,
u ove četiri koraka: predobrada, sama izradu, montažu i povezivanje.
Ali mi smo u razredu, a većina ljudi u svijetu obično sumirati sve od tih koraka
samo kao "sastavljanje".
No, ako ćemo početi s izvornog koda kao što je ovaj, prisjetiti to je možda najjednostavnije C program
smo dosad napisano, podsjetiti da kada sastavio to završi izgleda kao ovo.
No, tu je zapravo međukorak, i ti koraci su kako slijedi.
Prvo je to stvar na samom vrhu ove i većina naših programa,
# Include
Što # ne uključuje učiniti za nas?
To je prilično puno primjeraka i paste sadržaja stdio.h u moju datoteku, tako da zašto?
Zašto mi je stalo sadržaja stdio.h? Što je u tu interesa?
Printf je izjava, njegov prototip, tako da prevodilac onda zna na što mislim
kad sam spomenuo tu funkciju printf.
Dakle korak 1 u sastavljanju je pre-obrada, pri čemu program kao jeka
ili neki pomagač program koji jeka dolazi s čita svoj kod vrha do dna,
lijeva na desno, i bilo je to vrijeme vidi # simbol slijedi ključnu riječ kao što uključuju,
obavlja tu operaciju, kopiranje i lijepljenje u ovom slučaju stdio.h u datoteci.
To je korak 1.
Tada ćete imati puno veću C datoteku zbog ogromnog copy, paste posao koji je upravo dogodilo.
>> Korak 2 sada sastavljanja.
No, ispostavilo se sastavljanje traje izvorni kod koji izgleda ovako
i pretvara ga u nešto što izgleda ovako,
koji je za one koji poznaju se zove? >> [Student] Skupština. >> Skupština jezik.
To je zapravo nešto ako se uzme CS61 ćete zaroniti u više detalja.
Ovo je samo oko kao bliski kao što možete dobiti za pisanje 0s i 1s sebe
ali pisanje stvari na takav način da se još uvijek čini barem malo smisla.
To su stroj za uporabu, a ako mi se pomaknite prema dolje do glavne funkcije ovdje,
primijetiti da je to guranje upute, premjestiti pouku, oduzimanje pouku,
nazvati pouku, i tako dalje.
Kada čujete da vaše računalo ima Intel Inside,
imate Intel procesora u vašem Mac ili PC, što to znači?
CPU dolazi izgrađena od strane tvrtke kao što su Intel razumijevanje određene upute.
Nemaju pojma što funkcionira kao swapa su ili glavni su same po sebi,
ali oni ne znaju što je vrlo low-level upute kao zbrajanje, oduzimanje, gurati
premjestiti, nazovite, i tako dalje su.
Dakle, kada ste kompajlirati C koda u asemblerskom jeziku,
Vaš vrlo user friendly izgleda koda se pretvara u nešto što izgleda ovako,
da doslovno pomiče bajtova ili 4 bajta okolo u takvim malim jedinicama u i iz CPU-a.
No, na kraju, kada je jeka je spreman iskoristiti ovu reprezentaciju programu
u 0s i 1s, a zatim korak zove montaže dogodi,
i to opet sve događa u tren oka kada se izvodi zveka.
Mi smo započeli ovdje, ona izlazi datoteku ovako, a onda ga pretvara u tim 0S i 1S.
A ako želite da se vrati u nekom trenutku i zapravo vidjeti u akciji,
ako odem u hello1.c--ovo je jedan od prvih programa smo gledali -
normalno bismo sastaviti ovo s zveka hello1.c i to će nam dati a.out.
Ako za razliku od vas, umjesto dati mu-S zastavu, ono što ćete dobiti je hello1.s
i zapravo ćete vidjeti jezik sklopa.
>> Radim to za vrlo kratkog programa, ali ako idete natrag za Scramble
ili Oporavak ili bilo koji program ste napisali i samo iz znatiželje
želim vidjeti što je to zapravo izgleda, što se zapravo se plasirao u CPU,
možete koristiti da-S zastavu s jeka.
Ali onda na kraju, tu je još jedan izazov.
Ovdje su 0s i 1s da predstavljaju svoju primjenu Pozdrav, svijetu.
Ali sam koristio tuđe funkciju u mom programu.
Dakle, iako je proces bio sam uzeti hello.c,
to dobiva skupljaju u sabirni kodu, a onda to dobiva sklopljeni u 0S i 1s,
samo 0s i 1s da se reproduciraju u ovom trenutku u vremenu
su one koje nastaju iz mog koda.
No, osoba koja je napisala printf, oni sastaviti svoj kod prije 20 godina
i to je sada instaliran negdje na aparatu,
pa smo nekako morati spojiti njegov ili njezin 0S i 1S s moje 0s i 1s,
i to nas dovodi do 4. i završni korak u sastavljanju, poznat kao povezivanja.
Dakle, na lijevoj strani imamo isti sliku kao i prije:
hello.c postaje montaža kod postaje 0s i 1s.
Ali sjećam da sam koristio standardni I / O biblioteka u mom kodu,
a to znači da negdje na računalu postoji datoteka zove stdio.c
ili barem sastavio verzija istog, jer je netko prije nekoliko godina
sastavio stdio.c u tekućoj koda i onda cijela hrpa 0s i 1s.
To je ono što je poznato kao statički ili dinamički knjižnici.
To je neka datoteka sjedi negdje u aparatu.
>> Ali na kraju, moram uzeti moj 0s i 1s i ta osoba je 0s i 1s
i nekako ih povezati zajedno, doslovno kombinirati 0s i 1s
u jednu datoteku pod nazivom a.out ili hello1 ili što god sam nazvao moj program
tako da je krajnji rezultat ima sve 1s i 0s koje treba tvore moj program.
Dakle, sve ovo vrijeme to semestru kada ste koristili zveka
i još nedavno pokrenut napraviti kako bi se pokrenuti zveka,
sve od tih koraka su događa svojevrsno od trenutačno, ali vrlo svjesno.
I tako, ako ste i dalje na u informatici, naime CS61,
ovo je sloj koji ćete nastaviti guliti natrag off postoji
govorimo o učinkovitosti, sigurnosti implikacije, i kao što je ovih nižih razina detalja.
Ali s tim, mi smo o tome da napusti C iza.
Idemo naprijed i uzeti našu 5-minutni predah sada,
a kad se vratimo: Internet.
U redu. Mi smo natrag.
Sada ćemo početi naš pogled ne samo na HTML, jer, kao što ćemo vidjeti,
HTML sama po sebi je zapravo prilično jednostavna
ali stvarno na web programiranje općenito, umrežavanje više općenito,
i kako sve ove tehnologije dolaze zajedno
kako bi se omogućilo nam je stvoriti mnogo sofisticiranije programe na vrhu Interneta
nego dosad smo bili u mogućnosti da u ovim crnim i bijelim prozorima.
Doista, u ovom trenutku u semestru, iako ćemo potrošiti relativno manje vremena
na PHP, HTML, CSS, JavaScript, SQL i više,
većina studenata učiniti kraj gore rade završne projekte koji su web-based
jer kao što ćete vidjeti, pozadina sada imate u C
je vrlo primjenjiv na ovim višoj razini jezika.
>> I kao što počnete razmišljati o svom završnom projektu,
koji, baš kao i problema Set 0, gdje ste bili ohrabreni
učiniti najviše ništa od interesa za vas u nule,
Konačni projekt je vaša prilika da se vaš novootkriveno znanje i pamet s C
ili PHP ili Javascript ili kao iz za spin
i stvoriti svoju vrlo vlastiti komad softvera za svijet da vidi.
I da vas sjemena s idejama, znate da možete krenuti ovdje, projects.cs50.net.
Svake godine, možemo tražiti ideje iz fakulteta i osoblja i studentskih grupa na kampusu
samo da pošaljete svoje ideje za zanimljivih stvari koje bi se mogle riješiti pomoću računala,
pomoću web stranice, koristeći softver.
Dakle, ako ste se bore da se s idejom svom,
svim sredstvima kretanje kroz ideja postoji od ove godine i posljednji.
To je savršeno u redu da se pozabave projekt koji je prije rješavati.
Vidjeli smo mnoge aplikacije za viđenje stanja rublja na kampusu,
mnoge aplikacije za navigaciju izbornika blagovaonici,
mnoge aplikacije za navigaciju katalog tečajeva i slično.
I doista, u budućem predavanja iu buduće seminare,
mi ćemo vam predstaviti neke javno dostupne API-ja, i komercijalno dostupna
kao i ovdje dobiti od CS50 na kampusu, tako da imate pristup podacima
i onda možete učiniti zanimljive stvari s njim.
Dakle, više na konačnih projekata u nekoliko dana, kada smo oslobodili specifikaciju,
ali za sada, znate da možete raditi solo ili s jednim ili dva prijatelja
na većini bilo koji projekt od interesa za vas.
Internet.
Možete ići naprijed i izvucite svoj laptop, idete na facebook.com po prvi put,
što nije zabilježen u posljednje vrijeme, i udarite Enter. Što se točno događa?
>> Kada pritisnete tipku Enter na vašem računalu, cijela hrpa koraka
započeti neku vrstu magično događa.
Dakle, ovdje na lijevoj strani, web server poput Facebooka je ovdje na desnoj strani,
i nekako ste koristeći ovaj jezik nazvan HTTP, Hypertext Transfer Protocol.
HTTP nije programski jezik. To je više od protokola.
To je skup konvencija koje web preglednici i web poslužitelji koriste kada intercommunicating.
A što to znači je kako slijedi.
Baš kao u stvarnom svijetu, mi imamo ove konvencije
gdje ako ispunjavaju neke čovjeka za prvi put, ako vam ne smeta me humoring ovdje,
Ja bi moglo doći do vas, reći: "Bok, moje ime je David." >> Bok, David. Moje ime je Sammy.
"Bok, David. Moje ime je Sammy."
Dakle, sada smo upravo bavi ovom vrstom glupog ljudskog protokola
gdje sam pokrenuo protokol, Sammy je odgovorila,
smo potreseni ruke, a transakcija je završena.
HTTP je vrlo slična u duhu.
Kada vaš web preglednik zahtjeve www.facebook.com,
što je vaš preglednik stvarno radi proširuje svoju ruku, da se tako izrazim,
na server i to je to slanjem poruke.
I to je poruka obično nešto poput dobiti - što želiš dobiti? -
me početna stranica, koji je obično označena jednom crtom na kraju URL-a.
I samo tako da znate što jezik govorim, ja sam preglednik ću vam reći
da sam govorio HTTP verziju 1.1,
I također za dobru mjeru, ja ću vam reći da domaćin da želim početnu stranicu
je facebook.com.
Tipično, web preglednik, bez znanja tebe, ljudski,
šalje ovu poruku preko Interneta kada jednostavno upišite www.facebook.com,
>> Unesite, u svoj preglednik.
A što se Facebook odgovoriti?
To odgovara s nekim sličnim izgleda zagonetni detaljima, ali i mnogo više.
Pusti me naprijed Facebook početnoj stranici ovdje.
To je zaslon koji većina nas vjerojatno nikada vidjeti ako ostanu prijavljeni u sve vrijeme,
ali to je doista njihova početna stranica.
Ako smo to učinili u Chrome, primijetiti da možete podići ove male kontekst izbornika.
Korištenje Chrome, da li na Mac OS, Windows, Linux, ili slično,
ako Kontrola klik ili lijevi klik, obično možete podići izbornik koji izgleda ovako,
gdje je nekoliko opcija čekaju, od kojih je jedan pogled Stranica Izvor.
Također možete obično doći do tih stvari tako da odete na izbornik Prikaz i poking okolo.
Na primjer, ovdje pod View, Developer je ista stvar.
Ja ću ići naprijed i pogledati Pogledaj izvor stranice.
Što ćete vidjeti je HTML da je Marko je napisao da predstavlja facebook.com.
To je potpuna zbrka ovdje, ali vidjet ćemo kako se to čini malo više smisla prije dugo.
Ali postoje neki obrasci ovdje. Dopustite mi dođite do stvari kao što je ovaj.
To je teško za ljudska čitati, ali primijetiti da je ovaj uzorak ukošene zagradama
s ključnim riječima poput opciju, ključne riječi kao što su vrijednosti, nekim kotiraju gudače.
Ovo je mjesto gdje, kada ste se prijavili za vrlo prvi put, navedeno ono godina rođenja je.
To padajući izbornik rođenja godina nekako je kodirana ovdje
u tom jeziku zove HTML, HyperText Markup Language.
Drugim riječima, kada se vaš preglednik zatraži web-stranicu,
to govori ovu Konvenciju nazvan HTTP.
No, ono što ne facebook.com odgovoriti na taj zahtjev s?
>> To odgovara s nekim od tih tajnovitih poruka, kao što ćemo vidjeti u ovom trenutku.
No, većina njegovih odgovora je u obliku HTML, HyperText Markup Language.
To je stvarni jezik u kojem web-stranica napisana.
A što web preglednik stvarno onda ne je, po primitku nešto što izgleda ovako,
čita se od vrha do dna, s lijeva na desno, i bilo je to vrijeme vidi jedan od tih ukošene zagradama
slijede ključne riječi kao što su opcije, prikazuje da je markup jezik na odgovarajući način.
U ovom slučaju, to će prikazati padajući izbornik godina.
Ali opet, to je potpuna zbrka pogledati.
To nije zato što Facebook programeri manifestiraju 0 za 5 za stil, za primjer.
To je zato što većina koda da pisati je, u stvari, napisao je lijepo,
dobro komentirao, lijepo razvedena, i slično,
Ali, naravno, strojeva, računala, preglednici stvarno ne daju osuditi
da li se vaš broj je dobro stilu.
A u stvari, to je potpuno razoran udariti tipku TAB sve one puta
i staviti komentare cijelom kodu i odaberite stvarno opisne varijable imena
jer ako preglednik ne zanima, sve što radite na kraju dana se troši bajtova.
>> Tako ispada ono što većina web stranice učiniti je, iako izvorni kod za facebook.com,
za cs50.net i svih tih drugih web stranica na internetu
su obično dobro napisan i dobro komentirao i lijepo razvedena i slično,
obično prije website je stavio na internet, kada je kod minified,
pri čemu HTML i CSS - nešto drugo uskoro ćemo vidjeti -
JavaScript kôd uskoro ćemo vidjeti je stisnut,
pri čemu duge varijabla imena postaju X i Y i Z,
i sve to whitespace čini da sve izgleda tako čitati sve bacio,
jer ako mislite o tome na taj način, Facebook dobiva milijarde stranica hitova dan -
nešto ludo kao da je - pa što ako programer samo da se analni
hit razmaknicu jednom dodatno vrijeme samo da alineji neke linije koda ikada toliko više?
Što je implikacija ako Facebook čuva da razmak
u svim bajtova oni poslati natrag s ljudima na internetu?
Udaranje razmaknicu jednom vam daje dodatni byte u datoteci.
A ako milijardu ljudi onda nastaviti preuzimanje početnu stranicu taj dan,
koliko više podataka ste prenosi preko interneta?
Gigabajt bez dobrog razloga.
I gotovo, za puno web stranica to nije takav problem skalabilan,
ali za Facebook, za Google, za neke od najpopularnijih web stranice
tu je velik poticaj financijski kako bi vaš kod izgledati nered
tako da koristite što manje bajtova moguće uz zatim ga sažimanje
koristite nešto poput zip, gzip algoritam se zove,
da preglednik ne za vas automatski. No, to je strašno.
Nikad nećemo saznati ništa o tuđim web stranice i kako dizajnirati web stranice
ako moramo gledati na to ovako.
>> Dakle, na sreću, kao što su preglednici Chrome i IE i Firefox ovih dana
obično dolaze s ugrađenim u razvojnog alata.
U stvari, ako odem ovdje dolje da pregleda element ili ako idem na View, Developer,
i ići na Developer Tools eksplicitno,
ovaj prozor na dnu moj zaslon sada iskoči.
To je malo zastrašujuće na prvi jer ima puno nepoznatih karticama ovdje,
ali ako ja kliknite na elemenata skroz na dnu lijevo,
Chrome je očito prilično pametan. To zna kako protumačiti sve ove koda.
I tako ono što čini Chrome je to čisti sve Facebook HTML.
Iako ne postoji razmak, tamo nije bilo udubljenje,
Sada primijetite da mogu početi kretati ovu web stranicu sve više hijerarhijski.
Ispada da je svaka web stranica napisan u jeziku zove HTML5 bi trebao početi s tim,
ovo DOCTYPE deklaracije, da se tako izrazim: <! DOCTYPEhtml>
To je vrsta svjetla i siva postoji, ali to je vrlo prva linija koda u ovoj datoteci,
i to samo govori preglednik, "Hej, ovdje dolazi neki HTML5. Ovdje dolazi web stranicu."
Prvi otvoreni nosač iznad toga se događa da se ova stvar, otvorena zagrada HTML oznaka,
i onda ako sam zaroniti u dublje - ove strelice su potpuno besmisleno;
oni su samo za prezentacije miloga, oni zapravo nisu u spisu -
primijetiti da unutrašnjost Facebook HTML tag, bilo da se počne s otvorenim konzole
, a zatim je riječ zove oznaku.
Dakle, unutar HTML oznake je očito glava tag i tijelo oznaka.
Unutar glave tag sada je cijeli nered za Facebook
jer oni imaju puno metapodataka i drugih stvari za marketing i oglašavanje.
>> Ali ako mi pomicanje prema dolje, dolje, dolje, dolje, ajmo vidjeti gdje je. Ovdje je.
Ovo je jedna barem donekle upoznati.
Naslov Facebook početnoj stranici, ako ste ikada gledati u kartici u naslovnoj traci,
je Dobrodošli na Facebook - Log In, Sign Up ili Saznajte više.
To je ono što će vidjeti u Chrome naslovnoj traci,
a to je kako se to predstavlja u kodu.
Ako zanemarimo sve drugo u glavi, većina utrobu web stranici su u tijelu,
i ispada da Facebook kod će izgledati složenije
od većine stvari ćemo pisati u početku samo zato što je bio izgrađen tijekom godina,
ali postoji cijeli niz skripte oznaka, kod JavaScripta,
koji čini web stranice vrlo interaktivan:
vidim ažuriranja statusa trenutačno pomoću jezika poput JavaScripta.
Postoji nešto što se zove div, koji je podjela stranici.
No, prije nego što smo dobili na tom detalju, pokušajmo smanjivanje
i pogled na jednostavniji verziji Facebook 1,0, da se tako izrazim.
Ovdje je halo, svijet web stranicama.
To je taj DOCTYPE deklaraciju na samom vrhu
koji je malo drugačiji od svega.
Ništa drugo mi pisati na web stranici će se započeti s <! osim toj liniji postoji
a osim za nešto što se zove komentara u HTML.
No, za najveći dio, sve na web-stranici je otvorena zagrada, ključna riječ, u blizini nosača.
>> U tom slučaju možete vidjeti najjednostavniji web stranicama moguće.
HTML oznaka sadrži glavu oznaku i sadrži tjelesnu oznaku,
ali primijetiti da je taj pojam pokretanja i zaustavljanja oznake.
Ovo je početna oznaka za HTML, to je blizu tag ili završna oznaka.
Primijetit ćete da su oni vrsta suprotnosti u smislu da se u blizini oznake ili završna oznaka
je to naprijed slash unutar sebe.
U međuvremenu, tu je otvorena glava oznaka i ovdje u blizini glave tag ovdje.
>> Tu je otvorena naslov i bliski naslov tag ovdje.
Činjenica da sam stavio naslov na jednoj liniji, čisto proizvoljne.
To je samo izgledao kao da će stati lijepo na jednoj liniji, tako da ja ne zamaram udaranje Enter nekoliko puta.
U međuvremenu, tijelo sam alineje samo da bude sve tako jasno.
Primijetit ćete da je HTML prilično glupi jezik.
U stvari, natrag u dan prije nego što su WYSIWYG editori
a Microsoft Word, gdje možete reći: "Neka ovo podebljano, kurziv bi ovaj"
što bi zapravo upišite malo naredbe u esejima 20 + godina
pri čemu bi rekli, "Početak izrade ovaj tekst podebljan. Prestanite raditi ovaj tekst podebljan."
"Početak izrade ovog teksta kurziv. Prestanite raditi ovaj tekst kurziv."
>> To je ono što je HTML ili bilo markup jezik.
Ovaj prvi tag kaže, "Hej, preglednik. Evo neke HTML-a."
Sljedeći tag kaže, "Hej, preglednik. Ovdje dolazi glavu, zaglavlja moje web stranice."
"Hej, preglednik. Ovdje dolazi titulu."
I onda ovamo, "Hej, preglednik. To je ona za titulu."
Dakle, ovo je kako preglednika zna da više neće prikazivati ​​više znakova nego halo, svijet
u naslovnoj traci.
U međuvremenu, ovaj kaže: "To je to za glavu."
Ovaj kaže, "Ovdje dolazi tijelo Ovdje je stvarno tijelo." - Doslovno, riječi halo, svijet.
A ovo ovdje piše: "To je to za tijelo. To je to za HTML."
Dakle, preglednici su prilično glupi.
Oni samo čitati ove stvari vrha do dna, s lijeva na desno, i učiniti točno ono što su rekli učiniti.
Ajmo zapravo napraviti malo primjer ovdje.
Dopustite mi da se otvaraju najjednostavniji programa na mom Macu ovdje, naime TextEdit.
Na Windows možete koristiti notepad.exe.
No, to je sve što vam je potrebno za početak izrade web stranice.
Ja ću ići naprijed i samo kopirajte i zalijepite ovaj kod na ovu datoteku.
Ja ću ići naprijed i spremite ga na moj radna površina,
i ja ću spasiti to kao hello.html,
i sada se datoteka zove hello.html.
Ovdje je na mom desktopu.
Dopustite mi sada ići u pregledniku i povucite datoteku u pregledniku.
I voila, ovdje je moj vrlo prva web-stranica.
Primijetit ćete da naslov kartici je halo, svijet po naslovu oznaku,
i obavijest da je halo, svijet je tijelo moje web stranice,
i Woo-hoo, ja sam na internetu.
>> Nisam stvarno, pravo, jer je ova datoteka nije na internetu.
To se događa da se na mom lokalnom tvrdom disku na tom putu.
No, ideja je ista. Sve što sada trebate je web poslužitelj na koji to upload.
Ali prvo neka je zapravo uvesti malo više složenosti i malo više stilizacije.
To je jednostavan, ako dosadna, web-stranica.
Ispada postoje druge vrste oznaka možemo koristiti.
Na primjer, ovdje u žute sam upoznao dvije nove oznake.
Nećemo igrati puno s ovim danas, ali primijetiti da veza oznaka
nekako izgleda drugačije od svega ostalog.
Veza tag uzima ono što se zove atributi,
i atribut je nešto što mijenja ponašanje oznaku.
U ovom slučaju to nije najbolji izbor imena, veze, jer to je vrsta besmisleno,
ali ovaj link tag kaže, u suštini, uključuje datoteku pod nazivom styles.css unutar moje web stranice.
Možete misliti o tome kao analogan Cs # include direktivu.
Styles.css se odnosi na drugom jeziku uopce da nećemo igrati sa danas,
ali to je za estetiku: veličina slova, boje, padding, uvlake, margine,
i sve takve estetike detalje.
U međuvremenu, skripta tag je funkcionalno sličan,
ali umjesto uključuju CSS, taj jezik, to uključuje i neki drugi jezik, JavaScript.
Dakle, drugim riječima, s tih dviju oznaka na kraju sam će biti u stanju napisati svoju vlastitu web stranicu
ali i povući u kodu da ja ili netko drugi je napisao
tako da možemo stajati na tuđim ramenima, možemo vježbati dobar dizajn,
faktoring iz zajedničkog koda.
Ako imam 10 različite web stranice, to znači da su neki od mojih estetike
može biti factored van, baš kao # include, u zasebnoj datoteci.
Dakle, mi smo uzimajući tamo.
Ali ajmo zapravo prvi učiniti nešto više zanimljiv s tom datotekom.
>> Opet, to je samo TextEdit. Nisam tehnički na internetu, no mi ćemo doći.
Htio bih napraviti halo, svijet malo hrabriji nego što jest.
Pa halo, ajmo reći proizvoljno za bold.
Opet, priča je ista: Pozdrav, zarez, početi izradu ovo podebljano,
onda svijet dobiva tiskane podebljano, a to znači zaustaviti tiskanje ovo podebljano.
Pusti me naprijed i spasiti svoju datoteku, vratiti Chrome, ja ću povećali samo tako možemo vidjeti da je bolje,
i ponovno, i vidjet ćete da je svijet sada u bold.
Web je sve o hiperveza, pa idemo naprijed i to:
moj omiljeni website je, recimo, youtube.com.
Spremi, ponovno. Ok. Postoji nekoliko problema sada, osim u grozota na web stranici.
1, prilično sam siguran da sam pogodio Unesite ovdje. I ja sam učinio.
Ja ne samo pritisnite Enter, također sam razvedena, vježbajući ono što smo propovijeda o stilu,
ali moje je tik do svijeta.
Pa zašto je to? Preglednici samo učiniti ono što vam reći da učine.
Nisam rekao preglednik, "Break linije ovdje. Umetnite stavak slomiti ovdje."
Dakle, preglednik, to ne smeta ako sam pogodio Return 30 puta,
to još uvijek ide staviti moje pravo pored svijetu.
Ono što sam stvarno morati učiniti ovdje reći nešto poput , umetnite prijelom retka.
>> A zapravo, prijelom retka je vrsta čudan stvar
jer stvarno ne mogu početi kretati na drugoj liniji, a zatim učinite nešto,
i onda prestati kreće u novu liniju. To je vrsta atomske operacije.
Ili to učiniti ili ne. Vi pritisnite Enter ili ne.
Dakle, br je malo drugačiji krpa, pa moram sortirati oba otvorene i zatvoriti
sve odjednom.
Sintaksa za to je to.
Tehnički gledano, ti bi mogao učiniti nešto ovako u nekim verzijama HTML,
ali to je samo glupo, jer nema razloga za pokretanje i zaustavljanje nešto
ako umjesto toga može učiniti sve odjednom.
Shvatite da HTML5 strogo ne zahtijevaju ovu crtu,
pa ćete vidjeti udžbenika i online izvore koji ga nemaju,
ali za dobru mjeru ajmo vježbati simetriju da smo vidjeli dosad.
To znači da oznaka je i otvorena i zatvorena.
Pa sada neka mi spasiti moj datoteku, vratiti ovdje.
Ok, tako da je počela izgledati bolje, osim Weba znam je vrsta kliknuti,
i još youtube ovdje ne čini da će dovesti do bilo čega.
To je zato što, iako to izgleda kao link, web preglednik ne znaju da po sebi,
pa moram reći preglednik da je to poveznica.
>> Način da to učinite je da koristite sidro oznaku:
<A href za hiper referencu, koja je stara škola način govoreći vezu,
= "Http://www.youtube.com">
i neka mi premjestiti ovo na novu liniju samo tako da je malo više čitati,
a ja ću smanjiti veličinu fonta.
Jesam li učinio još? Ne postoji će biti ova dihotomija.
Ova oznaka, oznaka sidra, doista ne uzeti atribut,
koja mijenja svoje ponašanje, a vrijednost tog atributa je očito YouTube URL.
Ali primijetite dihotomiju je da samo zato što je URL idete,
to ne znači da mora biti riječ koju ste ističući i čineći vezu.
Umjesto toga, to može biti nešto ovako.
Dakle, moram reći da se zaustavi izradu ova riječ hiperveza pomoću zatvoriti sidro oznaku.
Obavijest Ja ne radim to.
1, to bi samo biti otpad svačijeg vremena i to nije potrebno.
>> Za zatvaranje oznaku, što je samo spomenuti ime oznaku opet.
Vi ne spominjem bilo koji od atributa.
Tako ćemo spasiti da, vratiti. Ok, voila, sad je plava i hipervezom.
Ako sam ga kliknite, ja zapravo ne ići na YouTube.
Dakle, iako je moja web-stranica nije na internetu, to je najmanje HTML,
i ako mi dopustite Internet nadoknaditi, mi zapravo bi završiti ovdje na youtube.com.
I mogu se vratiti i evo moja web-stranica. Ali primijetiti.
Ako ste ikada stečen spam ili krađi identiteta,
Sada imate mogućnost nakon samo pet minuta da učine isto.
Možemo ići tamo i napraviti nešto poput www.badguy.com
ili što god nedorečena web stranice, a zatim možete reći potvrditi svoj PayPal račun.
[Smijeh] I sada će to ići na badguy.com, što ja ne idem kliknuti na
jer ja nemam pojma gdje da vodi. [Smijeh]
>> No, sada imamo mogućnost da se zapravo završiti tamo.
Tako smo stvarno tek počinje ispočetka površine.
Nećemo programiranje po sebi; pišemo markup jezik.
No, čim smo zaokružiti naše vokabulara u HTML,
ćemo predstaviti PHP, stvarna programskom jeziku
koji će nam omogućiti da generirati HTML automatski generirati CSS automatski,
tako da možemo početi u srijedu provesti, recimo,
naša vlastita tražilice i više.
Ali više o tome u par dana. Vidjet ćemo vam onda.
>> [CS50.TV]