[Powered by Google Translate] [Nädal 9]
[David J. Malan - Harvardi Ülikool]
[See on CS50. - CS50.TV]
Hea küll. Tere tulemast tagasi. See on CS50, ja see on algus 9. nädalast.
Täna keskendutakse eelkõige disain, enam kontekstis C
kuid seoses PHP ja natuke SQL ja natuke JavaScript,
Eriti suunas lõpuks nii pset 7 ja ka oma lõpliku projekti.
Tegelikult, kui sa oled selle koha peal oma lõpliku projekti
kus eeldatavasti alates tund või nii tagasi sa vähemalt hakanud mõtlema
oma lõpliku projekti ja sa mõtled, mida soovite teha koostööd 1 või 2 klassikaaslased,
kui sul on probleeme ühendavad ütles klassikaaslased,
julgelt täitke vorm aadressil cs50.net/partners/form.
See lihtsalt küsib, kes sa oled, millist projekti sa mõtled,
kus sa elad lihtsalt logistilistel põhjustel.
Ja siis kui sa tahad hoida silma peal üle järgmisel nädalal või nii arvutustabeli URL seal,
saab siis näha ainult lugemiseks versiooni Google doc
kus me selle teabe kogumiseks.
Nii et kui sa tahad teha kellegagi, kõigi vahenditega vabalt jõuda inimesed
kaudu, et mehhanism.
Kuid enamik inimesed teevad tööd soolo. See on täiesti korras.
Nii ei tunne, et see on kuidagi kohustuslik.
Reedel oli see ainult mulle ja mõned meeskond siin,
tühi teatri suures osas.
Esines 3 turistid istub seal üleval, nii et oli natuke ebamugav.
Mida me rääkisime oli andmebaasid ja me rääkisime pset 7 natuke.
Ja kui sa ei juhtunud jõuda, et video lihtsalt veel, siis hästi.
Ma püüan määratle tingimusi, mida me muidu enesestmõistetavaks
aluseks reedel loeng.
>> Aga täna me ei kavatse proovida sulle punkti
mitte lihtsalt on võimalik teha midagi pset 7
aga tõesti mõista, mis toimub all kapuuts,
eriti mõned abstraktsioonid, et me paika panna functions.php faili
teha oma elu natuke lihtsam, kuid nii, et te lõpuks aru
nii et kui abirattad maha tulla paari nädala jooksul saab veel ellu
reaalses maailmas ja seda kraami ilma CS50 raamistiku all teid.
See $ _SESSION, you need, kes tunnevad
või kes juba püütud video reedel, mida ei SESSION tehkem
aastal PHP-põhine veebirakenduse?
See on superglobal muutuja, mis tähendab, et see on sarnase sisuga GET ja POST
ja mõned teised, kuid mis asi see on kasulik?
>> Mis on SESSION kasutatakse? Jah. [Üliõpilane] Sisselogimine
Vabandust? [Üliõpilane] Sisselogimine Sisselogimine Tõepoolest.
Aastal pset 7 me kasutame selle sessiooni superglobal hõlbustada sisselogimist
Ja mis on tore see superglobal, et see on assotsiatiivne massiiv.
Assotsiatiivne massiiv, mäletate, on lihtsalt massiivi kuid mille indeksid ei pea enam olema numbrid
nagu 012. Nad võivad olla numbrid või nad võivad olla isegi stringe.
Ja nii kui oled sukeldunud pset 7 veel, siis võib meelde tuletada, et me oleme ladustamiseks võti nimega ID
sees see assotsiatiivne massiiv, mille väärtus on umbes 123 -
olenemata hetkel sisse logitud kasutaja ID on.
Motivatsioon on see, et isegi kui kasutaja on külastanud localhost
või minu koduleheküljel üldisemalt ja siis nad on sisse loginud,
isegi kui nad ei kliki lingil või naasta oma veebilehel 5 minutit
või isegi tund või isegi päev, kuid nad lahkuvad brauseri aken lahti,
kaudu see superglobal saab Mäletan, et nad on sisse logitud
>> Teisisõnu, see võimaldab mul hoida veidi pikemas perspektiivis midagi tahan umbes kasutaja.
Ja te võite mõelda, et see tõesti nii kehastus ostukorv.
Kohad nagu Amazon ilmselt laseb sul panna asjad ostukorv,
kuid HTTP protokoll, et võimu Web, on kodakondsuseta
selles mõttes, et kui te külastate veebisaiti,
enamasti sa ei pea mõned pidevat võrguühendust
vahel brauseri ja serveri.
Niipea kui olete alla laadinud HTML ja JPEG ja GIF ja kõik, et
ühendus kaob ja sa lihtsalt koopia HTML ja tühi-tähi serverist.
Aga kui server soovib mäletan midagi sinust,
koorem on serveris tegelikult salvestada see teave.
Ja nii sa programmeerija, kes on üle serveri
saab panna kõige ükskõik mida tahad sees see superglobal assotsiatiivne massiiv
ja see on seal järgmine kord kasutaja tagasi tuleb,
kas see on minuti või isegi päevad hiljem, kui nad sulgevad oma brauseri aknas,
kus punkt SESSION kaob.
Nii et see on üürike ladustamine, see on mitte-püsiv ning see on mõeldud taanduvad
niipea kui kasutaja sulgeb oma brauseri - mitte ainult sakk sageli sirvija
seeläbi tõhusalt logib kasutaja välja.
Nii et kuidas see asi tegelikult ellu viia?
Võtame Kiire pilk lihtsa näite me vaatasime reedel.
Nende võõras, see oli nii lihtne see.
See on veebileht, mille ainus eesmärk elus on mulle
Mitu korda olen käinud siin lehel.
See on esimene kord siin esmaspäeval, et käisin, nii ta ütleb: 0 korda.
>> Aga kui ma hakkan uuesti seda lehte, see ütleb 1 kord, 2, 3, 4, 5,
ja see lõpuks lihtsalt hoida lugedes üles, üles, üles, üles, üles
iga kord, kui ma tegelikult käsku Värskenda seda.
Niisiis, kuidas on selle töö? Laske mul minna sees see fail nimega counter.php.
Ülaosa on kõik sinine kommentaare, kuid huvitavam osa on siin.
Rea 13 kutsume seda funktsiooni session_start,
ja see on sõna otseses mõttes kõik, mida pead tegema kui sa tahad pääseda
sellele erilist superglobal nimega $ _SESSION.
Mistõttu on võimalik, ja me näeme hetke pärast, kuidas see kõik võimalik.
In real 16 teadet, mida ma teen.
Kui võti nimega counter - teisisõnu, indeksi väärtus - "counter"
olemas sees see massiiv nimega SESSIOON, siis mida ma teen sellega rida allpool?
Mis on eelarverea 18 teed?
>> [Kuuldamatu õpilase vastus] Mis see on? [Üliõpilane] hoidmine väärtust. Hea.
See ladustamiseks väärtus, mis on istung kohe uue kohaliku ajutise muutuja,
$ Counter kõik väiketähed.
Pange tähele, et PHP on juba natuke liiga laisk siin.
Teade meil ei ole ühtegi viidet int või veepinnal või nööri või midagi sellist
sest PHP on nõrgalt kirjutatud, kusjuures te ei pea täpsustada, millist tüüpi muutuja,
ja selles asjas olen isegi ei deklareeritud seda veel.
Ma tunnistades selle sees need looksulg ja erinevalt C, see on tegelikult midagi.
Ükskõik kui sügavalt pesastatud muutuja deklaratsioon PHP -
sees lokkis traksidega, sees lokkis traksidega jms -
see tol ajahetkel olemas ülejäänud programmi,
jaoks hea või halb.
Nii see kohe muutub globaalne niipea kui sa defineerid seda me teeme siin.
>> Vastasel juhul, kui ma ei leia, et seal on midagi istungil superglobal,
Ma ilmselt initsialiseerimisel see muutuja loendur 0,
seega lihtsalt eeldades, kasutaja ei ole kunagi varem siin olnud.
Ja siis see muidugi on incrementing leti kuidas?
Ma ajakohastamine väärtus, mis on sees see assotsiatiivne massiiv
seades see võrdne olenemata counter praegu on +1.
Kui ma keri siin HTML leht, see on tegelikult üsna lihtne.
Ma pean kehas sellel leheküljel on: "Te olete seda saiti külastas nii-ja-nii korda."
Ja see on PHP ehitada.
Kui sul <? = See on ekvivalentne tõhusalt mida funktsioon?
See on tõesti samaväärne midagi printf, mis me oleme näinud mitmeid kordi C,
kuigi nagu te teate juba alates spec pset 7,
prindi on ka funktsioon, et lihtsalt trükib midagi välja, see ei ole tegelikult kasutada vormingu tähistamine,
ja tegelikult võite öelda kaja samuti.
Nad kõik on kunagi nii veidi erinev, kuigi lõpptulemus on lõppkokkuvõttes sama.
Nii et see kasutamine võrdusmärki on lihtsalt omamoodi elegantne viis seda teha
Veel lühidalt kui te muidu ei saa.
Nii et kõik see sait ei. Ta prindib välja loenduri väärtus.
Kuidas see kõik tegelikult toimub?
Nette nädal või nii tagasi hakkasime otsima all kapuuts
, kuidas veebileht töötab, kasutades seda Inspektor sakk.
>> Chrome on see nii Mac versioon, Windows versiooni ja isegi Linuxi versioon,
ja Firefox ja IE on sarnased, mille kaudu teil on selle sisseehitatud siluri
sees brauser.
Võtame pilk järgmine.
Meil on terve hunnik kaarte siin, ja tuletada meelde, et kõige vasakpoolsema üks on elemendid,
ja ükskõik kui godawful HTML ja JavaScript on leht,
meelde tuletada, et elementidega kaardil saab tegelikult navigate HTML hierarhiliselt
ja kena ja korralikult.
Nii et kui sa üritad õppida veebilehel nagu Google või Facebook
või tegelikult mis tahes veebisaidile, mõistad, et sa oled ilmselt parem
vaadates lähtekoodi nii erinevalt vaatamise toores allikas,
mis võib olla jama, nagu me oleme näinud eriti Google'i kodulehekülg.
Nii et kui ma selle asemel klõpsa vahekaarti Network siin,
Vaatame, mis toimub kui ma külastada seda lehekülge.
Esiteks lubage mul kustutada vahemälu.
Ma lähen minema Seaded Chrome ja seejärel minna Ajalugu
ja siis Kustuta kõik sirvimisandmed.
Sa võid kasutada seda teed muudel eesmärkidel, [naer]
aga kui tegemist on arendada veebilehed, see on tegelikult kasulik -
kui sa naerad sa tead. [Naer]
See on tegelikult väga kasulik, kui arendada veebilehed, sest reaalsus on
asjad nagu küpsised ja asjad puhverdatud HTML-faile, puhverdatud JavaScript failid
saab reaalselt suur peavalu, sest kui mingil põhjusel
brauser otsustab vahemälu mõnda faili ja veel oled teinud muudatusi selle faili serverisse
kuid brauser ei tõesti aru, et fail on muutunud
ja seega ei ole tegelikult uuesti laadida see isegi kui klõpsate Reload nuppu,
üks surefire kuidas lihtsalt veenduda süü ei ole oma koodi,
see on koos käitumine brauseri, on minna siia oma brauseris
ja lihtsalt puhastada kogu ajalugu, nii et pole mingit segadust.
>> Ja siis kui sa tõesti tahad olla paranoiline, sulgege brauser, taaskäivitage see,
ja seejärel veenduge, et kõik töötab ootuspäraselt.
Nii lühike, vahemälu tühjendamine on hea, kui teed areng.
Nii et siin on meil Network sakk.
Ma varem oli käinud kohas 9 korda, kuid lubage mul minna nüüd ja klõpsake Reload.
Ja ma olen tagasi alla 0.
Olgem tegelikult näha, kuidas see on, et selle sessiooni superglobal rakendatakse.
Ma lähen klõpsa 1. HTTP taotluse, mis oli tehtud,
ja see silumine aken laseb mul sisse vaatama seda.
Siin ma näen lihtsalt vastus serverilt, mis ei ole huvitav.
Olen näinud seda igal mitmel viisil.
Aga mis on tehniliselt huvitav on päised.
Kui ma keri siit ja keskenduda taotluse päised ja klõpsake vaata lähteteksti,
mida ma näen, on sõna otseses mõttes HTTP päringu
et lihtsalt läks minu brauseri server,
GET on Keskne sõna ja siis / counter.php on faili nimi,
HTTP/1.1 olemisele versiooni HTTP, et minu brauser kasutab.
See rida siin on väike meeldetuletus alates brauseri server mis serveri nimi on
et ta tahab rääkida.
Ja siis ülejäänud seda on mõnikord huvitav, kuid ei puuduta praegu.
>> See on lihtsalt selline uudishimu.
Cryptic kuigi see string on igal ajal teie brauser külastab veebilehte
see on teavitada serveri millist brauserit sa kasutad
ja millist operatsioonisüsteemi te kasutate ja millist versiooni sellest.
Nii et kui sa oled kunagi mõelnud, kuidas veebilehed nagu CNN ja tühi-tähi
tea, mis protsendid on Mac kasutajad veebis, PC kasutajad,
IE kasutajad, Chrome kasutajad jms, sellepärast on kõik meie brauserid
räägivad igale kodulehele seal me oleme.
See ei pruugi tingimata sisaldada isikuandmeid,
kuid see ei ütle server, mida teie IP-aadress on ja millist brauserit ja operatsioonisüsteemi sa kasutad.
Nii et kui see info on.
Aga mis on veel huvitav nüüd, kui tegemist on nende seansside on vastus header.
Lubage mul klõpsake Kuva allikas kõrval vastust.
Mis on huvitav siin on mõned asjad.
1, me saime tagasi olekukoodi 200.
Me ei näe seda olekukood sest see tähendab, et kõik on hästi.
See tähendab sõna otseses mõttes okei erinevalt midagi muud.
Mis number mõnikord me näeme, et see on halb? [Üliõpilane] 404.
404, faili ei leitud, 403 võite olla Takistuseks pärast juba,
mis on keelatud, mis tähendab, et sa unustasid chmod midagi, kõige tõenäolisem.
Ja seal on hunnik teisi.
>> Alla siin, see on natuke hull.
Ma tõesti lihtsalt kirjutas seda faili paar minutit tagasi kleepida see gedit.
Miks seda lehte lõppema aastal 1981, enne kui tegelikult oli veebist?
Mis toimub seal?
>> [Kuuldamatu õpilase vastus] ajatempli. Aga miks?
See on mõnevõrra meelevaldne, aga see on tegelikult kasulik.
Mida see ütleb minu brauser on see PHP fail sa oled taotlenud juba aegunud.
Tegelikult on see lõppenud 30 aastat tagasi.
Aga mida see tegelikult tähendab?
See lihtsalt tähendab, et järgmine kord, kui kasutaja külastab seda lehte,
kas ümberlaadimise või kirjutades URL aadressiribale
veenduge, et minna ja tõmmata uus koopia.
See on omamoodi näide vahemälu lõhkemiseni,
loll sõna, mis tähendab lihtsalt üritab hoida brauserid
alates tegelikult caching HTML, mis on saadetud serverist
nii et sa ei kogemata tabas reload ja siis vaata sama failiversiooni.
Sa tegelikult tahad server saata uue koopia.
Nii et see on 1981 tähendab lihtsalt, et see, mida seade valimine
kui suvalise kuupäeva minevikus.
Aga tõeline mahlane rida on nüüd see.
Isegi enne 50 oled ilmselt ähmaselt tuttav küpsiseid.
Kuna just nüüd, eriti nende seas, vähem mugav või vahel,
Mis on küpsis teie arusaam praegu
kuigi me oleme tegemas oma arusaamist rohkem tehniline?
Mis on küpsis? Jah.
[Üliõpilane] infot kasutaja, meeldib kui nad on kirjutatud oma kasutaja nimi või midagi.
>> Hea. See on infot kasutaja, kas nad on kirjutatud oma kasutaja nimi juba.
Küpsised on viis, mille serverid ei mäleta midagi kasutaja.
Ja mida küpsis tõesti on tekstifail või mõned jada bytes
mis on istutatud server sees oma brauseris
ja sees, et fail või nende seas baiti on mingi tunnus.
Võibolla on see sõna otseses mõttes oma kasutaja nimi, kuid enamasti on see midagi rohkem segasena ilmega
nagu see asi siin - bo8dal3ct ja nii edasi - see on tõesti suur täht string
mis on tegelikult lihtsalt pidi olema kordumatu tunnus teile.
Või sa ei mõtle seda kui omamoodi virtuaalne käsi tempel.
Kui te lähete mõned klubi või lõbustuspargis, meeles pidada, et sa oled tegelikult makstud
ja läinud, nad panid veidi punane kleebis käega mingi,
ja mis meenutab inimesed letis, et olete juba makstud
ja te võite tulla ja minna nagu soovid.
Küpsised on veidi sarnase sisuga, et.
Esimest korda käisin sellel veebilehel, nagu ma just tegin pärast puhastades minu vahemälu
veebiserver, seade antud juhul pani pitseri minu käsi
kelle nimi on PHPSESSID, sessiooni ID,
mille väärtus on see tõesti pikk tähtnumbriline string.
>> Nii et nüüd omamoodi ehib mu kätt nii et järgmine kord, kui ma tabanud asendusostu
või käsitsi külastage URL brauseris
minu brauser määratluse HTTP läheb esitada käsi tempel
uuesti ja uuesti ja uuesti.
Nii et kuigi server ei pruugi teada, kes ma olen,
nad vähemalt teavad, et ma olen sama kasutaja või vähemalt täpsemalt sama brauserit.
Ja nii see on lõppkokkuvõttes kuidas SESSIOON superglobal rakendatakse.
Server pole aimugi, kes sa oled, kui sa uuesti veebilehel teist või kolmandat korda
kui te esitate selle poolt tempel.
Ja niipea, kui te esitate, et käsi tempel,
veebiserver sisuliselt läheb natuke andmebaasi oma
ja kontrolli, okei, ma just näinud aga tempel kasutaja bo8dal3ct ja nii edasi.
Las ma vaatan, millist teavet programmeerija on salvestatud
sees superglobal selle kasutaja,
ja siis andke mulle veenduge, et need andmed on jälle sees istungi superglobal
nii et programmeerija saab uuesti juurdepääsu et andmed
isegi kui see loodi mõned minutid või tunnid tagasi.
Nii et teiste sõnadega, küpsised, mis sai halb rap mõnda aega
kuna ebakindlus brauserites ja nad saavad tõesti vastuolus meie privaatsuse ja kõik see,
nad tegelikult on väga kasuliku sest ilma nendeta
siis oleks pidevalt tuleb sisse logida iga Facebook leht, mida külastada
või iga Gmaili e-posti lugeda, kui brauser ei ole mingil viisil meenutamise
et olete juba kinnitatud.
>> Nii et sel viisil küpsiseid saadetakse edasi-tagasi üle traadi.
Teine uudishimu küpsised, eriti siin, et see on täiesti meiliga.
Pole mingit krüpteerimist siin toimub üldse,
ja tõesti ma HTTP hetkel.
Üks meie lemmikud hetki CS50, mis on nüüd 2 aastat tagasi,
aastal umbes samal ajal tööriist nimega Firesheep tuli välja.
See oli vaba tarkvara, mis tegi turvalisuse teadlane
kui äratus kogukonna öelda, kuidas atrociously rakendatud
teatud autentimise mehhanismid veebis olid.
Nii et mõnda aega, Facebook oli peaaegu täielikult HTTP, ei HTTPS.
Ja isegi kui sa ei tea, kuidas krüpto töötab, S on turvaline
nii et see tähendab, seal on vähemalt mõned krüpteerimine kaasatud.
Facebook ei kasutatakse krüpteerimiseks kasutajanimed ja paroolid,
kuid niipea, kui olete tutvunud oma pokes või sõnumeid või oma uudistevoo,
kõik oli krüpteerimata.
Nii oli Gmaili kuni vaid aasta või 2 tagasi.
Iga kord, kui sisse logitud, jah, nad kasutasid turvaline krüpteering,
kuid seejärel nad ei teinud seda. Ja miks see võiks olla?
Miks mitte lihtsalt kasutada krüptograafia kogu aeg kasutusel juhtudel nagu see on?
Mis see on? Arvan, et kuulsin midagi. [Üliõpilane] kiirus.
Kiirus, eks? On viise selle ümber.
Aga kui sa just mingi mõelda loogiliselt, kui te krüptida midagi,
sa pead tegema vähemalt natuke rohkem tööd.
Aastal pset 2 Kui rakendatakse Caesar või Vigenere või isegi crack,
lihtsalt printida string on suhteliselt lihtne.
Krüptimine ja seejärel printida string minimaalselt nõuab natuke rohkem tööd.
>> Super populaarne veebilehed nagu Google ja Facebook,
kui sa pead tegema rohkem tööd iga kasutaja jaoks iga veebilehe nad külastavad,
et lihtsalt võtab rohkem protsessori aega.
Ja kui teil on vaja rohkem protsessori aega, peate rohkem servereid,
mis tähendab, et peate rohkem raha.
Ja nii juba aastaid see lihtsalt tõesti ei olnud hea tavaga.
Inimesed kasutavad SSL krüpteeringut ainult siis, kui nad on vajalikud.
Kuid selgus, ja kui see mehe koos Firesheep tehtud super selge,
kui te poisid, kes on praegu Facebookis praegu -
Out of uudishimu, vaatame, kas sa Fess üles.
Kui oled Facebookis praegu mõnes lingile, isegi kui see pole esiplaanile,
on oma URL HTTP või HTTPS?
[Mitu õpilast] S. S? [Naer]
Okei. Iga HTTP? Just 1? Okei.
Nii et kõik meist ei saa häkkida, et kutt Facebook kontole kohe.
Enamasti on see muutunud vaikimisi sisse lülitatud, vähemalt mõned veebilehed.
Ja pikk lugu lühike, kui teie veebi liiklust ei ole krüpteeritud,
mitte ainult ei HTML minna edasi ja tagasi üle WiFis krüpteerimata
nii et ärge asjad küpsised minna edasi ja tagasi kogu õhk
ilma igasuguse krüpteerimist.
Nii et kui teil on lihtsalt natuke programmeerimise Savvy või natuke googeldamist oskusi
leida vaba tarkvara, mis teeb seda, kõik mida sa pead tegema, on istuda Starbucks
või istuda lennujaam, kus on tavaliselt krüpteerimata WiFi
ja lihtsalt olge märksõnu nagu Set-Cookie: või PHPSESSID
sest kui sul on tehniline Savvy lihtsalt vaadata WiFi
kõigile bitti, mis voolavad läbi õhu see muster,
saate siis öelda, et mehe PHPSESSID juhtub olema bo8dal ja nii edasi.
Ja siis jälle, kui sa oled piisavalt tehniliselt Savvy või on õige vahend,
saate siis lihtsalt ümber seadistada oma brauseri alustada esitades, et käsi tempel
et Facebook.com ja Facebook on lihtsalt läheb eeldada, et sa oled see kutt
sest kõik nad teavad, ei ole, kes sa oled, vaid et teil on selle kordumatu tunnus.
Nii et kui sa varastada, et kordumatu tunnus ja esitada see veebiserver, kui sinu oma,
nad lihtsalt läheb näidata teile, et inimese uudistevoo
või selle isiku sõnumite või pokes.
>> Ja ma Google nüüd kuidas aktiveerida HTTPS jaoks Facebook võibolla.
Aga see on tõesti nii lihtne.
Ja nii Facebook ja Google jms on saanud tõesti hea selles,
kuid silma peal hoida kõik veel ühegi veebisaite külastada, et ei kasuta HTTP
ja on mingi tundlikku teavet neile,
kas see on majanduslikke või isiklikke vms.
Kui nad ei kasuta seda, üsna tõenäoliselt võib küpsiseid niimoodi olema väga lihtsalt varastatud
ja siis võltsitud, ja see on täpselt see, mida Firesheep tegi.
Sa ei pea olema programmeerija.
Kõik, mida pidin tegema oli on Interneti-ühendus, lae see tasuta tööriist,
ja mida oleks vaja on sisselogimisel ja siis näitaks teile Facebook nimed
inimese kohta Sanders, selles konkreetses meeleavaldus, teie ümber
ja kõik, mida pidin tegema oli klõpsa oma nimi ja tarkvara automatiseerida protsessi
nuusutamisel et küpsise, kui ta esitab Facebook kui sinu oma,
ja voila, olete sisse logitud
Nii et see on veel üks neist "ei tee seda" ametlikult.
Kui teil on oma koduvõrku ja soovite käpard, kõigi vahenditega,
aga aru, et see ei ületada piiri ülikooli keskkond.
>> Aga eesmärk siin on tõesti rõhutada mitte kuidas seda teha
aga kuidas kaitsta vastu selliseid asju.
Ja triviaalne lahend siin, kuigi ta ise on vigane,
on tõesti vähendada, kasutades mis tahes saite, mis ei kasuta HTTPS pidevalt.
Nii saidid nagu Facebook ja Google on üha tihedamini ruudud
kus saab valida sisse selline asi,
ja pangad on olnud see juba aastaid samadel põhjustel.
Nii lihtsalt natuke hirmu faktor, kui suudame. Aga see on see lühikokkuvõte.
See, kuidas server mäletab, kes sa oled.
Ja niipea, kui nad ei mäleta, kes sa oled, nad mäletavad midagi te
et programmeerija on talletatud selle erilise superglobal nimega $ _SESSION.
Ja pset 7 me kasutame seda triviaalselt lihtsalt meeles pidada, int,
nimelt ainulaadne kasutajatunnus, kes on sisse loginud,
nii et me teame, et nad pole seal varem olnud.
Kõik küsimused siis istungid või küpsiseid vms?
Firesheep ei toimi nii hästi enam,
ja sa pead panema oma arvuti erilist Siveetön ¾
nii et sa oled tegelikult kuulata liikluse peale ise.
Nii et kui te praegu allalaadimine Firesheep, mõistan, et see ei ole päris nii lihtne
nagu ta kunagi oli näidata.
Hea küll. Ja ärge tehke seda Sanders. Kas see kodus.
Andmebaase.
Üks asi, me tegime pset 7 väga teadlikult
aastal anname proovi andmebaasi tabeli kasutajatele, mis on umbes kasutajatunnused,
mõned kasutajanimed, ja mõned krüpteeritud paroole seal.
Ja nagu te näete, kui te ei ole juba, sa lähed pea muutma tabelis natuke.
Sa lähed on lisada mõned vahemälu iga kasutajat selles tabelis,
ja sa lähed on lisada teine ​​ajalugu tabel, portfellid tabel,
või ehk nimetada seda midagi muud.
Aga nii mõelnud, kuidas seda teha, teeme avada see tööriist
mis me kasutasime reedel, aga kui harjumatu, aparaat kaasas tööriist
nimetatakse phpMyAdmin mis on juhuslikult kirjutatud PHP,
kuid tema eesmärk elus, kui ma sisse logida siin jharvard karmiinpunane,
on mulle kasutajasõbralik viis vaatamise ja muudan andmebaasis.
>> Andmebaas, mis ma olen töötab seade nimega MySQL.
See on väga populaarne, ja see on tasuta avatud lähtekoodiga andmebaasi, mis on imeliselt lihtne kasutada,
eriti ees lõpeb niimoodi.
Mis see tööriist võimaldab mul teha, näiteks, on Hirm tabelid.
Lubage mul minna ja seda teha.
Reedel oleme loonud tabeli nimega õpilastele, et oli super lihtne.
See oli 3 veergu - id, nimi ja e-posti - ja ma käsitsi sisestatud paar rida
nagu David ja Mike sellel konkreetsel juhul.
Võtkem see natuke edasi, ja oletame, et me taha mäletada rohkem
kui lihtsalt nimi ja e-posti umbes kasutaja.
Lubage mul kliki Struktuur siin üleval.
Ja jälle pset te loeksite vajalikke samme siin,
nii et ärge muretsege, kui mõned on see natuke kiire.
Siis ma lähen klõpsa siin.
Ma lähen lisada mõned veergude arvu pärast e-posti
sest ma tahan lisada midagi maja.
Ma unustasin salvestada õpilase maja.
Lubage mul nuppu Mine, ja nüüd on meil see vorm, et kahjuks on veidi lai vasakult paremale,
aga ma lähen helistada nimi selles valdkonnas maja,
ja siis tüüp mul on nüüd valida.
So let 's on lühike vestlus umbes erinevat tüüpi MySQL
sest arvestades PHP on nõrgalt kirjutatud ja see omamoodi mängib kiire ja avar koos tüübid,
andmebaasis eriti see on super oluline, et tegelikult kasutavad kirjutades oma eelise
sest üks neist asjadest, MySQL ja muud andmebaasi mootorid teha saab
on tagada, et te ei pane valeandmeid oma andmebaasi.
See on omamoodi vaba veakontroll teile kättesaadavaks.
>> Eluaseme me ilmselt ei taha seda int, mis on 32-bitine väärtus MySQL.
Me tegime rääkida lühidalt reedel umbes varchar, mis tähistab eri pikkusega char.
Mis see on? See võimaldab teil täpsustada, mida soovite, et see on string mingisugune.
Sa tõesti ei tea ette, kui kaua see on,
nii me suvaliselt öelda maja nimi võib olla 255 märki
aga sa võiksid minna 32, 64 - suvaline arv tõesti.
Aga ära kasutades varchar üle Väli char on mis?
Lihtsalt intuitiivselt kui ma keri siin, märkate seal char ja seal on varchar.
VARCHAR on eri pikkusega char; char on fikseeritud pikkusega char.
Nii põhineb üksnes kõnealuse määratlusega, mis on kasuks või kahjuks kõik need?
Teisisõnu, kes hoolib vahet, või miks peaks sul?
>> Jah. [Üliõpilane] varchar on rohkem paindlikkust, kuid võtab rohkem mälu.
Hea. VARCHAR kulub rohkem - Vaatame. Ma ei ole kindel, kas ma kuulsin seda õigust.
Kas oskate öelda, et veel kord?
[Üliõpilane] ma ütlesin varchar on ilmselt suuremat paindlikkust, kuid see võtab rohkem mälu.
Huvitav. Okei. VARCHAR ilmselt annab rohkem paindlikkust, kuid võtab rohkem mälu.
Viimane ei pruugi olla tõsi.
See sõltub kontekstist, kuid olgem tagasi tulla, et.
>> [Kuuldamatu õpilase vastus] Täpselt.
See on tegelikult nii, et char on tavaliselt kasutada rohkem mälu
sest char, nagu C, on nagu nöör, see on array tähemärki.
Nii et kui sa ütled char valdkonnas pikkus 255,
andmebaasis on sõna otseses mõttes annan teile 255 tähemärki.
Ja kui see maja jõuab on Mather ja 6 märki kokku,
sa raiskad üle 200 tähemärki.
>> Nii varchar tõhusalt kasutab vaid nii palju sümboleid, mis on vajalik
kuni summa.
Aga auto hind on tegelikult jõudlust, potentsiaalselt.
Kui sa tead juba ette, et kõik oma stringe saab olema 8 tähemärki -
Näiteks oletame, et teil on vaja paroole pikkus 8 -
Segamini kasutades char valdkonnas mõnikord, kuigi mitte sageli,
on täpsustada fikseeritud pikkusega midagi nagu parool
sest nüüd andmebaasi saab isegi targemaks.
Kui ta teab, et iga char valdkonnas, iga stringi veerus on sama pikkusega,
saad tagasi tunnuseks muutmälu.
Võite hüpata üle erinevate char välju oma andmebaasi tabeli
sest mõtle andmebaasi ridu ja veerge.
Nii et kui igaüks stringid on sama pikkusega,
sa tead, et esimene on kell bait 0, järgmise üks on bait 8
ja siis 16 ja siis 24 jne.
Nii et kui kõik stringid on sama pikkusega, saab hüpata ümber palju tõhusamalt.
Nii et võib olla kasu nii jõudluse,
kuid tavaliselt sul ei ole luksus, teades ette,
nii varchar on tee minna.
Siin on veel üks detail, et isegi Facebookis sattus lõpuks.
Ints on suur, ja me justkui neid kasutada vaikimisi igal ajal tahame arv,
aga see on ainult 32 bitti.
>> Ja kuigi Facebook ei ole päris 4000000000 kasutajad nüüd,
seal on kindlasti mõned inimesed seal mitme kontoga
või kontodel, mis on avatud ja seejärel suletakse,
ja nii Facebook ise usun, paar aastat tagasi oli ülemineku int
et, nagu on tabavalt nimetatakse, BIGINT, mis on vaid 64 bitti asemel.
Nii et ka see on disain otsuse.
Sa oleks hämmastavalt õnnelik, kui oma lõpliku projekti lülitab käivitamisel
on 4000000000 ja 1 kasutajad, anda või võtta,
mille puhul kasutatakse ints võiks olla veidi lühinägelik.
Aga tegelikult oma kasutajate tabel on ilmselt trahvi ints.
Aga midagi pset 7, nagu oma ajaloo tabel,
peate võib-olla tuhandeid, miljoneid kasutajaid kui te areneda etrade.com.
Nii et arvestades ei pruugi teil olla rohkem kui 4 miljardit kasutajat,
Nende kasutajate sul on võib-olla rohkem kui 4 miljardit tehingut aja jooksul -
ostab ja müüb ja asju oma ajalugu.
Nii et kui sul ennetada - jällegi, need on head probleemid on, kui sul on nii palju andmeid -
kui sa ennetada andmed üle suurust int,
läheb koos midagi BIGINT on suund ei piisavalt sageli vastu disainerid
sest inimesed näitaja, et ei kavatse olla probleem,
aga see on seda lihtne valida midagi suurem.
Decimal me kasutame sisse pset 7, mis määratleb fikseeritud täpsus
nii saab vältida puudutavates küsimustes ujukite ja kahekohalised ja reaalarvud jms.
>> Ja siis on mõned teised valdkonnad siin. Me laine meie kätes neid mingil määral.
Aga kuupäevade, kellaaegade kõigil on ettenähtud vormis MySQL,
ja ära hoida kuupäevadel kuupäevad ja ei varchars
tähendab, et andmebaasi saab tegelikult vormindada neid erinevates formaatides,
kas USA formaadis või Euroopa formaadis vms - aga sa tahad seda -
palju tõhusamalt kui ta oli vaid mõned üldised varchar.
Ja siis seal on mõned muud binaarne, varbinary, plekid.
Need on binaarne suuremõõtmeliste esemete, samuti saate salvestada binaarandmeid
samuti geomeetriline andmeid andmebaasis.
Aga meile me tavaliselt hoolivad ints ja varchars jms.
Lőpetame seda näiteks maja.
Maja ma omavoliliselt öelda on 255 tähemärki.
Siis vaikeväärtus me võiks seda teha.
Võiksime vaikimisi jätab kõik Mather House, näiteks.
See, kuidas me saaksime täpsustada, et andmebaas
tuleks tagada, et keegi on alati väärtus. Aga ma jätan selle olema.
Tegelikult inimestele, kes elavad väljaspool õppeasutuse ja mitte majas,
äkki ma tegelikult tahan täpsustada, et vaikimisi väärtust maja on NULL,
ja siis ma pean selle kasti ja ütle andmebaasi see on okei, kui kasutaja majas on NULL.
>> Jällegi, see on teine ​​kaitsemehhanism saab kehtestada
nii et sa ei pea isegi pane see oma PHP koodi tingimata.
Andmebaasis tagab, et asjad on või ei ole NULL.
Ja siis viimaks, atribuudid.
Ükski neist pole tegelikult oluline.
Binary, allkirjastamata - ükski neist on seotud varchar.
Indeks.
Kas keegi teab või mäletan või on oletada, milline indeks on
midagi nagu maja?
Ka see on tegelikult oluline ja suhteliselt lihtne disain otsuse.
Neile, kes pole veel seda näinud, reedel rääkisime põgusalt primaarseid võtmeid.
Andmebaasi tabeli, primaarvõti on vallas või veerg
mis identifitseerib read tabelis.
Nii käesolevas tabelis meil sümbolid, meil on nimed ja e-kirju.
Milline neist on parim kandidaat olema primaarvõti,
kelle ülesandeks on üheselt identifitseerida rida?
Ilmselt ID.
Väidetavalt me ​​võiks ka kasutada, mida küll?
Äkki võiks kasutada e-posti, sest teoreetiliselt on see ainulaadne
kui inimesed jagavad e-posti kontosid.
Kuid reaalsus on see, et kui te kasutate numbriline ID nagu 1234,
see on ainult 32 bitti, samas e-posti aadress oleks see palju baite või see palju baite.
Nii tõhususe kordumatute tunnuste,
see kipub olema hea tava lihtsalt kasutada int
isegi kui teil on mõned string kandidaat et sa peaksid arvatavasti kasutada.
>> Sest midagi maja, see ei peaks olema primaarvõti
sest siis ainult 1 inimene võib elada Ema ja 1 inimesel Currieri jms.
Samuti ei tohiks see olla unikaalne.
Vahe alg-ja ainulaadne on see, et juhul, kui meie praegune tabel,
ID oleks esmane, kuid kiri ei ole esmane põhjusel me lihtsalt mainitud -
Performance - kuid see peaks siiski olema unikaalne.
Nii saate siiski jõustada unikaalsus tegemata nõude
et see on super oluline primaarväli.
Aga see on väga kasulik: Register.
Kui sa tead juba ette oma lõpliku projekti, pset 7, või üldiselt
et selles valdkonnas maja saab olema midagi, mida otsida palju
kasutades valige märksõna või midagi muud,
siis saate ennatlikult öelda andmebaas töötada oma võlu
ja veenduge, et see tekitab mällu tahes väljamõeldud andmestruktuurid vaja
kiirendada otsingud põhineb maja.
Võib-olla ta kasutab hash tabelit, äkki ta kasutab seotud nimekirja.
Tegelikult see kipub kasutama puu, sageli struktuuri, mida nimetatakse B-tree -
ei kahendpuu kuid B-tree - mis on väga lai puu
et võite näha klassi nagu CS124, andmestruktuuride klass.
Aga lühidalt öeldes, sa ei pea muretsema, et kui kasutate Smart andmebaasi tarkvara.
Sa võid öelda seda, "Index selles valdkonnas nii et ma ei otsi seda tõhusamalt."
>> Kui jätate selle välja ja sa püüad otsida igaüks andmebaasis kes elab Mather,
see vaimule lineaarne otsing.
Ja kui sul on 6000 üliõpilastele, kõik elavad mõnes majas,
sa lähed otsida kogu tabelist leida Matherites,
arvestades, et kui sa ütled indeks, loodetavasti see midagi lähedal logaritmiline otsing
leida seda tüüpi õpilased.
See on lihtsalt vaba funktsioon sisse lülitada,
kuigi see ei tulnud hinnaga mõned palju ruumi.
Lõpuks auto-juurdekasvu, see AI valdkonnas,
mis tähendab lihtsalt, kui see on int ja te ei taha hoolitseda juurdekasvu ise
iga kord on uus kasutaja, kontrollige,
ja iga kasutaja, et saab lisada automaatselt saada uus ID.
Olgem nuppu Salvesta ja nüüd lähme norima selle disain.
Kui ma minema Sirvi, teate, et nii Mike ja minu maja on NULL.
Oskan kasutada phpMyAdmin muuta seda käsitsi.
Ma ei saa minna siia ja kirjuta Ema ja vajuta Enter,
ja nüüd teade tabelis on erinev.
Aga märkate ma võiks teha ka midagi muud.
Davidi ID on 1, seega phpMyAdmin jälle on vaid administratiivne vahend;
see ei ole midagi oma kasutajate kunagi näha.
Nii et kui ma selle asemel nuppu SQL sakk üles üles -
ja jälle, pset 7 tutvustab teile rohkem nendele päringutele -
Võin käsitsi käivitada SQL Structured Query Language käsk
UPDATE kasutajad SET maja = "Pfoho", kus id = 1.
Need SQL päringuid on kenasti piisavalt, päris loetav vasakult paremale.
Uuenda kasutajate tabelis, määrata Väli maja Pfoho
kus kasutaja ID on 1.
Või ma võiks isegi teha, kus e = 'malan@harvard.edu ".
Nii kaua, kui mis identifitseerib mind, et teeks samuti.
Aga ID kipub olema võimsamat, nii teeme seda.
Olgem nuppu Mine. Okei, lecture.users ei eksisteeri. Milline on minu viga?
Mis on tabelis tegelikult nimetatakse siin?
Seda nimetatakse õpilased lihtsalt sellepärast, et me tegime siin üleval vasakus ülaservas.
Seda nimetatakse õpilased, mitte kasutajatele. Nii nuppu Mine nüüd.
1 rida mõjutanud. Päring võttis aega 0,01 sekundit.
Kui ma vajutan Sirvi nüüd, nüüd Malan elab Pfoho.
Nii et see on teine ​​maitse SQL, kuid pset sõelub natuke rohkem sellest.
>> Seal on loll otsus, mida ma olen juba siin.
Ma väidan, et see andmebaasi disain on ebaefektiivne
sest rohkem inimesi lisan õpilastele tabel,
rohkem meist ma alustada lisades, rohkem TF ma alustada lisades,
me kavatseme alustada näha, mida koondamised tabelis?
>> Jah. [Üliõpilane] Nähes, et see on õpilased, me kasutame sama [kuuldamatu]
Sama - Õigus, täpselt.
Nii et kui 400 inimest elavad Ema, võta või jäta,
lõpuks see tabel läheb on 400 rida, et öelda "Ema", "Ema"
"Ema", "Ema", "Ema".
Me raiskame kõik need baidid, ja seal on paar takeaways seal.
1, seal on hull nurga juhul, kui kui keegi maksab palju raha
ja sõnastatakse ümber Ema, meil muuta kogu meie andmebaasi tabelisse.
See ei juhtu tihti, kuigi Pfoho oli kord kutsunud Põhja Maja 15 aastat tagasi,
nii see juhtub. Aga see pole veel kõik, et veenvad.
Selgem kui nurgas sarnast juhtumit vaja uuendada andmeid lahtiselt
jaoks andmebaasi miks sa ladustamiseks MATHER uuesti ja uuesti ja uuesti ja uuesti?
See on palju sümboleid, 6 tähemärki.
Kas me isegi parem, eriti Pforzheimer?
Kindlasti me saame teha paremini kui palju märke.
Miks mitte lihtsalt siduda kordumatu tunnus iga maja
ja poodi, et iga kasutaja? Nii et proovime seda.
Selle asemel, et lihtsalt kasutada õpilaste tabelit, lubage mul minna oma loengu andmebaas siin üleval vasakul.
Teade siin öeldakse Loo tabel.
Lubage mul luua uus tabel nimega maju.
Veergude arvu saab olema 2. Enter.
Nüüd on mul 2 välja.
Ma nimetan seda nime, ja see saab olema varchar pikkuse 255,
>> aga see on päris meelevaldne. Las ma panen selle siia alla kokkuleppeliselt.
Nii pannakse ID siin. Anname igale majale kordumatu tunnus.
Anname iga maja nimi.
Olgem täpsustada, et identifikaatoriks allkirjastamata lihtsalt kokkuleppeliselt kasutada ainult positiivsed arvud.
Lähme edasi ja annan selle auto juurdekasvu valdkonnas praegu.
Ja me vajame midagi muud?
Lähme edasi ja klõpsake nuppu Salvesta.
Nüüd on mul teises tabelis.
Teade nagu kõrvale see on veidi segasena SQL käsk
et kui oleks pidanud kirjutama käsitsi, kui ei kasuta haldusakti tööriista nagu phpMyAdmin.
Nii et teine ​​põhjus, miks me seda kasutada.
See on imeliselt kasulik omamoodi pedagoogiliselt sest võite klõpsata ümber
ja nuputada, kuidas asjad töötavad, lihtsalt kopeerida ja kleepida, mida phpMyAdmin tegi.
Aga CREATE TABLE käsuga, mida oli lihtsalt täita, ja siin on mu laual.
Lubage mul minna nüüd ja kasutada toores SQL asemel lihtsustavad klõpsates menüü Lisa jaotises.
Las ma ei INSERT INTO majad,
ja ma lähen ütlen nime maja läheb on väärtus "Ema".
Nii see on. See süntaks on veidi segasena.
See on nimi väljad tahame lisada.
Need on väärtused, mida me tahame lisada nimetatud valdkondades. Lubage mul nuppu Mine.
1 rida sisestatud võttis aega 0,02 sekundit. Lubage mul klõpsake Sirvi nüüd.
>> Teade kui ma nuppu Sirvi, seal on Mather, kelle ID on oma automaatika ja number 1.
Las ma teen veel ühe. Lubage mul minna SQL sakk.
INSERT INTO maju. Nimi maja läheb on väärtus Pfoho ja nii edasi.
Mine. Ja ma ei saa seda enam teha uuesti ja uuesti ja uuesti.
Või kui sa igavleda kasutades phpMyAdmin, võid lihtsalt kasutada menüü Lisa jaotises
ja ei pea sisestama toores SQL.
Sa võid paugu välja kiiremini, trükkides trükimasinal, näiteks Currieri, Enter,
ja nüüd, kui meil klõpsake Sirvi, seal on Currieri ID-3.
Nii et see on see, mida me mõtleme auto-juurdekasvu.
Aga nüüd on meil määrata midagi õpilased.
Õpilaste mida peaks andmete tüüpi maja valdkonnas praegu olla?
See peaks olema int, eks?
Nii et eesmärk siin on tegurdada, muidu tuntud normaliseerida, tabelid
nii et me ei salvesta informatsiooni liigselt üheski minu tabelid.
Ja jälle tee me olime siin kavatseb öelda Ema, Ema,
Ema, Ema, Pfoho, Pfoho, Pfoho, Pfoho, mis on väga üleliigne
seisukohalt raiskamine tähemärki.
Nii et lubage mul minna ja muuta, kui klõpsate struktuur,
ja las ma minna ja vaadata välja maja valdkonnas nuppu Muuda,
ja nüüd ma lähen selle muutmiseks olema int.
255 ei ole enam oluline.
Lubage mul minna ja öelda, et on hea, kui see on ikka NULL. Salvesta.
Nüüd tabelis õpilased on muudetud edukalt,
ja märgata taas maja on int.
Nagu kõrvale, ignoreerida number sulgudes, kui on tegemist täisarvudega.
>> See on pärand põhjustel.
Juba järgmisel päeval, kui sa ei ole GUIs, siis selle asemel oli käsurea keskkond,
10 ja 11 täpsustatud, kui palju märke, mida peaks näitama
Terminali aknasse tegelikult kuvada väljad.
See on midagi pistmist natuke pikkuse tegelik valdkonnas, nii me lihtsalt ignoreerida, et nüüd.
Nüüd ma pean minema tabelis.
Ja kui Taavet elab Ema, maja ei tohiks olla 0,
mis on vaikimisi int lähim väärtus on NULL.
Ta peaks elama maja 1.
Olgem omavoliliselt öelda, et Mike elab Pfoho, nii maja number 2.
Nüüd on mu laua paistab pisut rohkem segasena.
Aga pean tõhusust.
Ma olen nüüd kasutades ainult 32 bitti tuvastada maja,
mis tähendab, seal on ainult 1 kanooniline määratlus minu maja Ema ja Pfoho
ja see on majades tabelis.
Nii et kui ma tahan nüüd ühineks neid tabeleid, mõtle seda nii.
Siin on mul õpilased lauda ja parempoolne seal on need numbrid, 1 ja 2.
1 on Mather, 2 on Pfoho.
Meil on samad numbrid selles teises tabelis, mida nimetatakse majad,
1 ja 2 ja 3 jaoks need 3 maja.
Mida me nüüd tahame teha, on olla võime kood, PHP ja SQL,
sorteerida ning ühineks neid tabeleid, kus juhul, kui need on õpilased ja need on majad,
me tahame kuidagi neid omavahel kombineerida nii, et 1 read kuni 1
2 rida kuni 2, ja et me saaksime aru saada, kus David
ja kus Mike ja kus kõik elavad.
Selleks on meil võimalik täita SQL päring nagu pärast.
SELECT * FROM õpilased LIITU maja -
Ja nüüd, millised väljad tahame ühineda?
Nii students.house = houses.id.
>> Vähe segasena, kuid see osa tähendab sõna otseses mõttes luua uus ajutine tabel
see on ühinemise tulemusena õpilased ja maju.
Ja kuidas soovite ühendada tippude mu sõrmed siin?
Määra õpilaste maja valdkonnas võrdne maja "ID valdkonnas.
Ja kui ma nüüd nuppu Mine, ma saan tagasi täpselt, mida lootsin.
David on Mather, Mike on Pfoho, ja ma ka näha unikaalsete identifikaatorite.
Aga point on nüüd mul on täielik tabel.
Ja nii Buffee siin pset 7 või tõesti lõpliku projekti:
Kui leiate, et olete ladustamiseks iga tükk info liigselt,
kas see on maja, võibolla on see linn, riik, ja ZIP
kus ZIP saab tavaliselt, kuid mitte alati kasutada kordumatu tunnus,
ei lähe läbi kasutamise vaimselt ja siis midagi phpMyAdmin
Faktooringu, et ühiste andmete tõttu eriti kui teie koduleheküljel saab rohkem ka kasutatakse
ja üha populaarsemaks, on see, kuidas sa veenduge, et kõik on super kiire,
andes andmebaasi nii palju vihjeid selle ainulaadsust kui võimalik.
See oli palju.
Kas on küsimusi? Hea küll. Võtame 5-minutilise vaheaja seal ja koondada.
Hea küll.
Järgnev on näide, mida kasutati mõned aastad tagasi kui võtsin CS161,
mis on operatsioonisüsteemide klassi kolledži
mis on tuntud hämmastav, kuid hull töö mahtu,
ja see keskendub tõesti mõnede madala probleeme, mis tekivad operatsioonisüsteemide
ja ka isegi maailmas andmebaase.
>> Lugu, mis öeldi mu professor, Margo Seltzer, et aasta oli järgmine.
Oletame, et teil on vähe Dorm külmik teile ja teie toakaaslane
ja nii sa tõesti meeldib piim.
Nii et te tulete klassi üks päev, su toakaaslane ei ole veel olemas,
avate külmik, ja sa mõistad, "Oh kurat, me oleme väljas piima."
Nii et sa sulgeda külmik, jalutad üle tänava CVS
ja saada üha pikad read ostma piima CVS.
Vahepeal oma toakaaslase jõuab koju oma klassi,
tuleb tuppa, avab külmkapi tõesti tahavad mõned piima,
avab külmkapi ja "Kurat, ei piima."
Nii ta sulgeb külmik, kõnnib uksest välja ja läheb Abp
või mujal kui CVS kuhu ei kavatse juhtuma üksteist
minna saaksin piima.
Muidugi paar minutit hiljem, nii saad koju
ja nüüd on kaks korda nii palju piima, kui sa tegelikult tahtsid.
Ja kui piima, nüüd siis läheb minema halb, sest sulle meeldib piim
aga sa tõesti ei meeldi piim, nii et nüüd teil on liiga palju piima, nii see läheb hapuks.
See on kohutav, kohutav olukord.
Mis oleks lahendanud selle vasturääkivus, kui sa olid esimene toakaaslane koju? Jah.
[Üliõpilane] Sa oleks pidanud jättis teate. [Naer]
Hea. Sa oleks pidanud jättis teate.
Sa oleks pidanud Post-it märkmepaberi või nagu öeldes: "Möödas piima,"
ja siis teie toakaaslane kontseptuaalselt oleks lukustades tegelikult teeme seda.
Või võite minna 1 samm edasi.
Võid sõna otseses mõttes lukustada külmkapp koos mingi tabalukk,
ja nüüd teie toakaaslane on sõna otseses mõttes lukustades külmkapp.
Kui me üldistada tagasi programmeerimine,
saate peaaegu mõelda külmik kui mingi muutuja või struct,
mingi konteiner teadmiseks.
Probleem põhimõtteliselt on selles, et te mõlemad lubati kontrollida
või lugeda riigi andmete struktuur,
aga sa vaatasid seda eri aegadel ja veel nii tegite otsuse
põhineb olukorda maailmas nendel erinevatel aegadel.
Nii oli teile lukustatud külmkapp, siis oleks vähemalt vältida teie toakaaslane
alates on olnud võimalik kontrollida olukorda maailmas,
nii, et ta ei saanud teha sama otsus.
Nii andmebaase, nagu selgub, on see probleem pidevalt.
>> Vaatame, kas me saame ehitada stsenaarium.
Oletame, et sa oled mingi paha poiss ja te lähete Bank of America
või mõnda muud kohad ruut, et on paar sularahaautomaati kõrvuti,
ja millegipärast sa arvasin, kuidas eksemplaris Pangakaart - ole nii raske.
See on lihtsalt magnetriba.
Ja mis sa tahad proovida teha, on mängida seda mängu
mille paned 1 kaart 1 masin, teine ​​kaart teise masina,
ja sa sisuliselt tahan proovida raha välja üheaegselt,
sest kujutan ette, et lugu läheb järgmine.
Masina vasakul võtab oma kaardi ja PIN-koodi,
ja siis sa ütled: "Anna mulle 100 $."
ATM on programmeeritud kõigepealt tegema valige oma andmebaasis või võrdväärne -
mis iganes andmebaasi see kasutab - et näha kas see kasutaja on vähemalt $ 100 oma kontole?
Kui jah, siis sülitama $ 100 ja lahutada 100 $ oma tasakaalu.
Aga muidugi, kui seal on mitu masinat siit või mitmel moel kontrollimise
riik sellest maailmast, panga võlvkelder, et näha, kui palju raha sul on,
arvan, et lihtsalt juhuslikult masina vasakul ja paremal
nii küsida, et küsimus on umbes sama ajahetke.
>> Ja see saab kindlasti juhtuda. Sularahaautomaadid on arvutid nendel päevadel.
Nii et kui masin vasakul ütleb: "Jah, teil on vähemalt $ 100,"
Vahepeal masin paremal ütleb: "Jah, teil on vähemalt $ 100,"
siis mõlemad jätkata lõpetada oma saadete ja tegelikult sülitama $ 100
ja ütlevad: "Varem teil oli 200 $."
"Lubage mul uuendada muutuja nüüd 100 $ jäänud arvesse."
Aga kui mõlemad on kontrollida oma kontojääki ja leidis, et see on $ 200
ja nad mõlemad siis teha matemaatika ja öelda, 200-100,
masinad on potentsiaalselt sülitama 2 100 $ arveid iga masin,
kuid nad pole ainult uuendanud oma summa saldo olema 100 $.
Teisisõnu, sa oled välja võtta $ 200, kuid kuna nad kontrollisid olukorda maailmas
üheaegselt ja seejärel teha otsuse aluseks seda väärtust,
nad ei pruugi teha matemaatika lõppkokkuvõttes õigesti.
Nii et panga olukord liiga tõesti on mingi töösulg
nii et niipea, kui olete märkinud riigi mõne muutuja
see on tõesti oluline, nagu teie kontoseisu
ei lase kellelgi teisel teha otsuseid, mis põhinevad et kuni oled valmis teeb oma asja,
kus antud juhul olete ATM vasakul.
Lukustage kõik teisedki välja.
Võite tegelikult saavutada seda efekti paari erinevalt.
>> Lihtsaim viis MySQL on rida SQL mis meie Teile andsime
aastal lahendamist spetsifikatsioon, mis näeb välja täpselt nagu see.
INSERT INTO tabel - mis iganes seda nimetatakse - id, sümbol, ja osa, aktsiate arv,
Järgmised väärtused, näiteks.
Kui te ei ole lugenud spec veel, see on näide kaasates kuidas sa minna
osta 10 aktsiat seda penny stock president Skroob,
kelle kasutajatunnus juhtub olema number 7?
See ütleb INSERT INTO tabel järgmise id, sümbol ja aktsiate arv
7. "DVN.V", ja 10.
Aga - Aga, aga, aga - teine ​​rida on oluline.
ON korduv võti UPDATE aktsiate = aktsiat + VALUES (aktsiad).
Nii et täiesti segasena suunatud esimesel pilgul.
Kuid tõsiasi, et see SQL päring, kuigi see wrapid peale 2 rida,
on 1 pikk päringu, see tähendab, et see on aatomi
selles mõttes, et selle päringu kas täidetakse kõik koos või üldse mitte.
Ja definitsiooni järgi MySQL, see on, kuidas nad ellu selle päringu.
See on definitsiooni kohaselt manuaal tagatud täita kõik korraga või üldse mitte.
Motivatsiooni see on järgmine.
Kui sel juhul sa üritad osta 10 aktsiaid,
see on selline sama lugu nagu piim, see on selline sama lugu nagu ATM.
>> Kui teete vea, et nad ei kasuta seda süntaksit
kuid selle asemel valida andmebaasist näha, kuidas paljud aktsiad see penny stock
ei president Skroob on, ja arvan, et ta on 10 aktsiat,
ja siis mõned sekundi murdosa hiljem sa siis teha UPDATE avaldus,
mis on teise avalduse SQL, mis ütleb minna ja lisada veel 10 aktsiat
tema praegune 10, nii et ideaalis kogusumma on 20,
Probleem on, sest tänapäeva andmebaasi süsteeme ja kuna tänapäeva arvutid
teil on mitu protsessorit, mitme protsessorituuma -
teisisõnu, arvutid võib sõna otseses mõttes tegema mitu asja korraga -
ei ole mingit garantiid, et teie SELECT ja oma UPDATE sel juhul
hakkavad juhtuma seljad.
Nii halb stsenaarium oleks sa SELECT
näha, kuidas paljud aktsiad see penny stock ei Skroob on,
ja siis lihtsalt juhuslikult teise andmebaasipäring täidetakse -
võibolla selle Skroob teises brauseri aknas üritab osta 10 aktsiat
teises aknas üldse palju nagu ATM -
ja arvan, et teine ​​päring satub vahel SELECT ja UPDATE.
See võiks olla nii, et Skroob nüüd kaotab mõned aktsiate arv
sest teine ​​protsess on kontrolli riik oma maailma,
või ta saab rohkem aktsiaid kui ta peaks olema.
Me ei hakka üksikasju täpselt neid eriti lugu read oleks,
kuid küsimus on, kui sa pead kontrollima muutujate väärtus ja seejärel teha otsus,
kui seal on oht keegi teine ​​teeb midagi vahel need 2 avaldused,
nagu võib juhtuda mitmeprotsessoriliste süsteeme, mitmesoonelised süsteemid,
arvutid, mis suudavad teha mitut asja korraga, halbu asju võib juhtuda
nagu pangakontod debiteeritakse valesti, ostes kaks korda nii palju piima,
või antud juhul vale aktsiate arv.
Aga seal on lihtsam viis mõelda selle üle.
>> Selgub, et SQL toetab ka, kui teil konfigureerida oma tabeli õigesti,
midagi, mida nimetatakse tehingud, mis ma väidan on tegelikult isegi lihtsam mõista
kui see, aga see pole 1-liner, nii et see on tegelikult natuke rohkem kaasatud.
Seal on sõna otseses mõttes avalduse SQL nimega START tehinguga.
Just nagu seal on SELECT, UPDATE, INSERT, DELETE ning ühineda ja hunnik teisi,
on märksõnad nagu START tehinguga.
Ja mida sa siis teha seoses pset 7 -
sa ei pea seda tegema pset 7; ta on selgesõnaliselt loobunud kuna ei vaja,
kuid lõplik projekte võib olla kasulik -
kui sa nimetad päringu START tehingu ja siis teine ​​päring
ja siis teine ​​päring ja siis teine, teine, ja teine,
neid päringuid tegelikult ei või läbi viia enne helistamist SQL toime panna
kus punkt, kas see on 2 avaldusi või 20 avaldused, nad kõik hukati korraga,
mis tähendab, keegi teine ​​ei saa kogemata liiga palju osta piima või deebet liiga palju raha
või osta liiga palju aktsiaid, kuna kõik Teie päringuid täidab
seljad et seljad.
Ja see on super oluline, eriti kui sa teed midagi sellist.
See on suvaline näide, mis ütleb, olgem uuendada pangakonto
seades tasakaalu võrdne tasakaal - $ 1000, kus pangakonto number on 2.
Ja siis teine ​​väide on nüüd lähme hoiule, et $ 1000
võetud kellegi teise pangakontole, mille kontonumber on 1.
>> Teisisõnu, see on suurepärane näide sellest, kus te soovite veenduda
et nii need avaldused juhtub või üldse mitte
sest muidu klient ei kavatse saada kruvitud
ja sa lähed võtta oma raha ja ei hoiule mujale,
või pank ei hakka kruvitud, kus sa lähed hoiule raha
kuid tegelikult ei lahutama selle kasutaja konto.
Nii et sa tahad, et nad mõlemad tegutsevad koos.
Seega siseneb maailma tehingud.
Nii et see on midagi hoida tagasi teie arvates,
mitte niivõrd selleks, et lihtsalt lõplik projekt,
aga kui sa tahad teha oma lõpliku projekti kuhugi,
kui soovite alustada mõne firma ümber,
kui sa tahad, et lahendada mõned üliõpilased probleem ülikoolilinnakus
ja tegelikult on elada, aktiivne kodulehel, need on omamoodi peen vigu, mis võivad tekkida
kui sa ei ole päris läbi mõelda, mis võib juhtuda, kui 2 inimest
Proovite kasutada oma kodulehel sõnalt sama ajahetke,
kusjuures nende küsimustele muidu saad põimunud.
>> Valmis mõned JavaScript, teaser selle?
See on meie viimane keel poolaastal. Hea küll.
Õnneks JavaScript tundub väga, väga, väga sarnane 2 keelt, C ja PHP,
me oleme seni teinud.
Pole JavaScript pset 7, aga see on uskumatult kasulik vahend
kui on tegemist tehes veebipõhine lõpliku projekti või tõesti ainult veebi programmeerimine üldisemalt.
Nii kiire ülevaate midagi, mida nimetatakse DOM.
Siin on super lihtne veebileht, mis tõesti lihtsalt ütleb tere, maailm
nii pealkirjas ja keha.
Nagu taandus on teinud ettepaneku mõnda aega,
on tõepoolest hierarhia veebilehtedele.
Ma võin joonistada see sama HTML koodi nagu puu,
Mõeldes tagasi meie arutelude andmestruktuurid C, järgmiselt.
Mul on mõned erilised Juursõlme nimega dokument sõlme,
ja me näeme analoog sellest JavaScript hetk.
Esimene laps ja ainus laps, et antud juhul on HTML teegid.
Pole mingit otsest kaardistamine DOCTYPE.
See on eriline asi, et me peaks lihtsalt ignoreerida, kui tegemist on käesoleva DOM,
Selle Document Object Model puust.
Pange tähele, et HTML teegid, mis ma olen kujutatud suvaliselt nagu ristkülik,
on 2 last: pea ja keha.
>> Need on samamoodi joonistada ristkülik.
On tähendusrikas piltlikult, et pea on vasakule keha.
Mõju on, et pea tuleb esmalt puus.
Nii et seal on tegelikult käsivad puu kui teha seda niimoodi,
kuigi kuju ja tühi-tähi on meelevaldsed.
Head vahepeal on ühe lapse nimega pealkiri,
ja pealkiri on tegelikult tema enda laps, kes on "Hello, world",
mis ma teadlikult juhtis nagu ovaalne siin teha seda veidi erinev ristkülik.
Need ruudud on elemendid, samas tere, maailm on tõesti teksti sõlme.
Nii et see on sõlme puu, aga see on teist tüüpi sõlme
nii et ma joonistasin seda omavoliliselt erinevalt.
Samamoodi ei keha on laps nimega hello, world samuti,
nii erinevad sõlme, kuigi nad juhuslikult sama teksti,
aga ma olen ära, kasutades sama kuju. Nii et keda see huvitab?
Noh, mis on tore umbes HTML on, et see on see hierarhiline olemus.
Ja mis on tore JavaScript ja eelkõige raamatukogudel, mis on vabalt saadaval
ja populaarne nagu jQuery, saate navigeerida puu struktuuri nii hämmastavalt lihtne.
Kõiki asju me tegime C viiteid ja liiklevad puud ja recursing kohta sõlmede
vasak lapse õigus laps, äkki saame omamoodi enesestmõistetavaks
nagu oleks hämmastavalt valgustav kui mitte natuke masendav
kuid mitte pooltki tõhus viis edasi minna programmeerimine.
Ja nii nende kõrgema taseme keelte nagu JavaScript
me suutma liikuda selle puu palju rohkem intuitiivselt.
>> Ja tõepoolest süntaks saab olema üsna tuttav.
Kui sa oled kunagi näinud JavaScript enne, see on tõesti kena viide
alates Mozilla inimesed, inimesed, kes teevad Firefox
nii et ärge vabalt sirvida, et endale sobival ajal.
Mis leiad - ja need slaidid on identne sellega, mida me kasutada teisel päeval -
Samamoodi peamine on läinud.
Nii et kui sa kirjutad programmi JavaScript ei ole peamine funktsioon.
Sa lihtsalt hakake kirjutama koodi.
Aga võti vahet JavaScript ja C ja PHP
on see, et arvestades, C ja PHP seni on ellu viidud serveripoolne
mida seade antud juhul või üldisemalt server,
JavaScript mille konstruktsioon on tavaliselt täide brauserit.
Teisisõnu, sa võiksid kirjutada JavaScripti koodi, kui me parasjagu,
serveris on seadmega, kuid teil lisada see vahel oma HTML hulgas oma CSS,
hulgas oma GIF ja oma PNGs ja oma JPEG
nii et kui kasutaja külastab oma veebilehel, kui te kasutate JavaScript,
et JavaScript kood pärineb serveri brauser,
ja see on brauser, mis tegelikult täidab selle.
Nii et see on mõtestatud mõju isegi intellektuaalne omand.
See on selline tobe, et isegi mõelda kaitsta oma IP kui tegemist JavaScripti koodi
sest iseloomust keel see läheb täide tavaliselt brauseri poolel.
>> Võite varjuta seda, mis tähendab, et saate muuta see otsima hull ja kole
ilma tühik, jube muutuja nimed, et oleks raskem inimesi varastada teie IP,
kuid põhiline on see, et see täidetakse brauseri poolel.
Isegi kui kõrvale JavaScript saab serveripoolne,
Kõige tavalisem juhul praegu on veel brauseri.
Ja siin on kuidas see välja näeb. Siin on kui-else if-muidu ehitada nagu C, nagu PHP.
Siin on Boole'i ​​avaldis, kui sa "või" 2 asja kokku.
Siin on siis "ja" 2 asja kokku.
Siin on lüliti avaldus, mis on sarnane PHP
aastal, et saate sisse lülitada erinevaid väärtusi.
Loops sarnaselt on ette silmuseid siin, mis on üles ehitatud samamoodi ka see, mida me oleme näinud.
Kuigi silmad; meil teha samas silmuseid.
Muutujad, kunagi nii veidi erinev.
Sa deklareerida muutujaid nagu sa PHP ja C
kuid sarnaselt on JavaScript nõrgalt kirjutatud.
Te ei täpsusta int või veepinnal või nööri või midagi sellist tavaliselt.
Saate määrata var.
Sa ei pea täpsustama var, kuid see mõjutab kui te seda ei tee.
Tavaliselt, kui jätate var, kogemata luua globaalne muutuja asemel kohalik.
Nii et andke mulle ettepaneku, et sa peaaegu alati öelda var ja siis muutuja nimi.
See ei ole liik, see on lihtsalt var muutuja.
See oleks näiteks, kas see on 123 või "hello, world".
Massiivid on olemas ja süntaktiliselt sarnane PHP.
Ma ütlen var numbrid ja siis ma kasutan nurksulgudes uuesti kuulutada muutuja
mille tüüp on massiiv, mis on need konkreetsed numbrid selle eraldatud komadega.
Ja siis lõpuks, see on ainus, mis tõesti muutunud.
Tuletame meelde, et PHP oleksime ellu assotsiatiivne massiiv üliõpilane
nagu Zamyla et võiks näeb välja selline, kus muutuja on kutsutud õpilane.
Nurksulgudes tähendab siin tuleb massiivi.
>> Asjaolu, et ma ei kasuta numbrilisi indekseid kuid stringid - id, maja, ja nime -
tähendab, et see on assotsiatiivne massiiv,
ja need nooled võrdusmärgi ja nurgelised sulg
tähendab, et oluline on "id", väärtus on 1;
Oluline on "maja" on väärtus Winthrop Maja;
Oluline on "nimi", väärtus on Zamyla Chan.
Nii et seal on 3 võtit sees see assotsiatiivne massiiv, millest igaühel on oma väärtus.
Me oleme näinud, et pset 7, või sa varsti tuleb aga JavaScript sama mõte,
kuid see saab välja nägema selline.
Nii var õpilane - no dollari märk ja ei mainita tüüp ikka vaid var -
võrdne ja avage looksulg sest JavaScript, kui sul on võti väärtus paare,
sa tegelikult kasutada midagi, mida nimetatakse objekti.
Ja neile, kes ei võta APC vms võiks meenutada objektid Java
või sarnast keelt.
JavaScript ei ole Java, kõigepealt.
See oli tahtlik design otsus aastat tagasi koputama välja midagi, mis oli populaarne,
oma nime, kuigi see ei ole põhiline seoses Java ise.
JavaScript on objektid ja nende loomise teel lokkis traksidega märke.
Objektid JavaScript on päris palju võrdub assotsiatiivse massiivi PHP
kui tegemist on andmete salvestamiseks sees neist.
>> Kuid veelgi võimsalt JavaScript saate seostada väga lihtsalt funktsioonid
sees objekt ja kuigi seda saab teha ka teistes keeltes,
see on üsna levinud paradigma, nagu me näeme.
Lühidalt, see objekt esindab õpilase, kes on eriti Zamyla,
ja see on sarnane kontseptuaalselt, lihtsalt süntaktiliselt erineb see.
Olgem tegelikult kasutavad JavaScripti fail.
Tuleb välja, seal on skript tag.
Me oleme näinud stiilis tag ja me oleme näinud teiste HTML teeke.
Script tag tegelikult leidub seal JavaScripti koodi.
Lubage mul minna seadet, kus meil on mõned lähtekoodi eelnevalt tehtud.
Ma ei ole postitanud veel seda veebilehel, kuid ma teen seda pärast klassis.
Olgem avada see üks, blink.html.
Tagasi 1990ndatel oli sõna otseses mõttes HTML sildi vilkuv silt,
ja see oli üks imeliselt liigne silte Internetis
mille soovite külastada mõnda 1990ndate stiilis veebilehel ja alustada nähes tekst vilgub sulle meeldib see,
tulemused markii tag, mis oli tekst läheb niimoodi.
Üks väheseid kordi, kus maailm on tegelikult kokku lepitud web standard,
igaüks kõikjal tappis vilguvad tag mõned aastad tagasi.
Aga me ei saa taaselustada ta peab olema JavaScript kuna tutvustamise võimu sul on
kui saab kirjutada programmi sees veebilehele.
Esiteks olgem vahele jätta uusi asju ja keskenduda ainult vana.
>> Siin on vana kraam selles näites.
Mul on HTML teegid, pea tag, ja pealkiri tag.
Siis mul on body siin div, mis meenutavad just ristkülikukujuline jagamise leheküljel
et olen andnud unikaalne ID meelevaldselt "tervitus" kuni,
lihtsalt nii on mul võimalus üheselt sellele viitavad, et on mõned väga lihtsad tekst:
hello, world.
Nüüd las ma kerin kuni ülemise selle faili ja näha, mis on uus.
Esimene asi, mis uudist üleval on script tag,
ja sees skripti tag teade olen deklareeritud funktsioon.
Tunnistada funktsiooni JavaScript, üsna sarnane PHP,
sa sõna otseses mõttes kirjutada funktsioon siis funktsiooni nimi, sulgudes,
ja võibolla mõned argumendid, kui ta võtab tahes.
Siis mul on oma lokkis traksidega nagu tavaliselt, ja nüüd on meil mõned veidi uus kood
aga vaatame, mida see tähendab.
Nii var div, see lihtsalt tähendab mulle muutuja nimega div.
Ma võinuks see suva, aga ma tahtsin seda kutsuda div
põhjustel, mis on selge teine.
Siis selgub JavaScript - ja see on JavaScripti koodi varjatud minu veebileht -
on olemas spetsiaalne globaalne muutuja kehvasti nimega dokument.
JavaScript on tegelikult objektorienteeritud keeles.
Me ei hakka üksikasjalikult 50, mida see tähendab,
kuid nüüd tean, et objekt on päris palju nagu struct.
Nagu nägime tee tagasi, kui ühel esimesel probleem seab
kus me esitame palju teavet struct,
Samamoodi on dokumenteerida erilist struct kaasas brauser,
Kaasas suvalisel veebilehel. See ei ole midagi, mida ma loodud.
Toas käesoleva dokumendi struktuuri, kuigi te ei ole mitte ainult andmete
kuid teil ka funktsioone.
>> Ja iga kord, kui on funktsiooni sees struktuur, sees objekt,
seda nimetatakse meetodit. Aga see on sama asi.
Meetod on funktsioon, mis lihtsalt nii juhtub olema sees midagi muud.
Nii et see tähendab, et see eriline globaalse muutuja nimega dokument
on funktsioon nimega getElementById et sõna otseses mõttes ei tee seda.
See on sulle element DOM, Document Object Model puust,
kelle ID on sel juhul tervitus.
Teisisõnu, kogu selle aja veetsime kohta andmestruktuurid tuleb mängu siin.
See pilt DOM, et meil oli hetk tagasi,
kuigi leht on natuke erinev, kui mul oleks div siin pildil,
mida document.getElementById saaks naasta mind efektiivse pointer
et ristküliku puu, viidates ristküliku puu.
Nii see on, mida see tähendab, et tegelikult kõne üks neist funktsioone.
Sel juhul jälle see div. See ei ole asutuse või pealkiri.
Nii et vaatame, mida ma siis teha selle div nüüd, et mul on see sees selle muutuja nimega div.
Tuleb välja, peab olema JavaScript teil on võime näpistama CSS lehele dünaamiliselt.
Siiani on kõik CSS me oleme teinud, kuigi piiratud on stiili tunnused,
või kus mujal on meil panna CSS?
Ma nagu ärahellitatud, et üks. Stiilis tag ülaosas faili.
Või kolmas koht on olnud?
>> Väline fail, midagi. Css.
Nii et need on 3-kohaline oleme teinud CSS seni
kuid saak on meil kõva kodeeritud see kõik.
Kui te olete otsustanud kui tuvi arvesse pset 7, otsustasime enne loengut mida meie CSS oleks.
Aga kui sa tahad muuta oma CSS, tegelikult võite seda teha
kui sul on tegelik programmeerimiskeelt.
CSS, HTML - ei programmeerimiskeeli. JavaScript on.
Nii selgub, et niipea, kui olete üks neist ristkülikut puult
nimetatakse DOM, ta on ise mõned andmed sees on.
Nii div et ma lihtsalt haarasin puult on, mida me nimetame vara sees on
nimetatakse stiili ja stiili, pakub iseenesest vara kutsus nähtavus.
Ma tean, et see ainult soojaks CSS kasutusjuhend.
Tuleb välja, seal on nähtavus CSS vara, mis teeb mida ta ütleb.
See teeb midagi nähtav või mitte, nähtav või mitte.
Ja kuidas sa seda see on.
Ma palun programmiliselt kui nähtavus see div on peidetud,
Mida ma selle ära muuta? Nähtav.
Else if nähtavust see leht pole peidetud, loogiliselt ma oleks varjatud.
Mul pole aimugi, miks see on nähtav ja peidetud ja ei ole nähtav ja nähtamatu.
See oli kehv kujundus otsus mööda teed.
Aga need on tõesti vastandid CSS: nähtav ja peidetud.
Kõik see on siis tähendab see muuta CSS mu faili sisse ja välja, sisse ja välja
selle konkreetse div.
Aga jälle, see on funktsioon nimega vilguvad. Kui on vilkuv funktsioon nimega?
Tuleb välja, et seal on teine ​​eriline globaalse muutuja nimega aknas
sarnase sisuga dokument, kuid arvestades, et dokument käsitleb oma veebilehel,
nagu DOM puu, HTML saadetud serverist
aken viitab kroom ümber, aadressiribale tiitliribal
ja kõik see värk ümber oma veebilehel.
>> Ja selgub, et aken objekt on eriline funktsioon sees ta kutsus setInterval
mis teeb mida ta ütleb.
See loob intervall - antud juhul iga 500 millisekundit -
ja võtta arvan, mida läheb tegema iga 500 millisekundit?
See saab täita selle funktsiooni vilguvad.
Ja mis on tore siin on, et me oleks võinud teha seda C kuigi me kunagi ei teinud.
C temal on midagi, mida nimetatakse funktsiooni osuti, kus saab läbida funktsioonid ümber
argumentidena.
Samamoodi JavaScript Kas te kaotate nime funktsiooni teise funktsiooni.
Ja teate, mis ma teen. Ma ei tee seda.
Kui ma panen sulgudes vilguvad, see tähendaks helistada vilkuv funktsioon.
Kui ma jätta neid, mis tähendab, et siin on vilkuv funktsioon
nii et setInterval võib seda nimetada iga 500 millisekundi jooksul.
Nii et lõpptulemus, metsik, kuigi see on, on see, et kui ma minema localhost ja minna blink.html,
Mul on nüüd see juhtub ikka ja jälle.
Ja kui ma tegelikult kontrollida Element, vaatame, kas me saame seda näha.
Lubage mul Kontrollige Element, las ma kerin alla natuke,
lase mul valida elementide sisaldus üle siin, ja märgata DOM sees Chrome'i inspektor.
See on sõna otseses mõttes muutub edasi-tagasi iga 500 millisekundi jooksul.
Kui läheme meie sõber Nate,
kui te kunagi mõelnud, kuidas see töötab, samasugune mõte intervalliga,
aga Nate on tegelikult teinud väga tõhusat kasutamist värvi selles konkreetses asjas.
Mida rohkem me saame tegelikult pistmist?
Olgem avada veel üks näide ja proovida midagi
see on programmiliselt veelgi kasulikum kui teha asjad vilguvad.
Lubage mul minna meie vormid kataloog täna ja minna form0.
See oli koledaim võimaliku vormi, et ma võiks tulla,
ja las ma näitan teile kuidas see välja näeb brauseris.
>> Lubage mul minna localhost / vorme, ja see on form0.
See on super kole HTML-vormi, mis on paar valdkondades e-posti, parooli,
parool ja seejärel veidi ruut nõustuma mõned tingimused.
Saak kui ma külastan seda vormi ja ma ei taha anda sulle oma e-posti aadress,
Ma ei taha nõustuda tingimustega võibolla, ma ei kliki Registreeri
ja see laseb mind läbi niikuinii.
See juhtub esitada loll PHP fail nimega dump.php.
Kõik see on välja printida sisu $ _GET lihtsalt diagnostikaks.
See oli see, mida esitas kasutaja just nüüd.
Aga arvan, et me tegelikult tahame kinnitada kasutaja vormi esitamise.
Lubage mul minna version 1.
See on form1.html. Tundub esteetiliselt sama halb, kuid märgata, kuidas meeldib see.
Kui ma vajutan Registreeri ilma koostööd, saan karjus.
"Sa pead andma oma e-posti aadress."
Hea küll. Nii et lubage mul proovida seda. Nii malan@harvard.edu. Ma ei vaja parooli.
Registreeru. "Te peate määrama parooli." Hea küll.
Nii et ma annab parooli karmiinpunane. Registreeru.
"Paroolid ei kattu." Ma pean nüüd kirjuta karmiinpunane siin.
Ma kogemata kontrollida seda. Registreeru.
"Te peate nõustuma tingimustega." Hea küll. Leppige seal. Registreeru.
Ja nüüd ta näitab mulle, diagnostika väljund seal.
>> Nii et mis just juhtus?
Meil on olnud see võime kinnitada vormi sõlmimiseks.
Tegelikult, kui sa sukelduda pset 7, seal vabandada funktsioon
mis muudab selle üsna lihtne kisa kasutajale kiri ekraanil.
Ma kasutan veidi teistsuguse mehhanismi, hoiatusfunktsioon
mis ei ole funktsioon, mis on naeratanud kuna see teeb väga inetu kasutaja sõnumeid.
Aga vaatame, mida ma siin teen.
See on form1.html ja märkate, et mul on päris tuttav süntaksit:
body, vormi tag tegevuse atribuut, meetod atribuut.
Aga märkate Andsin oma vormi unikaalne ID mugavamaks.
Siis ma pean talle valdkonnas, mille tüüp on tekst,
UUS valdkonnas, mille tüüp on UUS, kinnitus valdkonnas, mille tüüp on parool,
ja siis kast, mille nimi on kokkuleppe üle siin, tüüp on ruut.
Ja siis mul submit nuppu.
Aga märkate ülaosas mida rohkem mul.
Esiteks, seal on teine ​​kasutamise script tag.
Kui teil on mõned JavaScripti koodi teises fail, just nagu CSS siis saate selle lisada.
Ja sa teha, et skript allikas, ja siis märkate Ma ühendavad ilmselt
kuni googleapis.com väga pikka teed, kuid mille faili nimi lõppeb jquery.min
minimaalse. js.
jQuery on super populaarne raamatukogu JavaScript, et lihtsalt muudab JavaScript
kõik kasutajasõbralikum kasutada.
See on tegelikult muutunud de facto standardiks.
Nii et kuigi mida sa parasjagu näha ei ole puhas JavaScript iseenesest
see on raamatukogu peal JavaScript meelega CS50 raamatukogu on kiht
peal madala C-koodi; tegelikkus on peaaegu kõik Interneti kasutab seda.
Nii et ei ole need abirattad. See on lihtsalt parim tava, nendel päevadel.
Nüüd märkate allpool, mis on mu enda skript sildi, ja teate mida ma olen teinud siin.
Selgub, et jQuery teeb midagi natuke uhke.
JavaScript on dollari märgid, kuid need on mõttetu.
>> Nad on nagu täht A või B või C.
jQuery on lihtsalt vastu konventsiooni või omamoodi laid nõude asjaolule,
et $ on oma eriline sümbol.
Nii et niipea kui laete selle ülemaailmse JavaScript faili siia üles koos script tag,
teil on juurdepääs spetsiaalse globaalne muutuja, mis nimetatakse $.
See on rohkem õigesti nimetatakse jQuery, kuid see ei tundu pooltki nii seksikas kui $.
Aga $ ei ole erilist tähendust. PHP tal eriline tähendus.
Sa pidid olema selle ees muutuja.
See on lihtsalt seksikas asi, et nad võtsid.
Mis siin toimub?
Teade Ma möödaminnes jQuery funktsiooni minu globaalse muutuja dokument
ja siis ma helistan. valmis.
Mis jQuery sisuliselt on see võimaldab teil võtta mõned vanilje JavaScript asjad
nagu dokumendi objekt, akna objekti,
ja kui te kaotate seda, et jQuery funktsioon -
ja jälle, et oleks selge, et see on funktsioon nimega jQuery -
mida ta teeb on see naaseb sa eriversioon dokument
millel on rohkem funktsioone sellega seotud.
Nii toores JavaScript ei ole valmis funktsiooni,
kuid kui te kaotate dokumendi jQuery funktsiooni esimese,
see läheb sulle erilise versiooni dokumendist objekti
mis on rohkem väljamõeldud omadusi.
Ja sellepärast inimestele meeldib see. See lihtsalt teeb asjad lihtsamaks teha, kui me parasjagu näha.
Mida see rida koodi tähendab?
See koodirida tähendab siin, kui dokument on valmis -
teisisõnu, kui brauser on lõpetanud lugemise see fail ülevalt alla -
edasi minna ja käivitada järgmine funktsioon.
Mis on tegelikult huvitav JavaScript - ja PHP on see samuti -
on anonüümne funktsioone.
JavaScript saad kuulutada funktsioone, mis ei ole nimi, vaid neil on keha.
Teade mis siin toimub.
>> See on funktsioon, mida nimetatakse valmis, ja see tähendab, tehke järgmist
kui kogu kodulehekülg on valmis, kui see kõik on lugeda serverist.
Mida sa tahad teha? Ma tahan täita patakas kood.
Pange tähele, et me ei taha täita see kood kohe.
Kui ma jätta seda, tähendaks see kohe nende täitmise rida koodi.
Kuid tõsiasi, et ma räägin ei, ei, ei, mähi seda anonüümne funktsioon nagu see
vahendid ei käivita veel; nimetame seda lõpuks.
Me nägime seda hetk tagasi meie endisel kujul näiteks.
Mis funktsioon ei kutsume lõpuks 500 millisekundit hiljem? Blink.
Nii et sama mõte.
Jällegi, isegi kui see tundub veidi imelik, võtke nüüd edasi usus
et kuulutada anonüümne funktsioon, mis kutsutakse lõpuks,
sa lihtsalt kirjutada funktsioon () {
Mida kood me kavatseme ellu lõpuks? Järgmised.
Ka see tundub veidi uut, kuid see tähendab, siin on jQuery funktsiooni,
ja see nüüd on otsetee.
See HTML koodi allosas ekraani muidugi on mõned puud esindus.
See ei ole see. Seda lehekülge on huvitavam kui see hello, world näite.
Aga seal on mõned puud, mis vastab käesoleva HTML.
Oleks tüütu on rakendada mingi rekursiivne funktsioon
alustada Juursõlme ja seejärel leida sõlme kelle ID on registreerimine.
Mis siis jQuery teeb super lihtne meile on sõna otseses mõttes seda.
Lase käia ja mind iganes div või mis tahes kujul, olenemata HTML element
on ID registreerimisel.
See võrdub document.getElementById ("registreerimine").
>> Miks inimesed nagu jQuery?
Sest see on lühem kirjutada. Aga see kõik on. See on sama mõte.
Too mulle tag kelle ID on registreerimine.
Ja kui see silt, mis juhtub olema kujul, esitatakse,
minna ja täita seda koodi.
Võtame ühe otsima nüüd, kuidas me teeme vormi kinnitamine.
Süntaks on küll segasena alguses, kuid mis toimub?
Kui see koodirida on tõsi, ma lähen kisa kasutaja anda oma e-posti aadress.
Mis on see rida koodi?
$ Tähendab jQuery. Nüüd märka seda.
See on selline nagu CSS.
Kui olete sukeldunud CSS veel, tead, mis see tähendab, element, mille ID on registreerimine.
Ruum tähendab leida laps või järeltulija registreerimine kelle nimi on sisend.
Ja siis see asi nurksulgudes on vähe filter.
Ja isegi kui see tundub segasena, tähendab see lihtsalt minema vorm, mille ID on registreerimine,
mine sisend element sees, et kelle nimi on e-post,
ja siis saad selle raha, mis iganes selle raha juhtub olema -
asdf, kas see on kõik, mida ma trükitud või malan@harvard.edu kui see, mida ma kirjutada.
Nii et kui väärtus kujul e-posti väli == midagi, kisa kasutaja.
Else if väärtus parooli väli == midagi, kisa kasutaja.
>> Else if väärtus parooli väli ei võrdu väärtuse kinnitamine valdkonnas,
mis oli muu element, kisa kasutaja.
Ja siis lõpuks - ja see liiga on mõned uued süntaks oma,
aga kui oled näinud, see on vähemalt natuke mõistlikum -
else if vorm, mille ID on registreerimine on sisend elementi, mille nimi on kokkulepe
ja kontrollitakse seda, minna ja karjuda kasutaja.
Nii et ma täiesti tunnistama, see on täiesti valdav esimesel pilgul.
See on palju uusi süntaks. Aga kõik jQuery järgmiselt selliseid mustreid.
Ja ausalt, ma ei tea isegi seda olid kuni paar minutit tagasi.
Ma Googled, "Kuidas sa kontrollida, kas on kastike on jQuery?"
ja see on süntaks, sest seal on erinevaid viise, kuidas seda teha
tegelike toores JavaScripti koodi.
Nii nagu väga esilehel Ülesanded nr 7 rõhutatakse,
pset 7 on väga palju harjutus eellaadimisel ise
kus oleme pakkunud loodetavasti kontseptuaalne raamistik, millega tegeleda pset.
>> Aga nagu sageli juhtub web disain, see on kuni teil tõesti tuhnima,
lisada pikad kood ja näiteid veebist nii kaua, kui te tsiteerivad neid
kohta tingimused, et esimese lehe,
ja mõistma, et õppimine HTML, CSS, JavaScript ja isegi SQL
on tõesti mõeldud seda kodus kasutada, kui me hakkame võtma need abirattad maha.
Ja aru ka seal on nii palju asju, mida saate teha brauserit.
Toas enamik neist elementidest on ka teisi asju nimetatakse sündmuseohjurite.
Ja kuigi me just vaatasin need nn onSubmit ja onready,
saate teha asju nagu onkeydown, onkeyup,
nagu siis, kui kasutaja puutub võtme, saab kuulata selle ja võti üles.
Gmail on kiirklahvide.
Kuidas Google rakendada kiirklahve nagu C komponeerida?
Nad kuulavad sündmustest, nagu neid nimetatakse, nagu onkeypress või onkeyup ja onkeydown.
Kui olete kunagi tiirles hiirt mõned menüüvalik
ja äkki, voila, ilmub menüü või graafiline muudab värvi,
kuidas nad seda teevad?
Selle asemel, et kuulata onready või onSubmit, siis kuulake onmouseover või onMouseOut.
>> Nii lühike, neid väga lihtne põhitõdesid, et oleme hakanud kriimustada pinda täna
ja me sukelduda veelgi kolmapäeval, pead üha enam
pädevus rakendada erinevaid asju, et sa oled juba tuttav.
Nii et olgem lõpe, ja me jätkame seda kolmapäeval.
>> [CS50.TV]