[Powered by Google Translate] [Java 7] [David J. Malan - Universiteti i Harvardit] [Kjo është CS50. - CS50.TV] Dakord. Mirëpritur mbrapa. Kjo është CS50, dhe kjo është fillimi i javës 7. Një çift i njoftimeve pak: Pset5 është tani në progres, ose së shpejti do të jetë, dhe më lejoni të them, krejt sinqerisht, kjo nuk priren të jenë në mesin e më sfiduese e përcakton Kursi është problemi, kështu që më lejoni të përmend këtë tani kështu që këtë javë më shumë se kurrë ju nuk prisni deri, të themi, të mërkurën natën apo natën e enjte të zhyten in Kjo është padyshim një pset interesante. Ne mendojmë se kjo është argëtim. Nëse jeni të vërtetë të merrni atë plotësisht e saktë dhe pastaj mund të sfidojnë Bordin ashtuquajturin Big, ju do të keni një mundësi që të shkojë lajthis me disa prej stafit të kursit të dhe disa nga shokët e klasës tuaj. Çfarë Bordi i madh është është një herë ju keni spell-checker punës tuaj, ju do të jetë në gjendje për të shkuar në cs50.net pas drejtimin e një komandë, thjesht të zgjedhë në, dhe atëherë shuma e kohës dhe sasia e RAM dhe më shumë që keni përdorur në zbatimin e juaj do të ekspozohen këtu në faqen e kursit në shtëpi. Ju do të vëreni se një bandë e tërë e këtyre folks këtu janë të listuara si staf pasi gjatë fundjavës, stafi mendoi se do të jetë kënaqësi për të përpiqen të mposht njëri-tjetrin. Pra, të kuptojnë se qëllimi këtu nuk është të mposht stafin. Edhe unë jam këtu vetëm në numrin 13. Thjesht të zgjedhë në, por kjo është një mundësi për të parë se sa RAM pak dhe sa pak sekonda CPU ju mund të përdorni vis-a-vis disa nga shokët e klasës tuaj. Dhe unë do të pranoj se Michael Kevin Schmid, aktualisht në 1 pozicion numër si një prej TFS, kjo është një zbatimi që ne nuk e quajmë jetë e mundur duke qenë se ai është përdorur pothuajse 0 RAM dhe pothuajse 0 sekonda për ngarkimin. Pra, ne do të kujdeset për Kevin offline. [Qeshura] Ka aftësi të caktuara që Kevin është vënë në provë këtu. Një nga gjërat që ne menduam se do të bëjë shumë është tani CS50x është një javë në vazhdim, dhe ju djema jeni sa më shumë pjesë e këtij eksperimenti si ato janë studentë. Ne kemi kërkuar ato si pjesë e pset0 tyre, e cila ishte në mënyrë të ngjashme për të paraqitur një projekt zeroja në interes të tyre - një lojë, një pjesë interaktive të artit, një animacion, ose si - a 1 - video për 2-minuta, në qoftë se ata do të donte, duke thënë përshëndetje për botën dhe që ata në fakt janë. Unë mendova se do të ndajnë me ju vetëm një e dy videot që janë paraqitur deri më tani sepse për ne, në stafin paktën, ajo me të vërtetë ka qenë emocionuese dhe frymëzues për të parë këto folks nga e gjithë bota - vende në të gjithë botën - akordim në të, të të gjitha gjërave, për një kurs të shkencave kompjuterike në internet, nëse kjo është për shkak se ata duan të vazhdojnë studimet e tyre, ata duan të marrin karrierën e tyre në një drejtim të ri, ata duan për të mbushur boshllëqet në njohuritë e tyre, kështu që disa nga të njëjtat arsye që ju djema ndoshta kanë qenë këtu. Kështu që unë ju jap një student të tillë këtu. Ju mund të ngrejë volumin e vetëm pak. Këtu është një nga parashtrimet 1-minutëshe studentit tonë. Përshëndetje, bota. Unë jam një student i inxhinierisë industriale këtu në Malaga, Spanjë. Unë jam i ngacmuar në lidhje me këtë kurs online, sepse unë dua shkenca kompjuterike, unë me të vërtetë të bëjë, dhe unë me të vërtetë e vlerësojmë që kam marrë për të shqyrtuar atë. Dhe fakti që unë mund të mësojnë të njëjta të gjithë ju djema të bëjë por në vend për të qenë në Harvard unë jam në Malaga, sa i tmerrshëm është kjo? E pra, unë jam Fernando, dhe kjo është CS50. Shih ju djema. [Qeshur] Një tjetër klip ne veçanti pëlqen, ju do të gjeni se ky zotëri anglisht nuk është aq e fortë. Ajo duket si kjo makinë kishte përkthyer, kështu që përkthimet vetë janë pak papërsosur, por ky ishte një nga të preferuarat tonë deri tani si. [♪ ♪] Përshëndetje, bota. [Duke folur në japonisht] [Unë duhet të përshëndes në japonisht anglisht, sepse është shumë e besueshme.] [Unë kam dorëzuar mesazhin për ju nga qyteti i Gifu, Japoni.] [Unë mund të jetë një student për herë të parë në 20 vjet, siç mund të shihet.] [Unë jam shumë mirënjohës për Universitetin e Harvardit i cili më dha këtë mundësi dhe EDX.] [Golf është një kitarë dhe gjëja ime e preferuar running.] [Qeshura] [♪ ♪] [Pse mendoni se unë kam qenë duke u përpjekur për të marrë pjesë në një cs50x.] [Universiteti i Harvardit, ajo është dëshirë im.] [Sidomos në qoftë se unë jam prania e largët jetuar në Japoni.] [Kam kërkuar të provoni menjëherë të vetëdijshëm për ekzistencën e tillë kur EDX.] [A nuk mendoni kështu që ju nuk lidhet me moshën e të mësuarit I.] [CS50 është malluar ime. Emri im është Kazu, dhe kjo është CS50.] [♪ ♪] [duartrokitje dhe brohoritje] Një e preferuar e jona ishte kjo paraqitja këtu nga dikush. [♪ ♪] [Malan] Google se në qoftë se ju jeni të panjohur me këtë meme. Dhe pastaj së fundi, një çift të tjerët që u bëra që ndoshta të fitojë çmimin adorable. [Studentët] Aww! >> [Malan] Ne do të duhet të dëgjojnë. Kjo është e shkurtër, kështu që të dëgjojnë nga afër. [Gjuha femra] Cili është emri yt? Louie >>. [Gjuha femra] Ç'është kjo? Giggles >> [] CS50. [Qeshura] [Malan] Ai ka dy merr, pse. Këtu ne do të shkojmë, e fundit. Emri im është Louie, dhe kjo është CS50. [Qeshur] Ky, pra, është CS50x. Faleminderit për të gjithë ata që ndër ju, ndërsa pas së bashku në shtëpi të cilët kanë qenë të marrin pjesë deri më tani. Sot, ne konkludojmë diskutimin tonë të strukturave të të dhënave, të paktën disa nga më themelore, dhe pastaj ne vazhdojmë bisedën tonë në lidhje me HTML dhe programimin e web. Në të vërtetë, ne kemi shpenzuar të kaluarën disa shtatë javë duke kërkuar në bazat e programimit - algoritme, të dhënat strukturat, dhe si - dhe C, si ju mund të keni përjetuar deri më tani, nuk është domosdoshmërisht më të arritshme e gjuhëve me të cilat për të zbatuar disa prej këtyre ideve. Dhe kështu duke filluar këtë javë dhe javën e ardhshme dhe pastaj poshtë, ne do të në fund të jetë në gjendje të tranzicionit nga C, i cili është i njohur përgjithësisht si një gjuhë mjaft të nivelit të ulët, për gjëra të nivelit të lartë, në mesin e tyre PHP, JavaScript, dhe si, të cilat ne do të shohim barazim mbi mësimet e njëjta që ne kemi mësuar gjatë disa javëve të fundit, por ju do të gjeni se shpallja e gjëra të tilla si vargjeve dhe tavolina hash dhe të kërkoni dhe zgjidhja bërë në mënyrë shumë më të lehtë për shkak se gjuhët vetë ne do të fillojë duke përdorur do të bëhen më të fuqishme. Por së pari, një kërkesë e pemëve. Kjo është shumë e zakonshme këto ditë të ketë nevojë për të compress informacion. Në çfarë konteksti do të doni të compress një lloj të informacionit dixhital? Po. >> [Student] Kur keni nevojë për të dërguar atë mbi Web. Po, kur ju dëshironi të dërgoni diçka mbi Web. Nëse ju doni të shkarkoni një skedar të madh, kjo është ideale nëse dikush në fund të tjera ka ngjeshur këtë dosje duke përdorur një format zip ose diçka të tillë kështu që ju jeni dërguar bit pak se sa ndryshe mund të transmetueshme. Pra, si ju compress informacion? Ajo të gjitha boils poshtë për të përdorur më pak se sa bit janë të kërkuara nga default. Por kjo është lloj i një gjë kurioz, sepse mendoj se përsëri në javë 0 dhe 1 kur kemi biseduar për ASCII dhe binar dhe kemi biseduar për ASCII në veçanti si duke përdorur 8 copa për të përfaqësuar shkronjat e alfabetit kështu që letra Një është përfaqësuara nga 65, me të vogla një është numri 97, dhe megjithatë ju përfaqësojnë 65 ose 97, ju jeni duke përdorur 7 ose 8 bit. Por kapur është se ka disa shkronja në alfabetin anglisht që nuk janë si popullore si të tjerët. Z nuk është e gjitha që popullor, Q nuk është e gjitha që popullor, por A dhe E janë super popullore. Dhe ende për të gjitha këto letra, by default bota përdor numrin e njëjtë të bit, vetëm 8. Pra, nuk do të kishte qenë zgjuar në qoftë se në vend të përdorimit 8 bit për çdo letër, edhe më i përdorur rrallë si Q dhe Z, çka nëse kemi përdorur bit pak për A dhe E dhe S dhe letra më popullore dhe përdoret bit më shumë për letrat me pak të njohura, ideja u zgjedh le për rastin e përbashkët, e cila është një temë në shkenca kompjuterike e duke u përpjekur të zgjedh se çfarë do të ndodhë më dhe të shpenzojnë një kohë pak më shumë, një hapësirë ​​pak më shumë në gjërat që, vërtet, mund të ndodhë por jo domosdoshmërisht si shpesh. Pra, le të marrin një shembull. Supozoni se ne duam të shifroj informacion mjaft efikase. Ju mund të keni rritur ditur një diçka të vogël në lidhje me kodin Morse, dhe shanset janë që ju nuk e dini kodin e vërtetë, por ju mund të kujtojnë se kjo është të paktën këtë seri pika dhe dashes. Kjo është një coding mjaft efikas, dhe vini re se letra më popullore - për shembull, E - përdor të shkurtër beeps. Morse Kodi është mbi të gjitha bip bip-bip-bip-bip bip--dhe mbajtjen tone qoftë për periudha të shkurtra kohore ose periudha të gjata kohore. E, pėrcaktuara nga dot, është një bip super të shkurtër, vetëm bip, dhe që do të përfaqësojë E. Nga ana tjetër, T do të jetë një bip gjatë, si bip [zgjat shëndoshë], dhe që do të përfaqësojë T. Por kjo është ende mjaft e shkurtër, sepse, në të kundërt, në qoftë se ju shikoni në Z, për të shprehur Z ju do të shkoni, bip bip [më të shëndoshë], bip, bip [sound shkurtër]. Pra, kjo është për shkak se ajo është më pak i zakonshme. Por Gotcha këtu është se Morse code është pak të meta në atë që nuk është menjëherë decodable. Për shembull, mendoj që ju dëgjoni në disa fund të bip teli [shkurtra], bip [gjatë]. Çfarë ka mesazhit unë vetëm të marrë? Një dot dhe një dash. Çfarë do që përfaqësojnë? [Student] A. >> [Malan] Ndoshta. Ajo mund gjithashtu të jetë e ndjekur nga T. Me fjalë të tjera, Morse Kodi, pse ai thekson këtë parim e optimizuar rastin qoshe, kjo nuk do të japin hua veten në decodability menjëhershme. Kjo është, njeriut i cili është dëgjuar apo marrë këto pika dhe dashes disi ka për të kuptoj se ku thyen janë në mes letrave, sepse në qoftë se ju nuk e dini se ku janë këto pushime, ju mund të ngatërrojë A për ET ose anasjelltas. Pra, çfarë mund të bëni? Në kodin Morse ju mund vetëm pauzë në mes secilit prej letrave. Por heshti është lloj i sportel në pikën e tërë e shpejtimit gjërat. Pra, çfarë nëse në vend që kemi ardhur me një kod, ku nuk ishte kjo situatë e keqe ku E është një parashtesë, për shembull, i Një - me fjalë të tjera, në qoftë se ne mund të sigurohemi që modelet janë ende të shkurtër për letrat popullore gjatë për letrat me pak të njohura, por nuk ka konfuzion e mundur? Një burrë me emrin e Huffman vjet më parë shpikur këtë skemë të quajtur Huffman coding që në fakt thekson një prej strukturave të të dhënave që kemi shpenzuar pak kohë duke folur për javën e kaluar, ai i pemëve, pemë binare konkretisht - një pemë binare do të thotë se nuk ka më shumë se 2 fëmijë. Ajo ka ndoshta një fëmijë majtë, ndoshta një fëmijë të drejtë, dhe kjo është ajo. Pra, mendoj vetëm për hir të diskutimit se dikush dëshiron të dërgojë një mesazh që duket si kjo. Është absurditet të plotë, por ajo është e përbërë nga Si, Bs, Cs, DS, dhe es. Dhe në qoftë se ju në të vërtetë të gjithë numërimin e Si, Bs, Cs, DS, dhe Es dhe pastaj ndani me numrin total të letrave, Kjo tabelë pak këtu thotë se 45% e letrave janë Es, 20% janë si, 10% Bs, dhe kështu me radhë. Pra, me fjalë të tjera, të supozojmë se string cituar atje është vetëm disa mesazhi që ju dëshironi të dërgoni. Ajo ndodh të jetë e pakuptimtë vetëm kështu ne mund të përdorni si shkronja pak të jetë e mundur, por kjo është me të vërtetë rasti që mbetet e më popullore, dhe B dhe C janë më pak të njohura, të paktën nga këto 5 shkronjat e alfabetit. Pra, si mund të shkoni në lidhje me vjen me një encoding, një encoding binar, një model i 0s dhe 1s për secilin nga këto letra në mënyrë të tillë që është një model E shkurtër dhe ndoshta B dhe C janë modele pak më të gjatë, përsëri, ideja është se ne duam të përdorni bit pak më të madhe të kohës dhe pjesë më vetëm një herë në një kohë. Sipas Huffman coding, ju mund të krijoni një pyll të pemëve. Ka lloj i një linjë histori këtu që përfshin pemë dhe gjithashtu procesin e ndërtimit të tyre. Le të fillojmë. Unë propozoj që ju të filloni me këtë pyll, në mënyrë që të flasin, e 5 pemëve, secili i cili është një pemë goxha trashë. Pema është e përbërë nga vetëm një nyjë të vetme, të përfaqësuara si këtu nga një rreth. Pra, secili nga këto gjëra mund të jetë një struct C dhe në brendësi të struct C mund të jetë një noton përfaqëson numërimin frekuencave dhe pastaj ndoshta një char përfaqëson letër. Pra mendoj se nga këto nyje vetëm si çdo struct vjetër C, por tani për tani, nivel më të lartë. Ky është një pyll 5 yje të pemëve, secila prej të cilët kanë vetëm një nyjë të vetme. Çfarë Huffman propozuar është që ne të fillojë për të kombinuar ato pemë që kanë akuza të vogla të frekuencave në pemë pak më të mëdha me lidh ata me një nyje rrënjë të re. Pra, në mesin e letrave këtu, vërehet se për lehtësinë kam renditur ato nga e majta në të djathtë, edhe pse kjo nuk është e domosdoshme, dhe njoftim se nyjet më të vogla aktualisht janë 10% dhe 10%. Pra Huffman Propozohet që ne të bashkojë ato 2 nyje të vogël në një pemë të re duke futur një nyje të re prind dhe pastaj të japë një fëmijë që prindi të majtë dhe një fëmijë të drejtë ku B është arbitrare të majtë dhe C është arbitrare të drejtë. Dhe pastaj Huffman propozoi më tej se le tani vetëm të mendojnë për fëmijën e majtë në një nga këto pemë gjithmonë si u përfaqësuar nga 0 dhe fëmija drejtën gjithmonë si u përfaqësuar nga numri 1. Kjo nuk ka rëndësi në qoftë se ju rrokullisje e tyre aq kohë sa ju jeni në përputhje. Deri tani ne kemi katër pemë në këtë pyll. Dhe unë them sepse tani katër pema në të majtë - dhe kjo nuk është aq shumë një pemë në kuptimin që ai rritet në këtë mënyrë, kjo është më shumë si një pemë familjare, ku tani është lloj i 0,2 prind i dy fëmijëve - njoftim se në atë prind ne kemi tërhequr 0,2. Ne kemi shtuar edhe akuza frekuenca e dy fëmijëve dhe dhënë nyjen e re shuma totale. Deri tani ne vetëm përsërisin këtë proces. Gjej të dy nyjet më të vogla dhe pastaj të bashkohen me ta në një pemë të re dhe pastaj të përsëritur procesin e mëtejshëm. Tani për tani ne kemi disa kandidatë, 20%, 15%, dhe një tjetër 20%. Në këtë rast, ne kemi për të thyer kravatë. Ne mund ta bëjë këtë në mënyrë arbitrare. Ne duhet vetëm të bëjë atë vazhdimisht. Në këtë rast, unë do të shkoj në mënyrë arbitrare me atë në të majtë, dhe unë tani bashkojë 20% dhe 15% të më jepni një prind të ri të quajtur 35%, cilit majtë fëmija është 0, të cilit të drejtë fëmija është 1, dhe tani ne kemi vetëm tre pemë në pyll. Ju ndoshta mund të shihni se ku po shkon kjo. Nëse ne përsërisin këtë herë një çift më shumë, ne do të kemi vetëm një pemë të madhe, të gjitha skajet e të cilit janë emërtuar me 0s dhe 1s. Le të bëjë atë përsëri. 35% është rrënja e kësaj peme. 20% dhe 45%, kështu që ne jemi duke shkuar për të bashkojë 35% dhe 20%. Tani ne kemi këtë pemë këtu. Ne shtoni ato së bashku, ne kemi 55%. Tani ka vetëm dy pemëve në pyll. Ne e bëjmë këtë një herë përfundimtar, dhe shpresojmë se matematikisht gjitha frekuencat shtoni deri sepse ata duhet që ne kemi llogaritur ata nga get-go për të shtuar deri në 100%. Dhe tani ne kemi një pemë. Pra, kjo është një pemë coding Huffman. Ai lloj i mori një kohë për të arritur atje me gojë, por realiteti është me një për lak ose me një funksion rekursiv, ju mund të ndërtuar këtë gjë deri shumë shpejt. Kështu që tani ne kemi një nyje të re, dhe të gjitha këto nyje e brendshme janë malloc'd, me sa duket, përgjatë rrugës. Deri tani në krye të kësaj peme kemi 100%, por tani kemi një njoftim rrugë nga kjo e re e madhe-madhe-madhe-gjyshërit për të gjitha madh-madhe-stërnipat të gjithë rrugën në fund, për të gjithë gjethe. Ajo që ne jemi duke shkuar për të bërë tani është të propozojë që në mënyrë për të përfaqësuar E letër, ne thjesht do të përdorë numrin 1. Pse? Sepse në qoftë se ne e përshkojnë këtë pemë nga rrënja përfundimtar poshtë në fletë njohur si E, ne ndjekim vetëm një avantazh, buzë të drejtë, dhe kjo është etiketuar natyrisht në 1 top të drejtë. Pra implikimi këtu për Huffman ishte se encoding E-në binar do të jetë vetëm 1. Dhe kjo është pretty damn efikase. Nuk mund të vërtetë të marrë ndonjë më i vogël se kaq. Nga ana tjetër, një do të jenë të përfaqësuara, në qoftë se ju ndiqni logjikën, nga ajo model i bit në vend? 01. Pra, për të marrë në A, ne të fillojë në rrënjë dhe ne do të shkojmë majtas dhe pastaj ne do të shkojmë drejtë, që do të thotë ne kemi ndjekur një 0 dhe pastaj një 1. Pra, ne do të përfaqësojë një letër me modelin 0 dhe 1. Dhe tani vini re, ne tashmë kemi një pronë e decodability menjëhershëm se ne nuk kemi në kodin Morse. Edhe pse të dyja këto modele janë mjaft të shkurtër - E është 1 bit, A është 2 bit - vini re se ata nuk mund të jenë të hutuar një apo të tjera, sepse në qoftë se ju shihni një 1 ajo mori të jetë një E, në qoftë se ju shihni një pas një 1 0 ajo e mori padyshim të jetë një A. Në mënyrë të ngjashme, çfarë është D? 001. Çfarë është C? 0001. Dhe çfarë është B? 0000. Dhe përsëri, sepse të gjitha letrat që na tangojnë janë në gjethe dhe asnjëri prej tyre nuk janë lloj i ndërmjetës në rrugën nga rrënja në gjethe, nuk ka asnjë rrezik i bashkuar encodings 2 letra 'të ndryshme sepse të gjitha këto modele janë pak determinist. 0000 do të jetë gjithmonë B. Nuk ka nyje diku në mes që ju mund të ngatërrojë një letër për të tjera. Pra, çfarë është implikimi këtu? Letra më të njohura - në këtë rast E - ka marrë kodimin shkurtër, A ka marrë kodimin e ardhshëm më të shkurtër, dhe B dhe C, të cilat ne tashmë e dinte nga lloji get-go ishin të paktën popullore në frekuencë 10% secili, ata kanë marrë kodimin gjatë. Dhe kështu që çfarë do të thotë kjo tani është se në qoftë se ju dëshironi të dërgoni një mesazh që është ngjeshur mbi internet ose në një email ose të ngjashme, në vend se duke përdorur ASCII standarde, ju mund të dërgoni një mesazh të koduar Huffman ku në qoftë se ju dëshironi të dërgoni E letër, ju dërgoni vetëm pak një të vetme. Në qoftë se ju dëshironi të dërgoni një A, ju dërgoni 2 bit, 01, në vend të dërgimit 8 bit pasuar nga një tjetër 8 bit pasuar nga një tjetër 8 copa dhe kështu me radhë. Por ka një Gotcha këtu. Kjo nuk është e mjaftueshme për të vetëm të ndërtuar këtë pemë dhe pastaj të fillojë dërgimin e Alice nga Bob model shkurtër pak, string nga ASCII, sepse Alice ka gjithashtu për të informuar se çfarë Bob Bob nëse do të jetë në gjendje për të lexuar mesazhin e saj të ngjeshur? [Përgjigja e padëgjueshme Studenti] >> Çfarë është ajo? [Përgjigja e padëgjueshme Studenti] >> Nga ajo pemë është. Ose edhe më konkretisht, çfarë janë ato kodifikimet janë, veçanërisht pasi gjatë kësaj historie kemi bërë një telefonatë gjykim në një pikë. Mos harroni se ne kishim për të marrë në mënyrë arbitrare në mes të 2 nyjet e ndryshme 20%? Pra, kjo nuk është e vërtetë se Bob, përfituesi, vetëm mund të rindërtojë pemën e tij në sepse ndoshta ai do të krijojë pemën e ndonjëherë në mënyrë pak më ndryshe nga Alice. Për më tepër, Bob nuk e di edhe se çfarë mesazhi origjinal është sepse e vetmja gjë Alice është dërguar atij, natyrisht, është mesazhi i ngjeshur. Pra kapur me compression si kjo është se, po, Alice mund të ruaj një shumë e tërë e bit duke dërguar për 1 E dhe 01 për A dhe kështu me radhë, por ajo gjithashtu ka për të informuar Bob çfarë hartës është midis shkronjave dhe copa sepse ata nuk mund të qartë të mbështetet në vetëm më ASCII nëse ne nuk jeni duke përdorur ASCII. Kështu që ajo mund ta dërgoni atë pemë disi - shkruajnë atë, të ruajtur atë si të dhëna binare ose diçka si kjo - ose thjesht dërgoni atij një fletë mashtrojnë pak, një file Excel, që tregon mappings. Pra, efektiviteti i compression vërtetë supozon se mesazhet që ju jeni dërguar janë goxha të mëdha, së paku të mesme, sepse në qoftë se ju jeni dërguar një mesazh të super të shkurtër, në qoftë se ju vetëm dëshironi të dërgoni mesazhin KEQ, i cili ndodh të jetë një fjalë që ne mund të shkruhet këtu, B-A-D, ju jeni me siguri do të përdorni bit pak, por është kapur në qoftë se edhe ju keni për të informuar Bob çfarë është pema apo atë që janë ato kodifikimet, ju jeni me siguri do të peshoj më shumë se të gjithë të kursimeve e të pasurit gjëra ngjeshur për të filluar me. Pra, kjo në fakt mund të jetë rasti se në qoftë se ju provoni compressing edhe me diçka si zip ose file formate ju mund të jenë të njohur me - fotografi mjaft të vogla, fotografi madje edhe bosh - nganjëherë ato fotografi mund të merrni më të mëdha dhe jo të vogla. Por realisht, kjo ndodh vetëm për të madhësive të vogla fotografi, kështu që nuk do të bëjë një file Gigabyte jetë 2 gigabajt; ne jemi me të vërtetë duke folur bytes ose vetëm një çift kilobytes. Disa programe si zip janë të zgjuar të mjaftueshme për të kuptojnë se, "Ju do të jeni për të shpenzuar më shumë compressing bit këtë." "Më lejoni të mos shqetësojë compressing atë për ju në të gjitha." Pra, kjo është vetëm një mënyrë atëherë compressing format tekst. Ne mund të zbatojë diçka si kjo në C. Për shembull, këtu është se si ne mund të përfaqësojë një nyje në këtë pemë ku ne kemi një char për simbol, një vlerë lundrues për frekuencën, dhe si ne kemi parë me strukturat tona të tjera të të dhënave, 2 pointers, 1 tek fëmijës majta, 1 për të drejtë, ose i cili mund të jetë NULL, por në qoftë se jo, ajo i referohet një fëmije majtë dhe një fëmijë drejtë. Pra, kjo pastaj është Huffman coding, dhe kjo është një mënyrë që ju mund të shkoni në lidhje me compressing informacion, dhe kjo është padyshim një nga më të lehtë për të zbatuar në kontekstin e, të themi, strukturat javës së kaluar të të dhënave, pse edhe më të sofistikuara algoritme ekzistojnë që mund të bëjë mutacione edhe më të sofistikuara e të dhënave tuaja. Çdo pyetje pastaj në pemë, pemë binare, apo ngjeshje e tekstit? [Student] A ka ndonjë paqartësi, si në qoftë se ndarja [e padëgjueshme] në 01, atëherë do të jetë 011 paqartë, apo jo? [E padëgjueshme] >> Pyetje e mirë. Paqartësi. Më lejoni të përmbledh duke iu referuar në këtë foto këtu. Sepse ju jeni karaktere compressing, përfaqësitë e, sipas përkufizimit të këtij algoritmi të mbetet gjithmonë gjethet, ju kurrë nuk do të aksidentalisht përdorur të njëjtin model të bit për prefiksin e letrave të shumta. Pra, me fjalë të tjera, ju jeni të shqetësuar në lidhje, kjo tingëllon si, një paqartësie që lind ku 001 mund të jetë fillimi i B ose C ose fillimi i diçka të tillë. Por kjo nuk mund të jetë rasti, sepse njoftimi se të gjitha shkronjat e alfabetit ne jemi kodimin janë në gjethe. Dykuptimësia vetëm mund të lindin, si në rastin e kodit Morse, në qoftë se, për shembull, C ishte diku përgjatë rrugës nga rrënja deri B. [Student] E drejta. Pra, në këtë rast, thonë se një ka 2 gjethe. Thuaj >> A ka - Thuaj se përsëri. [Student] Thuaj A ka 2 gjethe, F dhe G, dhe pastaj G - >> rregull. Por ajo nuk mund të. Një në vetvete nuk mund të ketë lë F dhe G, sepse ato shkronja F dhe G do të jenë vetë lë diku në të majtë të B ose të drejtën e E. Pra sipas definicionit, ata duhet të jenë të lë. Përndryshe, ju jeni saktësisht e drejtë, ne nuk kemi zgjidhur problemin që Morse Kodi përballet. Mirë pyetje. Pyetje të tjera? Dakord. Ky nocion i bit, ajo rezulton që kemi pasur fuqinë të gjithë së bashku që ne nuk kemi përdorur në të vërtetë kur ai erdhi për të manipuluar këto 0s dhe 1s. Ne kërkuar rreth kjo në një nga grupe problemore hershme: domethënë, si do ju shkoj për konvertimin uppercase në shkronja jokapitale apo anasjelltas? Ose, më konkretisht, një nga ato psets parë kërkoi sa copa ju të vërtetë duhet të shfletoj në mënyrë që të ndryshojë një në shkronja jokapitale një apo anasjelltas? Këtu ka një kujtesë të shpejtë të asaj 65 dhe 97 të duket si në binar. Dhe edhe në qoftë se çështja është lloj i zbehur në kujtesën tuaj, ju mund të shihni përsëri këtu se sa bit duhet të kthyer për të ndryshuar kapitalin Një në shkronja jokapitale a? Vetëm një. Ata ndryshojnë vetëm në një vend të tretë, pak nga e majta. Ndërsa A ka një 010, pak a ka një 011. Kështu disi, ne duhet të vetëm të jenë në gjendje për të rrokullisje atë pak, dhe ne pastaj mund të përfitojë me të vogla apo letra. Ne e kemi bërë këtë në të kaluarën me të vërtetë duke përdorur nëse kushtet dhe kontrolluar nëse letra është midis kapitalit A dhe Z kapitalit, pastaj rezultatet si A - a + 26 ose diçka të tillë. Ju ndoshta e bëri një ndryshim aritmetike ndaj shkronjat e alfabetit. Por çfarë nëse ne vetëm mund të rrokullisje atë grimë të vetme? Si mund të ju shkoni në lidhje me marrjen e një bajt vlerë e bit, kështu 8 bit si dhe 01.000.001 01.100.001? Nëse keni pasur ato modelet e copa, si mund të shkoni në lidhje me ndryshimin e vetëm një prej tyre? Çfarë ndodh nëse ne kemi prezantuar në të verdhë këtu këtë model tjetër të bit? Nëse unë bëjë 0s gjithë verdhë string përveç një grimë që unë dua të ndryshojë dhe pastaj unë prezantoj një operator të ri të njohur si një operator bitwise - bitwise në kuptimin që ajo vepron në copa individuale, jo në një bajt të tërë ose katër bytes gjitha përnjëherë. Ky bar vertikale atje në të verdhë tregojnë se çfarë nëse marrim përfaqësimin e kapitalit dhe bitwise OSE ajo me sekuencën verdhe e bit? Me fjalë të tjera, mendoj se përsëri në diskutimin tonë të shprehjeve Boolean në Scratch dhe pastaj në C. Bërë një Boolean ose të thotë se për të qenë e vërtetë, ose gjëja e parë që duhet të jetë e vërtetë , ose gjëja e dytë duhet të jetë e vërtetë ose ata të dy duhet të jetë e vërtetë, dhe pastaj prodhimit rezulton në vetvete është e vërtetë. Në këtë rast këtu, çfarë nuk kemi marrë, nëse marrim 0 "ose" ed me 0? Rreme apo e rreme? Është ende e rreme, kështu që mbetet një vogle ashtu siç pritet. Çka nëse në vend të bëjmë 1 ose 0? Kjo tani mbetet 1, por njoftim se çfarë është rreth të ndodhë këtu. Në qoftë se ne fillojmë me një kapital dhe ne vazhdojmë të "ose" bit e veta individuale si ne po bëjmë këtu, 0 ose një të verdhë na jep atë këtu poshtë? Kjo na jep 1. Në fakt, mendoj që ne nuk e dimë se çfarë versioni uppercase i vogël a në fakt ishte. Le të shkojë ta bëjë këtë. Më lejoni të lëvizë këtë përsëri mbi këtu. Le ta bëjmë këtë përsëri. 0 ose 0 jep 0. 1 ose 0 jep 1. 0 ose 1 jep mua 1. 0 ose 0 jep 0. Një tjetër është 0, një tjetër është 0, një tjetër është 0. 1 ose 0 jep 1. Dhe kështu edhe në qoftë se ne nuk e dinim paraprakisht se çfarë me të vogla a ishte, thjesht duke "apo" ing A me këtë model të bit që ne kemi paraqitur këtu në të verdhë, ju mund të me të vogla një kapital Një nga Flipping atë pak. Ne kemi përdorur këtë shprehje javë më parë: Flipping një grimë. Si mendoni ju në fakt bëni që programuar? Ju përdorni atë që quhet zakonisht një maskë, një rend i bit, se në këtë rast ndodh pikërisht kështu që të duken si këtë numër këtu, dhe pastaj ju "ose" atë së bashku duke përdorur këtë operator të ri C, jo | |, se ju përdorni një të vetme | dhe ju do të vërtetë të merrni këtë përgjigje këtu, sepse pse? Ky është vendi 1s, 2s vend, 16s 4s, 8s,, 32s. Pra, del se në qoftë se ju merrni një letër të kapitalit A dhe bitwise ose ajo me 32 integer, 32 sepse i plotë, kur ju shikoni në atë si copa, duket si kjo, që do të thotë që ju mund të rrokullisje pak se ju në të vërtetë dëshironi. Dhe të ngjashme - dhe ne do të shikojmë në kodin në vetëm një moment - mendoj që ne duam të shkojnë në drejtim tjetër. Si ju shkoni nga një kapital Fjala në një? Cili pak duhet të ndryshojë? Kjo është e njëjtë. Ne duam të ndryshojmë se pak tretë nga një 1 deri në një 0. Dhe si mund të shkojmë për të bërë këtë? Si mund të fik pak? Me atë model i bit mund të kemi fikur pak? Çfarë ndodh nëse ne lloj i anasjell maskë? Ndërsa më parë, kemi bërë tërë 0s verdhë maskë me përjashtim të pak një kemi dashur të kthehet më, çka nëse këtë herë, ne kemi bërë tërë 1s maskë me përjashtim të pak se ne duam për të fikur dhe pastaj të përdorin operatorin çfarë? Çfarë ndodh nëse ne "dhe" gjërat? Le të marrin një sy. Nëse ne tani rrokullisje për këtë, mendoj se përsëri unë të krijuar një maskë që është e gjitha 1s me përjashtim të pak e që unë dua të fikur dhe pastaj në vend se "apo" numri i bardhë deri krye me numrat e verdhë poshtë këtu, çfarë nëse unë në vend "dhe" ato së bashku? Është quajtur një bitwise dhe. Logjikisht, kjo është e njëjta gjë si një boolean dhe. Kjo i jep mua 0 dhe 1 është 0. Pra rreme dhe e vërtetë është e rreme. Vërtetë dhe e vërtetë është e vërtetë. Dhe këtu është magjike: Vërtetë dhe e rreme tani është e rreme, kështu që ne kemi fikur atë pak. Dhe tani pjesa tjetër e tregimit është disi i hapur. Sepse pjesa tjetër e maskë është 1s, kjo nuk ka rëndësi se çfarë numrat janë në të bardhë. Kur ju "dhe" diçka me e vërtetë, ju nuk do të jeni për të ndryshuar vlerën e saj. Nëse kjo është e vërtetë, ajo do të mbetet e vërtetë. Në qoftë se ajo ishte e rreme, ajo do të mbetet e rreme. Por magji ndodh kur ju keni marrë diçka që është e vërtetë dhe ju pastaj "dhe" atë me të rreme. Kjo ka efektin e kthyer off se pak. Pra, a fshehtë pak atje. Le të shikojmë në të vërtetë në një kod, i cili në fakt mund të duken edhe më të fshehtë, por le të marrin një vështrim në këtu tolower. Nëse unë shoh në tolower, duke shkuar nga një kryeqytet në shkronja jokapitale një, le të shohim se si ne mund të zbatojë këtë program. Ja kryesor, dhe kjo nuk është marrë ndonjë komandë-line argumente. Unë jam deklaruar një c karakter për letrën që përdoruesi do të shkruani in Unë atëherë përdorni një për ta bërë të njohur, ndërsa loop vetëm për t'u siguruar që përdoruesi patjetër më jep një kapital Një ose B ose C. .. Z, në mënyrë që ata të më jepni diçka në mes të A dhe Z. Dhe tani çfarë po bëj këtu? Unë jam "ose" ing këtë me 0x20, por që në fakt i njëjtë si - dhe ne do të vijnë përsëri në këtë në një moment - 32. Pra, përsëri, 32 është ky model i bit këtu. Pse ne e dimë këtë? Vetëm mendoni përsëri në javën 0. Ky është vendi 1s, 2s vend, 4s, 8s, 16s, 32s vend. Pra, ky numër verdhë ndodh të jetë 32. Unë pastaj mund të marrin një letër si char këtu, bitwise "ose" atë me fjalë për fjalë numrin 32, dhe çfarë mund të kthehet? Versioni i vogle se char. Një moment më parë, edhe pse, kam shprehur këtë në një simbol bazë të ndryshme. Çfarë e bëri këtë të përfaqësojë? >> [Student] Hexadecimal. [Malan] Kjo ndodh për të përfaqësuar heksadecimal. Ne nuk kemi biseduar rreth heksadecimal të gjithë se shumë, por është e vërtetë përshtatshëm në raste si ky. Edhe pse kjo duket më kompleks dhe edhe pse kjo duket si 20 dhe jo 32, rezulton se heksadecimal në fakt është simbol super i përshtatshëm sepse në heksadecimal çdo shifra pas 0x - dhe kjo do të thotë asgjë; kjo është vetëm konventë të njeriut që thotë se këtu vjen një numër heksadecimal - secilën nga këto shifra, 2 dhe pastaj 0, vetë mund të përfaqësohen me saktësisht 4 copa. Pra, nëse e bëjmë këtë, më lejoni të hapur një editor teksti këtu - autocomplete pazakontë - në qoftë se ne bëjmë një editor teksti të vogël këtu, 0x20 numër do të thotë këtu është 4 bit, këtu është një tjetër 4 bit. Le të bëjmë rightmost 4 bit parë. 0 kur përfaqësuar me 4 bit është ajo? Super e lehtë. Vetëm të gjitha 0s. Pra, 4 bit si 0s. Si mund të përfaqësojnë 2? Ka qenë një kohë që ne e bëmë këtë, por kjo është 0100. Pra, ky është vendi 1s, ky është vendi 2s, dhe pastaj nuk ka rëndësi se çfarë vende të tjera janë. Me fjalë të tjera, në heksadecimal ju mund të thoni 0x20, por në qoftë se ju pastaj të mendojnë për atë që është 2 dhe si është ajo e përfaqësuar në binar, çfarë është 0 dhe si është ajo e përfaqësuar në binar, përgjigjet për këto pyetje janë të këtë dhe këtë, respektivisht. Pra, 0x20 ndodh për të përfaqësuar këtë model të 8 bit, e cila është pikërisht maskë që kemi dashur. Pra, kjo është për momentin vetëm një ushtrim intelektual, por realiteti është në kod është zakonisht më e zakonshme për të shkruar konstantat si kjo në heksadecimal sepse atëherë programues mund relativisht lehtë, edhe nëse kjo kërkon disa letër dhe laps, kuptoj se çfarë është model i bit sepse ju nuk mund vetëm të shprehin 0s dhe 1s zakonisht në kodin. Ju nuk mund të shkojnë 00.010 dhe kështu me radhë. Ju duhet të marr notations decimal ose hexadecimal apo oktal ose të tjera. Shumica e njerëzve priren për të marr hexadecimal thjesht kështu që çdo shifër përfaqëson 4 copa dhe ju mund ta bëni këtë matematikë të shpejtë. Dhe unë do të tundë dorën time në toupper, e cila është pothuajse e njëjtë, ajo duket pothuajse identike. Toupper ndodh për të përdorur jo operatori ose më tepër, por ky djalë dhe DF. Çfarë do të përfaqësojë DF? DF? Dikush? >> [Student] 255. 255? Jo 255. Kjo do të jetë ff. Ne do të largohen këtë një si një ushtrim pak. Por në qoftë se ju shkoni nga 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 dhe pastaj atë që vjen pas 9? Ne jemi lloj i jashtë shifra dhjetore, por në heksadecimal atë që vjen pas 9? [Student] a. Kështu >> a, b, c, d. Ju mund të kuptoj se nga atje se çfarë modeli i bit d fakt përfaqëson. Dhe në qoftë se ne bëjmë matematikë, ne do të shohim se maskë deri në fund duke u kthyer është identike me këtë. Kjo është f, të gjitha 1s, dhe kjo është d. Pra DF paraqet atë maskë. Dakord. Dhe së fundi, jo për të bërë gjëra të shëndoshë super, super teknik, por mendoj kemi dashur të shkruaj një program që e bën këtë. Më lejoni të shkojnë përpara dhe të bëjë binar, i cili është një program në një skedar të quajtur binary.c. Dhe tani më lejoni të drejtuar binar dhe jepni një numër të plotë jo-negativ. Le të fillojë të lehtë dhe lloji në 0. Kjo tani është një program që printon nga një numër i plotë në përfaqësimin e saj binar. Pra, nëse unë të luajë këtë lojë përsëri dhe shkruani në vetëm 1, unë duhet të merrni një përfaqësim të 32-bit të 1. Në qoftë se unë bëj këtë përsëri me 2, unë duhet të merrni atë. Nëse unë bëj 7, unë duhet të merrni një 1s pak në fund dhe kështu me radhë. Ajo rezulton kam përmend këtë, sepse me operacionet bitwise ju në fakt mund të bëjë një gjë tjetër si. Ju mund të krijoni këto maska ​​dinamike. Hidhni një sy në këtë shembull një finale përfshin operacionet bitwise. Këtu është pjesa e parë e kodit, të shpejtë e përdoruesit për një numër, dhe ai insiston që ju të jepni një numër të plotë jo-negativ. Pra, kjo është lloj i stuff shkollës së vjetër. Por këtu është diçka që është lloj i interesante. Si mund të shkoj në lidhje me shtypjen e një numri në binar? I pari iterate nga ajo për çfarë? Çfarë është madhësi e një int tipike, të paktën në aplikim? >> [Student] 4. Kjo është 4. Pra 4 * 8 është 32-1 është 31. Pra, nëse unë jam duke filluar për të numëruar nga 31, që përfaqëson, del, thjesht konceptuale, apo 31 bit pak më të lartë me qëllim, e cila është ky djalë gjatë këtu, ndërsa kjo do të jetë 0 bit. Pra, kjo është pak 01 ... 31 bit. Pra, çfarë është ky kod duke bërë? Këtë njoftim për lak, edhe pse kjo duket fshehtë, është vetëm iterating nga 31 deri në 0. Kjo ishte. Kështu pjesë interesante tani duhet të jetë në këto 5 rreshta këtu. Vini re se në këtë linjë unë jam deklaruar një maskë ndryshueshme quajtur të jenë në përputhje me historinë tonë të këtyre numrave të verdhë. Dhe pastaj çfarë është kjo duke bërë? Ky është një tjetër operatori bitwise ne nuk kemi parë më parë, ka shumë të ngjarë. Kjo është operatori majtë ndryshim. Ky operator e bën këtë. Këtu është numri 1, dhe në qoftë se ju bëni ndryshim i la, Left Shift, çfarë mendoni se ka efektin e bërë me atë 1 individuale? Fjalë për fjalë zhvendosur atë përsipër. Pra, nëse numri 1 është ajo që ju keni në të majtë dhe ju filloni duke i Initializing në 31, çfarë është se do të bëni? Ajo do të marrë këtë numër 1 dhe 31 vende të zhvendoset atë mbi këtu. Dhe për shkak se nuk ka padyshim ka shifra të tjera pas saj, ata do të zëvendësohet nga default me ​​0s. Pra, ju do të fillojnë me numrin 1, e cila natyrisht duket si kjo - dhe më lejoni të tërheqë atë mbi këtu në qendër. Dhe pastaj si ju zhvendoset gjëra të majtë, ky djalë në thelb shkon në këtë mënyrë. Por sa më shpejt që ju bëni atë, një 0 merr mbushur in Nëse ju zhvendoset atë një herë të dytë, ajo shkon në këtë mënyrë dhe një tjetër 0 merr mbushur in Ju zhvendoset atë përsëri dhe pastaj një tjetër 0 merr mbushur in Pra, nëse ju bëni këtë gjë e 1 << 31 vende i, ju deri në fund duke marrë një maskë që është 32 karaktere gjatë, një djathti i cili është një 1, të gjithë nga pjesa tjetër e cila janë një 0. Dhe kjo rezulton, si një mënjanë, duke i shtyrë një numër të majtë si kjo edhe rastësisht, dhe nganjëherë të përshtatshme, ka efektin e bërë atë për këtë numër? >> [Student] dyfishuar atë. Dyfishuar atë, sepse secili prej kolonave - vendi 1s, 2s vend, vendi 4s, Vendi 8s, 16s vend - they're gjithë dyfishimin si ju shkoni në të majtë. Ose më mirë, kur ju zhvendoset 1s ju jeni do të përfundojë deri në dyfishimin e vlerës së numrit. Ju mund të përfundojë duke bërë transformimet interesante e shifra duke e zhvendosur mbi gjithçka në këtë mënyrë nga fuqitë e 2. Pra, si e bën këtë punë? Kjo pastaj jep mua një maskë që është e gjitha 0s përveç një 1 në pikërisht vendin e dua atë, dhe pastaj kjo shprehje, e cila është e vjedhur nga toupper.c, është thjesht duke thënë se marrë numrin n që përdoruesi shtypur në, "Dhe" ajo me atë maskë, dhe çfarë po ju do të merrni? Ju jeni do të merrni një 1 në qoftë se ka një 1 në atë vend maskuar, ose ju jeni do të merrni një 0 në qoftë se nuk është. Dhe kështu të gjithë ky program bën në mënyrë efektive është se ka një lak, dhe kjo krijon një maskë me një 1 gjatë këtu, pastaj një 1 gjatë këtu, pastaj një 1 gjatë këtu, dhe ai e përdor këtë bitwise dhe mashtrim të them është se pak 1 në input të përdoruesit këtu? A ka pak 1 në input të përdoruesit këtu? Dhe nëse është kështu, fjalë për fjalë të shtypura 1, tjetër shtypur 0. Ne jemi duke e bërë këtë me ints vetëm për shkak se kjo është arsyeja pse ne jemi duke bërë 32 copa në vend të 8, por ajo që ne kemi prezantuar, atëherë është kjo bitwise DHE, kjo bitwise OSE, dhe ky operator majtë ndryshim, të cilat nuk janë shpesh tmerrësisht të dobishme, por kjo rezulton se ata mund të jenë. Në fakt, në qoftë se keni qenë për të përfaqësuar diçka si një grup të Booleans vetëm për të përfaqësuar vërtetë apo e rreme, mendoj që ju të kërkuar për të mbajtur gjurmët e nëse janë apo jo një dhomë plot 300 studentë është i pranishëm, ju mund të deklarojë një rrjet të madhësisë 300 e tipit bool në mënyrë që ju të merrni 300 bools, dhe ju mund të vendosni çdo të vërtetë nëse dikush është këtu dhe të rreme ndryshe. Pse është se përfaqësimi në atë strukturën e të dhënave joefikase? Çfarë është e keqe në lidhje me hartimin e kësaj strukture të dhënave, një grup i 300 bools? Çfarë është një bool, në fakt, nën kapuç? Kjo, gjithashtu, është diçka që nuk mund të jetë njohur. Ajo rezulton se nuk ka bool. Mos harroni ne lloj i krijuar që me dosjen cs50.h, e cila në vetvete përfshin bool standarde. C është lloj i heshtur, edhe pse, kur është fjala për bool. Ai përdor 8 bit për të përfaqësuar çdo bool, e cila është krejtësisht e kota sepse padyshim, sa copa keni nevojë për të përfaqësuar një bool? Vetëm 1. Pra, del se në qoftë se ju tani keni mundësinë me operatorët bitwise për të manipuluar copa individuale edhe në një char, madje edhe në një bajt vetme, kjo rezulton nga ju mund të ulet kujtimin e nevojshme për të përfaqësuar diçka stupid si kjo strukturë frekuentimit vetëquajtur të dhënave nga një faktor i 8. Në vend të përdorimit të tetë bit për të përfaqësuar vërtetë apo e rreme, ju mund të përdorni një fjalë duke përdorur një bajt vetme për çdo tetë nxënës në klasë dhe toggling 0-1 copa individuale duke përdorur këto lloje të nivelit të ulët truket. Kjo me të vërtetë vënë një fund për energji. A ka ndonjë pyetje rreth operacioneve bitwise? Po. >> [Student] A ka një operator ekskluziv apo? Po. Nuk është një operator ekskluzive ose që duket si kjo, ^, simboli karrota, cila do të thotë vetëm gjë te pare ose gjë dytë mund të jetë një 1 për dalje të jetë një 1. Ekziston edhe një organizatë jo, ~, i cili do t'ju lejojë të anasjell një 0 në një 1 ose anasjelltas, si dhe. Dhe ka edhe një operator i drejtë ndryshim, >>, që është e kundërta e një të pamë. Dakord. Le të marrin gjërat tani në një nivel më të lartë. Ne kemi filluar duke folur në lidhje me tekstin dhe pastaj compressing atë dhe përfaqësojnë tekstin me numrat më pak të bit; kemi biseduar pak rreth asaj se si ne tani mund të fillojnë të manipuluar gjërat në një nivel bitwise. Le tani zoom mbrapa deri 10.000 këmbët për përfaqësim nga gjërat më komplekse të tilla si grafikë. Këtu kemi një flamur të Gjermanisë, këtu kemi një të Francës. Këto mund të jenë të përfaqësuara në formate që ju mund të dini - gifs, për shembull. Nëse ju keni parë ndonjëherë një imazh në Web që përfundon në. Gif, kjo është një format zëvendësoj graphics. Këto dy flamuj këtu lloj hua veten e tyre për të compression për çfarë arsye ndoshta të dukshme? >> [Përgjigja e padëgjueshme Student] Nuk është një shumë e përsëritjes, apo jo? Në mënyrë që të dërgojë flamurin e Gjermanisë, të mendojnë për këtë si një imazh në ekran mbështetur në ditët tuaja para. Ju mund të kujtojnë se ka pixels individuale ose pika që përbëjnë një imazh. Ka një radhë e tërë e pikave të zeza dhe një rresht të tërë të pikave të zeza. Ka një bandë e rreshtave të pikave të zeza që ne mund të shohim nëse ne me të vërtetë në zoomed, ashtu si kur ne zoomed në në fytyrën Rob në Photoshop. Sapo kemi marrë të thellë dhe më të thellë dhe më thellë në imazh, ju keni filluar duke parë pixelation, të gjitha sheshet që përbënin syrin e tij në këtë rast. Marrëveshja same here. Nëse ne zoomed në mjaft pak, ju do të shihni pika individuale. E pra, kjo është lloj i një humbje të bit. Në qoftë se një e treta e flamurit është e zezë dhe një e treta e flamurit është i verdhë dhe kështu me radhë, pse nuk mund të compress disi këtë flamur? Dhe edhe flamuri francez mund të jetë i ngjeshur edhe pse modeli është pak ndryshe. Kjo rezulton nga format file GIF është një format compression lossless, që do të thotë që ju mund të merrni një imazh si flamurin gjerman këtu, ju mund të hidhni një shumë e copa të saj pa cënuar cilësinë. Kjo është në kontrast me diçka si JPEG, me të cilën shumica prej nesh janë ndoshta më të njohur. Facebook fotot dhe fotot Flickr dhe si janë pothuajse gjithmonë të ruhen si JPEG, kur ata janë të ngarkuar, por jpegs është një lossy - format ku ju mund të hedhin larg bit - lossy por ju gjithashtu hedhin larg cilësisë. Dhe kështu që nëse ju ngjesh fotot me Photoshop ose ngarkoni atyre në Facebook ose të marrë ato në një telefon me të vërtetë mutit, ju e dini se fotografia fillon të merrni shumë njolla-njolla dhe pixelated, dhe kjo është për shkak se ajo është duke u ngjeshur me kompjuter ose telefon nga fjalë për fjalë informacion hedhur larg. Por GIF është e mahnitshme në atë që mund të përdorni bit pak se ajo mund nga default pa humbur ndonjë informacion. Dhe kjo në thelb e bën këtë si më poshtë. Në vend se në dyqan një skedar si një PKM do një trefishtë RGB për zi, zi, zi, zi, zezë, e zezë, e zezë, e zezë, e zezë, e zezë, e zezë, e zezë dhe kështu me radhë, përkundrazi, formati GIF do të thonë, "Black" dhe pastaj, "Përsëriteni këtë 100 herë," ose diçka të tillë. "Zi, të përsëritur këtë 100 herë, e zezë, të përsëritur këtë 100 herë ..." "Yellow, përsëris këtë 100 herë." Dhe kështu e kujton, në thelb, pixel pari nga e majta dhe pastaj kodon disi nocionin e përsëritjes se piksel përsëri dhe përsëri. Pra GIFs pastaj mund të compress veten pa humbur asnjë informacion. Por në qoftë se keni pasur në mend, në qoftë se është algoritmi që gifs përdorimin, cila prej këtyre flamujve, edhe pse ata duken identike në madhësi, do të jetë më i vogël, kur ruhen në diskun si një GIF? >> [Student] Gjermani. Gjermania do të jetë më i vogël? Pse? [Student] Sepse ju përsëris atë shumë, shumë herë horizontalisht dhe pastaj ju përsëris një tjetër kohë. Pikërisht >>. Sepse njerëzit që shpikën GIF vetëm lloji i vendosur në mënyrë arbitrare se përsëritja do të jetë leveraged horizontalisht dhe jo anash. Ka përsëritje shumë më tepër anash këtu në flamurin gjerman se në flamurin francez. Pra, në qoftë se ne të vërtetë të hapur një dosje në hard drive time që ka këto gifs, vërtetë ju mund të shihni se flamuri gjerman këtu është 2 kilobytes dhe një francez është 4 kilobytes. Ajo ndodh të jetë një rastësi që një është dy herë të tjera, por kjo është në fakt rast se flamuri francez është shumë më i madh. Edhe pse ne jemi duke folur këtu për grafikë, idetë e njëjta mund të aplikojnë për jo gjëra të tilla si flamujt, por imazhet që janë pak më shumë komplekse. Nëse ju merrni një foto të një mollë, me siguri nuk është një shumë e dyfishimit atje, kështu që ne mund të kujtojmë se disi sfond default është blu dhe jo, si i djathtë foto sugjeron, duhet të mbani mend ngjyra e çdo pixel vetme në këtë foto. Pra, ne mund të hedhin bit larg atje pa humbur informata. Mollë ende duket vetëm njëjtë. Në këtë shembull këtu, ju mund të shihni se çfarë ndodh në një film. Këto përfaqësojnë vjetër-shkollën lëkundet film ku në imazhin lartë atje ju keni një ngarje RV kaluar një shtëpi dhe një pemë. Dhe si ai që drejton van kaluarën nga e majta në të djathtë, çfarë padyshim nuk ndryshon? Shtëpia nuk është duke shkuar askund, dhe pema nuk është duke shkuar askund. E vetmja gjë që është duke lëvizur është van në këtë rast. Pra, si Historiku pandryshuar sugjeron, çfarë ju mund të bëni në filma është në mënyrë të ngjashme vetëm hedhin larg informacione që nuk ndryshon në mes kornizave. Kjo është e njohur përgjithësisht si compression interframe të cilit, nëse kjo kornizë duket pothuajse identik me këtë, le të mos shqetësojë ruajtjen në disk asnjë informacion identike në këto korniza e ndërmjetme, le të përdorin vetëm korniza kryesore herë në një kohë që në fakt të ruajtur këtë informacion redundantly vetëm si një mendje e shëndoshë pak kontroll. Nga ana tjetër, një tjetër qasje për video compressing është në këtë shembull të dytë dhe të ulët këtu, ku më tepër se dyqan 30 korniza, pse nuk ju vetëm dyqan 15 korniza një të dytë në vend? Në vend se llojin film të rrjedhin bukur, të përkryer, kjo mund të duket si ajo e stuttering pak, një shkollë të vjetër pak, por efekti neto do të jetë për të përdorur copa shumë më pak se përndryshe mund të jenë të nevojshme. Pra, ku e bën këtë, atëherë na lënë? Kjo ishte pak e një mënjanë se ku tjetër ju mund të shkoni me compression. Për më shumë mbi këtë, të marrë një klasë si CS175 këtu. Ja një shembull tjetër brenda video. Nëse bee është e vetmja gjë lëviz, ju mund të vërtetë të hedhin larg informacion në ato korniza e mesme sepse lule dhe gjethe qielli dhe nuk janë ndryshuar. Por le të tani e konsiderojnë një gjë të fundit. Në 5 minutat e ardhshme kemi lënë pas përgjithmonë në C leksion? Po. Jo në psets, pse. Historia e fundit në lidhje me C dhe pastaj ne kemi marrë për gjëra shumë sexy përfshirë HTML dhe Web dhe woo hoo-. Dakord. Këtu ne do të shkojmë. Kjo është motivimi. Kjo rezulton nga të gjithë këtë kohë, kur ne kemi qenë të shkruar programet kemi drejtuar tingëllimë. Dhe tingëllimë, ne kemi thënë që në javën e parë shumë e shumë, merr kodin burimor dhe konverton atë në kodin e objektit. Ajo merr C dhe konverton atë në 0s dhe 1s. Unë kam qenë lloj i gënjyer për ju për disa javë, sepse ajo nuk është mjaft aq e thjeshtë sa se. Ka shumë më tepër në vazhdim e sipër nën kapuç, kur ju drejtuar një program si tingëllimë. Në fakt, procesi i hartimit të një programi të vërtetë mund të përmblidhet, si ju mund të kujtojnë nga video Rob mbi hartuesit, në këto 4 hapa: para-përpunimin, hartimin veten, montimi, si dhe lidh. Por ne në klasë dhe shumica e njerëzve në botë zakonisht përmbledhin të gjitha këto hapa si vetëm "përpilimit". Por, nëse ne fillojmë me kod burim si kjo, kujtojnë kjo është ndoshta më e thjeshtë programi C ne kemi shkruar deri tani, kujtojnë se kur përpilohet ajo përfundon deri në kërkim si kjo. Por ka në fakt një hap i ndërmjetëm, dhe këto hapa janë si më poshtë. Së pari nuk është kjo gjë në krye të kësaj dhe shumica e programeve tona, # Include Çfarë do të përfshijnë # bëni për ne? Kjo kopje shumë e shumë dhe pastat përmbajtjet e stdio.h në dosjen time kështu që pse? Pse nuk më intereson në lidhje me përmbajtjen e stdio.h? Çfarë është atje me interes? Deklarata printf së, prototip të saj, në mënyrë që pastaj të përpiluesit e di se çfarë dua të them kur unë përmend këtë funksion printf. Kështu hap në hartimin 1 është para-përpunimit, ku një program si tingëllimë ose disa program ndihmës që vjen me tingëllimë lexon kodin tuaj të lartë deri në fund, majta në të djathtë, dhe çdo herë që sheh një simbol # ndjekur nga një fjalen si përfshijnë, ajo kryen këtë operacion, kopjimi dhe pasting në këtë rast stdio.h në dosjen tuaj. Kjo është hap 1. Atëherë ju keni një fotografi shumë më të madhe C për shkak të kopje të madh, punë paste se ka ndodhur vetëm. Hapi 2 tani është përpilimit. Por kjo rezulton përpilimin e merr kodin burim që duket si ky dhe e kthen atë në diçka që duket si kjo, e cila për ata që njohin quhet? >> [Student] Kuvendit. Gjuha >> Kuvendit. Kjo është në fakt diçka që nëse ju merrni CS61 ju do të zhyten në në më shumë detaje. Kjo është vetëm në lidhje me sa më afër që ju mund të merrni për të shkruar 0s dhe 1s veten por shkruar gjërat në një mënyrë të tillë që ende bën të paktën një grimë pak e kuptim. Këto janë udhëzime makinës, dhe nëse lëvizni poshtë në funksion kryesor këtu, vini re se nuk është ky udhëzim shtytje, lëvizin udhëzim, hiq udhëzim, telefononi udhëzim, dhe kështu me radhë. Kur ju dëgjoni se kompjuteri juaj ka Intel brenda, ju keni një CPU Intel në Mac apo PC tuaj, çfarë do të thotë kjo? Një CPU vjen e ndërtuar nga kompanitë si Intel kuptuar udhëzime të caktuara. Ata nuk kanë asnjë ide se çfarë funksionon si shkëmbim janë ose kryesore janë në vetvete, por ata e dinë se çfarë shumë të ulët të nivelit udhëzime si të shtoni, zbres, shtytje, veprim, thirrje, dhe kështu me radhë janë. Kështu që kur ju përpilojnë kodin C në gjuhë të kuvendit, tuaj shumë miqësore-looking përdorues kodi është konvertuar në diçka që duket si kjo, që fjalë për fjalë lëviz bytes ose 4 bytes rreth në njësi të tilla të vogla brenda dhe jashtë CPU. Por në fund, kur tingëllimë është i gatshëm për të marrë këtë përfaqësimin e programit tuaj në 0s dhe 1s, atëherë hapi i quajtur grumbulluar ndodh, dhe kjo përsëri gjitha ndodh në injoroj një sy, kur running tingëllimë. Ne fillim këtu, ai nxjerr një fotografi si kjo, dhe pastaj ajo konverton atë në këto 0s dhe 1s. Dhe në qoftë se ju doni të shkoni përsëri në një pikë dhe në të vërtetë shohim këtë në veprim, nëse unë shkoj në hello1.c--kjo është një nga programet e para kemi shikuar në - normalisht ne do të përpilojë këtë me hello1.c tingëllimë dhe kjo do të na japë a.out. Nëse nga ana tjetër ju në vend që të japë atë S-flamurin, atë që ju do të merrni është hello1.s dhe ju do të shihni në të vërtetë gjuhën e kuvendit. Unë jam duke bërë këtë për një program shumë të shkurtër, por në qoftë se ju shkoni përsëri për Scramble ose Recover ose ndonjë program që ju keni shkruar dhe vetëm nga kurioziteti duan të shohin se çfarë në të vërtetë duket si, çfarë është në fakt duke u ushqyer në CPU, ju mund të përdorni se-S flamurin me tingëllimë. Por pastaj së fundi, ka ende një Gotcha. Këtu janë 0s dhe 1s që përfaqësojnë zbatimin tim Hello World,. Por unë përdorur funksionin dikush tjetër në programin tim. Pra, edhe pse procesi ka qenë që unë të marrë hello.c, ajo merr hartuar në kodin kuvendit, dhe pastaj ajo merr mbledhur në 0s dhe 1s, vetëm 0s dhe 1s që janë outputted në këtë moment në kohë janë ato që rezultojnë nga kodin tim. Por personi i cili shkroi printf, ata hartuar kodin e tyre 20 vjet më parë dhe kjo është instaluar tashmë diku në aplikim, kështu që ne duhet të bashkohen disi e tij ose të saj 0s dhe 1s me 0s im dhe 1s, dhe që na sjell në hapin 4 dhe të fundit të hartimit, i njohur si lidh. Pra, në anën e majtë kemi të saktë të njëjtën tablo si më parë: hello.c bëhet kuvendi bëhet Kodi 0s dhe 1s. Por të kujtojnë se unë përdorur bibliotekën standarde I / O në kodin tim, dhe që do të thotë diku në kompjuter ka një file i quajtur stdio.c ose të paktën versioni i hartuar prej tyre, sepse dikush disa vjet me pare stdio.c hartuar në kodin kuvendit dhe pastaj një bandë e tërë e 0s dhe 1s. Kjo është ajo që është njohur si një statike apo dinamike një bibliotekë. Kjo është disa fotografi të ulur diku në aplikim. Por së fundi, unë kam për të marrë 0s tim dhe 1s dhe 0s që personi dhe të 1s dhe disi lidhin ato së bashku, fjalë për fjalë të kombinuar ato 0s dhe 1s në një skedar të vetëm të quajtur a.out ose hello1 ose çfarëdo kam quajtur programin tim në mënyrë që rezultati përfundimtar i ka të gjitha të 1s dhe 0s që duhet të përbëjnë programin tim. Pra, gjithë kësaj kohe kjo semestrit, kur ju keni qenë duke përdorur tingëllimë dhe edhe më shumë kohët e fundit running bëjë në mënyrë që të kandidojë tingëllimë, të gjitha këto hapa janë ndodhur menjëherë lloj i, por shumë qëllimisht. Dhe kështu që nëse ju vazhdoni për në shkenca kompjuterike, domethënë CS61, kjo është shtresa që ju do të vazhdojë të zhvishem përsëri jashtë atje duke folur në lidhje me efikasitetin, implikimet e sigurisë, dhe si nga këto detaje të nivelit të ulët. Por me këtë, ne jemi gati për të lënë C prapa. Le të shkojnë përpara dhe për të marrë 5-minutësh pushim tonë tani, dhe kur kemi ardhur përsëri: Internet. Dakord. Ne jemi mbrapa. Tani ne fillojmë vështrim tonë jo vetëm në HTML, sepse, si ju do të shihni, HTML vetë është në të vërtetë shumë e thjeshtë por me të vërtetë në programimin e web më në përgjithësi, Networking më në përgjithësi, dhe si gjithë këtyre teknologjive të vijnë së bashku për të na lejuar për të krijuar programe shumë më të sofistikuara në majë të internetit se deri tani ne kemi qenë në gjendje për të në këto dritare të zezë dhe të bardhë. Në të vërtetë, në këtë pikë, në semestrin edhe pse ne do të shpenzojnë më pak kohë relativisht të në PHP, HTML, CSS, JavaScript, SQL dhe më shumë, shumica e studentëve do të përfundojnë duke bërë projekte që janë përfundimtare web-bazuar sepse si ju do të shihni, sfondi ju tani keni në C është shumë e aplikueshme për këto të nivelit të lartë gjuhë. Dhe si ju filloni të menduarit në lidhje me projektin tuaj përfundimtar, i cili, ashtu si Set Problem 0, ku ju u inkurajuan të bëjë asgjë më me interes për ju në Scratch, projekti përfundimtar është mundësia juaj për të marrë njohuritë tuaja newfound dhe tru me C ose PHP apo JavaScript ose si jashtë për një shëtitje dhe për të krijuar copë tuaj shumë vetë e softuerit për botën për të parë. Dhe pasardhësve të ju me ide, e di se ju mund të drejtojë këtu, projects.cs50.net. Çdo vit, ne kërkoj ide nga fakultetit dhe stafit dhe grupet studentore në kampus vetëm për të paraqesin idetë e tyre për gjëra interesante që mund të zgjidhen duke përdorur kompjuterët, duke përdorur faqet e internetit, duke përdorur software. Pra, nëse ju jeni duke luftuar për të dalë me një ide nga mesi juaj, me të gjitha mjetet lëvizni nëpër ideve atje nga këtë vit dhe i fundit. Kjo është krejtësisht në rregull për të trajtuar një projekt që ka qenë trajtuar më parë. Ne kemi parë shumë Apps për të parë statusin e rrobave në kampus, Apps të shumta për të lundrimit menu sallë ngrënie, Apps shumë për të lundrimit katalogun kurs dhe si. Dhe me të vërtetë, në një leksion të ardhmen dhe në seminare të ardhshme, ne do të prezantoj me një TV në dispozicion të publikut, të dy komerciale në dispozicion si edhe këtu në dispozicion nga CS50 në kampus në mënyrë që ju të keni qasje në të dhënat dhe pastaj mund të bëjë gjëra interesante me të. Pra, më shumë në projektet përfundimtare në disa ditë, kur ne lirimin specifikimet, por tani për tani, e di se ju mund të punoni solo ose me një apo dy miqve në projektin më të ndonjë interes për ju. Internet. Ju shkoni përpara dhe të largohen nga laptopë tuaj, ju shkoni në facebook.com për herë të parë, nuk ka hyrë në kohët e fundit, dhe hit Enter. Çfarë saktësisht ndodh? Kur ju goditi Shkruani në kompjuterin tuaj, një bandë e tërë e hapave fillojnë lloj magjike ndodh. Kështu që ju këtu në server majtë, web si Facebook është këtu në të djathtë, dhe disi ju jeni duke përdorur këtë gjuhë quajtur HTTP, Hypertext Transfer Protocol. HTTP nuk është një gjuhë programimi. Kjo është më shumë një protokoll. Kjo është një grup i konventave që shfletues web dhe serverat e internetit përdorin kur intercommunicating. Dhe çfarë do të thotë kjo është si vijon. Ashtu si në botën e vërtetë, ne kemi këto konventa ku nëse ju i përmbushni disa të njeriut për herë të parë, në qoftë se ju nuk do mend mua humoring këtu, Unë mund të vijë deri te ju, thonë: "Hi, emri im është David." Hi >>, David. Emri im është Sammy. "Hi, David. Emri im është Sammy". Deri tani ne kemi angazhuar vetëm në këtë lloj protokolli budalla njeriut ku kam nisur protokoll, Sammy është përgjigjur, ne kemi tronditur duart, dhe transaksioni është i plotë. HTTP është shumë e ngjashme në frymë. Kur shfletuesin tuaj web kërkesa www.facebook.com, çfarë shfletuesi juaj është me të vërtetë duke bërë është shtrirë dorën e vet, në mënyrë që të flasin, në server dhe është dërguar atij një mesazh. Dhe se mesazhi është zakonisht diçka si të merrni - çfarë ju doni të merrni? - merrni mua home page, e cila është pėrcaktuara në mënyrë tipike nga një plagë e vetme në fund të një URL. Dhe vetëm kështu që ju e dini se çfarë jam duke folur gjuhë, unë jam duke shkuar për shfletuesi them që unë jam duke folur versionin HTTP 1.1, Dhe edhe për masë të mirë, unë jam duke shkuar për të ju them se presë që unë dua në faqen kryesore të është facebook.com. Në mënyrë tipike, një shfletues web, unbeknownst për ju, njeriut, dërgon këtë mesazh nëpër internet kur ju thjesht shkruani www.facebook.com, Të hyjë, në shfletuesin tuaj. Dhe çfarë do të të përgjigjet me Facebook? Ajo i përgjigjet me disa detaje të ngjashme-looking fshehta, por edhe shumë më tepër. Më lejoni të shkoj përpara për faqen Facebook në shtëpi këtu. Kjo është ekran që shumica prej nesh ndoshta kurrë nuk do të shihni nëse ju qëndroni të regjistrohet në të gjithë kohës, por kjo është me të vërtetë e tyre në shtëpi faqe. Nëse ne bëjmë këtë në krom, vini re se ju mund të tërheqë deri këto menutë pak kontekst. Duke përdorur Chrome, qoftë në Mac OS, Windows, Linux, apo si, në qoftë se ju klikoni Kontrolli ose kliko majtë, ju mund të tërheqë në mënyrë tipike një menu që duket si kjo, ku disa opsione presin, njëra prej të cilave është Shiko Burimi. Ju gjithashtu mund të merrni në mënyrë tipike për këto gjëra duke shkuar në menynë View dhe poking rreth. Për shembull, këtu nën View, Zhvilluesish është e njëjta gjë. Unë jam duke shkuar për të shkuar përpara dhe të kërkoni në faqen View Source. Çfarë ju do të shihni është HTML që Mark ka shkruar për të përfaqësuar facebook.com. Kjo është një rrëmujë të plotë këtu, por ne do të shohim se kjo ka kuptim pak më shumë para se të gjatë. Por ka disa modele këtu. Më lejoni të lëvizni poshtë për gjëra si kjo. Kjo është e vështirë për një njeri për të lexuar, por vini re se nuk ka këtë model të kllapa kënddrejtë me fjalë kyçe si opsion, me fjalë kyçe, si vlerë, disa vargjet e cituara. Kjo është ajo ku, kur ju nënshkruar për herë të parë, të përcaktuar se çfarë viti juaj i lindjes është. Kjo drop-down menu e viteve të lindjes është i koduar disi këtu në këtë gjuhë quajtur HTML, HyperText Markup Language. Me fjalë të tjera, kur browser-i juaj kërkon një faqe web, ai flet këtë konventë quajtur HTTP. Por çfarë do të facebook.com përgjigjet kësaj kërkese me? Ajo i përgjigjet me disa nga këto mesazhe të fshehta, siç do të shohim në një moment. Por më e përgjigjes saj është në formën e HTML, HyperText Markup Language. Kjo është gjuha aktuale në të cilën një faqe web është shkruar. Dhe çfarë një shfletues web të vërtetë nuk është, pra, pas pranimit të diçkaje që duket si kjo, lexon ajo lart poshtë, e majta në të djathtë, dhe çdo herë që sheh një prej këtyre kllapa kënddrejtë ndjekur nga një fjalen si opsion, kjo tregon se gjuha markup në mënyrën e duhur. Në këtë rast, ajo do të shfaqin një drop-down menu e viteve. Por përsëri, kjo është një rrëmujë të plotë për të parë. Kjo nuk është për shkak se zhvilluesve të Facebook manifestuar 0 për 5 për stilin, për shembull. Kjo është për shkak se shumica e kodit që ata të shkruajnë është, në fakt, i shkruar bukur, mirë komentoi, dhëmbëzuar mirë, dhe si, por e makinave natyrisht, kompjutera, shfletues të vërtetë nuk i japin një mallkim nëse kodi juaj është i mirë-organizuar. Dhe në fakt, kjo është plotësisht e kota për të goditur çelësi Tab gjitha ato herë dhe për të vënë komentet gjatë gjithë kodin tuaj dhe për të zgjedhur emrat e vërtetë përshkruese ndryshueshme sepse nëse shfletuesi nuk kujdeset, të gjithë ju jeni duke bërë në fund të ditës është humbur bytes. Pra, ajo rezulton se çfarë faqet e internetit më të bëni është të edhe pse Kodi Burim për facebook.com, për cs50.net dhe të gjitha këto faqet e internetit të tjera në internet janë zakonisht të shkruara mirë dhe të mirë komentuar dhe prerë bukur dhe si, zakonisht para internetit është vënë në internet, kodi është minified, ku HTML dhe CSS - diçka tjetër ne do të shohim së shpejti - Kodi JavaScript që ne së shpejti do të shohim është i ngjeshur, ku emrat e gjatë ndryshueshme bëhen X dhe Y dhe Z, dhe të gjithë asaj që e bën çdo gjë whitespace duken aq të lexueshëm është hedhur të gjitha larg, sepse në qoftë se ju mendoni rreth saj në këtë mënyrë, Facebook merr një miliard faqe godet një ditë - diçka e çmendur si kjo - kështu që çfarë nëse një programues vetëm të jetë anal goditi space bar një herë shtesë vetëm për të porosit një linjë e kodit ndonjëherë shumë më shumë? Çfarë është implikimi në qoftë Facebook ruan se hapësira të bardha në të gjitha bytes ata dërgojnë përsëri në njerëz në internet? Goditur space bar një herë ju jep një bajt shtesë në dosjen tuaj. Dhe në qoftë se një miliard njerëz pastaj do të vazhdojë për të shkarkuar në faqen kryesore atë ditë, sa më shumë të dhëna keni transmetohen në Internet? Një Gigabyte për asnjë arsye të mirë. Dhe u dha, për një shumë faqet e internetit kjo nuk është një çështje e tillë të shkallëzuar, por për Facebook, për Google, për disa nga faqet e internetit më të popullarizuara nuk ka nxitje e madhe financiare për të bërë kodin tuaj të duket si një rrëmujë kështu që ju jeni duke përdorur si bytes pak të jetë e mundur, përveç atëherë compressing atë duke përdorur diçka si zip, një algoritëm të quajtur gzip, se shfletuesi bën për ju automatikisht. Por kjo është e tmerrshme. Ne kurrë nuk do të mësojnë ndonjë gjë në lidhje me faqet e internetit të njerëzve të tjerë dhe si për të hartuar faqet e internetit në qoftë se ne duhet të shikojmë në atë si kjo. Pra, për fat të mirë, si shfletues Chrome dhe IE dhe Firefox këto ditë zakonisht vijnë me të ndërtuar në mjetet zhvilluesi i saj. Në fakt, në qoftë se unë të hyjë këtu për Inspect Element ose nëse shkoj për të parë, Zhvilluesin, dhe të shkojnë në Developer Tools eksplicite, kjo dritare në pjesën e poshtme të ekranit tim tani pops up. Kjo është pak frikësuese në fillim, sepse nuk është një shumë e skedave panjohura këtu, por në qoftë se unë klikoni mbi Elemente të gjithë rrugën në të majtë e poshtme, Chrome është padyshim shumë e zgjuar. Ajo e di se si për të interpretuar të gjithë këtij kodi. Dhe kështu ajo Chrome nuk është ajo pastron të gjitha HTML Facebook. Edhe pse nuk ka hapësira të bardha atje, nuk ka gjurmë atje, tani vëreni se unë mund të fillojnë për të lundruar këtë faqe interneti edhe më të hierarkike. Ajo rezulton se çdo faqe web shkruar në një gjuhë të quajtur HTML5 duhet të fillojë me këtë, kjo deklaratë DOCTYPE, kështu që të flasin: Kjo është lloj i lehtë dhe gri atje, por kjo është vija e parë të kodit në këtë dosje, dhe se vetëm tregon shfletuesit, "Hej, këtu vjen disa HTML5. Këtu vjen një web faqe." Kllapa e parë e hapur përtej kësaj ndodh që të jetë kjo gjë, një parantezë të hapur HTML tag, dhe pastaj, nëse unë thellë zhyten në - këto shigjetat janë krejtësisht të pakuptimta; ata janë vetëm për hir të prezantimit, ata nuk janë në të vërtetë në dosjen - njoftim se brenda tag HTML Facebook, gjë që fillon me një parantezë të hapur dhe pastaj ka një fjalë quhet një tag. Pra, në brendësi të tag HTML është me sa duket një kokë dhe një tag tag trupit. Në brendësi të tag kokë tani është një rrëmujë të tërë për Facebook sepse ata kanë shumë gjëra të tjera dhe metadata për marketing dhe reklamat. Por nëse ne lëvizni poshtë, poshtë, poshtë, poshtë, le të shohim se ku është. Këtu është. Kjo është të paktën disi i njohur. Titulli i faqes Facebook në shtëpi, nëse ndonjëherë ju shikoni në skedën në bar tuaj titullin, Mirë se vini në Facebook është - Log In, Sign Up ose mësoni më shumë. Kjo është ajo që ju do të shihni në shiritin e titullit Chrome, dhe kjo është se si ajo e përfaqësuar në kod. Nëse ne e injorojmë çdo gjë tjetër në kokë, shumica e guxim e një faqe web janë në trup, dhe kjo rezulton se kodi Facebook do të duken më komplekse se shumicën e gjërave që ne do të shkruaj fillimisht vetëm për shkak se ajo është ndërtuar gjatë viteve, por ka një tërësi shumë e etiketave script, kodi JavaScript, që e bën shumë të internetit interaktive: shohim përditësimet e statsit duke përdorur gjuhë menjëherë si JavaScript. Ka diçka quajtur një div, e cila është një ndarje e një faqe. Por, para se ne të merrni për këtë detaj, le të përpiqemi për zmadhim jashtë dhe të kërkoni në një version më të thjeshtë të Facebook 1.0, në mënyrë që të flasin. Këtu është hello, bota e faqeve web. Ajo ka atë deklaratë DOCTYPE në krye cila është një pak i ndryshëm nga çdo gjë tjetër. Asgjë tjetër kemi shkruar në një web faqe do të fillojë me për guximshme. Përsëri, historia është e njëjtë: hello, presje, filloni duke e bërë këtë të guximshme, atëherë bota merr të shtypura me shkronja të theksuara, dhe kjo do të thotë të ndaluar shtypjen këtë në bold. Më lejoni të shkojnë përpara dhe për të shpëtuar dosjen time, të shkojnë prapa në Chrome, unë do të zoom në vetëm kështu ne mund të shohim më mirë, dhe rifreskoni, dhe ju do të shihni se bota është tani në të theksuara. Web-i është mbi të gjitha hyperlinks, kështu që le të shkojnë përpara dhe të bëjë këtë: website im i preferuar është, le të themi, youtube.com. Shpëtuar, reload. Rregull. Ka një problem çift tani përveç shëmtim e internetit. 1, unë jam goxha i sigurt se unë hit Enter këtu. Dhe unë e bëri. Unë jo vetëm hit Enter, unë prerë edhe praktikimin e asaj që ne kemi qenë duke predikuar rreth stilit, por ime është e drejtë tjetër të botës. Pra, pse është kjo? Browsers vetëm bëni atë që ju them që ata të bëjnë. Unë nuk kam thënë browser ", linja Pushim këtu. Fut paragrafi thyejnë këtu." Pra shfletuesit, kjo nuk ka rëndësi nëse unë goditi Return 30 herë, ai është ende duke shkuar për të vënë të drejtën time tjetër të botës. Ajo që unë me të vërtetë duhet të bëni këtu është thënë diçka si
, të futur një pushim linjë. Dhe në fakt, një pushim linjë është lloj i një gjë të pazakontë sepse ju nuk mund të vërtetë të fillojnë të lëvizin në një tjetër linjë, pastaj të bëjë diçka, dhe pastaj të ndaluar lëviz në një linjë të re. Kjo është lloj i një operacioni atomike. Ju ose bëni atë ose ju nuk e bëni. Ju hit Enter, ose ju nuk e bëni. Pra BR është pak e një tag të ndryshme, dhe kështu që kam nevojë për të zgjidhur të dyja të hapura dhe të mbyllë atë të gjitha përnjëherë. Sintaksa për këtë është kjo. Teknikisht, ju mund të bëni diçka si kjo në disa versione të HTML, por kjo është vetëm budalla sepse nuk ka asnjë arsye për të filluar dhe të ndaluar diçka në qoftë se ju mund të bëni në vend të gjitha përnjëherë. Kuptojnë se HTML5 nuk kërkon në mënyrë rigoroze këtë plagë, kështu që ju do të shihni tekstet dhe burimeve online që nuk kanë atë, por për masë të mirë, le të praktikojnë simetri që ne kemi parë deri tani. Kjo do të thotë se është edhe tag hapen dhe mbyllen. Kështu që tani më lejoni të shpëtuar dosjen time, të shkojnë prapa këtu. Mirë, kështu që është filluar të duken më të mirë, përveç Web unë e di është lloj i klikueshme, dhe ende youtube këtu nuk duket të çojë në asgjë. Kjo është për shkak se, edhe pse kjo duket si një lidhje, shfletuesi nuk e di se në vetvete, kështu që unë duhet të them shfletuesit se kjo është një lidhje. Mënyra për të bërë këtë është të përdorni një spirancë tag: dhe më lejoni të lëvizë këtë në një rresht të ri vetëm kështu kjo është pak më i lexueshëm, dhe unë do të tkurret madhësinë e shkronjave. Jam bërë akoma? Nr Nuk do të jetë kjo dikotomi. Ky tag, tag spirancë, ka me të vërtetë të marrë një atribut, cila modifikon sjelljen e saj, dhe vlera e atë atribut është dukje URL YouTube s. Por njoftim dikotomi është se vetëm për shkak se është URL ju jeni duke shkuar për të, që nuk do të thotë se duhet të jetë fjala që ju jeni duke nënvizuar dhe duke e bërë një lidhje. Përkundrazi, kjo mund të jetë diçka si kjo. Kështu që unë duhet të them të ndaluar duke e bërë këtë fjalë një hyperlink duke përdorur tag ankorohen ngushtë. Njoftim Unë nuk jam bërë këtë. 1, kjo do të jetë vetëm një humbje kohe të gjithëve dhe nuk është e nevojshme. Për të mbyllur një tag, ju përmendin vetëm emrin e tag përsëri. Ju nuk përmend ndonjë prej vetive. Pra, le të shpëtojë atë, të shkojnë prapa. Mirë, voila, tani është blu dhe hyperlinked. Nëse unë click it, unë në fakt nuk shkojnë në YouTube. Pra, edhe pse web faqen time nuk është në internet, ajo është të paktën HTML, dhe në qoftë se ne le Interneti arrijë deri, ne fakt do të përfundojnë këtu në youtube.com. Dhe unë mund të ktheheni mbrapsh dhe këtu është web faqen time. Por këtë njoftim. Nëse ju keni marrë ndonjëherë spam ose një sulm phishing, tani ju keni mundësinë pas vetëm pesë minuta për të bërë të njëjtën gjë. Ne mund të shkoni këtu dhe të bëjë diçka si www.badguy.com apo çfarëdo website paqarta është, dhe pastaj ju mund të them verifikuar llogarinë tuaj PayPal. [Qeshur] Dhe tani kjo do të shkojë në badguy.com, të cilën unë nuk jam duke shkuar për të klikoni në sepse unë nuk kam asnjë ide se ku të çon. [Qeshura] Por ne tani kemi aftësinë për të vërtetë deri në fund atje. Pra, ne jemi me të vërtetë vetëm duke filluar për të zeroja sipërfaqe. Ne nuk jemi programimit në vetvete, ne jemi me shkrim Markup Language. Por sa më shpejt që ne e rrumbullakët fjalorin tonë në HTML, ne do të prezantoj PHP, një gjuhë programimi aktuale që do të na lejojë për të gjeneruar automatikisht HTML, CSS gjenerojë automatikisht, kështu që ne mund të fillojnë të mërkurën për të zbatuar, të themi, motor kërkimi tonë dhe më shumë. Por më shumë se në disa ditë. Ne do të shohim ju pastaj. [CS50.TV]