[Powered by Google Translate] [Tjedan 9]
[David J. Malan - Sveučilište Harvard]
[Ovo je CS50. - CS50.TV]
U redu. Dobrodošao natrag. Ovo je CS50, a to je početak tjedna 9.
Danas ćemo se usredotočiti posebno na dizajnu, ne više u kontekstu C
ali u kontekstu PHP i malo SQL i malo JavaScripta,
osobito prema kraju oba pset 7 i vaš konačni projekt.
U stvari, ako ste u tom trenutku u svom završnom projektu
gdje je vjerojatno od sat vremena ili tako prije vas barem počeo dati neki mislili
do konačnog projekta i vi razmišljate želite surađivati ​​s jednom ili dvije razredu,
ako imate problema s povezivanjem s kolegama rekao,
slobodno ispunite obrazac na cs50.net/partners/form.
To samo vas pita tko ste, kakav projekt razmišljate o tome,
gdje živite samo zbog logističkih razloga.
A onda, ako želite držati na oku tijekom sljedećeg tjedna ili tako proračunske URL tamo,
onda možete vidjeti samo za čitanje verziju Google doc
u kojem smo prikupljanje tu informaciju.
Dakle, ako želite raditi s nekim, svim sredstvima slobodno doprijeti do ljudi
putem tog mehanizma.
No, većina ljudi ne rade solo. To je potpuno u redu.
Dakle, ne osjećam da je to na bilo koji način obvezno.
U petak je bio samo ja i nekoliko momčadi ovdje,
prazna kazalište za najveći dio.
Tu su tri turista sjedi tamo gore, tako da je malo nespretan.
Ono što mi je govorio o bilo baze podataka i razgovarali smo o pset 7 malo.
A ako nije dogodilo uhvatiti da na videu samo još, to je u redu.
Ja ću pokušati definirati sve pojmove koji bismo inače uzimamo zdravo za gotovo
temelji se na petak predavanje.
>> No, danas ćemo pokušati da dođete do točke
da ne samo biti u mogućnosti učiniti nešto slično pset 7
ali stvarno razumijevanje što se događa ispod haube,
posebno nekih apstrakcija koje smo stavili u mjesto u functions.php datoteku
kako bi vaš život malo lakše, ali tako da se u konačnici razumjeti
tako da kada trening kotači ispasti u nekoliko tjedana još uvijek možete preživjeti
u stvarnom svijetu i učiniti ove stvari bez CS50 okviru ispod vas.
Ova $ _SESSION, za one od vas koji su upoznati
ili koji su već uhvatili video na petak, što znači SJEDNICA činimo
u PHP-based web aplikacija?
Ovo je superglobal varijabla, što znači da je sličan u duhu GET i POST
i nekoliko drugih, ali ono što je ova stvar korisno za?
>> Što je SJEDNICA koristi za? Da. [Student] Logging in
Molim? [Student] Logging in Logging in Doista.
U pset 7 smo pomoću ove sjednice superglobal olakšati prijave u.
I ono što je lijepo o tome superglobal je da je asocijativni niz.
Asocijativna polja, podsjetimo, samo je niz, ali čiji indeksi više ne moraju biti brojevi
poput 012. Oni mogu biti brojevi ili oni mogu biti čak i žice.
I tako, ako ste zaronili u pset 7 ipak, možda ćete se prisjetiti da smo pohranu ključnu zove ID
unutar ovog asocijativnog niza čija vrijednost je nešto poput 123 -
god trenutno prijavljeni korisnikov ID je.
Motivacija za to je da, čak i nakon što je korisnik posjetio localhost
ili moj website općenito, a onda sam prijavljni,
čak i ako oni ne kliknete na vezu ili se vratiti na moje web stranice za pet minuta
ili čak sat ili čak dan, ali oni ostavljaju preglednik otvoren prozor,
putem ovog superglobal mogu se sjetiti da su prijavljeni
>> Drugim riječima, to mi omogućuje da pohraniti nešto dugotrajno ništa želim o korisniku.
A možete misliti da je to stvarno kao utjelovljenje u košarici.
Mjesta kao što su Amazon očito vam staviti stvari u košaricu,
ali HTTP protokol koji pogoni web, je bez državljanstva
u smislu da kada posjetite web stranice,
za najveći dio nemate neku stalnu vezu s mrežom
između Vašeg preglednika i poslužitelja.
Čim ste preuzeli HTML i JPEG i GIF i sve to,
veza ide dalje i imate samo kopiju HTML i sitnica od poslužitelja.
Ali ako poslužitelj želi zapamtiti nešto o vama,
Teret je na poslužitelju da se zapravo snimati tu informaciju.
I tako ste programer koji imaju kontrolu nad poslužiteljem
možete staviti najviše sve što želite unutar ovog superglobal asocijativnog niza
i to će biti tamo sljedeći put korisnik ne vrati,
da li je minuta ili čak dana kasnije, osim ako oni zatvaraju svoje prozor preglednika,
na kojem trenutku SJEDNICA nestaje.
Dakle, to je prolazno skladištenje, to je nepostojani, a to je značilo da će otići
čim korisnik zatvara njihov preglednik - ne samo da je kartica, često cijeli preglednik,
čime učinkovito prijavom korisnika van.
Pa kako se ova stvar zapravo provodi?
Ajmo uzeti brzo pogledati na jednostavnom primjeru smo gledali u petak.
Za one koji nisu upoznati, to je kao jednostavan kao taj.
Ovo je web stranica čiji je jedini cilj u životu je da mi reći
koliko sam puta posjetio ovu stranicu.
Ovo je prvi put ovdje u ponedjeljak da sam ga posjetila, pa kaže 0 puta.
>> Ali, ako sam početak ponovnog ovu stranicu, ona kaže jedan put, dva, tri, četiri, pet,
i to će na kraju samo zadržati na brojanje gore, gore, gore, gore, gore
za svaki put sam zapravo kliknite Učitajte na njega.
Pa kako je to radi? Pusti me unutra ove datoteke pod nazivom counter.php.
Gornji dio je sve plave komentara, ali najzanimljiviji dio je ovdje.
Na liniji 13 zovemo ovu funkciju session_start,
i to je doslovno sve što trebate učiniti ako želite imati pristup
da je ovo posebna superglobal zove $ _SESSION.
To ga čini sve moguće, pa ćemo vidjeti u jednom trenutku kako da je sve moguće.
U liniji 16 obavijesti što radim.
Ako ključ, zove brojač - drugim riječima, vrijednost indeksa - "brojač"
postoji unutar ovog niza naziva sjednici, što onda radim s njim u liniji ispod?
Što je linija 18 radiš?
>> [Nečujno učenik odgovor] Što je to? [Student] Spremanje vrijednost. Dobro.
To je spremanje vrijednost koja je u SJEDNICE upravo sada u novom lokalnu privremenu varijablu,
$ Brojač u svim malim slovima.
Primijetit ćete da PHP već biti malo lijen ovdje.
Obavijest nemamo nikakve spominje int ili plovak ili string ili nešto slično
jer PHP slabo se upisali, pri čemu ne morate navesti tip varijable,
iu ovom slučaju ovdje nisam ni proglašen još.
Ja sam ga izjavljujući unutar tih vitičastih zagrada i za razliku od C, to je zapravo dobro.
Bez obzira koliko duboko ugniježđeni varijabla deklaraciju u PHP -
unutar kovrčave vitice, unutar kovrčave vitice i kao -
će u tom trenutku u vremenu postoji za ostatak programa,
za bolje ili za lošije.
Dakle, to je odmah postaje globalni čim ga definirati kao radimo ovdje.
>> Inače, ako ne nađem da postoji nešto u sjednici superglobal,
Ja sam očito inicijalizacije ovu varijablu brojač na 0,
time samo pod pretpostavkom da korisnik nikada nije bio ovdje.
I onda to naravno se povećavanjem brojač kako?
Ja sam ažuriranju vrijednost koja je unutar ovog asocijativnog niza
postavljanjem je jednaka bez obzira na brojač trenutno iznosi + 1.
Ako sam dođite ovdje dolje na HTML stranici, to je zapravo prilično jednostavna.
Sve što imam u tijelu ove stranice je: "Vi ste posjetili ovaj site, tako-i-tako puta."
A to je PHP konstrukt.
Ako to ne učinite <? =, Ovo je ekvivalent za učinkovito što funkcija?
To je stvarno odgovara nešto poput printf, što smo vidjeli mnogo puta u C,
iako kao što ste možda već znate iz spec. u pset 7,
ispis je također funkcija koja samo ispisuje nešto, to zapravo ne koristite format kodove,
i što zapravo može reći odjek kao dobro.
Oni su svi ikada tako nešto drugačije, iako je u konačnici neto učinak isti.
Dakle, ovo korištenje znaka jednakosti je samo vrsta elegantan način to rade
više jezgrovito nego što bi inače mogli.
Tako da je sve ovo mjesto radi. Ona ispisuje vrijednost brojača.
Kako je to sve zapravo događa?
Možete se prisjetiti tjedan ili tako počeli smo u potrazi ispod haube
na koliko je web stranica radi pomoću ovog inspektora karticu.
>> Chrome ima to iu Mac verziji, Windows verzije, pa čak i Linux verzija,
i Firefox i IE imaju slične mehanizme kojima ste ovaj ugrađeni u debugger
unutar browsera.
Idemo pogledati sljedećeg.
Imamo hrpu kartica ovdje, a podsjetimo da je lijevom jedna Elementi,
i bez obzira koliko godawful HTML i JavaScript je na stranici,
podsjetiti da s elementima kartici možete zapravo navigaciju HTML hijerarhijski
i lijepo i uredno.
Dakle, ako ste pokušavate naučiti iz web stranice kao što su Google ili Facebook
ili stvarno bilo koju web stranicu, shvatite da ste vjerojatno bolje
gleda izvornog koda na ovaj način, za razliku od gledanja sirovi izvor,
koji može biti nered, kao što smo vidjeli pogotovo na Google stranicama.
Dakle, ako sam umjesto kliknite na karticu Network ovdje,
ajmo vidjeti što se događa kada sam posjetiti ovu stranicu.
Prvo neka mi isprazniti predmemoriju.
Ja ću ići u Settings u Chrome, a zatim otići na Povijest
a zatim Obriši sve podatke o pregledavanju.
Možda se koristi za to i za druge svrhe, [smijeh]
ali kada je riječ o razvoju web stranice, to je zapravo korisno -
ako ste smijeha znate. [Smijeh]
To je zapravo jako koristan pri izradi web stranica jer je stvarnost
stvari kao što su cookies i stvari kao što su spremljene HTML datoteke, spremljene JavaScript datoteke
zapravo može postati velika glavobolja, jer ako iz bilo kojeg razloga
preglednik odluči da se cache neku datoteku i još ste napravili promjene u toj datoteci na poslužitelju
ali preglednik nije stvarno shvatio da je datoteka promijenila
i stoga ne zapravo ga ponovno preuzeti čak i ako kliknete gumb za ponovno učitavanje,
jedan od najvažnijih surefire načina da samo pazite krivnja nije s kodom,
to je s ponašanjem pregledniku, je da ide u ovdje u svom pretraživaču
i samo očistiti cijelu povijest, tako da nema zabune.
>> A onda, ako stvarno želite biti paranoični, zatvorite preglednik, to ponovno,
i onda bi bili sigurni da sve radi kako treba.
Dakle, u kratko, brisanje predmemorije je dobro kada se radi razvoj.
Dakle, ovdje imamo mrežu karticu.
Ja ranije posjetio tu stranicu 9 puta, ali dopustite mi ići naprijed i sada kliknite Reload.
I ja sam se vratio na 0.
Ajmo zapravo vidjeti kako to da je ovo SJEDNICA superglobal provodi.
Idem kliknite na jedan HTTP zahtjev koji je napravio,
i to za ispravljanje pogrešaka prozor mi omogućuje pogled iznutra toga.
Ovdje vidim samo odgovor od poslužitelja, što nije zanimljivo.
Vidio sam to u svakom broju načine.
No, ono što je zanimljivo tehnički su zaglavlja.
Ako sam dođite ovamo i usredotočiti se na zaglavljima zahtjeva i kliknite view izvor,
ono što ću vidjeti je doslovno HTTP zahtjev
samo da ode iz mog preglednika na poslužitelj,
GET biti operativna riječ i onda / counter.php čemu je naziv datoteke,
HTTP/1.1 samo kao verzija HTTP da moj preglednik koristi.
Ova linija je ovdje malo podsjetnik iz preglednika na poslužitelj ono što naziv poslužitelja
da želi razgovarati.
I onda ostatak to je ponekad zanimljivo, ali nije relevantan upravo sada.
>> Ovo je samo vrsta znatiželje.
Grobni iako ovaj niz je, svaki put kad preglednik posjećuje web stranicu
to je informiranje server koji browser koristite
i ono što operativni sustav koristite i što verzija istih.
Dakle, ako ste se ikada zapitali kako web stranice kao što su CNN i sitnica
znati što su postotci Mac korisnike na web, PC korisnicima,
IE korisnici, Chrome korisnici i slično, to je zato što sve naše preglednicima
Govore svaki pojedini website vani ono što jesmo.
To ne mora nužno sadržavati osobne podatke,
ali to ne reći ono što poslužitelj IP adresa i ono preglednika i operativnog sustava koji koristite.
Dakle, to je mjesto gdje je ta informacija.
No, ono što je još zanimljivije sada kada je u pitanju ova sjednica je odgovor zaglavlja.
Dopustite mi da kliknete pogledati izvor uz odgovor.
Što je zanimljivo ovdje je nekoliko stvari.
1, kad smo se vratili kod statusa 200.
Mi nikada vidjeti ovu šifru statusa, jer to znači da je sve dobro.
To doslovno znači ok, za razliku od nečeg drugog.
Što je broj mi ponekad vidjeti da je loše? [Student] 404.
404, datoteka nije pronađena, 403 možda se tetura po već,
što je zabranjeno, što znači da je zaboravio na chmod nešto, najvjerojatnije.
I tu je hrpa drugih.
>> Ovdje dolje, to je malo luda.
Ja stvarno samo pisao ovu sliku nekoliko minuta prije zalijepiti u gedit.
Zašto ovu stranicu isteći u 1981 prije nego što je stvarno bio web?
Što se događa tamo?
>> [Nečujno učenik odgovor] vrijeme pečat. Ali zašto?
To je pomalo proizvoljna, ali to je zapravo korisno.
Što to govori svom pregledniku je to PHP datoteke koje ste upravo zatražio je već istekao.
U stvari, to je istekao prije 30 godina.
No, što to zapravo znači?
To samo znači da sljedeći put kada korisnik posjeti ovu stranicu,
bilo pretovara ili upisivanjem URL u adresnu traku,
provjerite da li ići i dohvatiti novu kopiju njega.
To je svojevrsni primjer priručnu poprsje,
glupa riječ koja znači samo pokušava odvratiti preglednike
od zapravo caching HTML-a koji je bio poslan s poslužitelja
tako da ne slučajno pogodio reload i onda vidjeti istu verziju datoteke.
Vi zapravo želite da poslužitelj pošalje novu kopiju.
Dakle, činjenica da je 1981 samo znači da je to ono što uređaj odaberete
kao proizvoljnog datuma u prošlosti.
No, pravi sočan linija je sada ovo.
Čak i prije 50 vjerojatno ste nejasno upoznati s kolačićima.
Od sada, pogotovo među onima manje ugodno ili između,
što je Cookie u vašem razumijevanju upravo sada
iako smo o tome kako bi vaš razumijevanje više tehničkih?
Što je cookie? Da.
[Student] Informacije o korisniku, kao i ako ste ih napisao svoje korisničko ime ili nešto.
>> Dobro. To je informacija o korisniku, da li ste upisali su u svojoj korisničko ime već.
Kolačići su način kojim poslužitelji mogu sjetiti nešto o korisniku.
I ono što je stvarno Cookie je tekstualna datoteka ili neki slijed bajtova
koji je zasadio poslužitelju unutar vašeg preglednika,
i unutar tog spisa ili među onima bajtova je neka vrsta identifikatora.
Možda je to doslovno svoje korisničko ime, ali češće to je nešto više zagonetan izgleda
ovako stvar ovdje - bo8dal3ct i tako dalje - ovo je stvarno velika alfanumerički niz
da je stvarno samo značilo da se jedinstveni identifikator za vas.
Ili možete misliti o njemu kao svojevrsni virtualni ruke pečatom.
Ako idete na nekom klubu ili zabavnog parka, zapamtiti da ste zapravo platili
i otišao u, oni su stavili malo crveni naljepnicu na svoju ruku neke vrste,
i da podsjeća ljude na šalteru da ste već platili
i možete doći i otići kao što molim.
Kolačići su malo slični u duhu toga.
Kad sam prvi put posjetio ovu web stranicu, kao što sam učinio nakon brisanja moj cache,
web server, aparat u ovom slučaju, stavio pečat na svojoj ruci
čije se ime PHPSESSID, sjednica ID,
čija je vrijednost to stvarno dugo alfanumerički niz.
>> Tako da je sada vrsta ukrašen na ruci, tako da sljedeći put sam pogodio reload
ili ručno posjetite ovaj URL u pregledniku,
moj preglednik po definiciji HTTP će predstaviti ruke pečat
opet i opet i opet.
Dakle, iako poslužitelj ne mora znati tko sam ja,
oni barem znaju da sam isti korisnik ili barem, točnije, isti preglednik.
I tako je to u konačnici kako SJEDNICA superglobal provodi.
Poslužitelj nema pojma tko ste kada ponovo web stranicu za drugi ili treći put
osim ako predstaviti ovu ruku pečat.
A čim vam predstaviti tu ruku pečat,
web server suštini ide u malu bazu vlastitu
i provjere, ok, ja sam samo vidio ruku pečat korisnika bo8dal3ct i tako dalje.
Vidjet ću što informacije programer je pohranjena
unutar superglobal o tog korisnika,
i onda neka mi bi bili sigurni da se podaci ponovno je unutar SJEDNICE superglobal
tako da programer može ponovno pristupiti te podatke
čak i ako je bio postavljen neki minuta ili sati prije.
Dakle, drugim riječima, keksi, koji je dobio loš rap za neko vrijeme
zbog nesigurnosti u preglednicima i oni stvarno mogu povrijediti našu privatnost i sve ovo,
oni zapravo imaju veliku korisnost, jer bez njih
ste stalno bi se prijavom na svakoj stranici na Facebooku možete posjetiti
ili svaki Gmail e-mail ste pročitali, ako preglednik nije imala neki način sjećanja
da ste već provjerena.
>> Dakle, na taj način se kolačići šalju natrag i naprijed preko žice.
Druga zanimljivost o kolačića, pogotovo ovdje, je da je to potpuno čisti tekst.
Nema enkripcija se ovdje događa uopće,
i doista sam koristeći HTTP u ovom trenutku.
Jedan od naših izabrane trenutke u CS50, koji je sada dvije godine prije,
je oko vremena alat koji se zove Firesheep izašao.
To je bio slobodan komad softvera koji je izrađen od strane sigurnosnih istraživača
kao poziv za buđenje za zajednicu reći koliko atrociously provodi
određene provjere autentičnosti mehanizama na webu su.
Dakle, za neko vrijeme, Facebook je gotovo u potpunosti preko HTTP, HTTPS ne.
A čak i ako nemate pojma kako kripto radi, S je siguran
pa to znači da postoji barem neki enkripcija uključena.
Facebook je korišten za šifriranje korisničkih imena i lozinki,
ali čim ste gledali na vašoj ismijava ili vaše poruke ili vaše vijesti hrane,
sve to je nekodiran.
Tako je Gmail dok samo godinu ili dvije dana.
Svaki put kada prijavljeni, da, oni koriste sigurnu enkripciju,
ali nakon toga nisu. A zašto bi to moglo biti?
Zašto ne samo koristiti kriptografiju svih vremena u korištenju ovakvim slučajevima?
Što je to? Mislim da sam čuo nešto. [Student] Speed.
Brzina, zar ne? Postoje načini oko toga.
Ali, ako ste samo vrsta razmišljati o tome logično, ako šifriranje nešto,
morate učiniti barem malo više posla.
U pset 2 kada provodi Cezar ili Vigenere ili čak Crack,
Samo tiskanje niz je relativno lako.
Šifriranje i zatim ispisuje niz minimalno zahtijeva malo više posla.
>> Za super popularne web stranice kao što su Google i Facebook,
ako imate za napraviti više posla za svakog korisnika za svaku web stranici oni posjetiti,
samo da je potrebno više CPU vremena.
A ako vam je potrebno više CPU vremena, možda ćete trebati više poslužitelja,
što znači da možda treba više novca.
I tako već dugi niz godina to samo stvarno nije najbolje prakse.
Ljudi će koristiti SSLšifriranje samo kada im je potrebno da.
No, ispostavilo se, kao i ovog momka s Firesheep napravio super jasan,
kad ti dečki koji su trenutno na Facebook-u upravo sada -
Iz znatiželje, neka je vidjeti ako ćete Zlatna gore.
Ako ste na Facebooku upravo sada u nekim kartici, čak i ako to nije prvi plan,
je vaš URL HTTP ili HTTPS?
[Više studenata] S. S? [Smijeh]
Ok. Bilo HTTP? Samo jedan? Ok.
Dakle, svatko od nas može hack taj momak je Facebook račun upravo sada.
Za veći dio je to postalo uključen po defaultu, barem u nekim web stranicama.
I ne duljimo, ako je vaš web prometa nije kodiran,
ne samo HTML ići naprijed i natrag preko WiFis nekodiran,
pa ne stvari poput kolačića ići naprijed i natrag kroz zrak
bez bilo kakvog oblika enkripcije.
Dakle, ako imate samo malo programiranja pamet ili malo Googling vještine
pronaći slobodnog softvera koji radi to, sve što morate učiniti je sjediti u Starbucksu
ili sjesti u zračnoj luci gdje je općenito nekodiran WiFi
i samo gledati za ključne riječi kao što su set-Cookie: ili PHPSESSID
jer ako imate tehničke pamet samo gledati WiFi
za sve bitova koji toka kroz zrak za ovaj uzorak,
onda možete reći da je tipu PHPSESSID se dogodi da se bo8dal i tako dalje.
A onda opet, ako ste dovoljno tehnički pamet ili imate pravi alat,
onda možete jednostavno konfigurirati svoj preglednik za početak predstavljanja tu ruku pečat
na Facebook.com i Facebook samo će pretpostaviti da ste taj tip
jer svi znaju nije tko ste, ali da ste ovaj jedinstveni identifikator.
Dakle, ako vam ukrasti taj jedinstveni identifikator i prezentirati ga na web poslužitelju kao svoju vlastitu,
oni su samo ću vam pokazati te osobe vijesti feed
Ili da osoba koja je poruka ili ismijava.
>> I ja bih Googleu sada kako aktivirati HTTPS za Facebook možda.
No, to je stvarno kao jednostavan kao taj.
I tako Facebook i Google i kao dobivši stvarno dobar u tome,
ali držati oko vanjska strana sve više za sve web stranice koje posjećujete da ne koriste HTTP
i imaju neku vrstu osjetljive informacije o njima,
je li to financijski ili osobni ili slično.
Ako oni ne koriste to, vrlo vjerojatno može kolačići ovako biti vrlo lako ukraden
a zatim kovani, a to je upravo ono što Firesheep učinio.
Vi ne morate biti programer.
Sve što je morao učiniti bilo je priključak na Internet, preuzimanje ove besplatni alat,
i ono što će učiniti je da se prijavite i onda bi vam pokazati Facebook imena
od svi u Sanders, u ovom konkretnom demonstracije, oko vas
i sve što je morao učiniti je kliknuti na svoje ime, a softver automatiziran proces
od njuškanje taj kolačić, prikazujući ga na Facebooku kao svoju vlastitu,
i, voila, ti si prijavljeni
Dakle, ovo je jedan od onih "ne činite to" službeno.
Ako imate svoj vlastiti kućnu mrežu i želite prtljati, svim sredstvima,
ali shvatite to ne prijeći liniju na sveučilišnom okruženju.
>> No, cilj ovdje je stvarno naglasiti ne kako to učiniti
ali kako se obraniti od takvih stvari.
I trivijalno rješenje ovdje, iako je i sama je manjkav,
je stvarno smanjiti korištenje bilo mjestima koja ne koriste HTTPS stalno.
Dakle, web stranice kao što su Facebook i Google imaju sve okvire
gdje možete odlučiti za ovu vrstu stvar,
a banke su imali to godinama iz sličnih razloga.
Dakle, samo malo od straha faktor ako možemo. No, to je to ukratko.
To je, kako poslužitelj pamti tko ste.
I čim se mogu sjetiti tko ste, oni se mogu sjetiti ništa o vama
da programer je pohranjena unutar ovog posebnog superglobal zove $ _SESSION.
A za pset 7 smo ga koristite trivijalno samo sjetiti int,
naime jedinstveni ID korisnika koji je prijavljen u,
tako da znamo da ste bili tamo prije.
Sva pitanja onda na sjednicama ili kolačiće ili poput?
Firesheep ne radi, kao i više,
i morate staviti vaše računalo u posebnom promiskuitetnom modu
tako da zapravo sluša promet osim sebe.
Dakle, ako ste trenutno skidate Firesheep, shvatite to nije sasvim tako lako
kao što je nekad bio pokazati.
U redu. I ne to učiniti u Sanders. Učinite to kod kuće.
Baze podataka.
Jedna od stvari koje smo učinili u pset 7 vrlo namjerno
godine dajemo vam tablicu baze podataka uzorka za korisnike koji ima neke korisničke šifre
neki korisničkih imena i lozinki neke šifrirane njemu.
I kao što ćete vidjeti, ako već niste, ti si idući u morati promijeniti stolu malo.
Ti si idući u morati dodati neke cache svaki od korisnika u toj tablici,
i ti si idući u morati dodati još Povijest stol, portfelji stol,
ili možda nazvati to nešto drugo.
No, u smislu razmišljanja o tome kako to učiniti, ajmo otvoriti ovaj alat
koje smo koristili u petak, ali ako nepoznato, aparat dolazi s alatom
zove phpMyAdmin koji slučajno je napisan u PHP-u,
ali njegova svrha u životu, nakon što sam se prijaviti ovdje kao jharvard s grimizne,
je da će mi dati user-friendly način gledanja i mijenja moj baze podataka.
>> Baza podataka koja sam trčanje na aparatu se zove MySQL.
To je vrlo popularan, a to je besplatni open source baza podataka koja je predivno jednostavan za korištenje,
pogotovo s prednje završava ovako.
Ono što ovaj alat omogućava da učinim, na primjer, je guranje oko stolova.
Dopustite mi ići naprijed i učiniti.
U petak smo stvorili tablicu pod nazivom studenata koji je bio super jednostavna.
Ona je imala tri kolone - ID, ime i e-mail - a ja ručno umetnuti nekoliko redaka
poput Davida i Mike u ovom konkretnom primjeru.
Ajmo uzeti malo dalje, i pretpostavimo da želimo se sjetiti više
nego samo ime i e-mail o korisniku.
Dopustite mi kliknite Struktura ovdje na vrhu.
I opet, pset vas provesti kroz potrebnim koracima ovdje,
tako da ne brinite ako neki od ova je malo brza.
Onda idem kliknite ovdje.
Ja ću dodati neki broj stupaca nakon e-maila
jer želim dodati nešto poput kuće.
Zaboravio sam snimati učenika kuću.
Dopustite mi kliknite Idi, a sada imamo ovu formu da nažalost je malo široka s lijeva na desno,
ali ja ću nazvati naziv ovog polja kući,
i onda tip I sada moram birati.
Tako ćemo imati kratak razgovor o različitim vrstama u MySQL
jer dok PHP slabo se upisali i to vrsta igra brz i labav s vrstama,
u bazi podataka posebno je super važno da se zapravo koristiti tipkati u svoju korist
jer je jedna od stvari MySQL i druge baze podataka motora može učiniti za vas
se osiguralo da se ne stavi lažne podatke u bazu podataka.
To je vrsta slobodnog kontrole pogrešaka koje su Vam dostupne.
>> Za kuću mi očito ne žele da bude int, što je 32-bitni vrijednost u MySQL.
Napravili smo razgovarati kratko je u petak oko varchar, koja se zalaže za promjenjive duljine char.
Što je ovo? To vam omogućuje da odredite što želite da ovo bude niz neke vrste.
Vi stvarno ne znate unaprijed koliko dugo je to,
pa smo proizvoljno ću reći kuća Naziv može biti 255 znakova,
ali bi mogao ići s 32, 64 - neograničen broj stvarno.
No, prednost korištenja VARCHAR preko polja zove char je ono?
Samo intuitivno ako sam dođite ovamo, primijetiti da je char a tu je varchar.
VARCHAR je promjenjive duljine char; char je fiksna duljina char.
Dakle, samo na temelju toj definiciji, ono što je prednost ili nedostatak svakog od njih?
Drugim riječima, tko se brine o razlici, ili zašto bi vam je stalo?
>> Da. [Student] VARCHAR ima veću fleksibilnost, ali zauzima više memorije.
Dobro. VARCHAR zauzima više - Idemo vidjeti. Nisam siguran da sam čuo da je pravo.
Može li se reći da je još jednom?
[Student] Rekao sam varchar vjerojatno ima veću fleksibilnost, ali zauzima više memorije.
Zanimljivo. Ok. VARCHAR vjerojatno vam daje više fleksibilnosti, ali zauzima više memorije.
Potonji nije nužno istina.
To ovisi o kontekstu, ali hajdemo se vratiti na to.
>> [Nečujno učenik odgovor] Točno.
To je zapravo slučaj da char obično će koristiti više memorije
jer char, kao u C, kao i niza, to je niz znakova.
Dakle, ako ste recimo char polja duljine 255,
baza doslovno će vam dati 255 znakova.
A ako je kuća završi Mather i 6 znakova ukupno,
ti si gubit više od 200 znakova.
>> Dakle varchar učinkovito koristi samo onoliko znakova koliko je potrebno
do maksimalnog iznosa.
No, cijena koju plaćate je zapravo izvedba, potencijalno.
Ako unaprijed znate da su sve svoje žice će biti osam znakova -
Na primjer, pretpostavimo da zahtijevaju lozinke duljine 8 -
naopako korištenja char polja na prigodu, iako ne često,
je odrediti fiksnu duljinu za nešto poput lozinkom
jer sada se baza podataka može biti čak i pametniji.
Ako se zna da svaki char polja, svaki string u stupcu iste duljine,
li se vratiti obilježje izravnim pristupom.
Možete skakati među različitim char polja u tablici baze podataka
jer mislim baze podataka kao retke i stupce.
Dakle, ako svaki od nizova je iste duljine,
znate da je prvi je na bajtu 0, sljedeći je na bajtu 8
, a zatim 16 i zatim 24 i tako dalje.
Dakle, ako su svi nizovi su iste dužine, možete skočiti oko mnogo učinkovitije.
Dakle, to može biti prednost u pogledu performansi,
ali obično nemate luksuz znajući unaprijed,
tako varchar je put to ići.
Evo još jedan detalj koji još Facebook naletjeli na kraju.
Ints su veliki, a mi svojevrsno ih koristiti po defaultu bilo koje vrijeme želimo broj,
ali to je samo 32 bita.
>> I iako ne sasvim Facebook ima četiri milijarde korisnika sada,
tu je definitivno neki ljudi vani s više računa
ili račune koji su otvoreni, a zatim zatvoren,
i tako Facebook sama vjerujem prije nekoliko godina imao za prijelaz iz int
da, kao podesno zove, BIGINT, što je samo 64 bita umjesto.
Dakle, ovo je dizajn odluka.
Ti bi biti nevjerojatno sretan ako vaš konačni projekt pretvara pokretanja,
je 4000000000 i jedan korisnik, dati ili uzeti,
u kojem slučaju korištenja Ints moglo biti malo kratkovidan.
No, u stvarnosti, vaša korisnici stol je vjerojatno u redu s Ints.
No, za tako nešto pset 7, kao i vaše povijesti tablici,
možda ćete morati tisuće, milijuni korisnika, ako se razvije u etrade.com.
Dakle, dok se ne može imati više od četiri milijarde korisnika,
oni korisnici imate možda imaju više od četiri milijarde transakcija tijekom vremena -
kupuje i prodaje, a stvari u svojoj povijesti.
Dakle, ako vam je činiti predvidjeti - opet, to su dobri problemi imaju ako imate ovaj mnogo podataka -
ako ništa predvidjeti podatke premašuju veličinu int,
ide s nešto poput BIGINT je smjer nije dovoljno često donosi dizajnera
jer ljudi lik koji neće biti problem,
ali to je to lako odabrati nešto veći od toga.
Europski smo koristiti u pset 7, koji određuje fiksnu preciznost
tako da možete izbjeći pitanja koja uključuju pliva i dubl i realne i slično.
>> A tu je i neke druge stavke ovdje. Mi ćemo mahati naše ruke na njih u određenoj mjeri.
No, datumi, vremena svi imaju propisanu format u MySQL,
i prednost pohranu datuma kao datum, a ne varchars
znači da banka može zapravo ih formatirati u različitim oblicima,
hoće li SAD format ili europski format ili kao - kako god to želite -
puno učinkovitije nego ako su samo neki generički varchar.
A onda je neki drugi binarni, varbinary, mrljica.
To su binarni velike predmete, a također možete pohraniti binarne podatke
kao geometrijskih podataka u bazi podataka.
No, za nas, mi obično ćete stalo Ints i varchars i poput.
Hajdemo završiti ovaj primjer s kuće.
Kuća ću samovoljno reći će biti 255 znakova.
Zatim zadana vrijednost možemo to učiniti.
Mogli bismo po defaultu staviti sve u Mather doma, na primjer.
To je kako smo mogli navesti da baza
treba osigurati da netko uvijek ima vrijednost. Ali ću ostaviti da bude.
U stvari, za ljude koji žive izvan kampusa, a ne u kući,
možda sam zapravo žele odrediti da zadana vrijednost za kuće je NULL,
i onda moram provjeriti ovu kućicu i reći baze podataka je u redu ako korisnikov kuća je NULL.
>> Opet, ovo je još jedan obrambeni mehanizam možete staviti na mjesto
tako da uopće ne morate ga staviti u svoj PHP koda nužno.
Baza podataka će osigurati da su stvari ili nisu NULL.
I onda na kraju, atributi.
Nitko od njih su stvarno relevantna.
Binarni, nepotpisani - nitko od onih koji su relevantni za varchar.
Indeks.
Zna li netko ili zapamtiti ili imaju pogodak kao što je indeks
za nešto poput kuće?
Ovo je previše je zapravo važno i relativno lako dizajn odluka.
Za one koji još nisu vidjeli, u petak razgovarali smo kratko o primarnih ključeva.
U tablici baze podataka, Primarni ključ je polje ili stupac
koji jedinstveno identificira redaka u tablici.
Dakle, u trenutnoj tablici imamo iskaznice, imamo imena i e-mailove.
Koji od njih je najbolji kandidat biti primarni ključ,
čija uloga je jedinstveno identificiraju retke?
Vjerojatno ID.
Nedvojbeno, mi također mogli koristiti ono ipak?
Možda ste mogli koristiti e-mail, jer u teoriji je jedinstvena
osim ako se ljudi dijele računa e-pošte.
No, realnost je da ako koristite numeričku ID kao 1234,
to je samo 32 bita, dok je e-mail adresa mogao biti to mnogi bajtova ili to mnogi bajtova.
Dakle, u smislu učinkovitosti za jedinstvenih identifikatora,
tendira da bude dobra praksa samo koristiti int
čak i ako imate neki string kandidata koji nedvojbeno mogao koristiti.
>> Za nešto poput kuće, to ne bi trebao biti primarni ključ
jer tada je samo jedan čovjek mogao živjeti u Mather i jedna osoba u Currier i slično.
Isto tako, to ne bi trebao biti jedinstven.
Razlika između osnovnog i jedinstven je da u slučaju našeg trenutnog tablici,
ID bi biti primarna, ali email nije primarni razlog za mi samo spominje -
nastup - ali to još uvijek bi trebao biti jedinstven.
Dakle, još uvijek možete provesti jedinstvenost bez tvrdnju
da je super važna primarna polje.
Ali ovo je vrlo korisno: Indeks.
Ako znate unaprijed za svoj konačni projekt, za pset 7, ili u cjelini,
da je ovo područje kuća će biti nešto što tražiti na puno
pomoću select ključnu riječ ili nešto drugo,
onda preventivno mogu reći bazu podataka raditi svoje čari
i pobrinite se da to stvara u sjećanju bilo koji ukrasni strukture podataka potrebno
kako bi ubrzali pretraživanja na temelju kuće.
Možda će koristiti ljestve tablicu, možda će koristiti povezanu listu.
U stvarnosti, on ima tendenciju da koriste stablo, često struktura naziva B-stablo -
nije binarno stablo, ali B-stablo - što je vrlo širok stablo
koje ste mogli vidjeti u klasi kao CS124, klasne strukture podataka.
No, u kratko, ne morate brinuti o tome kada koristite Smart baze podataka softver.
Možete samo reći, "Indeks ovu oblast, tako da mogu potražiti na njemu učinkovitije."
>> Ako napustite ovu off, a vi pokušajte potražiti svima u bazi podataka koji živi u Mather,
to će prenijeti u linearno pretraživanje.
A ako imaš 6000 undergrads sve koji žive u nekoj kući,
ideš tražiti cijelu tablicu pronaći Matherites,
a ako ti kažeš indeks, nadamo se da će biti nešto u blizini logaritamskoj pretraživanje
kako bi pronašli one vrste učenika.
Ovo je samo slobodan značajka za uključivanje,
iako to ne dolazi po cijeni od nekih iznosu od prostora.
Na kraju, auto-prirast, to AI polje,
što samo znači ako je int, a vi ne želite da se brine za povećanje sami
svaki put tu je novi korisnik, provjerite da
i svaki korisnik koji se umeće automatski će dobiti novu iskaznicu.
Ajmo kliknite Spremi, a sada idemo pronaći grešku s ovim dizajnom.
Ako odem u Pregledavanje, obavijest da su Mike i moja kuća je NULL.
Ja mogu koristiti phpMyAdmin urediti ovu ručno.
Ja mogu ići u ovdje i putovanja u Mather, a zatim pritisnite Enter,
i sada primjetiti stol je drugačiji.
Ali primijetite da mogu učiniti nešto drugo, kao dobro.
David ID 1, tako phpMyAdmin opet je samo administrativno alat;
to nije nešto što vaši korisnici ikada idući u vidjeti.
Dakle, ako sam umjesto kliknite SQL karticu do vrha -
i opet, pset 7 će vam predstaviti više od tih upita -
Ja mogu ručno izvršiti SQL naredbu strukturirani jezik upita
UPDATE korisnici SET house = 'Pfoho' GDJE id = 1.
Ove SQL upita su, lijepo dovoljno, prilično čitljiv s lijeva na desno.
Ažurirajte korisnicima stol, postavite polje zove kuća Pfoho
gdje korisnikov ID je jedan.
Ili čak sam mogao učiniti gdje e = 'malan@harvard.edu'.
Tako dugo dok to jedinstveno identificira me, da će raditi kao dobro.
No ID tendira da bude veća učinkovitost, pa neka je to učiniti.
Ajmo kliknite Idi. Ok, lecture.users ne postoji. Koja je moja greška?
Što je tablica zapravo zove ovdje?
To se zove studenti samo zato to je ono što smo učinili ovdje u gornjem lijevom kutu.
To se zove učenici, a ne korisnike. Dakle, kliknite Idi sada.
1 red utjecati. Upit je 0,01 sekundi.
Ako sam kliknite Pregledaj sada, sada Malan živote u Pfoho.
Dakle, to je još jedan okus SQL, ali pset će vas provesti kroz malo više od toga.
>> Tu je glupa odluka već sam napravio ovdje.
Ja bih rekao da je to baza podataka dizajn je neučinkovita
jer više ljudi mogu dodati za studente tablici,
više od nas sam početi dodavanjem, više od TFS sam početi dodavanjem,
idemo početi vidjeti što viškovi u ovoj tablici?
>> Da. [Student] Vidjevši da je kod studenata, mi koristimo isti [nečujan]
Isti - Točno, točno.
Dakle, ako 400 ljudi živi u Mather, dati ili uzeti,
na kraju ova tablica će imati 400 redaka koji kažu "Mather", "Mather,"
"Mather", "Mather", "Mather."
Mi smo gubit svih tih bajtova, a tu je par Zaključci tamo.
1, tamo je luda kutak slučaj gdje ako netko plaća puno novca
i preimenuje Mather, sada moramo promijeniti naš cijeli tablicu baze podataka.
To se neće dogoditi često, iako Pfoho nekad zvalo Sjeverna Kuća prije 15 godina,
tako što će se dogoditi. No, to nije sve što je uvjerljiv.
Više uvjerljiv nego kutnom slučaju kao da trebaju ažurirati podatke u rasutom stanju
za baze podataka je zašto ste spremanje Mather opet i opet i opet i opet?
To je puno znakova, 6 znakova.
Ne mogu mi čak i bolje od toga, a posebno za Pforzheimer?
Sigurno možemo učiniti bolje od toga mnogo znakova.
Zašto ne samo povezati jedinstveni identifikator sa svake kuće
i dućan da za svakog korisnika? Dakle, pokušajmo to.
Umjesto da samo koristiti studenti stol, pusti me do moje predavanje baze ovdje na gornjem lijevom kutu.
Obavijest ovdje kaže Stvaranje tablice.
Dopustite mi stvoriti novu tablicu pod nazivom kuće.
Broj stupaca će biti dva. Upišite.
Sada imam dva polja.
Idem nazvati to ime, a to će biti varchar duljine 255,
>> ali to je prilično proizvoljna. Dopustite mi da stavi to ovdje dolje po konvenciji.
Dakle, stavite ID ovdje. Dajmo svaka kuća jedinstveni identifikator.
Dajmo svakoj kući ime.
Hajdemo odrediti da identifikator će biti nepotpisana samo po konvenciji koristiti samo pozitivne brojeve.
Idemo naprijed i dati ovaj auto-prirast polje za sada.
I trebamo nešto drugo?
Idemo naprijed i kliknite Spremi.
Sada imam drugi stol.
Obavijest kao stranu to je malo zagonetan SQL naredba
da li bi morao upisati ručno, ako ne koristite upravni alat poput phpMyAdmin.
Tako je još jedan razlog zbog kojeg smo ga koristiti.
To je čudesno korisna vrsta pedagoški, jer možete kliknuti oko
i shvatiti kako stvari funkcioniraju po samo kopirati i zalijepiti ono phpMyAdmin učinio.
Ali naredba stvoriti tablicu je ono samo je pogubljen, a ovdje je moj stol.
Dopustite mi ići naprijed i sada koristiti sirovo SQL nego prevelikog pojednostavljivanja klikom na Umetni karticu.
Dopustite mi da ne INSERT INTO kućama,
a ja ću reći ime kuće će imati vrijednost 'Mather'.
To je to. Ovo je sintaksa malo više zagonetan.
To je naziv polja želimo umetnuti.
To su vrijednosti koje želimo umetnuti u tim područjima. Dopustite mi kliknite Idi.
1 redak umeće je 0,02 sekundi. Dopustite mi da kliknete Pregled sada.
>> Obavijest ako sam pritisnite Pregled, tu je Mather, čiji ID je po automatizacije broj jedan.
Dopustite mi napraviti još jedan. Pusti me u SQL kartici.
INSERT INTO kućama. Naziv kuće će imati vrijednost Pfoho i tako dalje.
Go. I mogu zadržati to opet i opet i opet.
Ili, ako vam dosadi koristeći phpMyAdmin, možete jednostavno koristiti karticu Insert
a da ne morate upisati sirove SQL.
Vi samo možete ga udarati se brže tipkanje, na primjer, Currier, Enter
i sad ako mi kliknete Pregledavanje, postoji Currier s ID tri.
Dakle, to je ono što mi podrazumijevamo pod auto-prirast.
No, sada moramo popraviti nešto u studenata.
U studente što bi vrsta podataka od kuće polju sada biti?
To bi trebao biti int, zar ne?
Dakle, cilj je da se ovdje faktor van, inače poznat kao normalizirati, stolovi
tako da mi ne pohranu informacija redundantly u bilo kojem od mojih tablica.
I opet, put smo bili ovdje će reći Mather, Mather,
Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, što je vrlo suvišan
u smislu rasipništvo od znakovi.
Pa neka mi ići naprijed i to promijeniti klikom strukture,
i pusti me naprijed i prekrižite kuću polje, kliknite Change
i sad ću to promijeniti da bude int.
255 više nije relevantan.
Pusti me naprijed i reći da je u redu ako je još uvijek NULL. Spremi.
Sada lista studenata je izmijenjen uspješno,
i opet primijetiti kuća je int.
Kao na stranu, zanemari broj u zagradama kada je u pitanju Ints.
>> Ovo je za naslijeđene razloga.
Natrag u dan kada nije imao GUI, te umjesto toga imali okoliša naredbenog retka,
u 10 i 11, odnosno specificirani koliko likovi trebali pokazati
u terminal prozoru zapravo prikazati polja.
To nema nikakve veze s bitnom dužini od stvarnog terena, pa ćemo samo ignorirati da za sada.
Sada moram ići u ovoj tablici.
A ako je David živi u Mather, kuća ne bi trebala biti 0,
koja je zadana vrijednost int najbliži NULL.
On bi trebao živjeti u kući jednog.
Ajmo reći da je samovoljno Mike živi u Pfoho, tako da kuća broj dva.
Sada moj stol izgleda malo više zagonetan.
No, razmislite o učinkovitosti.
Ja sam sada koristi samo 32 bita identificirati kuću,
što znači da postoji samo jedan kanonski definicija moje kuće Mather i Pfoho
i da je u kuće tablici.
Dakle, ako želim sada ponovno ove tablice, mislim da je to na ovaj način.
Ovdje imam studentima stol, a na desnoj strani ima ove brojke, 1 i 2.
1 Mather, 2 Pfoho.
Imamo one iste brojeve u ovoj drugoj tablici, koja se zove kuće,
1 i 2 i 3 za one 3 kuće.
Ono što sada želim učiniti je imati sposobnost u kodu, PHP i SQL,
sortirati od promociju ove tablice, gdje ako su učenici i ove su kuće,
želimo da se nekako ih kombinirati, tako da jedna linija s jedne,
2 linije s dva, i to tako da možemo shvatiti gdje je David
i gdje Mike i gdje su svi ostali živi.
Za to možemo izvršiti SQL upita poput sljedećeg.
SELECT * FROM studenti PRIDRUŽITE kuća NA -
A sada što polja ne želimo da se pridruže na?
Dakle students.house = houses.id.
>> Malo zagonetan, ali ovaj dio doslovno znači stvoriti novu privremenu tablicu
to je rezultat pridružio učenicima i kuća.
A kako želite kombinirati savjete mojih prstiju ovdje?
Postavite učeničku kuća polje jednak kuća 'ID polje.
A ako ja sada kliknite Idi, ja se vratim točno ono što sam se nadao da.
David je u Mather, Mike je u Pfoho, a ja sam također vidjeti identifikatore.
No, stvar je sada imam kompletnu tablicu.
I tako takeaway ovdje za pset 7 ili stvarno za konačni projekt:
Ako smatrate da ste čuvanje bilo koji dio informacija redundantly,
da li je kuća, možda je to grad, država i poštanski
gdje Poštanski može obično, ali ne uvijek može koristiti kao jedinstveni identifikator,
idu kroz vježbe psihički i onda s nečim poput phpMyAdmin
factoringa da zajedničkim podacima jer pogotovo što vaše web stranice dobiva više dobro koristiti
i više popularan, to je, kako bi bili sigurni da je sve super brzo,
dajući bazu podataka onoliko savjete što bi jedinstvenosti što je više moguće.
To je puno.
Ima li pitanja? U redu. Ajmo uzeti 5-minutni predah tamo i pregrupirati.
U redu.
Sljedeći je primjer da je korišten prije nekoliko godina kada sam uzeo CS161,
što je operativni sustavi klase na faksu
koji je poznat po tome što je nevjerojatna, ali luda količina posla,
a fokusira se stvarno na neki low-level problemima koji nastaju u operativnim sustavima
i čak u svijetu baza podataka.
>> Priča da je rekao moj profesor, Margo Seltzer, koje godine je kako slijedi.
Pretpostavimo da imate malo spavaonica hladnjak za vas i vaše cimer
i oboje ste stvarno željeli mlijeko.
Dakle, dođete kući iz razreda jedan dan, tvoj cimer još nije bilo,
otvorite frižider, i shvatit ćete, "Oh, dovraga, mi smo od mlijeka."
Tako da zatvorite hladnjak, hodate preko ulice CVS
i dobiti u dugim redovima sve kupiti mlijeko u CVS-u.
U međuvremenu, tvoj cimer dolazi kući iz svog razreda,
dolazi u sobu, otvara hladnjak stvarno žele malo mlijeka,
otvara frižider i "K vragu, ne mlijeko."
Dakle, on ili ona zatvara hladnjak, šetnje kroz vrata, i ide na ABP
ili negdje drugo nego CVS gdje ste ne ide na naletjeti jedni druge
ići dobiti malo mlijeka.
Naravno, nekoliko minuta kasnije, oba od vas vratiti kući
i sada imate duplo toliko mlijeka kao što je zapravo želio.
I što je mlijeko, sada će ići loše, jer vam se sviđa mlijeko
ali ne stvarno poput mlijeka, tako da sada imate previše mlijeka, tako da će se kiselo.
To je strašno, strašno stanje.
Što bi mogao riješiti ovu situaciju, ako ste bili prvi cimer doma? Da.
[Student] Trebali su ostavili znanje. [Smijeh]
Dobro. Trebao si ostavio poruku.
Trebao si staviti post-it note ili kao što je rekao, "Prohujalo za mlijeko",
i onda tvoj cimer konceptualno bi bili isključeni iz zapravo radi.
Ili bi mogao otići jedan korak dalje.
Vi doslovno mogao zaključati hladnjak s nekom vrstom lokota,
i sada tvoj cimer doslovno će biti isključeni iz hladnjaka.
Ako ćemo generalizirati natrag u programiranju,
gotovo da možete misliti frižideru kao neka vrsta varijable ili struct,
neki kontejner za informacije.
Problem temelja ovdje je da vas oboje je dopušteno pregledati
ili pročitajte stanje ove strukture podataka,
ali ga promatrati u različitim vremenima i još vas oboje donio odluku
na temelju stanja u svijetu na tim različitim trenucima u vremenu.
Tako su ti zaključan hladnjak, ti ​​bi barem izbjeći svoju cimericu
iz što je bio u mogućnosti provjeriti stanje na svijetu,
tako da on ili ona ne može imati je napravio tu istu odluku.
Dakle, baza podataka, kao što se ispostavilo, imaju ovaj problem stalno.
>> Hajdemo vidjeti možemo li izgraditi scenarij.
Pretpostavimo da ste svojevrsni negativca i idete na Bank of America
ili jedan od ostalih mjesta u trgu koji imaju stranu par bankomata po strani,
i nekako shvatio kako udvostručiti ATM kartice - nije sve što je teško.
To je samo magnetska traka.
I tako ono što želite pokušati učiniti je igrati ovu igru
pri čemu ste stavili jedan karticu u jednom uređaju, drugu karticu u drugom uređaju,
a vi zapravo želite probati povući novac istovremeno,
jer zamislite da priča ide kako slijedi.
Uređaj na lijevoj uzima svoju karticu i PIN,
i onda kažu, "Daj mi 100 $."
Bankomat je programiran da prvo napraviti odabir na svojoj bazi podataka ili sličnom -
god baza to koristi - kako bi vidjeli to korisnik ima najmanje 100 dolara u njegov ili njezin račun?
Ako je tako, onda ispljunuti $ 100 i 100 dolara oduzeti od njihovog stanja.
Ali, naravno, ako postoji više strojeva ovdje ili više načina pregleda
stanje tog svijeta, banka svod, da se vidi koliko novca imate,
Pretpostavljam da je samo slučajno stroja na lijevo i desno
kako postaviti to pitanje na otprilike istom trenutku u vremenu.
>> A to svakako može dogoditi. Bankomati su računala ovih dana.
Dakle, ako je stroj na lijevoj kaže: "Da, imate barem $ 100,"
U međuvremenu je stroj na desnoj kaže: "Da, imate barem $ 100,"
onda oboje nastaviti do kraja svoje programe i zapravo ispljunuti 100 dolara
i reći: "Prije ste imali 200 dolara."
"Dopustite mi da ažurirati varijablu sada biti 100 dolara ostavio u obzir."
Ali ako su oboje provjeriti stanje računa i utvrdili da je 200 dolara
i obojica tada učiniti math i reći 200-100,
strojevi potencijalno su ispljunuti dvije 100 dolara račune u svakom stroju,
ali oni samo sam ažurirali bilansna suma račun biti 100 dolara.
Drugim riječima, vi ste uzeli iz $ 200, ali zato su pregledali stanje svijeta
istovremeno, a zatim je donio odluku na temelju te vrijednosti,
oni ne bi mogli učiniti math konačnici ispravno.
Dakle, u banci situaciji previše stvarno želite imati nekakav isključenje
tako da čim ste provjeriti stanje neke varijable
to je stvarno važno, kao što je stanje računa,
Ne dopustite da netko drugi donositi odluke na temelju koje dok niste učinili radi svoje stvari,
gdje se u tom slučaju ste bankomat na lijevoj strani.
Zaključajte sve drugo van.
Vi zapravo možete postići taj učinak u nekoliko različitih načina.
>> Najjednostavniji način za MySQL je linija SQL koje vam je dao
u specifikaciji problema set koji izgleda upravo ovako.
Uložite u tablici - što god to zove - id, simbol, i udio, broj dionica,
sljedećih vrijednosti, na primjer.
Ako niste pročitali spec. ipak, ovo je primjer koji uključuje kako idete o
kupnju 10 dionica ovog denar stock za predsjednika Skroob,
čiji korisnički ID događa da se broj 7?
To govori INSERT INTO tablici sljedeće id, simbol i broj dionica
od 7, "DVN.V ', i 10.
Ali - ali, ali, ali - druga linija je važno.
Na duple KLJUČ UPDATE dionica = dionice + VALUES (dionice).
Dakle, potpuno zagonetan izgleda na prvi pogled.
No, činjenica da je ovaj SQL upit, iako to obaviti na 2 linije,
je jedan dugi upita, to znači da je atomska
u smislu da je taj upit ili će biti pogubljen svi zajedno ili uopće ne.
I po definiciji MySQL, to je kako oni provode ovaj upit.
To je po definiciji u priručniku zajamčeno izvršiti odjednom ili uopće ne.
Motivacija za to je što slijedi.
Ako u ovom slučaju da se pokušava kupiti 10 dionice,
to je vrsta iste priče kao mlijeko, to je vrsta iste priče kao bankomatu.
>> Ako napravite pogrešku ne koristite ovu sintaksu
ali umjesto odabirom iz baze podataka da se vidi koliko dionica ovog denar stock
Predsjednik ne Skroob imaju, a pretpostavljam da ima 10 dionica,
i onda neki djelić sekunde kasnije onda napraviti UPDATE izjavu,
što je još jedan iskaz u SQL koji kaže ići naprijed i dodati još 10 dionica
njegovom trenutnom 10, tako da je idealno ukupno je 20,
Problem je u tome, jer je u današnjim sustavima baza podataka i zato što u današnjim računalima
imate više procesora, više jezgri -
Drugim riječima, računala doslovno mogu raditi više stvari odjednom -
ne postoji jamstvo da je vaš odabir i vaša UPDATE u ovom slučaju
će se dogoditi natrag na leđa.
Tako loš scenarij bi ti SELECT
da se vidi koliko dionica ovog denar stock ne Skroob imaju,
i onda samo slučajno još upita je pogubljen -
Možda je Skroob u drugom prozoru preglednika pokušava kupiti 10 dionica
u drugom prozoru uopce, baš kao bankomat -
i pretpostavimo da je još jedan upit dobiva između SELECT i UPDATE.
To bi mogao biti slučaj da Skroob sada gubi neki broj dionica
jer je još jedan proces uvid u stanje svog svijeta,
ili on dobiva više dionica nego što bi trebao imati.
Nećemo ulaziti u pojedinosti točno ono što ti posebni priča linije će biti,
ali stvar je ako imate provjeriti varijable vrijednost i onda donijeti odluku,
ako postoji opasnost od netko drugi radi nešto između tih dviju tvrdnji,
kao što se može dogoditi u višeprocesorskim sustavima, u višejezgrenih sustava,
računala s mogućnošću učiniti više stvari odjednom, loše stvari se može dogoditi
kao što su bankovni računi se tereti krivo, kupnje dvaput onoliko mlijeka,
ili u ovom slučaju pogrešan broj dionica.
No, tu je jednostavniji način da mislite o tome.
>> Ispada da SQL također podržava, ako konfigurirati svoj stol ispravno,
nešto što se zove transakcije, što ja smatram je zapravo još lakše razumjeti
od toga, ali to nije jedan-liner, tako da je zapravo malo više uključeni.
Tu je doslovno izjava u SQL zove START transakcije.
Baš kao da je SELECT, UPDATE, INSERT, DELETE, a PRIDRUŽITE i hrpa drugih,
postoje riječi poput START transakcije.
I što onda učiniti u kontekstu pset 7 -
ne moraju to učiniti za pset 7; to izričito je isključena jer nije potrebno,
ali za konačnih projekata može biti korisno -
ako poziv upit o START transakcije i onda još upita
a zatim još jedan upit, a zatim još jedan, drugi, a drugi,
ti upiti zapravo neće biti izvršena sve dok vi zovete SQL COMMIT,
U tom trenutku, da li je dvije izjave ili 20 izjavama, svi oni će se izvršiti odjednom,
što znači da nitko drugi ne slučajno mogu kupiti previše mlijeka ili debitne previše novca
ili kupiti previše dionice jer su sve vaše upite će izvršiti
natrag na leđa natrag na leđa.
I ovo je super važna, pogotovo kad radiš nešto ovako.
To je arbitrarna primjer koji govori neka je ažurirati bankovni račun
postavljanjem ravnotežu jednak ravnoteži - 1000 $ gdje broj računa je 2.
I onda drugi izjavu sada ajmo izdvojiti da je 1000 dolara
u tuđe bankovni račun čiji broj računa je jedan.
>> Drugim riječima, ovo je savršen primjer gdje želite da biste bili sigurni
da su oba ova izvještaja dogoditi ili uopće ne
jer inače kupac će dobiti pijan
i ti si idući u uzeti svoj novac, a ne ga deponirati negdje drugdje,
ili banka će dobiti pijan kamo idete uplatiti novac
ali ne zapravo to oduzimati od korisnika računa.
Dakle, želite oboje izvršiti zajedno.
Tako ulazi u svjetskim poslovima.
Dakle, to je nešto što treba imati u pozadini vašeg uma,
ne toliko radi samo konačnu projekta,
ali ako želite da se vaš konačni projekt negdje,
ako želite da se pokrene neke tvrtke oko njega,
ako želite riješiti neke skupine učenika i studenata je problem na kampusu
i zapravo imaju živu, aktivnu web stranicu, to su vrsta suptilnih bugova koji mogu nastati
ako ne sasvim razmišlja o tome što se može dogoditi ako se dvije osobe
Pokušavate pristupiti vaše web stranice na doslovno u istom trenutku u vremenu,
pri čemu su njihovi upiti inače mogli dobiti isprepletene.
>> Spremni za neke JavaScripta, najavni tome?
Ovo je naš zadnji jezik za semestar. U redu.
Srećom, JavaScript izgleda vrlo, vrlo, vrlo slična dva jezika, C i PHP,
smo učinili do sada.
Nema JavaScript u pset 7, ali to je nevjerojatno koristan alat
kada je u pitanju radi web-based završne projekte ili stvarno samo web programiranje općenito.
Dakle, brzi pregled nešto što se zove DOM.
Ovdje je super jednostavna web stranica koje stvarno samo kaže bok, svijet
kako u naslovu i u tijelu.
Kao udubljenje je sugerirajući za neko vrijeme,
tamo je doista hijerarhija na web stranicama.
Mogao sam izvući ovu istu HTML isječak kao stablo,
misleći natrag našim razgovorima strukturama podataka u C, kako slijedi.
Imam neki poseban root čvor nazvan dokument čvor,
pa ćemo vidjeti analognu toga u JavaScriptu u samo trenutak.
Prvo dijete i jedino dijete koje je u ovom slučaju HTML oznaka.
Nema izravna mapiranje DOCTYPE.
To je posebna stvar, tako da smo samo trebali ignorirati kada je u pitanju ovaj DOM,
Ovaj model Document Object stablo.
Primijetit ćete da HTML oznaka, koji sam prikazan samovoljno kao pravokutnik,
ima 2 djece: glavu i tijelo.
>> Oni su izvučeni slično kao pravokutnika.
To je značajna slikovito da je glava na lijevoj strani tijela.
Posljedica je da glava dolazi prvi u stablo.
Dakle, tu je zapravo naručivanje na stablu kad ga izvući ovako,
iako su oblici i sitnica su proizvoljne.
Šef međuvremenu ima jednu dijete zove naslov,
i naslov zapravo ima svoje vlastito dijete, što je "Hello, World",
koji sam namjerno nacrtao kao ovalnim ovdje da bi se malo razlikovati od pravokutnika.
Ovi pravokutnici su elementi, dok halo, svijet je stvarno tekst čvor.
Dakle, to je čvor u stablu, ali to je drugačiji tip čvora
pa sam ga izvukao samovoljno drugačije.
Slično se tijelo imati dijete zove Hello, svijet kao dobro,
toliko različiti čvor, iako oni slučajno isti tekst,
ali sam ga izvući koristi isti oblik. Dakle, tko mari?
Pa, ono što je lijepo o HTML je da nema tu hijerarhijsku prirodu.
I ono što je lijepo o JavaScriptu, a posebice knjižnicama koje su besplatno dostupni
i popularan kao jQuery, možete se kretati na strukturu stabla tako nevjerojatno lako.
Svaka od stvari smo napravili u C s pokazivačima i poprijeko drveće i recursing na čvorovima
lijevo dijete desnog djeteta, odjednom možemo sortirati od uzimamo zdravo za gotovo
kao nevjerojatno prosvjetljujuća ako ne i malo frustrirajuće
ali nije gotovo učinkovit način da ide o programiranju.
I tako s tim višim razinama jezika poput JavaScripta
ćemo moći kretati ovom stablo mnogo više intuitivno.
>> I doista sintaksa će biti prilično upoznat.
Ako ste nikada nije vidio prije JavaScript, ovo je stvarno lijepo referenca
iz Mozilla ljudi, ljudi koji čine Firefox,
pa ne slobodno pregledajte da u svoju korist.
Što ćete naći - i ti slajdovi su identičan onome što mi se drugi dan -
slično, glavna je otišao.
Dakle, kada ste napisati program u JavaScriptu, ne postoji glavna funkcija.
Vi samo početak pisanja koda.
No, ključna razlika između JavaScript i C i PHP
je da, dok C i PHP dosad su pogubljeni strani poslužitelja
strane uređaja u ovom slučaju ili općenito po poslužitelju,
JavaScripta po dizajnu obično izvodi pregledniku.
Drugim riječima, možete pisati JavaScript kôd, kao da smo o tome kako,
na poslužitelju u aparatu, ali ga uključivati ​​među HTML, među svojim CSS,
među svojim GIF i PNG datoteke vaše i svoje JPEG
tako da kada korisnik posjeti vašu web stranicu, ako koristite JavaScript,
da JavaScript kôd dolazi iz poslužitelja e,
i to je preglednik koji zapravo izvršava.
Dakle, ovo ima smisla implikacije za čak intelektualnog vlasništva.
To je vrsta smiješno čak i razmišljati o zaštiti IP kada je u pitanju JavaScript koda
jer po prirodi jezika dobiva izvršava obično preglednik stranu.
>> Možete ga pomutiti, što znači da možete učiniti da izgleda ludo i ružno
bez razmakom, strašne varijabla imena, da bi ga teže za ljude da ukrasti vaše IP,
ali ključ je u tome što je pogubljen preglednik stranu.
Iako kao stranu JavaScripta može koristiti strani poslužitelja,
Najčešći korištenje slučaj upravo sada je još uvijek na pregledniku.
A evo kako to izgleda. Ovdje je, ako-else if-drugo izgraditi baš kao C, baš kao i PHP.
Ovdje je logički izraz kada "ili" dvije stvari zajedno.
Ovdje je kada "i" dvije stvari zajedno.
Ovdje je prekidač izjava, koji je sličan PHP
u koje možete prebaciti na različite vrste vrijednosti.
Petlje slično imaju za petlje ovdje, koji su strukturirani identično onome što smo vidjeli prije.
Dok petlje; Moramo učiniti dok petlje.
Varijable, uvijek je tako malo drugačija.
Vi ne proglasiti varijable kao i vi u PHP i C,
ali slično je JavaScript slabo upisali.
Vi ne odredite int ili plutaju ili string ili bilo što slično obično.
Možete odrediti var.
Ne morate navesti var, ali to ima implikacije ako ne.
Obično ako izostavite var, ako slučajno stvoriti globalnu varijablu umjesto lokalne.
Pa neka mi predlažemo da se gotovo uvijek samo reći var, a zatim naziv varijable.
To nije tip, to je samo var za varijablu.
To bi, na primjer, da li je 123 ili "halo, svijet".
Nizovi su prisutni i sintaktički sličan PHP.
Ja ću reći var brojeve i onda sam koristiti uglate zagrade ponovno proglasiti varijablu
čiji tip je niz koji ima baš te brojeve u njemu odvojene zarezima.
I onda na kraju, to je samo jedan koji stvarno izgleda drugačije.
Podsjetimo da je u PHP bismo implementirali asocijativni niz za studenta
kao Zamyla koja bi mogla izgledati ovako, gdje je varijabla se zove student.
Uglatih zagrada znači ovdje dolazi niz.
>> Činjenica da sam ne koristeći brojčane pokazatelje, ali žice - id, kuća, i ime -
znači da je to asocijativna polja,
a ove strelice s znaka jednakosti i angled nosač
znači da je ključ "id", vrijednost je 1;
Ključ je "kuća", vrijednost je Winthrop Kuća;
ključ je "ime", vrijednost je Zamyla Chan.
Dakle, tu je tri tipke unutar ovog asocijativnog polja, od kojih svaka ima svoju vrijednost.
Vidjeli smo da je u pset 7, ili ćete uskoro, u JavaScript iste ideje,
ali to će izgledati ovako.
Dakle var student - ne znak dolara i nema spomena o vrsti i dalje, ali var -
jednaka, a zatim otvoriti vitičastim zagradama, jer u JavaScriptu kada imate ključne parova,
zapravo koristiti nešto što se zove objekt.
I one od vas koji nisu uzeti APCS ili slično možda podsjetiti predmete iz Jave
ili slični jezici.
JavaScript nije Java, prije svega.
To je bio namjeran dizajn odluka godina sklepati nešto drugo da je bio popularan,
njegovo ime, iako nema temeljni odnos da se Java.
JavaScript ima objekte, a vi ih stvarati putu zapis kovrčave braće.
Objekata u JavaScriptu su prilično odgovara asocijativnih nizova u PHP
kada je u pitanju pohranu podataka unutar njih.
>> No, čak i više snažno u JavaScriptu možete povezati vrlo lako funkcije
unutar objekta, i iako možete to učiniti na drugim jezicima,
to je sasvim uobičajeno paradigma, kao što ćemo vidjeti.
Ukratko, ovaj objekt predstavlja student, koji je posebno Zamyla,
i to je sličan koncepcijski, samo sintaktički drugačiji od ovoga.
Ajmo zapravo koristiti JavaScript u datoteci.
Ispada da je skripta oznaka.
Vidjeli smo stil oznaku i vidjeli smo i druge HTML tagova.
Oznaka skripta zapravo će sadržavati neke JavaScript koda.
Pusti me u aparatu gdje imamo neke izvorni kod prethodno napravio.
Nisam ga objavili još na web stranici, ali ja ću to učiniti nakon predavanja.
Ajmo otvoriti ovaj jedan, blink.html.
Natrag u 1990, bilo je doslovno HTML oznaka naziva treptaj oznaka,
i to je bio jedan od najvažnijih predivno prekomjerno oznake na Internetu
kojim želite posjetiti neke 1990 web stranicu stilu i početi dobivati ​​tekst vam treperi ovako,
rezultati markiz oznaku, što je tekst ide ovako.
Jedan od rijetkih trenutaka u kojima svijet zapravo je dogovoreno na web standarda,
svatko po ploči ubio tren oznaku prije nekoliko godina.
No, možemo ga uskrsnuti s JavaScriptom kao demonstracija snage imate
kada možete napisati program unutar web stranice.
Prvo ajmo preskaču nove stvari i usredotočiti se samo na stari.
>> Ovdje je stara stvar u ovom primjeru.
Imam HTML oznake, head tag, i naslov oznaku.
Onda imam tijelo oznaku ovdje sa div, koji je opoziv samo pravokutni podjela stranici
da sam dao jedinstveni ID samovoljno je "čestitka" da,
samo tako imam način jedinstveno odnose na njega, da ima neke vrlo jednostavan tekst:
Pozdrav, svijet.
Sada neka mi dođite do vrha ove datoteke i vidjeti što je novo.
Prva stvar koja je nova do vrha je skripta oznaka,
i unutar obavijesti skriptu tag sam proglašen funkciju.
Da proglasiti funkciju u JavaScriptu, prilično sličan PHP,
doslovno pisati function zatim naziv funkcije, zagradama,
a možda i neke argumente, ako je potrebno bilo.
Tada sam dobio moj kovrčavu braće kao i obično, a sada imamo neke malo novi kôd,
ali ajmo vidjeti što to znači.
Dakle var div, to samo znači da će mi dati varijable zvane div.
Mogao sam to nazvao Foo, ali ja sam htjela da se zove div
iz razloga koji će biti jasan u drugi.
Onda ispada u JavaScriptu - a to je kod JavaScripta ugrađen u mojoj web stranici -
postoji posebna globalna varijabla vrsta zove dokument.
JavaScript je u stvari objektno-orijentirani jezik.
Nećemo ulaziti u detalje u 50 kao što to znači,
ali za sada znamo da je objekt prilično velik kao struct.
Kao što smo vidjeli put natrag kada je u jednom od najranijih problema sets
gdje smo stavili puno informacija u struct,
Slično je dokumentirati poseban struct koji dolazi s preglednikom,
dolazi s bilo koje web stranice. To nije nešto što sam stvorio.
Unutar ove strukture dokumenta, ipak, morate ne samo podatke
ali ćete također imati funkcije.
>> I svaki put kad imaju funkciju unutar strukture, unutar objekta,
to se zove metoda. No, to je ista stvar.
Metoda je funkcija koja samo tako dogodi da se unutar nečega.
Dakle, to znači da je taj posebni globalna varijabla zove dokument
je funkcija zove getElementById koji doslovno radi toga.
To će vam se element iz DOM, Document Object Model stablo,
čiji ID je u ovom slučaju pozdrav.
Drugim riječima, sve ono vrijeme koje smo proveli na strukturama podataka dolazi u igru ​​ovdje.
Ova slika DOM da smo imali trenutak prije,
iako stranica je malo drugačiji, ako sam imao div na ovoj slici,
što document.getElementById će se vratiti za mene učinkovito bi pokazivač
na pravokutniku u stablo, spominjanje pravokutnika u stablo.
Dakle, to je ono što znači da se zapravo nazvati jedan od tih funkcija.
U tom slučaju ponovno je div. To nije tijelo ili naslov.
Dakle, neka je vidjeti što sam tada učiniti s ovim div sada da ga imam unutar ove varijable zvane div.
Ispada sa JavaScript imate mogućnost da uštinuti CSS vaše stranice dinamički.
Do sada, sve CSS smo učinili, iako ograničena, u stilu atributima,
ili gdje drugdje smo stavili CSS?
Nekako razmaženo tom jednom. U stilu oznaku na vrhu datoteke.
Ili treće mjesto je u?
>> Vanjske datoteke, tako nešto. Css.
Dakle oni su 3 mjesta smo učinili CSS dosad,
ali kvaka je da smo naporno sam kodirane sve to.
Odlučili ste kao što ste zaronili u pset 7, odlučili smo prije predavanja što naš CSS će biti.
No, ako želite promijeniti svoj CSS, što zapravo može učiniti da
nakon što su stvarni programski jezik.
CSS, HTML - ne programskim jezicima. JavaScript je.
Tako ispada da čim imate jedan od onih pravokutnika sa stabla
zove DOM, to je samo po sebi neke podatke unutar nje.
Dakle, div koji sam uhvatio na stablu ima ono što ćemo nazvati imovine unutar nje
zove stil, a stil ima sebi svojstvo nazvano vidljivost.
Ja bih to znaju samo gleda CSS upute za upotrebu.
Ispada da postoji imovina vidljivost CSS da radi ono što govori.
To čini nešto vidljivo ili ne, vidljiv ili ne.
I kako ti to je to.
Tražim programatski ako vidljivost ovom div skriven,
Što mogu promijeniti to? Vidljiva.
Jer ako vidljivost ovoj stranici nije skrivena, logično ja ne bi to skriveno.
Nemam pojma zašto je to vidljivo i skriveno i nije vidljivo i nevidljivo.
Ovo je bila loša odluka dizajn na putu.
No, oni su doista suprotnosti u CSS: vidljivi i skriveni.
Sve to ne znači da je to promijeniti CSS moje datoteke i isključivanje, uključivanje i isključivanje
za tu određenu div.
Ali opet, to je funkcija zove treptaj. Kada je treptaj funkcija zove?
Ispada da postoji jedna posebna globalna varijabla zove prozor,
slični u duhu dokumenta, ali dok je dokument odnosi se na web stranici,
kao DOM stabla, HTML ste poslali s poslužitelja,
Prozor se odnosi na krom oko njega, adresa bar, bar naslov,
i sve te stvari oko vašeg web stranici.
>> I ispada da je prozor objekt ima poseban function unutar njega zove setInterval
da čini ono što kaže.
To će postaviti interval - u ovom slučaju svakih 500 milisekundi -
i, uzeti pogodak, što će to učiniti svakih 500 milisekundi?
To će izvršiti tu funkciju treptati.
I ono što je lijepo ovdje je da smo mogli učiniti to u C, iako mi nikada nije učinio.
C ima nešto što se zove funkcija pokazivače gdje možete proći funkcije oko
kao argumente.
Slično tome, u JavaScriptu možete proći naziv funkcije u drugu funkciju.
I primijetiti ono što radim. Ja ne radim to.
Ako sam stavio zagrade nakon treptaja, to bi značilo nazvati tren funkciju.
Ako sam ih izostaviti, to znači da je ovdje treptaj function
tako da setInterval može nazvati svakih 500 milisekundi.
Dakle, krajnji rezultat, zločest, iako je to, da ako sam otići u localhost i otići na blink.html,
Ja sada imam ovo događa opet i opet.
A ako sam zapravo Pregledajte Element, neka je vidjeti ako možemo vidjeti ovaj.
Dopustite mi Pregledajte Element, neka mi se pomaknite prema dolje samo malo,
neka mi odabrati Elementi više ovdje, i primijetiti DOM unutrašnjost Chrome inspektora.
To je doslovno mijenja natrag i naprijed svakih 500 milisekundi.
Ako odemo na naš prijatelj Nate,
ako ste se ikad pitali kako to radi, sličnu ideju s razmakom,
ali Nate je zapravo što je vrlo učinkovito korištenje boje u ovom konkretnom slučaju ovdje.
Dakle, što više možemo zapravo učiniti s tim?
Ajmo otvoriti još jedan primjer i pokušati nešto
to je programatski još više koristan nego što stvari treptati.
Pusti me u naš direktorij oblici danas i ići u form0.
To je najružnija moguća oblik koji sam mogao smisliti,
i neka mi samo da vam pokazati kako to izgleda u pregledniku.
>> Pusti me u localhost / forme, a to je form0.
Ovo je super ružni HTML obrazac koji ima nekoliko polja za e-mail, za lozinku,
lozinka, a zatim malo potvrdni pristati na nekim uvjetima.
Kvaka je ako sam posjetiti ovaj obrazac, a ja ne želim da vam dati moju adresu,
Ne želim pristati na uvjete i odredbe možda, mogu kliknuti Registracija
i to mi omogućuje kroz svejedno.
To se događa da podnese glupog PHP datoteku pod nazivom dump.php.
Sve je to ipak ispisati sadržaj $ _GET samo za dijagnostičke svrhe.
To je ono što je podnesen od strane korisnika upravo sada.
Ali pretpostavimo da zapravo želimo potvrditi korisnikovu slanje obrasca.
Pusti me u verziji 1.
Ovo je form1.html. To izgleda estetski jednako loše, ali primijetiti kako zavoljeti to je.
Ako sam kliknite Registrirajte se bez suradnje, ja dobiti vikao na.
"Morate dati svoj e-mail adresu."
U redu. Pa neka mi probati to. Dakle malan@harvard.edu. Ne trebam lozinku.
Registrirajte se. "Morate osigurati lozinku." U redu.
Dakle, ja ću dati lozinku grimizne. Registrirajte se.
"Lozinke se ne podudaraju." Moram sada upisati u grimizno ovdje.
Slučajno sam provjeriti da. Registrirajte se.
"Morate se složiti s uvjetima i odredbama." U redu. Slažem se. Registrirajte se.
I sada mi pokazuje dijagnostičke izlaz tamo.
>> Dakle, što se dogodilo?
Mi smo imali tu sposobnost za ovjeru obrasca.
U stvari, ako je roniti u pset 7, tu je ispričati function
, što ga čini prilično jednostavan vikati na korisnika porukom na zaslonu.
Ja sam koristeći malo drugačiji mehanizam, upozorenja funkcije,
koji nije funkcija koja je nasmijala na jer čini vrlo ružne korisničke poruke.
Ali ajmo vidjeti što ja radim ovdje.
Ovo je form1.html, i primjetiti da imam neke prilično poznati sintaksu:
Tijelo tag, tag oblik, akcija atribut, metoda atribut.
Ali primijetite sam dao svoj oblik jedinstveni ID za praktičnost.
Tada sam dobio e-mail polje čija je vrsta teksta,
Lozinka polje čija je vrsta lozinku, potvrda polje čija je vrsta lozinka,
i onda kućicu čije je ime ugovor ovamo, tip je potvrdni okvir.
A onda sam dobio submit gumb.
Ali primijetite na vrhu što više imam.
Prije svega, tu je još jedan korištenje skripti oznaku.
Ako imate neke JavaScript koda u drugu datoteku, baš kao i sa CSS možete ga uključiti.
I što učiniti da se s skripte izvora, a zatim sam primijetiti povezivanje očito
da googleapis.com na vrlo dugom putu, ali čije ime datoteke završava u jquery.min
za minimum. js.
jQuery je super popularna biblioteka za JavaScript da samo čini JavaScript
sve više user-friendly za korištenje.
To učinkovito je postao de facto standard.
Dakle, iako je ono što ćete vidjeti nije čista JavaScripta po sebi,
je knjižnica na vrhu JavaScript, slično CS50 knjižnice je sloj
na vrhu low-level C koda, stvarnost je gotovo svatko na internetu ga koristi.
Dakle, to nisu trening kotačima. Ovo je samo najbolje vježbati ovih dana.
Sada primijetite ispod koje je moja skripta oznaka, i primijetiti što sam učinio ovdje.
Ispada da jQuery čini nešto malo zavoljeti.
Javascript je dolar znakove, ali oni su besmislene.
>> Oni su kao slovo A ili B ili C.
jQuery jednostavno je usvojila Konvenciju ili vrsta od položenu tvrde da činjenice
da $ će biti njihova posebna simbol.
Dakle, čim ste učitati ovu globalnu JavaScript datoteku ovdje sa original oznake,
imate pristup posebnom globalne varijable koja se zove $.
To je više ispravno zove jQuery, ali da ne izgleda gotovo kao seksi kao $.
No $ nema posebno značenje. U PHP je imala posebno značenje.
Mogli ste ga imati ispred varijable.
Ovo je samo seksi stvar koja im je na.
Što se ovdje događa?
Obavijest sam prolazi na jQuery funkcije moj globalnu varijablu dokument
i onda zovem. spreman.
Što jQuery suštini ne je to vam omogućuje da se neke stvari vanilije JavaScripta
kao dokumenta objekt, prozor objekt,
i ako to prođe u na jQuery funkcije -
i opet, da bude jasno, to je funkcija zove jQuery -
što to je to vraća vama posebnu verziju dokumenta
koji ima više funkcija povezane s njom.
Dakle, u sirovom JavaScriptu nema spremni funkcija,
ali ako prođe dokument jQuery funkcije prvi,
vraća se vama posebnu verziju dokumenta objekta
da ima više sviđa značajke.
I to je razlog zašto ljudi ga vole. To samo čini stvari lakše učiniti, kao što smo o tome vidjeti.
Pa što to linija koda znači?
Ova linija koda ovdje znači kada je dokument spreman -
Drugim riječima, nakon što je preglednik učinili čitate ovaj file vrha do dna -
ići naprijed i izvršiti sljedeću funkciju.
Ono što je doista zanimljivo u JavaScriptu - i PHP ima to kao dobro -
je anonimni funkcije.
U JavaScriptu možete deklarirati funkcije koje nemaju ime, ali oni nemaju tijelo.
Obavijest što se ovdje događa.
>> To je funkcija zove spremni, a to samo znači učiniti sljedeće
kada je cijela web stranica je spremna, kada je sve bilo čitati s poslužitelja.
Što želite učiniti? Želim izvršiti komad koda.
Primijetite da ne želimo izvršiti ovaj kod odmah.
Ako sam propustio ovo, to bi značilo da odmah počnu izvršenja ove linije koda.
No, činjenica da sam rekao ne, ne, ne, zamotajte to u anonimnom funkcije kao što je to
znači ne izvršiti ga još, na kraju ga zovu.
Vidjeli smo to maloprije u našem prethodnom primjeru obrasca.
Što funkcija nije mi nazivamo vremenom, 500 milisekundi kasnije? Blink.
Dakle, ista ideja.
Opet, čak i ako to izgleda malo čudno, samo se za sada na vjeri
da se proglasi anonimnu funkciju koja se zove kraju,
jednostavno napisati funkciju () {
Dakle, ono što kod ćemo izvršiti na kraju? Sljedeći.
To također izgleda malo novo, ali to znači evo jQuery funkcija,
a ovo sada je prečac.
Ovo je isječak HTML na dnu ekrana naravno ima neke stablo zastupljenost.
To nije to. Ova stranica je puno zanimljiviji od ovog Hello, svjetski primjer.
No, tu je neki stablo koje odgovara tom HTML.
To će biti bol u vratu morati provesti neku vrstu rekurzivne funkcije
početi na korijen čvor, a zatim pronaći čvor čiji ID je registracija.
Dakle, ono što jQuery čini super jednostavno za nas je doslovno to.
Idi naprijed i mi dobiti što god div ili bilo kojem obliku, bez obzira na HTML element
ima ID registracije.
Ovo je ekvivalent document.getElementById ('registracija').
>> Zašto ljudi poput jQuery?
Budući da je kraći za tipkanje. No, to je sve što je. To je ista ideja.
Daj mi oznaku čiji ID je registracija.
A kad se to oznaka, koji se dogoditi da se oblik, podnosi se,
ići naprijed i izvršiti ovaj kod.
Dakle, neka je uzeti jedan pogled sada na tome radimo obrasca valjanosti.
Sintaksa je doduše grobni na prvi, ali ono što se događa?
Ako ova linija koda je istina, ja ću vikati na korisnika kako bi osigurao svoju e-mail adresu.
Dakle, ono što je ova linija koda?
$ Znači jQuery. Sada primijetiti.
To je vrsta kao što su CSS.
Ako ste zaronili u CSS, ali, znat ćete da to znači element čiji ID je registracija.
Prostor znači naći dijete ili potomak registracije čije ime je ulaz.
I onda je ovo stvar u uglatim zagradama je malo filtar.
A čak i ako to izgleda zagonetan, to samo znači ići na obrascu čiji ID je registracija,
ići na unutarnjoj ulazni element koji čije ime je e-mail,
i onda dobiti svoju vrijednost, bez obzira na njegova vrijednost se dogodi da se -
asdf ako je to sve što sam upisali ili malan@harvard.edu ako je to ono što sam upisali.
Dakle, ako vrijednost obrasca email području == ništa, vikati na korisnika.
Drugo, ako je vrijednost polja zaporke == ništa, vikati na korisnika.
>> Inače, ako je vrijednost polja zaporke ne jednaka vrijednost za potvrdu polju,
koji je bio drugi oblik elementa, vikati na korisnika.
I onda na kraju - i to jedan previše ima neku novu sintaksu vlastite,
, ali nakon što sam ga vidio, to je barem malo više razuman -
drugo, ako oblik čiji ID je registracija ima ulazni element čije je ime ugovor
i to je provjeren, ići naprijed i vikati na korisnika.
Dakle, ja sam potpuno priznati da je to potpuno neodoljiv na prvi pogled.
To je puno novih sintakse. Ali sve jQuery slijedi ove vrste uzoraka.
A iskreno, nisam ni znala to postojala do prije nekoliko minuta.
Ja Googled, "Kako provjeriti je li potvrdni okvir označen u jQuery?"
i to je sintaksa, jer postoji različiti načini radi
sa stvarnim sirovog JavaScript koda.
Dakle, kao vrlo prva stranica Problem Set sedam naglašava,
pset 7 je jako puno vježba u sebe pokretački
gdje smo dali, nadamo se, konceptualni okvir s kojim se borila pset.
>> No, kao što je to često slučaj s web dizajn, to je do vas stvarno probiti okolo,
ugraditi isječke koda i primjere na webu, tako dugo dok ih citirati
po uvjetima na toj prvoj stranici,
i shvatiti da je učenje HTML, CSS, JavaScript, pa čak i SQL
je zapravo značilo da se ovo kod kuće vježba kao što smo početi da se ove obuke kotača off.
I shvatiti previše ima tako mnogo više stvari koje možete učiniti s preglednikom.
Unutar većine tih elemenata postoje i druge stvari nazivaju događaj rukuju.
I iako smo samo gledali one zove onsubmit i onready,
možete učiniti stvari kao što onkeydown, onkeyup,
volim kad korisnik dotakne tipku, možete slušati za to i tipku prema gore.
Gmail ima tipkovne prečace.
Kako Google provesti tipkovne prečace poput C za sastavljanje?
Oni slušati za događaje, kao što su oni nazivaju, kao onkeypress ili onkeyup i onkeydown.
Ako ste ikada lebdio mišem preko neke opcije izbornika
i odjednom, voila, izbornik ili grafički mijenja boju,
kako se to radi?
Umjesto slušati onready ili onsubmit, možete slušati onmouseover ili onmouseout.
>> Dakle, u kratko, s tim vrlo jednostavne osnove koje smo počeli ispočetka površine od danas
a mi ćemo zaroniti u dodatno je u srijedu, imate, sve,
snaga za provedbu vrste stvari koje ste već upoznati s.
Tako ćemo završiti tamo, a mi ćemo nastaviti ovu srijedu.
>> [CS50.TV]