>> [Artikel 9] [meer gemaklik]
[Rob Bowden] [Harvard Universiteit]
[Hierdie is CS50.] [CS50.TV]
>> Alle regte. Eintlik is dit vandag is al wat aan julle 'n paar vrae te vra.
Ek kan in staat wees om te dwaal met 'n paar onderwerpe
vir 'n bietjie as niemand het enige vrae te vra.
Hopelik sal jy doen. Is daar iemand enige vrae?
Miskien uit die verlede vasvrae, dinge wat jy nie gemaklik met die oomblik.
>> Ja. >> [Studente] Kan jy gaan oor buffer oorloop aanvalle? >> [Rob] Seker nie.
Die belangrikste voorbeeld eintlik kan hier wees nie.
Die hoof hanteer agter buffer oorloop aanvalle
Ons het 'n paar buffer, hier.
Char c - wat net van die grootte 12 -
maar dan is ons die inbring van iets in daardie buffer
maar nie die beheer van presies hoeveel ons inbring.
Hier is ons inbring StrLen (bar) in C, maar wie weet hoe lank bar is.
As dit langer as 12 karakters, dan is dit gaan hierdie buffer oorloop.
Kyk na hierdie foto -
As jy 61 jy sal baie meer vertroud te kry met hierdie soort van uitleg
en die hantering van die wat gered raam wyser en terugkeer adres en ouers se roetine stapel
en al hierdie dinge werklike.
Maar hier het jy net nodig het om te weet dat ons 'n
hierdie klein ruimte vir ons buffer.
Hier het ons c (0) en dan het ons c, 1, 2, 3, 4, 5 en so aan.
Onder normale omstandighede sou ons hierdie buffer vul soos gewoonlik.
As ons plaas 'hallo' ons wil h-e-l-l-o / 0,
en dan net 'n klomp leë ruimte.
Vir 'n hacker - O, ek dink dit is die voorbeeld.
Vir 'n hacker ons iets soos hierdie waar kry
wat hulle spesifiek probeer om te doen, is om
gewoonlik ignoreer die terugkeer adres.
Wanneer jy na 'n funksie en jou stapel raam kry gestoot op die stapel
dat stapel raam nodig om te weet hoe om -
Wel, die funksie wat geroep is nodig om te weet hoe om terug te keer na die funksie wat dit genoem.
Dus, as hoof oproepe cat cat nodig om terug te keer na die hoof,
en dit is wat hierdie terugkeer adres nie.
Maar wat die hacker gaan doen, is om
ignoreer dit met 'n spesiale terugkeer adres
waar weer - Little Indian - dit is nie eenvoudig, maar elke byte is agteruit.
Hierdie terugkeer adres so ver as die rekenaar is bekommerd
terug te keer na hierdie adres is gelykstaande aan die terugkeer na foo of hoof
of wat ook al funksioneer dit genoem.
So dit gaan om terug te keer na hierdie adres
wat net so gebeur hierdie adres te wees
wat óf soms wat hulle hier doen, is gebruik om die terugkeer adres
van 'n spesifieke funksie wat hulle weet is reeds daar.
Ek kan nie onthou wat die funksie genoem.
Ek sal kyk dit later.
>> Hier wat hulle doen, is verby die terugkeer adres
die stapel self, en dit is 'n bietjie vreemd, waar
Daar is voorbeelde van die geheue waar -
geheue kan verdeel word in slegs-lees-, lees-en skryf, en uitvoerbare geheue
waar ons gesien het lees-alleen geheue voor waar die -
As ek sê char * s = Hello Ek kan nie hallo verander.
Dit is slegs-lees geheue.
Daar is ook die idee van uitvoerbare geheue
waar die uitvoerbare geheue sou die teks segment van die kode nie.
Kyk na jou gewone adres ruimte uitleg -
Ek glo dit gaan 'n goeie beeld te wees -
dit werk - waar ons ons stapel hier. Ons het data geheue.
Ignoreer basies. Dit is ons hoop.
En dan het ons hier ons hoof program kode.
Dit is soortgelyk aan die plek waar ons ons snare soos kar * = hallo
en dit is slegs-lees.
Maar jy kan ook merk die belangrikste program-kode as uitvoerbaar nie.
En as jy dit doen of jou operating stelsel doen wat korrek
dan moet dit die enigste plek in die geheue
wat die kode kan eintlik voer
wat beteken dat hierdie soort van buffer oorloop aanval het ons meer hier
ondoeltreffend sou wees, want dit is besig om die geheue te hier in ons stapel te voer.
Let op die foto's is in die eerste.
Ons het ons stapel grootword.
Hier is die stapel groei af.
Vir CS50 doeleindes die stapel grootword.
>> Dit is moontlik hierdie spesifieke tipe buffer oorloop te omseil
deur met hierdie uitvoerbare dele van die geheue in 'n nie-uitvoerbare streke.
Maar dit gebeur net so dat selde is uitvoerbare geheue gemerk as uitvoerbaar nie.
Dit is geneig om net te wees slegs lees-en her-skryf is die enigste dinge wat gebruik word,
so dit is nog steeds baie effektief.
En hier is ons kan sit wat ons wil.
Dit was nie eintlik gedoen as 'n Pset in 61 hierdie jaar,
Maar as jy kyk na verlede jaar se aanbieding van hom of enige vorige jaar
een Pset is jy spesifiek veronderstel om hier invoeg kode wat veronderstel is om te
'n spesifieke waarde te druk of terugkeer 'n waarde wat verskil van
die waarde wat veronderstel is om gedruk te word.
Of selfs meer slim, dit wil hê jy moet bel of skryf -
so dit sal terugkeer tot hier en dan sal jy 'n paar kodering hier voer,
en die slimste van oorloop sal dan terug te keer na wat dit terugkeer adres gebruik te word.
So selfs al het ons nodig om dit te ignoreer
hier te kom, het ons nog onthou dat terugkeer adres iewers
sodat ons kan terugkeer na die hoof of wat ook al,
en dit is soos ons nog nooit gesien dat dinge verkeerd geloop het.
Maar dinge het sodat dit die geval is, waar miskien binnekant van ons hier gelbroke ons iPhone.
Dinge gaan soos normaal - soos ons hardloop 'n program en dinge eindig terugkeer na
wat dit veronderstel is om terug te keer, maar in die tussentyd
jy daarin geslaag om die hele bedryfstelsel te vernietig.
Jy hoef nie oor-kode buffer oorloop of eintlik neem voordeel van dit te leer ken.
Jy hoef die basiese idees van hierdie om te weet is die buffer wat is oorstroom,
en dit is die rede dat dit oorstroom kan word nie, want ons is nie seker te maak of
ons is eintlik binne die grense van dit.
>> [Studente] Die oplossing vir die voorkoming van dit is net die nagaan van die grense?
[Rob] Ja. In hierdie geval is die oplossing sou wees
jy kan òf sê as StrLen van bar is groter as 12-1 -
want jy moet die / 0 aan die einde -
of jy kan 'n hand te doen vir die lus wat net afskrifte van die eerste 11 karakters,
of net iets waar jy eintlik nagaan om seker te maak jy nie oorstroom nie dat buffer maak.
>> Ander vrae? Ja?
[Studente] Kan jy praat oor drieë en miskien iets oor programmering (onhoorbaar).
[Rob] Seker nie.
Die werklike program -
Ons sal nooit maak jy nie 'n implementering van 'n tydstip waarop die eksamen
want dit sou onregverdig wees om diegene wat hash tabelle gedoen het.
En net so sou ons dit nooit maak jy implementeer 'n gemors tabel op die eksamen
want dit sou onregverdig wees om diegene wat probeer het nie.
Jy moet egter weet dat die struct van 'n Trie of die struct van 'n hash tafel of wat ook al.
Dit is eintlik waar van enige soort data struktuur ons gesien het.
Geskakelde lyste, gestapel skews, binêre bome -
jy moet in staat wees om die structs te definieer deur die hart.
'N Trie - wat beteken dat die enigste ding wat jy sal moet doen, is miskien sal ons gee jou
sommige woord of iets en ons sal sê bou die Trie dat -
ons sal gee jou dalk 'n stel van woorde
en ons is soos bou 'n Trie dat hierdie woordeboek verteenwoordig.
>> Kom ons maak ons ​​woordeboek kat en hond.
Die idee van die Trie is ons begin met hierdie verskeidenheid -
26 slots -
en in elke slot die werklike indeks van die slot ooreenstem met die brief wat ons is bekommerd oor.
So hier, as ons probeer om die kat te voeg in ons Trie
Die eerste karakter is 'c' wat gaan wees as daar 'n 0 is dan b is 1, c is 2. "
Ons gaan om te gaan in die tweede indeks,
en ons gaan 'n Trie af van wat te skep.
Ons gaan 26 slots te hê.
En dan gaan ons na die indeks die tweede karakter van die kat.
Dit is 'n "wat gaan die 0 plek te wees.
En wat gaan 26 plekke te hê.
Dan gaan ons na 't "en ons sou ook dat afkom wat is eintlik soort van belangrike
omdat - laat ons dit kom hier. Hier is ons Trie vir 't'.
Kom ons sê dit is die indeks 't' is 19.
Die belangrikste ding om te onthou oor drieë is jy kan nie net die spoor van hierdie wenke hou.
Jy het ook om tred te hou of dit is eintlik die einde van 'n woord.
So, binnekant van hier moet ons 'n soort van vlag wat sê
okay, dit is eintlik die einde van 'n woord.
Die rede hiervoor is as ons later probeer om in te voeg katastrofiese in ons woordeboek
wat dieselfde begin 3 karakters
maar gaan verder moet ons erken dat dit die einde van 'n woord.
Of alternatiewelik as ons probeer om op te kyk "ca", wat dalk nie 'n woord
maar ons kry tot hier het ons -
Of sou dit wees c en dan moet ons kyk na 'n -
ons nodig het om te erken dat selfs al is daar 'n wyser uit hierdie knoop kom
dit nie die einde van die woord te stel.
>> So, wat beteken dit - wat het jy gaan om te sê?
Wat beteken dit ons struct lyk?
[Studente] Dit is 'n verskeidenheid van wenke wat is 26 lank en dan 'n Bool was of nie was.
[Rob] Ja. So, sal ons 'n struct Trie * wenke - hier sal ons sê [26] op
en dan die kommapunt hier.
Maar op die Pset, moet ons ook rekening vir apostrofs,
wat beteken jy nodig het om hard-kode wat toespraak met indeks 27 of iets.
Maar hier het ons net omgee 26.
En dan moet ons miskien 'n kar in of Bool - kom ons noem dit 'n woord.
Dit is 2 van die 3 dinge wat ek dink jy ooit sou nodig het om te weet oor die drieë -
bou hulle, die struct van hulle, en die laaste ding is die aanloop tyd van hulle.
>> Wat is die runtime van 'n Trie - of die lookup in 'n Trie?
Dit is waar ons sê dit is o (k) waar k is die lengte van die woord wat ons toevallig op soek up;
maar op dieselfde tyd wat ons sê - ten minste ter wille van Pset 5 speller se - ons sê
die langste woord in die woordeboek is 45 karakters, so dit is basies
die O van 45 wat konstant tyd.
So, as daar is 'n bogrens op jou langste woord dan -
of selfs soos die Engelse woordeboek - daar is 'n bogrens op jou langste woord.
Of enige woordeboek nie - daar is 'n langste gebind op jou bo-woord.
Maak nie saak wat jy doen, is konstante tyd,
maar O van k is mooi, want daar is eintlik 'n verskil tussen hardloop sê
45-karakter woord teenoor 'n alfabet wat net woorde tot 3 karakters.
Nog 'n ding oor dit is dat die -
O ja, want net sê dat 45 gebeur ons langste woord te wees
is 'n soort van dom, want op dieselfde tyd laat ons sê 'n algoritme is O van N.
Wel okay, want die geheue ondersteun net tot 2 ^ 32 grepe,
dan N is by die meeste 4000000000 en dit is konstante tyd, wat is die rede waarom 'n sekere punt
dit is dom om hierdie soort van ding waar daar is 'n bogrens te sê
dat ons net kan verminder konstante tyd, want alles is konstante
wanneer jy dink dit op hierdie manier.
Maar ons sal waarskynlik aanvaar beide van hierdie.
Verduidelik in elk geval nie dat O (1) beteken dat jy 'n boonste-begrensde lengte van 'n woord;
O (k) beteken dat jou lengte van die woord -
Wel, k beteken lengte van die woord.
>> Ja. >> [Studente] Is die Bool - want as jy jou Trie
dit lyk soos dit was nie - jy sal gaan kat en dan gaan jy na die volgende wyser
en dan moet jy sê as wat gelyk ware - sou jy sit dit waar te hou met die t?
[Rob] Kom ons dink dit is die geval waar 'n baie voorbeelde wat jy kan net probeer en kom met
eenvoudige en / of ekstreme voorbeelde en wat dit behoort te wees, so laat dink aan die woord 'a'.
In ons oorspronklike Trie -
sou ons wil sit 'n 1 hier, of ons wil hê om te sit 'n 1 hier.
Ek sou sê dat in die einde dit waarskynlik óf sou wees / of.
Ek kan nie dink aan 'n rede - of jy regtig wouldn't -
die rede waarom ek sou dit nie neersit nie daar nie omdat jy hoef nie eens te so ver te gaan.
Ons het nog nooit nodig om hierdie Trie toe te ken.
Ons het net sit die 1 tot daar.
Dit is nog steeds wys na null.
As ons gaan net enkele karakters te hê
daar is geen rede om af te brei na 'n ander Trie net dat die brief as gebruik te merk.
Net so, as ons het die 'n 'down is daar
dan noodwendig al hierdie sou net 0 te alle tye.
>> [Studente] Maar het ons nie nodig om 'n begin Trie wat verwys na die 'a'?
[Rob] Ons het 'n globale of iets struct Trie * t
wat dui hier nie, maar dit is net 'n wyser.
Dit is nie 'n volskaalse Trie dit is wys om dit te.
[Studente] Goed. Hoe sal ons ken die letter 'i'- met die woord wat ek?
[Rob] Sy vraag kan word beantwoord nie. Hou op.
Dit is 'n saak waar 'n Trie in en van die self -
Ek weet nie hoe die Pset sou dit geskryf het.
Die vorige struct was sleg.
Maar ons kan dit ook doen struct knoop is 'n Bool - en 'n wyser -
daar is eintlik verskeie maniere waarop jy dit kan skryf.
Alternatiewelik word 'n tydstip waarop hoef nie 'n struct te wees.
Dit kan selfs wees Trie - typedef knoop * -
knoop [26] is 'n Trie, en dit is nie meer struct.
Nou is daar gaan wees - Achievement probeer om te dink aan die manier waarop Pset sou verwag het om jou te.
[Studente] Ek opgetrek wat hersiening sessie en ek dink hulle gaan net -
soos as jy 'n 'n dan gaan jy na die volgende - >> [Rob] Dit is hoe hulle dit doen?
[Studente] En dan as daar is 'n ware daar is dit nie werk nie -
[Rob] Ja. Dit werk nie. Dit verkwis die ruimte van -
jy noodwendig 'n heel ander vlak van Trie dat jy nie in die eerste plek nodig sou wees.
Hier is dit om lelik met mekaar -
basies wat ek probeer om hier te doen, is om mede -
in plaas van 26 verwysings na jou drieë,
dit is 26 Bool wyser, Bool wyser, Bool wyser, en so aan.
>> [Studente] Jy kan dit nie maak dat 2 skikkings? 'N verskeidenheid van bools en 'n verskeidenheid van riglyne?
[Rob] Jy kan maar dan moet jy nodig het om te -
2 skikkings van booleans en wenke.
Jy sal moet dan bou jou boolse skikking -
jou boolse skikking moet wees so groot soos die Trie
want jy kan nie net 26 booleans.
Dit het om te groei saam met elke moontlike -
soos jou Trie het meer as 26 waar of vals moontlik woorde.
Op daardie stadium het hulle kan net so goed wees om 'n enkele struct dat jou Trie groei saam met.
Dit lyk nie reg nie, omdat - wat wil ek hier?
So, Trie * t -
kan jy doen typedef (knoop *) [26] Trie;
wat kan die sintaksis ek soek.
En dit moet net 'n gereelde Trie.
Ek is nie seker nie.
Maar dit is die manier waarop ons dit gedoen het in die hersiening, sodat werk perfek fyn, ook.
In hierdie geval is dit net Bool is woord en dan 'n skikking van 26
dan is jy hoef nie te gaan na die volgende vlak.
Ek sal dink oor die manier wat ek sou doen nie.
>> Ander vrae?
[Studente] Kan ek vrae te vra oor iets anders? >> [Rob] Ja.
[Studente] Kan jy gaan oor wat die verskil is en wanneer jy wil gebruik jQuery versus Ajax?
[Rob] Hulle is in en van die self heeltemal anders.
JQuery nie in staat stel om Ajax. Dit gee ons 'n paar makliker gebruik van Ajax.
Maar Ajax kom verskeep met JavaScript. JavaScript het Ajax vermoëns.
Alle Ajax beteken is vergelyk ek is reeds op 'n bladsy en wanneer ek wil -
wanneer ek op iets wat ek nie nodig het om die bladsy te herlaai dat nuwe inligting af te laai.
Ek vra net dat nuwe inligting.
Jy kan kyk na dit in Facebook of iets.
Inspekteer netwerk.
Krimp dit.
Hier sien ons dat ons om al hierdie versoeke.
Nou wanneer ek op - wel, dit doen Ajax nog voordat ek kliek op enige iets.
Maar as ek op, dan gaan dit 'n klomp van die versoeke om hier te maak
wat net die maak van hierdie versoeke - O, nou is dit hier.
Kom ons verfris.
Doen dit weer.
Ons sien dat ons al hierdie versoeke nie, maar dit kan nog steeds in die proses van die bladsy laai.
Let Facebook is die maak van hierdie konstante versoeke selfs na die bladsy gelaai word.
En as ek op hier, sal dit 'n paar meer versoeke vir 'n paar data maak
Dit is in reaksie op die ding wat ek net gekliek.
Dit is presies wat Ajax is. Dit kan jy trek vir data wat nie afgelaai met die bladsy oorspronklik.
>> JQuery is apart. JQuery is net 'n JavaScript-biblioteek wat maak 'n baie van die dinge makliker te maak.
Met jQuery dit is 'n groot deel van die voordeel is dit net -
dollar-teken - dollar-teken is 'n geldige veranderlike in JavaScript.
So, jQuery - al is dit doen sê soos var $ = 'n hele klomp van die dinge -
soos 'n groot funksie met al hierdie dinge in dit -
en dan gebruik jy dat die dollar teken in maniere soos
$ ("# Footer"). Styl ("text-align", "middel").
JQuery gee ons hierdie soort van sintaksis, waar 'n groot voordeel -
dit het ander funksies, maar dit wat ons wil hê jy moet fokus op die meeste
is net in staat is om die elemente soos hierdie te kies.
In gereelde, plain-ou JavaScript kan jy doen dinge soos
dokument-dot-kry element deur ID footer-dot - Ek weet nie wat dit is op daardie stadium -
iets oor CSS of styl of iets -
maar dan alternatiewelik, kom ons sê ons wil kies deur die klas.
Nou is ons stilering alles met 'n klas footer met hierdie styl.
Selfs as ons wou geen paragrawe te stileer.
So, hierdie selector - in staat is om dinge in die dom soos hierdie te kies is ongelooflik gerieflik
want in 'n gewone ou JavaScript jy wil hê dokument-dot-kry elemente te doen deur die klas se naam
of wat dit ookal is, of as ek wou 'n merker ek nodig het om te sê kry elemente deur tag naam.
So, ek moet die spesifieke maniere waarop ek toegang tot al hierdie dinge te weet.
Die funksies gaan anders wees, afhangende van of ek die gebruik van 'n klas of 'n ID
of 'n etiket of wat, terwyl jQuery nie net dat vir my.
>> [Studente] Is jQuery gebruik gaan word wanneer jy doen aanvanklike stilering van die bladsy?
Of om die stilering te verander nadat dit reeds - >> [Rob] om dit te verander.
[Studente] Na dit is reeds gelaai. >> [Rob] Ja.
Enige aanvanklike stilering - goed, selfs die -
algemeen sou jy hierdie soort van verandering gebruik.
Jy sal nie verander nie - dit sal perfek werk boete.
Maar gewoonlik sal jy nie die styl verander soos hierdie.
In plaas daarvan, sou jy dit gee 'n nuwe klas of iets
terwyl die CSS reeds vir daardie klas omskryf in 'n sekere manier.
Deur te gee van hierdie items wat ek kies van 'n nuwe klas
Ek is die toepassing van die style wat reeds afgelaai.
[Studente] So jy kies 'n paar van die blok en die dinge wat jy gekies het
verander na 'n nuwe styl en begin soek anders. >> [Rob] Ja.
Die ander dinge om te onthou oor -
Wel, daar is 'n paar funksies wat jy moet onthou oor jQuery.
Kom ons sê dat ons kies om iets met ID P.
>> [Studente] Moet jy altyd die pond te gebruik?
[Rob] Dit beteken ID. Dit is gelykstaande aan CSS, so CSS keurders - dit is geïnspireer deur dit.
Waar in CSS as ek wou 'n footer te Style -
of iets met ID footer -
dit sou wees soos text-align: center;
jy sal nie nodig CSS op die eksamen te skryf nie, maar jy moet die keurders te leer ken.
Jy moet weet wat - wat jy moet weet hoe om dit te lees.
Maar ons sal nooit -
jy hoef nie al die verskillende moontlike stilering dinge om te onthou. Of enige van hulle.
>> JQuery dinge wat jy moet onthou -
jy moet onthou dot-HTML, en 'n algemene patroon in jQuery - laat her-skryf.
'N Algemene patroon is ons $ ("# f"). Html
As ek net plain hakies wat beteken dat jy die HTML;
terwyl as ek sê HTML en sit wat ek wil hier - sommige skakel na iets -
om iets in die hakies sit nou die HTML.
Dit is redelik algemeen onder 'n klomp van die funksies.
Daar is dieselfde deal met teks.
Die verskil tussen HTML en teks is dat die teks gaan om dit te vul
as letterlike minder as 'n groter-as in plaas van as 'n anker tag.
En teks gaan om dieselfde te wees as ek net dit doen.
Dit gaan die teks van die dokument te haal - die HTML van die dokument nie
Maar net die teks in hierdie element.
Nog een is indien 'f' gebeur 'n ID vir 'n bydrae te wees,
dan hash-f-dot-val - as ek wil die insette te stel om iets soos -
Kom ons sê ek 'n boks en ek wil 'n standaard waarde te stel -
dot-val - ek weet nie eens - 3 - sodat outomaties voeg in die teks boks 3,
Maar as ek 3-dot-val, wat sal haal wat ook al is tans in die teks boks vir my.
>> Dit is nuttig vir die vorm validering waar
As ek wil net om seker te maak dat hulle eintlik ingestuur al die dinge maak.
Een manier om dit te doen is as hulle, nadat ek getref dien dit onvermydelik gestuur na 'n paar bladsy op die bediener -
soos dit vir ons PHP sou wees - en dit sou probeer om die data te verwerk en dit sou sê
hulle het nie iets te vul, sodat aansture hulle nou na 'n ander bladsy wat sê
jy het nie alles te vul.
In plaas van om dit te doen, in JavaScript / jQuery jy kan net sien of val is leeg.
Of is val - leë aanhalings.
Dit gaan net - nou kan ons hulle bedag maak dat jy nie op hierdie gebied het vul.
Onvermydelik jy nie nodig het om die PHP bediener-kant nagaan om te doen nie, omdat
jy kan net JavaScript skakel in al die blaaiers.
Maar JavaScript maak dit makliker vir diegene wat dit nie het geaktiveer,
en feitlik nege en negentig-punt-iets persent van blaaiers het dit op deesdae.
Baie min mense draai JavaScript af.
Dit is 'n gebruiker gerief. Jy moet PHP validering te doen.
Jy moet JavaScript validering te doen.
>> [Studente] Wat beteken # f verwys tot hier?
[Rob] Wat beteken # f verwys na?
Daar is 'n element in my dokument met ID 'f'.
Ons sal kyk na - waarskynlik Facebook het baie van die voorbeelde waar as ek na elemente
soek hier onder die elemente kan ek sien hierdie spesifieke div dit is uitgelig hier -
of is dit die hele bladsy - ja, dit is daar. Dit het ID pagelet_bluebar.
In konsole Ek neem aan hulle is met behulp van jQuery.
So, kan ek kies pagelet_bluebar sodat kies, en ek iets verkeerd gedoen het.
Kom ons probeer - of miskien het hulle nie die gebruik van jQuery en dat karakter se gekarteer na iets anders.
'N beter voorbeeld in iets wat ek weet, is die gebruik van jQuery -
nog steeds op soek na ons elemente hier - ons het hier die klas gelyk navbar.
Dit is iets wat met die klas navbar,
so binnekant van ons konsole ons kan kyk om die ding met die klas navbar.
Hier kan ons scroll oor hierdie en sien dit is wat dit is.
As ek wou doen. Teks Dit is die teks van daardie, so ek sien instellings vir die verslag hierbo log uit
wat almal onder hier, maar dit is nog steeds teks binne daardie HTML tag.
Ek kon die HTML ingestel om net 'n paar skakel,
so ek sal ontslae te raak van my bar. Nou dat ontslae geraak het van die kop heeltemal net so dit is gekoppel aan YouTube.
>> En is daar enige vorm voorbeeld?
Hier is 'n vorm.
Ek kan regs-kliek en inspekteer element om dit te kom hier.
Ek sien dat die ID is teks soek,
so hier as ek dit doen ID teks soek.
Ek bring oor dit en ek sien dat die korrekte ding wat ek was op soek na.
As ek wil. Val om dit te doen vir my sou gee wat ek daar was getik.
As ek wou doen hallo dit sal dit verander hier om hallo - jQuery.
Ek kon natuurlik belaglik doen soos document.get element deur ID - teks soek -
Ek weet nie eens wat dit is op hierdie punt - dot waarde nie - nee, ek het vergeet dat die man.
So, dit is hallo. Ek weet nie hoe ek wil stel dit gelyk aan iets.
Ja, so dat dit verander.
Maar jy hoef nie hierdie en baie baie webwerwe te gebruik op hierdie punt gebruik jQuery.
Selfs soos op 'n finale projek - as jy doen 'n web-projek - die eerste ding
Ek beveel is net insluitende jQuery, sodat jy kan die gerief van al hierdie funksies te kry.
>> [Studente] Ek dink ek het 'n ander manier te kry om 'n element gebruik dom.
Het jy dot te gebruik en dan hou om af te gaan?
[Rob] Jy kan dit doen. Ek weet nie of dit sal baie goed werk.
Dit is moeilik om weg te opgevolg.
Een voorbeeld is - ek weet nie eens of ons enige vorm -
maar document.forms gaan die lys van vorms wat op hierdie bladsy om terug te keer,
dan kan ek document.forms doen 0 gaan die eerste vorm te wees.
Dot - Ek weet nie wat ons het genoem dat - so dit het nie eens 'n naam,
so miskien insette sal werk. No
Ek weet nie eens hoe om te doen - kry element-ek-tag naam insette.
Ja, dit het my die insette, en nou wil ek die 0 om insette
en ek wil sy waarde te kies, so dit gaan teks te wees.
Ek het aan die einde doen get elemente deur tag naam in elk geval.
Daar is dalk 'n manier om dit te direk te kies wees
deur vorm 0, maar die lekker ding van dit is nog steeds soos ek op die etikette genoem raak insette het net
wat 'n kind van hierdie vorm, anders as ek net doen wat reguit voor
hierdie al die elemente op die hele bladsy, in die hele dokument sou kies
in plaas van net daardie vorm en dit sal waarskynlik nie eens die een wat ek wil hê.
Ek weet nie eens wat dit is. Ek weet nie.
Ek dink die eerste insette element op ons is hierdie klein boks.
>> [Studente] Dit is mooi onverwante
en moontlik soort van dom nie, maar op die antwoord sleutel dit sê dat PHP -
Ek weet nie of dit is die antwoord sleutel of notas, maar dit sê PHP is bediener-kant
en JavaScript is kliënt-kant. Wat is die verskil tussen die 2?
[Rob] Die verskil tussen JavaScript kliënt-kant en PHP bediener-kant.
As jy gehoor het van streep / gebruik knoop JS voordat jy sou dink dat
JavaScript is nie net kliënt-kant nie, maar vir CS50 doeleindes is dit -
of ten minste vir hierdie quiz se doel dit is.
PHP synde bediener-kant. Geen JavaScript.
Wanneer jy jou webblad skryf jy sal skryf PHP op die bediener.
Jy sal nooit skryf JavaScript op die bediener.
JavaScript eindig om gestuur word aan die leser waar die JavaScript-kode voer.
En die JavaScript-kode moet in die leser om te lewe, want anders wanneer ek wil
net doen enige soort van JavaScript-y ding soos te kliek op dit,
Ek is nie herlaai 'n bladsy. Dit is net JavaScript re-formatering dinge vir my.
As JavaScript gewoon op die bediener, dan sou ek nodig het om te onvermydelik iets vra
van die bediener om te weet wat om te doen.
PHP - daar is nie so iets soos PHP in die leser.
Toe ek 'n bladsy - so kom ons sê hier is ek versoek om hierdie spesifieke bladsy.
Dit beteken dat dit gaan om te vra -
verfris - dit gaan om hierdie bladsy te verfris -
sodat hierdie versoek gaan uit na ons bediener.
Dit sien dat dit nodig om terug te keer hierdie spesifieke draad met hierdie besondere ID,
So nou wat gaan 'n paar PHP dat die PHP tolk gaan dat die bladsy te interpreteer te wees
en omskep dit in net HTML, CSS, miskien JavaScript, wat ook al.
Dit is PHP wat prosesse hierdie versoek en kry al die teks en dinge
dat ek eintlik is op soek na van die databasis.
Maar wat laat die bediener is net HTML / JS / CSS.
Daar is geen PHP wat laat die bediener, want as dit eintlik gedoen
dan is die leser sal het geen idee wat om te doen met dit omdat dit nie weet wat PHP is.
Maar in dieselfde gedagte, want JavaScript is kliënt-kant,
jy kan nooit toegang tot MySQL daaruit.
Omdat PHP is bediener-kant jy nie toegang MySQL daaruit.
>> [Studente] Kan jy gaan oor 'n paar van die veiligheid betref met koekies in HTTP?
[Rob] Dit is nie dinge wat ons gaan nodig om te weet.
Sommige van die veiligheid betref met koekies in HTTP.
Die groot vraag hier is ons sien hier dat my koekie is PHP / ID.
Dit is soos die universele PHP jou sessie.
Jou sessie is iets wat binne-in PHP sal nooit te bekragtig moet word
want dit is die bediener wat het volle beheer oor die sessie.
Jy kan nie raak dit glad nie.
Maar dit is hierdie koekie - hierdie een -
en ek dink jy kan inteken as my nou as jy wou om dit te gebruik -
maar dit is wat koekie dat die - noodwendig wat jy maak 'n enkele versoek aan die bediener.
Die bediener gee die bladsy. Die versoek word gedoen.
Dit het nie meer 'n idee wie jy is.
So, is die volgende versoek wat jy maak gaan dit koekie te sluit, sodat hy weet
dit is die persoon wat die versoek gerig het nie.
Dit is die sessie data wat verband hou met hierdie gebruiker.
Dit is waarom jy hoef nie aan te meld vir elke bladsy wat jy gebruik.
Die sekuriteit probleem hier is dat die koekie gestuur uit oor die web.
Ons gebruik HTTPS hier, so in hierdie geval beteken dit dat ons versleutelen hierdie dinge.
Iemand kan nie in te kom en net my koekie steel en nou die bediener sal dink hulle is my.
Maar met reguit HTTP hulle kan.
Net soos hierdie Wireshark / FireSheep dinge wat jy net kan luister na al die wi-FIS in die lug
en onderskep wat jy wil, so ja.
>> [Studente] 'n soort van 'n soortgelyke sekuriteit risiko stoor gebruiker ID's in post
want dit vrylik kan geredigeer word met behulp van consoles en dinge.
[Rob] Ja. Daar is baie van die kwessies waar soos net iets wat kom van die gebruiker
wat jy nodig het om te bevestig.
Daar is baie van die gevalle waar dit nuttig vir soos ek is oor 'n post te maak sou wees.
Blah, blah, blah, blah, blah. Toe slaan ek antwoord.
Dit sou baie nuttig wees as die pos versoek ingesluit my ID, want
Ek wil hierdie post te assosieer met my.
Maar ek kan dit nie doen nie, want ek is vry om 'n post versoek te maak - net soos met die hand
kom met my eie post versoek -
wat gebruik maak van jou gebruiker-ID en nou sal dit pos as jy.
Dit is waarom die bediener-kant Ek kan nie op die post versoeke wat die korrekte gebruiker ID staatmaak.
Dit is waarom dit het om te behoort in my sessie.
So ek kyk jou gebruiker-ID in my sessie verskeidenheid en ek voeg wat in my databasis
as die gebruiker wat eintlik het hierdie post.
[Studente] En dit is gebaseer op jou koekie?
[Rob] Ja. Dit maak gebruik van die koekie aan te pas wat jy as die gebruiker wat dit versoek.
Dit trek uit die gebruiker ID van daardie sessie en dat dan plaas in die databasis
met behulp van die gebruiker ID.
Dit wil knoppie - wat dit is eintlik doen, is -
Ek is nie van plan om dit hier te vind. Dit gaan 'n Ajax funksie te wees
Wat is Ajax funksie?
Laat my uit te vind wat my JavaScript is.
Dit was 'n CS50 projek om 'n ruk gelede.
Ek kan nie onthou wat dit is.
Ajax funksie - al Ajax funksie doen, is om 'n Ajax versoek om 'n bladsy met die ID -
met die ID 22453.
Dit is nie eens 'n pos versoek. Dit is 'n get versoek wat dit nog makliker maak.
As ek geweet het wat die URL is nie - dit is iets soos soos hierdie / ID = 22453 -
of ID = 22453? -
so besoek hierdie skakel sal dit graag.
Wat sou nie so veel van 'n probleem nie, maar dit is baie maklik om 'n lus om te skryf
wat net gaan hierdie skakel weer oor en oor te besoek, wat is die rede waarom jy sien
Isawyouharvard plaas met duisende van die dinge.
En hulle is geneig CS50-gebaseerde Isawyouharvard poste te wees.
Hoe kry ek die mees gewilde?
Hulle is geneig om redelik vinnig te verwyder kry ook.
Dit is nie die mees populêre. Daar gaan ons.
Cheaters op die mees graag bladsy - dis nogal relevant is vir hierdie oomblik.
Oh wow. Hulle het reeds verwyder enige van die kinders van die jaar wat reeds
verneuk. Diegene het al verwyder.
Daar sal nooit 'n pos wat kry hierdie hoë.
Hierdie een is natuurlik verneuk te kry op die mees graag bladsy.
>> Meer vrae?
[Studente] Wat moet ons weet oor XHTML?
[Rob] Feitlik niks. Presies wat dit is.
Die verskil tussen dit en HTML is dat XML is baie soortgelyk in voorkoms
HTML behalwe in HTML ons moet net 'n vooraf stel van etikette te hê.
Maar met XML - XML ​​is net soos 'n algemene formaat waar jy kan 'n XML-dokument maak
vir watter doeleindes jy wil.
So, byvoorbeeld, as ek wou ek kon 'n XML vir die kursusse bou -
en ek dink eintlik dat CS50 het 'n API vir hierdie.
My XML dokument kan iets lyk -
kursusse en natuurlik het ek moet 'n paar einde kursusse.
Ek kon 'n kursus het en dit kan 'n naam is gelyk aan CS50.
En dan my einde loop en ek kon in plaas van hier studente,
en dan binnekant van studente Ek het 'n lys van 'n student wie se naam is ook al.
Ek eindig dat student en so aan.
Ek het net gebeur het 'n paar arbitrêre XML-dokument gebou, maar dit is geldig XML.
XML - al is dit is hierdie soort van struktuur en die lekker ding - die rede dat ons selfs noem dit XML
is dat hierdie soort van ding is baie maklik om te ontleed nie.
Dit is baie maklik om hierdie dokument te neem en 'n skikking uit dit uit.
En so XHTML is 'n poging om HTML geldige XML te wees.
Reeds dit lyk redelik soortgelyk aan HTML.
Sommige van die verskille is HTML jy in staat is om dinge soos om insette te doen miskien soort gelyk aan die teks
dit is die standaard, so ek het nie nodig om te sê dat.
Afgeskakel.
>> Daar is 2 dinge hier wat hierdie ongeldig XHTML.
Die eerste ding is dat alle XML-tags moet 'n sluitingsdatum tag.
So in die geval van die insette wat ek nodig het om te doen om die - wat rigting van die streep is dit?
Hierdie rigting? Dit lyk verkeerd.
Ander rigting.
Self-sluittag.
Die tweede ding is dat met XML moet jy hierdie soort van soos sleutel waarde pare.
Dit moet 'n waarde wat verband hou met dit.
So, selfs al gestremdes in en van die self spreek wat ek wil -
Hierdie insette moet afgeskakel word -
dit is ongeldig XHTML.
Wat ek eintlik moet skryf is afgeskakel gelyk aan gestremdes.
Nou is dit geldige XHTML.
En dit is net die effense verskille wat HTML transformeer na 'n XML-gebaseerde soort van ding.
>> [Studente] XML is oor soos trek deur jou eie X heeltemal soos hoekom is dit (onhoorbaar)
[Rob] Die ding van soos 'n CSV - 'n CSV jy net waardes geskei deur -
dink net aan 'n sigblad. 'N CSV is basies 'n sigblad.
Jy het miskien kolomme en jy het 'n klomp van die rye wat
mede-data met dié kolomme, maar dit is dit.
XML is baie meer veelsydig in wat jy kan - jy het 'n arbitrêre hiërargie van data.
Ek kon verskeie kursusse wat verskeie studente in dit het
waar dit moeilik sou wees om te dink van 'n spreadsheet dat -
net dat enkele spreadsheet - CSV is veral soos net 'n enkele spreadsheet -
sodat enkele spreadsheet met al CS50, 51 en 61, en binne die al die
studente wat verband hou met die tye, miskien ontmoet tye en al daardie soort van ding.
Die ander ding is dat die etiket name gee 'n mooi naam vir al die elemente
so lees van 'n CSV lêer kan moeilik wees om te probeer en ontleed wat dit is eintlik sien wees.
XML is baie meer mens-leesbare so dit is waarom wil - kom tot 'n persoon wat nie
regtig weet wat 'n CSV of wil nie 'n programmeerder of iets -
jy hulle kan gee soos 'n sjabloon XML lêer en hulle het die lyne kan volg en -
O, ek is veronderstel om my naam te plaas hier.
Dit is 'n baie meer bruikbare formaat.
CSV het baie van die gebruike maar XML het verskillende gebruike.
>> Meer vrae?
Ander vrae?
[Studente] Uit die vorige toets - vertikale skaal teenoor horisontale skaal nie.
[Rob] Jy sal nie nodig om te weet dat. Ek dink nie ons het selfs bespreek dit.
Ek vermoed dit was net 'n een-off kommentaar.
Oh. Horisontale versus vertikale skaal is nie iets wat jy nodig het om te weet.
Ek dink die verskil is net soos - ja, die antwoord sleutel sal die verskil sê.
Vertikale skaal is net soos O, my rekenaar se swak doen. Ek kry 'n beter een.
Terwyl horisontale skaal is O, my rekenaar swak doen -
laat my sommer 20 van hulle te alle werk op die dieselfde taak.
>> [Studente] Kan ons gaan oor die geskakelde lys manier om toue. >> [Rob] Seker nie.
Dit is makliker as die skikking manier.
Die gekoppelde lys manier om toue.
Eerstens, wat beteken ons struct vir 'n geskakelde lys lyk?
[Studente] Is ons doen dit vir - >> [Rob] Kom ons doen die - ja.
Int val, dan struct knoop * langs;
so dit is wat ons vir die voorbeeld sal gebruik hier.
Kom ons eintlik tik hierdie dinge.
Kom ons doen linked_list.
Ons struct -
Goed. Nou kyk na ons ry ons die -
laat ons net 'n globale tou.
Dit sal knoop * tou wees, en ons het 'n dequeue funksie.
Ek dink hierdie dinge kan ook ongedaan waar of vals - laat doen.
Bool dequeue - en ons dequeueing - o. Hmm.
Int dequeue - wat het ons met die voor?
Int dequeue en ons het Bool enqueue en ons moet 'n paar wyse te enqueue waar.
Kom ons doen enqueue eerste.
Ons het ons tou. Ons wil iets te voeg in die tou.
Wat is die beste manier om dit te doen?
Hier ons tou lyk tans soos ons 'n paar globale wyser te begin.
Daar is ons ry.
Die veronderstelling dat ons dequeue deur die neem van die eerste element,
waar gaan ons wil hê dat ons node in te voeg sodat die toue te werk soos hulle moet nie?
[Studente] Aan die einde. >> [Rob] Ja. Toue is veronderstel om eers uit te wees in die eerste plek.
Dit beteken dat die nuwe element moet ingevoeg word hier. Goed.
>> Terug te kom na kode,
dit beteken dat ons sal wil loop oor ons ry.
Kom ons doen knoop * huidige = tou, terwyl die huidige nie gelyk NULL.
Ek sou doen - alles reg, kom ons doen dit apart.
Eerstens, die huidige = tou.
Wat doen ons as die huidige begin as NULL?
Ons sal dit doen op 2 maniere. Eerste op hierdie manier.
Wat doen ons as die huidige is NULL?
Is dit gelyk aan indien tou is NULL?
[Studente] Dit gaan valse om terug te keer. >> [Rob] Moet ons valse terugkeer?
Wat is verkeerd met die inbring van iets in 'n leë lys?
[Studente] Niks is verkeerd met dat. Jammer.
[Rob] Ja. So hier is die enigste verskil is my globale tou is wat gestuur word na my nuwe knoop.
En dan moet ek my tjeks van As tou is NULL te doen.
Terug onwaar.
En dan die tou val is gelyk aan i; tou langs gelyk NULL, terug waar.
Goed. Ek gaan die geweer te spring hier.
Onthou wat ons gedoen het dat dit die laaste tyd
waar ons het gesê dit is baie makliker om te werk met knoop ** met hierdie soort van ding.
So nou die huidige gaan wees en tou, en kom tot hier -
terwyl die huidige - terwyl * huidige nie gelyk NULL -
so laat my net nie die huidige - we'll praat oor dit in 'n tweede.
Huidige volgende. Goed.
Kyk na dit op hierdie manier, is hierdie iterating oor al my verwysings totdat ek bereik 'n nul wyser.
Die nul wyser gaan die wyser Ek wil vervang met my nuwe node te wees.
Kyk na iPad weergawe -
As my oorspronklike wyser en die geskakelde lys is leeg het die huidige gaan hier wys.
Dit gaan om te wys op nul is,
so dit is die wyser ek uiteindelik beweeg om te wys op 'n paar ander nuwe knoop.
Terwyl as die voorbeeld is die geval hier
dan is die huidige gaan deurkruis van hier - ek deurmekaar effens.
Waar huidige is veronderstel om die adres van die huidige volgende te wees.
Is dit wat ek wil hê? Huidige so * huidige gee my 'n knoop.
Volgende deurkruis na die volgende een.
Ek is tans hier wys.
Kom ons doen rooi - so ek tans hier wys.
Toe * huidige gaan hierdie knoop te verwys.
En * huidige volgende verwysings hierdie knoop, maar dit is nie wat ek wil hê.
Ek wil dit wyser na daardie knoop.
So, wat wyser na hierdie knoop is ampersand (* huidige) langs.
>> Op hierdie punt in tyd Ek het amptelik by die knoop wat ek wil vervang.
Kom ons vervang al hierdie toue huidige - en nou is ons klaar is.
Daar mag typos, maar die idee is dat met insetsel in hierdie soort van manier
is dit makliker om te werk met die wenke wat ons wil verander
in plaas van die behoefte om tred te hou - okay, is my begin NULL?
O dit is? Dan moet ek die begin knoop te skep iets spesifiek te wees
anders sal ek wil Itereer tot die volgende ding wat ek verwys na NULL
en dan sal ek te vervang wat - wat die volgende ding is - na my malloc knoop.
In plaas van dat die gevalle van mekaar te skei, hier het ek net met die geval van
Wat is die wyser wat NULL wat ek wil nie meer te nul,
en dit maak die lewe makliker buiten hierdie moet almal * huidige nou, want -
[Studente] Is hulle nog die grootte van 'n knoop?
[Rob] Ja. Ek is nog steeds mallocing 'n knoop.
[Studente] Is dit gaan om die grootte van 'n knoop * te wees?
[Rob] terug te kom na hier, dink aan die geval as dit is ons verbind lys.
Hierdie man wys af te null.
Na dat die rede waarom lus, huidige punte hier
want dit is die wyser wat NULL.
Nou wil ek dit wyser om te verander om te wys op 'n nuwe knoop.
Ek het eers malloc dat die nuwe knoop - so malloc grootte van node.
En dit gee 'n knoop * en nou die verandering van hierdie wyser is besig om na * huidige gelykes
hierdie nuwe knoop wat ek toegeken.
So, as die huidige is 'n knoop **, dan * huidige gaan 'n knoop te wees *,
en as ek iets mallocing die grootte van knoop dan is dit terug 'n verwysing na 'n knoop
so dit is 'n knoop * - so albei kante korrek dieselfde tipe.
En so, as wat ek nou net toegeken NULL was, terugkeer, vals is;
anders klaar die opstel van hulle wat ek wil hê hulle moet wees nie - behalwe dit moet hakies
want dit is nie hoe die orde van die dinge werk.
Sonder die hakies wat dit vertaal is as
huidige-pyl-Val dereference dat.
In plaas daarvan wil ek dereference huidige Dit bring my by 'n knoop.
Dan wil ek die waarde wat verband hou met die knoop te kry.
>> [Studente] Ek het gedink pyle toegelaat dat te omseil en gaan reguit na die waarde.
[Rob] Hulle doen. Dit is as ek - laat ons sê tou is 'n voorbeeld.
Ek is toegelaat om te doen tou-pyl-Val gelyk i want tou is 'n knoop *.
As daar 'n paar mooi sintaksis van soos die huidige-langer pyl-val of iets
wat het 2 dereferences, dan is dit goed sal werk.
[Studente] So het die pyl is slegs vir 1 dereference. >> [Rob] Ja.
Alternatiewelik kan ek hierdie skryf as (** current.val).
Net soos ek ook tou kon skryf as (* tou). Val.
So laat se plaas. Wel, dit is in die tou wat ek dink.
Dequeue gaan aansienlik korter.
Kom ons sit leemte in hier vir netheid.
So, dequeue. Wat element ek dequeueing?
[Studente] Die eerste een? >> [Rob] Ja.
As my eerste een is NULL - terugkeer - Ek weet nie wat ons wil hê om terug te keer - INT_MAX;
en dan moet jy 'n tjek te doen om te sien of INT_MAX terugbesorg.
Dit is die soort van ding wat raak inc nie anders wat ons wil -
kan ons net terug ry val? Is dit wat ons wil doen?
Dequeue ook implisiet verwyder die item uit die tou,
so laat ons sê eers - laat ons 'n tmp om te wys op die eerste knoop van ons ry.
Nou wil ons ons tou te bevorder na punt na die volgende ding in die tou.
Nou het ons 'tmp linkerkant. TMP val is die ding wat ons wil hê om terug te keer.
So, Val = tmp-> val;
Maar voordat ons dit terug moet ons bevry tmp en terug val.
Die volgorde van bedrywighede hier is belangrik in die sin dat ons 'n tmp te gryp
voordat ons ry na die volgende element.
Ons moet die waarde te kry voordat ons tmp,
en dan kan ons die Val terug.
>> [Studente] Indien ons die tou langs die tou?
[Rob] Ja. Dit is die skep van 'n slegte lus / dit sal nie werk ná die vrylating dit in elk geval.
Tou = tou-> volgende.
Ons wil die tou te bevorder na die volgende element nie die volgende element bevorder
wat die element is tans.
Stapels sal aansienlik wees - soos nog makliker in daardie dequeue is presies dieselfde
omdat ons trek uit die voorkant van die stapel.
Einde tou sou baie soortgelyke waar ons wil net 'n knoop te ken
en voeg in die voorkant van die stapel, so ons hoef nie eens te loop oor enigiets.
Ons het net direk voeg aan die voorkant.
Is almal goed op wat?
>> Goed. Meer vrae?
[Studente] Wat groot dinge moet ek in gedagte hou van die mees onlangse lesing?
[Rob] Die mees onlangse lesing.
Jy hoef nie 'n kode te leer ken.
Jy moet weet wat die oorkoepelende idees.
Nate se helfte het nie 'n kode het en so die skyfies aanlyn.
Hulle is net soos n blik op hulle, en hulle het die groot idees.
My helfte - wetende dat die oorhoofse idee van die eerste kan jy nie vertrou nie.
Die feit dat net soos miskien die proses van die samesteller kan sleg wees,
maar dit nie eens saak dat die bron-kode lyk goed.
Omdat die samesteller kan spesifiek aangepas word om die bronkode te verander
in die proses van die opstel van.
Op dieselfde tyd, net soos - ek dink dit is soos die groot idees van dit.
>> [Studente] Het jy noem dat ons hoef nie enigiets wat verband hou Firesheep om te weet -
of moet ons dit ken?
[Rob] Met Nate se helfte van die dinge, enigiets wat Nate aangeraak -
soos FireSheep, Wireshark - ek het nie eens dink wat hy gedoen het Firesheep in detail.
Jy het ook iets met daardie - dit was Firesheep - laaste week?
Het jy raak op daardie?
[Studente] Ja, ek dink ons ​​kan hê - >> [Rob] Ja.
Ons is nie van plan om jou te gee Firesheep uitset en sê dit interpreteer.
Dit is net gaan om te wees nie - dit sal 'n vraag soos wat Firesheep wees?
Wat is dit gebruik?
[Studente] Ek dink dit werk net op weergawe 4 van Firefox of iets.
[Rob] Dit kan gebreek word deur die nou.
Ek het geen idee nie.
Hulle lyk nie om dit met die hand afgeskakel,
maar miskien is dit nie werk met die mees onlangse Firefox.
[Studente] Ek het eintlik probeer om die installering van dit, want dit het gesê dit versoenbaar sou wees.
[Rob] So, ek dink dit werk nie met die mees onlangse Firefox.
Maar die idee nog staan ​​van wat dit veronderstel was om te wys.
Dit was absurd hoeveel van die wêreld is nie die lewe in HTTPS in die tyd.
Selfs in die laaste 2 jaar of wat ook al, dit is nog steeds - daar is dramatiese verbetering in die
aantal webtuistes wat gebruik HTTPS.
>> [Studente] Moet ons oor te gaan HTTP?
[Rob] Die protokol van dit? >> [Studente] Sommige van die dinge wat ons moet weet.
[Rob] Alle regte. Basiese dinge is alles wat jy kan sien in jou blad netwerk.
Toe ek 'n bladsy - terug te kom na die top van die belangrikste dinge.
Jy kan sien hier die versoek wat ek maak.
Chrome gebeur dit alles om die formaat van mooi vir ons
waar die versoek URL was dit, die versoek metode was AOO,
en die status kode was 200 OK.
As ek getref view source, ek sien meer direk dat -
en dit is - ons kon jou wys een van hierdie nie, maar dit is nie te moeilik om te interpreteer tussen hulle.
Hier is die regstreekse versoek wat ek gemaak het, so dit beteken dat ek na
apps.cs50.net/discuss/threads/inbox/all/HTTP/1.1.
En die protokol dit gebruik was HTTP/1.1 wat is feitlik nie - dit is altyd gaan om dit te wees.
Hier het ons gewoond te raak, so dit is dalk ook POS.
En dan kom neer - al die pad af te reaksie kop - as ons sien dat die bron,
dit is waar ons die 200 OK.
Ken die moontlike verskillende status kode van hierdie.
Ek dink in die hersiening ons nie sê 'n paar van hierdie,
so 403, 404 - dié soort van algemene hiervan.
Dit is die groot idee van dit.
Die verskil tussen net HTTP en HTTPS is dit encryption.
>> [Studente] Is jy gedoen? >> [Rob] Ek dink nie so nie. Wel, yep.
[Studente] Sal jy praat baie oor die algemeen oor hoe enkripsie werke?
Omdat ons gepraat byvoorbeeld wanneer die comprimeren Huffman lêers,
jy weet hoe om hulle te decomprimeren omdat jy eintlik die hashtable gestuur in die lêer
So hoe werk versleuteling?
Hoe kan jy weet hoe om inligting te enkripteer as jy nie eintlik gestuur om die kliënt
die sleutel tot die - en jy kan eintlik gryp die sleutel van -?
Hoe die algemene proses werk?
[Rob] Die algemene proses van kodering -
Dit is 'n ongelooflike gedetailleerde vraag wat ek sal beantwoord.
Daar is 'n kort - Wel, ek en Tommy het die kort.
Ongelukkig is dit soos 26 minute, so dit is nie 'n kort. Dit is 'n lang.
Maar ons kort op RSA wat is net een voorbeeld van hierdie,
en dit RSA is deel van die algehele HTTPS-protokol.
Die idee - RSA is 'n voorbeeld van die publieke sleutel kriptografie,
wat beteken dat jy 2 aparte sleutels.
Jy gebruik 1 sleutel om werklik dinge enkripteer,
en julle 'n ander sleutel gebruik om dinge te ontsyfer.
Hierdie sleutel wat jy gebruik om dinge te enkripteer is die een wat die publiek.
Die webwerf kan jy dit stuur enkripsie sleutel.
Hulle doen jou stuur nie dat kodering sleutel, en wanneer jy wil om iets terug te stuur na hulle
jy gebruik wat enkripsiesleutel al jou data te enkripteer en stuur dit aan hulle.
So, hulle is die enigste wat met die private sleutel.
As dit private sleutel bekend geword toe iemand in staat sal wees om jou data te ontsyfer.
Maar dat private sleutel - wat is wiskundig verwant aan die publieke sleutel, maar jy kan nie
vind een uit die ander - sodat private sleutel kan gebruik word om die data te ontsyfer.
Want hulle is die enigste wat met die private sleutel
hulle is die enigstes wat die data kan lees.
So selfs al is die publieke sleutel is publiek,
Ek gebruik dieselfde - as ek gaan na Google.com of wat ook al,
hulle mag hê veelvuldige, ek weet nie - maar as ek gaan na Google.com,
hy gaan na Google.com, sy gaan na Google.com--
ons almal kan dieselfde publieke sleutel gebruik om ons eie inligting te maar ons wil enkripteer.
Maar nie een van ons gaan in staat wees om uit te vind - gaan in staat wees om te decrypt
om hul inligting, want die publieke sleutel nie in staat is om te decrypt.
Dit kan net enkripteer.
En dit is pret / gedetailleerde wiskunde van - soos 'n klomp van die module operateurs en Exponentiële en dinge,
dat dit net werk uit dat die private sleutel is die enigste ding wat kan
decrypt die publieke sleutel enkripsie se dinge.
Ja. Sien die RSA kort vir meer besonderhede.
[Studente] Is dit op die webwerf?
[Rob] Ja, ek dink dit is op hierdie punt. Of ten minste 'n YouTube skakel na dit gepos is.
Kom ons kyk. Kortbroek. Ek dink dit sou week 2-verwante gewees het. Ja. RSA.
En dit is - we're nie van plan om dit te speel - 24 minute.
Dit is 'n lang een.
>> Meer vrae?
[Studente] Kan jy kortliks praat oor die bitmasks? >> [Rob] Seker nie.
Kortliks, die idee is net dat soos - >> [Studente] Wat is dit, Rob?
[Rob] Bitmasks. Die idee is - laat ons net sê ons het 'n paar - we're die gebruik van sommige integer -
int x - so, begin ons om dit af by 0.
Nou, hierdie heelgetal is 32 stukkies, sodat 'n enkele 1 van daardie stukkies kan gebruik word om voor te stel
'n spesifieke FLAC.
Dit is waar as jy kyk na die bedryfstelsel kodes gebruik hulle hierdie al oor die plek
waar miskien tot bo iewers hulle hash-definieer -
Kom ons kyk 'n paar voorbeelde.
Man-2-oop - die open-stelsel oproep kan ons sien hier dat een van sy argumente is int vlae -
wat dit verwag as daardie argument is 'n paar van hierdie vlae.
Ons sien O_append, O_ASYNC, O_CLOEXEC,
O_CREAT, en so aan.
O_DIRECT. Hierdie vorme van vlae hash-gedefinieerde iewers.
En almal van hulle is presies 1 bietjie.
So, dalk O_CREAT hash-gedefinieer as 1, links-shift, 4 (1 << 4).
Dit gaan wees om die - wanneer ek gebruik O_CREAT wat net gaan wees -
in binêr 1, 0, 0, 0, en 30-ish nulle voor dit.
Dit is slegs 'n enkele bietjie van 'n stel, en dat die bietjie verteenwoordig hierdie vlag.
En dus is daar geen ander vlag gaan word links geskuif 4.
Ek is in staat te stel tot 32 vlae in 'n enkele heelgetal deur dit te doen -
x = O_CREAT bietjie wys of O_DIRECT.
Jy is net pluk enige 2 van die vlae.
Nou x gaan 2 stukkies stel wat ooreenstem met die 2 stukkies te hê
van O_CREAT en O_DIRECT.
Die manier waarop dan - so dan is ons verby x in die oop funksie,
en oop behoeftes om te sien wat vlae is eintlik stel.
So, dit is waar dit gaan dinge soos om te doen
if (x & O_CREAT) iets doen,
of as (x & O_DIRECT) doen iets anders,
en dan is daar dalk 'n paar vlag wat ons nie gestel het nie -
if (x & O_ - Ek weet nie wat die ander vlae was -
(X & O_RDONLY) - daardie spesifieke toestand is nie van plan om tereggestel te word.
Of dat blok van die kode is nie van plan om uitgevoer word,
maar hierdie 2 is omdat die 2 vlae is ingestel.
En sien dat in C, enige waarde wat nie 0 is waar.
So, (x & O_CREAT) sal wees 0 of O_CREAT
omdat O_CREAT het slegs 'n enkele bietjie stel.
As dit bietjie langs stel, dan is dit gaan O_CREAT om terug te keer -
die binêre waar net dat bietjie is ingestel.
As dit bietjie volgende is nie gestel nie, dan is dit gaan om terug te keer 0, in welke geval ons weet die vlag is ingestel.
Dit is hoe jy bitmasks gebruik.
Ek dink op 'n vorige eksamen of dalk in die klas of iets -
jy kan ook gebruik bitmasks uit te druk die binêre van 'n veranderlike.
So ek kan gebruik - herhaling oor - 1, links-skuif, 0 - en dan druk as x en dat -
As x en 1, links verskuiwing, 0 - druk dan 'n 0 of 1. Of druk 'n 1 anders druk van 'n 0.
En dan het ek gaan oor weer - as x en 1, links-shift, 2 - dan beteken dit dat die tweede bietjie
van die veranderlike is ingestel, so ek druk 'n 1 anders wat ek druk 'n 0.
En ek dink ons ​​kan eintlik wil doen in die omgekeerde volgorde omdat
gewoonlik wat jy wil die linkerkant om die hoogste orde stukkies
en die regterkant te wees om die laagste orde stukkies, so dit sal waarskynlik lus 4 int i = 31 totdat ek getref 0,
dan nie die presiese toestand - as x en 1, links-shift, ek, druk 1 anders 0.
[Studente] Dankie.
>> [Rob] Ek dink ons ​​is uit van die tyd.
Enige verdere vrae het in die laaste paar out-of-time sekondes?
Alle regte. Sterkte môre.
Dit was die laaste gedeelte waar volgende week se gaan opsioneel wees.
Ek sal terug gee vasvrae en ons kan gaan oor hulle en miskien gaan oor ander dinge wat
jy belangstel in, of finale projek dinge, of toekomstige dinge of CS klasse - Ek weet nie.
Maar dit is die laaste materiaal gevul afdeling.
Bye!
(Applous)
>> [CS50.TV]