[Powered by Google Translate] [Vika 9]
[David J. Malan - Harvard University]
[Þetta er CS50. - CS50.TV]
Allt í lagi. Velkominn aftur. Þetta er CS50, og þetta er upphaf viku 9.
Í dag við áherslu sérstaklega á hönnun, ekki lengur í tengslum við C
en í tengslum við PHP og a hluti af SQL og hluti af JavaScript,
sérstaklega til enda bæði pset 7 og einnig lokaverkefni þitt.
Í staðreynd, ef þú ert á þeim stað í síðasta verkefni
þar væntanlega eins og um klukkustund eða svo fyrir þig að minnsta kosti farinn að gefa sumir hugsun
við lokaverkefni og þú ert að hugsa þú vilt vinna með 1 eða 2 bekkjarfélaga,
Ef þú ert í vandræðum með að tengja við sagði bekkjarfélaga,
ekki hika við að fylla út eyðublaðið cs50.net/partners/form.
Það spyr bara hver þú ert, hvers konar verkefni sem þú ert að hugsa um,
þar sem þú býrð bara til skipulagningar ástæðum.
Og svo ef þú vilt hafa auga á næstu viku eða svo töflureikni vefslóð þar,
þú getur þá séð lesa-eini útgáfa af Google Doc
þar sem við erum að safna að upplýsingum.
Svo ef þú vilt vinna með einhverjum, finnst fyrir alla muni frjáls til að ná til fólks
gegnum þessi kerfi.
En meirihluti af fólkinu vinna verk sóló. Það er alveg í lagi.
Svo finnst ekki að þetta sé á nokkurn hátt skylda.
Á föstudaginn var það bara ég og nokkrar af liðinu hér,
tóm leikhús að mestu leyti.
Það voru 3 ferðamanna situr þarna svo það var svolítið klaufalegur.
Það sem við ræddum um var gagnagrunna og við ræddum um pset 7 svolítið.
Og ef þú hefur ekki gerst að grípa það á vídeó bara enn, það er í lagi.
Ég ætla að reyna að skilgreina þau hugtök sem við ella taka sem sjálfsögðum hlut
byggt á fyrirlestri föstudag.
>> En í dag ætlum við að reyna að fá þig til að benda
á ekki bara að vera fær um að gera eitthvað eins og pset 7
en í raun skilja hvað er að gerast undir hetta,
einkum sum Huglægt sem við höfum sett á stað í functions.php skrá
til að gera líf þitt svolítið auðveldara en svo að þú skiljir að lokum
þannig að þegar þjálfun hjól koma út í nokkrar vikur enn er hægt að lifa
í hinum raunverulega heimi og gera þetta efni án CS50 ramma undir þér.
Þetta $ _SESSION, fyrir þá sem eru kunnugir
eða sem þegar lent á vídeó á föstudaginn, hvað þýðir fundi skulum gera
í PHP-undirstaða vefur umsókn?
Þetta er superglobal breyta, sem þýðir að það er svipað og í anda við FÁ og POST
og nokkrir aðrir, en það er þetta gagnlegt fyrir?
>> Hvað er fundi notað? Já. [Nemandi] Annálar inn
Því miður? [Nemandi] Annálar inn Annálar inn Reyndar.
Í pset 7 við erum að nota Þessi fundur superglobal að auðvelda skrá þig inn
Og hvað er gott um þessa superglobal er að það er tengin array.
An tengin array, muna, er bara fylki en ekki lengur Hvers vísitölur að vera númer
eins og 012. Þeir geta verið tölur eða þeir geta verið jafnvel strengir.
Og svo ef þú hefur kafa í pset 7 enn, getur þú manst að við erum að geyma lykil kallast auðkenni
innan þessa tengin array sem gildi er eitthvað eins og 123 -
hvað er nú skráður á ID notanda er.
The hvatning fyrir þessu er að jafnvel eftir að notandi hefur heimsótt localhost
eða vefsíðu mína meira almennt og þeir hafa skráð í,
jafnvel ef þeir smella á tengilinn og fara á heimasíðuna mína í 5 mínútur
eða jafnvel klukkutíma eða jafnvel á dag, en þeir fara glugga þeirra opin,
um þetta superglobal get ég man að þeir eru tengd
>> Með öðrum orðum, það leyfa mér að geyma örlítið lengri tíma allt sem ég vil um notanda.
Og hægt er að hugsa um það í raun eins og holdgun af innkaupakörfu.
Staðir eins og Amazon láta augljóslega að setja hlutina í innkaupakörfu,
en HTTP, siðareglur sem knýr á vefnum, er án ríkisfangs
í þeim skilningi að þegar þú heimsækir vefsíðu,
að mestu leyti þú þarft ekki einhverja stöðuga nettengingu
milli þinn flettitæki og miðlara.
Um leið og þú hefur hlaðið niður HTML og JPEG og GIF og allt það,
tengingin fer í burtu og þú verður bara afrit af HTML og whatnot frá þjóninum.
En ef miðlara vill að muna eitthvað um þig,
byrði er á miðlara til að raunverulega taka upp þær upplýsingar.
Og svo þú forritari sem hafa stjórn á þjóninum
hægt að setja flest allt sem þú vilt inni af þessu superglobal tengin array
og það mun vera þar næst þegar notandi kemur aftur,
hvort sem það er mínúta eða jafnvel dögum síðar, nema þeir loka glugga þeirra,
á hver benda fundi hverfur.
Svo það er skammvinn geymslu, það er ekki viðvarandi, og það er ætlað að fara burt
um leið og notandinn lokar vafranum þeirra - ekki bara að flipanum, oft allt vafra,
þannig í raun að skrá þig inn á notandi út.
Svo hvernig er þetta framkvæmd í raun?
Við skulum taka fljótur líta á einfalt dæmi skoðuðum við á föstudaginn.
Fyrir þá framandi, það var eins einfalt og þetta.
Þetta er vefsíða sem tilgangurinn í lífinu er að segja mér
hversu oft ég hef heimsótt þessa síðu.
Þetta er í fyrsta sinn hér á mánudag sem ég heimsótti hana, svo það segir 0 sinnum.
>> En ef ég byrja að endurhlaða þessa síðu, segir það 1 tími, 2, 3, 4, 5,
og þetta mun að lokum bara að halda áfram að telja upp, upp, upp, upp, upp
í hvert sinn sem ég í raun að smella Endurhlaða á það.
Svo hvernig er það að vinna? Leyfðu mér að fara inn á þessa skrá sem heitir counter.php.
Efri hluti þess er öll blá athugasemdir, en áhugaverður hluti er hér.
Á línu 13 Við köllum þessa aðgerð session_start,
og það er bókstaflega allt sem þú þarft að gera ef þú vilt hafa aðgang að
þessu sérstaka superglobal heitir $ _SESSION.
Það gerir það allt mögulegt, og við munum sjá í smá stund hvernig það er allt mögulegt.
Í samræmi 16 fyrirvara hvað ég er að gera.
Ef lykillinn heitir gegn - með öðrum orðum, að vísitölu - "gegn"
er inni í þessu fylki kallast fundi, þá hvað er ég að gera með það í línu fyrir neðan?
Hvað er lína 18 að gera?
>> [Inaudible nemandi svar] Hvað er það? [Nemandi] Geymsla gildi. Gott.
Það er geyma gildi sem er á fundi núna í nýja staðnum tímabundna breytu,
$ Gegn í öllum lágstöfum.
Takið eftir að PHP er nú þegar að vera svolítið latur hérna.
Takið eftir að við höfum ekki að tala um INT eða float eða band eða eitthvað svoleiðis
vegna PHP er veikt tegund, þar sem þú þarft ekki að tilgreina gerð breytu,
og í þessu tilfelli hér að ég hef ekki einu sinni lýst því enn.
Ég er að lýsa yfir því innan þessara hrokkið axlabönd og ólíkt C, þetta er í raun allt í lagi.
Sama hversu djúpt hreiður yfirlýsingu breytu er í PHP -
inni hrokkið borsveif, inni hrokkið borsveif og þess háttar -
mun á þeirri stundu í tíma til að loka forritinu,
fyrir betri eða verri.
Þannig að það verður strax heimsvísu um leið og þú skilgreinir það sem við erum að gera hér.
>> Annars, ef ég finn ekki að það er eitthvað í þinginu superglobal,
Ég er greinilega Frumstilli þessa breytu gegn 0,
þannig bara miðað notandinn hefur aldrei verið hér áður.
Og þá er þetta auðvitað er incrementing borðið hvernig?
Ég er að uppfæra verðmæti sem er inni þessa tengin array
því að setja það jafnt hvað gegn nú er + 1.
Ef ég skruna niður til HTML á síðunni, það er í raun mjög einfalt.
Það eina sem ég hef í líkamanum á þessari síðu er, "þú hefur heimsótt þessa síðu svo-og-svo sinnum."
Og þetta er PHP reisa.
Ef þú gerir <? =, Jafngildir í raun að það virka?
Það er í raun jafngildir eitthvað eins printf, sem við höfum séð oft í C,
Þó eins og þið vitið nú þegar frá sérstakur í pset 7,
prenta er líka fall sem bara prentar eitthvað út, það er ekki í raun að nota snið kóða,
og þú getur í raun að segja bergmál eins og heilbrigður.
Þeir eru allir alltaf svo örlítið öðruvísi þótt nettó áhrif er að lokum sú sama.
Svo þessi notkun jafngildir skilti er bara tegund af glæsilegri leið til að gera það
meira succinctly en þú gætir annars geta.
Svo er það allt þetta síða gerir. Það prentar út gildi gegn.
Hvernig er þetta allt í raun og veru að gerast?
Þú getur muna viku eða svo síðan við byrjuðum að leita undir hetta
á hvernig vefsíðan virkar með því að nota þessa Eftirlitsmaður flipann.
>> Chrome hefur þetta bæði í Mac útgáfa, Windows útgáfu, og jafnvel Linux útgáfa,
og Firefox og IE hafa svipaðar aðferðir þar sem þú hefur þessa innbyggður-í aflúsara
inni af the flettitæki.
Við skulum taka a líta á the hópur stuðningsmanna.
Við höfum got a heild búnt af tabs hér, og muna að leftmost einn er Elements,
og sama hversu godawful HTML og JavaScript er á síðu,
muna að við Elements flipi sem þú getur raunverulega fara um HTML hierarchically
og ágætur og snyrtilegur.
Svo ef þú ert að reyna að læra af a website eins og Google eða Facebook
eða bara allir website, átta sig á að þú ert líklega betur
horfa á the uppspretta merkjamál á þennan hátt í stað þess að skoða hrátt uppspretta,
sem getur verið óreiðu, eins og við höfum séð sérstaklega á vefsvæði Google.
Svo ef ég smelli í stað á Network flipann hér
við skulum sjá hvað er að gerast þegar ég heimsækja þessa síðu.
Fyrst láta mig hreinsa skyndiminnið.
Ég ætla að fara í Stillingar í Króm og þá fara til sögu
og síðan Hreinsa öll beit gögn.
Þú gætir verið að nota til að gera þetta í öðrum tilgangi, [hlátur]
En þegar það kemur að því að þróa vefsíður, það er í raun gagnlegt -
Ef þú ert að hlæja að þú veist. [Hlátur]
Það er reyndar mjög gagnlegur þegar þróa vefsíður vegna þess að veruleikinn er
hluti eins og kökur og svoleiðis afrit HTML skrá, afrit JavaScript skrár
geta í raun orðið stór höfuðverkur, því ef hver sem ástæðan
vafrinn ákveður að skyndiminni sumir skrá og enn þú hefur gert breytingar á þeirri skrá á þjóninum
en vafrinn er ekki raunverulega ljóst að skráin hefur breyst
og því er í raun ekki aftur sækja hann jafnvel þegar þú smellir á Refresh hnappinn,
eitt surefire leiðir til að bara vera viss um að kenna er ekki með númerið þitt,
það er með hegðun í vafranum, er að fara í hér í vafranum þínum
og bara að hreinsa alla sögu þannig að það er ekkert rugl.
>> Og svo ef þú vilt virkilega að vera ofsóknaræði, hætta vafrann endurræsa það,
og þá ganga úr skugga um allt er að vinna eins og búast mætti.
Svo í stuttu máli, hreinsa skyndiminni er gott þegar að gera þróun.
Svo hér höfum við á flipann Network.
Ég hafði áður heimsótt síðuna 9 sinnum, en láta mig fara á undan núna og smelltu á Reload.
Og ég aftur niður í 0.
Skulum raunverulega sjá hvernig það er að þessari lotu superglobal er að innleiða.
Ég ætla að smella á 1 HTTP beiðni sem var gert,
og þetta kembiforrit glugga lætur mig líta inni í því.
Hér sé ég bara svar frá þjóninum, sem er ekki áhugavert.
Ég hef séð þetta í mörgum hætti.
En hvað er tæknilega áhugavert eru haus.
Ef ég skruna niður og einbeita sér að beiðni haus og smelltu Skoða efni,
hvað ég ætla að sjá er bókstaflega HTTP beiðni
sem fór bara frá vafranum mínum til miðlara,
GET vera aðgerð orð og síðan / counter.php vera skrá nafn,
HTTP/1.1 sé bara útgáfa af HTTP að vafrinn minn er að nota.
Þessi lína hér er smá áminning úr vafranum til miðlara hvaða nafn miðlara er
sem það vill tala við.
Og þá er restin af þessu stundum áhugavert en ekki við núna.
>> Þetta er bara svona forvitni.
Cryptic þó þetta band er, hvenær vafrinn þinn heimsækir vefsíðu
það er að upplýsa miðlara hvaða vafra þú ert að nota
og hvaða stýrikerfi þú ert að nota og hvaða útgáfa hennar.
Svo ef þú hefur alltaf furða hvernig vefsíður eins CNN og whatnot
vita hvaða hlutföll eru af Mac notendur á vefnum, PC notendur,
IE notendur, Króm notendur og þess háttar, það er vegna þess að allar af vöfrum okkar
eru að segja hvert einasta heimasíðu þarna úti það sem við erum.
Það þýðir ekki endilega að innihalda persónugreinanlegar upplýsingar,
en það þýðir að segja þjóninum hvaða IP tölu er og hvaða vafra og stýrikerfi sem þú ert að nota.
Svo er það þar sem upplýsingar.
En það er meira áhugavert nú þegar það kemur að þessum fundum er svar haus.
Leyfðu mér að smella á Skoða fengið hliðina á svörun.
Hvað er áhugavert hér er nokkur atriði.
1, fengum við aftur stöðukóðanum 200.
Við sjáum aldrei þessa stöðu kóða vegna þess að það þýðir að allt er vel.
Það þýðir bókstaflega allt í lagi í mótsögn við eitthvað annað.
Hvað er númerið sjáum stundum það er slæmt? [Nemandi] 404.
404, skrá finnst ekki, 403 þú gætir verið hrasa þegar,
sem er bannað, sem þýðir að þú hafir gleymt að chmod eitthvað, líklegast.
Og það er fullt af öðrum.
>> Hérna, þetta er svolítið brjálaður.
Ég skrifaði bara þessa skrá nokkrum mínútum síðan með því að líma það inn gedit.
Af hverju gerði þessa síðu renna út árið 1981 en það raunverulega var Web?
Hvað er að gerast þarna?
>> [Inaudible nemandi svar] The tími stapp. En hvers vegna?
Það er nokkuð handahófskennt, en það er í raun gagnlegt.
Hvað er að segja að vafrinn minn er þetta PHP skrá sem þú hefur bara beðið hefur þegar útrunninn.
Í raun, rann það 30 árum síðan.
En hvað þýðir það í raun?
Það þýðir bara næst þegar notandi heimsækir síðuna,
hvort með því að endurhlaða eða slá inn slóðina í the heimilisfang bar,
vertu viss um að fara og ná í nýtt eintak af henni.
Þetta er tegund af dæmi um brjóstmynd skyndiminni,
heimskulegt orð sem þýðir bara að reyna að draga vafra
frá raun búrhvalur HTML sem er verið send frá miðlara
þannig að þú ert ekki óvart högg endurhlaða og síðan sjá sömu útgáfu skrárinnar.
Þú vilt í raun miðlara til að senda nýtt eintak.
Svo þýðir sú staðreynd að það er 1981 bara að það er það sem tækið er að velja
sem handahófskennda dagsetningu í fortíðinni.
En the raunverulegur safaríkur lína er nú þetta.
Jafnvel áður en 50 þú ert sennilega óljóst þekki smákökum.
Eins og af réttur nú, sérstaklega meðal þeirra sem minna þægilegt eða á milli,
það er kex í skilning þinn núna
jafnvel þó að við erum að gera skilning þinn meira tæknilega?
Hvað er kex? Já.
[Nemandi] Upplýsingar um notanda, eins og ef þeir hafa skrifað notendanafn þeirra eða eitthvað.
>> Gott. Það er upplýsingar um notanda, hvort sem þeir hafa slegið inn notandanafn sitt nú þegar.
Fótspor eru leið þar framreiðslumaður man eitthvað um notanda.
Og hvað kex raun er textaskrá eða einhver runa af bætum
sem er gróðursett af þjóninum inni í vafranum þínum
og inni í þeirri skrá eða meðal þeirra bæti er einhvers konar auðkenni.
Kannski er það bókstaflega notendanafnið þitt, en oftar er það eitthvað meira Cryptic-útlit
eins og þessi hlutur hér - bo8dal3ct og svo framvegis - þetta virkilega stór tölu band
Það er í raun bara ætlað að vera einstakt auðkenni fyrir þig.
Eða þú getur hugsa um það sem tegund af raunverulegur hönd stimpil.
Ef þú ferð að einhverju félagi eða skemmtigarður, að muna að þú hefur í raun greitt
og farið í, setja þeir Little Red límmiða á hendinni af einhverju tagi,
og sem minnir fólk á borðið sem þú hefur þegar greitt
og þú getur komið og farið eins og þú vilt.
Fótspor eru svolítið svipuð í anda við það.
Í fyrsta skipti sem ég heimsótti þessa vefsíðu, eins og ég gerði bara eftir að hreinsa skyndiminnið,
vefþjóninn, sem tæki í þessu tilviki, að setja stimpil á hendina á mér
er nafn PHPSESSID, fundur ID,
sem gildið er þetta virkilega langt tölu band.
>> Svo það er nú svoleiðis skreyta á minni hendi þannig að næst þegar ég högg endurhlaða
eða handvirkt heimsækja þessa slóð í vafra
Vafrinn minn með skilgreiningu HTTP er að fara að kynna hönd stimpill
aftur og aftur og aftur.
Svo jafnvel þótt the framreiðslumaður er ekki endilega að vita hver ég er,
þeir vita að minnsta kosti að ég er sami notandi eða að minnsta kosti, nánar tiltekið, sama vafra.
Og svo er þetta á endanum hvernig fundur superglobal er hrint í framkvæmd.
The framreiðslumaður hefur ekki hugmynd um hver þú ert þegar þú skoðar vefsíðu á annað eða þriðja sinn
nema þú kynna þessa hönd stimpil.
Og um leið og þú kynna að hönd stimpil,
vefþjóninn fer í raun í smá gagnagrunn á eigin spýtur
og eftirlit, allt í lagi, ég hef bara séð hönd stimpill bo8dal3ct notenda og svo framvegis.
Leyfðu mér að sjá hvað upplýsingar forritari hefur geymt
inni á superglobal um þennan notanda,
og þá láta mig ganga úr skugga um að gögn er aftur inni þingsins superglobal
þannig að forritari getur aftur aðgang að gögnum
jafnvel ef það var sett nokkrar mínútur eða klukkustundir síðan.
Svo í öðrum orðum, kex, sem fékk slæmt rapp í nokkurn tíma
vegna óöryggi í vafra og þeir geta í raun brjóta persónuvernd okkar og allt þetta,
þeir hafa í raun og veru mikill gagnsemi því án þeirra
þú vildi alltaf að skrá þig inn á alla Facebook síðu sem þú heimsækir
eða hvert Gmail netfang sem þú lest ef vafrinn ekki hafa einhverja leið til að muna
sem þú hefur nú þegar staðfest.
>> Þannig að í þessum hætti fótspor eru send fram og til baka yfir vír.
Annar forvitni um kex, sérstaklega hér, er að þetta er alveg í afkóðuðum.
Það er engin dulkóðun í gangi hérna alls,
og reyndar er ég að nota HTTP í augnablikinu.
Einn af uppáhalds augnablik okkar í CS50, sem er nú 2 árum síðan,
var um tíma tól sem kallast Firesheep kom út.
Þetta var ókeypis stykki af hugbúnaður sem var gert með öryggi vísindamaður
sem vekja-upp kalla fyrir samfélagið að segja hversu atrociously framkvæmda
ákveðin kerfi staðfesting á vefnum voru.
Svo um nokkurt skeið, Facebook var nánast alfarið yfir HTTP, ekki https.
Og jafnvel ef þú hefur enga hugmynd um hvernig dulritunarstjórneiningunni virkar, er S örugg
Svo þýðir það að það er að minnsta kosti einhver dulkóðun þátt.
Facebook var notuð til að dulkóða notendanöfn og lykilorð,
en um leið og þú lítur á þinn pokes eða skilaboð eða fréttir fæða,
allt sem var unencrypted.
Svo var Gmail fyrr aðeins ári eða 2 fyrir.
Hvert sinn sem þú skráður í, já, notað þau örugg dulkóðun,
en eftir það gerðu þeir ekki. Og hvers vegna gæti það verið?
Hvers vegna ekki bara að nota dulmál allan tímann í tilvikum nota eins og þetta?
Hvað er það? Ég held ég hafi heyrt eitthvað. [Nemandi] Speed.
Hraði, ekki satt? There ert lifnaðarhættir í kringum þetta.
En ef þú bara svona að hugsa um það rökrétt, ef þú dulkóða eitthvað,
þú þarft að gera að minnsta kosti aðeins meiri vinnu.
Í pset 2 þegar innleitt Caesar eða Vigenere eða jafnvel sprunga,
bara prenta streng er tiltölulega auðvelt.
Dulkóðun og þá prenta streng óverulega krefst aðeins meiri vinnu.
>> Fyrir frábær vinsælustu vefsíður eins og Google og Facebook,
Ef þú þarft að gera meiri vinnu fyrir hvern notanda fyrir hvert einasta vefsíðu sem þeir heimsækja,
sem tekur bara meira CPU tíma.
Og ef þú þarft meira CPU tíma, gætir þú þurft fleiri netþjóna,
sem þýðir að þú gætir þurft meiri pening.
Og svo í mörg ár þetta bara virkilega ekki sem best framkvæmd.
Fólk myndi nota SSL dulkóðun aðeins þegar þeir þörf á.
En það kom í ljós, og eins og þessi náungi með Firesheep gerði frábær skýr,
þegar þú krakkar sem eru nú á Facebook núna -
Út af forvitni, við skulum sjá hvort þú munt Fess upp.
Ef þú ert á Facebook núna í einhverju flipi, jafnvel ef það er ekki foregrounded,
er URL HTTP eða HTTPS?
[Margar nemendur] S. S? [Hlátur]
Allt í lagi. Allir HTTP? Bara 1? Allt í lagi.
Svo okkur öll geta reiðhestur Facebook reikning þessi strákur er núna.
Fyrir the hluti það hefur orðið rennismiður á við vanræksla, að minnsta kosti á sumum vefsíðum.
Og langa sögu stutta, ef vefur umferð er ekki dulkóðað,
Ekki eini hjartarskinn the HTML fara fram og til baka yfir WiFis unencrypted,
svo ekki fara hluti eins og smákökur og til baka um loft
án hvers konar dulkóðun.
Svo ef þú ert bara smá kunnátta forritun eða hluti af Googling færni
að finna frjáls hugbúnaður sem gerir þetta, allt sem þú þarft að gera er að sitja á Starbucks
eða sitja í flugstöð þar sem er almennt unencrypted WiFi
og bara horfa á leitarorð eins og Set-Cookie: eða PHPSESSID
vegna þess að ef þú ert tæknilega kunnátta bara horfa á WiFi
fyrir alla bita sem rennsli um loft fyrir þessu mynstri,
getur þú þá sagt að PHPSESSID gaur verður að vera bo8dal og svo framvegis.
Og svo aftur ef þú ert nægilega tæknilega kunnáttu eða hafa rétt tól,
þú getur þá bara endurskilgreina eigin vafranum þínum til að byrja að kynna að hönd stimpil
til Facebook.com og Facebook er bara að fara að gera ráð fyrir að þú ert þessi gaur
því allt sem þeir vita ekki hver þú ert en það sem þú hefur þessa einstöku auðkenni.
Svo ef þú stela að einstaka auðkenni og kynna það til the vefur framreiðslumaður og þinni,
þeir eru bara að fara að sýna þér fréttastraumi viðkomandi er
eða skilaboð sem manneskju eða pokes.
>> Og ég myndi Google nú hvernig á að virkja HTTPS á Facebook kannski.
En það er í raun eins einfalt eins og þessi.
Og svo Facebook og Google og eins hafa fengið mjög góður á þessu,
en hafðu auga út allt meira fyrir hvers konar vefsíður sem þú heimsækir sem ekki nota HTTP
og hafa einhvers konar viðkvæmum upplýsingum á þeim,
hvort sem það er fjárhagslega eða persónulega eða þess háttar.
Ef þeir eru ekki að nota þetta, alveg hugsanlega hægt smákökur eins og þetta vera mjög auðveldlega stolið
og svikin, og það er nákvæmlega það Firesheep gerði.
Þú varst ekki að vera forritari.
Allt sem þú þurfti að gera var að hafa internettengingu, sækja þetta ókeypis tól,
og hvað það myndi gera er að skrá þig inn og þá myndi sýna þér Facebook nöfn
allra í Sanders, í þessu tiltekna sýning, í kringum þig
og allt sem þú þurfti að gera var að smella á nafn þeirra og hugbúnaður sjálfvirkan the aðferð
að sjúga upp í nefið sem kex, kynna það á Facebook eins og þitt eigið,
og voila, þú ert skráður inn
Svo er þetta annað þeirra "ekki gera þetta" opinberlega.
Ef þú ert með eigin heimili net og þú vilt að tinker, fyrir alla muni,
en átta sig þetta er yfir línuna á háskólastigi umhverfi.
>> En markmiðið hér er virkilega að leggja áherslu á ekki hvernig á að gera þetta
en hvernig á að verjast þessum tegundum af hlutum.
Og léttvæg lausn hér, jafnvel þó það sjálft sé gölluð,
er að í raun að draga úr notkun á öllum stöðum sem eru ekki að nota HTTPS stöðugt.
Svo síður eins og Facebook og Google hefur sífellt gátreitina
þar sem þú getur valið á þessari tegund af hlutur,
og bankar hafa haft þetta í mörg ár fyrir svipuðum ástæðum.
Svo bara smá ótta þáttur ef við getum. En það er það í hnotskurn.
Það er hvernig miðlara man hver þú ert.
Og eins fljótt og þeir geta muna hver þú ert, þeir geta muna neitt um þig
að forritarinn hafi geymt inni í þessum sérstaka superglobal heitir $ _SESSION.
Og fyrir pset 7 við erum að nota það trivially bara að muna að int,
þ.e. einstakt auðkenni notanda, sem hefur skráður í,
þannig að við vitum að þeir hafa verið þar áður.
Einhverjar spurningar þá á fundum eða kex eða þess háttar?
Firesheep virkar ekki eins vel lengur,
og þú þarft að setja tölvuna í sérstökum opnum ham
þannig að þú ert í raun að hlusta á umferð utan ykkur.
Svo ef þú ert að sækja Firesheep, átta sig að það er ekki alveg eins auðvelt
eins og það var einu sinni að sýna fram á.
Allt í lagi. Og ekki gera það í Sanders. Gera það heima.
Gagnagrunna.
Eitt af því sem við gerðum í pset 7 mjög vísvitandi
var við að gefa þér gagnagrunni sýnishorn borð fyrir notendur sem hefur einhverja notandi auðkenni,
sumir notendanöfn, og sumir dulkóðuð lykilorð þar.
Og eins og þú sérð, ef þú hefur ekki nú þegar, þú ert að fara að breyta töflunni svolítið.
Þú ert að fara að þurfa að bæta við sumir skyndiminni hvert notendur í þeirri töflu,
og þú ert að fara að bæta við öðru sögu borð, söfnum borð,
eða kannski kalla það eitthvað annað.
En hvað varðar að hugsa um hvernig á að gera þetta, við skulum opna þetta tól
sem við notuðum á föstudag, en ef ókunnur, tækið kemur með tól
heitir phpMyAdmin sem tilviljun skrifaður í PHP,
en tilgangur hennar í lífinu, eftir að ég að skrá þig inn hér eins jharvard með Crimson,
er að gefa mér að notandi-vingjarnlegur leið til að skoða og breyta gagnagrunninum mínum.
>> Gagnagrunnurinn sem ég er að keyra á tækinu heitir MySQL.
Þetta er mjög vinsæll, og það er frjáls opinn uppspretta gagnasafn sem er frábærlega þægilegur í notkun,
sérstaklega við framan endar svona.
Hvað tól leyfir mér að gera, til dæmis, er pota í kringum borð.
Leyfðu mér að fara á undan og gera það.
Á föstudeginum búið til töflu sem heitir nemendur sem var frábær einfalt.
Það var 3 dálka - ID, nafn og email - og ég sett handvirkt nokkrar línur
eins og Davíð og Mike í þessu tiltekna dæmi.
Við skulum taka þetta aðeins lengra, og við skulum gera ráð fyrir að við viljum muna fleiri
en bara nafn og email um notanda.
Leyfðu mér að smella Uppbygging upp hér að ofan.
Og aftur, pset gengur í gegnum viðeigandi ráðstafanir hér,
svo ekki hafa áhyggjur ef eitthvað af þessu er dálítið fljótur.
Og ég ætla að smella á hér.
Ég ætla að bæta við nokkrum fjölda dálka eftir tölvupósti
vegna þess að ég vil bæta við eitthvað eins og hús.
Ég gleymdi að taka hús nemanda.
Leyfðu mér smellir á Áfram og nú höfum við þetta form sem því miður er dálítið breiður frá vinstri til hægri,
en ég ætla að kalla nafn á þessu sviði hús,
og þá tegund sem ég hef nú að velja.
Svo skulum við hafa stutt spjall um ýmsar gerðir í MySQL
því en PHP er veikt slegið og það spilar svona hratt og laus við gerðum,
í gagnagrunni sérstaklega er það frábær mikilvægt að raunverulega nota skrifa til þinn kostur
vegna þess að einn af þeim hlutum sem MySQL og aðrar vélar gagnagrunni getur gert fyrir þig
er að tryggja að þú setur ekki svikinn gögn inn í gagnagrunninn þinn.
Þetta er tegund af frjáls villuprófun í boði fyrir þig.
>> Hús við augljóslega vilt ekki að vera int, sem er 32-bita gildi í MySQL.
Við gerðum tala stuttlega á föstudaginn um VARCHAR, sem stendur fyrir breytu lengd bleikju.
Hvað er þetta? Þetta gerir þér kleift að tilgreina að þú vilt þetta til að vera a band af einhverju tagi.
Þú gera ekki raunverulega vita fyrirfram hversu lengi það er,
þannig að við munum geðþótta segja hús nafn geta vera 255 stafir,
en þú getur farið með 32, 64 - allir tala í raun.
En kostur af using a VARCHAR yfir reit sem heitir bleikju er það?
Bara innsær Ef ég skruna niður, eftir það er bleikja og það varchar.
VARCHAR er breytilegt lengd bleikju, bleikju er fastur lengd bleikju.
Þannig byggist aðeins á sú skilgreining, hvað er kostur eða ókostur af öllum þessum?
Með öðrum orðum, sem þykir vænt um greinarmun, eða hvers vegna ættir þú að kæra?
>> Já. [Nemandi] VARCHAR hefur meiri sveigjanleika en tekur meira minni.
Gott. VARCHAR tekur upp meira - Við skulum sjá. Ég er ekki viss um að ef ég heyrði það rétt.
Getur þú sagt það einu sinni enn?
[Nemandi] Ég sagði varchar sennilega hefur meiri sveigjanleika en það tekur meira minni.
Áhugavert. Allt í lagi. VARCHAR gefur sennilega meiri sveigjanleika en tekur meira minni.
Hið síðarnefnda er ekki endilega satt.
Það fer eftir samhenginu, en við skulum koma aftur til.
>> [Inaudible nemandi svar] Einmitt.
Það er reyndar raunin að bleikju venjulega nota meira minni
vegna þess að bleikju, eins og í C, er eins og band, það er fylki af stöfum.
Svo ef þú segja char sviði lengd 255,
gagnagrunnurinn er bókstaflega að fara að gefa þér 255 stafi.
Og ef húsið endar að vera Mather og 6 stafir samtals,
þú ert að sóa yfir 200 stafi.
>> Svo varchar raun notar bara eins marga stafi og er nauðsynlegt
upp að hámarki.
En það verð sem þú greiðir er í raun árangur, hugsanlega.
Ef þú veist fyrirfram að allir strengir eru að fara að vera 8 stafir -
til dæmis, gera ráð fyrir að þú þarft lykilorð af lengd 8 -
The kosti þess að nota char sviði stundum, þó ekki oft,
er að tilgreina fasta lengd fyrir eitthvað eins og lykilorð
því nú í gagnagrunni getur verið jafnvel betri.
Ef það veit að hvert char sviði, hvert band í dálki er sama lengd,
þú færð til baka lögun af handahófi aðgang.
Þú getur hoppað um meðal ýmissa bleikju sviðum í töflu gagnasafninu
því að hugsa um gagnagrunn og línum og dálkum.
Svo ef hver og einn af the band er sama lengd,
þú veist að sá fyrsti er í bæti 0, sá næsti er í bæti 8
og svo 16 og svo 24 og svo framvegis.
Svo ef allir strengir eru í sömu lengd, getur þú hoppa í kring miklu skilvirkari.
Svo það getur verið kostur í skilmálar af flutningur,
en venjulega þú þarft ekki lúxus að vita fyrirfram,
svo er varchar leiðin til að fara.
Hér er annað smáatriði sem jafnvel Facebook hljóp inn á endanum.
Ints eru frábær, og við notum svoleiðis þá sjálfgefið hvenær við viljum tala,
en það eru bara 32 bita.
>> Og jafnvel þó að Facebook er ekki alveg með 4 milljarða notendur nú,
það er örugglega einhver þarna úti með marga reikninga
eða reikningum sem hafa verið opnuð og síðan lokað,
og svo Facebook sjálft tel ég fyrir nokkrum árum þurfti að umskipti úr int
við, eins og er viðeigandi kallað, bigint, sem er bara 64 bita í staðinn.
Svo er þetta líka hönnun ákvörðun.
Þú vildi vera ótrúlega heppinn ef endanleg verkefnið snýr gangsetning,
hefur 4 milljarða og 1 notendur, gefa eða taka,
í því tilviki með ints gæti verið smá skammsýni.
En í raun, notendur borð er líklega fínn með ints.
En fyrir eitthvað eins pset 7, eins og borð sögu,
þú gætir hafa þúsundir, milljónir notenda ef þú þróast í etrade.com.
Svo á meðan þú getur ekki haft fleiri en 4 milljarða notendur,
þeim notendum sem þú ert kannski að hafa meira en 4 milljarða viðskipti með tímanum -
kaupir og selur og það í sögu sinni.
Svo ef þú gerir ráð fyrir - aftur, þetta eru góðar vandamál að hafa ef þú hefur þetta mikið af gögnum -
Ef þú gerir ráð fyrir gögn umfram stærð int
fara með eitthvað eins bigint er átt ekki oft nóg samþykkt af hönnuðum
vegna þess að fólk tala sem er ekki að fara að vera vandamál,
en það er það auðvelt að velja eitthvað stærra en það.
Decimal við erum að nota í pset 7, sem tilgreinir fasta nákvæmni
svo þú getur forðast málefni sem felur fljóta og tvöfaldar og reals og þess háttar.
>> Og þá er það einhverjum öðrum sviðum hér. Við munum veifa höndum okkar á þá að einhverju leyti.
En dagsetningar, tíma hafa öll tilskilin sniði í MySQL,
og kostur geyma dagsetningum sem dagsetningar og ekki varchars
þýðir að gagnagrunni getur raunverulega forsníða þá í mismunandi snið,
hvort Bandaríkjunum sniði eða Evrópu sniði eða þess háttar - en þú vilt það -
miklu betur en ef það væri bara almenn varchar.
Og þá er það einhver önnur tvöfaldur, varbinary, dropar.
Þetta eru tvöfaldur stór hluti, og þú getur líka geymt tvöfaldur gögn
og geometrísk gögn í gagnagrunni.
En fyrir okkur munum við yfirleitt sama um ints og varchars og þess háttar.
Við skulum ljúka upp þetta dæmi með hús.
House Ég ætla að geðþótta sagt verður 255 tákn.
Þá sjálfgefið gildi við gætum gert þetta.
Við gætum með því að vanræksla setja alla í Mather House, til dæmis.
Það er hvernig við gætum tilgreina að gagnagrunni
ættu að tryggja að einhver hefur alltaf gildi. En ég ætla að fara að vera.
Í raun, að fólk sem býr á háskólasvæðinu og ekki í húsi,
kannski ég vil í raun að tilgreina að sjálfgefin gildi fyrir hús er NULL,
og þá þarf ég að athuga þennan reit og segja gagnagrunninn það er allt í lagi ef húsið notandans er NULL.
>> Aftur, þetta er annar vörn vélbúnaður sem þú getur sett í stað
svo þú þarft ekki einu sinni að setja það í PHP kóðanum þínum endilega.
Gagnagrunnurinn mun tryggja að hlutirnir séu eða séu ekki NULL.
Og svo loks, eigindir.
Ekkert af þessu eru mjög viðeigandi.
Binary, óundirritaður - ekkert af þeim eiga við VARCHAR.
Index.
Hefur einhver vita eða muna eða hafa giska um hvað vísitala er
fyrir eitthvað eins og hús?
Þetta er of raun mikilvægt og tiltölulega auðvelt hönnun ákvörðun.
Fyrir þá sem hafa ekki enn séð hana, á föstudaginn við ræddum stuttlega um aðal lykla.
Í gagnagrunninum borð, aðal lykill er á sviði eða dálk
sem auðkennir einstaklega raðir í töflunni.
Svo í núverandi borð við höfum auðkenni, höfum við nöfn og tölvupósti.
Hver af þeim er bestur frambjóðandi að vera aðal lykill,
Hlutverk hennar er að einstaklega þekkja raðir?
Sennilega ID.
Að öllum líkindum getum við líka notað það þó?
Kannski væri hægt að nota tölvupóst vegna í orði það er einstakt
nema fólk er að deila email reikningur.
En raunin er sú að ef þú ert að nota tölugildi auðkenni eins og 1234,
það er bara 32 bita, en netfang gæti verið þetta mörg bæti eða þetta mörg bæti.
Svo hvað varðar skilvirkni fyrir einstaka auðkennum,
það hefur tilhneigingu til að vera gott bara að nota int
jafnvel ef þú hafa sumir band frambjóðandi sem þú getur að öllum líkindum notað.
>> Fyrir eitthvað eins og hús, ætti þetta ekki að vera helsti lykill
því þá aðeins 1 maður gæti lifað í Mather og 1 manneskja í Currier og þess háttar.
Á sama hátt, þetta ætti ekki að vera einstakt.
Munurinn milli aðal-og einstakt er að um er að ræða núverandi borð okkar,
ID myndi vera aðal en tölvupóstur er ekki fyrst og fremst vegna þess að við getið bara -
flutningur - en það ætti samt að vera einstakt.
Svo þú getur samt framfylgja sérstöðu án þess að gera kröfu
að það er frábær mikilvægt aðal sviði.
En þetta er alveg gagnlegt: Index.
Ef þú veist fyrirfram fyrir síðasta verkefni fyrir pset 7, eða almennt,
að þessi sviði hús er að fara að vera eitthvað sem þú leita á fullt
með því að velja leitarorð eða eitthvað annað,
þá getur þú preemptively segja gagnagrunninn til að vinna galdur hennar
og ganga úr skugga um að það skapar í minni allir ímynda gagnauppbyggingu nauðsynlegt
að flýta leit byggt á húsinu.
Kannski það mun nota kjötkássa borð, kannski það mun nota tengda listanum.
Í raun og veru, það hefur tilhneigingu til að nota tré, oft uppbygging kallast B-tré -
ekki tvöfaldur tré en B-tré - sem er mjög breiður tré
sem þú gætir séð í bekknum eins CS124, gögnin mannvirki flokki.
En í stuttu máli, þú þarft ekki að hafa áhyggjur af því að þegar þú notar sviði gagnasafn hugbúnaður.
Þú getur bara sagt það, "Index þessu sviði svo ég get leitað á það betur."
>> Ef þú skilur þetta burt og þú reynir að leita fyrir alla í gagnagrunninum sem býr í Mather,
það mun flytjast inn línulega leit.
Og ef þú hefur fengið 6.000 undergrads öll búa í einhverju húsi,
þú ert að fara að leita á allt borðið til að finna Matherites,
en ef þú segir Index, vonandi verður eitthvað nálægt því að lógaritmískum leit
að finna þær tegundir nemenda.
Þetta er bara frjáls lögun til að kveikja á,
jafnvel þó að það er komið á genginu einhverjum pláss.
Loksins, Auto-vöxtur, þessi AI sviði,
sem þýðir bara ef það er int og þú vilt ekki að standa að hækka það sjálfur
í hvert skipti sem það er nýr notandi, athuga það,
og hver notandi sem fær sett sjálfkrafa fá nýtt auðkenni.
Skulum smella á Vista og nú skulum finna sök með þessa hönnun.
Ef ég fer í Browse, eftir að bæði Mike og húsið mitt er NÚLL.
Ég get notað phpMyAdmin að breyta þessu handvirkt.
Ég get farið hér og tegund í Mather og ýta síðan á Enter,
og nú eftir borðið er öðruvísi.
En eftir að ég gæti gert eitthvað annað eins og heilbrigður.
ID Davíðs er 1, svo phpMyAdmin aftur er bara stjórnsýslu tól;
þetta er ekki eitthvað sem notendur þínir eru alltaf að fara að sjá.
Svo ef ég smelli í stað SQL flipann upp ofan -
og aftur, pset 7 mun kynna þú til fleiri af þessum fyrirspurnum -
Ég get með höndunum framkvæma SQL Structured Query Language stjórn
UPDATE notandi SET hús = 'Pfoho' HVAR id = 1.
Þessar SQL fyrirspurnir eru vel nóg, nokkuð læsileg frá vinstri til hægri.
Uppfæra notenda töflu, stilla sviði heitir hús til Pfoho
þar sem ID notanda er 1.
Eða ég gæti jafnvel gera þar email = 'malan@harvard.edu'.
Svo lengi sem það auðkennir mig, sem myndi vinna eins og heilbrigður.
En ID hefur tilhneigingu til að vera meiri árangur, þannig að við skulum gera það.
Skulum smelltu á Áfram. Jæja, lecture.users er ekki til. Hvað er villa minn?
Hvað er borðið í raun kallað hér?
Það heitir nemendur bara því það er það sem við gerðum upp hér efst til vinstri.
Það heitir nemendur, ekki notendur. Svo smellir á Áfram nú.
1 röð fyrir áhrifum. Fyrirspurn tók 0.01 sekúndur.
Ef ég smelli Browse nú, nú Malan líf í Pfoho.
Svo er það annað bragð af SQL, en pset mun ganga þú í gegnum aðeins meira af því.
>> Það er heimskulegt ákvörðun sem ég hef þegar gert hér.
Ég myndi halda því fram að þetta gagnasafn hönnun er óhagkvæm
vegna þess að fleira fólk sem ég bæta við nemendur töflunni
meira af okkur ég byrja að bæta, því fleiri TFS ég byrja að bæta,
við erum að fara að byrja að sjá hvað uppsagna í þessari töflu?
>> Já. [Nemandi] Sjá að það er hjá nemendum, við erum að nota sama [inaudible]
Sama - Einmitt, einmitt.
Svo ef 400 manns búa í Mather, gefa eða taka,
loksins þessari töflu er að fara að hafa 400 línur sem segja "Mather," "Mather,"
"Mather," "Mather," "Mather."
Við erum að sóa öllum þessum bytes, og there 'a par af takeaways þar.
1, það er brjálaður horn tilfelli þar sem ef einhver greiðir mikið af peningum
og renames Mather, höfum við nú að breyta öllu gagnagrunn borð okkar.
Það er ekki að fara að gerast oft, þó Pfoho var einu sinni kallað North House 15 árum síðan,
svo gerist það. En það er ekki allt sem sannfærandi.
Meira sannfærandi en horn tilfelli eins og þessi af að þurfa að uppfæra gögn í einu
í gagnagrunninum er hvers vegna þú ert að geyma Mather aftur og aftur og aftur og aftur?
Það er a einhver fjöldi af chars, 6 tákn.
Getum við ekki gert enn betur en það, sérstaklega fyrir Pforzheimer?
Víst getum við gert betur en marga stafi.
Hvers vegna ekki bara að tengja einstakt auðkenni við hvert hús
og geyma það fyrir hvern notanda? Svo skulum reyna þetta.
Frekar en bara að nota nemendur borð, láta mig fara upp á fyrirlestur gagnagrunn minn upp hér efst til vinstri.
Tilkynning hér segir Búa töflu.
Leyfðu mér að búa til nýja töflu sem kallast hús.
Fjöldi dálka er að fara að vera 2. Enter.
Nú hef ég 2 reiti.
Ég ætla að kalla þetta nafn, og það er að fara til vera a varchar af lengd 255,
>> en það er nokkuð handahófskennt. Leyfðu mér að setja þetta hérna því að venju.
Svo setja auðkenni upp hér. Við skulum gefa hvert hús einstakt auðkenni.
Við skulum gefa hvert hús nafn.
Skulum tilgreina að auðkenni verður óundirritaður bara með því að venju að aðeins nota jákvæðar tölur.
Við skulum fara á undan og gefa þetta sjálfvirkt vöxtur sviði nú.
Og þurfum við eitthvað annað?
Við skulum fara á undan og smella á Vista.
Nú hef ég annað borð.
Tilkynning sem innskot þetta er örlítið Cryptic SQL skipun
sem hefði þurft að slá handvirkt ef ekki nota stjórnsýslu tól eins phpMyAdmin.
Svo önnur ástæða að við notum það.
Það er frábærlega gagnlegur konar pedagogically þar sem þú getur smellt kring
og reikna út hvernig hlutirnir virka bara að afrita og líma það sem phpMyAdmin gerði.
En SKAPA TAFLA stjórn er það sem var bara keyrð, og hér er mitt borð.
Leyfðu mér að fara á undan núna og nota hrár SQL frekar en oversimplify með því að smella á Insert flipann.
Leyfðu mér að gera INSERT INTO hús,
og ég ætla að segja að nafnið á húsinu er að fara að hafa gildi "Mather '.
Það er það. Þetta setningafræði er svolítið dulinn.
Þetta er nafn á þeim sviðum sem við viljum setja inn.
Þetta eru gildi sem við viljum að setja inn í þessum sviðum. Leyfðu mér smellir á Áfram.
1 röð sett tók 0,02 sekúndur. Leyfðu mér að smella á Browse núna.
>> Tilkynning ef ég smella á Browse, það er Mather, sem ID er með sjálfvirkni númer 1.
Leyfðu mér að gera eitthvað annað. Leyfðu mér að fara inn í SQL flipann.
Setja inn í hús. Nafnið á húsinu er að fara að hafa gildi Pfoho og svo framvegis.
Go. Og ég get haldið þessu aftur og aftur og aftur.
Eða ef þú leiðist með phpMyAdmin, þú geta réttlátur nota the Insert flipann
og ekki að slá inn hrátt SQL.
Þú getur bara Bang það út hraðar með því að slá, til dæmis, Currier, Enter,
og nú ef við smella á Browse, það er Currier með ID 3.
Svo þetta er það sem er átt við með sjálfvirkri vöxtur.
En nú verðum við að laga eitthvað hjá nemendum.
Í nemendur hvað ætti gögnin gerð hússins sviði nú vera?
Það ætti að vera int, ekki satt?
Svo markmiðið hér er að þáttur út, annars þekkt sem staðla, borðin
þannig að við geymum ekki upplýsingar redundantly í einhverjum af borðum mínum.
Og aftur, leið sem við vorum á hér er að fara að segja Mather, Mather,
Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, sem er mjög óþarfi
hvað varðar wastefulness á tákn.
Svo láta mig fara á undan og breyta þessu með því að smella uppbyggingu,
og láta mig fara á undan og athuga af hús reit, smelltu á Change
og nú ætla ég að breyta þessu að vera int.
255 er ekki lengur máli.
Leyfðu mér að fara á undan og segja það er allt í lagi ef það er enn NULL. Vista.
Nú borð nemendur hefur verið breytt með góðum árangri,
og taka aftur hús er int.
Sem innskot, hunsa tala í sviga þegar kemur að ints.
>> Þetta er vegna arfleifð.
Til baka í dag þegar þú varst ekki GUI, hafði þú í staðinn a stjórn lína umhverfi,
um 10 og 11 hins vegar tilgreind hversu margir stafir sem þú ættir að sýna
í flugstöðinni glugga til raunverulega sýna sviðum.
Það hefur ekkert að gera með hluti lengd á raunverulegri sviði, svo við verðum bara að hunsa það nú.
Nú verð ég að fara inn í þessa töflu.
Og ef Davíð býr í Mather, hús ætti ekki að vera 0,
sem er int sjálfgefið gildi næst null.
Hann ætti að búa í húsi 1.
Segjum geðþótta að Mike býr í Pfoho, svo hús númer 2.
Nú lítur borðið mitt svolítið dulinn.
En íhuga skilvirkni.
Ég er nú að nota aðeins 32 bita til að finna húsið,
sem þýðir að það er aðeins 1 Canonical skilgreining á hús Mather minn og Pfoho
og það er í húsunum töflunni.
Svo ef ég vil nú svara á móti þessar töflur, hugsa um það með þessum hætti.
Hér hef ég nemendur mitt borð, og á the réttur-hönd hlið það er þessar tölur, 1 og 2.
1 er Mather, 2 er Pfoho.
Við höfum sömu tölur í þessum öðrum töflu, sem er kallað hús,
1 og 2 og 3 fyrir þá 3 hús.
Það sem við viljum nú að gera er að hafa getu í kóða, PHP og SQL,
að raða á svara á móti þessar töflur, þar sem ef þetta eru nemendur og þetta eru hús,
við viljum einhvern veginn sameina þær þannig að 1 línur með 1,
2 línur upp með 2, og svo að við getum reikna út þar sem Davíð
og þar sem Mike og þar sem allir aðrir lifi.
Til að gera þetta við getum framkvæma SQL fyrirspurn eins og eftirfarandi.
SELECT * FROM nemendur JOIN hús ON -
Og nú hvað sviðum viljum við taka þátt í?
Svo students.house = houses.id.
>> Smá dulinn, en þessi hluti þýðir skapa bókstaflega nýja tímabundna töflu
það er afleiðing af að taka þátt nemendur og hús.
Og hvernig viltu að sameina kenndur af fingrum mínum hér?
Setja 'hús sviði jafn hús' nemenda ID sviði.
En ef ég nú smellt á Go, fæ ég til baka það sem ég vonaðist til.
Davíð er í Mather, Mike er í Pfoho, og ég sé líka einstakt auðkenni.
En málið er að nú hef ég lokið borð.
Og svo takeaway hér pset 7 eða bara fyrir lokaverkefnið:
Ef þú finnur að þú ert að geyma allir stykki af upplýsingar redundantly,
hvort sem það er hús, kannski er það borg, ríki, og ZIP
þar ZIP getur yfirleitt, en ekki alltaf að nota sem einstakt auðkenni,
Ekki fara í gegnum æfingu andlega og þá með eitthvað eins og phpMyAdmin
af þátta út að sameiginlegur gögn því sérstaklega sem vefsvæðið þitt fær fleiri vel notað
og fleiri vinsæll, það er hvernig þú vera viss um að allt er frábær fljótur,
með því að gefa gagnagrunninum eins margar vísbendingar sem við sérstöðu og mögulegt er.
Það var mikið.
Einhverjar spurningar? Allt í lagi. Við skulum taka a 5-mínútna hlé þar og naumlega.
Allt í lagi.
Eftirfarandi er dæmi sem var notað fyrir nokkrum árum þegar ég tók CS161,
sem er stýrikerfi bekknum í framhaldsskóla
sem er þekktur fyrir að vera frábær en brjálaður magn af vinnu,
og það fjallar í raun um sumir af the lágmark-láréttur flötur vandamál sem upp koma í stýrikerfum
og líka jafnvel í heimi gagnagrunna.
>> Sagan sem var sagt af prófessor minn, Margo Seltzer, það ár var sem hér segir.
Segjum að þú sért með smá dorm ísskápur fyrir þig og félaga þíns
og báðir af þú raunverulega eins og mjólk.
Svo þú kemur heim úr flokki einn daginn, herbergisfélagi þinn er ekki enn það,
þú opnar ísskápinn, og þér grein fyrir, "Oh fjandinn, við erum út af mjólk."
Svo þú loka ísskápnum, ganga þú yfir götuna til CVS
og fá í æ löngum línum að kaupa mjólk í CVS.
Á sama tíma, herbergisfélagi þinn kemur heim úr hans eða bekknum,
kemur inn í herbergi, opnar ísskápinn virkilega vilja mjólk,
opnar ísskápinn og "Damn, ekki mjólk."
Svo lokar hann á ísskápinn, gengur út um dyrnar, og fer að Abp
eða annarsstaðar en CVS þar sem þú ert ekki að fara að rekast á hvor aðra
að fara að fá smá mjólk.
Auðvitað nokkrum mínútum síðar, fá bæði þig aftur heim
og nú þú hefur tvisvar eins mikið mjólk eins og þú vildir í raun.
Og að vera mjólk, nú er að fara illa vegna þess að þú eins og mjólk
en þú í raun ekki eins og mjólk, svo nú þú ert með of mikla mjólk, svo það er að fara að súr.
Þetta er hræðilegt, hræðilegt ástand.
Hvað gæti hafa leyst þetta vandræði ef þú varst fyrsta herbergisfélagi heima? Já.
[Nemandi] Þú ættir að hafa skilið eftir athugasemd. [Hlátur]
Gott. Þú ættir að hafa skilið eftir athugasemd.
Þú ættir að hafa sett Post-það í huga eða eins og að segja, "farið í mjólk,"
og þá herbergisfélagi þinn eðli hefði verið læst út af í raun að gera það.
Eða þú gætir farið 1 skrefi lengra.
Þú getur bókstaflega læsa ísskápur með einhvers konar hengilás,
og nú herbergisfélagi verður bókstaflega að vera læst út úr ísskápnum.
Ef við alhæfa aftur forritun,
þú getur nánast hugsa um ísskáp sem einhvers konar breytu eða strúktúr,
einhvers konar ílát til upplýsinga.
Vandamálið í grundvallaratriðum er hér um að báðir af þú var leyft að skoða
eða lesa ástand þessum gögnum uppbyggingu,
en þú skoðað það á mismunandi tímum og enn báðir af þú þá ákvörðun
byggt á stöðu heimsmála á þeim mismunandi augnablik í tíma.
Svo þú hefðir læst kæli, myndir þú hafa að minnsta kosti forðast herbergisfélagi þinn
að hafa tekist að skoða stöðu í heiminum,
svo hann eða hún hefði ekki getað gert það sama ákvörðun.
Svo gagnagrunna, eins og það kemur út, þetta vandamál stöðugt.
>> Við skulum sjá hvort við getum reisa atburðarás.
Segjum að þú ert svona slæmur strákur og þú ferð að Bank of America
eða einn af öðrum stöðum á torginu sem hafa a par hraðbankar hlið við hlið,
og einhvern veginn að þú mynstrağur út hvernig á að afrita hraðbanka kort - ekki allt sem harður.
Það er bara segulmagnaðir ræma.
Og svo er það sem þú vilt að reyna að spila þennan leik
þar sem þú setur 1 kort í 1 vél, annað kortið í aðra vél,
og þú vilt í raun að reyna að draga fé samtímis,
því ímynda sér að sagan fer sem hér segir.
Vélin til vinstri tekur kortið og PIN númer,
og þá segir þú: "Gefðu mér 100 $."
ATM er forritað til fyrst að gera að velja á gagnasafn eða sambærilegt -
hvað gagnasafn það er með - til að sjá er þessi notandi hafa að minnsta kosti $ 100 í hans eða reikning hennar?
Ef svo er, þá spýta út $ 100 og draga $ 100 úr jafnvægi.
En auðvitað ef það er margar vélar hér eða margar leiðir eftirlitsmaður
ástand þess heims, bankinn Vault, til að sjá hversu mikið fé þú hefur,
gera ráð fyrir að bara tilviljun vélina á vinstri og hægri
bæði spyrja þessi spurning á u.þ.b. sama augnabliki í tíma.
>> Og þetta getur vissulega gerst. Hraðbankar eru tölvur þessa dagana.
Svo ef vélin til vinstri segir: "Já, hefur þú að minnsta kosti $ 100,"
meðan segir vél á hægri, "Já, þú ert að minnsta kosti $ 100,"
þá báðir halda áfram að klára áætlanir þeirra og í raun spýta út $ 100
og segja: "Fyrr þú hefðir 200 $."
"Leyfðu mér að uppfæra breytu til nú vera $ 100 eftir í reikninginn."
En ef þau bæði hafa athugað stöðu reiknings þíns og komist að því að það er 200 $
og þau bæði gera þá stærðfræði og segja 200-100,
vélar hafa spýta hugsanlega út tvö $ 100 víxla í hverja vél,
en þeir hafa aðeins uppfærð summan reikningsins til að vera 100 $.
Með öðrum orðum, hefur þú tekið út $ 200, en vegna þess að þeir skoðað ástand heimsins
samtímis og síðan tekið ákvörðun byggist á þeim gildi,
þeir gætu ekki gert á stærðfræði á endanum rétt.
Svo í banka aðstæður líka að þú vilt virkilega að hafa einhvers konar læsa
þannig að um leið og þú hefur athugað ástand einhvers breytu
það er mjög mikilvægt, eins og innstæðu,
ekki láta einhver annar að taka ákvarðanir sem byggjast á því að þar til þú ert búinn að gera þinn hlutur,
hvar í þessu tilfelli þú ert Hraðbanki á vinstri.
Læsa öllum öðrum út.
Þú getur í raun ná þessu gildi í nokkra mismunandi vegu.
>> Einfaldasta leiðin í MySQL er lína af SQL sem við gaf þér
í setja vandamál forskrift sem lítur nákvæmlega svona.
Setja í borðið - hvað sem það heitir - auðkenni, tákn, og deila, fjölda hluta,
eftirfarandi gildi, til dæmis.
Ef þú hefur ekki lesið sérstakur enn, þetta er dæmi felur hvernig gera þú fara óður í
kaupa 10 hluti þessa eyri lager til forseta Skroob,
auðkenni Hvers gerist að vera númer 7?
Þetta segir INSERT INTO töflu eftirfarandi id, tákn og fjölda hluta
af 7, 'DVN.V', og 10.
En - en, en, en - önnur lína er mikilvægt.
Á afrit Helstu hlutabréfa uppfærslu = hlutabréf + Gildi (hlutabréf).
Svo algerlega Cryptic-horfa við fyrstu sýn.
En sú staðreynd að þetta SQL fyrirspurn, jafnvel þó að það hula á 2 línur,
er 1 langur fyrirspurn, þá þýðir það að það er lotukerfinu
í þeim skilningi að þessi fyrirspurn annað hvort framkvæma allt saman eða ekki.
Og með því að skilgreiningu MySQL, það er hvernig þeir innleitt þessa fyrirspurn.
Það er samkvæmt skilgreiningu í handbók tryggð að framkvæma allt í einu eða ekki.
Hvatning fyrir þetta er eins og hér segir.
Ef í þessu tilfelli sem þú ert að reyna að kaupa 10 hluti á lager,
það er góður af sömu sögu og mjólk, það er góður af sömu sögu og hraðbanka.
>> Ef þú gerir mistök að nota ekki þessa setningafræði
heldur velja úr gagnagrunninum til að sjá hversu mörgum hlutum þessa eyri lager
er forseti Skroob hafa, og ætla að hann hefur 10 hluti,
og þá sumir hættu annað seinna að gera þá að uppfæra yfirlýsingu,
sem er annar yfirlýsing í SQL sem segir að fara á undan og bæta við 10 fleiri hluti
núverandi 10 sitt svo helst er alls 20,
vandamálið er vegna þess að í kerfi gagnagrunninum í dag og vegna þess að í tölvum í dag
þú ert með marga örgjörva, margar algerlega -
í öðrum orðum, tölva getur bókstaflega vera að gera marga hluti í einu -
Það er engin trygging fyrir því SELECT þína og uppfæra í þessu tilviki
eru að fara að gerast aftur og aftur.
Svo slæmt atburðarás væri þú gerir SELECT
til að sjá hversu marga hluti þessa eyri lager hefur Skroob hafa
og þá bara við tækifæri annan gagnagrunn fyrirspurn er keyrð -
kannski Skroob í öðru glugga að reyna að kaupa 10 hluti
í öðrum glugga öllu, eins og hraðbanka -
og gera ráð fyrir að önnur fyrirspurn fær á milli velja og uppfærslu.
Það gæti verið raunin að Skroob nú missir einhvers fjölda hluta
vegna þess að annar aðferð er eftirlitsmaður stöðu veröld hans,
eða fær hann fleiri hluti en hann ætti að hafa.
Við munum ekki fara í upplýsingum um nákvæmlega hvað þessir tilteknu línur saga væri,
en málið er að ef þú ert að athuga með breytum gildi og síðan taka ákvörðun,
ef það er hætta á að einhver annar að gera eitthvað á milli þessara 2 yfirlýsingum,
sem getur gerst í multiprocessor kerfi, í multicore kerfi,
tölvur með getu til að gera marga hluti í einu, slæmur hlutur getur gerst
eins og bankareikninga sem skuldfærð rangt, að kaupa tvisvar sinnum eins mikið mjólk,
eða í þessu tilviki röng fjöldi hluta.
En það er auðveldara leið til að hugsa um þetta.
>> Það kemur í ljós að SQL styður einnig, ef þú stilla borðið rétt,
eitthvað sem kallast viðskipti, sem ég myndi halda því fram er í raun enn auðveldara að skilja
en þetta, en það er ekki 1-Ferja, svo það er í raun aðeins meira þátt.
Það er bókstaflega a yfirlýsing í SQL heitir START færslu.
Rétt eins og það er SELECT, UPDATE, INSERT, DELETE, og taka þátt og fullt af öðrum,
Það eru leitarorð eins Transaction START.
Og hvað sem þú gerir þá í samhengi við pset 7 -
þú þarft ekki að gera þetta fyrir pset 7, það er beinlínis hafnað og ekki nauðsynlegt,
en lokaverkefni getur verið gagnlegt -
ef þú kallar fyrirspurn viðskipta á Start og þá annað fyrirspurn
og þá annað fyrirspurn og þá annað, annað, og annað,
þeim fyrirspurnum ekki í raun að framkvæma fyrr en þú hringja í SQL staðhæfing fremja,
á hver benda, hvort sem það er 2 yfirlýsingar eða 20 yfirlýsingar, þeir vilja allir vera framkvæmd í einu,
sem þýðir enginn annar getur óvart keypt of mikið mjólk eða debetkort of mikla peninga
eða kaupa of marga hluti vegna þess að allar fyrirspurnir þínar munu framkvæma
aftur til baka til baka til baka.
Og þetta er frábær mikilvægt, sérstaklega þegar þú ert að gera eitthvað eins og this.
Þetta er handahófskennt dæmi sem segir við skulum uppfæra bankareikning
með því að stilla jafnvægi jafnt jafnvægi - $ 1000 þar sem reikningur númer er 2.
Og þá seinni staðhæfing er nú skulum leggja að $ 1000
í einhvers annars bankareikning sem reikningsnúmer er 1.
>> Með öðrum orðum, þetta er fullkomið dæmi um hvar þú vilt ganga úr skugga um
að báðum þessum yfirlýsingum gerast eða alls ekki
því annars að viðskiptavinurinn er að fara að fá ruglaður
og þú ert að fara að taka peningana sína og ekki leggja það annars staðar,
eða að bankinn er að fara að fá ruglaður þar sem þú ert að fara að leggja peninga
en í raun ekki draga það frá reikning notanda.
Svo þú vilt þau bæði að framkvæma saman.
Þannig kemur í heiminn viðskiptum.
Svo er það eitthvað til að halda í bakinu á huga þínum,
ekki svo mikið að því er varðar bara lokaverkefni,
en ef þú vilt taka endanlega verkefni einhvers staðar,
Ef þú vilt að byrja upp smá fyrirtæki í kringum það,
Ef þú vilt að leysa vandamál sumir nemandi hópsins á háskólasvæðinu
og í raun hafa lifandi, virkt vefsvæði, eru þessir tegund af lúmskur villur sem geta komið upp
ef þú ert ekki alveg að hugsa um hvað getur gerst ef 2 manneskjur
eru að reyna að komast á vefsvæðið þitt á bókstaflega sama augnabliki í tíma,
þar fyrirspurnum þeirra gæti annars fá samofin.
>> Tilbúinn fyrir suma JavaScript, beitu þar?
Þetta er síðasta mál okkar fyrir önnina. Allt í lagi.
Sem betur fer, JavaScript lítur mjög, mjög, mjög svipaðar þeim 2 tungumálum, C og PHP,
við höfum gert svona langt.
Það er enginn JavaScript í pset 7, en það er ótrúlega gagnlegt tól
þegar það kemur að því að gera vefur-undirstaða lokaverkefni eða í raun bara vefur forritun almennt.
Svo fljótur yfirlit yfir eitthvað sem kallast DOM.
Hér er frábær einfalt vefsíðu sem raunverulega segir bara halló, heimur
bæði í fyrirsögn og í líkamanum.
Eins og inndrátt hefur verið að leggja til um nokkurt skeið,
Það er örugglega stigveldi á vefsíðum.
Ég gæti draga þessa sömu runu af HTML sem tré,
hugsa aftur til viðræðna okkar um uppbyggingu gagna í C, eins og hér segir.
Ég hef fengið sérstakt rót hnút kallast skjal hnút,
og við munum sjá flaumi um þetta í JavaScript í bara smá stund.
Fyrsta barn og eina barn sem í þessu tilfelli er HTML merki.
Það er engin bein kortlagning á DOCTYPE.
Það er sérstakt mál, þannig að við ættum bara að hunsa hana þegar það kemur að þessu DOM,
þetta Document Object Model tré.
Takið eftir að HTML tag, sem ég hef lýst geðþótta sem rétthyrningur,
hefur 2 börn, höfuð og líkama.
>> Þeir eru álíka dregin eins ferhyrninga.
Það er þroskandi pictorially að höfuð er vinstra megin við líkamann.
The vísbendingu er sú að höfuð kemur fyrst í trénu.
Svo er það í raun að panta á tré þegar þú draga það svona,
jafnvel þótt form og whatnot eru handahófskennt.
Head hefur meðan einn barn sem heitir titill,
og titill hefur í raun eigið barn hennar, sem er "Hello, world",
sem ég dró vísvitandi sem Oval hér til að gera það aðeins öðruvísi en rétthyrningur.
Þessir ferhyrninga eru þættir, en halló, heimur er í raun texti hnút.
Svo það er hnútur í trénu, en það er öðruvísi tegund af hnút
þannig að ég dró það geðþótta öðruvísi.
Á sama hátt er líkami eignast barn sem heitir Halló, heimur og,
svo mismunandi hnút þótt þeir séu tilviljun á sama texta,
en ég hef dregið hana með sömu lögun. Svo sem ekki sama?
Jæja, hvað er gott um HTML er að það hjartarskinn hafa þessa hierarchic náttúrunni.
Og hvað er gott um JavaScript og einkum bókasöfnum sem eru fáanleg
og vinsæll eins og jQuery, getur þú ferð um tré uppbyggingu svo ótrúlega auðvelt.
Allir af the efni sem við gerðum í C með ábendingum og fara yfir tré og recursing á hnúta
vinstri barn hægri barn, allt í einu að við getum raða að taka sem sjálfsögðum hlut
eins og að vera ótrúlega upplýsandi ef ekki svolítið pirrandi
en ekki nærri skilvirk leið til að fara um forritun.
Og svo með þessum meiri tungumálum eins og JavaScript
við munum vera fær um að sigla þessu tré miklu innsæi.
>> Og örugglega setningafræði er að fara að vera alveg kunnuglegur.
Ef þú hefur aldrei séð JavaScript áður, þetta er mjög gott tilvísun
frá Mozilla fólkinu, fólk sem gerir Firefox
svo ekki hika við að skoða það þegar þér hentar.
Það sem þú munt finna - og þessi skyggnur eru nákvæmlega það sem við notuðum um daginn -
álíka, er helsta farinn.
Svo þegar þú skrifar forrit í JavaScript, það er ekki helsta hlutverk.
Þú byrjar bara að skrifa kóðann.
En lykillinn greinarmun á JavaScript og C og PHP
er það en C og PHP svona langt hefur verið keyrð miðlara megin
sem tæki í þessu tilfelli eða almennt með miðlara,
JavaScript eftir hönnun er yfirleitt framkvæmt með vafra.
Með öðrum orðum, getur þú skrifað JavaScript kóða, eins og við erum að fara,
á miðlara í tækið, en þú setur það á meðal HTML, meðal CSS þinn,
meðal GIF þína og PNGs þínum og JPEG þínum
þannig að þegar notandi heimsækir vefsíðu þinni, ef þú ert að nota JavaScript,
að JavaScript kóða kemur frá miðlara í vafra,
og það er vafra sem raunverulega keyrir það.
Þannig hefur þetta þroskandi áhrif jafnvel hugverk.
Það er góður af kjánalegt að jafnvel hugsa um að vernda IP þína þegar það kemur að JavaScript kóða
því við eðli tungumál það verður framkvæmt venjulega vafra hlið.
>> Þú getur obfuscate það, sem þýðir að þú getur gert það líta brjálaður og ljót
án bil, hræðilegt breytu nöfn, til að gera það erfiðara fyrir fólk að stela IP þína,
en lykillinn er að það er keyrt vafra hlið.
Jafnvel þó sem innskot JavaScript er hægt að nota miðlara megin,
algengasta nota málið núna er samt á vafranum.
Og hér er það sem það lítur út. Hér er ef-else if-annars reisa alveg eins og C, eins og PHP.
Hér er Boolean tjáningu þegar þú "eða" 2 hlutir saman.
Hér er þegar þú "og" 2 hlutir saman.
Hér er skipt yfirlýsingu, sem er svipað og PHP
í því að þú getur skipt á mismunandi gildum.
Lykkjur eru tilsvarandi fyrir lykkjur hér, sem eru byggð samur við það sem við höfum séð áður.
Þó lykkjur, við höfum fengið að gera á meðan lykkja.
Breytur, alltaf svo örlítið öðruvísi.
Þú lýsa breytur eins og þú gerir í PHP og C,
en sömuleiðis er JavaScript veikt slegið.
Þú tilgreinir ekki int eða fljóta eða band eða eitthvað svoleiðis yfirleitt.
Þú getur tilgreint var.
Þú þarft ekki að tilgreina var, en það hefur áhrif ef þú gerir það ekki.
Venjulega ef þú sleppt var, getur þú búið til fyrir tilviljun alþjóðlegt breytu stað staðbundin.
Svo láta mig leggja til að þú nánast alltaf bara segja var og þá nafn á breytu.
Það er ekki tegund, það er bara var að breyta.
Þetta myndi vera dæmi, hvort sem það er 123 eða "Hello, world".
Fylki er til staðar og setningafræðilega svipað PHP.
Ég segi VAR tölur og þá nota ég hornklofum aftur að lýsa yfir breytu
sem tegund er fylki sem hefur þessi tiltekna tölur í það aðskilin með kommum.
Og svo loks, þetta er sú eina sem raunverulega lítur öðruvísi.
Muna að í PHP við hefðum innleitt á tengin array fyrir nemanda
eins Zamyla sem getur litið svona, þar sem breyta er kallað nemandi.
The hornklofum meina hér kemur fylki.
>> Sú staðreynd að ég er ekki að nota tölugildi vísitölur en strengi - id, hús, og nafn -
þýðir að þetta er tengin fylki,
og þessar örvar með jafn skilti og horn krappi
þýðir að lykillinn er "id", gildið er 1;
lykillinn er "hús", gildið er Winthrop House;
lykillinn er "nafn", gildið er Zamyla Chan.
Svo er það 3 lykla inni þessa tengin array, sem hver um sig hefur eigin gildi þess.
Við höfum séð að í pset 7, eða fljótlega mun í JavaScript sama hugmynd,
en það er að fara að líta svona út.
Svo var nemandi - engin dollaramerki og ekki minnst á tegund enn en var -
jafningjar og þá opinn hrokkið axlabönd því í JavaScript þegar þú hefur helstu pör gildi,
þú notar í raun og veru eitthvað sem kallast hlut.
Og þeir af yður, sem tók APCS eða eins gæti muna hluti frá Java
eða svipuð tungumál.
JavaScript er ekki Java, fyrst af öllu.
Það var vísvitandi hönnun ákvörðun árum til að knýja á eitthvað annað sem var vinsælt,
Nafn þess, jafnvel þó að það hefur ekki grundvallar tengslum Java sig.
JavaScript verður hluti, og þú býrð þá við vegur af the hrokkið Brace merki.
Hlutir í JavaScript eru nánast jafngildir tengin fylki í PHP
þegar það kemur að því að geyma gögn inni í þeim.
>> En jafnvel meira kröftuglega í JavaScript er hægt að tengja mjög auðveldlega aðgerðir
inni hlut, og þó að þú getur gert þetta á öðrum tungumálum,
það er alveg algengt mynstur, eins og við munum sjá.
Í stuttu máli, þetta mótmæla táknar að nemandi, sem er sérstaklega Zamyla,
og það er svipað eðli, bara setningafræðilega öðruvísi frá þessu.
Við skulum reyndar nota JavaScript á skrá.
Það kemur í ljós að það er handrit merki.
Við höfum séð stíl tag og við höfum séð önnur HTML tags.
Handrit merki í raun mun innihalda sumir JavaScript kóða.
Leyfðu mér að fara inn í tækið þar sem við höfum sumir kóðann Pre-liðinu.
Ég hef ekki sett inn það enn á vefnum, en ég ætla að gera það eftir bekknum.
Við skulum opna þetta einn, blink.html.
Til baka í 1990, það var bókstaflega HTML merki kallast blikka tag,
og þetta var ein af mest frábærlega overused merkjum á Netinu
þar sem þú vilt að heimsækja sumir 1990 stíl vefsíðu og byrja að sjá texta blikka þig svona,
niðurstöður Marquis tag, sem hafði texta fara svona.
Einn af fáum tímum þar sem heimurinn hefur í raun samþykkt á vefsíðu staðall,
allir yfir borð drap blikka tag fyrir nokkrum árum.
En við getum endurvekja það með JavaScript sem sýning af krafti sem þú hefur
þegar þú getur skrifað forrit inni á vefsíðu.
Fyrst skulum sleppa yfir nýju efni og einblína á gamla.
>> Hér er gamla efni í þessu dæmi.
Ég er með HTML tag, höfuð tag og titill tag.
Og ég er með líkama tag hér með div sem muna er bara ferhyrnt skiptingu á síðunni
að ég hef gefið einstakt auðkenni geðþótta að "kveðja" á,
bara svo að ég hafa a vegur af einstaklega vísa til þess, sem hefur mjög einfaldan texta:
halló, heimur.
Nú láta mig fletta upp á the toppur af þessari skrá og sjá hvað er nýtt.
The fyrstur hlutur sem er nýtt upp efst er handrit tag,
og inni í tag handrit fyrirvara sem ég hef lýst aðgerð.
Til að lýsa því yfir að aðgerð í JavaScript, nokkuð svipað PHP,
þú skrifar bókstaflega virka þá heiti virka, sviga,
og kannski sumir rök ef það tekur einhver.
Og ég hef hrokkið Brace mína eins og venjulega, og nú höfum við nokkur örlítið nýjan lykil
en við skulum sjá hvað þetta þýðir.
Svo VAR div, þetta þýðir bara að gefa mér breytilega kallað div.
Ég hefði getað kallað það foo, en ég vildi það til að kalla div
ástæðum sem verða skýrar í annað.
Þá snýr það út á JavaScript - og þetta er JavaScript kóða embed í vefsíðu mína -
Það er sérstakt alþjóðlegt breytu af tegund sem kallast skjal.
JavaScript er í raun hlutbundin tungumál.
Við munum ekki fara inn í smáatriði í 50 og hvað það þýðir,
en nú vita að hlutur sé nokkurn veginn eins og strúktúr.
Eins og við sáum leið til baka þegar hún er í einni af elstu vandamál setur
þar sem við setja a einhver fjöldi af upplýsingar í strúktúr,
álíka er skjal sérstaka strúktúr sem kemur með vafra,
kemur með hvaða vefsíðu. Það er ekki eitthvað sem ég skapa.
Inni í þessu skjali uppbyggingu, þó, hefur þú ekki aðeins upplýsingar
en þú ert líka virka.
>> Og hvenær sem þú ert með virka inni í byggingu, inni hlut,
það er kallað aðferð. En það er sama.
A aðferð er fall sem bara gerist svo að vera inni í eitthvað annað.
Þannig að þetta þýðir að þetta sérstakt alþjóðlegt breytu sem heitir skjal
hefur fall kallast getElementById sem bókstaflega er þessi.
Það mun fá þér þáttur frá DOM, Document Object Model tré,
sem ID er í þessu tilfelli kveðju.
Með öðrum orðum, allt sem tíma sem við eyddum í gagnauppbyggingu kemur inn í leik hér.
Þessi mynd af DOM að við áttum í smá stund síðan,
jafnvel þótt síða er svolítið öðruvísi, ef ég hafði div á þessari mynd,
hvaða document.getElementById myndi snúa aftur til mín væri í raun að vera stiga
til rétthyrningur í trénu, tilvísun til rétthyrningur í trénu.
Svo það er það sem það þýðir að í raun hringt í einn af þessum aðgerðum.
Í þessu tilviki aftur er það div. Það er ekki aðili eða titill.
Svo skulum sjá hvað ég geri svo með þessa div nú að ég hef það inni þessa breytu sem heitir div.
Það kemur í ljós með JavaScript sem þú hefur getu til klip the CSS síðunnar virk.
Upp fyrr en nú, allt CSS við höfum gert, að vísu takmörkuð, er í eiginleika stíl,
eða hvar annars hafa sett við CSS?
Ég svona spillt þetta. Í stíl tag efst á skránni.
Eða þriðja sæti hefur verið í?
>> Ytri skrá, eitthvað. CSS.
Þannig að þeir eru 3 staðir sem við höfum gert CSS svona langt,
en aflinn er að við höfum harður á dulmáli það allt.
Þú ákveðið eins og þú dúfu inn pset 7, ákváðum við áður en fyrirlestur hvaða CSS okkar væri.
En ef þú vilt breyta CSS, getur þú í raun að gera það
þegar þú ert í raun forritunarmál.
CSS, HTML - ekki forritunarmál. JavaScript er.
Svo kemur í ljós að um leið og þú ert einn af þeim ferhyrninga úr tré
kallað DOM, það hefur sig nokkur gögn inni á henni.
Svo hefur div sem ég greip bara frá tré sem við munum kalla eign inni í því
kallaði stíl og stíl eru sér eign sem heitir skyggni.
Ég vildi vita þetta bara með því að horfa upp handbók CSS notanda.
Það kemur í ljós að það er skyggni CSS eign sem gerir það sem það segir.
Það gerir eitthvað sýnileg eða ekki sýnilegur eða ekki.
Og hvernig þú gerir það er þetta.
Ég bið kerfisbundið ef sýnileika div sé falin,
hvað get ég breytt því til? Sýnilegt.
Annars ef skyggni á þessari síðu er ekki falin, rökrétt að gera það falinn.
Ég hef ekki hugmynd hvers vegna það er sýnilegur og falinn og ekki sýnileg og ósýnileg.
Þetta var léleg hönnun ákvörðun á leiðinni.
En þeir eru reyndar andstæður í CSS: sýnilegur og falinn.
Allt þetta gerir er að það þýðir að breyta CSS af skrá minn og slökkt á, og slökkt á
fyrir viðkomandi div.
En aftur, þetta er fall sem heitir blikka. Hvenær er blikka virka heitir?
Það kemur í ljós að það er önnur sérstakt alþjóðlegt breytu kallað gluggi,
svipuð í anda við skjal, en þar sem fjallar á vefsíðu þinni,
eins og DOM tré, HTML er sent frá þjóninum,
gluggi er átt við króm í kringum það, heimilisfang bar, titil bar,
og öll þessi efni um vefsíðuna þína.
>> Og það kemur í ljós að gluggi hlutur hefur sérstaka virkni inni í henni kallast setInterval
það er það sem það segir.
Það mun setja bilið - í þessu tilfelli hverja 500 millisekúndur -
og taka giska hvað það er að fara að gera á hverjum 500 millisekúndur?
Það er að fara að framkvæma sem virka blikka.
Og það er gott hér er að við hefðum getað gert þetta í C, jafnvel þó að við aldrei gerði.
C er með eitthvað sem kallast virka ábendingum þar sem þú getur framhjá aðgerðir um
sem rök.
Sama í JavaScript er hægt að standast nafn fall í annan valkost.
Og eftir því sem ég er að gera. Ég ætla ekki að gera þetta.
Ef ég setti sviga eftir blikka, sem myndi þýða að hringja í blikka virka.
Ef ég sleppa þeim, sem þýðir að hér er blikka virka
þannig að setInterval getur hringt í það á hverjum 500 millisekúndur.
Svo niðurstaðan, grimmilegur þó að það sé, er að ef ég fer inn í localhost og fara blink.html,
Ég hef nú að þetta gerist aftur og aftur.
Og ef ég Skoðið raun frumefni, við skulum sjá hvort við getum séð þetta.
Leyfðu mér Skoðið frumefni, láta mig fletta niður bara smá,
láta mig velja Frumefni hérna, og taka DOM inni Eftirlitsmaður Króm '.
Það er bókstaflega að breytast fram og til baka á hverjum 500 millisekúndur.
Ef við förum að vinur okkar Nate,
Ef þú alltaf furða hvernig það er að vinna, svipað hugmynd með millibili,
en Nate er í raun að gera mjög skilvirka notkun lit í þessu tiltekna máli hér.
Og hvað meira getum við gert í raun með þetta?
Við skulum opna annað dæmi og reyna eitthvað
það er kerfisbundið enn meira gagni en að gera hlutina blikka.
Leyfðu mér að fara inn í form skrá okkar í dag og fara í form0.
Þetta var ugliest mögulegt formi sem ég gæti komið upp með,
og láta mig sýna bara þér hvað það lítur út eins og í vafranum.
>> Leyfðu mér að fara í localhost / form, og þetta er form0.
Þetta er frábær ljót HTML formi sem hefur nokkrum sviðum fyrir tölvupóst, til lykilorð,
lykilorð, og þá lítið kassann til að samþykkja sumir skilmálum og skilyrðum.
Aflann er ef ég fer þetta form og ég vil ekki gefa þér netfangið mitt,
Ég vil ekki að samþykkja skilmála og skilyrði kannski, get ég smellt Nýskráning
og það lætur mig í gegnum engu að síður.
Þetta gerist til að leggja heimskulegt PHP skrá sem heitir dump.php.
Allt það gerir er að prenta út efni á $ _GET bara fyrir sjúkdómsgreiningar.
Það var það sem var lögð af notanda bara núna.
En geri ráð fyrir að við viljum í raun að staðfesta útfylling notandans.
Leyfðu mér að fara í útgáfu 1.
Þetta er form1.html. Það lítur fagurfræðilega eins slæmt, en taka eftir því hvernig ímynda það er.
Ef ég smelli Nýskráning án samvinnu, fæ ég öskraði á.
"Þú verður að gefa upp netfang þitt."
Allt í lagi. Svo láta mig að reyna það. Svo malan@harvard.edu. Ég þarf ekki lykilorð.
Nýskráning. "Þú verður að gefa upp lykilorð." Allt í lagi.
Þannig að ég mun gefa lykilorð Crimson. Nýskráning.
Msgstr "Lykilorðin stemma ekki." Ég verð að nú slá í Crimson hér.
Ég skoðaði tilviljun það. Nýskráning.
"Þú verður að samþykkja skilmála og skilyrði." Allt í lagi. Sammála þar. Nýskráning.
Og nú sýnir það mér greiningu framleiðsla þarna.
>> Svo bara hvað gerðist?
Við höfum haft þessa getu til að sannprófa form uppgjöf.
Í staðreynd, ef þú gerðir kafa í pset 7, það er óákveðinn greinir í ensku afsökunar virka
sem gerir það mjög auðvelt að æpa á the notandi með skilaboð á skjánum.
Ég er að nota örlítið mismunandi kerfi, viðvörun virka,
sem er ekki fall sem er brosti þar sem það gerir mjög ljót notanda skilaboð.
En við skulum sjá hvað ég er að gera hér.
Þetta er form1.html, og eftir að ég hef fengið nokkuð kunnuglega setningafræði:
líkami tag, mynd tag, aðgerð eiginleiki, aðferð eigindi.
En eftir að ég hef gefið á mitt einstakt auðkenni fyrir þægindi.
Og ég hef fengið email reit lét tegund er texti,
lykilorð sviði sem gerð er lykilorð, staðfesting sviði sem gerð er lykilorð,
og þá a kassann sem heitir samkomulag hérna, tegund er kassann.
Og svo ég hef fengið senda inn hnappinn.
En taka efst hvað meira ég.
Fyrst af öllu, það er önnur notkun handriti merkinu.
Ef þú hefur einhvern JavaScript kóða í aðra skrá, rétt eins og með CSS er hægt að fela það.
Og þú gerir það með uppspretta handriti, og síðan eftir að ég er að tengja virðist
að googleapis.com að mjög langt ferli, en skrá nafn sem endar á jquery.min
að lágmarki. JS.
jQuery er frábær vinsæll bókasafn fyrir JavaScript sem bara gerir JavaScript
allt meira notandi-vingjarnlegur að nota.
Það er í raun orðið í reynd staðall.
Svo jafnvel þó að það sem þú ert að fara að sjá er ekki hreint JavaScript í sjálfu sér,
það er bókasafn ofan á JavaScript mikið eins og CS50 bókasafn er lag
ofan á lágu stigi C kóða, veruleikinn er nánast notar allir á Netinu það.
Svo þetta eru ekki þjálfun hjól. Þetta er bara besta að æfa þessa dagana.
Nú taka hér sem er eigið handrit merki mitt, og eftir það sem ég hef gert hér.
Það kemur í ljós að jQuery er eitthvað smá fínt.
JavaScript verður dollara merki, en þau eru merkingarlaus.
>> Þeir eru eins og bréf A eða B eða C.
jQuery hefur einfaldlega samþykkt samningsins eða tegund af kallaði til þess
að $ mun vera sérstök tákn þeirra.
Svo um leið og þú hleður þessa alþjóðlegu JavaScript skrá sig hér með handritið tag,
þú hefur aðgang að sérstökum alþjóðlegum breytu sem er kallað $.
Það er meira rétt kallað jQuery, en það lítur ekki nærri eins kynþokkafullur eins og $.
En $ hefur enga sérstaka merkingu. Í PHP það hafði sérstaka þýðingu.
Þú þurfti að hafa það fyrir framan breytu.
Þetta er bara kynþokkafullur hlutur sem þeir tóku á.
Hvað er að gerast hér?
Tilkynning Ég er liggur við jQuery virka alþjóðlegt breytu skjal mína
og þá er ég að hringja. tilbúin.
Hvaða jQuery raun er er að það gerir þér kleift að taka nokkrar vanillu hluti JavaScript
eins og skjal mótmæla, glugga mótmæla,
og ef þú gefa það inn á jQuery virka -
og aftur, til að vera skýr, þetta er fall sem heitir jQuery -
Hvað það gerir er að það skilar þér sérstaka útgáfu af skjalinu
sem hefur meiri virkni í tengslum við það.
Svo í hráu JavaScript er ekki tilbúinn virka,
en ef þú framhjá skjalið á jQuery virka fyrst,
það skilar þér sérstaka útgáfu af skjalinu mótmæla
sem hefur meira ímynda lögun.
Og það er hvers vegna fólk eins og það. Það gerir bara það auðveldara að gera, eins og við erum að fara að sjá.
Svo hvað þýðir þetta lína af kóða meina?
Þessi lína af kóða er hér þegar skjalið er tilbúið -
í öðrum orðum, þegar vafrinn er búinn að lesa þessa skrá toppi til botn -
fara á undan og framkvæma eftirfarandi aðgerð.
Hvað er mjög áhugavert í JavaScript - og PHP er þetta eins vel -
er nafnlaus virka.
Í JavaScript þú getur lýst aðgerðir sem hafa ekkert nafn, en þeir hafa líkama.
Taka eftir hvað er að gerast hér.
>> Þetta er fall sem heitir tilbúinn, og það þýðir bara að gera eftirfarandi
þegar allt vefsíða er tilbúinn, þegar það er allt verið að lesa í frá þjóninum.
Hvað viltu gera? Mig langar til að framkvæma klumpur af kóða.
Takið eftir því að við viljum ekki að keyra þennan kóða strax.
Ef ég sleppt þessu, þetta myndi þýða strax byrja að framkvæmd þessar línur af kóða.
En sú staðreynd að ég er að segja nei, nei, nei, vefja það í nafnlaus virka svona
þýðir ekki framkvæma það enn, kalla það á endanum.
Við sáum þetta í smá stund síðan í fyrra formi dæmi okkar.
Hvaða hlutverk gerði við köllum loksins, 500 millisekúndur síðar? Blik.
Þannig að sömu hugmynd.
Aftur, jafnvel ef þetta lítur svolítið skrítið, bara taka nú á trú
að til þess að lýsa nafnlaus aðgerð sem heitir að lokum,
þú skrifar einfaldlega fall () {
Svo hvaða kóða við erum að fara að keyra á endanum? Eftirfarandi.
Þetta lítur líka smá nýtt, en þetta þýðir hér er jQuery virka,
og þetta er nú a smákaka.
Þetta bút af HTML neðst á skjánum auðvitað hefur einhverja tré framsetning.
Það er ekki þetta. Þessi síða er meira áhugavert en þetta Hello, world dæmi.
En það er einhver tré sem samsvarar þessu HTML.
Það myndi vera a sársauki í hálsi til að framkvæma einhvers konar endurkvæma virka
að byrja á rót hnút og þá finna hnút lét ID er skráning.
Hvað gerir jQuery frábær auðvelt fyrir okkur er bókstaflega þetta.
Fara á undan og fá mér hvað div eða hvaða formi, hvað HTML þáttur
hefur ID skráningu.
Þetta jafngildir document.getElementById ('Skráning').
>> Hvers vegna fólk eins og jQuery?
Vegna þess að það er styttra að slá. En það er allt það er. Það er sama hugmynd.
Fá mér merki sem lét ID er skráning.
Og þegar það merki, sem gerist að vera mynd, er lögð fram
fara á undan og keyra þennan kóða.
Svo skulum taka einn líta nú á hvernig við erum að gera mynd staðfestingu.
The setningafræði er vissulega dulinn í fyrstu, en það er að gerast?
Ef þessi lína af kóða er satt, ég er að fara að æpa á notanda til að veita sitt netfang.
Svo hvað er þetta lína af kóða?
$ Þýðir jQuery. Nú eftir þetta.
Þetta er góður af eins og CSS.
Ef þú hefur kafa í CSS enn, munt þú vita að þetta þýðir þáttur lét ID er skráning.
Rýmið þýðir finna barn eða afkomandi skráningu er nafn inntak.
Og þá er þetta hlutur í hornklofum smá síu.
Og jafnvel ef það lítur dulinn, þetta þýðir bara að fara á mynd sem ID er skráning,
fara þátturinn inntak innan þess sem heitir tölvupóstur,
og þá fá gildi sitt, hvað sem gildi þess verður að vera -
asdf ef það er allt sem ég vélrita eða malan@harvard.edu ef það er það sem ég slóst.
Svo ef verðmæti sviði email formi á == ekkert, æpa á notanda.
Annars ef verðmæti lykilorð sviði == ekkert, æpa á notanda.
>> Annars ef verðmæti lykilorð sviði ekki jafngilda verðmæti staðfestingu sviði,
sem var annað form, æpa á notanda.
Og þá loks - og þetta hefur líka nokkrum nýjum setningafræði eigin,
en þegar þú hefur séð það, það er að minnsta kosti svolítið meira sanngjarnt -
annars ef mynd sem ID er skráning hefur inntak þáttur hét er samkomulag
og það er merkt, fara á undan og æpa á notanda.
Þannig að ég viðurkenni alveg að þetta er alveg yfirþyrmandi við fyrstu sýn.
Það er a einhver fjöldi af nýjum setningafræði. En allt jQuery fylgir þessum konar mynstrum.
Og heiðarlega, ég vissi ekki einu sinni vita það verið þar til fyrir nokkrum mínútum síðan.
Ég googled "Hvernig athuga þú ef hakað er merkt í jQuery?"
og þetta er setningafræði, því að þar er mismunandi leiðir til að gera það
með raunverulegum hráu JavaScript kóða.
Svo sem mjög fyrsta síða Set Vandamál 7 leggur áherslu á,
pset 7 er mjög mikið að æfa í bootstrapping sjálfur
þar sem við höfum veitt, vonandi, að huglæg ramma sem á að takast á við pset.
>> En eins og oft er raunin með hönnun á vefnum, það er komið að þér virkilega að pota í kring,
fella sýnishorn af kóða og dæmi af vefnum svo lengi sem þú vitnað þeim
á skilmálum á þeim fyrsta blaði,
og átta sig á því að læra HTML, CSS, JavaScript og jafnvel SQL
er í raun ætlað að vera þetta á-heimili æfa eins og við byrjum að taka þessar þjálfun hjól burt.
Og átta sig líka er það svo margir fleiri hlutir sem þú getur gert með vafra.
Inni í flestum af þessum þáttum það eru aðrir hlutir sem kallast atburður dýraþjálfari.
Og jafnvel þó að við skoðuðum bara á sjálfur heitir onsubmit og onready,
þú getur gert hlutina eins onkeydown, onkeyup,
eins og þegar notandi snertir takka, getur þú hlustað á það og ýtt upp.
Gmail hefur flýtilykla.
Hvernig Google innleiða flýtilykla eins C fyrir yrkja?
Þeir hlusta á atburðum, eins og þeir eru kallaðir, eins onkeypress eða onkeyup og onkeydown.
Ef þú hefur alltaf sveiflast músina yfir einhvern matseðill valkostur
og allt í einu, Voila, a valmynd birtist eða grafískur breytingar lit,
hvernig eru þau að gera það?
Frekar en að hlusta onready eða onsubmit, hlusta þú á onMouseOver eða onmouseout.
>> Svo í stuttu máli, með þessum mjög einföldu grunnatriði sem við höfum byrjað að klóra yfirborðið á dag
og við munum kafa í frekar til að á miðvikudaginn, þú, æ,
vald til að framkvæma hvers konar hluti sem þú ert þegar kunnuglegur með.
Svo skulum enda þar, og við munum halda áfram á þessu á miðvikudag.
>> [CS50.TV]