>> [9. §] [kényelmesebb]
[Rob Bowden] [Harvard Egyetem]
[Ez a CS50.] [CS50.TV]
>> Rendben. Alapvetően ma már mind fel nektek feltenni néhány kérdést.
Én lehet, hogy vándorol néhány téma
egy kicsit, ha senki sincs kérdéseket feltenni.
Remélhetőleg igen. Van valakinek kérdése?
Lehet, hogy a korábbi vetélkedők, a dolgok, hogy nem kényelmes megadva.
>> Igen. >> [Tanítvány] megy át buffer overflow támadások? >> [Rob] Persze.
A fő példa valóban lehet itt.
A fő dolog mögött buffer overflow támadások
van néhány puffer, itt.
Char c - amely csak a 12-es méretű -
de aztán illeszt valamit, hogy puffer
de nem ellenőrzi, hogy pontosan mennyi vagyunk behelyezése.
Itt vagyunk behelyezésével strlen (bar) a C, de ki tudja, meddig bár.
Ha ez hosszabb, mint 12 karakter, akkor ez lesz a túlcsordulás a puffert.
Nézzük ezt a képet -
ha Ön 61 kapsz sokkal jobban ismerik ezt a fajta elrendezés
és foglalkozik a mentett frame mutatóra és a feladó címét és a szülő rutin stack
és az összes ilyen konkrét dolgokat.
De itt csak meg kell tudni, hogy mi van
ezt a kis helyet a puffer.
Itt van c (0), és akkor van c, 1, 2, 3, 4, 5, és így tovább.
Normális körülmények között szeretnénk tölteni a puffert, mint egy megszokott.
Ha behelyezett 'szia' mi volna-e-h-l-l-o / 0,
és aztán csak egy csomó üres hely.
Ahhoz, hogy egy hacker - Ó, azt hiszem, ez a példa.
Egy hacker kapunk valamit, mint ez, ahol
amit ők kifejezetten próbálnak tenni a
általában felülírják a feladó címét.
Amikor hívja a funkciót, és a verem keret lesz a verembe
hogy verem keret tudnia kell, hogyan -
Nos, a funkció már az úgynevezett tudnia kell, hogyan, hogy visszatérjen a funkció nevezték.
Tehát, ha fő meghívja ize, ize kell, hogy visszatérjen a fő,
és hogy az, amit ez a feladó címét nem.
De mi a hacker fogja tenni a
felül pedig egy speciális visszatérési címet
ahol újra - Little Indian - ez nem egyszerű, de minden byte visszafelé.
Ez a visszatérési címet, mint amennyire a számítógép érintett
visszatérve erre a címre egyenértékű visszatérés foo vagy a fő
vagy bármi funkciót nevezte.
Ezért van, hogy visszatérjen erre a címre
ami csak azért történik, hogy erre a címre
amelyek vagy néha, hogy mit csinálnak itt, hogy használja a feladó címét
egy adott funkció, hogy tudják, már ott van.
Nem emlékszem, mi a funkciója a neve.
Majd keresse ki később.
>> Itt mit csinálnak halad a feladó címét
a verem is, és ez az, ahol a kissé furcsa
vannak példák a memória, ahol -
memória osztható csak olvasható, írható-olvasható, és a futtatható memória
ahol láttuk, csak olvasható memória előtt, ahol az -
ha azt mondom, char * s = helló nem tudom módosítani helló.
Ez csak olvasható memória.
Van még ez a gondolat a futtatható memória
ahol a futtatható memória lenne a szövegét szegmensben a kódot.
Nézzük a szokásos címtartomány elrendezés -
Hiszem, hogy lesz egy jó kép -
ez működik -, ahol megvan a verem itt. Van adat memória.
Hagyja figyelmen kívül ezt alapvetően. Ez a mi kupac.
És akkor mi van itt a fő program kódját.
Ez hasonló az a hely, ahol fel is húrok, mint a char * = helló
és ez csak olvasható.
De azt is jelöli a fő programkód futtatható.
És ha csinálsz ez, vagy az operációs rendszer nem, hogy helyesen
akkor ez legyen az egyetlen hely a memóriában
hogy a kód valóban végre
ami azt jelenti, hogy ez a fajta puffer túlcsordulás támadás van itt
hatástalan lenne, mert ez próbál végrehajtani memória akár itt a verem.
Figyeljük meg, a képek az első.
Megvan a verem felnőni.
Itt a köteget növekszik lefelé.
A CS50 céljából a köteg felnő.
>> Lehetséges, hogy megkerüljék az adott típusú puffer túlcsordulás
azáltal, hogy ezek a futtatható régiók memória nem végrehajtható régiókban.
De ez csak azért történik, hogy ritkán van futtatható memória megjelölve futtatható.
Csak látszik, hogy csak olvasható, és újra írni az egyetlen dolog, ami használt,
így ez még mindig nagyon hatékony.
És itt is tenni, amit akarunk.
Ez valójában nem történik, mint a Pset 61 idén,
de ha megnézzük a tavalyi kínálatát, vagy bármely korábbi évben
Egy Pset a te kifejezetten kellene beilleszteni itt kódot, ami azt
nyomtatni bizonyos értéket, vagy vissza értéket, amely különbözik a
az értéket, ami azt nyomtatni.
Vagy még inkább ügyesen, azt akarja, hogy telefonáljon vagy írjon -
így ez vissza fog térni akár itt és akkor végre egy kis kódolás itt,
és a legokosabb túlfolyás majd vissza, amit ez a feladó címe szokott lenni.
Így még akkor is szükség van, hogy felülbírálja ezt
feljönni ide, még mindig emlékszem, hogy a feladó címét valahol
, hogy mi is vissza a fő, vagy bármi,
és ez olyan, mintha soha nem is vette észre, hogy a dolgok rosszul.
De a dolgok nem így, hogy ez a helyzet, amikor talán belseje itt gelbroke az iPhone.
Mennek a dolgok, mint a normál - mint mi fut egy program, és a dolgok a végén visszatér
bármi is kellene, hogy visszatérjen, de addig
sikerült, hogy elpusztítsa az egész operációs rendszer.
Önnek nem kell tudni, hogy kód érintő puffer túlcsordulást vagy valóban kihasználják azt.
Önnek nem kell tudni, hogy az alapvető elképzeléseit ez a puffer, amit most túlcsordult,
és ez az oka annak, hogy lehet túlcsordult, mert mi nem annak ellenőrzése, hogy
vagyunk valójában határain belül is.
>> [Student] A megoldás megakadályozza, hogy csak ellenőrzi a határokat?
[Rob] Igen. Ebben az esetben a megoldás az lenne,
Lehet akár mondják, ha strlen Bar nagyobb, mint 12-1 -
azért, mert szükség van a / 0 a végén -
vagy ha lehet kézzel csinálni egy for ciklus, hogy csak másolat az első 11 karakter,
vagy bármit, ahol te tényleg ellenőrzi, hogy megbizonyosodjon arról, hogy nem túlcsordulás puffer.
>> Egyéb kérdés? Igen?
[Student] Tud beszélni próbál, és talán valami programozás (nem hallható).
[Rob] Persze.
Az aktuális program -
mi soha nem teszel, ha egy végrehajtása trie a vizsgán
azért, mert nem lenne tisztességes, hogy azok, akik nem hash táblákat.
És hasonlóképpen mi soha nem neked végre egy hash tábla a vizsgán
azért, mert nem lenne tisztességes, hogy azok, akik nem próbál.
Meg kell azonban ismeri a struktúra egy trie vagy a struktúra egy hash tábla, vagy bármi.
Ez tényleg igaz bármilyen adatszerkezetet láttunk.
Csatolt listák, halmozott skews, bináris fák -
akkor képesnek kell lennie arra, hogy meghatározza azokat a struktúrákat fejből.
A trie - azt jelenti, hogy az egyetlen dolog, amit meg kell tennie, hogy talán kapsz
néhány szót, vagy valami, és mi mondjuk megépíteni a trie hogy -
adunk akkor talán egy sor szó
és mi, mint építeni egy trie, amely ezt a szótárban.
>> Csináljunk a szótár kutya és macska.
Az ötlet a trie is indulunk ki ezt array -
26. hely -
és minden slot tényleges index a slot megfelel a levélben vagyunk érintett.
Tehát itt, ha mi próbálunk beszúrni macska a mi trie
Az első karakter a "c", ami lesz ", ha a = 0, akkor b = 1, c 2.
Fogunk menni a második index,
és fogunk létrehozni egy trie le ezt.
Mi lesz, hogy 26-helyekkel.
És akkor mi lesz az index a második karakter a macska.
Az "a", ami lesz a 0. helyszínen.
És ez megy, hogy 26-foltok.
Akkor megyünk "t" és mi is, hogy az jön le, ami valójában milyen fontos
mert - vessünk jön ide. Itt a trie a "t".
Tegyük fel, hogy ez a mutató "t" 19.
A lényeg, hogy emlékezzen a próbálkozások nem lehet csak nyomon követni ezeket a mutatókat.
Azt is meg kell nyomon követni, hogy ez valójában a végén egy szót sem.
Tehát, belseje itt szükségünk van valamilyen zászló, amely azt mondja
oké, ez valójában a végén egy szót sem.
Az ok, hogy ha később próbálja beilleszteni katasztrofális a mi szótár
amely ugyanazt a kiindulási 3 karaktert
de megy tovább fel kell ismernünk, hogy ez a végén egy szót sem.
Vagy esetleg ha megpróbáljuk felnéz "CA", amely talán nem egy szó
de most az van, akkor mi -
vagy lenne c aztán nézzük a -
fel kell ismernünk, hogy bár van egy mutató jön ki ez a csomópont
ez nem jelent a végén a szót.
>> Szóval, mit jelent az, hogy - mit akartál mondani?
Mit jelent ez a struktúra néz ki?
[Student] Ez egy sor mutató, amely 26 hosszú és majd bool voltak-e vagy sem volt.
[Rob] Igen. Tehát lesz egy struct trie * mutató - itt fogjuk mondani [26]
majd a pontosvessző itt.
De a Pset, azt is számításba kell venni az aposztróf,
ami azt jelentette, hogy szükséges hard-kód aposztróf index 27 vagy valami.
De itt csak érdekel 26.
És akkor van szükségünk, talán egy char vagy bool - nevezzük is szó.
Ez a 2, a 3 dolog, azt hiszem, amit valaha is tudni kell próbálkozás -
építési őket, a struktúra őket, és az utolsó dolog, amit a futási idő őket.
>> Mi a futási egy trie - vagy a Keresés a trie?
Ez az a pont, ahol azt mondják, hogy o (k), ahol k hossza a szó amit történetesen keres fel;
de ugyanakkor azt mondjuk - legalábbis Pset 5 helyesírás kedvéért - azt mondjuk, hogy
a leghosszabb szót a szótárban 45 karakter, így ez alapvetően
O 45, amely konstans időben.
Tehát, ha van egy felső korlátja a leghosszabb szót akkor -
vagy akár, mint az angol szótár - van egy felső korlát a leghosszabb szót.
Vagy bármelyik szótár - van egy leghosszabb kötve a felső szót.
Nem számít, mit csinálsz állandó idő,
de O k szép, mert ott valóban egy különbség futó mondjuk
45 karakteres szó szemben az ábécé, amely csak szavak max. 3 karakter.
A másik dolog, hogy az, hogy a -
Ó, mert csak azt mondom, hogy 45 Előfordul, hogy a leghosszabb szót
egyfajta buta, mert abban az időben mondjuk egy algoritmus O N.
Hát rendben van, mert a memória esetében akár 2 ^ 32 byte,
akkor N legfeljebb 4 milliárd, és ez az állandó idő, ezért egy bizonyos ponton
ez butaság, hogy azt mondják, ez a fajta dolog, ahol van egy felső korlát
hogy csak csökkenteni az állandó idő, mert minden állandó idő
ha úgy gondolja, hogy ezen a módon.
De valószínűleg elfogadják mindkét.
Mindenesetre megmagyarázni sem, hogy O (1) azt jelenti, hogy egy felső-korlátos hosszúságú szó;
O (k) azt jelenti, hogy a szó hossza -
Nos, k jelenti a szó hossza.
>> Igen. >> [Student] Nem a bool - mert ha elvégezte a trie
úgy tűnt, hogy - akkor megy a macska, és akkor menj a következő mutató
és akkor megmondani, hogy egyenlő igaz - azt teszel, hogy igaz, mint a t?
[Rob] Nézzük hiszem, ez az a helyzet, ahol sok példát lehet csak próbálja meg, és elér
egyszerű és / vagy szélsőséges példák és milyennek kellene lennie, úgyhogy gondolom, a szó "a".
A mi eredeti trie -
azt szeretnénk, hogy egy 1-itt, vagy azt akarnám, hogy egy 1. ide.
Azt mondanám, hogy a végén valószínűleg vagy / vagy.
Nem tudok egy okot - vagy tényleg te sem -
Az ok, amiért nem tette oda, mert akkor nem is kell ilyen messzire menni.
Soha nem kell kiosztani ezt trie.
Mi csak fel a 1. ott.
Ez még mindig mutat NULL.
Ha mi csak megy, hogy egy karakter
nincs ok arra, hogy kiterjesszék le egy másik trie csupán megjelölni ezt a levelet, mint használt.
Hasonlóképpen, ha volna rá az "egy" ott lent
akkor szükségszerűen az összes ilyen lenne csak 0 mindenkor.
>> [Student], de nem kell egy induló trie, hogy pont ezt a "a"?
[Rob] Van néhány globális vagy valami struct trie * t
mely pontokon van, de ez csak egy mutató.
Ez nem egy teljes értékű trie ami felé kell irányítani.
[Student] Oké. Hogyan tudnánk hozzá a levél 'én' - a szó, amit?
[Rob] A kérdés lehet felvenni. Várj.
Ez egy olyan kérdés, ahol a trie önmagában -
Nem tudom, ahogy a Pset írt volna meg.
A korábbi struktúra rossz volt.
De azt is megtehetik struct csomópont egy bool - és a mutató -
van valójában többféle módon tudna írni.
Alternatív megoldásként egy trie nem kell, hogy egy struct.
Még az is lehet trie - typedef node * -
csomópont [26] egy trie, és ez már nem struct.
Most már lesz - Én próbálok gondolni az is, hogy Pset várt volna, ha.
[Student] húztam fel, hogy a felülvizsgálati ülésén, és azt hiszem, hogy csak megy -
mint ha van egy olyan, akkor folytassa a következő - >> [Rob] Így csinálják?
[Student] És aztán, ha van egy igaz ott nem működik -
[Rob] Igen. Ez működik. Ez hulladékok a tér -
akkor feltétlenül kell egy teljesen más szintet trie, hogy nem kell az első helyen.
Itt egyre ronda minden -
Alapvetően mit akarok csinálni itt is társult -
ahelyett, hogy 26-mutatók a próbálkozás,
ez 26 bool mutató, bool mutató, bool mutató, és így tovább.
>> [Student] Nem lehet, hogy a 2 tömbök? Egy sor bools és egy sor mutató?
[Rob] Lehet, de akkor azt kell -
2. tömbök Logikai és mutatók.
Azt kell majd építeni a tömb Logikai -
a tömb Logikai kell olyan nagy, mint a trie
mert akkor nem csak 26 Logikai.
Azt, hogy minden egyes lehetséges növekedni -
mint a trie több mint 26 igaz vagy hamis lehetséges szavak.
Ezen a ponton akkor is csak egy struktúra, amely a trie nő le.
Ez nem lenne helyes, mert - mit akar itt?
Tehát, trie * t -
lehet tenni typedef (node ​​*) [26] trie;
hogy lehet a szintaxis keresem.
És ez csak a rendszeres trie.
Nem vagyok benne biztos.
De ez, ahogy tettük azt a véleményét, hogy tökéletesen működik is jól.
Abban az esetben, ha ez csak bool a szót, majd egy sor 26
akkor nem kell menni a következő szintre.
Gondolkozom, ahogy én is csinálni.
>> Egyéb kérdés?
[Student] Lehet kérdéseket feltenni valami más? >> [Rob] Igen.
[Tanítvány] megy át, mi a különbség, és amikor azt használni jQuery Ajax ellen?
[Rob] azok önmagukban teljesen más.
JQuery teszi lehetővé Ajax. Ez nem ad nekünk néhány egyszerűbb használata Ajax.
De Ajax jön szállított JavaScript. JavaScript Ajax képességeit.
Minden Ajax jelenti, összehasonlít Én már az oldalon, és ha azt akarom, hogy -
amikor rákattintok a valami, amit nem kell újra az oldalt, hogy letölthető az új információt.
Csak azt kérik, hogy új információkat.
Akkor nézd meg, hogy a Facebook, vagy ilyesmi.
Vizsgálja hálózat.
Shrink ezt.
Itt lent azt látjuk, hogy mi vagyunk egyre ezeket a kéréseket.
Most, amikor rákattintok - nos, ez csinál Ajax, mielőtt még kattintson semmit.
De ha rákattint a, akkor megy, hogy egy csomó kérelmek itt
amely most, hogy ezeket a kérelmeket - Ó, most már itt van.
Nézzük frissíteni.
Ehhez újra.
Látjuk, hogy megkapjuk ezeket a kéréseket, de ez még mindig folyamatban az oldal betöltése.
Figyeljük meg a Facebook, hogy ezeket a folyamatos kérések után is a lap betöltődött.
És ha rákattintok itt, akkor az, hogy még több kérelmet bizonyos adatok
hogy válaszul a dolog, én csak kattintott.
Ez az, amit Ajax. Ez lehetővé teszi, hogy húzza az adatokat, amelyeket nem töltötte le az oldalt eredetileg.
>> JQuery külön. JQuery csak egy JavaScript könyvtár, ami egy csomó dolog könnyebb.
JQuery ez sok az előnye, ez csak -
dollárjel - dollár jel egy érvényes változó JavaScript.
Tehát, jQuery - összes csinál mondja, mint a var $ = egy csomó dolgot -
mint valami nagy funkció mindezt cucc benne -
és akkor használni, hogy a dollár jel módon, mint
$ ("# Footer".) Stílus ("text-align", "center").
JQuery adja nekünk ezt a fajta szintaxis, ahol egy nagy előny -
azt más tulajdonságokkal rendelkezik, de, hogy mit akarunk, hogy összpontosítson a legtöbb
csak, hogy képes kiválasztani elemeket, mint ez.
Rendszeres, sima régi JavaScript meg tudod csinálni a dolgokat, mint
dokumentum-dot-get elem ID footer-dot - Nem tudom, mi az, ezen a ponton -
valamit a CSS vagy a stílust, vagy valami -
de alternatívaként, mondjuk azt akartuk, hogy válassza ki az osztályban.
Most stílus mindent osztályú lábléc ezt a stílust.
Még ha azt akartuk, hogy stílust bármely pontját.
Szóval, ez a választó -, hogy képes kiválasztani a dolgokat a dom, mint ez a hihetetlenül kényelmes
mivel a jó öreg JavaScript meg kellett volna tennie a dokumentum-dot-get elemek osztály neve
vagy bármi legyen is az, vagy ha akartam egy tag azt kell mondanom, hogy elemeket tag nevét.
Tehát azt kell tudni, hogy az adott módon, hogy érhetem el az összes ezeket a dolgokat.
A funkciók más lesz attól függően, hogy én vagyok egy osztály vagy azonosító
vagy a tag, vagy mi, míg a jQuery csak nem nekem.
>> [Student] a jQuery fogja használni, ha csinálsz kezdeti stílus az oldal?
Vagy ahhoz, hogy módosítsa a stílus után ez már - >> [Rob] megváltoztatni.
[Student] Miután ez már be van töltve. >> [Rob] Igen.
Minden induló stílus - nos, még a -
általában akkor használja ezt a fajta változás.
Akkor nem változik - ez a munka tökéletesen megfelel.
De általában nem változik a stílus, mint ez.
Ehelyett azt, hogy ez egy új osztályt, vagy valami
míg a CSS már definiálva, hogy az osztály egy bizonyos módon.
Azáltal, hogy ezeket a tételeket én kiválaszt egy új osztályt
Én alkalmazása a stílusok, amelyek már letöltött.
[Student] Akkor válassza pár jelölőnégyzeteket, és azokat a dolgokat, amit választott
teszi az új stílust, és kezdeni más. >> [Rob] Igen.
A másik dolog, hogy emlékezzen a -
Nos, több funkciót meg kell emlékezni a jQuery.
Tegyük fel, hogy kiválasztja valami ID P.
>> [Student] Mindig kell használni a font?
[Rob] Ez azt jelenti, ID. Ez egyenértékű a CSS, ezért CSS választók - ez ihlette.
Hol CSS, ha akartam stílus a lábléc -
vagy valami azonosító lábléc -
lenne, mint a text-align: center;
akkor nem kell írni CSS a vizsgán, de meg kell tudni, hogy a választók.
Meg kell tudni, hogy mi - meg kell tudni, hogyan kell olvasni.
De mi soha -
nem kell memorizálni a különböző lehetséges stílus dolgokat. Vagy ezek közül bármelyik.
>> JQuery dolog, amit meg kell emlékezni -
meg kell emlékezni dot-HTML, és egy közös minta jQuery - nézzük újra írni ezt.
A közös minta már $ ("# f"). Html
Ha fel egyszerűen zárójelbe azt jelenti, hogy a HTML;
míg ha azt mondom, HTML, és tedd, amit akarok, itt - néhány linket valamit -
amivel valami benne, a zárójelben már beállítja a HTML.
Ez elég gyakran előfordul egy csomó funkció.
Itt ugyanaz a helyzet a szöveget.
A különbség a HTML és a szöveg, hogy a szöveg megy, hogy be ezt a
mint szó kevésbé, mint a nagyobb, mint a helyett, mint egy horgony tag.
És a szöveg lesz ugyanaz, ha én csak ezt.
Ez lesz letölteni a szöveg a dokumentum - nem a HTML-dokumentum
de csak a szöveg belül ezt az elemet.
Egy másik az, ha a "f" történetesen egy azonosítót a bemeneti,
majd a hash-f-pont-val - ha akarom állítani a bemenetet valami hasonló -
mondjuk elütöttem egy négyzetet, és azt akarom, hogy alapértelmezett értéket -
dot-val - Én nem is tudom - 3 - így automatikusan helyezze be a szövegmezőbe 3
de ha azt mondom, 3-pont-val, hogy letölteni bármit jelenleg a szövegdobozba nekem.
>> Ez hasznos Form Validation ahol
ha csak szeretnénk, hogy győződjön meg arról, hogy azok ténylegesen töltötte ki az összes dolgot.
Az egyik módja ennek, hogy az, ha miután elütöttem be ez elkerülhetetlenül küldött néhány oldalt a szerver -
mint nekünk lenne PHP - és megpróbálja feldolgozni az adatokat, és azt mondaná,
ők nem töltöttek ki valamit, hogy most már átirányítja őket a másik oldalra, hogy azt mondja
Ön nem töltötte ki mindent.
Ahelyett, hogy ezt, hogy a JavaScript / jQuery akkor csak látni, ha val üres.
Vagy val - üres idézi.
Ez lesz csak a - most is figyelmezteti őket, hogy nem töltötte ki ezen a területen.
Elkerülhetetlen, hogy nem kell csinálni a PHP szerver oldali ellenőrzés, mivel
ha csak letilthatja a JavaScriptet a böngészőben.
De JavaScript kényelmessé teszi azok számára, akik már aktiválta,
és gyakorlatilag kilencvenkilenc-pont valami százaléka böngészők azt manapság.
Nagyon kevés ember kapcsolja JavaScript ki.
Ez a felhasználó kényelmét. Annyit kell tennie, PHP érvényesítés.
Meg kell csinálni a JavaScript érvényesítés.
>> [Student] Mit jelent a # f utal ide?
[Rob] Mit jelent a # f utal?
Van néhány elem a dokumentumban ID 'f'.
Majd nézd meg - valószínűleg a Facebookon rengeteg példát, ahol, ha jövök elemek
keres itt a elemek tag látom az adott div, amit most kiemelt itt -
vagy ez az egész oldal - igen, ez ott. Ennek ID pagelet_bluebar.
A konzolon Feltételezem ők a jQuery.
Így tudtam válassza pagelet_bluebar úgy, hogy kiválasztja, és én csináltam.
Próbáljuk meg -, vagy lehet, hogy nem használja a jQuery, és a karakter térképezni, hogy valami mást.
Egy jobb példa, amit én ismerek a jQuery -
még mindig keresi a mi elem van - mi van itt osztályban egyenlő Navbar.
Ez valami osztályú navigációs panelen,
így belsejében a konzol tudjuk nézni a dolgot osztályú navigációs panelen.
Itt tudjuk lépjünk át ezt, és látom, hogy ez az, ami.
Ha akartam csinálni. Szöveg Ez a szöveg az, hogy így látom beállításait jelentés fenti log out
amelyek mind-mind itt, de ez még mindig szöveget, hogy a HTML tag.
Tudtam meg a HTML csak néhány kapcsolat,
úgyhogy megszabadulni a bárban. Most, hogy megszabadultak a fejléc teljesen, csak hogy ez kapcsolódik a YouTube-ra.
>> És van bármilyen formában példa?
Itt egy űrlapot.
Én a jobb gombbal, és vizsgáljuk elem, hogy jöjjön el ide.
Látom, hogy az azonosító szöveges keresés,
tehát itt, ha én ID szöveges keresést.
Hozok rajta, és látom, hogy ez a helyes dolog, amit kerestem.
Ha én akarok. Val adna nekem azt, amit begépelt ott.
Ha akartam csinálni helló meg fogjuk változtatni, hogy itt a Hello - jQuery.
Persze, tudtam csinálni, nevetséges, mint document.get elemet ID - szöveges keresés -
Én nem is tudom, mi az a pont - pont értéke - Nem, elfelejtettem, hogy a fickó.
Szóval, ez helló. Én nem tudom, hogy én meg azt egyenlő valamit.
Igen, úgy, hogy megváltoztatta.
De nem kell használni ezeket és nagyon sok weboldalak ezen a ponton használata jQuery.
Még, mint a végleges projekt - ha csinálsz egy webes projekt - az első dolog,
Azt javaslom, csak beleértve a jQuery így kap a kényelmet, ezeket a funkciókat.
>> [Student] Azt hiszem, láttam egy másik módja, hogy egy elem a dom.
Van, hogy használja dot, majd folyamatosan megy le?
[Rob] lehet csinálni. Nem tudom, hogy ez nagyon jól működik.
Nehéz navigálni így.
Egy példa - Én sem tudom, ha bármilyen formában -
de document.forms megy vissza a listáját, formák, ami ezen az oldalon,
akkor meg tudom csinálni document.forms 0 lesz az első forma.
Dot - Nem tudom, mi már hívott, hogy - így nem is volt neve,
így talán bemenet működni fog. Nem.
Én nem is tudom, hogyan lehet ezt -, hogy elem-I-tag nevét bemenet.
Igen, kaptam a bemeneti, és most szeretné, hogy a 0-bemenet
, és azt akarom, hogy válassza ki az értékét, így lesz szöveget.
Kellett a végén csinál get elemek tag nevét egyébként.
Lehet, hogy valamilyen módon, hogy kiválassza azt közvetlenül
a forma 0, de a szép dolog ez is, mint nekem csak, hogy a címkéket az úgynevezett input
amelyek a gyermek ebben a formában, különben, ha csak tehetem egyenesen elöl
ez jelölje ki az összes elemet az egész oldalt, a teljes dokumentum
nem csak, hogy a forma, és ez talán nem is az, aki akarok.
Én nem is tudom, melyik az. Nem tudom.
Azt hiszem, az első input elem oldalunkon ez a kis jelölőnégyzetet.
>> [Student] Ez nagyon független
és esetleg milyen buta, de a válasz gombot, azt mondja, hogy a PHP -
Nem tudom, hogy ez a válasz gombot, vagy jegyzeteket, de azt mondja, PHP szerver oldali
és JavaScript kliens oldali. Mi a különbség a 2?
[Rob] A különbség a JavaScript kliens-oldali és a PHP szerver oldali.
Ha már hallott slash / használt node js, mielőtt azt gondolja, hogy
JavaScript nem csak kliensoldali de CS50 célokra is -
vagy legalábbis ezt a kvízt céljaira is.
PHP, hogy szerver oldali. No JavaScript.
Amikor írsz a weboldalon lesz írni PHP a szerveren.
Te soha nem kell írásban JavaScript a szerveren.
JavaScript végül szerzés küldött a böngésző, ahol a JavaScript kódot végrehajtja.
És a JavaScript kódot kell élni a böngészőben, mert különben, ha azt akarom, hogy
csak nem bármilyen JavaScript-y dolog, mint rákattint erre,
Nem vagyok újratöltése oldalon. Ez csak JavaScript újra formázás dolog számomra.
Ha a JavaScript élt a szerveren, akkor azt kell, hogy elkerülhetetlenül kér valamit
a szerver, hogy tudja, mit kell tenni.
PHP - nincs olyan dolog, mint a PHP a böngészőben.
Amikor kér egy oldalt - így mondjuk itt azt kérte, amelyet az adott oldal.
Ez azt jelenti, hogy ez fog kérni -
frissíteni - ez meg fog frissítse az oldalt -
ezért ezt a kérést megy el a szerverre.
Úgy látja, hogy azt vissza kell szolgáltatnia az adott téma ezzel a ID,
most, hogy lesz egy kis PHP, hogy a PHP értelmező fogja értelmezni, hogy az oldalra
és átalakítja azt csak a HTML, CSS, JavaScript talán, mindegy.
Ez a PHP, amely feldolgozza a kérést, és beolvassa a teljes szöveget, meg ilyesmi
, hogy én vagyok valóban keresi az adatbázisból.
De mi elhagyja a szerver csak HTML / JS / CSS.
Nincs a PHP, amely elhagyja a szervert, mert ha valójában nem
akkor a böngésző nem lenne ötlete, mit kell csinálni vele, mert nem tudja, mi a PHP.
De ugyanaz a gondolat, mert a JavaScript a kliens-oldali,
soha nem lehet hozzáférni a MySQL belőle.
Mivel a PHP szerver oldali te MySQL hozzáférést belőle.
>> [Tanítvány] megy át néhány, a biztonsági aggályok a cookie-kat HTTP?
[Rob] Ezek nem olyan dolgok fogunk tudni.
Egyes biztonsági aggályok a cookie-kat HTTP.
A nagy kérdés itt az, amit itt látunk, hogy a süti PHP / ID.
Ez olyan, mintha az egyetemes PHP a munkamenet.
A munkamenet van valami, hogy benne a PHP soha nem kell érvényesíteni
mert ez a szerver, amely teljes ellenőrzése alatt az ülésen.
Nem lehet megérinteni egyáltalán.
De ez a süti - ez -
és azt hiszem, akkor is be, mint én most, ha akarta használni, hogy -
de ez az a süti, hogy a - elkerülhetetlenül csinál egy kérést a szerver.
A szerver visszaküldi az oldalon. A kérelmet történik.
Ez már nincs ötlete, hogy ki vagy.
Szóval, a következő kérést csinál fog közé tartozik, hogy cookie-úgy, hogy tudja,
Ez az a személy, aki ezt a kérést előtt.
Ez a munkamenet adatokat társított a felhasználótól.
Ezért nem kell, hogy jelentkezzen be minden egyes oldalt használja.
A biztonsági kérdés itt az, hogy, hogy cookie-t küld ki a weben keresztül.
Mi HTTPS itt, így ebben az esetben azt jelenti, hogy mi titkosítása ezt a cuccot.
Valaki nem tud jönni, és csak lopni a sütit, és most már a szerver azt fogja hinni, ők engem.
De egyenes HTTP tudnak.
Csakúgy, mint ez Wireshark / FireSheep dolgot, ha csak hallgatni, hogy minden a wi-fis a levegőben
és elfogják, amit akarsz, szóval igen.
>> [Student] Valami hasonló biztonsági kockázat tárolja a felhasználói azonosítót utáni
mert ez szabadon szerkeszthető konzolok és a dolgok.
[Rob] Igen. Rengeteg kérdés, ahol, mint bármit, ami a felhasználó
kell érvényesíteni.
Rengeteg olyan esetek, amikor hasznos lenne, mint én vagyok, arról, hogy a post.
Bla, bla, bla, bla, bla. Aztán nyomja meg a választ.
Ez nagyon hasznos, ha a poszt kérelem tartalmazza az azonosítót, mivel
Azt akarom, hogy társítani ezen a poszton velem.
De nem tehetem, mert szabad vagyok, hogy a POST kérés - csakúgy, mint kézi
jön a saját POST kérés -
, amely a felhasználói azonosítót és most közzétesszük, mint te.
Ez az, amiért a szerver oldali Én nem hivatkozhat utáni kérelmek, amelyek a megfelelő felhasználói azonosítót.
Ezért kell, hogy tartozzon az én ülésén.
Így néz ki a felhasználói azonosító a session tömb, és azt be, hogy az én adatbázisba
a felhasználó, akik ténylegesen ezt a hozzászólást.
[Student] És ez alapján a süti?
[Rob] Igen. Használja a cookie-egyeznek meg, hogy a felhasználó, aki ezt a kérést.
Ez húzza ki a felhasználói azonosítót az ülésen, és hogy majd beilleszti az adatbázisba
használja, hogy a felhasználói azonosító.
Ez tetszik gomb -, hogy mi valójában csinál -
Nem fogom megtalálni itt. Ez lesz az Ajax függvény
Mi az Ajax funkció?
Hadd megtudja, mi a JavaScript.
Ez egy CS50 projekt egy ideje.
Nem emlékszem, mi az.
Ajax funkció - minden Ajax funkció tesz, hogy egy Ajax kérés, hogy egy oldal ezzel ID -
Az ID 22453.
Ez nem is egy post kérést. Ez egy GET kérést, amely még könnyebbé teszi.
Ha tudnám, mi az URL - ez olyasmi, mint ilyen / ID = 22453 -
vagy? ID = 22453 -
így ide látogató URL tetszik.
Ami nem lenne olyan nagy probléma, de ez hihetetlenül könnyű írni a hurok
amely csak megy, hogy látogassa meg a következő címet újra és újra, ezért látod
Isawyouharvard adtuk ezer dolog.
És általában CS50 alapú Isawyouharvard hozzászólások.
Hogyan találom meg a legjobban tetszett?
Hajlamosak arra, hogy törölt elég gyorsan is.
Ez nem a leginkább kedvelt. Ott vagyunk.
Csalók a leginkább tetszett az oldal - ez nagyon fontos, hogy ezt most.
Oh wow. Ők már törölte az is, ettől az évtől, amelyeket
megcsalta. Azok mind törölték.
Soha nem lesz egy hozzászólást, hogy megkapja ezt a magas.
Ez nyilvánvalóan megcsalta, hogy az a leginkább tetszett oldalt.
>> További kérdések?
[Diák] Mit kell tudni az XHTML?
[Rob] Gyakorlatilag semmit. Csak mi az.
A különbség közte és a HTML az, hogy az XML nagyon hasonló megjelenésű
a HTML, kivéve a HTML már csak, hogy egy előre meghatározott címkéket.
De XML - XML ​​olyan, mint egy általános formája, ahol tudod, hogy egy XML dokumentum
bármilyen célból akarsz.
Így például, ha akartam tudnék építeni egy XML tanfolyamok -
és én tényleg hiszem, CS50 van egy API-e.
Az XML dokumentum nézhet ki -
tanfolyamok és persze kell egy kis vége tanfolyamok.
Tudtam volna egy tanfolyamot, és lehetett volna név egyenlő CS50.
Aztán a végén persze, és nem tudtam betenni az itt tanulók,
, majd a belső hallgatók Van egy lista egy diák, akinek neve mindegy.
Én a végén, hogy a tanuló és így tovább.
Én csak úgy történnek, hogy épített egy tetszőleges XML dokumentum, de ez érvényes XML.
XML - is ez az a fajta struktúra és a szép dolog - az oka annak, hogy még azt is hívják XML
az, hogy ez a fajta dolog, nagyon könnyű értelmezni.
Nagyon egyszerű, hogy ezt a dokumentumot, és egy sor belőle.
És így XHTML egy kísérlet arra, hogy a HTML, hogy érvényes XML.
Már ez úgy néz ki, nagyon hasonlít a HTML.
Néhány különbség HTML meg tudja-e csinálni a dolgokat, mint input talán típusa megegyezik szöveg
ami az alapértelmezett, így nem kell azt mondani, hogy.
Tiltott.
>> Van 2 dolog itt, hogy ezt az érvénytelen XHTML.
Az első dolog az, hogy az összes XML-címkéket kell egy záró tag.
Tehát abban az esetben, input kell tennem a - melyik irányba perjel ez?
Ez az irány? Úgy néz ki rosszul.
Másik irány.
Self-záró tag.
A másik dolog az, hogy az XML van szükség ilyen típusú, mint a kulcs-érték párokat.
Szüksége van egy érték társul hozzá.
Így, annak ellenére, hogy a fogyatékkal élő és önmagában kifejezi azt, amit akarok -
ezt a bemenetet kell tiltani -
ez érvénytelen XHTML.
Amit valójában kell írni van tiltva egyenlő tiltva.
Most XHTML.
És ezek csak ezek az apró eltérések, amelyekkel a HTML XML-alapú ilyesmi.
>> [Student] XML szól, mint húzza keresztül a saját X összességében, mint hogy miért van az, (nem hallható)
[Rob] A dolog, mint egy CSV - a CSV éppen most értékek elválasztott -
gondoljunk csak a táblázatot. A CSV alapvetően egy táblázatot.
Van talán oszlopok és van egy csomó sorok
társult adatokat azokat az oszlopokat, de ennyi.
XML sokkal sokoldalú, hogy tudod - van egy tetszőleges adathierarchiát.
Tudtam volna több tanfolyamot, hogy több diák belül
ahol nehéz lenne azt gondolni, egy táblázatot, amely -
csak, hogy egy táblázatkezelő - CSV különösen, mint csupán egy táblázatot -
úgy, hogy egyetlen, amelynek minden táblázatkezelő CS50, 51., és 61., valamint az említett összes
a diákok ezekhez időkben, talán találkozó idő, és minden ilyesmit.
A másik dolog az, hogy a tag nevét, hogy egy szép név, hogy az összes elem
így olvasás a CSV fájlt is nehéz, hogy megpróbálja feldolgozni, amit valójában lát.
XML sokkal több ember által olvasható úgy, hogy ezért, mint a - jön néhány ember, aki nem
igazán tudom, mi a CSV fájl, vagy mint a nem programozó, vagy valami -
akkor nekik, mint a sablon XML fájlt, és követni tudják a vonalak és -
Ó, kéne be a nevét.
Ez egy sokkal használhatóbb formátumban.
CSV rengeteg felhasználási hanem XML különböző célokra.
>> További kérdések?
További kérdések?
[Student] Az előző kvíz - függőleges méretezést vagy horizontális méretezést.
[Rob] akkor nem kell tudni, hogy. Nem hiszem, hogy még azt is megbeszéltük, hogy.
Azt hiszem, hogy ez csak egy egyszeri comment.
Oh. Vízszintes szemben a függőleges méretezést nem az, amit meg kell tudni.
Azt hiszem, a különbség, mint - hát igen, a válasz gombot fogja mondani a különbséget.
Függőleges skálázás csak mint ó, a számítógép csinál rosszul. Hozok egy jobbat.
Mivel vízszintes méretezés ó, a számítógép csinál rosszul -
hadd kap 20 őket, hogy minden munkát ugyanazt a feladatot.
>> [Student] Mehetünk át a láncolt lista módja annak, hogy a sorban állás. >> [Rob] Persze.
Ez könnyebb, mint a tömb utat.
A láncolt lista módja annak, hogy a sorban állás.
Először is, mit jelent a struktúra egy láncolt lista kinézni?
[Student] csináljuk a - >> [Rob] Csináljuk a - igen.
Int val, majd struct node * mellett;
azért, hogy ezt fogjuk használni a példában.
Nézzük tényleg írja fel ezt a dolgot.
Csináljuk linked_list.
A struktúra -
Oké. Most néztem a sorban van a -
nézzük csak, hogy egy globális sorban.
Ez lesz node * sorba, és van egy dequeue funkcióval.
Azt hiszem, ezek a dolgok is felborulhat igaz vagy hamis - csináljuk.
Bool dequeue - és mi dequeueing - oh. Hmm.
Int dequeue - mit csináljunk ilyet?
Int dequeue és mi bool Enqueue, és meg kell sorba állítását valamilyen módon igaz.
Csináljuk Enqueue először.
Megvan a sorban. Azt szeretné szúrni valamit a sorba.
Mi a legjobb módja, hogy?
Erre a sorban éppen néz ki, van néhány globális mutató kezdeni.
Ott a sorban.
Feltételezve, hogy mi dequeue azáltal, hogy az első elem,
hová megyünk, hogy szeretné szúrni a csomópont, hogy sorban a munka, mint kellene?
[Student] A legvégén. >> [Rob] Igen. Sorok állítólag az első be, első ki.
Ami azt jelenti, hogy az új elemet kell beilleszteni ide. Oké.
>> Visszatérve a kódot,
ami azt jelenti, hogy meg akarnak hurkot a sorban.
Csináljuk node * áram = sorba, míg a jelenlegi nem egyenlő NULL.
Én megtenném - Rendben, csináljuk külön-külön.
Először is, a jelenlegi = sorban.
Mit tegyünk, ha az áram indul a NULL?
Majd ezt 2 módon. Az első ilyen módon.
Mit tegyünk, ha a jelenlegi NULL?
Ez felel meg, ha sor NULL?
[Student] Meg fog visszatérni hamis. >> [Rob] Ha visszatérünk hamis?
Mi a baj a behelyezése valamit egy üres listát?
[Student] semmi baj ezzel. Bocsánat.
[Rob] Igen. Tehát itt az egyetlen különbség a globális sorba küldik az új csomópontot.
És akkor meg kell tennem az én ellenőrzése, ha sor NULL.
Vissza hamis.
Aztán sorba val egyenlő i, sorban következő értéke NULL, vissza igaz.
Oké. Fogok ugrani a fegyvert itt.
Emlékszel, mit csináltunk, hogy az utolsó időben
ahol azt mondta, hogy sokkal könnyebb dolgozni node ** ez a fajta dolog.
Tehát most aktuális lesz és sorban, és jön le, hogy itt -
míg a jelenlegi -, míg * a jelenlegi nem egyenlő NULL -
Engedjék meg, hogy ezt a jelenlegi - we'll beszélni ezt a második.
Jelenlegi következő. Oké.
Néztem ilyen módon, ez az iterációt minden az én mutatók, amíg el nem érem a null pointer.
A null pointer lesz a mutató akarom cserélni az új csomópontot.
Nézzük iPad verzió -
ha az eredeti mutató, és a csatolt lista üres, akkor az aktuális fog mutatni itt.
Ez fog mutatni null,
így ez a mutató én a végén halad, hogy pont egy másik új csomópontot.
Mivel, ha a példa ebben az esetben itt
akkori fog mozogni innen - elcsesztem kicsit.
Ahol a jelenlegi állítólag a címre a jelenlegi mellett.
Ez az, amit akarok? Jelenlegi így * jelenlegi ad nekem egy csomópont.
Következő bejárja a következőre.
Én jelenleg mutatva itt.
Csináljuk piros - úgyhogy jelenleg mutatva itt.
Ezután * áram fog hivatkozni ezen a csomóponton.
És a * jelenlegi következő hivatkozás a csomópont, de ez nem az, amit akarok.
Azt akarom, hogy ez a mutató, hogy a csomópont.
Tehát, hogy a mutató ezt csomópont-jel (* áram) mellett.
>> Ezen a ponton az időben én már hivatalosan is elérte a csomópontot, hogy akarom cserélni.
Nézzük cserélni az összes ilyen sorok áram - és most kész.
Lehet, hogy elgépelés, de az ötlet az, hogy a betét a jelen módján
könnyebb dolgozni a mutatókat, hogy meg akarjuk változtatni
ahelyett, akiknek nyomon követni - oké, az én kezdő NULL?
Ó, ez? Akkor létre kell hozni a start csomópontot, hogy valami különleges
mást akarja, hogy halad-hatunk, amíg a következő dolog, amit pont NULL,
aztán majd helyett, hogy - mi a következő dolog, - az én malloc csomóponthoz.
Ahelyett, hogy kelljen külön azokat az eseteket, itt csak azokkal az esetben,
mi az a mutató, amely NULL, hogy én már nem akarok lenni NULL,
és ez megkönnyíti az életet, csak ezeket mind * aktuális most, mert -
[Student] Még mindig akkora, mint egy csomópont?
[Rob] Igen. Még mindig mallocing egy csomópont.
[Student] Vajon lesz akkora, mint egy csomópont *?
[Rob] Visszatérve itt, gondolom, a helyzet, ha ez a mi láncolt lista.
Ez a fickó mutat ki NULL.
Ezután miért loop, a jelenlegi pontok itt
mert ez az a mutató, ami NULL.
Most azt akarom változtatni ez a mutató, hogy pont egy új csomópontot.
Először malloc, hogy az új csomópont - így malloc méretű csomópont.
És, hogy visszaadja a csomópont *, és most változik ez a mutató épít a * jelenlegi egyenlők
Az új csomópont, amit kiosztott.
Tehát, ha a jelenlegi egy csomópont **, majd * az aktuális lesz egy csomópont *
és ha én mallocing valamit a mérete csomópont, akkor ez visszatér a mutatót egy csomóponthoz
így ez a csomópont * - így mindkét fél helyesen azonos típusú.
És ha az, amit én csak elkülönített NULL volt, return false;
más elvégezte, hogy mit akarok, hogy legyen - csak ezeket kell zárójel
mert ez nem így a dolgok rendje működik.
Anélkül, zárójelben, amit úgy értelmezik, mint
jelenlegi nyíl-val hivatkozás feloldási ezt.
Ehelyett azt akarom, hogy dereference jelenlegi, amely elvezet egy csomópont.
Majd akarok az értéket társított csomópont.
>> [Student] Azt hittem, nyilak lehetővé tette, hogy megkerüljék ezt, és egyenesen az értéket.
[Rob] Ők. Ez, ha van - mondjuk sorban egy példa.
Én szabad csinálni queue nyíl-val egyenlő i, mert sorban egy csomópont *.
Ha volt néhány szép szintaxisa, mint a jelenlegi, már nyíl-val, vagy valami
ami nem 2 dereferences, akkor ez jól működik.
[Student] Tehát a nyíl csak az 1. hivatkozás feloldási. >> [Rob] Igen.
Alternatívaként tudnék írni ezt (** current.val).
Mint ahogy én is írni sorban, mint (* queue). Val.
Úgyhogy be. Nos, ez a sor azt hiszem.
Dequeue lesz lényegesen rövidebb.
Tegyük érvénytelen itt a tisztaság.
Tehát, dequeue. Milyen elem vagyok dequeueing?
[Student] az első? >> [Rob] Igen.
Ha az első egy NULL - vissza - Nem tudom, mit akarunk visszatérni - INT_MAX;
és akkor meg kell tennie egy csekket, hogy ha INT_MAX visszatért.
Ez az a fajta dolog, hogy kap inc még mást is szeretnénk -
akkor már csak vissza queue val? Ez az, amit akarok?
Dequeue hallgatólagosan szintén eltávolítja az elemet a sorból,
úgyhogy először ezt mondjátok - térjünk a tmp, hogy pont az első csomópont a mi sorban.
Most azt szeretnénk, hogy előre a sorban, hogy pont, hogy a következő dolog a sorban.
Most már tmp maradt. Tmp val az a dolog, amit szeretnénk, hogy visszatérjen.
Tehát, val = tmp-> val;
de mielőtt vissza kellene szabad tmp, és visszatér val.
Az, hogy a művelet itt is fontos, hogy meg kell, hogy megragad a tmp
mielőtt haladunk sorban a következő elem.
Meg kell, hogy az értéket, mielőtt szabad tmp,
és akkor vissza a val.
>> [Student] Ha mi meg a sort a sorban a következő?
[Rob] Igen. Ezt megteremtése volt egy rossz loop / ez nem működik szabaddá tétele után egyébként.
Queue = queue-> kov.
Azt akarjuk, hogy előre a sorban a következő elem nem előre, a következő elem
hogy mi az elem jelenleg.
Stacks lenne jelentősen - még könnyebb, mint abban dequeue pontosan ugyanaz
mert mi húzza ki az első a verem.
Vége sor nagyon hasonló, ahol csak akar lefoglalni egy csomópont
és helyezze be az első a stack, így nem is kell, hogy hurkot semmit.
Csak be közvetlenül a fronton.
Mindenki jól áll ez?
>> Oké. Több kérdés?
[Diák] Milyen nagy dolgokat érdemes szem előtt tartani, a legutóbbi előadás?
[Rob] A legutóbbi előadás.
Önnek nem kell tudni minden kódot.
Tudnia kell az átfogó elképzelések.
Nate fele nem volt semmilyen kódot, és így ezek a diák online.
Olyanok, mint nézd meg őket, és nekik van a nagy ötletek.
A fél - ismerve az általános elképzelés első nem bízhat semmit.
Az a tény, hogy mint talán a folyamat a fordító lehet rossz,
de ez nem is számít, hogy a forráskód jól néz ki.
Mivel a fordító lehet kifejezetten módosításával megváltoztatható a forráskód
a összeállításának folyamata.
Ugyanakkor, mint - Azt hiszem, ezek olyanok, mint a nagy ötletek is.
>> [Student] Azt mondod, hogy nem kell tudni semmit kapcsolódó Firesheep -
vagy nem kell tudni, hogy?
[Rob] A Nate félig a dolgok, bármi, ami Nate érintette -
mint FireSheep, Wireshark - Nem is hiszem, ő Firesheep részletesen.
Azt is tett valamit, hogy a - volt Firesheep - a múlt héten?
Te érinteni, hogy?
[Student] Igen, azt hiszem, lehet, hogy - >> [Rob] Igen.
Nem fogunk adni neked Firesheep kimenetet, és azt mondják értelmezik ezt.
Ez csak lesz - ez lenne a kérdés, mint a mi Firesheep?
Milyen betegségek esetén alkalmazható?
[Student] Azt hiszem, ez csak akkor működik, a 4-es verzió a Firefox, vagy valami.
[Rob] Lehet, hogy eltört már.
Fogalmam sincs.
Nem úgy tűnik, hogy le van tiltva kézzel,
de lehet, hogy nem működik a legújabb Firefox.
[Student] Én tényleg megpróbáltam beiktatás, mert azt mondta, hogy összeegyeztethető lenne.
[Rob] Szóval, azt hiszem, hogy nem működik a legújabb Firefox.
De az ötlet még mindig áll, hogy mit kellett volna mutatni.
Ez abszurd, hogy a világ nagy része nem él a HTTPS abban az időben.
Még az elmúlt 2 évben, vagy bármi, ez még mindig - van drámai javulás a
számos honlapok, amelyek használni HTTPS.
>> [Student] Nem kell menni HTTP-n keresztül?
[Rob] jegyzőkönyv is? >> [Student] Néhány dolog, amit tudnia kell.
[Rob] Rendben. Alapvető dolgok minden látható a Hálózat fülre.
Amikor kér egy oldalt - jön vissza a csúcsra a fő dolog.
Itt látható a kérést, amit csinál.
Chrome történik formázni az egészet szépen nekünk
amennyiben a kérés URL volt ez, a kérelmet módszer GET,
és a status code 200 volt rendben.
Ha hit view source, látom, közvetlenebb, hogy -
és ez - tudtuk mutatni, hogy ezekkel, de nem túl nehéz értelmezni közöttük.
Itt a közvetlen kérésére csináltam, így ez azt jelenti, hogy én elmentem
apps.cs50.net/discuss/threads/inbox/all/HTTP/1.1.
És a jegyzőkönyv régen volt HTTP/1.1, amely gyakorlatilag - ez mindig lesz, hogy.
Több mint mi itt is kap, így ez is lehet POST.
És akkor jön le - egészen a válasz fejlécet - ha látjuk, hogy a forrás,
ez az, ahol látjuk a 200 OK.
Ismerje a különböző lehetséges állapot kódokat ezeket.
Azt hiszem, a felülvizsgálat teszünk mondjuk egy pár ilyen,
így 403, 404 - a kedves közös is.
Ez a fő gondolata is.
A különbség csupán az a HTTP és HTTPS ez a titkosítást.
>> [Student] Kész vagy? >> [Rob] Azt hiszem, igen. Hát, igen.
[Student] fogsz beszélni nagy általánosságban arról, hogyan kell a titkosítást?
Mivel beszélgettünk például amikor tömörítő Huffman kép,
tudod, hogyan bontja ki őket, mert ha valóban elküldte a hash tábla a fájl
így hogyan titkosítás működik?
Honnan tudod, hogy hogyan kell titkosítani adatokat, ha nem valóban elküldte az ügyfél
A legfontosabb, hogy a - és akkor valóban megragad, hogy kulcs -?
Hogyan működik az általános folyamat működik?
[Rob] Az általános folyamat a titkosítás -
ez egy hihetetlenül részletes kérdésre fogok válaszolni.
Van egy rövid - nos, Tommy és én rövid.
Sajnos ez olyan, mint 26 perc alatt, így ez nem egy rövid. Ez egy hosszú.
De a rövid volt, RSA, ami csak egy példa ezek közül,
RSA és ez része a teljes HTTPS protokollt.
Az ötlet - RSA egy példa a nyilvános kulcsú kriptográfia,
ami azt jelenti, hogy 2 külön gombokat.
Ön használja 1 gombot, hogy ténylegesen titkosítja a dolgokat,
és használ egy másik kulcs dekódolni a dolgokat.
Ez a kulcs, hogy használja titkosítani a dolgokat az egyik, hogy a nyilvánosság számára.
A weboldal elküldjük Önnek ezt a titkosítási kulcsot.
Ők küld, hogy titkosító kulcsot, és ha azt szeretné küldeni valamit vissza őket
használja, hogy titkosító kulccsal titkosítja az összes adatot, és küldje el nekik.
Tehát, ők az egyetlenek, akik a privát kulcs.
Ha ez a privát kulcs vált ismertté, akkor bárki képes lenne visszafejteni az adatokat.
De, hogy a magán kulcs - ami matematikailag kapcsolódik a nyilvános kulcsot, de nem lehet
kitalálni egyet a másik -, hogy a privát kulcs használható dekódolni az adatokat.
Mivel ők az egyetlenek, akik a privát kulcs,
ők az egyetlenek, akik olvasni az adatokat.
Így annak ellenére, hogy a nyilvános kulcs nyilvános,
Én ugyanazt -, amikor elmegyek Google.com vagy bármi,
lehet, hogy több, nem tudom -, de ha elmegyek a Google.com,
megy a Google.com, ő megy a Google.com--
mindannyian ugyanazt a nyilvános kulcsa segítségével titkosítja a saját adatok azt szeretnénk, ha.
De egyikünk sem lesz képes kitalálni, hogy - nem lesz képes dekódolni
hogy az információ, mert a nyilvános kulcs nem képes visszafejteni.
Ez csak titkosítani.
És ez jó / részletes matek -, mint egy csomó modul szereplők és exponenciálisok, meg ilyesmi,
hogy csak működik, hogy a titkos kulcsot az egyetlen dolog, ami
visszafejteni a nyilvános kulcsú titkosítási cucc.
Igen. Lásd az RSA rövid részleteket.
[Student] Ez a honlapon?
[Rob] Igen, azt hiszem, ezen a ponton. Vagy legalábbis a YouTube-linket, hogy volt kifüggesztett.
Lássuk csak. Shorts. Azt hiszem, ez lett volna 2. hét kapcsolatos. Igen. RSA.
És ez - Nem megyünk játszani ezt a - 24. percében.
Ez egy hosszú.
>> További kérdések?
[Student] Tudnál beszélni röviden a bitmaszkok? >> [Rob] Persze.
Röviden, az ötlet csak, hogy, mint a - >> [Student] Mi az, Rob?
[Rob] bitmaszkok. Az ötlet - mondjuk, van néhány - we're használ valamilyen egész szám -
int x - így kezdjük le a 0-ra.
Nos, ez a 32 bit egész szám, így egyetlen 1 ilyen bitet lehet használni, hogy képviselje
egy adott FLAC.
Ez az a hely, ahol, ha megnézi az operációs rendszer kódokat, akkor használja ezt az egész hely
ahol lehet, fel tetején valahol ők hash meghatározzák -
Lássuk néhány példát.
Man-2-nyitott - a nyílt rendszer hívás akkor láthatjuk, hogy egyik érv az int zászlók -
mit számít az, hogy az érv néhány ezek a zászlók.
Látjuk O_append, O_ASYNC, O_CLOEXEC,
O_CREAT, és így tovább.
O_DIRECT. Ezek a fajta zászlók hash meghatározott valahol.
És mindegyik pontosan 1 bit.
Tehát, O_CREAT lehet hash-meghatározása 1., bal-shift, 4. cikk (1 << 4).
Ez lesz az - ha használom O_CREAT ez csak lesz -
bináris 1, 0, 0, 0 és 30-szerű nullák előtte.
Ez csak egy kicsit egy sor, és hogy a kis képviseli ezt a zászlót.
És így más zászló lesz balra tolódott 4.
Én képes képviselni akár 32 zászlók egyetlen egész csinál -
x = O_CREAT kicsit bölcs vagy O_DIRECT.
Te csak szedés bármely 2 olyan zászlók.
Most x megy, hogy 2 bit be, amelyek megfelelnek a 2 bit
A O_CREAT és O_DIRECT.
Az út, amely azután -, így aztán át x a szabadba funkció
és nyílt igényeket, hogy mi zászlókat ténylegesen beállítva.
Nos, ez az, ahol ez fog csinálni a dolgokat, mint
if (x & O_CREAT) tenni valamit,
vagy ha (x + O_DIRECT) valami mást,
, és akkor lehet, hogy néhány zászlót, hogy nem állított be -
if (x & O_ - Nem tudom, mi a másik zászlók voltak -
(X és O_RDONLY) -, hogy az adott feltétel nem fog hajtani.
Vagy hogy a blokk kód nem fog végrehajtani,
de ezek a 2., mert azok 2 zászlókat állítottak.
És észre, hogy a C-ben olyan érték, amely nem 0 igaz.
Tehát, (x & O_CREAT) lesz, vagy 0, vagy O_CREAT
mert O_CREAT csak egyetlen bit készlet.
Ha ez a bit be van állítva mellett, akkor ez lesz, hogy visszatérjen O_CREAT -
A bináris ahol csak, hogy kicsit be van állítva.
Ha ez a bit mellett nincs beállítva, akkor fog visszatérni 0, ebben az esetben tudjuk, hogy a zászló nem volt beállítva.
Így használja bitmaszkok.
Azt hiszem, egy korábbi vizsgálat vagy talán az osztályban, vagy valami -
akkor is használhatja bitmaszkok kinyomtatni a bináris változó.
Szóval lehet használni - a ciklusok vége - 1., bal shift, 0 -, majd nyomtatni, ha x és hogy -
ha x és 1, bal shift, 0 - majd nyomtassa 0 vagy 1 lehet. Vagy nyomtasson 1 else print 0.
Aztán menjen át még egyszer -, ha x & 1, a bal-shift, 2 - akkor ez azt jelenti, hogy a második bit
A változó be van állítva, így nyomtasson 1 mást nyomtatni a 0-ra.
És azt hiszem, talán tényleg akarom, hogy fordított sorrendben, mert
általában szeretné, hogy a bal oldalon, hogy a legmagasabb rendű bitek
és a jobb oldalon, hogy a legalacsonyabb értékű bit, így valószínűleg loop 4 int i = 31, míg elütöttem 0,
akkor ne, hogy a pontos állapot - ha x & 1, a bal-shift, i, nyomtassa 1 mást 0-ra.
[Student] Köszönöm.
>> [Rob] Azt hiszem az időből.
Egyéb kérdés az elmúlt néhány out-of-time másodperc alatt?
Rendben van. Sok szerencsét holnapra.
Ez volt az utolsó rész, ahol a jövő heti lesz kötelező.
Adok vissza, vetélkedők, és mehetünk át őket és talán megy át, más dolog, hogy
voltak kíváncsiak, vagy a projekt végső dolgok, vagy a jövőben a CS osztályok dolgokat, vagy - nem tudom.
De ez az utolsó anyag töltött részben.
Bye!
(Taps)
>> [CS50.TV]