[Powered by Google Translate] [Teden 9]
[David J. Malan - Harvard University]
[To je CS50. - CS50.TV]
V redu. Dobrodošel nazaj. To je CS50, in to je začetek tedna 9.
Danes smo se osredotočili predvsem na načrtovanje, ne več v okviru dela C
vendar v okviru PHP in malo SQL in malo JavaScripta
zlasti proti koncu leta je tako pset 7 in tudi vaš končni projekt.
V bistvu, če ste na tej točki v svojem zadnjem projektu
kjer je domnevno od eno uro ali tako pred vami vsaj začeli dati nekaj misli
svoj končni projekt in misliš, da želite sodelovati z 1 ali 2 sošolci,
Če imate težave pri povezovanju s sošolci dejal,
vas prosimo, da izpolnite obrazec na cs50.net/partners/form.
Prav tako vas vpraša, kdo ste, kakšen projekt razmišljate o tem,
kje živiš le iz logističnih razlogov.
In potem, če želite, da pazi na v naslednjem tednu ali tako preglednice URL tam,
lahko nato videli samo za branje različico Google doc
, v katerem smo zbiranje teh podatkov.
Torej, če želite delati z nekom, z vsemi sredstvi, vas prosimo, da stik z ljudmi
prek tega mehanizma.
Vendar pa večina ljudi, ne dela sam. To je povsem v redu.
Torej ne zdi, da je to na kakršen koli način obvezno.
V petek je bila samo jaz in nekaj ekipo tukaj,
prazna gledališče za večino del.
Tukaj so 3 turisti sedel tam, tako da je bilo malo nerodno.
Kaj sva govorila bila baze podatkov in smo se pogovarjali o pset 7 malo.
In če niste slučajno ujeli na video, samo še, da je v redu.
Bom poskusil opredeliti vse pristojnosti, ki bi jih sicer jemljemo za samoumevno
temelji na predavanju v petek.
>> Ampak danes bomo poskušali priti do točke
ki ni samo, da lahko naredite nekaj takega pset 7
ampak res razume, kaj se dogaja pod pokrovom motorja,
še posebej nekaj abstrakcij, ki smo jih v mestu v datoteki functions.php
da bo vaše življenje malo lažje, vendar tako, da boste na koncu razumeli
tako da, če je usposabljanje kolesa sname v nekaj tednih lahko še vedno preživi
v realnem svetu in ne te stvari brez CS50 okviru pod vami.
Ta $ _SESSION, za tiste, ki so seznanjeni
ali so že ujeli videoposnetek, v petek, kaj seji storimo
v PHP temelji na spletni aplikaciji?
To je superglobal spremenljivka, kar pomeni, da je podobno v duhu, da GET in POST
in še nekaj drugih, ampak kaj je ta stvar koristna za?
>> Kaj je SEJA uporablja? Ja. [Študent] Sečnja noter
Prosim? [Študent] Sečnja noter Sečnja noter Res je.
V pset 7 smo s tem zasedanju superglobal lažje uspešni prijavi
In kaj lepega o tej superglobal je, da je asociativno polje.
Asociativni array, odpoklic pa je le niz, vendar katerih indeks ni več treba biti številke
kot 012. Lahko so številke ali pa jih celo strune.
In tako, če ste vrgli v pset 7 še ni, se lahko spomnimo, da smo shranjevanje ključno imenovano ID
znotraj te povezovalne matrike, katerih vrednost je nekaj takega kot 123 -
ne glede na trenutno prijavljen ID uporabnika je.
Motivacija za to je, da tudi po tem, ko je uporabnik obiskal localhost
ali moje spletno mesto bolj na splošno, nato pa sem se prijavil,
tudi če ne kliknete povezavo, ali vrnitev na moji spletni strani za 5 minut
ali celo uro ali celo dan, vendar zapustiti svoje okno brskalnika odprto,
prek tega superglobal se spomnim, da so prijavljeni
>> Z drugimi besedami, to mi omogoča, da shranite malo dolgoročno karkoli hočem o uporabniku.
In misliš, da res, kot utelešenje v košarici.
Mesta, kot so Amazon očitno vam dal stvari v nakupovalnem vozičku,
vendar HTTP protokol, ki poganja spletu, je brez državljanstva
v smislu, da ko obiščete spletno stran,
večinoma nimaš neke stalne omrežne povezave
med brskalnikom in strežnikom.
Takoj, ko ste prenesli HTML in JPEG in GIF in vse to,
povezava izgine in moraš samo kopijo HTML in malenkosti iz strežnika.
Ampak, če je strežnik želi spomniti kaj o tebi,
obremenitev na strežniku dejansko zabeležiti te informacije.
In tako programer, ki imajo nadzor nad strežnikom
lahko postavite skoraj karkoli želite znotraj tega superglobal asociativni niz
in bo tam naslednjič, ko se uporabnik vrne,
ali je to minut ali celo dni, razen če se zaprejo svoje okno brskalnika
Takrat seji izgine.
Torej je minljiva skladiščenje, to je brez trajne in to je pomenilo, da gredo stran
takoj, ko uporabnik zapre svoj brskalnik - ne samo, da je kartica, ki se pogosto celoten brskalnik,
ter uspešno prijavo uporabnika ven.
Torej, kako je ta stvar dejansko izvaja?
Oglejmo hiter pogled na preprostem primeru smo iskali v petek.
Za tiste, ki ne poznajo, je bilo tako enostavno, kot to.
To je spletna stran, katere edini namen v življenju je, da mi poveš
Kolikokrat sem obiskal te strani.
To je prvič, da sem v ponedeljek, da sem jo obiskal, zato je pravi 0 krat.
>> Ampak, če začnem znova naložite to stran, se pravi 1 uro, 2, 3, 4, 5,
in bo to na koncu kar naprej štetje gor, gor, gor, gor, gor
Za vsako časa sem kliknite Osveži dejansko na njej.
Torej, kako je to dela? Spusti me noter to datoteko z imenom counter.php.
Zgornji del je vse modro pripombe, vendar pa je zanimiv del je tukaj.
V vrstici 13 pravimo to funkcijo session_start,
in da se je dobesedno vse, kar morate storiti, če želite imeti dostop
te posebne superglobal imenom $ _SESSION.
To naredi vse mogoče, in bomo videli, kako se je v trenutku, ki je vse mogoče.
V vrstici 16 obvestila, kaj delam.
Če je ključ, ki se imenuje boj - z drugimi besedami, vrednost indeksa - "števec"
obstaja znotraj te matrike se imenuje seji, potem, kaj delam z njim v spodnji vrstici?
Kaj je vrstica 18 delaš?
>> [Neslišno študentski odziv] Kaj je to? [Študent] Shranjevanje vrednosti. Dobro.
To je shranjevanje vrednost, ki je v SESTANEK sedaj v novi lokalni začasne spremenljivke,
$ Števec v vseh male.
Obvestilo, da PHP se bo že malo leni tukaj.
Obvestilo nimamo nobene omembe int ali float ali vrvico ali kaj podobnega
ker je PHP slabo tipkajo, pri čemer vam ni treba določiti vrsto spremenljivke,
in v tem primeru tukaj sem sploh je prijavil še.
Jaz sem ga razglasi znotraj teh zavitih oklepajih in v nasprotju C, to je pravzaprav dobro.
Ne glede na to, kako globoko ugnezdena z variabilno izjavo v PHP -
znotraj oklepaja kodrasti, znotraj oklepaja kodraste in podobno -
da bo v tistem trenutku v času, ko so za preostali del programa,
za boljše ali slabše.
Torej takoj postane svetovna takoj, ko jo opredeljuje kot delamo tukaj.
>> Sicer pa, če se mi ne zdi, da je kaj v SESSION superglobal,
Jaz sem očitno to inicializacijo spremenljivke števec na 0,
s tem samo ob predpostavki, da si še nikoli ni bil tukaj.
In potem je seveda povečevanje števec kako?
Jaz sem posodabljanje vrednost, ki je znotraj te povezovalne matrike
z določitvijo je enaka ne glede na števec trenutno + 1.
Če bi se pomaknite tukaj za HTML strani, je pravzaprav zelo preprost.
Vse, kar imam v telesu tej strani, "ste obiskali to stran, tako-in-tako-krat."
In to je konstrukt PHP.
Če boste to storili <? =, Je to enako učinkovito, kaj deluje?
Res je enaka ali kaj podobnega printf, ki smo jih videli že večkrat v C,
čeprav, kot verjetno veste že od spec v pset 7,
print je tudi funkcija, ki preprosto natisne nekaj ven, dejansko ne uporabljajo format kode
in lahko dejansko rekli odmev, kot dobro.
Vsi so vedno tako malo drugačna, čeprav je neto učinek na koncu enak.
Torej, to uporabe enačaj je nekako na eleganten način za to početje
več jedrnato, kot bi jih sicer lahko.
Tako, da je vse to mesto ne. To natisne vrednost števca.
Kako se je vse to dejansko dogaja?
Morda se spomnite na teden ali tako nazaj smo začeli iskati pod pokrovom
, kako spletna stran deluje s pomočjo tega inšpektorja kartico.
>> Chrome je to tako v različici Mac različico operacijskega sistema Windows, Linux in celo različico,
in Firefox in IE imata podobne mehanizme, s katerimi imate to vgrajeno v iskalnik napak
znotraj brskalnika.
Oglejmo si naslednje.
Imamo cel kup kartic tukaj, in opozarjajo, da skrajno levo ena elementi,
in ne glede na to, kako godawful HTML in JavaScript so na strani,
opozarjajo, da s kartico Elementi lahko dejansko pluti HTML hierarhično
ter lepo in urejeno.
Torej, če ste poskušali naučiti iz spletne strani, kot so Google ali Facebook
ali res vse spletne strani, spoznali, da ste verjetno bolje
ki si ogleduje izvorne kode na ta način, v nasprotju z ogledom surovega vir,
ki je lahko zmešnjava, kot smo videli predvsem na Googlu.
Torej, če sem namesto kliknite na zavihek Network tukaj,
Pa poglejmo, kaj se dogaja, ko obiščem to stran.
Najprej naj jasno predpomnilnik.
Jaz bom šel v nastavitve v brskalniku Chrome in pojdite na zgodovino
in nato Počistite vse podatke brskanja.
Ti bi se lahko uporabila za to za druge namene, [smeh]
ampak, ko gre za razvoj spletnih strani, je dejansko koristno -
če se smejite veš. [Smeh]
To je pravzaprav zelo koristno pri oblikovanju spletnih strani, saj je realnost
stvari, kot so piškotki in najdene stvari, kot so HTML datoteke, predpomnilnik datoteke JavaScript
dejansko lahko postane velik glavobol, ker če iz kakršnega koli razloga
brskalnik odloči, da bo nekaj predpomnilnik datoteke in še ste naredili spremembe v datoteki, na strežniku
vendar je brskalnik ni res spoznal, da se je datoteka spremenila
in zato dejansko ne ponovno prenesti tudi takrat, ko boste kliknili na gumb Reload
eden od najbolj surefire načinov, da samo poskrbite, da napaka ni s kodo,
da je z obnašanjem v brskalniku, je, da gre tukaj v vašem brskalniku
in samo počistiti celotno zgodovino, tako da ni nejasnosti.
>> In potem, če ste prepričani, da želite biti paranoičen, zaprite brskalnik in ga ponovno zagnati,
in se prepričajte, da vse deluje, kot je bilo pričakovano.
Torej na kratko, obračun predpomnilnika je dober pri tem razvoju.
Torej, tukaj imamo zavihek Network.
Imel sem že obiskal 9-krat, vendar naj gredo naprej in zdaj kliknite Osveži.
In jaz sem nazaj na 0.
Poglejmo dejansko videli, kako je, da se ta seji superglobal izvaja.
Grem kliknite na zahtevo HTTP 1, ki je bil opravljen,
in to mi omogoča odpravljanje napak okno poglej znotraj tega.
Tu vidim samo odgovor od strežnika, ki ni zanimiv.
Videl sem te v vsakem več načinov.
Toda kaj je tehnično zanimiva so glave.
Če bi se pomaknite dol in se osredotočiti na zahtevane naslove in kliknite pogled vira
kaj bom videti je dobesedno zahteva HTTP
da je šel iz mojega brskalnika v strežniku,
GET pri čemer je ključna beseda in nato / counter.php čemer so ime datoteke,
HTTP/1.1 kot le različica HTTP, da moj brskalnik uporablja.
Ta postavka tukaj je malo opozorilo od brskalnika do strežnika, kar je ime strežnika
da želi govoriti.
In potem ostali to je včasih zanimivo, vendar ni pomembno zdaj.
>> To je le nekako radovednosti.
Cryptic čeprav je ta niz je vsak čas vaš brskalnik obišče spletno stran
je obvestil strežnik kaj brskalnik, ki ga uporabljate
in kateri operacijski sistem, ki ga uporabljate in katero verzijo tega sklepa.
Torej, če ste se kdaj spraševali, kako spletne strani, kot sta CNN in malenkosti
vedo, kaj so odstotki uporabnikov Mac na spletu, PC uporabnike,
Uporabniki IE, Chrome uporabnikov in podobno, je to zato, ker so vsi naši brskalnikov
so povedali vse spletne strani, tam zunaj, kar smo.
Ni nujno, da vsebujejo osebne podatke,
vendar pa povej, kaj je tvoj strežnik IP naslov je in kaj brskalnika in operacijskega sistema, ki ga uporabljate.
Torej, to je, če so te informacije.
Ampak kaj je bolj zanimivo, zdaj, ko gre za te seje je odgovor glavo.
Naj kliknite ogled vira zraven odgovora.
Zanimivo, tukaj je nekaj stvari.
1, smo se vrnili statusno kodo 200.
Nikoli nismo videli to kodo stanja, saj to pomeni, da je vse v redu.
To pomeni, da dobesedno prav v nasprotju z nečim drugim.
Kaj je številka včasih vidimo, da je slabo? [Študent] 404.
404, datoteke ni mogoče najti, morda 403 vas bo Spotikanju na že
kar je prepovedano, kar pomeni, da si pozabil na nekaj, chmod, najbolj verjeten.
In tam je kup drugih.
>> Tukaj, to je malo noro.
Jaz res samo napisal to sliko nekaj minutami, da ga prilepite v gedit.
Zakaj ta stran izteče leta 1981, še preden je bil res Spletna?
Kaj se dogaja tam?
>> [Neslišno študentski odziv] časovni žig. Ampak zakaj?
To je odvisno od naključja, ampak je celo uporabno.
Kaj to je rekel, da je to moj brskalnik PHP datoteko, ki jo pravkar zahteval že potekla.
Dejstvo je, da je iztekel pred 30 leti.
Toda kaj to v resnici pomeni?
To samo pomeni, da naslednjič, ko uporabnik obišče stran,
bodisi ponovnega natovarjanja ali vnesete URL v naslovno vrstico,
poskrbite, da greš in prinesi novo kopijo.
To je neke vrste zgled prednjačijo predpomnilnika,
neumna beseda, ki pomeni le poskuša odvrniti brskalnikov
od dejansko caching HTML je bilo, da je pošiljanje s strežnika
tako da ne boste po nesreči zadel reload in potem videli isto različico datoteke.
Si dejansko želijo strežnik, da pošlje novo kopijo.
Zato je dejstvo, da je 1981 pomeni le, da je tisto, kar je aparat izbiri
kot samovoljno dan v preteklosti.
Toda pravi sočno linija je zdaj tole.
Že pred 50 ste verjetno vsaj bežno seznanjen s piškotki.
Od sedaj, še posebej med tistimi, manj udobna, ali vmes,
kaj je piškotek v vašem razumevanju zdaj
Čeprav smo o tem, da bo vaše razumevanje bolj tehničen?
Kaj je piškotek? Ja.
[Študent] Informacije o uporabniku, kot če so napisali uporabniško ime ali kaj podobnega.
>> Dobro. Te podatke o uporabniku, ali oni vnesli v svoje uporabniško ime že.
Piškotki so način, s katerim lahko strežniki spomnim nekaj o uporabniku.
In kaj piškotek res je besedilna datoteka ali nekaj zaporedje bajtov
, ki je zasajena s strežnikom znotraj brskalnika,
in znotraj te datoteke ali med tistimi bajtov je nekakšna identifikatorja.
Mogoče je dobesedno vaše uporabniško ime, še pogosteje pa je nekaj več skrivnostnega videza
kot je ta stvar tu - bo8dal3ct in tako naprej - je to res velik alfanumerični niz
, ki je res samo pomeni, da je posebni identifikator za vas.
Ali pa misliš, da je nekakšen virtualni žiga strani.
Če greste na neki klub ali zabaviščni park, se spomnite, da ste dejansko plačana
in odšel, zato so dal malo rdečo nalepko na roko neke vrste,
in opozarja ljudi na pultu, ki ste jih že plačanega
in lahko pridejo in gredo, kot vi prosim.
Piškotki so malo pisane v duhu tega.
Ko sem prvič obiskal to spletno stran, kot sem storil po odstranitvi predpomnilnik,
spletni strežnik, naprava v tem primeru dal pečat na moji strani
čigar ime je PHPSESSID, ID seje,
katerih vrednost je to res dolgo alfanumerični niz.
>> Tako da je zdaj nekako okrašen na roko, tako da naslednjič, ko bom zadel osvežite
ali ročno obiščite ta spletni naslov v brskalniku
moj brskalnik po definiciji HTTP se bo predstavil z roko žig
spet in spet in spet.
Torej, čeprav strežnik ne nujno vedeti, kdo sem,
bodo vsaj vedeli, da sem jaz isti uporabnik ali vsaj natančneje, enako brskalnik.
In tako je na koncu, kako se uresničuje seji superglobal.
Strežnik nima pojma, kdo ste, ko boste ponovno spletno stran za drugo ali tretjo uro
razen če predloži te roke žig.
In takoj, ko se predloži, da se ročna žig,
Spletni strežnik, v bistvu gre v malo bazo lastnih
in preveri, v redu, pravkar sem videl roko žig bo8dal3ct uporabnikov in tako naprej.
Da vidim, kaj je informacija shranjena programer
Notranjost superglobal o tem uporabnika
in potem mi zagotoviti, da so podatki enkrat notranjost SESTANEK superglobal
tako da lahko programer znova dostop do teh podatkov
tudi če je bila določena le nekaj minut ali ur nazaj.
Torej, z drugimi besedami, piškotki, ki jih dobili na slabem glasu za nekaj časa
Zaradi negotovosti v brskalnikih in lahko res kršijo našo zasebnost in vse to,
jih dejansko imajo veliko korist, saj brez njih
bi nenehno prijavi na vsaki strani, ki jih obiščete Facebook
ali vsak Gmail e ste prebrali če brskalnik ni bilo na nek način spomina
ki ste jih že potrjen.
>> Torej, na ta način se piškotki poslani nazaj in naprej čez žico.
Še ena zanimivost o piškotkih, še posebej tukaj, je, da je to povsem v obliki besedila.
Ni šifriranje dogaja sploh,
in res sem s pomočjo HTTP v tem trenutku.
Eden od naših najljubših trenutkov v CS50, ki je sedaj 2 leti,
je bilo v času, orodje, imenovano Firesheep prišel ven.
To je brezplačno kos programske opreme, ki je bila izvedena v varnostni raziskovalec
kot budnica za skupnost povedati, kako izvajati atrociously
določeni mehanizmi za preverjanje pristnosti na spletu so.
Torej že nekaj časa, Facebook je skoraj v celoti preko HTTP, HTTPS ne.
In tudi, če nimate pojma, kako deluje kripto, S varna
tako da to pomeni, da je vsaj nekaj šifriranje vključeni.
Facebook pa za šifriranje uporabniških imen in gesel,
toda kakor hitro pogledal na vaši pokes ali vaša sporočila ali vaš novice krme,
Vse to je nekodirano.
Tako je Gmail, dokler le leto ali 2 leti.
Vsakič, ko se prijavili, da so uporabili varno šifriranje,
nato pa se niso. In zakaj bi to lahko bilo?
Zakaj ne samo uporabo kriptografije ves čas v uporabi primerih, kot je ta?
Kaj je to? Mislim, da sem nekaj slišal. [Študent] Hitrost.
Hitrost, kajne? Obstajajo načini, okoli tega.
Ampak, če si nekako logično razmišljati o tem, kaj če šifriranje,
kar morate storiti vsaj malo več dela.
V pset 2, ko izvaja Cezarja ali Vigenere ali celo razpok,
samo tiskanje niz je razmeroma enostavno.
Šifriranje in nato tiskanje niz minimalno potrebno malo več dela.
>> Za super priljubljenih spletnih strani, kot so Google in Facebook,
če boste morali narediti več za vsakega uporabnika, za vsako spletno stran, ki jih obiščete,
da le traja več procesorskega časa.
In če boste potrebovali več procesorskega časa, boste morda potrebovali več strežnikov,
kar pomeni, da bi potrebovali več denarja.
In tako je že vrsto let je to le res ni bilo najboljše prakse.
Ljudje bi uporabili šifriranje SSL le, če so potrebne za.
Toda izkazalo se je, in ker ta s kolegi Firesheep je super jasno,
ko fantje, ki so trenutno na Facebooku zdaj -
Iz radovednosti, da vidimo, če boš Umirite se.
Če ste na Facebooku sedaj v neki kartici, tudi če to ni v ospredje,
je vaš URL HTTP ali HTTPS?
[Več] S. S študenti? [Smeh]
Ok. Vsak HTTP? Samo 1? Ok.
Tako lahko vsi tisti tip vdrl v Facebook račun zdaj.
Za večino je to postalo privzeto vklopljena, vsaj v nekaterih spletnih strani.
In Skratka, če je vaša spletna prometa ni šifrirana,
ne samo, da HTML iti naprej in nazaj čez WiFis nešifrirani,
tako da stvari, kot so piškotki iti naprej in nazaj po zraku
brez kakršnega koli šifriranja.
Torej, če imate le malo zdrava pamet programsko ali malo Googling sposobnosti
da bi našli brezplačno programsko opremo, ki počne to, vse kar morate storiti, je sedel v Starbucks
ali sedeti na letališču, kjer je na splošno nešifrirani WiFi
in samo gledal za ključne besede, kot Set-Cookie: ali PHPSESSID
ker če ste tehnično zdrava pamet, da samo gledam WiFi
za vse bitov, da tok skozi zrak v tem vzorcu,
potem lahko rečemo, da tip je PHPSESSID zgodi, da se bo8dal in tako naprej.
In potem še enkrat, če ste dovolj tehnično zdrava pamet, ali imate pravo orodje,
lahko nato preprosto preoblikovati svoje brskalnik, da začnete predstavitev, da se ročna žig
na Facebook.com in Facebook je le, da bo Predvidevam, da ste tisti tip
ker vsi vedo ne, kdo ste, ampak, da so to posebni identifikator.
Torej, če kradeš, da je edinstven identifikator in ga predstaviti na spletni strežnik, kot svoje,
so le, da bo prikazal te osebe vira novic
ali te osebe, sporočila ali Pokes.
>> In jaz bi Google zdaj, kako aktivirati za Facebook HTTPS mogoče.
Ampak to je res tako enostavno, kot to.
In tako so Facebook in Google in tako dobil res dober pri tem,
ampak pazi toliko bolj za vse spletne strani, ki jih obiščete, ki ne uporabljajo HTTP
in so neke vrste občutljivih informacij o njih,
pa naj gre za finančni ali osebni ali podobno.
Če jih ne uporabljate to zelo verjetno lahko piškotki, kot je ta zelo enostavno ukradeni
in potem ponarejeni, in to je točno to, kar Firesheep storil.
Nisi biti programer.
Vse kar bi moral storiti je bilo se internetna povezava, prenesete brezplačno orodje,
in kaj bi naredil, je, da se prijavite in potem bi vam pokazal Facebook imena
za vse v Sandersa, v tem prikazom, okoli vas
in vse, kar bi moral storiti je bil kliknite na svoje ime in programske opreme, avtomatizacijo procesa
za njuhanje ta piškotek in ga predstavila na Facebooku, kot je vaša,
in, voila, ste prijavljeni
Torej, to je še eden od tistih "ne počni tega" uradno.
Če imate svojo domačo mrežo in želite Lemiti z vsemi sredstvi,
vendar to ne zavedaš, čez mejo na univerzitetnem okolju.
>> Toda cilj tukaj je res poudariti, ne pa, kako to storiti
ampak kako se braniti pred tovrstnimi stvarmi.
In trivialno rešitev tukaj, čeprav je sama po sebi napačna,
Res je, da zmanjšajo uporabo vseh območij, ki jih ne uporabljajo stalno HTTPS.
Torej strani kot so Facebook in Google vse bolj polja
kjer se lahko odločite za te stvari,
in so morale banke za ta leta iz podobnih razlogov.
Torej, samo malo v strahu faktor, če je to mogoče. Ampak to je to na kratko.
Tako je strežnik zapomni, kdo si.
In takoj, ko se lahko spomnite, kdo ste, lahko spomnite ničesar o tebi
da je programer shranjeni v notranjosti te posebne superglobal pozval $ _SESSION.
In pset 7 smo jo uporabljate le površno, da se spomnimo int,
to je edinstven ID uporabnika, ki je prijavljen,
tako da vemo, ste bili tam pred.
Vsa vprašanja, nato na sejah ali piškote in podobno?
Firesheep ne deluje več pravilno,
in imate računalnik v posebnem promiskuitetni način
tako da ste dejansko posluša za promet poleg sebe.
Torej, če ste trenutno prenos Firesheep, spoznaš, da ni čisto tako preprosto
kot je nekoč bil dokazati.
V redu. In ne delaj v Sanders. Naredi doma.
Baze podatkov.
Ena od stvari, ki smo storili v pset 7 zelo premišljeno
je smo vam mizo vzorčno zbirko podatkov za uporabnike, ki ima nekaj ID-jev uporabnikov,
nekateri uporabniška imena, gesla in nekatere kodirane v njih.
In kot boste videli, če tega še niste storili, boste morali spremeniti v tabeli malo.
Vi boste morali dodati nekaj predpomnilnika za vsako od uporabnikov v tej tabeli,
in ti boš moral dodati še eno Zgodovina mizo, mizo, portfelji
ali morda rekli kaj drugega.
Ampak glede na razmišljanje o tem, kako to storiti, kaj je odprla to orodje
ki smo jo uporabili v petek, če pa ne poznajo, Aparat je opremljen z orodjem
imenovano phpMyAdmin, ki je po naključju napisana v PHP,
ampak je njen namen v življenju, ko sem se prijavite tukaj jharvard z škrlat,
je, da me je uporabniku prijazen način gledanja in spreminja svoje baze podatkov.
>> Baza podatkov, ki tečem na aparatu se imenuje MySQL.
To je zelo priljubljen, in to brez odprtokodne podatkovne baze, ki je zelo enostaven za uporabo,
zlasti spredaj konča takole.
Kaj to orodje omogoča, da naredim, na primer, je suniti okrog mize.
Naj gredo naprej in to je to.
V petek smo ustvarili tabelo imenovano študente, da je bilo super enostavno.
Imela je 3 stolpce - identifikacija, ime in e-pošte - in sem ročno doda nekaj vrstic
kot David in Mike v tem konkretnem primeru.
Vzemimo to malo dlje, in predpostavimo, da želimo, da se spomnimo več
kot le ime in e-poštni o uporabniku.
Naj kliknite tukaj strukture na vrhu.
In spet, pset vas popelje skozi potrebne korake tu,
zato ne skrbite, če nekateri to malo hitro.
Potem bom kliknite tukaj.
Jaz bom dodal nekaj več stolpcev po e-pošti
ker želim dodati nekaj podobnega hiši.
Pozabil sem zapisati študentovo hišo.
Naj kliknite Pojdi, zdaj imamo ta obrazec, na žalost je malo širok od leve proti desni,
ampak bom poklical po imenu te hiše na terenu,
in potem tip sem zdaj izbrati.
Torej imajo kratek pogovor o različnih vrstah v MySQL
ker ker je PHP slabo tipkal in je neke vrste igra hitro in mehko z vrstami,
v zbirki podatkov, še posebej je to super pomembno, da se dejansko uporabo tipkanje v svojo korist
ker lahko ena od stvari, MySQL in drugih motorjev baze stori za vas
se zagotovi, da ne boste dal lažne podatke v zbirki podatkov.
To je neke vrste napake prosti preverjanja na voljo.
>> Za hišo se seveda ne želimo, da bi bilo int, ki je 32-bitna vrednost v MySQL.
Naredili smo govorili v petek na kratko o varchar, ki stoji za različno dolga char.
Kaj je to? To vam omogoča, da določite, da želite, da je to neke vrste niz.
Saj ni res vnaprej vedeti, kako dolgo je,
tako da bomo poljubno rekli hiša Ime je lahko 255 znakov,
vendar pa lahko greš s 32, 64 - poljubno število res.
Toda prednost uporabe varchar čez polje, imenovano lastnost je, kaj?
Samo intuitivno, če se pomaknite dol, da vidite tam znak in tam je varchar.
Varchar je spremenljivo dolžino char, char je določena dolžina znak.
Torej, temelji samo na tej opredelitvi, kaj je prednost ali slabost pri vsakem od njih?
Z drugimi besedami, ki skrbi za razlikovanje, ali zakaj se to tiče?
>> Ja. [Študent] varchar bolj prožno, vendar zavzame več prostora v pomnilniku.
Dobro. Varchar zahteva več - Pa poglejmo. Nisem prepričan, če sem slišal prav.
Lahko rečem, da še enkrat?
[Študent] Rekel sem varchar ima verjetno več prožnosti, vendar je potrebno več prostora v pomnilniku.
Zanimivo. Ok. Varchar Verjetno vam daje več fleksibilnosti, vendar zavzame več prostora v pomnilniku.
Slednje ni nujno res.
To je odvisno od konteksta, ampak kaj je prišel nazaj na to.
>> [Neslišno študentski odziv] Točno tako.
Pravzaprav je tako, da bo znak običajno porabi več pomnilnika
ker je znak, podobno kot v C, je kot niz, je niz znakov.
Torej, če ste recimo char polje dolžine 255,
Podatkovna baza je dobesedno bo dal 255 znakov.
In če je hiša konča pa Mather in 6 znakov skupaj,
ste zapravljaš več kot 200 znakov.
>> Torej varchar učinkovito uporablja le toliko znakov, kolikor je potrebno
do najvišjega zneska.
Toda cena, ki jo plačate, je dejansko uspešnost, potencialno.
Če boste vnaprej vedeli, da so vse vaše nizov se bodo 8 znakov -
Recimo, da potrebujete gesel dolžine 8 -
glavo z uporabo char polje na priložnosti, vendar ne pogosto,
je določiti fiksno dolžino za nekaj podobnega geslom
ker zdaj lahko zbirka še pametnejši.
Če se ve, da vsak char polje, vsak niz v koloni, je enako dolg,
dobiš nazaj funkcijo naključnega dostopa.
Lahko skok okoli med različnimi področji v vašem char tabelo zbirke podatkov
ker mislim baze podatkov v vrstice in stolpce.
Torej, če vsak od nizov je enako dolg,
veste, da je prvi bajt je na 0, naslednje na bajt 8
in nato 16, nato 24 in tako naprej.
Torej, če so vse strune so enake dolžine, lahko skočite v okolici veliko bolj učinkovito.
Torej je to lahko koristi v smislu izvedbe,
vendar običajno nimate razkošje vedo vnaprej,
Tako varchar je pot.
Tu je še en detajl, da tudi Facebook naletela na koncu.
Ints so super in mi nekako jih uporabiti privzeto kadarkoli si želimo več,
ampak to je samo 32 bitov.
>> In čeprav ne povsem Facebook ima 4 milijarde uporabnikov zdaj,
tam je definitivno nekaj ljudi tam zunaj, z več računi
ali so bili računi, ki odpre in nato zapre,
Facebook in tako sam menim, pred nekaj leti je bilo na prehod iz int
da, kot je aptly imenovan, bigint, ki je le 64 bitov namesto.
Torej, tudi to je oblika odločitev.
Saj bi bilo neverjetno srečo, če je vaš končni projekt postane zagon,
je 4000000000 in 1 uporabniki, gor ali dol,
v tem primeru se lahko uporabi ints je malo kratkovidno.
Toda v resnici, tvoja uporabniki miza je verjetno v redu z ints.
Ampak za kaj takega pset 7, na primer v zgodovini mizo,
ste morda na tisoče, milijone uporabnikov, če se razvil v etrade.com.
Torej, ker morda ne boste imeli več kot 4 milijarde uporabnikov,
tiste uporabnike, imate morda več kot 4 milijarde transakcij v daljšem časovnem obdobju -
kupuje in prodaja, in kaj v svoji zgodovini.
Torej, če vam predvidevanje - še enkrat, to so dobri, da imajo težave, če imate to veliko podatkov -
če ne predvidevajo podatke, ki presegajo velikost notr,
dogaja nekaj podobnega BIGINT je smer, ne dovolj pogosto, ki ga oblikovalci
ker ljudje podatek, da to ne bo problem,
vendar je to težko izbrati nekaj večjega kot to.
Decimalno smo z uporabo v pset 7, ki določa fiksno natančnost
Tako se lahko izognete vprašanj, ki vključujejo boje in v dvojicah in reals in podobno.
>> In potem je tu še nekaj drugih polj tukaj. Bomo mahal z rokami na njih do neke mere.
Ampak datumi, čas imajo predpisano obliko v MySQL,
in prednost shranjevanje datumov kot datumi in ne varchars
pomeni, da lahko baza jih dejansko preoblikovanja v različnih oblikah,
ali format ameriški ali evropski format ali podobno - vendar si ga želite -
bolj učinkovito, kot če bi šlo samo nekaj splošnih varchar.
In potem je tu še nekatere druge BINARY, VARBINARY kepe.
To so velike binarnih predmetov, in lahko shranite tudi binarnih podatkov
kot tudi geometrijskih podatkov v zbirki podatkov.
Ampak za nas, bomo običajno skrbi ints in varchars in podobno.
Končajmo to primer pri hiši.
Hiša bom rekel samovoljno bo 255 znakov.
Potem bi privzeta vrednost naredimo.
Mi lahko privzeto dal vse v Mather hiši, na primer.
Tako smo lahko določi, da je baza podatkov
mora zagotoviti, da je nekdo vedno ima svojo vrednost. Ampak bom pustil, da bo.
V bistvu, za ljudi, ki živijo izven kampusa, in ne v hiši,
Mogoče sem dejansko želijo določiti, da je privzeta vrednost za hišo NULL,
in potem moram preveriti to polje in povedal, baze podatkov je v redu, če uporabnikov hiša je NULL.
>> Še enkrat, to je še en obrambni mehanizem, ki jih lahko vzpostavijo
tako da vam ni treba niti da je v vašem PHP kode nujno.
Podatkovna baza bo zagotovila, da stvari so ali niso NIČ.
In potem končno, Lastnosti.
Nobena od teh so res pomembne.
Binary, nepodpisan - nobena od teh so pomembne za varchar.
Indeks.
Ali kdo ve, ali se spomnite, ali imate ugibati, kaj je indeks
nekaj podobnega doma?
Tudi to je dejansko pomembno in razmeroma enostavno oblikovanje odločitev.
Za tiste, ki še niso videli, v petek, smo se pogovarjali o tem na kratko primarne ključe.
V tabeli zbirke podatkov, primarni ključ polje ali stolpec
, ki enolično določa vrstice v tabeli.
Torej, v tej tabeli imamo ID, imamo imena in e-pošto.
Katera od teh je najboljši kandidat za primarni ključ,
katerih naloga je, da enolično identifikacijo vrstice?
Verjetno ID.
Možno je, da smo lahko uporabite tudi kaj, čeprav?
Morda lahko uporabite e-pošto, saj v teoriji je edinstven
če ljudje delijo e-poštnih računov.
Ampak dejstvo je, da če boste uporabljali številski ID kot 1234,
To je le 32 bitov, medtem ko bi lahko e-poštni naslov je to veliko bajtov ali je to veliko bajtov.
Torej v smislu učinkovitosti za posebne identifikatorje,
to kaže, da je dobra praksa samo za uporabo int
tudi, če imate nekaj gesel kandidata, ki bi lahko verjetno uporabite.
>> Za kaj takega doma, to ne bi smelo biti primarni ključ
saj bi potem lahko samo 1 oseba, ki živi v Mather in 1 oseba Kožar in podobnega.
Prav tako to ne bi smelo biti edinstvena.
Razlika med primarnimi in edinstveno je, da v primeru naše trenutne tabele,
ID bi bil primarni, vendar email ni glavni razlog za pravkar omenjeno -
uspešnosti - vendar morajo še vedno edinstvena.
Torej, še vedno lahko uveljavljajo edinstvenost, ne da bi zahtevek
da je to zelo pomembno primarno polje.
Ampak tale je zelo koristno: Indeks.
Če veste vnaprej za vaš končni projekt za pset 7, ali na splošno,
da je to polje hiša se bo nekaj poiščete na veliko
z izbrano ključno besedo ali kaj drugega,
potem lahko povem preemptively baze podatkov za delo svojo čarovnijo
in se prepričajte, da se ustvari v spominu so mi vse potrebne podatkovne strukture
za pospešitev iskanja, ki temeljijo na hišo.
Mogoče se bo uporabila razpršene tabele, morda bo uporabila povezan seznam.
V resnici, pa kaže, da uporabite drevo, pogosto strukturo, imenovano B-drevo -
Ne binarno drevo, vendar B-drevo - kar je zelo široko drevo
, ki jih lahko vidite v razredu, kot CS124, podatkovne strukture razreda.
Ampak na kratko, vam ni treba skrbeti, da pri uporabi pametnih baze podatkov programske opreme.
Lahko samo povem, "Kazalo to polje, da bom lahko poiščete na njej bolj učinkovito."
>> Če tega dol in poskusite poiskati vse v bazi podatkov, ki prebiva v Mather,
bo prenesejo v linearno iskanje.
In če imaš 6000 undergrads vse, ki živijo v neki hiši,
boš poiskati celo tabelo, da bi našli Matherites,
ker če rečeš indeks, upam, da bo kaj blizu logaritemski iskanje
da bi našli tiste vrste študentov.
To je le brezplačna funkcija za vklop,
čeprav ne prihajajo po ceni približno količino prostora.
Končno, auto-increment to polje AI,
kar pomeni samo, če je int in ne želite, da skrbi za prirastek sami
vsakič, ko se je nov uporabnik, preverite, da je
in bo vsak uporabnik, ki dobi doda samodejno dobili novo številko.
Naj kliknite Shrani in zdaj gremo iskati napake tega modela.
Če grem v Prebrskaj, obvešča, da je tako Mike in moja hiša NULL.
Lahko uporabite phpMyAdmin urediti ročno.
Lahko grem noter in tip v Mather in nato pritisnite tipko Enter,
in zdaj opazil miza je drugačna.
Opazil sem lahko storil kaj drugega, kot dobro.
ID David je 1, tako da phpMyAdmin je spet samo administrativno orodje;
To ni nekaj, kar vaši uporabniki sploh kdaj videli.
Torej, če sem namesto kliknite jeziček SQL do vrha -
in spet se bo pset 7 vam predstavil več takšnih vprašanj -
Lahko ročno izvedbo SQL poizvedb ukaz strukturiran jezik
UPDATE uporabniki SET hiša = 'Pfoho' WHERE id = 1.
Te SQL poizvedb so lepo dovolj, precej berljiva od leve proti desni.
Posodobiti uporabnikov tabelo, nastavite polje z imenom hišo Pfoho
kjer uporabnika ID je 1.
Ali sem lahko celo storiti, če email = 'malan@harvard.edu ".
Tako dolgo, kot da me je edinstveno identificira, da bi delovala kot dobro.
Ampak ID običajno višja zmogljivost, tako da je to naredil.
Naj kliknite Pojdi. Ok, lecture.users ne obstaja. Kaj je moja napaka?
Kaj je tabela dejansko klical?
Imenuje se študentje samo zato, ker je to, kar smo naredili tu v zgornjem levem kotu.
Imenuje se študentje, ki niso uporabniki. Torej, zdaj kliknite Pojdi.
1 vrstica vpliva. Vprašanje je 0,01 sekunde.
Če sem kliknite Prebrskaj zdaj, zdaj Malan življenje Pfoho.
Torej, to je še en okus SQL, vendar pset vas bo vodil skozi več bit to.
>> Tam je neumna odločitev sem že tukaj.
Jaz trdim, da je to neučinkovito, načrtovanje podatkovne baze
ker več ljudi dodam k mizi študentov,
bolj nas začnem dodal, je več TF začnem dodal,
bomo začeli videti, kaj presežnih delavcev v tej tabeli?
>> Ja. [Študent] Vidim, da je pri dijakih, smo z enako [neslišno]
Isto - Ja, točno.
Torej, če 400 ljudi živi v Mather, gor ali dol,
na koncu te tabele se dogaja, da imajo 400 vrstic, ki pravijo "Mather", "Mather,"
"Mather", "Mather", "Mather."
Zapravljamo vse te bajte, pa še nekaj takeaways tam.
1, tam je noro kotiček primeru, če bi nekdo plača veliko denarja
in preimenuje Mather, moramo zdaj spremeniti našo celotno tabelo baze podatkov.
To se ne bo zgodilo pogosto, čeprav je bil nekoč imenovan Pfoho North Hiša pred 15 leti,
Tako se zgodi. Ampak to še ni vse, kar prepričljivi.
Bolj prepričljiv kot kotno primeru, kot je primer da bi morali posodobiti podatke v razsutem stanju
za podatkovno bazo, zakaj ste shranjevanje Mather znova in znova in znova in znova?
To je veliko znakov, 6 znakov.
Ne morem delamo celo bolje, kot da so zlasti za Pforzheimer?
Zagotovo lahko storimo bolje, kot da je veliko znakov.
Zakaj ne povezujejo z edinstveno oznako z vsako hišo
in trgovina, ki za vsakega uporabnika? Torej, kaj je poskusiti.
Namesto da samo uporabo študentov mizo, naj grem do mojega predavanja baze tu zgoraj levo.
Obvestilo tukaj piše Ustvari tabelo.
Naj ustvarite novo tabelo, imenovano hiše.
Število stolpcev se bo 2. Enter.
Zdaj imam 2 polj.
Bom poklical to ime, in to se dogaja, da je varchar dolžine 255,
>> ampak to je precej samovoljno. Naj to povem tukaj po dogovoru.
Torej naj ID tukaj. Dajmo vsaki hiši z edinstveno oznako.
Dajmo vsaki hiši ime.
Naj določi, da bo identifikator nepodpisani samo po dogovoru uporabljajo le pozitivne številke.
Gremo naprej in da to auto-prirastek polje za zdaj.
In potrebujemo še kaj?
Gremo naprej in kliknite Shrani.
Zdaj imam še eno mizo.
Obvestilo je razveljavilo to je nekoliko skrivnosten SQL ukaz
ki bi jih morali ročno vnesti, če ne uporabljate upravno orodje, kot je phpMyAdmin.
Torej še en razlog, da ga uporabljajo.
To je čudovito koristno vrsta pedagoško, ker lahko kliknete okrog
in ugotovimo, kako stvari delujejo tako, da preprosto kopiranje in lepljenje kaj phpMyAdmin storil.
Ampak miza Ustvarjanje ukaz je, kaj se je pravkar izvaja, in tukaj je moja miza.
Naj gredo naprej in zdaj uporabljajo surovo SQL namesto poenostavljam s klikom na zavihek Vstavljanje.
Naj se INSERT INTO hiš,
in bom povedal ime hiše se dogaja, da imajo vrednost "Mather".
To je to. Ta besedna zveza je malo bolj skrivnosten.
To je ime, od področij, ki jih želimo vstaviti.
To so vrednote, ki jih želimo vstaviti v teh področjih. Naj kliknite Pojdi.
1 vstavi vrstica je 0,02 sekunde. Naj zdaj kliknite Prebrskaj.
>> Obvestilo, če sem kliknite Prebrskaj, da je Mather, ki je z avtomatizacijo ID številka 1.
Jaz bom še enega. Naj gredo v zavihku SQL.
INSERT INTO hiš. Ime hiše se dogaja, da imajo vrednost Pfoho in tako naprej.
Pojdi. In jaz vztrajati početje to znova in znova in znova.
Ali pa, če se boste naveličali uporabo phpMyAdmin, lahko preprosto uporabite kartico Vstavljanje
in ne bo treba vnašati surovega SQL.
Lahko samo poka hitrejšem natipkati, na primer, Kožar, Enter
in zdaj, če kliknete Prebrskaj smo, da je Kožar z ID-jem 3.
Torej, to je tisto, kar mislimo avtomatsko prirastek.
Toda zdaj moramo popraviti nekaj v študente.
V študentov, kaj naj Podatkovni tip hiše področju sedaj?
To bi moralo biti int, kajne?
Torej cilj tukaj je, da faktor ven, sicer znan kot normalizira, tabele
tako, da ne shranjujejo informacije redundantly v kateri koli od mojih tabel.
In spet je pot smo bili tu bo rekel Mather, Mather,
Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, ki je zelo odveč
v smislu potratnosti od znakov.
Torej, naj gredo naprej in spremeniti tako, da kliknete strukture,
in mi gredo naprej in preverite off hiša polje, kliknite Spremeni
in zdaj bom to spremenil, da je int.
255, ni več pomembno.
Naj gredo naprej in rekli, da je v redu, če je še vedno NULL. Shrani.
Zdaj je miza študentov spremenila uspešno
in opazil spet hiša je int.
Naj omenim, da prezreti številko v oklepaju, ko gre za ints.
>> To je za obstoječe razlogov.
Nazaj na dan, ko nisi imel GUI, boste namesto tega imeli okolja ukazno vrstico,
na 10 in 11 navedene koliko znakov morate Prikaži
V terminalskem oknu dejansko prikazati polja.
To nima nič opraviti z bitno dolžino dejanskega področju, tako da bomo šele prezreti, da za zdaj.
Zdaj moram iti v tej tabeli.
In če David živi v Mather, hiša ne sme biti 0,
ki je privzeta vrednost int najbližje NULL.
On bi moral živeti v hiši, 1.
Naj povem, da samovoljno Mike živi v Pfoho, zato hišna številka 2.
Zdaj je moja miza izgleda malo bolj skrivnosten.
Toda upoštevati učinkovitost.
Sedaj sem z uporabo samo 32 bitov za identifikacijo hišo,
kar pomeni, da je samo 1 cerkvenih opredelitev moji hiši Mather in Pfoho
in da je v tabeli hiš.
Torej, če želim, da se zdaj ponoven teh tabel, mislim, da na ta način.
Tukaj imam študentov mizo, na desni strani pa je te številke, 1 in 2.
1 je Mather, 2 je Pfoho.
Imamo te iste številke v tej drugi tabeli, ki se imenuje hiše,
1 in 2 in 3, za tiste 3 hiš.
Kaj bomo zdaj želeli storiti, je imeti sposobnost v kodi, PHP in SQL,
razvrstiti na ponoven teh tabel, kjer, če so to študentje in to so hiše,
želimo nekako jih združiti, da bi linije 1 z 1,
2 vrstici z 2, in da bomo lahko ugotovili, če Davidu
in kjer Mike in kadar vsi ostali živi.
Če želite to narediti lahko izvrši SQL poizvedbo, kot sledi.
SELECT * FROM dijaki JOIN hiše ON -
In zdaj, kaj polj želimo, da se pridružijo na?
Torej students.house = houses.id.
>> Malo skrivnosten, vendar je ta del dobesedno pomeni ustvariti novo začasno tabelo
To je posledica vključitve študentov in hiš.
In kako želite združiti konice mojih prstov tukaj?
Nastavite učencev hiša polja, ki je enaka hiš, "ID področju.
In če sem kliknite Pojdi zdaj, sem dobil točno tisto, kar sem pričakoval.
David je v Mather, Mike je v Pfoho, in vidim tudi edinstvene identifikatorje.
Toda dejstvo je, zdaj imam celotno tabelo.
In tako takeaway tukaj za pset 7, ali res za končni projekt:
Če se vam zdi, da ste shranjevanje koli informacijo redundantly,
pa naj bo to hiša, morda je to mesto, državo, in ZIP
kjer ZIP ponavadi, vendar ne vedno uporablja kot posebno oznako,
ne gredo skozi uresničevanje duševno in nato z nekaj podobnega phpMyAdmin
faktoringa, da skupnih podatkov, saj zlasti v vašo spletno stran dobi več pa se uporablja
in bolj priljubljena, je to, kako ste prepričani, da je vse super hitro,
s tem, da zbirke podatkov čim več nasvetov o tem, edinstvenosti, kot je mogoče.
To je bilo veliko.
Kakšno vprašanje? V redu. Oglejmo 5-minutni odmor in se združil.
V redu.
Spodaj je primer, ki je bila uporabljena pred nekaj leti, ko sem CS161,
ki je operacijski sistemi razreda na šoli
, ki je znano, da se neverjetno, ampak noro količino dela,
in se osredotoča na nekatere zelo nizko stopnjo težav, ki se pojavljajo v operacijskih sistemih
ter tudi v svetu baz podatkov.
>> Zgodba, ki je rekel moj profesor, Margo Seltzer, da je bilo leto, kot sledi.
Recimo, da imate malo Dorm hladilnik za vas in vaš sostanovalec
in oba zelo rad mleko.
Torej, prideš domov iz razreda 1 dan, vaš sostanovalec še ni tam,
odprete hladilnik, in se zavedaš, "Oh, vraga, mi je zmanjkalo mleka."
Torej zapreš hladilnik, hodite čez cesto v CVS
in se v vse bolj dolgih progah kupiti nekaj mleka v CVS.
Medtem, tvoja cimra pride domov iz njegovega razreda,
pride v sobo, odpre hladilnik res želi nekaj mleka,
odpre hladilnik in "Prekleto, brez mleka."
Torej, on ali ona zapre hladilnik, hodi ven, in gre za ŽSP
ali nekje, razen če CVS ne boš, da udarec v drug drugega
da pojdi malo mleka.
Seveda je nekaj minut kasneje, oba se vrnem domov
in zdaj imate dvakrat toliko mleka, kot ga dejansko želel.
In ker mleko, zdaj pa bo šlo slabo, ker vam je všeč mleko
vendar si v resnici ne kot mleko, sedaj imate preveč mleka, tako da se bo kisel.
To je grozno, grozno situacijo.
Kaj bi lahko rešili ta zmote, če so bili prvi cimra doma? Da.
[Študent] Moral bi pustil sporočilo. [Smeh]
Dobro. Moral bi pustil sporočilo.
Morali bi postaviti Post-it seznanil ali, kot pravi, "Gone za mleko"
in potem bi vaš sostanovalec konceptualno so bili izpasti dejansko počne.
Ali lahko greš 1 korak naprej.
Lahko dobesedno zaklene hladilnik z nekakšno ključavnico,
in zdaj bo vaš sostanovalec dobesedno zaklenil iz hladilnika.
Če se sploh vrnil k načrtovanju,
lahko skoraj menite o hladilniku, kot neke vrste spremenljivko ali struct,
neke vrste posode za informacije.
Problem tu je bistveno, da so oba omogoči vpogled
ali preberite stanje te strukture podatkov,
vendar si ga ogledali v različnih časih in še vaju ne sprejme odločitve
glede na stanje v svetu na teh različnih trenutkov.
Torej si imel zaklenjeno hladilnik, bi se vsaj izogniti svojega cimra
od ki so bili sposobni, da se preveri stanje sveta,
tako on ali ona ne bi mogel to isto odločitev.
Torej zbirk, saj se je izkazalo, da je to problem stalno.
>> Bomo videli, če bomo lahko zgraditi scenarij.
Recimo, da ste neke vrste slab človek in greš na Bank of America
ali enega od drugih krajev na trgu, ki imajo drug par bankomatov po strani
in nekako si pogruntal, kako dvojnik ATM kartico - ni vse tako težko.
To je samo magnetni trak.
In kaj si želeli poskusiti storiti, je igrati to igro
pri čemer si dal 1 kartico v 1 stroj, drugo kartico v drugo napravo,
in si v bistvu želim poskusiti, da dvig denarja hkrati,
ker si predstavljam, da je zgodba gre takole.
Stroj na levi vzame kartico in PIN,
in potem rekel: "Daj mi 100 dolarjev."
Bankomat je programiran tako, da najprej narediti izberite v svoji zbirki podatkov ali enakovredno -
ne glede na to je baza podatkov z uporabo - za prikaz pa uporabnik lahko vsaj $ 100 v njegovem računu?
Če je tako, potem pa izpljune 100 $ in 100 $ odšteje od njihove bilance.
Ampak seveda, če obstaja več avtomati tukaj ali več načinov pregledovanja
stanje tega sveta, banka obok, da bi videli, koliko denarja imate,
Predvidevam, da je bil zgolj slučaj napravi na levi in ​​desni
tako vprašal to vprašanje na približno enaki trenutku.
>> In to zagotovo zgodilo. Bankomati so računalniki v teh dneh.
Torej, če je naprava na levi strani piše: "Da, da imate vsaj 100 $,"
Medtem je naprava na desni strani pravi: "Da, da imate vsaj 100 $,"
Nato sta oba nadaljuje do konca svojih programov in dejansko izpljune 100 $
in rekel: »Prej si imel 200 $."
"Dovolite mi, da posodobi spremenljivko sedaj 100 $ ostane na računu."
Ampak, če sta oba preveriti stanje na računu in ugotovili, da je 200 $
in oba naredite matematike in povedati 200-100,
stroji so lahko izpljunila 2 100 $ račune v vsakem stroju,
ampak oni samo posodobili stanje kilometrov račun za 100 $.
Z drugimi besedami, ko ste vzeli ven 200 $, ampak zato, ker so pregledale stanje na svetu
hkrati in nato sprejeli odločitev, ki temelji na tej vrednosti,
morda ne math končno pravilno.
Tako na bančni položaj preveč zares želite imeti neke vrste izsekom
tako, da takoj, ko ste pregledali stanje neke spremenljivke
To je zelo pomembno, kot je na računu,
Ne pustite, da bi kdo drug odločitve, ki temeljijo na tem, dokler ste končali delaš svoje stvari,
če v tem primeru ste bankomat na levi strani.
Zaklenite vse ostale ven.
Lahko dejansko dosegli ta učinek v nekaj različnih načinov.
>> Najenostavnejši način v MySQL je linija SQL, ki vam je dal
V opredelitvi težave set, ki je videti natanko tako.
Vstavljanje v tabelo - ne glede na to reče - id, simbol, in delež, število delnic,
naslednje vrednosti, na primer.
Če še niste prebrali še spec, to je primer, ki vključuje kako si šel o
nakupom delnic 10 te peni zalogi za predsednika Skroob,
katerih uporabniški ID zgodi, da bo številka 7?
Ta pravi, da INSERT INTO mizo naslednji id, simbol in število delnic
z dne 7. "DVN.V" in 10.
Ampak - ampak, ampak, ampak - v drugi vrsti je pomembna.
O dveh izvodih KLJUČNIH UPDATE delnic = delnice + VALUES (delnice).
Torej, popolnoma skrit, ki si na prvi pogled.
Toda dejstvo, da se ta poizvedba SQL, čeprav se prelomi na 2 progah,
1 dolg je izraz, to pomeni, da je atomska
v smislu, da se bo to vprašanje ali se izvajajo skupaj ali pa sploh ne.
In po definiciji MySQL, to je, kako izvajati to vprašanje.
To je po definiciji v priročniku jamči za izvršitev naenkrat ali pa sploh ne.
Motivacija za to je, kot sledi.
Če v tem primeru poskušate za nakup 10 delnic zalog,
to je nekako isto zgodbo kot mleko, to je nekako isto zgodbo kot ATM.
>> Če naredite napako, ker ne uporabljajo to sintakso
temveč izbor iz zbirke podatkov za prikaz, koliko delnic tega peni parka
Predsednik ne Skroob imajo, in domnevam, da ima 10 delnic,
in še nekaj delček sekunde kasneje pa naredite nekaj za posodabljanje izjavo,
kar je še ena izjava, ki pravi, da v SQL iti naprej in dodati še 10 delnic
glede na svojo trenutno 10, tako da v najboljšem primeru skupaj jih je 20,
Problem je, ker v današnjih sistemov baz podatkov in zato, ker v današnjih računalnikih
imate več procesorjev, več jeder -
Z drugimi besedami, lahko računalniki dobesedno delaš več stvari hkrati -
ni zagotovila, da se vaša SELECT in posodabljanja v tem primeru
se bo zgodilo na hrbtni strani.
Zato bi bilo slabo, scenarij ti SELECT
da vidim, koliko delnic tega staleža peni ne Skroob imajo
in potem samo po naključju, se izvede drugo poizvedb -
Mogoče njegova Skroob v drugem oknu brskalnika poskuša kupiti 10 delnic
v drugem oknu skupaj, podobno kot ATM -
in predvidevam, da je ena poizvedba v dobi med SELECT in posodobiti.
To bi se lahko zgodilo, da Skroob zdaj izgubila nekaj več delnic
ker je drug proces je preveriti stanje svojega sveta,
ali bo dobil več delnic, kot bi ga morali.
Ne bom se spuščal v podrobnosti o točno tisto, kar bi te posebne linije zgodba je,
ampak dejstvo je, če imate, da preverite spremenljivke vrednost in nato odločitev,
če obstaja nevarnost, nekdo počne nekaj med tema 2 izkazih,
kot se lahko zgodi v sistemih z več v večjedrnih sistemov,
računalniki, ki so sposobni narediti več stvari hkrati, lahko slabe stvari se dogajajo
kot so bančni računi nepravilno obremenjen, nakup dvakrat toliko mleka,
ali v tem primeru napačno število delnic.
Ampak obstaja lažji način, da razmišljajo o tem.
>> Izkazalo se je, da je SQL podpira tudi v primeru, da nastavite tabelo pravilno,
nekaj, kar ti posli, ki bi lahko dejali, je v resnici še lažje razumeti
kot to, vendar to ni 1-linijski, tako da je pravzaprav malo bolj vključeni.
Obstaja dobesedno izjavo v SQL imenuje START posla.
Tako kot obstaja SELECT, UPDATE, INSERT, DELETE, in se pridružijo in kup drugih,
so ključne besede, kot TRANSAKCIJE START.
In kaj si potem naredil v okviru pset 7 -
vam ni treba, da to stori pset 7, to je izrecno zavrnjeni kot ni nujno,
ampak za končnih projektov je lahko koristna -
če pokličete poizvedbo posla Start in nato še poizvedbe
, nato pa še poizvedbo, nato pa še, še, in še,
ta vprašanja ne bodo dejansko izvajajo, dokler ne pokličete stavek SQL COMMIT
na kateri točki se, ali je to 2 izjave ali izjave 20, bodo vsi lahko izvede enkrat
kar pomeni, da nihče drug ne more po nesreči kupil preveč mleka ali debetne preveč denarja
ali kupiti delnice preveč, saj bo vse vaše poizvedbe izvede
back to back to back to back.
In to je super pomembno, še posebej, če delaš kaj takega.
To je samovoljno primer, ki pravi, lets 'posodobitev bančnega računa
z vzpostavitvijo ravnovesja v višini razlike - 1.000 $, kjer je račun številka 2.
In potem druga izjava se deponira zdaj pa, da je 1000 $
v nekoga drugega bančnega računa, katerega številko računa je 1.
>> Z drugimi besedami, je to odličen primer, če želite, da se prepričajte,
da sta od teh izjav zgodi, ali pa sploh ne
ker drugače se bo kupec dobil zajebali
in boš lahko svoj denar in ne deponira drugje,
ali je banka bo dobil zajebali, kjer boste za deponiranje denarja
vendar dejansko ne odšteje od računa uporabnika.
Torej hočeš, oba izvesti skupaj.
Tako vstopi v svet poslov.
Torej, to je nekaj, da v ozadju vašega uma,
ne toliko za samo končni projekt,
Če pa želite, da vaš končni projekt nekje,
če želijo ustanoviti podjetje, nekaj okoli njega,
Če želite rešiti nekatere težave v skupini študentov na kampusu
in dejansko so v živo, aktivno spletno stran, to so neke vrste subtilnih napak, ki lahko nastanejo
če ne povsem premisli kaj lahko zgodi, če 2 osebi
Poskušate dostopati do vaše spletne strani na dobesedno v istem trenutku,
po kateri se lahko njihove poizvedbe drugače se prepletajo.
>> Pripravljen za nekatere JavaScript, teaser Pogodbe?
To je naša zadnja jezik za polovico. V redu.
K sreči, JavaScript izgleda zelo, zelo, zelo podobni 2 jezikih, C in PHP,
smo naredili doslej.
Ni JavaScript v pset 7, vendar je zelo uporabno orodje
ko gre za početje na spletu temelječih končnih projektov ali res samo spletno programiranje bolj na splošno.
Tako hiter pregled nekaj, kar ti DOM.
Tukaj je super enostavno spletno stran, ki res samo pozdravi, svet
tako v naslovu in telesu.
Kot kaže, je zamik za nekaj časa,
dejansko obstaja hierarhija na spletnih straneh.
Jaz bi lahko s to isto odrezek HTML kot drevo,
razmišljanje nazaj na naših razpravah podatkovne strukture v C, kot sledi.
Imam nekaj posebnega skrbnika vozlišče, imenovano dokument vozlišče,
in bomo videli analogno o tem v JavaScriptu v trenutku.
Prvi otrok in edini otrok, ki v tem primeru je oznaka HTML.
Ni neposrednih kartiranje DocType.
To je posebna stvar, zato bi šele prezreti, ko gre za te DOM,
Ta dokument Object Model drevo.
Obvestilo, da je oznaka HTML, ki sem jih prikazuje poljubno kot pravokotnik,
Ima 2 otroka: glavo in telo.
>> Tisti, ki so podobno sestavljen kot pravokotnike.
Zato je pomembno, da slikovno glava je na levi strani telesa.
Pomeni, da glava pride prvi na drevesu.
Torej je dejansko naročanje na drevo, ko jo pripravi kot je ta,
čeprav so oblike in malenkosti so poljubne.
Vodja medtem ima enega otroka, imenovano naslov,
in naziv dejansko ima svojega otroka, ki je "Pozdravljen svet",
ki sem namenoma pripravila kot elipsi tukaj, da bi se nekoliko razlikuje od pravokotnika.
Ta območja so elementi, ker je zdravo, svet je res besedilo vozlišče.
Torej, to je vozlišče v drevesu, ampak to je drugačna vrsta vozlišča
zato sem ga narisal samovoljno drugače.
Podobno se telo ima otroka z imenom Zdravo, svet, kot tudi,
tako različna vozlišča, čeprav so si po naključju enako besedilo,
vendar sem ga sestavi z isto obliko. Torej, koga briga?
No, kaj je lepo, o HTML, da pa je vseeno to hierarhično naravo.
In kaj je lepo o JavaScriptu, in zlasti knjižnic, ki so na voljo
in priljubljena, kot so jQuery, se lahko pomikate drevesno strukturo tako neverjetno preprosto.
Vsak od stvari smo naredili v C s kazalci in vozijo dreves in rekurzivnem na vozliščih
levo otrok na desni otroka, naenkrat lahko nekako samoumevno
kot neverjetno prosveti, če ne bit frustrirajuće
vendar še zdaleč ne učinkovit način, da gredo o programiranju.
In tako pri višjih programskih jezikov, kot so JavaScript
bomo mogli pluti to drevo veliko bolj intuitivno.
>> In res sintaksa se bo dobro poznala.
Če še niste videli, JavaScript prej, to je res lepo reference
Iz Mozilla ljudje, ljudje, ki bi Firefox,
zato vas prosimo, da pregledate, da na vaše udobje.
Kaj boste našli - in ti preparati so enaki, kar smo drugi dan -
prav tako ni več glavni.
Torej, ko ste napisati program v JavaScriptu, ni glavna funkcija.
Pravkar ste začeli pisati kodo.
Toda ključna razlika med JavaScript in C in PHP
je, da medtem C in PHP so bili doslej izvedena strani strežnika
ga aparata je v tem primeru, ali bolj na splošno na strežniku,
Javascript by design je običajno izvajajo z brskalnikom.
Z drugimi besedami, lahko pišete JavaScript kodo, kot sva kmalu,
na strežniku v aparatu, ampak ga vključuje med HTML, CSS, med svojim,
med vašimi GIF in vaše PNGs in vaše JPEGs
tako da, ko uporabnik obišče vašo spletno stran, če uporabljate JavaScript,
kode JavaScript, ki prihaja iz strežnika v brskalniku
in to je brskalnik, ki ga dejansko izvaja.
Torej, to je smiselno posledice za celo intelektualne lastnine.
To je nekako neumno, da niti razmišljati o zaščiti vaš IP naslov, ko gre za JavaScript kodo
ker po naravi jezik postane to običajno izvajajo brskalnika strani.
>> Lahko ga Pomutiti, kar pomeni, da lahko bi bilo videti noro in grda
brez presledkov, grozne imeni spremenljivk, da bi bilo težje za ljudi, za krajo intelektualne lastnine,
ampak ključno je, da se izvede brskalnika strani.
Čeprav kot prahi se lahko uporablja Javascript strežniški strani,
najpogostejši primer uporabe zdaj še v brskalniku.
In tukaj je, kako izgleda. Tukaj je po-if-drug konstrukt, tako kot C, tako kot PHP.
Tukaj je Logični izraz, ko "ali" 2 stvari skupaj.
Tukaj je, ko "in" 2 stvari skupaj.
Tukaj je stikalo za izjavo, ki je podobna PHP
v tem, da lahko preklopite na različne vrste vrednosti.
Loops podobno lahko for zanke tukaj, ki so enako strukturirani tako, da tisto, kar smo videli doslej.
Medtem ko zanke, kar imamo, medtem ko je zank.
Spremenljivke, kdaj tako nekoliko drugačna.
Saj ugotovi, spremenljivke, kot si ti v PHP in C,
vendar je prav tako šibko vnesli JavaScript.
Vi ne določajo, int ali float ali niz ali kaj podobnega, ki ponavadi.
Določite lahko var.
Saj ni treba navesti var, vendar pa ima posledice, če ne boš.
Ponavadi, če izpustite var, pomotoma ustvariti globalno spremenljivko namesto na lokalni ravni.
Torej, kaj mi predlaga, da se skoraj vedno samo rečem var in nato ime spremenljivke.
To ni tip, to je samo za var spremenljivko.
To bi bilo na primer, ali je to 123 ali "Zdravo, svet".
Polja so prisotne in sintaktično podobna PHP.
Jaz bom rekel var številk in potem uporabite oglate oklepaje ponovno prijaviti spremenljivko
katerih tip je matrika, ki ima te posebne številke v njej ločene z vejicami.
In potem končno, to je edini, ki res izgleda drugače.
Spomnimo se, da bi v PHP, ki smo jih implementirali asociativni niz za študenta
Zamyla kot da bi izgledala takole, če je spremenljivka imenovan učenec.
Oklepaju pomeni, prihaja niz.
>> Dejstvo, da sem ne uporabljate številske indeksov, ampak strune - id, house, in ime -
pomeni, da je to asociativni array,
in te puščice z enačajem in kotni nosilec
pomeni, da je ključ "id", vrednost 1;
Ključ je "hiša" je vrednost Winthrop House;
Ključ je "ime", je vrednost Zamyla Chan.
Torej je 3 tipke v notranjosti te povezovalne matrike, od katerih vsak ima svojo vrednost.
Videli smo, da je v pset 7, ali pa takoj, ko se bo v isti ideji JavaScript,
ampak to bo videti takole.
Torej var študent - ni znak za dolar in ne omenja, vendar še vrsto var -
enaka in odprite zavitih oklepajih, ker v JavaScript, če imate parov ključev vrednost,
boste dejansko uporabili nekaj, kar ti predmet.
In morda tiste, ki si lahko APCS ali podobno, opozarjajo predmetov iz Java
ali podobne jezike.
JavaScript ni Java, najprej.
Bilo je namerna odločitev leti nazaj oblikovanje knock off nekaj drugega, ki je bil priljubljen,
njegovo ime, čeprav nima zveze bistveno, da se Java.
Javascript mora predmetov in jih ustvarite s pomočjo za zapis oklepaja kodrasti.
Skupaj objektov v JavaScriptu so precej enakovredne združevanja v PHP nizi
ko gre za shranjevanje podatkov znotraj njih.
>> Ampak še močneje v JavaScriptu lahko povežete zlahka funkcije
znotraj objekta, in čeprav lahko to storite tudi v drugih jezikih,
to je precej pogost vzorec, kot bomo videli.
Skratka, ta predmet predstavlja študenta, ki je še posebej Zamyla,
in to je podobno pojmovno, samo sintaktično drugačen od tega.
Naj se dejansko uporabljajo JavaScript v datoteki.
Izkazalo se je, da je scenarij tag.
Videli smo slogovno oznako, in smo videli tudi druge oznake HTML.
Skript tag bo dejansko vsebuje nekaj kode JavaScript.
Naj gredo v napravo, kjer imamo nekaj izvorne kode preveri napredek.
Nisem je objavljen na spletni strani, ampak bom naredil, da po pouku.
Odprimo to eno, blink.html.
Nazaj v 1990-ih, se je dobesedno oznaka HTML besedilu utripa tag,
in to je bil eden od najbolj čudovito overused oznake na internetu
, s katerim želite obiskati nekaj 1990 stran slog spletu in boste lahko videli besedilo, vam utripa, kot je ta,
rezultati Marquis oznako, ki je besedilo gre takole.
Eden izmed redkih trenutkov, ko je svet dejansko dogovoril o spletni standard,
vsi čez krov ubil utripanja oznako izpred nekaj let.
Lahko pa ga oživljati z JavaScriptom kot dokaz moči imate
če lahko napišete program znotraj spletne strani.
Najprej gremo preskočimo nove stvari in se osredotočite le na staro.
>> Tukaj je stara stvar v tem primeru.
Imam oznako HTML, glavo tag in naslovno tablico.
Potem sem imel telesne oznako tukaj z div, ki odpoklic je le pravokotne delitev stran
, ki sem jih dal edinstven ID samovoljno za "pozdrav", da,
samo zato, da imam edinstveno način se nanaša na to, da je nekaj zelo preprostega besedila:
Zdravo, svet.
Zdaj pa me poiščite na vrh te datoteke in videti, kaj je novega.
Prva stvar, ki je novo, top je script tag,
in znotraj obvestila script tag sem razglasil funkcijo.
Za prijavo funkcijo v javascript, precej podobno PHP,
dobesedno napisati funkcijo, potem pa ime funkcije, oklepaji,
in morda nekaj argumentov, če se sploh.
Potem pa sem dobil opornico kodrasti kot običajno, in zdaj imamo nekaj nekoliko novo kodo,
pa poglejmo, kaj to pomeni.
Torej var div, to samo pomeni, da mi spremenljivo ti div.
Lahko bi ga imenovali foo, vendar sem želel, da se imenuje div
zaradi razlogov, ki bodo jasno sekundo.
Potem se je izkazalo v JavaScript - in to je JavaScript kodo vgrajeni v moji spletni strani -
obstaja posebna globalna spremenljivka sort, imenovanih dokument.
JavaScript je dejansko objektno usmerjen jezik.
Mi ne bo šel v podrobnosti pri 50, kaj to pomeni,
vendar za zdaj vemo, da je objekt precej kot struct.
Kot smo videli, daleč nazaj, ko se v eni izmed prvih problema postavlja
kjer smo pripravili veliko informacij v struct,
Podobno se dokumentira posebno struct, ki prihaja z brskalnikom,
prihaja s katero koli spletno stran. To ni nekaj, kar sem ustvaril.
Znotraj tega dokumenta strukture, čeprav niste samo podatke
vendar imate tudi funkcije.
>> In vsakič, ko ima funkcijo znotraj strukture, notranjost objekta,
to se imenuje metoda. Ampak to je isto.
Metoda je funkcija, ki prav tako se zgodi, da je notri kaj drugega.
Torej to pomeni, da ta posebna globalno spremenljivko, imenovano listino
je funkcijo imenovano getElementById, da dobesedno ne da.
To bodo dobili element iz DOM, Document Object Model drevo,
, katerega številka je v tem primeru pozdrav.
Z drugimi besedami, ves ta čas smo porabili za podatkovne strukture prihaja v igro tukaj.
Ta podoba DOM, da smo imeli pred nekaj trenutki,
čeprav je stran malo drugačna, če bi imel div na tej sliki,
kaj document.getElementById vrnil k meni, bi dejansko lahko kazalec
v pravokotniku v drevesu, sklicevanje na pravokotnik v drevesu.
Torej, to je tisto, kar pomeni, da dejansko poklicati eno od teh funkcij.
V tem primeru še enkrat, da je div. To ni telo ali naslov.
Torej, poglejmo, kaj sem potem naredil s tem div zdaj, da ga imam v notranjosti te spremenljivke imenovane div.
Izkazalo se je, z JavaScriptom imate možnost, da Primanjkuje CSS vaše strani dinamično.
Do sedaj so vsi SPD smo opravili, čeprav omejena, je v slogu atributi,
ali kje drugje smo pripravili CSS?
Nekako sem razvajen tem. V slogu oznako na vrhu datoteke.
Ali je bilo tretje mesto v?
>> Zunanja datoteka, nekaj. Css.
Torej, to so 3 mesta, ki smo jih naredili CSS doslej
vendar ulov je, da smo težko kodirane vse.
Odločili ste se, kot si skočil v pset 7, smo se odločili pred predavanje, kaj bi bilo naše CSS.
Toda, če želite spremeniti CSS, lahko dejansko narediti, da
ko ste dejansko programskega jezika.
CSS, HTML - ni programski jeziki. JavaScript je.
Tako se izkaže, da takoj, ko imate eno od teh motivov iz drevesa
imenujemo DOM, ki jih je sam nekaj podatkov v njej.
Torej div, da sem zgrabil z drevesa, je tisto, kar bomo poklicali nepremičninah znotraj nje
imenuje slog in slog lastnost je sama lastnost imenovano vidljivost.
Rad bi vedel to samo z iskanjem uporabniškega CSS priročnik.
Izkazalo se je, da je vidljivost CSS lastnost, da ne, kaj piše.
To naredi nekaj vidni ali ne, vidna ali ne.
In kako to, da je to.
Jaz programsko sprašuje, če je skrit prepoznavnost tega div,
Kaj lahko spremenim, da? Vidno.
Drugače, če je vidljivost to stran ni skrito, logično mi bi bilo skrito.
Nimam pojma, zakaj je vidna in skrita in ni viden in neviden.
To je bila slaba odločitev, načrtovanje poti.
Ampak to so res nasprotja v CSS: vidna in skrita.
Vse to pa je, to pomeni spremembo CSS moje datoteke in tam, tu in tam
za to posebno div.
Ampak spet, to je funkcijo imenovano utripa. Ko je funkcija utripa poklical?
Izkazalo se je, da obstaja še ena posebna globalna spremenljivka se imenuje okno,
pisane v duhu dokumenta, vendar pa dokument, ki se nanaša na vašo spletno stran,
kot drevo DOM, HTML, ki ste ga poslali iz strežnika
Okno se nanaša na kroma okoli njega, naslov bar, naslov bar,
in vse te stvari okoli vaše spletne strani.
>> In izkazalo se je, da je okno objekt ima posebno funkcijo v njem pa se imenuje setInterval
da ne kaj piše.
Njegova naloga bo interval - v tem primeru vsakih 500 milisekund -
in predvidevati, kaj se bo naredil vsakih 500 milisekund?
To se dogaja, da je izvajanje funkcije utripa.
In kaj je lepo tukaj je, da bi jih lahko storili v C, čeprav nismo storili.
C ima nekaj, kar ti kazalci funkcijo, kjer lahko prenese naloge v okolici
kot argumente.
Podobno je v JavaScriptu lahko podaš ime funkcije v drugo funkcijo.
In opazil, kaj delam. Jaz ne delam tega.
Če sem dal oklepaje po trenutku, bi to pomenilo, pokličite utripanja funkcijo.
Če jih izpustite, kar pomeni, da je tukaj utripa funkcija
tako da lahko setInterval pravijo vsakih 500 milisekund.
Torej končni rezultat, krute čeprav je, da če grem na localhost in pojdite na blink.html,
Sedaj imam to dogaja znova in znova.
In če bi dejansko Preglejte Element, da vidimo, če lahko to vidimo.
Naj Preglejte element, naj se pomaknite navzdol samo malo,
Naj izberejo Elements več tukaj in si oglejte DOM notranjost inšpektorja Chrome.
To je dobesedno spreminja in nazaj na vsakih 500 milisekund.
Če gremo na naš prijatelj Nate,
Če ste se kdaj spraševali, kako to deluje, podobno idejo v intervalu,
Nate, ampak je dejansko tako zelo učinkovito uporabo barv v tem primeru tukaj.
Torej, kaj še lahko dejansko opraviti s tem?
Naj odprejo še en primer, in poskusite nekaj
to je programsko še bolj koristno kot bi se stvari začnejo utripati.
Naj gredo v našem oblike danes in šel v form0.
To je najgrša možna oblika, da sem lahko prišel do,
in mi dovolite, vam pokažem, kako izgleda v brskalniku.
>> Naj gredo v localhost / oblike, in to je form0.
To je super grda HTML obliki, ki je nekaj polja za e-pošto, za geslo,
geslo, nato pa malo polje, da se strinjajo nekateri pogoji.
Ulov je, če moram obiskati ta obrazec, in ne želim, da dam svoj e-poštni naslov,
Ne želim, da se strinjajo s pogoji morda lahko kliknem Registracija
in to mi omogoča, da s pomočjo anyway.
To se zgodi, da jih bo poslal neumno datoteko PHP pozval dump.php.
Vse to pa je izpisal vsebino $ _GET samo za diagnostične namene.
To je bilo tisto, kar je bilo predloženo uporabnik šele zdaj.
Ampak, da smo dejansko želijo potrditi uporabnika pošiljanje obrazca.
Naj gredo v različici 1.
To je form1.html. Zdi se, estetsko prav tako slabo, ampak obvestilo, kako fancy je.
Če sem kliknite Pridruži brez sodelovanja, dobim kričala.
"Moraš vnesti e-poštni naslov."
V redu. Torej, naj poskusim. Torej malan@harvard.edu. Jaz ne potrebujem geslo.
Registracija. "Morate zagotoviti geslo." V redu.
Torej bom zagotovil geslo škrlat. Registracija.
"Gesli se ne ujemata." Zdaj pa moram vnesti Crimson tukaj.
Po nesreči sem preveril to. Registracija.
"Moraš se strinjam s pogoji in določili." V redu. Strinjam se. Registracija.
In zdaj mi pokaže diagnostični izhod tam.
>> Torej, kaj se je pravkar zgodilo?
Mi smo imeli to možnost za potrditev obrazca vloge.
V bistvu, če si se potopite v pset 7, tam je funkcija opravičiti
, ki omogoča zelo enostavno kričati na uporabnika s sporočilom na zaslonu.
Jaz sem z nekoliko drugačno mehanizem opozarjanja funkcijo,
ki ni funkcija, ki se je nasmehnil ob ker je zaradi tega zelo grdo sporočil uporabnikov.
Ampak poglejmo, kaj delam tukaj.
To je form1.html, in opazil, da imam nekaj zelo znano sintakso:
telo tag, tag oblika, ukrepi lastnost, atribut metoda.
Ampak opazil sem dal svoj obrazec edinstven ID za udobje.
Potem pa sem dobil e-poštni polje, katerega tip je besedilo,
polje za geslo, katerega tip je geslo, potrditev polje, katerega tip je geslo,
in nato polje, katerega ime je dogovor tukaj, tip je potrditveno polje.
In potem imam gumb Pošlji.
Toda opazil na vrhu kaj več nimam.
Najprej, obstaja še druga uporaba scenarija oznako.
Če imate nekaj kode JavaScript v drugo datoteko, tako kot s CSS jo lahko vključite.
In to storite z virom scenarija, nato pa opazil, da sem očitno povezavo
da googleapis.com na zelo dolgi poti, vendar je njihovo ime datoteke se konča v jquery.min
za vsaj js..
jQuery je super priljubljena knjižnica za JavaScript, da samo naredi JavaScript
Vse bolj prijazna za uporabo.
To je dejansko postal de facto standard.
Torej, čeprav je tisto, kar boste kmalu videli, ni čisto Javascript per se,
je knjižnica na vrhu JavaScript toliko, kot je CS50 knjižnice je plast
na vrhu nizko stopnjo oznako C, dejstvo pa je, skoraj vsakdo na internetu ne uporablja.
Torej ne gre za usposabljanje kolesa. To je samo najboljša praksa v teh dneh.
Zdaj opazil, da je pod mojo scenarij tag, in opazil, kaj sem naredil tukaj.
Izkazalo se je, da jQuery pa nekaj malo fancy.
Javascript mora dolar znake, vendar so brez pomena.
>> So kot črko A ali B ali C.
jQuery je le sprejela konvencijo ali vrsta položenega trdijo, da dejstvo,
da bo $ njihov poseben simbol.
Torej, ko boste naložili to globalno datoteko JavaScript tukaj z oznako skript,
imate dostop do posebnega globalne spremenljivke, ki se imenuje $.
To je bolj pravilno imenuje jQuery, vendar to ne izgleda približno tako seksi kot $.
Toda $ nima posebnega pomena. V PHP je imela poseben pomen.
Morali ste ga imeli pred spremenljivko.
To je le seksi stvar, ki se je naprej.
Kaj se dogaja tukaj?
Obvestilo sem mimo, da jQuery funkcije svojo globalno spremenljivko dokument
in potem bom poklical. pripravljena.
Kaj jQuery bistvu pa je to vam omogoča, da se nekatere stvari vanilije JavaScript
kot dokumentarno objekta, okna objekt,
in če ga prenese v na jQuery funkcije -
in spet, mora biti jasno, da je to funkcija je jQuery -
kaj počne, je, da se vrne v vas, posebno različico dokumenta
ki ima več funkcij, povezanih z njim.
Torej, v surovi JavaScript ni pripravljen funkcijo,
ampak, če se boste peljali dokument jQuery funkcije prvič,
se vrne v vas, posebno različico dokumenta predmeta
da ima več fancy funkcij.
In to je razlog, zakaj ljudje všeč. Samo naredi stvari lažje narediti, saj smo na tem, da vidim.
Torej, kaj to vrstico kode pomeni?
Ta vrstica kode tukaj pomeni, ko je dokument pripravljen -
z drugimi besedami, ko je brskalnik končali obravnavo te datoteke vrha do dna -
pojdi naprej in izvedite funkcijo.
Kaj je res zanimivo, v JavaScript - PHP in ima tudi to -
je anonimne funkcije.
V JavaScriptu lahko ugotovi funkcije, ki nimajo imena, vendar pa imajo telo.
Obvestilo, kaj se dogaja.
>> To je funkcija je pripravljen, in to samo pomeni, naredite naslednje
ko je celotna spletna stran pripravljena, ko ga je prebral od strežnika.
Kaj želite narediti? Rad bi izvršitev kos kode.
Obvestilo, da ne želimo, da zaženete to kodo takoj.
Če sem to izpustite, bi to pomenilo, takoj začne izvajati teh vrstic kode.
Toda dejstvo, da sem rekel, ne, ne, ne, to zaviti v anonimni funkcije, kot je ta
sredstvo ne izvede še, da pokličete na koncu.
To smo lahko videli pred nekaj trenutki v našem prejšnjem primeru obliki.
Kaj naj rečemo funkcija sčasoma 500 milisekund kasneje? Blink.
Torej, ista ideja.
Še enkrat, tudi če izgleda malo čudno, samo da za zdaj o veri
, ki jo bo razglasila za anonimno funkcijo, ki je na koncu z imenom,
preprosto napišite function () {
Torej, kaj koda bomo na koncu usmrtitev? Naslednji.
Tudi to izgleda malo novega, vendar to pomeni, da je tukaj jQuery funkcije,
in to sedaj je bližnjica.
Ta odlomek HTML na dnu zaslona seveda ima nekaj dreves zastopanje.
To ni to. Ta stran je bolj zanimivo kot to Pozdravljen svet npr.
Vendar pa obstaja nekaj dreves, ki ustreza tej HTML.
To bi bilo bolečine v vratu, da bodo morali izvajati neko rekurzivno funkcijo
začeti na korenski vozel, nato pa je bil vozlišče, katerega številka je registracija.
Torej, kaj naredi jQuery super enostavno za nas je dobesedno to.
Pojdi in me karkoli div ali kakršni koli obliki, ne glede na HTML element
ima ID registracijo.
To je enakovredno document.getElementById ("registracija").
>> Zakaj ljudje radi jQuery?
Ker je krajša s tipom. Ampak to je vse kar je. To je ista ideja.
Dajte mi oznako, katere številka je registracija.
In ko je trdila, da oznaka, ki se zgodi, da je obrazec,,
iti naprej in zaženete to kodo.
Dajmo torej 1 glej zdaj, kako delamo obrazca potrditev.
Sintaksa je sicer skrivnosten na prvi, ampak kaj se dogaja?
Če ta vrstica kode je res, bom kričati na uporabnika, da zagotovi svoj e-poštni naslov.
Torej, kaj je to vrstico kode?
$ Pomeni jQuery. Zdaj opazil.
To je nekako tako kot CSS.
Če ste vrgli v CSS še, boste vedeli, da to pomeni element, katerega številka je registracija.
Prostor pomeni najti otroka ali potomec registracijo, katerega ime je vhod.
In potem ta stvar v kvadratnih oklepajih je malo filter.
In tudi če izgleda ta skrivnosten, to samo pomeni, pojdite na obrazcu, katerega številka je registracija
pojdi na notranji strani vhodnih elementov tistega, katerega ime je e-pošta,
in nato dobil svojo vrednost, ne glede na njegovo vrednost zgodi, da bo -
asdf, če je to vse, sem tipkal ali malan@harvard.edu, če je to tisto, kar sem tipkal.
Torej, če je vrednost e-obrazca področju == nič, kričati na uporabnika.
Drugače, če je vrednost v polje za geslo == nič, kričati na uporabnika.
>> Drugače, če je vrednost v polje za geslo ne enaka vrednosti za potrditev polja,
, ki je bila druga oblika element, kričati na uporabnika.
In potem na koncu - in to je tudi nekaj novih sintakso sama,
ampak, ko ste videli, da je vsaj malo bolj razumno -
if obrazec, katerega številka je registracija vhodni element, katerega ime je sporazum
in se preveri, da gredo naprej in kričati na uporabnika.
Zato sem popolnoma priznati da je to popolnoma prepričljivo na prvi pogled.
To je veliko novih sintakse. Ampak vse jQuery sledi tovrstnih vzorcev.
In po pravici povedano, nisem niti vedel, da to obstaja do pred nekaj minutami.
Jaz Googled: "Kako lahko preverite, ali je polje preveriti v jQuery?"
in to je sintaksa, ker obstaja več načinov za to početje
z dejanskim surovega kode JavaScript.
Tako kot prva stran Set Problem 7 poudarja,
pset 7 je zelo vaja v sami zaženejo
kjer smo za vas, upam, konceptualni okvir, s katerim bi odpravo pset.
>> Toda, kot se pogosto zgodi pri izdelavi spletnih strani, je odvisno od vas res na okoli suniti,
vključi dela kode in primere iz spleta, tako dolgo, kot ste jih navajajo
V skladu s pravili na tem prvem listu,
in spoznali, da je učenje HTML, CSS, JavaScript in celo SQL
je res mišljeno, da bo to na domu izvaja kot smo začeli, da se te vrste usposabljanja s ceste.
In spoznali tudi tam je toliko bolj stvari, ki jih lahko naredite s spletnim brskalnikom.
Notranjost je večina teh elementov obstajajo druge stvari, imenovane rutine za obravnavo dogodkov.
In čeprav smo samo pogledal tiste pozval onsubmit in onready,
lahko stvari kot onkeydown, onkeyup,
kot takrat, ko uporabnik dotakne na tipko lahko poslušate na to in navzgor.
Gmail ima bližnjice na tipkovnici.
Kako Google izvaja bližnjice na tipkovnici, kot C za sestavljanje?
Poslušajo za dogodke, kot se imenujejo, kot onkeypress ali onkeyup in onkeydown.
Če ste kdaj gibala miško čez nekaj možnosti menija
in kar naenkrat, voila, meni se zdi, ali grafiko spremeni barvo,
kako se to počne?
Namesto da bi poslušal onready ali onsubmit, poslušaj za onmouseover ali onmouseout.
>> Torej na kratko, s temi enostavnimi osnove, ki smo jih začeli praska površino danes
in bomo potopili še, da v sredo, imate vedno bolj
Pooblastilo za izvajanje vrste stvari, ki jih boste že seznanjeni.
Torej, kaj je tam konec, mi pa bomo še naprej to sredo.
>> [CS50.TV]