[9 §] [mukavampaa] [Rob Bowden] [Harvardin yliopisto] [Tämä on CS50.] [CS50.TV] Selvä. Periaatteessa nyt se kaikki on sinun kaverit kysyä muutamia kysymyksiä. Saatan pystyä vaeltaa joitakin aiheita ja vähän, jos kenelläkään ei ole kysymystä. Toivottavasti teet. Onko kellään mitään kysyttävää? Ehkä aiemmista tietokilpailuja, mitä et ole tyytyväinen tällä hetkellä. Kyllä. [Opiskelija] Voitko mennä yli puskurin ylivuoto hyökkäyksiä? [Rob] Toki. Tärkein esimerkki oikeastaan ​​voisi olla täällä. Tärkein juttu takana puskurin ylivuoto hyökkäyksiä ovat meillä on joitakin puskuri, täällä. Char c - joka on vain koko 12 - mutta sitten asennat jotain tuohon puskuriin mutta ei tarkista kuinka paljon olemme lisäämällä. Täällä asetat strlen (bar) tulee C, mutta kuka tietää kuinka kauan baari on. Jos se on pidempi kuin 12 merkkiä niin tämä on menossa ylivuoto tähän puskuriin. Tarkasteltaessa tätä kuvaa - jos otat 61 saat paljon tutumpi tällaista layout ja käsittelee tallennettu runko osoitinta ja lähettäjän osoite sekä vanhempien rutiinia pino ja kaikki nämä todellisia asioita. Mutta täällä sinun tarvitsee vain tietää, että meillä on tässä vähän tilaa meidän puskurin. Tässä meillä on c (0), ja sitten meillä on c, 1, 2, 3, 4, 5 ja niin edelleen. Normaalioloissa olisimme täyttää tämän puskurin tavalliseen tapaan. Jos me lisätään "hei" olisimme h-e-l-l-o / 0, ja sitten vain nippu tyhjää tilaa. Hakkeri - oh, kai tämä on esimerkki. Hakkeri saamme jotain tällaista, jos mitä he nimenomaan yrittävät tehdä, on yleensä ohittaa palautusosoite. Aina kun otat toiminnon ja pinokehyksen saa työnnetään pinoon että pinokehyksen on tiedettävä, miten - hyvin, toiminto, joka on kutsuttu on osattava palata toiminto, kutsui sitä. Joten, jos tärkeimmät puhelut foo foo tarvitsee palata päävalikkoon, ja niin sitähän tämä palautusosoite tekee. Mutta mitä hakkeri tulee tehdä, on ohittaa sen erityisellä lähettäjän osoite jos taas - Pikku Indian - se ei ole yksinkertaista, mutta jokainen tavu on taaksepäin. Tämä paluuosoite niin pitkälle kuin tietokone on huolissaan palaa tähän osoitteeseen vastaa paluuta fooksi tai pääasiallinen tai mitä toimintoa kutsui sitä. Joten se tulee palata tähän osoitteeseen joka vain niin sattuu olemaan tähän osoitteeseen jotka joko joskus mitä he tekevät tässä käyttää paluuosoite tietyn tehtävän, että he tietävät on jo olemassa. En muista mitä toimintoa kutsutaan. Minä katson sen myöhemmin. Tässä mitä he tekevät on ohi paluuosoite pinoon itse, ja se on jonkin verran outo, jossa on olemassa esimerkkejä muisti, johon - Muistia voidaan jaettu vain luku-, luku-ja kirjoitusoikeudet, ja executable muistia jossa olemme nähneet vain luku-muistiin ennen, jos - jos sanon char * s = hei en voi muuttaa hei. Se on vain luku-muistia. Mukana on myös tämän ajatuksen ajettavan muistia jossa suoritettavan muisti olisi tekstin osioon koodia. Tarkasteltaessa tavallisesta osoiteavaruus layout - Uskon, että tulee olemaan hyvä kuva - tämä toimii - jos meillä on pino tänne. Meillä on tietoja muistiin. Ohita tämä periaatteessa. Tämä on meidän kasaan. Ja sitten meillä on täällä meidän tärkein ohjelmakoodia. Tämä on samanlainen paikka, jossa panemme jousille kuten char * = hei Ja se on vain luku-. Mutta voit myös merkitä tämän pääohjelma koodia suoritettavaksi. Ja jos teet niin tai käyttöjärjestelmä tekee sen oikein niin tämä olisi ainoa paikka muistiin että koodin voi itse suorittaa mikä tarkoittaa, että tällainen puskurin ylivuoto hyökkäys meillä on täällä olisivat tehottomia, koska tämä yrittää toteuttaa muistia jopa täällä meidän pinossa. Huomaa kuvat ovat ensin. Meillä on pino kasvaa. Tässä pino kasvaa alaspäin. Sillä CS50 tarkoituksiin pino kasvaa. On mahdollista kiertää tämäntyyppisen puskurin ylivuoto kun nämä suoritettavia alueilla muistia ei suoriteta alueilla. Mutta se vain niin, että harvoin on suoritettavissa muistiin merkitty suoritettavaksi. Se vain on yleensä vain luku-ja re-write ovat vain asioita, joita käytetään, joten tämä on edelleen erittäin tehokas. Ja tässä voisimme laittaa mitä haluamme. Se ei ollut itse tehnyt niin Pset 61 tänä vuonna, mutta jos tarkastellaan viime vuoden tarjontaa sitä tai minään aikaisempana vuonna yksi Pset on olet nimenomaan tarkoitus lisätä tänne koodi, joka on tarkoitus tulostaa tiettyjä arvo tai palauttaa arvon, joka eroaa arvo, joka on tarkoitus tulostaa. Tai jopa enemmän taitavasti, se haluaa sinun soittaa tai kirjoittaa - joten tämä palaa jopa täällä ja sitten voit suorittaa joitakin koodaus täällä, ja taitavin Ylivuotojen palaa sitten mitä tämä palautusosoite aiemmin. Joten vaikka meidän piti ohittaa tulemaan tänne, me silti muistaa, että paluuosoite jonnekin jotta voimme palata päävalikkoon tai mitä tahansa, ja se on kuin emme koskaan edes huomannut, että asiat menivät pieleen. Mutta asiat teki niin näin on silloin ehkä sisällä täällä me gelbroke meidän iPhone. Asiat menevät normaalisti - kuten me ajaa joitakin ohjelman ja asiat päätyvät palaamassa mitä sen pitäisi palata, mutta sillä välin olet onnistunut tuhoamaan koko käyttöjärjestelmän. Sinun ei tarvitse tietää koodia koskevat puskurin ylivuotoja tai oikeastaan ​​hyödyntää sitä. Sinun täytyy tietää perusajatuksia tämä on puskuri, joka on tulvivat, ja tämä on syy, että se voidaan vuodattaa koska emme selvittämättä olemme itse asiassa rajoissa se. [Opiskelija] ratkaisu, jolla ehkäistään se on vain tarkistaa rajoja? [Rob] Kyllä. Tässä tapauksessa ratkaisu olisi voit joko sanoa jos strlen baari on suurempi kuin 12-1 - koska tarvitset / 0 lopussa - tai voit manuaalisesti tehdä varten silmukka, joka vain kopioi ensimmäisen 11 merkkiä, tai mitä tahansa, missä olet todella Varmistamme et ylivuoto että puskuri. Muita kysymyksiä? Kyllä? [Opiskelija] Voitko kertoa maissa ja ehkä jotain ohjelmoinnista (ei kuulu). [Rob] Toki. Varsinainen ohjelma - emme koskaan saada sinut tekemään täytäntöönpanoa trie tentti koska se olisi epäoikeudenmukaista niille, jotka tekivät hash taulukoita. Ja vastaavasti emme koskaan tee sinusta toteuttaa hash taulukon tentti koska se olisi epäoikeudenmukaista niille, jotka tekivät yrittää. Sinun pitäisi kuitenkin tietää struct of trie tai struct hash taulukon tai mitä tahansa. Se on todella totta minkäänlaista tietorakenteen olemme nähneet. Liittyy luettelot, pinottu vinoudet, binääripuut - sinun pitäisi pystyä määrittelemään niitä structs ulkoa. Triestä - se tarkoittaa, että ainoa asia, sinun tulee tehdä, on ehkä me annamme sinulle Joissakin sana tai jotain ja me sanoa rakentaa triestä että - annamme sinulle ehkä sanajoukko ja olemme kuin rakentaa triellä joka edustaa tätä sanakirja. Tehdään sanakirjastamme kissa ja koira. Ajatus trien on aloitamme tällä array - 26 paikkaa - ja kussakin välissä todellinen indeksi raon kirjainta vastaava olemme huolissaan. Joten tässä, jos yritämme lisätä kissan meidän triestä ensimmäinen kirjain "c", joka tulee olemaan ", jos on 0, niin b on 1, c on 2". Aiomme mennä toiseen indeksi, ja aiomme luoda triellä pois tuosta. Aiomme olla 26 paikkaa. Ja sitten aiomme indeksin toinen merkki kissan. Se on "", joka tulee olemaan 0 paikalla. Ja se tulee olemaan 26 paikkoja. Sitten menemme 't' ja meidän olisi myös, että tulossa alas joka on itse asiassa eräänlainen tärkeä koska - Katsotaan se tänne ylös. Tässä meidän triestä varten 't'. Sanotaan tämä on indeksi 't' 19. Tärkeintä on muistaa noin yrittää on et voi vain seurata näitä viitteitä. Sinun on myös seurata, onko tämä todella sanan loppuun. Joten, sisällä täällä tarvitsemme jonkinlaisen lippu, jossa lukee Okei, tämä on todella sanan loppuun. Syynä on, jos myöhemmin yrität lisätä katastrofaalinen meidän sanakirja , jolla on sama alkaen 3 merkkiä mutta menee edelleen meidän on tunnustettava, että tämä on sanan lopussa. Tai vaihtoehtoisesti jos yritämme etsiä "ca", joka ehkä ei ole sana mutta pääsemme tänne meidän - Vai olisiko c ja sitten katsomme - Meidän on tunnustettava, että vaikka siellä on osoitin tulee ulos tämän solmun se ei edusta sanan lopussa. Joten, mitä se tarkoittaa - mitä aioit sanoa? Mitä se tarkoittaa meidän struct näyttää? [Opiskelija] Se on joukko vihjeitä, jotka on 26 pitkä ja sitten bool olivat tai eivät olleet. [Rob] Joo. Niin, meillä on struct triellä * viitteitä - tässä me sanoa [26] annetun ja sitten puolipiste tänne. Mutta Pset, meidän on myös osuus heittomerkkien mikä tarkoitti sinun piti koodata että heittomerkki, jonka indeksi on 27 tai jotain. Mutta täällä me vain välitä 26. Ja sitten me tarvitsemme ehkä nieriää tai bool - kutsukaamme sitä on sana. Se on 2 3 asioita mielestäni sinun pitäisi koskaan tarvitse tietää yrittää - rakennamme ne, struct niistä, ja viimeinen asia on ajonaikaisen niistä. Mikä on runtime trie - tai lookup triestä? Tämä on, jos sanomme se o (k), missä k on pituus sanan satumme etsimisessä; mutta samalla sanomme - ainakin Pset 5 aapinen tähden - sanomme pisin sanan sanakirjasta on 45 merkkiä, joten tämä on periaatteessa O 45, joka on pysyvä aikaa. Joten, jos on yläraja teidän pisin sana sitten - tai edes pidä Englanti sanakirja - on yläraja teidän pisin sana. Tai missään sanakirjassa - on pisin sidottu teidän ylempi sana. Ei ole väliä mitä teet on vakio aikaa, mutta O k on mukavaa, koska siellä oikeastaan ​​on ero käynnissä sanoa 45-merkkinen sana vs. aakkoset, jossa on vain sanoja korkeintaan 3 merkkiä. Toinen asia, joka on se, että - oh, koska vain sanomalla, että 45 sattuu olemaan meidän pisin sana on tavallaan typerä, koska samaan aikaan sanotaan algoritmi on O N. No okei, koska muisti tukee enintään 2 ^ 32 tavua, sitten N on korkeintaan 4 miljardia euroa ja se on jatkuva aika, minkä vuoksi jossain vaiheessa se on typerää sanoa tällaista asiaa missä on yläraja että voimme vain vähentää jatkuvasti aikaa, koska kaikki on vakiona aika kun ajattelee sitä tällä tavalla. Mutta olisimme luultavasti tulee molempia näistä. Joka tapauksessa selittää, että joko O (1) tarkoittaa olet ylempi rajoitetuilla pituus sana; O (k) tarkoittaa pituutta sana - No, k tarkoittaa pituutta sanan. Joo. [Opiskelija] Onko bool - sillä kun olet tehnyt triestä se tuntui kuin se oli - menisit kissa ja sitten siirtyä seuraavaan osoitin ja sitten kertoa, jos se on yhtä totta - voisitko laittaa että totta kuten kanssa t? [Rob] Ajatellaanpa näin on silloin paljon esimerkkejä voit vain yrittää keksiä yksinkertainen ja / tai äärimmäiset esimerkit ja mitä sen pitäisi olla, joten katsotaanpa ajatella sanaa "". Meidän alkuperäinen triestä - haluaisimme laittaa 1 täällä, tai olisimme halua laittaa 1 täällä. Sanoisin, että loppujen lopuksi se olisi todennäköisesti joko / tai. En voi ajatella syystä - tai oikeastaan ​​olet wouldn't - syystä en sanoisi sitä siellä on, koska sinun ei tarvitse edes mennä näin pitkälle. Emme koskaan tarvitse varata tämän triellä. Me vain laittaa 1 sinne. Tämä on edelleen osoittaa null. Jos me vain olemaan yksittäisiä merkkejä ei ole mitään syytä laajentaa alaspäin toiselle triestä vain merkitä, että kirjeen käytettynä. Samoin, jos olisimme laittaa "" siellä Sitten välttämättä kaikki nämä olisi vain 0 kaikkina aikoina. [Opiskelija] Mutta emme tarvitse alkaa triellä jotka kohta tähän ''? [Rob] Meillä on joitakin maailmanlaajuisia tai jotain struct triestä * t mikä viittaa täällä, mutta se on vain osoitin. Se ei ole täysimittainen triestä joka osoittaa sen. [Opiskelija] Okei. Kuinka voisimme antaa kirjain "I'- sanalla I? [Rob] Hänen kysymys voitaisiin vastata siihen. Pidä kiinni. Tämä on asia, jossa trie ja sinänsä - En tiedä miten Pset olisi kirjoittanut sitä. Edellisen struct oli huono. Mutta voisimme myös tehdä struct solmu on bool - ja osoitin - siellä on todella useita tapoja voit kirjoittaa sen. Vaihtoehtoisesti trie ei tarvitse olla struct. Se voisi jopa olla triestä - typedef solmu * - solmu [26], on trie, ja tämä ei ole enää struct. Nyt siellä tulee olemaan - Yritän ajatella niin, että Pset olisi odottanut sinua. [Opiskelija] Olen revitä, että tarkastelu istunto ja mielestäni he vain mennä - kuten jos sinulla on niin voit siirtyä seuraavaan - [Rob] Niinhän he tekevät sen? [Opiskelija] Ja sitten jos on totta siellä se ei toimi - [Rob] Joo. Se ei toimi. Se tuhlaa tilaa - Välttämättä on kokonaan toinen taso triestä, että sinun ei tarvitse ensiksi. Täällä se alkaa ruma keskenään - periaatteessa mitä yritän tehdä täällä on osakkuusyritys - sen sijaan, että 26 osoittimia sinun yrittää, se on 26 bool osoitin, bool osoitin, bool osoitin, ja niin edelleen. [Opiskelija] Et voi tehdä, että 2 paneelit? Joukko bools ja joukko osoittimia? [Rob] Voisit mutta silloin kyllä ​​täytyy - 2 ryhmät booleans ja viitteitä. Sinun pitäisi sitten rakentaa erilaisia ​​booleans - oma joukko booleans on oltava yhtä suuri kuin triestä koska et voi vain olla 26 booleans. On kasvaa jokaisen mahdollista - pidät triestä on yli 26 tosi tai epätosi mahdollisia sanoja. Tuolloin he voivat yhtä hyvin olla yksittäinen struct että triestä kasvaa alas. Tämä ei tunnu oikealta, koska - mitä haluan täällä? Joten, triestä * t - voit tehdä typedef (solmu *) [26] triestä; että voisi olla syntaksin etsin. Ja tämän pitäisi olla vain tavallinen triellä. En ole varma. Mutta niinhän me teimme sen tarkastelua, niin että toimii täydellisesti hieno myös. Jolloin se on vain bool on sana ja sitten joukko 26 niin sinun täytyy mennä seuraavalle tasolle. Mietin miten tekisin sen. Muita kysymyksiä? [Opiskelija] Voinko kysyä jotain muuta? [Rob] Kyllä. [Opiskelija] Voitko mennä yli, mikä ero on, ja kun haluat käyttää jQuery vs. Ajax? [Rob] Ne ovat ja itse täysin erilainen. JQuery tekee mahdollistavat Ajax. Se antaa meille hieman helpompi käyttää Ajax. Mutta Ajax tulee mukana toimitetaan JavaScript. JavaScript on Ajax valmiuksia. Kaikki Ajax tarkoittaa Liken Olen jo sivulle ja kun haluan - kun klikkaa jotain mitä ei tarvitse ladata sivun lataaminen, että uutta tietoa. Minä vain pyytää, että uutta tietoa. Voit katsoa sitä Facebookissa tai jotain. Tarkasta verkkoon. Shrink tätä. Täällä me näemme, että olemme pääsemässä kaikkia näitä pyyntöjä. Nyt kun klikkaa - no, se tekee Ajax ennen kuin edes klikkaa mitään. Mutta jos minä klikkaa tätä, niin se tulee tehdä nippu pyyntöjä täällä joka vain tekee näitä pyyntöjä - Voi, nyt se on täällä. Katsotaanpa virkistää. Tämä uudelleen. Näemme, että saamme kaikki nämä pyynnöt, mutta tämä voisi vielä olla prosessissa sivujen latautumista. Huomaa Facebook tekee näitä jatkuvasti pyyntöjä senkin jälkeen sivu on ladattu. Ja jos klikkaan tästä, se tulee tehdä lisää pyyntöjä joitakin tietoja että on vastaus mitä olen vain seurannut. Tuon juuri Ajax on. Sen avulla voit vetää tiedoista, ei ladattu kanssa sivun alunperin. JQuery on erillinen. JQuery on vain JavaScript-kirjasto, joka tekee paljon asioita helpommaksi. JQuery se on paljon etu on tämä vain - dollarimerkki - dollarin merkki on kelvollinen muuttujan JavaScript. Joten, jQuery - kaikki se tekee sanoo kuten var $ = läjän tavaraa - kuten isoja funktion kaikki jutut siinä - ja sitten käytät että dollarin merkki sellaisilla tavoilla $ ("# Footer"). Tyyli ("text-align", "center"). JQuery antaa meille tällaisen syntaksin jossa suuri etu - se on muita ominaisuuksia, mutta mitä haluamme keskittyä kaikkein on vain pysty valita elementtejä, kuten tämä. Säännöllisesti, tavallinen vanha JavaScript voit tehdä asioita, kuten asiakirja-dot-get elementin ID footer-dot - En tiedä, mitä se on tässä vaiheessa - jotain CSS tai tyyliä tai jotain - mutta sitten vaihtoehtoisesti, sanokaamme halusimme valita luokittain. Nyt olemme muotoilu kaiken luokan footer on tämä tyyli. Vaikka halusimme tyyli tahansa kohdassa. Niin, tämä valitsin - pysty valita asioita dom, kuten tämä on uskomattoman kätevä koska tavallinen vanha JavaScript sinun pitäisi tehdä asiakirja-dot-get elementit luokan nimi tai mikä se on, tai jos halusin tag olisin täytyy sanoa saada elementtejä tunnisteen nimi. Joten, minun täytyy tietää erityisiä tapoja että käytän kaikkia näitä asioita. Toiminnot tulevat olemaan erilainen riippuen siitä olen käyttäen luokkaa tai tunnus tai tagi tai mitä, kun taas jQuery vain tekee sen minulle. [Opiskelija] Onko jQuery aiotaan käyttää, kun teet alkuperäisen styling sivun? Tai muuttaakseen muotoilu jälkeen se on jo - [Rob] muuttaa sitä. [Opiskelija] Kun se on jo ladattu. [Rob] Joo. Ensimmäisiä styling - hyvin, vaikka - yleensä käyttäisit tämän kaltaista muutosta. Sinulla ei muutu - tämä toimisi täysin kunnossa. Mutta yleensä ei muuttaisi tyyliin kuin tämä. Sen sijaan haluat antaa sille uuden luokan tai jotain ottaa huomioon, että CSS on jo määritelty tämän luokan tietyllä tavalla. Antamalla nämä erät Olen valitsemalla uusi luokka Haen tyylejä, jotka ovat jo ladattu. [Opiskelija] Joten valitset pari valintaruudut ja asioita, joita olet valinnut vaihtaa uusi tyyli ja alkaa etsiä erilaisia. [Rob] Joo. Muita asioita muistaa - No, on olemassa useita toimintoja kannattaa muistaa noin jQuery. Sanotaan, että me valitsemme jotain ID s. [Opiskelija] Onko sinulla aina käyttää punnan? [Rob] Tämä tarkoittaa tunnus. Sen vastaavan CSS, joten CSS valitsimet - se on innoittamana että. Missä CSS jos halusin tyyli footer - tai jotain ID footer - se olisi sama kuin text-align: center; sinun ei tarvitse kirjoittaa CSS tentti, mutta sinun täytyy tietää valitsimet. Sinun täytyy tietää, mitä - sinun täytyy osata lukea sitä. Mutta emme koskaan - sinun ei tarvitse muistaa kaikki mahdolliset eri tyyli asioita. Tai jokin niistä. JQuery asioita, sinun pitäisi muistaa - kannattaa muistaa dot-HTML, ja yhteinen malli jQuery - Katsotaan uudelleen kirjoittaa tätä. Yhteinen malli on olemme $ ("# f"). Html Jos laitan pelkkää sulkeisiin tarkoittaa saada HTML; ottaa huomioon, että jos sanon HTML ja laittaa mitä haluan tänne - jotkut linkki jotain - laskemisesta jotain sisällä suluissa nyt asettaa HTML. Se on melko yleinen keskuudessa joukko toimintoja. On sama käsitellä tekstiä. Ero HTML ja teksti on, että teksti tulee syöttää tämän kuten kirjaimellinen vähemmän kuin, suurempi kuin-eikä omaksi ankkuri tag. Ja tekstin tulee olemaan sama, jos minä vain tehdä tätä. Se tulee hakea asiakirjan tekstin - ei HTML asiakirjan mutta vain tekstin tätä elementtiä. Toinen on, jos "f" sattuu olemaan tunnus syöttö, Sitten hash-F-dot-val - jos haluan asettaa panos jotain - sanokaamme osuin valintaruutu ja haluan asettaa oletusarvo - dot-val - En edes tiedä - 3 - siten, että lisää automaattisesti tekstikenttään 3, mutta jos sanon 3-dot-val, joka hakee mitä on tällä hetkellä tekstikenttään minulle. Tämä on hyödyllistä muodossa validointi, jossa jos haluan vain varmistaa, että he todella täytetty kaikkia asioita. Yksi tapa tehdä se on jos sen jälkeen osuin esittämään se väistämättä lähetettiin noin sivun palvelin - kuten meille se olisi PHP - ja joka yrittää käsitellä tietoja ja se sanoisi ne eivät täytä jotain, niin että nyt ohjaa heidät toinen sivu, joka kertoo et täyttänyt kaiken pois. Sen sijaan, tehdä, että JavaScript / jQuery voit vain nähdä, jos val on tyhjä. Vai onko val - tyhjä lainausmerkkejä. Että menee juuri - nyt voimme varoittaa heille, että et täytä tämä kenttä. Väistämättä sinun täytyy tehdä PHP server-side tarkkailun vuoksi voit vain poistaa JavaScript kaikissa selaimissa. Mutta JavaScriptin avulla on kätevä niille, jotka eivät ole sitä käytössä, ja lähes yhdeksänkymmenen yhdeksän pisteen-jotain prosenttia selaimissa on se nykyään. Hyvin harvat ihmiset kääntyvät JavaScript pois. Se on käyttömukavuutta. Sinun täytyy tehdä PHP validointi. Sinun pitäisi tehdä JavaScript validointi. [Opiskelija] Mitä # f viitata täällä? [Rob] Mitä # f viittaa? On joitakin osa minun dokumentin ID "f". Tutustumme - luultavasti Facebook on runsaasti esimerkkejä siitä, jos tulen elementtejä katson tässä alla elementit tag näen tässä div joka on tuotu esiin täällä - vai onko se koko sivun - Joo, se on siellä. Tämä on tunnus pagelet_bluebar. Konsoli Oletan he käyttävät jQuery. Joten, voisin valita pagelet_bluebar niin, että valitsee sen, ja tein jotain väärin. Kokeillaan - tai ehkä he eivät käytä jQuery ja että hahmon kartoitettu jotain muuta. Paremmin esimerkiksi jotain tiedän käyttäen jQuery - etsii edelleen meidän elementtejä täällä - meillä on tässä luokassa vastaa navbar. Tämä on jotain luokan navbar, niin sisällä meidän konsolin voimme etsiä juttu luokan navbar. Täällä voimme vierittää tänä ja nähdä, sitähän tämä on. Jos haluaisin tehdä. Teksti Tämä on teksti, että niin näen asetukset kertomuksen edellä Kirjaudu ulos jotka ovat kaikki alle täällä, mutta se on silti tekstiä että HTML-tunnisteen. Voisin asettaa HTML vain tietty yhteys, niin minä päästä eroon minun bar. Nyt kun pääsi eroon otsikon kokonaan juuri niin se liittyy YouTube. Ja onko minkäänlaista esimerkkiä? Tässä muodossa. Voin hiiren kakkospainikkeella ja tarkastaa elementin tulla sen täällä. Näen, että sen tunnus on tekstihaku, joten täällä jos teen ID tekstin haku. Tuon sen yli ja näen, että on oikea asia, olin etsimässä. Jos haluan tehdä. Val se antaisi minulle, mitä olin kirjoittanut sinne. Jos haluaisin tehdä hei se muuttuu sitä täällä hei - jQuery. Tietenkin voisin tehdä naurettavaa kuin document.get elementin ID - text search - En edes tiedä, mitä se on tässä vaiheessa - pistearvoa - En, unohdin että kaveri. Niin, että on hei. En tiedä, miten olisin asettaa se vastaa jotain. Joo, niin että muuttanut tätä. Mutta sinun ei tarvitse käyttää näitä ja erittäin monet sivustot tässä vaiheessa käyttöön jQuery. Edes pidä siitä opinnäytetyön - jos teet Web-hanke - Ensimmäinen asia Suosittelen on juuri kuten jQuery niin saat kätevästi kaikki nämä toiminnot. [Opiskelija] Taisin nähdä eri tapa päästä elementin avulla dom. Onko sinulla käyttää piste ja sitten pitää menee alas? [Rob] Voit tehdä sen. En tiedä, jos se toimisi hyvin. Se on vaikea liikkua niin. Yksi esimerkki on - En edes tiedä, onko meillä mitään muotoja - mutta document.forms aikoo palata luetteloon muotoja, jotka on tällä sivulla, sitten voin tehdä document.forms 0 tulee olemaan ensimmäinen muoto. Dot - En tiedä, mitä me olemme kutsuneet että - niin se ei ole edes nimeä, joten ehkä tuotantopanosten toimii. Ei. En edes tiedä, miten saada tämä - saada elementti-I-tunnisteen nimen syöttö. Joo, joka antoi minulle tulo, ja nyt haluan 0 syöttää ja haluan valita sen arvon, niin että tulee olemaan tekstiä. Jouduin lopulta tekevät get elementit tunnisteen nimi muutenkin. Saattaa olla joitakin tapa valita suoraan kautta muodossa 0, mutta Kiva juttu tämä on edelleen kuin minulla oli vain päästä tageja nimeltään tulo jotka olivat lapsi tämän lomakkeen, muutoin jos en vain, että suoraan edessä tämä olisi valita kaikki elementit koko sivun koko asiakirja eikä vain että muoto ja se luultavasti ei edes yksi haluan. En edes tiedä kumpi se on. En tiedä. Luulen että ensimmäisen syöttöosassa sivuillemme on tämä pieni valintaruutu. [Opiskelija] Tämä on melko liity ja mahdollisesti sellainen typerä, mutta vastaus avain sanotaan, että PHP - En tiedä, onko se vastaus avain tai muistiinpanoja, mutta se sanoo PHP on palvelinpuolen ja JavaScript on client-side. Mikä on ero 2? [Rob] Ero JavaScript client-side ja PHP server-side. Jos olet kuullut slash / käytetty solmu js ennen luulisi, että JavaScript ei ole vain client-side mutta CS50 varten se on - tai ainakin tämän tietovisan tarkoituksiin se on. PHP on server-side. Ei JavaScript. Kun kirjoitat verkkosivun sinun tulee kirjoittaa PHP palvelimella. Et koskaan olla kirjallisesti JavaScript palvelimelle. JavaScript päätyy saada lähetetty selaimelle, jossa JavaScript koodi suoritetaan. Ja JavaScript-koodi tarvitsee elää selaimessa koska muuten kun haluan vain tehdä minkäänlaista JavaScript-y asia kuin Klikkaamalla tätä, En uudelleenlastaus sivu. Tämä on vain JavaScript alustamisen uudelleen asioita minulle. Jos JavaScript asui palvelimelle, niin olisin täytyy väistämättä pyytää jotain palvelimen tietää mitä tehdä. PHP - ei ole olemassa sellaista asiaa kuin PHP selaimessa. Kun pyydän sivu - joten haluan tässä sanoa, pyysin tämän tietyn sivun. Tämä tarkoittaa, että tämä tulee pyytää - virkistää - se tulee päivitä tämä sivu - joten tämä pyyntö sammuu palvelimelle. Se näkee, että se tarvitsee palata tähän nimenomaiseen säiettä tämän nimenomaisen ID, Joten nyt, että tulee olemaan joitakin PHP että PHP tulkki on menossa tulkita, että sivulle ja muuntaa se vain HTML, CSS, ehkä JavaScript riippumatta. Se on PHP, joka käsittelee pyynnön ja hakee kaikki teksti ja tavaraa että olen todella etsivät tietokannasta. Mutta mitä lähtee palvelin on vain HTML / JS / CSS. Ei ole PHP, joka jättää palvelimelle, koska jos se todellisuudessa teki sitten selain olisi aavistustakaan, mitä tehdä sen kanssa, koska se ei tiedä, mitä PHP on. Mutta sama ajatus, koska JavaScript on client-side, et voi koskaan käyttää MySQL siitä. Koska PHP on palvelinpuolen et käyttää MySQL siitä. [Opiskelija] Voitko mennä yli joitakin turvallisuuskysymykset evästeet HTTP? [Rob] Ne eivät ole asioita aiomme tarvitse tietää. Jotkut turvallisuuskysymykset evästeiden HTTP. Iso kysymys on tässä näemme, että minun eväste on PHP / tunnus. Se on kuin universaali PHP istunto. Istunto on jotain, että sisällä PHP ei tarvitse koskaan validoitava koska se on palvelin, joka on kokonaan haltuunsa istuntoon. Et voi koskettaa sitä ollenkaan. Mutta se on tämän evästeen - tämä - ja kai voisi kirjaudut sisään minua juuri nyt, jos halusi käyttää sitä - mutta se, että eväste - väistämättä teet yhden pyynnön palvelimelle. Palvelin palauttaa sivun. Pyyntö on tehty. Se ei enää ole mitään käsitystä, kuka olet. Joten seuraavan pyynnön teet aikoo sisällyttää kyseisen evästeen niin, että se tietää Tämä on henkilö, joka teki tämän pyynnöstä ennen. Tämä on istunnon dataa, joka liittyy tämän käyttäjän. Siksi sinun ei tarvitse kirjautua jokaisen sivun käytät. Tietoturvaongelma tässä, että eväste lähetetään ulos webissä. Käytämme HTTPS täällä, joten tässä tapauksessa se tarkoittaa, että olemme salata tätä kamaa. Joku voi tulla ja vain varastaa minun evästeen ja nyt palvelin luulevat minua. Mutta suoralla HTTP he voivat. Juuri näin Wireshark / Firesheep kamaa, että voit vain kuunnella kaikki wi-fis ilmassa ja siepata mitä haluat, niin joo. [Opiskelija] tavallaan samanlainen turvallisuusriski on tallentaa käyttäjän ID: n jälkeisissä koska se voi vapaasti muokata käyttämällä konsolit ja asioita. [Rob] Kyllä. Ei paljon asioita, joissa, kuten juuri mitään, tulee käyttäjän sinun täytyy vahvistaa. On paljon tapauksia, joissa olisi hyödyllistä kuin olen aikeissa tehdä postitse. Blaa, blaa, blaa, blaa, blaa. Sitten osuin vastauksen. Olisi erittäin hyödyllistä, jos viesti pyyntö sisältyy henkkarini koska  Haluan liittää tähän virkaan kanssani. Mutta en voi tehdä sitä, koska olen vapaa tekemään post pyynnöstä - aivan kuten manuaalisesti keksiä oman post pyynnöstä - joka käyttää käyttäjätunnuksesi ja nyt se lähettää niin sinua. Siksi server-side En voi luottaa POST-pyynnöt sisältävät oikea käyttäjätunnus. Siksi se on kuulu minun istuntoon. Joten katson ylös käyttäjätunnuksesi minun istuntoon array ja asetan että minun tietokantaan kuin käyttäjä, joka todella teki tästä viestistä. [Opiskelija] Ja se perustuu omaan eväste? [Rob] Joo. Se käyttää evästeen sovittaa sinulle kuin käyttäjä, joka teki tämän pyynnön. Se vetää pois käyttäjätunnuksesi että istunto ja että lisää sitten tietokantaan käyttäen, että käyttäjän tunnus. Tämä kuten painike - mitä se on oikeastaan ​​teemme on - En aio löytää sen täältä. Se tulee olemaan Ajax toiminto Mikä on Ajax-toiminto? Saanen selvittää, mitä minun JavaScript on. Se oli CS50 projektin aikaa sitten. En muista mitä se on. Ajax-toiminto - kaikki Ajax-toiminto tekee tekee Ajax pyyntö sivun jossa tämä ID - ID-22453. Se ei ole edes post pyynnöstä. Se on GET-pyynnön, joka tekee siitä entistä helpompaa. Jos tietäisin, mitä URL-osoite on - se on jotain tällaista / ID = 22453 - tai? ID = 22453 - joten vierailevat tämä URL sellainen. Joka ei olisi niin suuri ongelma, mutta se on uskomattoman helppo kirjoittaa silmukka joka on juuri menossa käymään tämän URL uudestaan ​​ja uudestaan, minkä vuoksi näet Isawyouharvard lähettää tuhansia asioita. Ja ne ovat yleensä CS50-pohjainen Isawyouharvard virkaa. Miten löydän eniten halunnut? Heillä on taipumus saada poistettava melko nopeasti, too. Tämä ei ole kaikkein pidetty. Siellä mennään. Huijareita on eniten halunnut sivu - siinäpä merkitystä tässä juuri nyt. Oh wow. He ovat jo poistanut niistä, tästä vuodesta alkaen, jotka ovat olleet pettänyt. Nämä ovat kaikki poistettu. Ei tule koskaan olemaan viesti, joka saa tämän korkea. Tämä yksi oli ilmeisesti pettänyt päästä kaikkein halunnut sivulla. Lisää kysymyksiä? [Opiskelija] Mitä meidän pitäisi tietää XHTML? [Rob] käytännössä mitään. Juuri sitä, mitä se on. Ero sen ja HTML on se, että XML on hyvin samankaltainen ulkonäkö HTML paitsi HTML meidän täytyy vain olla valmiiksi määritettyjä tunnisteita. Mutta XML - XML ​​on aivan yleinen muoto, jossa voit tehdä XML-asiakirjan jostain tarkoituksiin haluat. Niinpä esimerkiksi, jos haluaisin voisin rakentaa XML kurssit - ja olen oikeastaan ​​sitä mieltä, että CS50 on API tähän. Oma XML-asiakirja voisi näyttää jotain - kursseja ja tietysti minä tarvitsen loppuun kursseja. Voisin olla kurssin ja se voisi olla nimi vastaa CS50. Ja sitten minun loppuun kurssin ja voisin laittaa sisälle täältä opiskelijoita, ja sitten sisällä opiskelijoiden Minulla on lista yhden oppilaan, jonka nimi on sama. Päätän, että opiskelija ja niin edelleen. Minä vain sattuvat ovat rakentaneet joitakin mielivaltaisia ​​XML-asiakirja, mutta se on voimassa XML. XML - kaikki se on on tällainen rakenne ja mukava asia - siitä syystä, että me jopa kutsua sitä XML on, että tällainen asia on erittäin helppo jäsentää. Se on erittäin helppo ottaa tämän asiakirjan ja tehdä erilaisia ​​irti. Ja niin XHTML on yritys saada HTML voimassa XML. Jo tämä näyttää melko samanlainen kuin HTML. Jotkut erot ovat HTML voit tehdä asioita, kuten tulo ehkä tyyppi on sama teksti joka on oletusarvoisesti, joten minun ei tarvitse sanoa. Pois käytöstä. On 2 asioita täällä, jotka tekevät tästä kelpaa XHTML. Ensimmäinen asia on, että kaikki XML-tunnisteet tarvitsevat sulkevan. Joten jos tulo Minun täytyy tehdä - mihin suuntaan slash se on? Tähän suuntaan? Tuo näyttää väärin. Toiseen suuntaan. Self-lopputunniste. Toinen asia on, että XML tarvitset tämänkaltaisissa ikään kuin avain arvo-pareja. Se tarvitsee arvo liittyy siihen. Niin, vaikka vammaisten ja sinänsä ilmaisee mitä haluan - Tätä varten olisi poistettu käytöstä - se kelpaa XHTML. Mitä olen itse tarvitse kirjoittaa on poistettu käytöstä vastaa käytöstä. Nyt se on voimassa XHTML. Ja nämä ovat vain näitä pieniä eroja, jotka muuntavat HTML XML-pohjainen jutuissa. [Opiskelija] XML on noin kuin vetää läpi oman X kokonaan kuin miksi se (ei kuulu) [Rob] asia kuin CSV - CSV olet juuri arvot erotetaan - ajatelkaa taulukkolaskenta. CSV on pohjimmiltaan taulukkolaskentaohjelma. Sinulla on ehkä sarakkeita ja sinulla on nippu rivien osakkuusyrityksen tietoa siellä sarakkeet mutta siinäpä se. XML on paljon monipuolisempi, että voit - sinulla on mielivaltainen hierarkia tietoja. Voisin olla useita kursseja, jotka on useita opiskelijoita sisällä joissa olisi vaikea keksiä taulukko, joka - vain, että yhdessä laskentataulukossa - CSV varsinkin on kuin vain yhden taulukkolaskenta - niin että yhdessä laskentataulukossa joilla on kaikki CS50, 51, ja 61 ja näissä kaikki opiskelijat liittyvät noina aikoina, ehkä kokousajat ja kaikki että sellainen asia. Toinen asia on, että Merkintänimet antaa mukava nimi kaikki tekijät niin lukee CSV-tiedosto voi olla vaikea yrittää jäsentää, mitä se todella nähdä. XML on paljon enemmän ihmisen luettavissa joten siksi kuin - keksiä jonkun henkilön, joka ei todellakaan tiedä, mitä CSV-tiedosto on tai kuten ei ole ohjelmoija tai jotain - voit antaa heille kuin mallin XML-tiedoston ja he voivat seurata linjat ja - oh, Minun pitäisi lisätä nimeni täällä. Se on paljon enemmän käyttökelpoisessa muodossa. CSV on runsaasti käyttötarkoituksia, mutta XML on eri käyttötarkoituksiin. Lisää kysymyksiä? Muita kysymyksiä? [Opiskelija] Edellisestä tietokilpailu - pystysuora skaalaus vs. horisontaalinen skaalaus. [Rob] Sinun ei tarvitse tietää, että. En usko, että me edes keskusteltu siitä. En vierasta se oli vain kertaluonteinen kommentti. Oh. Vaaka vs. pystysuora skaalaus ei ole jotain sinun täytyy tietää. Mielestäni ero on aivan kuin - no, vastaus avain sanovat eron. Pystysuora skaalaus on aivan kuten Oh, tietokoneeni tekee huonosti. Haen parempi. Ottaa huomioon, että horisontaalinen skaalaus on oh, minun tietokone tekee huonosti - Otan 20 niistä kaikille työtä saman tehtävän. [Opiskelija] Voimmeko mennä yli linkitetyn listan tapa tehdä jonoja. [Rob] Toki. Se on helpompaa kuin array tavalla. Linkitetty lista tapa tehdä jonoja. Ensinnäkin, mitä meidän struct varten linkitetty lista näyttää? [Opiskelija] Teemmekö sitä - [Rob] Tehdään sen - joo. Int val; sitten struct solmu * seuraava; Niin, että mitä me käyttää esimerkiksi täältä. Katsotaanpa oikeastaan ​​kirjoita tätä kamaa. Tehdään linked_list. Meidän struct - Okei. Nyt katsot meidän jonoon olemme - Haluan vain tehdä maailmanlaajuinen jono. Se tulee olemaan solmu * jonoon, ja meillä on dequeue toimintoa. Oletan nämä asiat voisi myös kumota totta vai tarua - tehdään se. Bool dequeue - ja olemme dequeueing - oh. Hmm. Int dequeue - Mitä me teimme tämän ennen? Int dequeue ja meillä on bool enqueue ja meidän täytyy laittaa jonoon jokin keino totta. Tehdään enqueue ensin. Meillä on jonossa. Haluamme lisätä jotain jonoon. Mikä on paras tapa tehdä se? Täällä meidän jonossa tällä hetkellä näyttää siltä, ​​että meillä joitakin yleisosoittimen aloittaa. Tuolla on jonossa. Olettaen, että me dequeue ottamalla ensimmäinen elementti, Mihin olemme menossa haluavat lisätä meidän solmuun niin, että jonoja toimi niin kuin pitäisi? [Opiskelija] Aivan lopussa. [Rob] Joo. Jonot on tarkoitus olla first in, first out. Mikä tarkoittaa, että uusi elementti olisi lisättävä tänne. Okei. Palatakseni koodia, se tarkoittaa, että me haluamme silmukan yli meidän jonossa. Tehdään solmu * nykyinen = jonoon, kun taas nykyinen ei ole yhtä kuin NULL. Tekisin - kunnossa, tehdään se erikseen. Ensinnäkin nykyinen = jono. Mitä teemme, jos nykyinen lähtee kuin NULL? Teemme tämän 2 tavalla. Ensimmäinen tällä tavalla. Mitä teemme, jos nykyinen on NULL? Onko tämä vastaa, jos jono on NULL? [Opiskelija] Se tulee palauttaa false. [Rob] Pitäisikö meidän palata väärä? Mitä vikaa lisäämällä jotain tyhjään lista? [Opiskelija] Mikään ei ole vikaa. Anteeksi. [Rob] Joo. Joten tässä ainoa ero on minun globaali jono on lähetetty minun uusi solmu. Ja sitten minun täytyy tehdä minun tarkastuksia, jos jono on NULL. Return false. Ja sitten jonottaa val vastaa i; jonossa seuraavana vastaa NULL; return true. Okei. Aion hypätä aseen täällä. Muistakaa, mitä teimme, että viime kerralla jossa sanoi, että se oli paljon helpompi työskennellä solmuun ** kanssa tällaista asiaa. Joten nyt nykyinen tulee olemaan & jono ja tulossa alas tänne - vaikka nykyisen - taas * nykyinen ei ole yhtä NULL - joten haluan vain tehdä nykyistä - Laitamme puhua tästä toisessa. Nykyinen seuraavaksi. Okei. Katsomalla sitä tällä tavalla, tämä on iteroimalla hoitaakseen kaikki minun osoittimia, kunnes pääsen nollaosoittimen. Nollaosoittimen tulee olemaan osoitin haluan korvata minun uusi solmu. Tarkasteltaessa iPad-versio - jos minun alkuperäinen osoitin ja linkitetty lista on tyhjä niin nykyinen on menossa kohta täällä. Tämä tulee osoittamaan null, joten tämä on osoitin päädyin siirtymässä osoittamaan muulla uuteen solmuun. Kun taas jos esimerkki on tässä tapauksessa täällä sitten nykyinen aikoo kulkea täältä - Mokasin hieman. Jos nykyinen on tarkoitus olla osoitteen nykyisen seuraavaksi. Sitäkö haluan? Nykyinen joten * nykyinen antaa minulle solmu. Seuraava kulkee seuraavaan. Olen tällä hetkellä osoittaa täällä. Tehdään punainen - joten olen tällä hetkellä osoittaa täällä. Sitten * nykyinen on menossa viittaus tähän solmuun. Ja * nykyisen ensi viittauksia tämän solmun, mutta se ei ole mitä haluan. Haluan tämän osoitin, että solmu. Niin, että osoitin tämä solmu on et-merkki (* nykyinen) seuraavaksi. Tässä vaiheessa olen virallisesti saavuttanut solmun että haluan vaihtaa. Katsotaanpa korvata kaikki nämä jonot nykyinen - ja nyt olemme valmiit. Ei voi olla kirjoitusvirheitä, mutta idea on, että insertti tällä eräänlainen tapa se on helpompi työskennellä viitteitä, että haluamme muuttaa sen sijaan, että tarvitsisi seurata - Okei, on minun alku NULL? Oi se on? Sitten minun täytyy luoda alkusolmun olla jotain erityistä muuten minä halua kerrata kunnes seuraava asia osoitan on NULL, ja sitten minä korvata siitä - mitä seuraavaksi asia on - minun malloc solmuun. Sen sijaan, että tarvitsisi erottaa niitä tapauksia, tässä minä vain käsitellä kyseessä mikä on osoitin, että on NULL, että en enää halua olla NULL, ja se tekee elämän helpommaksi paitsi näiden kaikkien pitäisi olla * nykyinen nyt, koska - [Opiskelija] Ovatko ne vielä koko solmun? [Rob] Kyllä. Olen vielä mallocing solmu. [Opiskelija] Onko se tulee olemaan koko solmun *? [Rob] Palatakseni täällä, ajattele, jos tämä on meidän linkitetty lista. Tämä kaveri kohdat pois null. Jälkeen, että miksi silmukka, nykyinen pistettä täällä koska tämä on osoitin, joka on NULL. Nyt haluan muuttaa osoittimen osoittamaan uuteen solmuun. Ensin malloc että uusi solmu - niin malloc koko solmun. Ja joka palauttaa solmun * ja nyt muuttumassa tämä osoitin rakentaa ja * nykyisen tasavertaisina tämä uusi solmu, että olen varattu. Joten, jos nykyinen on solmu **, niin * virta tulee olemaan solmu *, ja jos olen mallocing jotain koko solmun niin tämä on palaamassa osoitin solmuun joten tämä on solmu * - niin molemmin puolin oikein on samantyyppinen. Joten jos mitä juuri varattu oli NULL, palauttaa false; muu viimeistele ne mitä haluan niiden olevan - paitsi nämä on suluissa koska se ei ole, miten järjestystä asiat toimivat. Ilman suluissa, että oltiin tulkita nykyinen nuoli-val dereference että. Sen sijaan haluan dereference virran, joka tuo minut solmuun. Sitten haluan saada liittyvän arvon, että solmu. [Opiskelija] Luulin nuolia ansiosta voit ohittaa sen ja mennä suoraan arvoon. [Rob] he tekevät. Se jos minulla on - sanokaamme jono on esimerkki. Saan tehdä jono-nuoli-val vastaa i, koska jono on solmu *. Jos oli muutamia kivoja syntaksin kuten vaihtotaseen enää nuoli-val tai jotain joka teki 2 dereferences, niin tämä toimisi hyvin. [Opiskelija] niin, että nuoli on vain 1 dereference. [Rob] Joo. Vaihtoehtoisesti voisin kirjoittaa tätä (** current.val). Aivan kuten Voisin myös kirjoittaa jonossa (* jono). Val. Joten laita. No, se on jonossa luulisin. Dequeue tulee olemaan huomattavasti lyhyempi. Laitetaan void tänne puhtaus. Niin, dequeue. Mikä elementti minä dequeueing? [Opiskelija] ensimmäinen? [Rob] Joo. Jos ensimmäinen on NULL - paluu - En tiedä, mitä haluamme palata - INT_MAX; ja sinun pitäisi tehdä tarkistaa, onko INT_MAX palautettiin. Se on sellainen asia, että saa inc ei muuta haluamme - voimme vain palata jonoon Val? Sitäkö me haluamme tehdä? Dequeue epäsuorasti myös poistaa kohteen jonosta, joten haluan ensin sanoa - Mennään TMP osoittamaan ensimmäisen solmun meidän jonossa. Nyt haluamme edetä meidän jonoon valitse seuraava asia jonossa. Nyt meillä on TMP vasemmalle. TMP val on asia, jota haluamme palata. Joten, val = TMP-> Vai; Mutta ennen kuin palauttaa sen meidän pitäisi vapauttaa TMP ja palaa val. Järjestys toiminta täällä on tärkeää, että meidän täytyy napata tmp ennen kuin siirrymme jonon seuraavaan elementtiin. Meidän täytyy saada arvoon ennen me vapautamme tmp, ja sitten voimme palata val. [Opiskelija] Pitäisikö meidän asettaa jonoon jonottamaan seuraavaksi? [Rob] Kyllä. Tämä oli luoda huono silmukka / se ei toimi sen jälkeen vapauttaa se muutenkin. Jono = jono-> seuraava. Haluamme edetä jonossa seuraavaan elementti ei edetä seuraavaan elementtiin mitä tekijä tällä hetkellä on. Pinot olisivat merkittävästi - kuten entistä helpompaa, että dequeue on täsmälleen sama koska olemme vetämällä pois edestä pinon. End jono olisi hyvin samantapainen missä me vain haluamme jakaa solmuun ja työnnä eteen pinon, joten meidän ei tarvitse edes silmukan yli mitään. Me vain lisätä suoraan edessä. Ovatko kaikki siinä hyvin? Okei. Lisää kysymyksiä? [Opiskelija] Mitä suuria asioita minun pitäisi pitää mielessä viimeisimmästä luento? [Rob] viimeisintä luento. Sinun ei tarvitse tietää mitään koodia. Sinun pitäisi tietää yhdistävien ideoiden. Nate: n puoli ei ollut koodia ja niin nämä kalvot ovat verkossa. Ne ovat aivan kuin katsoa niitä ja heillä on suuria ideoita. My puoli - tietäen yleinen ajatus ensin et voi luottaa mitään. Se, että kuten ehkä prosessi kääntäjä voi olla huono, mutta sillä ei ole edes väliä, että lähdekoodi näyttää hyvältä. Koska kääntäjä voi muuttaa spesifisesti muuttaa lähdekoodia  vuonna laadintaprosessin. Samalla tavoin - Mielestäni ne ovat kuin suuria ajatuksia siitä. [Opiskelija] Oletko mainita, että meidän ei tarvitse tietää mitään liittyvät Firesheep - tai meidän täytyy tietää, että? [Rob] Kun Naten puoli asioita, mitään, Nate kosketti - kuten Firesheep, wireshark - En edes usko, että hän teki Firesheep yksityiskohtaisesti. Voit myös teki jotain kanssa - oli se Firesheep - viime viikolla? Koskitko tätä? [Opiskelija] Joo, mielestäni olisimme - [Rob] Joo. Emme aio antaa teille Firesheep tuotos ja sanoa tulkitsevat tätä. Se vain olemaan - se olisi kysymys kuin mitä on Firesheep? Mitä sitä käytetään? [Opiskelija] Minusta se toimii vain version 4 Firefox tai jotain. [Rob] Se voi olla rikki nyt. Minulla ei ole aavistustakaan. He eivät näytä estänyt sen manuaalisesti, mutta ehkä se ei toimi uusimman Firefox. [Opiskelija] Olen itse kokeillut sen asentamista, koska se sanoi, että se olisi yhteensopiva. [Rob] Niin, kai se ei toimi uusimman Firefox. Mutta ajatus on yhä voimassa, mitä se oli tarkoitus näyttää. Se oli järjetöntä kuinka paljon maailma eivät asu HTTPS tuolloin. Jo viime 2 vuotta tai mitä tahansa, se on silti - ei ole dramaattista parannusta useita sivustoja, jotka käyttävät HTTPS. [Opiskelija] Pitääkö meidän mennä yli HTTP? [Rob] protokolla siitä? [Opiskelija] Jotkut asiat, jotka meidän pitäisi tietää. [Rob] Okei. Perusasioita ovat kaiken näet verkon välilehti. Kun pyydän sivu - tulossa takaisin ylös ja tärkeimmät asiat. Näet tästä pyynnön, että teen. Chrome tapahtuu alustaa kaiken hienosti meille jos pyyntö URL oli tämä, pyyntömenetelmää oli GET, ja tila-koodi oli 200 OK. Jos osuin näytä lähdekoodi, näen enemmän suoraan, että - ja tämä on - voisimme näyttää jommankumman näistä, mutta se ei ole liian vaikea tulkita niiden välillä. Tässä on suora pyyntö tein, joten tämä tarkoittaa sitä, että menin apps.cs50.net/discuss/threads/inbox/all/HTTP/1.1. Ja protokolla sitä käytettiin HTTP/1.1 joka on käytännössä - se on aina olemaan, että. Tänne käytimme GET, joten tämä voi olla POST. Ja sitten tulossa alas - kaikki alas vastaus otsikot - jos näemme, että lähde, se missä näemme 200 OK. Tiedä mahdollista eri tilakoodien näistä. Uskon tarkastelun emme sano pari näitä, niin 403, 404 - tuollaisia ​​yleisimmistä. Se on merkittävä käsityksen. Ero vain välillä HTTP ja HTTPS on tämä salaus. [Opiskelija] Oletko valmis? [Rob] Luulen niin. No, juu. [Opiskelija] Puhutko hyvin yleisesti siitä, miten salaus toimii? Koska puhuimme esimerkiksi kun puristamalla Huffman tiedostoa, osaat purkaa niitä, koska olet itse lähettänyt hashtable tiedoston sisällä Joten miten salaus toimii? Mistä tiedät, miten salata tietoja, jos et ole itse lähettänyt asiakkaalle avain - ja voit itse napata että avain -? Miten yleinen prosessi toimii? [Rob] yleinen prosessi salaus - että on uskomattoman yksityiskohtainen kysymys minä vastaan. On lyhyt - hyvin, Tommy ja tein lyhyt. Valitettavasti se on kuin 26 minuuttia, joten se ei ole lyhyt. Se on pitkä. Mutta lyhyt oli RSA, joka on vain yksi esimerkki näistä, ja tämä RSA on osa yleistä HTTPS-protokollaa. Ajatus - RSA on esimerkki julkisen avaimen salausta, mikä tarkoittaa, sinulla on 2 erillistä avaimet. Käytät 1 avain todella salata asioita, ja voit käyttää toista avain purkaa asioita. Tämä avain että käytät salata asioita on yksi, joka on julkinen. Sivusto voi lähettää sinulle tämän salausavaimen. He tekevät lähettää sinulle että salausavain, ja kun haluat lähettää jotain takaisin heille käytät että salausavain salata kaikki tiedot ja lähettää sen heille. Niin, he ovat ainoita, joiden yksityinen avain. Jos tämä yksityinen avain tuli tunnetuksi niin kuka tahansa voisi purkaa tietosi. Mutta yksityinen avain - joka liittyy matemaattisesti julkista avainta, mutta et voi selvittää yksi muista - niin, että yksityinen avain voidaan purkaa tiedot. Koska ne ovat ainoat, joilla yksityisen avaimen, he ainoita, jotka voivat lukea tietoja. Joten vaikka julkinen avain on julkinen, Käytän samaa - kun menen Google.com tai mitä tahansa, ne saattavat olla useita, en tiedä - mutta jos menen Google.com, hän menee Google.com, hän menee Google.com-- me kaikki voivat käyttää samaa julkista avainta salaamiseen oman tietomme kuitenkin haluamme. Mutta kukaan meistä ovat menossa pystyä selvittää - aiomme pystyä purkaa niiden tietoja, koska julkista avainta ei voi purkaa. Se voi vain salata. Ja se on hauskaa / yksityiskohtaisista matematiikka - kuin joukko moduulin toimijoiden ja exponentials ja tavaraa, että se vain toimii, että yksityinen avain on ainoa asia, joka voi purkaa julkisen avaimen salausta juttuja. Joo. Katso RSA lyhyt saadaksesi lisätietoja. [Opiskelija] Onko tuo sivuilla? [Rob] Joo, mielestäni se on tässä vaiheessa. Tai ainakin YouTube linkki siihen on lähetetty. Katsotaanpa. Shortsit. Mielestäni olisi ollut viikko 2 liittyviä. Joo. RSA. Ja se on - Emme ole menossa pelaamaan tätä - 24 minuuttia. Se on pitkä. Lisää kysymyksiä? [Opiskelija] Osaatko puhua lyhyesti bitmasks? [Rob] Toki. Lyhyesti, ajatus on juuri sitä kuten - [Opiskelija] Mikä se on, Rob? [Rob] Bitmasks. Ajatuksena on - sanotaan nyt vaikka meillä on - Me olemme käyttäen jonkin kokonaisluvun - int x - niin, alamme heti pois käytöstä 0. Nyt tämä kokonaisluku on 32 bittiä, niin mikä tahansa yksittäinen 1 niistä bittiä voidaan käyttää edustamaan erityisen FLAC. Tämä on silloin, jos tarkastellaan käyttöjärjestelmän koodeja, ne käyttävät tätä koko paikka jossa ehkä ylös jonnekin ne hash määritellä - Katsotaanpa muutamia esimerkkejä. Man-2-auki - avoin järjestelmä soittaa näemme tässä, että yksi sen perustelut on int liput - mitä se odottaa kuin väite ovat joitakin näistä lippuja. Näemme O_APPEND, O_ASYNC, O_CLOEXEC, O_CREAT, ja niin edelleen. O_DIRECT. Tämäntyyppiset liput ovat hash-määritelty jonnekin. Ja ne kaikki ovat täsmälleen 1 bit. Joten, O_CREAT ehkä hash-määritelty 1, vasen-shift, 4 (1 << 4). Se tulee olemaan - aina kun käytän O_CREAT joka on vain olemaan - binary 1, 0, 0, 0, ja 30-ish nollia ennen sitä. Se on vain yksi bitti asetettu, ja että bitti edustaa tätä lippua. Ja niin mikään muu lippu aiotaan vasemmalle siirtynyt 4. Olen voinut olla jopa 32 liput yksi kokonaisluku tekemällä - x = O_CREAT vähän viisas tai O_DIRECT. Olet vain poiminta tahansa 2 niistä lippuja. Nyt x tulee olemaan 2 bittiä asetetaan, jotka vastaavat 2 bittiä sekä O_CREAT ja O_DIRECT. Siten, että sen jälkeen - niin sitten saimme x osaksi auki-toiminto, ja avoin tarpeet nähdä, mitä lippuja todella perustetaan. Niin, siitähän se tulee tehdä asioita, kuten if (x & O_CREAT) tehdä jotain, tai jos (x & O_DIRECT) tehdä jotain muuta, ja sitten voi olla joitakin lippu, että meillä ei ollut asettanut - if (x & O_ - En tiedä, mitä muut liput olivat - (X & O_RDONLY) - on tietty tila ei aiotaan teloittaa. Tai että koodiosion ei aiotaan teloittaa, mutta nämä 2 ovat, koska ne 2 lippua asetettu. Ja huomaa, että C, kaikki arvot, jotka eivät ole 0 on totta. Joten, (x-ja O_CREAT) tulee olemaan joko 0 tai O_CREAT koska O_CREAT on vain yksi bitti. Jos tämä bitti on asetettu seuraava, niin tämä tulee palata O_CREAT - binary jos vain, että bitti on asetettu. Jos tämä bitti seuraava ei ole asetettu, niin se tulee palauttaa 0, jolloin tiedämme lippua ei ole asetettu. Se miten käytät bitmasks. Mielestäni on edellisen tentti tai ehkä luokassa tai jotain - voit myös käyttää bitmasks tulostaa binary muuttujan. Jotta voin käyttää - silmukoiden yli - 1, vasen shift, 0 - ja sitten tulostaa, jos x ja että - jos x ja 1, vasen muutos, 0 - tulosta sitten 0 tai 1. Tai tulostaa 1 muuta tulosta 0. Ja sitten minä menen vielä kerran - jos x ja 1, vasen-shift, 2 - niin se tarkoittaa, että toinen bitti ja muuttuja on asetettu, joten voin tulostaa 1 muuta tulostan 0. Ja luulen, että voisimme todella haluavat tehdä päinvastaisessa järjestyksessä, koska yleensä haluat vasemmalla puolella olevan korkeimman bitteinä ja oikealla puolella olevan alimman tason bittiä, joten se olisi todennäköisesti silmukka 4 int i = 31, kunnes osuin 0, niin älä täsmälleen kunnossa - jos x ja 1, vasen-shift, i; tulostaa 1 muu 0. [Opiskelija] Kiitos. [Rob] Luulen, että olemme liian myöhään. Kysyttävää parin viime out-of-time sekuntia? Selvä. Onnea huomenna. Tämä oli viimeinen osio, jossa ensi viikolla tulee olemaan vapaaehtoista. Annan takaisin tietokilpailuja ja voimme mennä niiden yli ja ehkä mennä yli muita asioita, jotka olit kiinnostunut, tai opinnäytetyö asioita, tai tulevaisuudessa CS luokat asioita tai - En tiedä. Mutta tämä on viimeinen materiaali täytetty osiosta. Bye! (Suosionosoituksia) [CS50.TV]