DAVID Malan: U redu. Ovo je CS50, a to je Kraj tjedna devet. Prošlo je više od vrtlog u posljednjih nekoliko dana. A problema postaviti sedam, ako ste koljena duboko u njemu, shvaćam da je sasvim Malo novo što je unutra. No, da vidimo možemo li komad sve zajedno ovdje ukratko prije toga skreće off u još drugi smjer i vidim gdje drugdje možemo ići. Tako je do sada, mi smo govorili o HTML-u. Razgovarali smo o CSS. Razgovarali smo o PHP. Počeli ste doživjeti SQL. Danas ćemo razgovarati malo o JavaScript. No, kako se sve to u raskoraku jezici idu zajedno? Tako smo razgovarali prošlog tjedna o tome Ideja ima poslužitelj. Pa neka je samo nacrtati ovu pravokutnik kao web server ovdje. I web poslužitelja služi sigurno datoteke. A neki od tih datoteka može biti HTML datoteke. Dakle, jedna od stvari koje web poslužitelj može ispljunuti može biti datoteka koja samo mi ćemo privući ovako sadrži neke HTML. Dakle, laički rečeno, ono što nema HTML neka vam je činiti? PUBLIKA: Page izgledati lijepo. DAVID Malan: OK, bi stranica izgledati lijepo, iako mislim da sam dokazao da je drugačije. Dakle, HTML ne dopustiti da stavi van stranice strukturno, a to vam omogućuje da se svojevrsni estetski obilježavati stranicu, obilježavati statički sadržaj, tako da Možete ga tada vidjeli s web pregledniku. No, to je ključ. To je statički sadržaj. Možete ga napisati, da ga spasi, a onda ga brod. I web poslužitelja tada služi je do svoje posjetitelje. Ali mi stilizira stvari koriste različite jezik uopce. Počeli smo koristiti stil atribut o određenim oznakama. A stil atribut stavimo stvari kao što su veličina fonta i boje. I vjerojatno ste počele otkrivati, ili će uskoro za konačni projekti potencijalno, ali druga svojstva koja možete koristiti u CSS. I tako laički rečeno, ono što Stvarno onda ne CSS učiniti? Oni su samo njihovi primjeri. Što se ti to dopustiti HTML ne čini se da od onoga koje smo dosad vidjeli? PUBLIKA: Definirajte stilove od sebe. DAVID Malan: Definiraj stilove po sebi. Dakle definirati stvari poput klase kao i vi možda ste naišli, ili jedinstveno identificirati čvorove u dokumentu, tako da ih možete stilizira. No, točnije, ja bih rekao da CSS stvarno vam omogućuje da se stvari posljednji kilometar i omogućuje vam da odredite koliko točnije estetika, dok je HTML za najveći dio omogućuje što strukturirati svoje stranice. I premda postoje neke zadane, kao što smo vidjeli oznaku za tarifni tag, koji grubo rečeno napravio stvari velika i hrabra. To je prilično generički definicija od krpa - veliki i hrabar. Što font je to? Koje boje je to? Kako bold je to? I CSS vam omogućuje preciznije Tune takve stvari. Kao i izgleda, kao što neki od koje ste vidjeli. I iskreno, CSS je bitna od neredu jeziku. To je vrlo moćan u koje možete napraviti doslovno bilo koju web stranicu da ste vidjeti na webu danas s njim, ali to je vrsta boli u vratu. A neki od vas su se zalupila glavu na zidovima već samo raditi nešto glupo kao centar izbornika na Problem postaviti sedam, ako ste došli do ta točka već. Ali shvatite, one stvari se lakše s vremenom. Možete početi primjećivati ​​obrasce. I opet, Google će biti tvoj prijatelj za razne načine na koje možete rješavanje ove vrste problema. I usudio bih se reći s CSS, HTML i više Općenito, možete riješiti probleme u mnogo više načina, od kojih su svi mogli vrlo dobro biti točna, nego što bi u nešto poput C, čak i Sada PHP ili JavaScript. Postoje samo mnogo različitih načina da postave stvari. No, ovaj je počeo da se neuredan, rekao mi. Samo vrsta commingling svoj HTML i Vaš CSS sa stilom atribut je Malo neuredan. I tako smo, umjesto rekao, svojevrsni apstraktno gledano, da li bi trebalo barem početi faktor iz svog CSS vjerojatno. Nije tvoj stil atribute, ali barem koristite stil oznaku unutar onoga što dio web stranice? Ivanković: voditelj. DAVID Malan: U glavi. Do sada smo imali samo naslov do postoje, ali također možete dodati stil označiti, a možete staviti svoj CSS grubo gledano prema vrhu stranice. No, onda mi je uzeo stvari jedan korak dalje i mi uzete da se više u zasebnu datoteku. I tako su te dvije datoteke su bile nekako povezana. I doista je bilo tag koji je to učinio. I ono što je bio jedan od sveobuhvatnu motivacije za faktoring našu CSS sve više? PUBLIKA: višekratnog. DAVID Malan: višekratnog. Točno? Možda ste vidjeli u p-set sedam već da puno stranica, Kupnja stranica, stranica prodaje, portfolio stranica, vjerojatno strukturiran nešto slično. Postoji CS50 financije logo na vrhu osim ako ste odlučili to promijeniti. Postoji footer na dnu stranice. I CSS vam omogućuje zatim ga uzeti iz je u zasebnu datoteku, tako da ako Želite li promijeniti nešto na globalnoj razini preko svoje cijele stranice, možete stvarno samo ga promijeniti na jednom mjestu. No, tu je cijenu koju plaćate potencijalno od strane nakon uzete iz CSS iz mog HTML datoteke u zasebne podnijeti ga usporedbe s tag, što smo vidjeli u ponedjeljak. Što bi moglo biti od minus ovo? Osvrčući se prije tjedan dana, kada smo govori o HTTP i TCP / IP i kako internet funkcionira. Nešto ovamo? Publika: Potrebno je više vremena. DAVID Malan: Potrebno je više vremena. Zašto? PUBLIKA: [nečujan]. DAVID Malan: Da. Tako da vjerojatno ima još malo vremena. Budući da je jedan, CSS je očito ne u istoj datoteci. Tako sada imate, kako bi ne jedan, nego dva zahtjeva. I svaki od tih zahtjeva, kao što smo vidjeli u Chrome u tzv inspektora, a mi smo gledali na kartici mreže, svaka od tih datoteka zahtijeva jedan HTTP Zahtjev, koji smo vidjeli traje neki iznos od vrijeme. Sad, možda to nije puno. Možda je to samo 20 milisekundi. Možda je to 200 milisekundi. Ali mislim o stranici kao što su Facebook, ili CNN ili Google, koji su mnogo veći od primjera koje smo pogledao dosad. Te stranice mogu imati desetke datoteka, od kojih svaki može zahtijevati preuzimanje datoteke. Dakle, stvari mogu potencijalno početi usporiti. A pogotovo ovih dana kada smo svi imaju mobitele u džepovima i sporiji internet veze, da se pričekati još nekoliko milisekundi, malo više milisekundi za dodatni slika zapravo može biti spor. Latencija je riječ koja opisuje vrsta čeka da imate da vam doživjeti kada čeka neki dio informacije. No, tu je naopako. Dakle, to nije sve vrsta - to je zapravo malo klackalicu ovdje. Negativni sada, ali ono što mogu učiniti preglednici ako su pametni, kako bi se izbjegla moraju zatražiti istu styles.css podnijeti opet može biti učiniti što? Cache ga. Dakle caching - C-C-H-E - općenito znači ovdje samo spasiti datoteku koju je zatražio prvi put, i zatim provjerite cache za to. Provjerite da ste svojevrsni spremnik, i ako već imate kopija styles.css, čak i ako neka druga stranica u p-set, ili bilo koju web stranicu, zamolbe opet, samo da daju Korisnik taj isti spremljena kopija. Ne smetaju ga traži. Negativni postoji, iako, kao što neki od vas su se spotaknuo u p-seta. Ako napravite promjene na poslužitelju i idete natrag u pregledniku, a vi reload, ponekad preglednik ne ti milost i ne smetaju ponovno skidanje vaš styles.css sliku jer, hajde, što su izgledi da su ti stilovi koji Facebook koristi će se promijeniti sata u sat ili iz dana u dan? To je prilično niska. Oni se mogu mijenjati tijekom vremena, ali ne i po minuti ili po satu. Dakle trik, samo za Vašu informaciju kada radiš web razvoj, često se držite pomak ključ za primjer, a zatim kliknite reload u vašem pregledniku, te da će obično reći preglednika reload sve, čak i ako već imate je u cache. Pa opet, upsides i mane, ali sve od njih konačnici dizajn odluke. Tako sada, nismo baš završiti priču ovdje. Ako ja sada ići natrag i naprijed i natrag i natrag, počeli smo uvesti ne samo HTML, ali PHP. Dakle, laički rečeno, ono što nema PHP činimo? PUBLIKA: [nečujan]. DAVID Malan: Što je to? PUBLIKA: Uvesti logiku u kodu. DAVID Malan: Da, uvođenje Logika u kodu. Dakle, to je istina programski jezik s petlje, i varijable i funkcije, i uvjete, a sve stvari koje smo koristili put natrag kada je od nule. I PHP, vidjeli smo, može se koristiti bilo na zapovjednoj liniji - to ne moraju imati veze s weba, iako je to zapravo svoje korijene i što je sklon biti dobar u i pogodan za - , ali možete koristiti PHP samo po prirodi od činjenice da je otisak () Funkcija i printf () funkciju, ili echo () funkcija. Postoji grozdovima načina na koje može ispisati tekst s PHP. Dakle, možete koristiti ovaj program jezik za izlaz točno o čemu smo razgovarali o tome prije. Ti dinamički može generirati Vaš HTML. Možda nisu svi za to. Možda ste hard code stvari, kao što su header i footer, i logo, i tvoj stil listova, i sve to. No, za tako nešto p-set sedam, gdje ste manipulira dionice i pokazujući korisnika portfelja, što je će se dinamički mijenjati, što bi moglo sigurno koristiti PHP i logiku koju pridaje ti kao programski jezik za izlazni dinamički podskupa stranice. Dakle, kada govorimo o dinamičkim web stranicama, ili web programiranja, to je ono što stvarno govoriš. Korištenje jezika kao PHP ili stvari zove Python, ili Ruby, ili Java, ili Još drugim jezicima, kako bi ispitivanje baze podataka Često, ili neki drugi server, te zatim dinamički ispljunuti HTML. Sada je krajnji rezultat, kao na stranu, je da HTML većine web stranica, uključujući vaš p-set sedam, vjerojatno će biti veliki nered, ako pogledate izvoru koda u pregledniku. To nije velika stvar. U ovom trenutku, kada nam je stalo stil, mi je stalo stvari koje ste napisali. Nećemo brinuti o stvarima da je ono što vaš kod izlaza. Dakle, ne brinite o razvedenosti Ovdje ako je PHP koji je zapravo izlaza stvari. Uostalom, preglednik nije briga, i ljudska neće biti baza na izvoru svejedno. Mi osoblje, primjerice, bi se gleda na PHP. Pa neka mi dati brzi primjer sada zašto drugi ne bi to moglo biti korisno. Pa iskreno, ja se ne mogu sjetiti zadnji put Vrijeme Koristio sam C riješiti problem u stvarni svijet. To je vjerojatno bio u srednjoj školi, kada Morao sam koristiti jezik koji bio je prilično niska razina i dao mi prilika da učinite nešto vrlo visoku obavlja se stvarno spasiti što više CPU ciklusima kao što sam mogao, u velikom dijelu jer sam bio koristeći velike skupove podataka, i svaki CPU ciklusa broje. I iskreno, čak i na stvari kao što su telefoni ovih dana i drugih uređaja gdje ne sasvim imati koliko memorije i ne sasvim imati koliko procesora, korištenjem brže jezika je još uvijek privlačan. No, u stvarnom svijetu, kad se samo želite baciti neki program zajedno analizirati neke podatke, ili ste prikupili cijela hrpa registracija za neki student grupa i želite vrlo brzo automatizirati slanje e-pošte jedan po jedan na svakoga od onih registracije, vi ćete posegnuti za jezik više razine od C da se tako izrazim. Nešto poput PHP ili Python ili Ruby, ili pola tuceta drugih koje postoje ovih dana. No, ta tri su vjerojatno najviše trendy upravo sada. I što to znači da možete otvoriti do uređivač teksta kao što je gedit ili najviše bilo što drugo i onda samo početak pisanja koda, bez brige o sastavljanju, bez stvarno brinuti o upravljanje memorijom, imajući na umu da iako malo aljkavost na kraju će se vratiti ugristi ako skup podataka dobiva veće ili problem dobiva veliki. No, što to znači za nam je sljedeći. Pustite me da idem naprijed i pokrenuti Speller od problema postaviti šest. Dakle, ovo je moj provedba trie-based koji sam koristio na veliko odbora u kojima nisam izvodi tako dobro. Vratit ćemo se u tjedan dana i ponovno onih koji nisu završili na vrhu velika ploča na našem zadnjem predavanju. No, za sada, dopustite mi da ide naprijed i samo pokrenuti moje rješenje u tekstu, a mi ćemo učiniti King James Biblije, a ovdje mi ići. Dakle, to su sve navodno pogrešno napisane riječi iz King James Bible. I moja je provedba pola sekunde ukupno. Dakle, nije loše o tome Posebno računalo. Ali mislim o tome koliko koda sam morao napisati. Razmislite koliko je kod vas morao napisati. Razmislite koliko sati ste proveli u D-dvorana ili vaša spavaonica ili gdje god zapravo kodiranje se da je rješenje. Pa, ako sam zapravo imaju višu razinu jezik poput PHP, uzeti na znanje ono što ja mogu učiniti ovdje. Prvo, pretpostavimo da je to umjesto distribucija koda. To je spis pod nazivom bukvar. To je dostupan kao dio današnjih Raspodjela code. A ja ću mahati ruku na većini pojedinosti, ali to je zapravo Zanimljiv je primjer kako možda luka jezik kao C preko za PHP. Doslovno sam otvorio dvije tekstualne prozore, jedan s mojim C verziji speller.c, a ja tek počeo prevodeći ga u mom glavu na PHP i tipkanje pomoću najbliži ekvivalent funkcije. Dakle, neke od tih stvari su drugačije. Vidjeli smo posljednji put da PHP ne koristi uključiti u sasvim isti način. Ona koristi zahtijevaju obično, iako su zaista postoji. Definirajte je malo drugačiji od # Define u C, ali to je Kako ćemo napraviti konstantu. $ Argc ispada postoji u PHP-u, pa vidjeli smo to i prije. Ovo su samo varijable, svi koje počinju s znakove dolara. Sjetite se to su samo hrpa lebdenja bodova. Dakle, ne duljimo, na čemu se prođite kroz to, ako znatiželjni, ovo je Gotovo linija-za-line pretvorba C verzija speller.c u PHP-u. A što bi to ponoviti za pola tuceta drugih jezika. No, ono što je zanimljivo je to. Ili ono što je iskreno obeshrabrujuće je to. Pustite me da idem naprijed i upisati about dictionary.php, i tvrdnja da sam ići naprijed i ponovno provesti Problem postaviti šest ovdje. Dakle, neka prvi predložio da se u to file, koji će se provoditi u PHP, pa neka mi otvoriti moje oznake kao što je to. Dopustite mi da se daju globalni varijabla, veličina $ dobiva nulu. I ja ću dati Osobno hash tablicu. Ja ću koristiti hash tablicu za tu stvar. Kako mogu proglasiti hash tablice u PHP-u? Gotovo. OK. Tako otvorena zagrada u neposrednoj blizini zagrada predstavlja ono što je u PHP-u, kao što smo vidjeli? Niz, ali niz koji bi biti asocijativni niz. Asocijativno polje je struktura podataka koja suradnika tipke sa vrijednostima. Sada u najjednostavniji brojčano indeksirana polje, te tipke su ono? Nula, jedan, dva, tri, zar ne? Stara škola stvari natrag iz C. No, to može također biti nizovi poput Foo, i bara, ili Maxwell, ili bilo koji takav niz. Dakle, ja mogu utjecati da u samo nekoliko trenutaka. Dopustite mi da ide naprijed i proglasiti funkcija kao što su - neka je to opterećenje (prvo). Dakle funkcija opterećenja (). I PHP je malo drugačija u tome doslovno upišete funkciju, ali ne upisati povratnu vrstu. Ja ću ići naprijed i reći da load () funkcija treba uzeti u Argument $ rječnik, samo kao što je C verzija učinio. Radim to iz memorije. A ja predlažem da sam će to učiniti. Ja sam jednostavno učiniti foreach. Ja ću pozvati funkciju nazvanu datoteku (), prolazi u ime koje podnijeti, što je promjenjiva $ Rječnik kao $ riječ. A onda je unutar moja za petlje ovdje, ja sam ići naprijed i pohraniti u mom $ $ Tablica koja se pročuje istina. Gotovo. Oh, čekaj. Gotovo. OK. To je opterećenje () funkcija kažu u PHP-u. Sada, zašto to rade? I ja sam vrsta varanja ovdje. Dakle, jedan, foreach smo vidjeli Kratko zadnji put. To samo znači da se može ponoviti više Niz bez gnjavi s i i n i plus plus, i sve to. Rječnik je, naravno, ime datoteke, nešto kao veliki ili mali, dva rječnici koriste smo posljednji put. Datoteka je funkcija koja otvara tekst file, navodi se u red po red, i Ruke te natrag veliki niz, svaki od elemenata čija je je linija iz tog spisa. Dakle, to je kombinacija fopen, a fread, a while petlja, a fclose, i sve to. Konačno, što je riječ samo znači da je promjenjiva ću imati pristup na svakoj iteraciji u ovoj petlji. Dakle, ukratko, to je jedan brod ovdje znači otvoriti datoteku čije ime je u rječnik, promjenjiva, ponoviti tijekom to redak po redak, a svaki put kada se linija, pohraniti u varijablu riječi, a zatim učinite nešto s riječju. Što želim učiniti? Želim staviti riječi u moj hash tablicu. Pa, ja mogu staviti nešto u mom hash tablicu kao u C uglatoj zagradi. To je naziv za moj hash tablicu. Idem indeks u tom mljeveno meso Tablica na ovoj lokaciji. Dakle, ne zagrada nula, ne zagrada jedan. Nosač quote završiti citat nešto, što god ta riječ. I baš kao što bi mogli imati u svom hash tablicu rad trie, samo trgovina učinkovito Boolean, implicitno ili eksplicitno. Gotovo. Ja spremanje vrijednost true. Sada postoji nekoliko stvari Ja sam rezanje uglova ovdje. Tehnički, tamo će biti neugodno nova linija, / n, na kraju svaki od tih riječi. Tako sam vjerojatno trebao nazvati PHP funkciju zove kotlet (), koja će se doslovno nasjeckajte koji off. A ja zapravo trebaju napraviti jednu drugu stvar. Vjerojatno bih trebao povećavati veličinu na svakoj iteracija, pa sam praćenje na globalnoj razini što je to. I iskreno, a to je jedan od gluplje aspekti PHP, ako ste koristeći globalnu varijablu, trebate izričito reći da ste. Tako da ću se zapravo tip u globalnom $ Veličina, globalni $ stol, a sada moja je funkcija završena. Pa nije baš tako jednostavno kao i prije, ali Vjerojatno je manje vremena nego C verzija, možda? OK. Dakle, sada ćemo napraviti ček () funkciju. Da vidimo je li to barem uzeo sati na kraju da nas je odveo u C. Dakle neka mi ići naprijed i proglasiti provjeriti kao funkcija. Uzeti u argument riječi, što je će doći iz Speller. A ja sam samo ide da biste provjerili Sljedeća varijabla isset, stolni Nosač strtolower riječi - neka je ravnotežu sve moje zagradi - zatim se vratiti točno. Drugo - to je zapravo bilo teško dio ovog programa. Drugo, vrati false. Gotovo. To je provjera (). Sada, zašto to rade? Pa, jedan prošao sam u riječi, što je niz. Dvije, da provjeravam unutar mljeveno meso stol, koji se zove $ stol. Ja sam ga tjeraju u mala slova pozivom funkcija vrlo slični tolower () u C, ali to ne cijelu riječ, Ne jedan znak. A ako je to postavljeno, drugim riječima postoji vrijednost je postavljena, odnosno ako je to točno, onda da, to je riječ. Zato sam ga stavio tamo s opterećenjem (). A ako ne, ja ću se vratiti false. Sada su ostali jednostavno. Veličina Funkcija (), kako mogu to učiniti? Ja u biti to povratak $ veličinu. Ali ja tehnički trebaju učiniti ovu neugodnu stvar. A zapravo se čuje, sam rezao jedan kutak previše. Ja stvarno trebate učiniti globalno $ stol. No, to se, rekao je, iskrcati). Pražnjenje () je nevjerojatna. Funkcija prebacivanja (). Kako želim provesti iskrcati ()? Gotovo. OK. Dakle rasteretiti (), upravljanje memorijom je u potpunosti brine za vas u nešto poput PHP i puno od više razine jezika. Dakle, ovo je nevjerojatno. Kao i zašto dovraga smo proveli prošlost Osam plus tjedna na C pisanja očito jako sporo, doista vrijeme konzumiranje problemi s desecima sati rada pod pojasevi? Pa, kao prvo, to može raditi u redu za male programe. To svakako ubrzala moj vrijeme razvoja. No, da vidimo što će se dogoditi u stvarnom svijetu. Pusti me u ovaj imenik u prozor terminala. Tu je bukvar. I primijetiti kako je u stranu, a možda naišli ovo u problemu postaviti šest ili sedam set problema. Vi ne striktno moraju završiti PHP datoteke s nastavcima. php. Ako ste stavili liniju kao onaj prvi na samog vrha, to je posebna linija sintakse koja u osnovi znači pronaći Program se zove PHP i koristiti ga interpretirati ovu sliku. Tako da sada nitko ne zna kako Ja sam trčanje PHP programa. Mogu ga pokrenuti baš kao da je bili nešto sastavio u C. No, ovdje je stvar. Zapravo, hajdemo to učiniti opet. Dropbox/pset6 /. Tu je bukvar. OK, 0.44 sekundi. On je dobio brže ovaj put. Sada idemo u PHP verziji. Nice touch. No, samo mislim kako je puno vremena Spasio sam na radno vrijeme. OK. Dakle 3.59 sekundi, što je zapravo ne zvuči točno bilo. Ali to je zato što ne duljimo, kada ste ispis ogroman stvari na ekran, da Sama usporava stvari dolje. Ono što je stvarno je CPU u Uređaj je 3,59 sekundi, u kontrast na C, koja je 0,44 sekunde nedavno. To je doista redoslijed Magnituda drugačije. Pa gdje je ta cijena dolazi? Zašto je to tako puno sporije? Zašto PHP izvesti tako loše? Danielle? PUBLIKA: Vi zapravo nije koristiti hash tablicu. DAVID Malan: Nisam stvarno koristiti hash tablicu. Tako nekako sam učinio. Tako da je asocijativni niz. Najvjerojatnije, ako su ljudi na PHP su jako pametno, oni koriste ispod napa stvarna hash tablicu provodi u nešto poput C ili C + +. No. Da. PUBLIKA: [nečujan]. DAVID Malan: Da. Dakle, svaka od funkcija sada sam napisao - Zapravo, može li se reći da još jednom malo glasnije? Ivanković: Svaka od funkcija koje ste uključeni ima puno više puna kapacitet od - DAVID Malan: Dakle, to je vrlo istinito. Tu je puno više iznad glave da smo Stvarno ne vidim fokusirajući se samo na dictionary.php, što sam upravo napisao. Za razliku od toga, tu je cijeli tumač ide u pozadini. Doista, kad sam vodio ovaj program, to nije bio pokrenut sastaviti jedinica i nula dizajniran za moj Intel procesora. Umjesto toga, on je trčao redak po redak PHP kod koji izgleda baš kao što smo ga upisali. I tako svaki put kada koristite tumačiti jezik, što zapravo plaćaju tu cijenu. To će potrajati neko vrijeme za čitanje Vaš sliku od vrha do dna, lijevo Pravo, a zatim izvršiti svaki linija opet i opet. Sada je u stvarnosti, pogotovo na webu, zapravo možete ubrzati ovaj postupak by caching rezultate PHP kod se interpretira. I to ima smisla na webu, jer Ako niste jedan korisnik kao ja ovdje, ali 1.000 ili 10.000 korisnika, a zatim možda prvi put da je datoteka pristupljeno je spor, ali su nakon toga to je puno brže. Ali ovo previše, opet, je trade off. A za nešto poput podacima istraživačke postaviti, ili čak nešto veliko poput to, korisnici će na kraju početi osjećati da usporavanje. Tako je u kratkom, tumači jezici su jako u modi, vrlo popularan, a iskreno, vjerojatno su ti jezici treba posegnuti za kada rješavanju problema nakon CS50. Ali shvatite koliko ste stvarno uzimanje zdravo za gotovo ispod haube stvarno ti posljednjih nekoliko tjedana u mljeveno meso tablice, i drveće, i napad, koji se koriste u konačnici zapravo provedbu stvari poput otvorenog zagrada, uglata zagrada, što sada možemo zahvalnošću uzimaju zdravo za gotovo. Tako ćemo pogledati sada u ovom web kontekstu. I sam spomenuo posljednji put da postoji hrpa superglobals u PHP da zapravo nisu relevantni na zapovjednoj liniji. Oni više relevantna u kontekstu korištenja PHP u web kontekstu. Dakle trčanje PHP na web poslužitelju kako bi generirati stvari kao HTML. I mi pogledala $ _GET i $ _POST, a to je mjesto gdje se automatski korisnik ' Ulaz završi jednostavno ako podnese formirati u datoteku koja završava u. php na webu poslužitelj poput aparata. Ali neka je kratko pogledati $ _COOKIE I $ _SESSION. Laički rečeno, ono što je kolačić kao što ga razumjeti u kontekstu korištenjem weba? PUBLIKA: File na računalu. DAVID Malan: Da. To je datoteka na korisnikovom računalu zasadio god web vam se dogoditi da posjetite. Dakle, kada idete na Facebooku, kada idete da bankofamerica.com, kada idete na google.com, kad idete u gotovo bilo Web stranica u svijetu ovih dana, uključujući cs50.net, kolačić je posađeno na računalu, što je ili vrijednost koja je pohranjena u RAM-u Računalo u memoriji vašeg preglednika, ili Ponekad doista datoteke pohranjene na tvrdom disku. I što je obično pohranjena u toj datoteci Nije svoje korisničko ime, a ne na lozinkom, obično nije nešto osjetljiva, osim web stranice nije tako dobro s njihove sigurnosti, već to je velika jedinstveni identifikator među druge stvari. To je veliki slučajni broj zasađena na vašem Računalo, ali možete misliti kako je svojevrsni virtualni ruku pečat kao iz klub ili neki zabavni park koji omogućuje osoblje, vlasnici koji usluga, kako bi se sjetiti tko ste. Dakle, ako je veliki slučajni broj je poput 12345678, iako to je očito ne previše slučajni, mislim da je kao Ruka pečat da prilikom posjete facebook.com po prvi put, da unište taj broj na ruci. I onda zato što govore HTTP, što se preglednik, a zbog Facebook očito govori isto kao webu poslužitelja, HTTP protokola kaže da kad god kasnije posjetiti facebook.com, bilo da je drugi poslije, sat vremena kasnije, čak i sljedeći dan, tako dugo dok imate nije izričito odjavljen, koji učinkovito je kao pranje ruku. HTTP kaže da bi trebali predstaviti svoje Ruka žig svaki put kad vratite na tu web stranicu. Što Facebook tada se je da pogled na tu ruku i pečatom kažu, oh, 123456789. Ne znam na prvi pogled da je to David Malan u Cambridgeu, Massachusetts, ali oni mogu provjeriti svoje Baza podataka i reći, oh, osoba na čijem računalne smo posadili 123456789 David Malan od Cambridgea, Massachusetts. Pokažimo da korisniku onda mu profil stranica ili njegov News Feed. No, tu je problem ako je to je kako je web zapravo radi. Uzmimo pogled na brzi primjer. Idemo zapravo ići reći facebook.com. No, prije nego što smo mogli ići tamo, neka ja ići naprijed i otvoriti Chrome-a Inspektor ovdje. Dopustite mi pogledati karticu mreže. A sada idemo naprijed i upisati u https://facebook.com. I radim to tako da ne vidimo sve te preusmjeravanja i otpada Vrijeme gleda kroz njih. Dopustite mi pogodak ulaziti. U redu. Vidimo hrpu zahtjeva. Tu dolazi Facebook. Postoji cijela hrpa datoteka. I ovdje, po mom spomena latencija zadnji put, to je Mnogo HTTP zahtjeva. No, prvi je vjerojatno najzanimljiviji. Tako ćemo dođite ovamo, i Ja ću zumirati u sekundi. To će biti neka vrsta nered, ali vidjet ćemo. Facebook je nam šaljete cijela hrpa stvari. Ali, hej, zanimljivo. Oni sadnju ne jedan, nego četiri ruku pečata na mojoj ruci ovdje. Set-Cookie, Set-Cookie, set-cookie, set-kolačić. I postoji nekoliko mogućnosti ovdje. Svi oni spomenuti neke vrsta isteka. I izgleda da Facebook se nada da me se do 2015. Dakle, to je vjerojatno put kojim Moram se odjaviti ili će jednostavno automatski pretpostavljaju da sam ne vraća. Dakle, to je zapravo pristojan Količina vremena. A tu su i neki drugi stvari koje se ovdje događa. Ovaj kolačić se čini prisilno brišu rekavši je istekao 1970 Prije kolačiće postojala. Dakle browser samo ide pretpostaviti OK, to je kao pranje ruku pečat. No, sada kad je moj browser čini Sljedeći upit - neka mi ići naprijed i učiniti opet i reload. Sad neka mi dođite natrag top zahtjev i silaze Ovdje, zatražiti zaglavlja. Primijetiti. Sada sam pod ne zaglavlja odgovora, ali primijetiti da kaže zaglavlja zahtjeva. I primjetite da se moj browser kao dio njegov zahtjev nakon udarca reload ima poslala najmanje sljedeće informacije. Ne set-cookie, ali kolačić. Dakle, ovo je linija, HTTP zaglavlja, tako govoriti, gdje je moj browser je vrsta je bez mog znanja što prezentiranja moja ruka za Facebook inspekcije. Tako su ti kolačići mogu biti koristi onda što? Da bi se sjetiti tko ste, ili se ne sjećaju kako je mnogo puta sam bio tamo, ili stvarno ništa. Dakle, ovdje je counter.php. I neka mi povećavanje fonta. I svaki put sam ponovno odaberete ovu stranicu, obavijest to je prisjećajući se koliko puta Ja sam bio tamo. Pa, to nije sve što je impresivno. Ajmo zatvoriti tu karticu, a sad idemo natrag http://localhost/counter.php. Oh, to je zanimljivo. Ona još uvijek pamti, pa čak i iako sam zatvorila karticu. I iskreno, ako zatvorite preglednik, ako se provodi na pravi način, ja mogao se još uvijek sjećaju kada je ovaj korisnik tko je on ili ona je prvi put, a samo jednom sam ići u izborniku Chrome, koji ovdje je ovdje, i idite na Povijest i kliknite Obriši podatke, kao što neki od vas svibanj imati u prošlosti, tek tada će vaše kolačiće zapravo će izbrisani tijekom webu razvoj. Dakle, ako ćemo ići - neka je izbliza gedit ovdje. A ako idemo sada na ovu datoteku. Pusti me u našu vhosts / localhost / javno, i neka mi to counter.php. Uočite da je ovo prilično jednostavan program. To je prilično jednostavan web stranice. Dakle vrhu datoteke je samo komentari. No, ovdje je nova linija koje ste svibanj Vidio je već u p-set sedam, session_start (). To je linija PHP koda koji suštini govori web poslužitelj, provjerite sigurni da unište ruke i napraviti pročitajte ruke markice. To je sve što je linija radi, i to čini sve da proces za nas. Zatim primijetite Upravo sam dobio dvije grane ovdje. Ako brojač ključ unutar toga posebna globalna varijabla zove $ _SESSION Postavljen - drugim riječima, ako ima neke vrijednosti postoji - uzmimo je i pohraniti ga u lokalnu varijabla zove $ brojač. Inače, neka je dodijeliti $ brojač Zadana vrijednost je 0. Sada ovdje je jedan aspekt PHP koji je i blagoslov i prokletstvo. PHP je malo neuredan. Dakle, dok je u C, što bi Opseg pulta bili bilo ovdje ili ovdje? To bi bila ograničena onim vitičastim zagradama. Pogodite što? U PHP-u, ona postoji i izvan onih vitičastim zagradama, ovdje i ovdje, i ovdje, i ovdje, i ni dolje. Zato kažem to je blagoslov u smislu da ne morate razmišljati kao teško kao što smo učinili prije nekoliko tjedana. No, to je također malo prokletstvo u koje bez obzira na to gdje se koristiti varijablu u PHP, barem u programu kao što je ovaj, to je globalno dostupan za bolje ili na gore. Dakle, morate imati na umu da sada Vaši varijable ne mogu biti nedefiniran. Možda ste ih definirati i drugdje. No, ono što ću učiniti u konačnici? Idem za pohranu unutar koje globalna varijabla kao vrijednost Brojač utipkati rezultat radi brojač plus jedan. Dakle, ovo je samo aritmetička da ne incrementation od pulta. I činjenica da sam pohranjivanje da vrijednost natrag u ovdje je znači bitno ažurirati bazu podataka kako bi sjetite se da korisnik 123456789 je ovdje dva puta. I kad sam to učiniti opet sljedeći put ću ponovno učitati stranicu, to će provjeriti moja ruka pečat i reći, oh, Korisnik 123456789 ima sada bio ovdje tri puta. I što PHP i slično jezici rade za nas je da se figurica kako i gdje i na koliko dugo za spremanje vrijednosti u ovo posebno superglobal. A to superglobal sljedeći put ću posjetite stranice je vrsta magično pre-naseljena, popunjena s vrijednostima koje bili tamo posljednji put posjetila, je li to bio drugi prije tjedan Prije, ili u 2013, a mi sada pričamo o 2015. PHP i web poslužitelja brine za sve to za vas. PUBLIKA: [nečujno]. DAVID Malan: varijable u PHP-u su suštini uvijek globalna ako vas ih proglasiti unutar funkciju, , a zatim su se lokalni Funkcija jedini. Ali zato sam nije zapisano bilo funkcija, oni su sada praktično Globalna tijekom cijele moje datoteke ovdje. PUBLIKA: Da li postoji način kako bi ih domaćini? DAVID Malan: Je li bilo način da ih lokalno? Samo ih umatanje u funkcijama. Koji je u najnovijoj verziji PHP, možete to učiniti s anonimni funkciju. , Ali više o tome u kontekst JavaScript. No, kratki odgovor je ne. Duži odgovor je potvrdan. Nica. Dobro kviz pitanje. U redu. Dakle, na kraju, sama stranica je zapravo prilično jednostavan. Obavijest da je jednom sam izlaz iz PHP način, prisjetiti da sve ove stvari dolje u nastavku je samo ide da biste dobili pljuvačku iz sirovog u pregledniku. Koji je u redu, jer ne želim poslati Korisnik neke HTML, ali ja ne želim se dinamički ažurirati HTML tu. A jedan od načina da mogu to učiniti je riješiti vrlo brzo pasti natrag u PHP-u Način, koristite otvorena zagrada upitnikom znak jednakosti, a zatim vrijednost izlaza od pulta. Ili, ako to izgleda pomalo zagonetan, ovaj znak jednakosti je zapravo samo neke sintaktička šećera za to printf ($ counter). Ali iskreno, to je samo malo ružno i malo neugodno upisati. Dakle PHP vrlo lijepo nudi tu mogućnost gdje se samo mogu reći više sažeto na isti način. Dakle, ono što se dešava ispod napa? Idemo brzo pogledati na mreži Kartica ovdje counter.php. I neka mi ići naprijed i prvi put neka je izbrisali svoje kolačiće. Idemo Obriši podatke od početak vremena. Sada ćemo se vratiti ovamo. Sada ćemo se ponovno učitati stranicu. I ja sam se vratio na nulu. Budući da moja ruka marka je oprana, Ja sada dobiti novi kolačić. Doista, ako sam pogled na mrežnoj kartici, a pogledajte odgovor zaglavlja, primijetit da aparat me slanje Cookie čije ime je nešto samovoljno, već vrsta razumno, PHPSESSID. I to me slanje ovo stvarno Veliki slučajni broj. To nije dosta. To nije sasvim heksadecimalni. To je neka vrsta alfanumerički niz, ali vjerojatno je slučajna. I to je ruka pečat, tako da govore da sam se odnosi na. U međuvremenu, ako kliknem ponovno učitavanje, a zatim pogledajte ovaj drugi red za moj drugi Zahtjev, primijetite da je sada moj zahtjev zaglavlja su PHPSESSID jednaka ovo, Ne set-cookie, ali samo kolačića. I to je moj preglednik prezentacija moje ruke pečata. Tako sada kao teaser, a mi ćemo govoriti više o tome za tjedan dana ili tako, ali na koji način to napraviti od vas ranjiva, vaš Facebook račun ranjiva, kao i druge računi ranjivi? PUBLIKA: Ako netko ima svoj kolačić. DAVID Malan: Da, ako je netko ima svoj kolačić. Mislim stvarno, baš kao i neki od vas Možda su pokušali na poput klubu ili Zabavni park, ako pokušate nešto ovako kopirati pečat, doduše natrag na tuđe ruke, i onda on ili ona to predstavlja kao vlastitu, ako se to zapravo ne izgleda identični, 123456789, a zatim web poslužitelja očito je samo ide vjerujem da je taj korisnik je li. A to je doista temeljno Prijetnja svaki put kad koristimo kolačiće jer ako netko samo parodije, tako da Govorimo svoje cookie, figure out što je, bilo je doista da ga kopirate gledanjem na vašem računalu i da kao, u redu. Davidov Cookie je JJ3JIK i tako dalje, i onda su oni dovoljno pametan da zna kako sortirati od ručno poslati da Cookie u pregledniku ili iz Program oni pišu, oni bi potpuno prijavite u web stranice kao i vi. Nije da je teško pretvarati se da netko drugi, osim ako smo ponovno p-set dvojica, koji je uveo što? PUBLIKA: Kriptografija. DAVID Malan: Malo Malo kriptografije. Jednostavan kriptografije, barem u Standard Edition, ali kripto svejedno. manje. Tako ispada ako šifriranje sve ove zaglavlja koriste nešto što Možda sada znamo više familijarno kao SSL, secure socket layer, ili https URL-ova, onda sve ove stvari koje smo bili Bacimo li pogled zapravo su šifrirani, što znači da je kao ti Ne mogu pročitati pečat ruku. Samo facebook.com mogu, ili google.com, ili u ovom slučaju, uređaj može pročitao taj pečat ruku. Tragično ipak, i opet, ovo je predobro potrebi s NSA stvari u posljednje vrijeme, čak i SSL je lomljiva. I to je zapravo nije tako teško čak i ispucati taj enkripciju. Nije toliko pucanja enkripciju, ali tricking preglednik u dekriptiranje podatke preuranjeno. Ali opet, mi ćemo vas zafrkavati s tim ne zadugo. Za sada, samo se bojati. To je tragično vrsta istina. U redu. Dakle, gdje se ovaj sada nam preostaje? Pa, neka je to učiniti. Idemo naprijed i uzeti brzi teaser prije nego što smo se odmoriti. I mislim da ćemo ostati malo duže danas, ali ćemo zaroniti u nešto potpuno novo i seksi, što će oštriti apetit za još više. Dakle, to je teaser. Dakle, SQL, počeli smo govoriti o uvijek je tako nakratko posljednji put. Stvarno ćete dobiti vaše ruke prljave s nekim od njega u p-set sedam. I u laik uvjete, što se SQL - S-Q-L - učiniti za vas? Što je to? Da. PUBLIKA: Idemo li pristupiti podacima. DAVID Malan: Da. To neka je pristup podacima u bazi podataka. Ustrojeni upitni jezik. A to je u biti programskom jeziku. Postoje mogućnosti za to da nismo ni koristiti u razredu. No, možete učinkovito definirati funkcije. Nazivaju se pohranjuju Postupci u SQL. No, mi ćemo ga zadržati prilično jednostavan i jednostavno ga koristiti za neke osnovne operacije kao i odabirom podataka, umetanje podataka, ažuriranje podataka, i brisanje podataka. I zaista možete sjetiti baze podataka, kao SQL baze podataka, kao tek što Microsoft Excel. Budući da se odnosi na SQL relacijske baze podataka, gdje je Odnos samo znači tablice. Redaka i stupaca. Dakle, sve što se može staviti u tablicu ovakav ili Google Docs, mogli staviti u SQL bazu podataka proglašavajući tablicu. Sada, kako se zapravo pristupili ta informacija? Pa, s naredbi ili upite kao što je ovaj. SELECT, INSERT, UPDATE i DELETE. I za najveći dio, oni su Četiri jedini sastojci morat ćete učinite nešto sasvim snažno u problemu postavili sedam. Sada natrag u dan, što bi zapravo interakciju s bazom podataka u crno-bijeli prozor terminala na treptati brz kao što je ovaj. I baze vodimo na Uređaj se zove MySQL, što je besplatan i open source baza podataka motor. Ako Google i pročitati Wikipediju članak, znat ćete da je ime malo tranziciji za neke verzije Linuxa. Maria je zapravo baza tanjura tako govoriti o MySQL. Da ne duljimo, Oracle kupio MySQL. Oracle je velika tvrtka. Ljudi su zabrinuti da bi više ostati sasvim kao open source, pa to je samo kopija MySQL to je još uvijek slobodni, uvijek open source, a instaliran u Fedora Linux po defaultu. No, to je vrsta boli u Vrat da se upoznaju s baze podataka na taj način. Dakle, mi uključiti u CS50 aparata besplatni open source alat koji se zove phpMyAdmin. Samo slučajnost da to je napisano u PHP-u. Ne postoji temeljna potrebno za PHP ovdje. No, to je samo web-based alat koji možemo skinuti besplatno, instaliran u aparata, koji nam omogućava da Grafičko sučelje s kojom istražiti p-set sedam baza podataka s za izradu novih baza podataka, kažu za svoj završni rad ako bih sviđa, te u konačnici stvoriti dinamičke web stranice kao što CS50 financija koji vam omogućuju da upita podatke i ažuriranje podataka dinamično. Nećeš se morati koristiti samo jednostavne tekstualne datoteke ili CSV. Vi zapravo možete koristiti Smart baze podataka Program tako da možete izvršiti više sofisticirane upiti nego samo čitati kroz sve linearno. Tako na primjer, to je ono što mi daje što iz kutije za p-set sedam. Ovo je stol s naizgled najmanje tri stupca, od kojih je jedan korisničko ime, od kojih je jedan hash, a drugi od kojih je ID. Ali zanimljiva stvar, i samo se izmamili jedna misao ovdje, korisničko ime vjerojatno je već jedinstveno, zar ne? Mislim, najviše bilo koju web stranicu, ako je imate korisničko ime, postoji ne mogu biti dva Caesars. Tu ne može biti dva Malans. Tu ne može biti dva jharvards. Njegov jedinstveni. Inače, oni ne znaju što jharvard što zapravo jest. Dakle, ono što bi moglo biti motivacija za također ima i treći stupac na lijevoj postoji zove ID, koja izgleda kao broj koji je sličan jedinstveni? Ona se osjeća malo suvišnim mi se na prvi pogled. Zašto bi to biti uvjerljiv imati Ne samo jedinstvena korisnička imena, ali i jedinstveni brojevi? PUBLIKA: Mogli bi imati ista lozinka. DAVID Malan: Ljudi bi mogli imati ista lozinka sigurni. To apsolutno moglo dogoditi. Ali ako su ovo jedinstveno korisničko ime, sam će tvrditi da je to zapravo ne stvar, jer ako se upišete u njihovom korisničko ime, da je potrebno provjeriti njihovu lozinku, njihove hash tome. Zašto drugdje? PUBLIKA: brže pretraživanje. DAVID Malan: brže pretraživanje. Zašto? PUBLIKA: ID je samo jedan. DAVID Malan: ID je samo jedan znak, ili, da budemo precizniji, to je broj, tako da je vjerojatno 32 bita ili nešto slično. Dok korisničko ime, očito Jason Hirschhorna tamo je vrsta smiješno dug, a to će mi se puno više vremena na žici usporediti H-I-R-S-C-H-H-O-R-N, a možda / 0 ili nešto slično, da bi potražiti Jasona, za razliku od samo govoreći mi dati upute broj dva. To je 32 bita. To je jedan INT da imate za usporedbu. I doista, to je točno zašto baze podataka imaju tendenciju da se dodijeliti jedinstveni ID za redovi u njima. Sada ono što drugi tipovi podataka su tu Osim INT i očito žice kao što je ovaj? Pa, da se više pravilno, SQL baza podataka, kao što su MySQL, ima CHAR polja. I CHAR malo misleadingly nije jedan CHAR. Polje CHAR u MySQL bazu podataka je jedan ili više znakova, ali to je fiksni broj znakova. Tako na primjer, ako idem na to phpMyAdmin kao što ste možda već, ili Uskoro će se problem postaviti sedam, i idem mojoj bazi podataka, i samo za zabavu, neka je stvoriti novu tablicu pod nazivom testirati sa samo dva stupca. Ja ću onda kliknite Idi. A to će biti prilično poznato, posebno kao što prtljati okolo na svoju vlastitu. Evo ja mogu upisati ID stvoriti Nova tablica tipa int. No, ovdje bih mogao upisati korisničko ime za ponovno da je ranije stol. I primijetiti imam hrpu vrsta koje možete izabrati. I ovo je razlog zašto phpMyAdmin je baš lijepo. To je vrsta self-nastave u tom vas može samo vrsta točku i kliknite, a pogled na padajući izbornici, i zaključiti iz da je ono što pokreće SQL vam daje. I doista, ako se odlučim CHAR, onda sam moraju odrediti dužinu, ili kako mnoge vrijednosti, koliko znakova. Dakle, vrlo zajedničke vrijednosti su stvari poput 255, ali to je malo dugo. Obično je osam za korisničko ime. No, to je malo mali ovih dana. Dakle, ovo je dizajn odluka. Je li 8 znakova max, 32, 255, 1000? To je stvarno na vama. Ali polje CHAR je stalnu vrijednost. Dakle, odabrati premalo i da ste vrsta pijan ako želite dužu korisničko ime. Odaberite previše, a ono što je nedostatak? PUBLIKA: [nečujan]. DAVID Malan: To je rastrošna. Baš kao u C, ako imate veći komad memorije nego što je potrebno, da si samo gubljenje vremena i rasipanje prostora. Dakle, kao alternativa, postoji VARCHAR, koja rješava ovaj problem duljinu tretiranja ne kao fiksne duljine, ali kao maksimalne duljine, i pomoću varijabla broj znakova, koji se potom sklon koristiti samo onoliko znakova kao ti zapravo potrebno. To zvuči savršeno. Zašto ne možemo riješiti Char podaci tipa onda? Ono što bi moglo biti downside pomoću VARCHARs, što zvuči kao da je lijepo pobijediti? Da? PUBLIKA: [nečujan]. DAVID Malan: U redu, dobro. Dakle, ako sve vaše podatke je isti duljinom, ono što je problem? PUBLIKA: Budući da ste gubit Podaci po njima sve govori. DAVID Malan: Dakle, ako sve vaše podatke je iste duljine, međutim, ja bih rekao koji određivanju maksimalne duljine Na VARCHAR se ne razlikuje od određivanjem fiksne duljine na CHAR ako vi znate da je broj unaprijed. No, tu je doista, a ja ću nekako izvuci iz tog odgovora stvarnost da ima još max, što bi moglo biti neugodno, pogotovo ako naići na ime osobe koja je neuobičajeno dugo da nisi predvidjeti. I to je također nešto manje učinkovita zapravo traži na VARCHARs kao razliku u potrazi znakova, pogotovo za duge stolove koji imaju puno i puno podataka. Tako i ovdje, tematski je opet nema očiti izbor. Dakle, samo da vam dati osjećaj drugog vrste podataka koji bi mogli biti od interesa bilo za p-set sedam ili u Budućnost, postoji INT. Postoji BIGINT, koji je kao dugo dugo. To teži biti 64 bita. Postoji DECIMAL, što ćete vidjeti u zadataka, koji je mnogo čišći odgovor na probleme s kojima se susreo s float i pluta ukazuju nepreciznost. A onda je tu DATETIME. Tu je doslovno tip podataka koji ima izgledati kao godinu, mjesec, dan, i sat, minute i sekunde. No, SQL baza podataka također imaju stvari koje ćemo nazvati indekse. I index je nešto što odrediti prilikom izrade tablicu napraviti pretrage i druge operacije učinkovitiji. Naime, postoji nešto što se zove OSNOVNA indeks da bi mogao izjavljujem kako slijedi. Učinili smo to za vas s Korisnici stol ćemo vam dati. Ali primijetite da sam ručno su ponovno Korisnici stol ovdje davanja to ime korisnika. Ja već odredili ID. Specificirano sam INT. Specificirano sam korisničko ime s maksimalno 32 znaka. No, ako se držimo pomicanje u to prilično široki prozor, obavijest postoji hrpa drugih stvari koje mogu odrediti. Jedan od njih, ja mogu navesti atribute kao, znaš ono, to INT trebao biti nepotpisana. Ne želim negativne brojeve, pa neka je to učiniti bez predznaka. Null nije relevantan jer ovdje Ja želim svakom korisniku da imati jedinstveni broj. Ja ne želim da to bude nula. No, to je zanimljivo. Mogu navesti da ID je bilo Primarni ključ ove baze podataka, ili je to jedinstveno, ili je to indeksirane, ili cijeli tekst. Tako je za današnje potrebe, duga priča Ukratko, osnovni način da se to mora biti i konceptualno i tehnički Polje koje ćemo koristiti za jedinstveno identificirati korisnike. Dakle, kada gledamo up korisnike, ovo je neka vrsta obećanja da im se izgled uglavnom taj jedinstveni identifikator. I baza podataka će osigurati da, ako vam imati korisnički broj 3, ne možete fizički umetanje novog korisnika sa istim brojem 3. Baza će samo odbiti Za spremanje promjena. Koja je dobra stvar, jer možete zaštitili sebe od sebe. sam Alternativno, za korisničko ime. Dakle, drugi red, podsjetimo, je polje username. Dakle, drugi red ovdje je username, kao što smo učinili na krajnje lijevo tamo. Pa što bi još moglo želim navesti? Ne smijem, prema SQL, navesti dvije primarne ključeve. možete odrediti zajednički ključ gdje pogledajte oba polja, ali ne mogu pojedinačno biti primarni ključevi. Tako da je dolazilo u obzir. Dakle, što bi moglo želim odabrati? Pa, unikat je u sličnom duhu Primarni ključ u kojem ste naveli ovo Polje će biti jedinstven, ali to je ne će biti jedan Ja koristiti sve vrijeme. I nećemo koristiti ovaj sve Vrijeme iz kojeg razloga opet? To je potencijalno sporije ako je to je dugo ime. To je samo gubljenje vremena. INDEX, u međuvremenu, navodi da je neće biti jedinstven, ali ja bih da rade svoj magiju ispod napa kako bi ga brže za mene traži na tom području. Dakle, to vjerojatno nije relevantno ovdje. Za korisničko ime, ja bih se tvrditi da Jedinstvena je dobar odgovor. No, pretpostavimo da smo napravili korisnici više Zanimljivo nego samo korisnička imena, sasjecka, i identifikacijskim brojevima. Što ako mi je dao ljudima puna imena? Što ako mi je dao im se obraća i drugih podataka o njima? Pa, ako ste odredili da je stupac u baze indeksira, to znači da MySQL ili Oracle, ili što god baze podataka koju koristite, trebali raditi svoje čari i koristiti nekakav fancy podataka struktura kao drvo, ili trie ili hash tablicu, ili nešto da se jamči da kada ste traženje podataka pomoću odabrati na tom području - sviđa mi pokazati svima da je živi na Oxford Streetu. Upita kao što je to. Ako ste unaprijed određen da želite indeksa na tom području, pretrage će biti puno, puno brže. Ako ne odredite indeksa, najbolje možete učiniti je linearna ako traži to nije riješeno. Ali, ako ste naveli INDEX, pametna ljudi koji su u bazu podataka - ljudi poput tebe koji se sada znaju stabala i napad i hash tablice - će automatski graditi takve podatke struktura u RAM kako bi bili sigurni da ti pretraživanja su mnogo brže. Cjeloviti tekst međuvremenu je u sličnom duhu, , ali vam omogućuje da učinite zamjenski pretraga, sviđa mi pokazati svima da je živi na ulicama koje počinju s O pismu iz bilo kojeg razloga. Možete napraviti zamjenske pretraga svidjelo. Ili, još uvjerljivi stvari kao što pokazuju mene svatko tko ima riječ - mi pokazati svima čije ime počinje s posebnim pismom. Možete tražiti ključne riječi na ovaj način. U redu. Dakle, dizajn prilike potencijalno postoji. Postoje drugi koji ću mahati moje ruke na. Ispada da možete imati različite priče motor. A to je više nego što nam je potrebno kompliciranih Sigurno problema za postavljanje sedam. Po defaultu, ti dečki su pomoću nešto što se zove InnoDB. Vidjet ćete spomen ovog negdje u phpMyAdmin sučelje najvjerojatnije. No, znamo da postoje i drugi dizajn Odluke koje su potencijalno Kamatna dolaze završne projekte, ako li učiniti nešto web-based. Ali neka je to učiniti. Idemo naprijed i staviti to na Zaslon kao teaser za priču uključuje vas, cimer, i čašu mlijeka. Uzmimo dvije minute ili tako razbiti ovdje. I ako možete staviti oko, neka dođe natrag, izgleda malo više na SQL, i onda malo JavaScripta s p-postavili osam na umu. U redu. Dakle, krenimo razmišljaš kutak slučaj da vrlo lako mogu nastati u kontekstu korištenja baze podataka, ili iskreno, čak i koristeći stvarnom svijetu stvari kao bankomati dobiti novac. Dakle, ovdje je hladnjak. Pretpostavimo da ste je dobio jedan previše u Vaš studentski dom ili tvoja kuća. A ti imaš jednu cimericu, a obojica vi stvarno vole mlijeko za primjer. Dakle, dođete kući iz razreda jedan dan. On ili ona još uvijek nije vratio. Možete otvoriti frižider. Stvarno želim veliku čašu mlijeka. Nema mlijeka. Dakle, što ćete učiniti? Možete zatvoriti frižider. Vi iskoristite svoje ključeve. Možete otići na trg. A ti u redu u CVS na onima self-checkout stvari, koja uvijek potrajati dulje nego što je zapravo ima blagajnama. Bilo kako. Dakle, u međuvremenu, dot dot dot, vaš cimer dolazi kući, a on ili ona Slično je žudnja za malo mlijeka. Dakle, on ili ona otvara frižider, izgleda iznutra, i oh, damn. Ne mlijeko. Tako je na čelu out, dogodi otići na drugim CVS, što je samo blok dalje iz nekog razloga, a on ili ona dobiva u skladu kupiti mlijeko. U međuvremenu, dođete kući, on ili ona dolazi kući, i što učiniti što u konačnici ima? Dvostruko više mlijeka. Ali stvarno ne sviđa mlijeko toliko. Tako sada imate toliko mlijeka da je sada jedan od njih će otići kiselo na kraju. Dakle, ovo je stvarno loše problem. Točno? Dakle, što se dogodilo? Dakle, iz temelja, to je vrsta od smiješan primjer. No, ispod poklopca motora, ono što smo imali dogoditi ovdje je i za vas provjeriti stanje nekog komada memorije, hladnjak. Obojica provjerio stanje neke varijable. Obojica su izvukli zaključke da onda je djelovao na. No, na žalost, dok je tvoj cimer bio u trgovini, država koja varijabla promijenila, on ili ona se vratila a sada želi promijeniti stanje, ali to je već promijenio na njega ili nju. I naravno, on ili ona neće imati otišao u dućan, ako su znali da ste već bili na putu. Dakle, u stvarnom svijetu, kako si mogao izbjegli taj problem, uz pretpostavku da su hladnjak, imate cimera, a vi zapravo kao mlijeko? PUBLIKA: Komuniciranje. DAVID Malan: Komuniciranje. OK. No, kako bi vi komunicirate? PUBLIKA: Ostavite poruku. DAVID Malan: Ostavite znanje, zar ne? Uvijek ostavite napomenu, za ljubitelji showa. U redu, tako da uvijek ostavite napomenu, ili mu doista poput lokot ili tako nešto na hladnjaku koji čuva cimerica iz Uvidom u stanje da je promjenjiva. Sada, zašto bi to biti povezan s Problem set od sedam, ili bankomata. Pa, zamislite svijet u bankomatu gdje možda ćete biti u mogućnosti otići do bankomata Stroj ovdje, a drugi ovdje ATM. I to se događa prilično često. A pretpostavljam da ste imali dva ATM kartice, što je moguće dobiti. A što se prijavite u obje strojeva učinkovito istovremeno, nadamo se dok nitko ne gleda. I onda upisati svoj PIN otprilike istovremeno. A onda napraviti bilancu upit vidjeti koliko novca imate. I recimo da imate 100 dolara ostavio na računu. Dakle, u biti isto, što recimo jedan, nula, nula, upišite. I nadamo se vratiti nešto novca. No, koliko novca mogu li se vratiti? Sada računala na kraju dana, pogotovo ako ste u razgovoru s poslužitelji, ne mora nužno raditi stvari u cilju da se očekuje. Dakle, pretpostavimo da ono što se događa, zbog bez obzira na brzinu mreže problemi postoje su, ili CPU problemi su tu, ili bilo što slično, pretpostavimo da Prvi ATM provjerava stanje i vidi, oh, ta osoba ima 100 $. No, tada dobiva rastresen, jer možda backup se događa i tako je usporava. Ili možda, a provjere, mrežu Priključak je dobio malo sporije, jer to jednostavno dogodi. Oni su fizički uređaji. Dakle, u međuvremenu, drugi je ATM postavljam isto pitanje. Koliko novaca nema David ima? 100 dolara je odgovor. Ali zato što je prva ATM još nije poslao poruku oduzmite 100 dolara, i Bankomati su pregledane banke trezor, kad postoji 100 dolara postoji, a sada Oba stroja su potencijalno ide ispljunuti odgovor. Sada, ovo je super za vas u nekom smislu ako je ono što banka radi u konačnici se promijeniti iznos na minus 100 do postavljanjem varijable jednake vašoj bankovni račun jednaka 0, nasuprot se radi minus 100.. Sada u najgorem slučaju za banke - ili u najbolje za banku, u međuvremenu, oni vam dati 200 $, a Vaš bankovni račun pokazuje negativan $ 100, što doista nije imati koristi uopće. No, poanta je da je ova utrka Uvjet za dobivanje dvije cimerice mlijeko, odnosno za dva bankomata pokušavaju dobiti novac i promijeniti stanje u trezor u isto vrijeme postoji bilo Vrijeme imate bazu podataka. Sada je u problemu postavili sedam, ovo pitanje nastaje u smislu da ako kupite Udio Facebook skladištu, a zatim za instanca li kupiti drugi dio Facebook dionica, što je potrebno napraviti Odluka kao programer. Kako bi se odlučiti kako ažurirati baze podataka, izgledi su da ćeš ima jedan redak za tu skladištu, i ovo je jedan od načina kako to provesti. A ti ćeš imati jedan udio FB, što je njihov burzovni simbol za ovu korisničkim imenom, ili ovog korisnika ID, jedinstveni identifikator. No, ista priča se može dogoditi ovdje. Ako ne SELECT u SQL, kao što ćete vidjeti u problemu postavili sedam kad vidite, Oh, David ima udio od Facebook skladištu. Dopustite mi da se to promijeni kako bi se dvije dionice, jer on želi kupiti Drugi udjela. Ali pretpostavimo da je David zapravo imao dvije browser prozore otvorene ili pretpostavimo da to je zajednički račun s dva supružnika, i obojica pokušavaju izvesti Isto operacije, postoji, također, postoji mogućnost odluka bila napravljena je na temelju prethodnih stanje u svijetu - računu ima jednu dionicu - a obje osobe, ili oba poslužitelja, sada pokušati reći to povećajte na dvije dionice. No, u ovom slučaju, možda ste naplaćuje ja para za obje dionice, ali porastao samo to jedno vrijeme. Tako je u kratkom, temeljni problem Ovdje, kao i sa šalom oko izlaska umu, ili stavljajući lokot na njoj, je Ako se dvoje ljudi, ili dvije teme - prisjetim se ispočetka - Možete provjeriti stanje neke varijable a zatim pokušati promijeniti tu varijablu, ali te dvije stvari se ne dešavaju na isto vrijeme, ali mogu dobiti prekinuta od strane drugih stvari koje se dešavaju, podaci se mogu se u vrlo čudnom stanju. I možete imati koristi ili može trpjeti u smislu novca primjer. Tako je u sedam set problema, možemo vam dati ova linija koda, koji je dugo Ukratko, to rješava Problem je u MySQL. Ovaj jako dugo upute da se ne čak i stati na jednoj liniji na Zaslon ovdje osigurava da vaš rad je ono što se zove atomska. Sve se događa odjednom, ili to se ne događa na sve. Ovaj jako dugo fraza ne mogu dobiti prekinuta djelomično. A što to je doslovno ono što govori. Stavite ga u nekoj tablici sljedeće tri stavke one određene vrijednosti, ali na duple tipke, nemojte učiniti umetak. Da li ažurirati. Dakle, ovo je kao radiš SELECT i INSERT takoreći u isto vrijeme. I ono što je ključno da je vjerojatno se spominju ovdje? Ispada, a to ćete vidjeti u Problem postaviti sedam je spec., jer smo izjavio da postoji jedinstveni ključ Na ovom stolu, kao da je ne može imati više redaka za istog korisnika s Isto penny stock simbol - u ovom primjeru ovdje, DVN.V je glupo penny stock da smo odnose se na spec.. Budući da smo proglasili da bude jedinstvena, što to znači da, ako vam pokušati umetnuti duplikat red, ti si umjesto da ću ga ažurirati bez bilo tko drugi ima priliku promijeniti stanje svijeta bilo. Dakle, ukratko, to osigurava stvari su atomska. Općenitije ipak, baze podataka kao što je MySQL - a vi ne trebate ovu značajku za p-set od sedam, ali imajte to na umu za Budućnost - podržati ono što se naziva transakcije, gdje možete reći START transakcije doslovno. Nakon toga možete izvršiti dva SQL izraza. I SQL, kao što ćete vidjeti u p-set sedam, izgleda malo nešto kao što je ovaj. Ažurirati tablicu pod nazivom računa. Postavite balans stupac jednak bez obzira na Stupac trenutno je minus 1.000, gdje je broj, broj računa, kao i korisnika ID, iznosi 2, a zatim ažurirati Račun dot dot točku. Dakle, laički rečeno, što ove dvije upite čini se da se radi u stvarni svijet osjećaj bankarstva? PUBLIKA: Prijenos na štednju. DAVID Malan: Točno. Prijenosom sredstava s jednog računa na drugi. I ovo je još jedan primjer gdje se stvarno želite ove dvije stvari dogoditi ili ne dogoditi. Vi ne želite nešto da se u Srednji od njih i potencijalno zabrljati matematike, ili zabrljati koliko novca imate, ili koliko Novac banka ima. Dakle, ono što je stvarno lijepo o transakcijama u MySQL je da, i baze općenito, da su i pametni ljudi koji su implementirani ove značajke shvatiti kako bi sigurni da su i od onih stvari dogoditi ili uopće ne. I ako doista su teže napraviti web stranica koja se koristi od strane ljudi na kampus, ljudi u stvarnom svijetu, radi nešto u smislu pokretanja, To su vrste dizajnerske odluke koje postaju sve tako važno. Inače, što počnete gubiti podatke, izgubit Korisnici, ili u najgorem slučaju kao vidjeli smo ovdje, potencijalno izgubiti novac. Pa opet, više o tome u problemu postavili sedam, te možda i za neke što je u završnim projektima. Tako ćemo promijeniti tu sliku smo imali Prije trenutak samo u još jedan način. Zato mi dopustite da se zapravo vidjeti ako mogu - Nope, koji je otišao. Tamo je. Dakle, ovo je mjesto gdje smo ostavili zadnji put. I ispostavilo se da ćemo bacanje još jedna stvar u mix ovdje - jezik zove JavaScript. Dakle JavaScript zapravo uklapa u ovom komadu - i nisam sasvim ostavljaju dovoljno prostora, tako da to nije sada na ljestvici. OK, ovo je stvarno jadno. U redu, tako da je JavaScript. U redu. Ja sam stvarno to rade loša. U redu. Dakle JavaScript je još jedan programski jezik, i naša posljednja, ako to pomaže uvjeriti da ne postoji mnogo više od požara hidranti ovdje. Dakle JavaScript je također tumačiti jezik, što znači da ne sastaviti ga u nula i jedinica. Vi samo ga pokrenuti. No, ono što je bitno različita s JavaScript obično je da vam ne može se pokrenuti na svoj web poslužitelj. To ne bi raditi u Uređaj po sebi. Umjesto toga, on dobiva skinuti korisnik putem HTTP u preglednik - Chrome, Safari, Internet Explorer, Firefox, bilo što - i to je preglednik koji izvršava ovo Posebno programski jezik. Dakle, da bude jasno, PHP je dosad bio izvršiti bilo na zapovjednoj liniji u naša crna i bijela prozor, na poslužitelju poput uređaja, računala Sviđa aparat, ili je to bio izvršiti na web poslužitelju radi na računalu. No, tema je da PHP dosad izvršen server-side, pa Korisnik i korisnikov preglednik nikada ne vidi liniju PHP koda. U stvari, ako ste ikada otvoriti preglednik za druga vaše web stranice ili i vi zapravo vidjeti PHP kod u prozoru, netko je zajebao. Budući da to nije značilo da se poslao u pregledniku izravno. To je trebao biti izvršen i okrenuo u nešto kao HTML. Ali JavaScript je u suštini suprotno. To je značilo da će se izvoditi u pravilu unutar od korisnikovom prozora preglednika. A što vrste web stranica koristite JavaScript pa ovih dana? Kao i doslovno svaki popularne web stranice. Svaka web stranica da ti dečki vjerojatno koristite svakodnevno koriste JavaScript za Najjednostavniji i čak najseksi značajke. Dakle, nešto poput Facebook Chat, ako ste to iskoristiti. Kako se to zapravo radi? Pa do sada, sve stvari s kojima sam učinio s HTML i PHP pretpostavlja da li podići URL, a što pritisnete tipku Enter, a vidiš neke HTML sadržaja. A što kliknete na link, koji se mijenja URL, mijenja stranicu, i ponovo učitava neki novi sadržaj. Kliknite na drugi URL ili poslati obrazac, što se tuče drugu stranicu i vidite neke nove sadržaje. No, s nečim poput Facebook Chat, ili Gchat ili Google Maps, rijetko ne cijela stranica osvježiti tako da vidite bijeli zaslon na trenutak i zatim novi sadržaj. Umjesto toga, web stranice danas su dinamičko uzimajući opet obnovljeno i i opet svi vrsta od iza kulisa. I ispada da kada idu u nešto poput Facebooka ili Gchat, ili Gmail, a ažuriranja stranica automatski bez ponovnog cijeli zaslon, što se dogodilo je da Vaš preglednik je napravio svojevrsni potajno dodatni HTTP zahtjeva - ne za cijelih web stranicama, ali samo za male komade podataka, kao što su instant poruka da je vaš prijatelj samo ti, ili promjenu statusa poslao da netko samo ti, ili cvrkut poslana da je netko upravo poslao. To je samo što malo zahtjeve za podatke, a zatim pomoću JavaScript, ovo programski jezik, za promjenu, što Web stranica izgleda, bez poslužitelja pomaže, bez poslužitelja generira taj HTML. Tako je u kratkom, JavaScript može se koristiti onda dohvatiti ne samo nove podatke iz poslužitelja bez pretovara cjelinu stranica ili podnošenjem obrasca. Također se može upotrijebiti za promjenu tzv DOM - Document Object Model - koji je samo fancy način za rekavši drvo HTML koje smo vidjeli zadnji put. Tako se uvjeriti, kako je JavaScript sintaktički toliko slični C, kao dobro. Nema glavna funkcija. Vi samo početak pisanja koda i to će se izvršiti, ili više ispravno interpretirati. Uvjeti će izgledati ovako. Ne razlikuje se od C ili PHP za tu stvar. Boolean izrazi ili-ed zajedno će izgledati ovako. Anded zajedno izgledati ovako. Prekidači će izgledati ovako. Za petlje će izgledati ovako. Dok petlje će izgledati ovako. Učiniti dok petlje će izgledati ovako. To je nova. Dakle JavaScript nije se foreach konstruirati po sebi, ali ovaj konstrukt za varijablu i na polju, a ja se u to Slučaj postaje vrijednost indeksa. Dakle, to je malo drugačije od onoga foreach, iako nove verzije JavaScript dolaze iz svih vremena, Pa čak i ove jezične značajke se razvija. I Kao na stranu, JavaScript ovih dana Također se može koristiti na poslužitelju poput PHP koristite okvir nazvan Node.js. Jedan od CS50 je TFS, Kevin, dovela Seminar o Node.js koji je dostupan na cs50.net/seminars. Dakle, ako vas zanima, znam da vam Možete koristiti ovaj na strani poslužitelja kao dobro, ali to je prilično nedavno trend, ali moćan u to. Ovaj je malo drugačiji. To je polje u JavaScript. A što vam se čini drugačije u odnosu na C ili PHP? Postoji nekoliko brzih priče možemo reći ovdje. Ono što nedostaje u odnosu na PHP-u? PUBLIKA: [nečujan]. DAVID Malan: Da? Žao nam je, opet reći? Ivanković: Ne proglašenje tip varijable. DAVID Malan: Nećemo proglašenje tip varijable. Tako je zapravo prilično poput PHP, nismo pojašnjenje vrsta ove varijable. Umjesto toga, mi smo više generički rekavši var za varijablu. Nemamo PHP neprilike znak za dolar, koji je dok je zamorno tipa, ne bi više jasno da nešto što je promjenjiva. Dok je ovdje, mi smo nekako vratiti u C-ov pristup prema samo poziv promjenjiva po imenu želimo da ga dati, kao što su brojevi. I isto kao što su PHP, imamo uglate zagrade za vrijednosti unutar tog polja. Dakle varijabli u JavaScriptu također može izgledati ovako. Obavijest ovdje je to niz naziva s, , ali isto tako imamo nije navedeno da je niz. Ovdje je ipak značajka koja ne postoje u točno na isti način u PHP-u, ali pomalo sličan. To je objekt u JavaScript. A predmeti su vrsta švicarske vojske Nož na strukturu podataka na taj vas Možete ih koristiti za bilo koji broj stvari. Evo, na primjer, mi smo progla varijabla zove citat. Vrsta te varijable je objekt. Možete misliti na to kao C struct koji ima ključeve i vrijednosti. Simbol je ključ. FB je vrijednost, očito Oznaka dionice. Zarez. Cijena je još jedan ključni, a njegova je vrijednost očito s pomičnim zarezom, ili Broj općenito u JavaScript, od 49,26 dolara. Dakle, PHP nema - nismo vidjeli u PHP objekata prilično kao što je ovaj, ali nismo vidjeli analognu, što je ono? PUBLIKA: [nečujan]. DAVID Malan: Asocijativne matrice. Dakle, dok je PHP ima asocijativne nizove čija je sintaksa je ikad nešto tako drugačija - Vidjeli smo u uglate zagrade. Vidjeli smo čudne strelice simbole. JavaScripta predmete, ali to govore semantička razlika i drugačija sinonim za sada. Međutim, kao što je na stranu, PHP također ima predmete na način da je Java i druge jezici imaju objekte u objektno-orijentirano programiranje. No, mi ćemo ih koristiti samo za vrste podataka za sada. Objekti i asocijativne nizove. To bi se moglo to napraviti malo jasnije. Evo zašto predmet je korisno. Kada želite proglasiti studenta, kao Zamyla, možemo zapravo zatvoriti u kućište takoreći unutar koje protive korištenju vitičastim zagradama baš kao Prije nego cijela hrpa ključeva i vrijednosti u ovdje. Imamo ime, svoju kuću, i naziv Zamyla, nakon čega se kao zarez obično na kraju. Ovdje previše, to je nešto drugačija, ali i vrlo moćan ovih dana. Evo polje, i znam da je zbog postoji uglata zagrada gore vrhu i uglata zagrada na dnu. A to je ono što niz podataka tip je očito u JavaScriptu? To je niz izgleda kao i tri predmeta. I znam da je samo objekt zbog vitičastim zagradama. I primijetiti da postoji otvoreni kovrčava brace, neke stvari, u neposrednoj blizini kovrčava brace, zarez, onda još malo, zarez, i onda još malo. Dakle, to je tri argumenti je dva tipkovnici. Dakle, to je niz od tri predmeta. I svaki od tih predmeta, kako se čini student ili osoblje član neke sortiranje, svaki s osobnom iskaznicom, Kuća, i ime. Ali ja sam nazvao nešto zove JSON - JavaScript Object zapis. A to je format podataka koji zapravo je tako vrlo popularna iu modi ovih dana da ako pišete aplikacija koja koristi Facebook API, Twitter API, stvarno je gotovo bilo API vani ovih dana, uključujući i neke od CS50 vlastiti, Podaci se vratiš nije u old school CSV formatu. Budući da je opoziv CSV je super jednostavna. To je samo stupovi odvojeni zarezom. JSON podatke daje vam više metapodataka. To suradnicima ključ sa svake vrijednosti, tako oni ne moraju samo pretpostaviti da nultoga stupac je jedna vrijednost, stupac jedan je još jedan stupac dva je još jedan. Sve u JSON objekt ovdje je vrsta self-opisujući, jer svaka jedno od imena u ovoj datoteci je doslovno ime ispred njega kao citirao niz. Tako ćemo pogledati a Nekoliko primjera ovdje. Pusti me u aparat. I da me pusti u naš vhost imenik u javnosti. I da me pusti u JavaScript imenik. I idemo naprijed i otvoriti DOM-0.html, gdje DOM samo znači Document Object Model. To je stablo stvari na koje se I iz ranije. I neka mi predložiti sljedeće. Evo web stranica čije Tijelo je prilično jednostavan. Dakle, ovdje dolje na dnu, Primijetit imam formu. Vidjeli smo one prije. Ima dva ulaza, od kojih jedan ima ID imena, od kojih jedan ima vrstu podnijeti, a prva nečiji tip je tekst. Dakle, ovo je zapravo zvuči prilično jednostavno. Idemo ovdje. Vratimo se na ovoj stranici ovdje. Idemo u localhost, i otići u naša JavaScript imenik, i otići u DOM-0, a ovdje imamo ovaj obrazac. Dakle, to je očito sve to stranica radi. To je polje ime s gumb Pošalji. Ali ja neću koristiti PHP ovdje. Ja ću učiniti sve što je strani klijenta takoreći u JavaScriptu kako slijedi. Obavijest da sam doista sam dao ime Polje tog ulaza jedinstveno identifikator, koji će zapravo spasi me neko vrijeme u trenutak. I primijetiti sam upoznao još jednu oznaku u glavi mojoj web stranici,  tag. Tako da je u tom smislu da je JavaScript programski jezik na strani klijenta. U ovom slučaju, kao što su CSS, ja sam stavio to ravno u mome HTML. No, obavijest sam proglašen funkciju da izgleda nešto poput PHP sintaktički, ali to je zapravo JavaScript, jer opet, to je klijenta u pregledniku. I pokušajte pogoditi što se to događa na to, iako neki od sintakse Ovdje je nova. PUBLIKA: Pozdravi tko. DAVID Malan: Bit će to pozdraviti onome tko posjeti ovu stranicu. Pa kako? Dakle primjetiti, ispada u JavaScriptu postoji alert () funkcija. To je vrlo tužno vrsta funkcija koja zapravo samo teži smetati korisnicima. To nije ona koju stvarno treba koristiti obično, ali je brz i prljave način vrsta ispisa nešto na grafičkom korisnika sučelje, poput pregledniku. Uočite da se ovdje imam niz u jednostrukim navodnicima. Ispada da je za razliku od C, JavaScript zapravo može imati koristite jednu citira, a iskreno, to je samo neka vrsta od stilske konvencije među JavaScript programera koristiti jednostruke navodnike. PHP, oni zapravo imaju malo drugačije značenje. No, za sada, samo znam da je to je jedini razlog. Konvencija u JavaScriptu je često Koristite jednostruke navodnike, ali smo mogli koristiti dupli navodnici u obje zemlje, kao dobro. Dakle, ovo je interesantno. Sjetite se posljednji put da smo imali da Slika na zaslonu koji je nacrtao drvo gdje ste imali HTML čvor, te Glavni čvor, a tijelo čvor, i onda neki tekst. No, postojao je jedan poseban čvor na Sam vrh koji sam nazvao dokument. Pa, ispada u JavaScriptu, bilo put napisati program u JavaScriptu u pregledniku, imate pristup posebna globalna varijabla. Slično u duhu u PHP-a superglobals, ovo se zove u sve su mala slova dokument. To je kao struct, ali ovaj struct također ima funkcije unutar nje. Dakle C rekonstruirati samo ima podatke obično. Ali JavaScript objekt, jer to tehnički je također ima funkcije, inače poznat kao metoda unutar nje. A možete pozvati funkciju unutar ovaj objekt doslovno radi svoj naziv, točka, a zatim ime funkcije, ili pak način. To je samo sinonim, stvarno. A što je ova funkcija je činiti? Možete vrsta pogoditi iz njegova imena. Nabavite elementa po ID. Dakle, ovo će pretražiti web stranicu, traži to drvo, u potrazi za god čvor, AKA elementa, ima jedinstveni ID quote Citat završen imena. I onda ono što ću učiniti? Ja ću dobiti vrijednost unutar da je čvor u stablu, a ja ću nekako pozdraviti tim imenom. Dakle uzeti pogodak, iako smo si ne ovo vidio još, što učiniti plus simboli znače ovdje i ovdje vjerojatno? PUBLIKA: spojite. DAVID Malan: spojite. Točno, i to su samo vrsta dizajn odluke ljudi su prije mnogo godina. U PHP-u, što spojite stvari s točkicama. U C, skočiti kroz nekoliko obruč i poziv funkcije poput strCopyDatabaseOK () ili strcat () ili druge takve funkcije. No, u JavaScript, koristite pluses. Dakle, ovo je samo nadovezivanjem tri žice - Pozdrav, ime i prezime, a zatim uskličnik. Dakle, kada i zašto je ova funkcija zove iako? Pa, pokušajte pogoditi iz HTML na dnu. Zašto je pozdraviti () zove, ili kada? Očito, kao najbolje što mogu reći, na podnijeti, kada se ovaj oblik podnosi, Ja ću učiniti sve što je unutar tih citata. I konkretno, idem zvati pozdraviti (), a zatim se vratiti false. Pa, da vidimo što je neto Učinak ovdje je na prvom mjestu. Pa neka mi ići naprijed i upišite u, recimo, Loren, Podnijeti. Pozdrav Loren. Da vidimo je li možda to bio samo sretan provedba. Nope. Pa to je da upišete što god ime zapravo sam tamo stavio. Ali primijetiti ono što ne mijenja. URL je još uvijek dom-0.html. Nema register.php. Nema drugi file. Nema action atribut. Pa što je ovo povratak false valjda radi? Zašto sam pozivom pozdraviti (), a zatim povratka vjerojatno lažna? Ono što se obično događa kad kliknete Slanje u obliku koji još imamo Vidio je u posljednjih tjedan dana? PUBLIKA: [nečujan]. DAVID Malan: To ide negdje, zar ne? To vrijedi i za neke odredišni URL. Ali ja ne želim da se to dogodi ovdje. Želim da moja web stranica se u potpunosti dinamična kao što su Gmail, gdje nakon što ste postoji, ti ostani tamo. URL ne mijenja na način da ukazuje cijela stranica pretovara. Umjesto toga, ja samo želim da se nešto promijeni kao što je tiskanje nešto Ovdje na zaslonu. Pa neka mi to očistiti do malo. Dopustite mi da se otvori a ne Dom-0, ali neka mi se otvori DOM-dva. Samo tako da ste vidjeli neku sintaksu ovdje. Ispada da je ono što smo upravo nisam se koriste sirovu JavaScript. Dakle, ovo je uistinu jezik JavaScript. Neki od vas možda znaju Knjižnica zove jQuery. Tako jQuery nije ista stvar kao i JavaScript. To je samo knjižnica koja stvarno pametna momak je napisao i popularizirao kao da gotovo svi u svijetu danas jQuery koristi prilikom korištenja JavaScript. I na prvi pogled, iskreno, izgleda malo više zagonetan. Ali što ćete, pogotovo ako idete ima svoj konačni projekt s weba Razvoj, vidjet ćete da je to čisti stvari i štedi vam dosta nekoliko linija koda. Pa neka je samo pogledao kako ovaj oblik radi. Obavijest što sam očito ukloniti iz HTML-a? Nema na dostavi rukovatelj da se tako izrazim. Nema atributa. Jer znate, ono Ja stvarno ne sviđa? Osjećao sam se kao da mi je padala u stare navike postoji. Baš kao što je počeo osjećati neuredan to izmiješati obje CSS s HTML, jer ste vrsta bacanje različitih jezika diljem mjesto, na sličan je počelo osjećati kao loš put da ide prema dolje, gdje Dajem JavaScript kod unutar mojih HTML umjesto da ga factoring out. Dakle, to je pouka ovdje. U DOM-2.html, ja sam ga factoring out. I ja radim stvari malo drugačije. Za sada, ja ću mahati ruke na što to zapravo radi ispod poklopca motora. Ali samo za sada pretpostavljaju da je taj prvi linija koda u ovoj biblioteci zove jQuery samo znači kada Dokument je spreman, učinite sljedeće. Budući da web stranice može potrajati neko vrijeme za učitavanje. Možda ćete biti na spor internet veza, a to bi moglo biti vrti i vrti, a na kraju ga je napunjena. To linija koda samo kaže čekati do cijela stranica je spremna, dokument je spreman, prije izvršenja ovaj kod. I sada primijetiti, ovo je vjerojatno Najkorisniji prvi oduzeti jQuery. Ova linija je ovdje vrlo sličan u duhu na ovo mnogo dulje linije. Dok je u sirovom JavaScript kod, postoji postoji dokument globalni objekt koji ima funkciju nazvanu getElementById (), ljudi koji su pisali jQuery pojednostavljena da bi samo reći znak za dolar, a zatim unutar zagrade stavio dva citati, a zatim staviti ljestve simbol slijedi jedinstveni ID želite zgrabiti. Tako da je jednak document.getElementById. U međuvremenu,. Podnijeti samo znači da se na podnošenje bilo kojem obliku si pozivajući se na lijevoj strani, idite naprijed i izvršiti to. No, to je sada znatiželja previše. Ono što je čudno o tome što Ja sam istaknuo ovdje? Ne samo da je to neka vrsta sintaktički Nova, tu je i nešto nedostaje. Ivanković: To je samo nazvao funkcija? To se ne zove na oprezu? DAVID Malan: Da. Pa, tako alert () je dolje ovdje, da bude fer. No, tu se ne spominje ime, kao što znate, Foo ili nešto ovdje. I doista, to je jedna od značajki JavaScript da je sasvim moćan, ali i sasvim novo. I PHP zapravo ima to kao dobro. Pustite me da idem naprijed i učiniti nešto na brzinu. Dopustite mi da ide naprijed i staviti to ovdje. Dopustite mi da to učinite. Funkcija. Nazovimo ovu rukovatelj (). Rukovatelj funkcija da se tako izrazim. Nešto što obrađuje neku operaciju. Dopustite mi počistiti moj uvlačenje. I staviti to ovdje. I staviti to ovdje. Yep. OK. Tako sada imam funkciju nazvanu rukovatelj () da ja stvarno ne znam što to još. To je samo još uvijek ima takve stvari. Ups. Uzeo previše. Učinimo to. U redu. Oprostite. U redu. Dopustite mi da to učinite. OK. To izgleda lijepo i ravno proslijediti sada. Dopustite mi da to učinite. Učinite to. I OK. Tako sada, neka je stavi ovo ovdje. Nema više programiranja u letu. OK. Pa sad, idemo natrag gdje je počeo priču. Prije toga, rekao sam da je ovo crta znači kada je dokument spreman, otići naprijed i to učiniti. Što želim učiniti? Pa konkretno, želim ići naprijed i učiniti sljedeće. Izvršiti ovu liniju koda, a zatim ono što želim učiniti je nazvati ovo funkcionirati kada se obrazac podnosi. Sada je to ono što je interesantno. To nije samo po sebi funkciju. Obavijest Ja ne stavljajući zagrade Ovdje na normalan način. Ja sam doslovno prolazi funkciju nazvanu vodič () na drugu funkciju zove podnijeti () kao argument kao iako je kao varijable. I ovo je jedna od značajki JavaScript je funkcija sami su zapravo samo objekte. U stvari, oni su zapravo samo varijable neke vrste. A ako je naziv funkcije je rukovatelj (), nema razloga da ne mogu to prođe u kao argument ovdje. A to znači kad se oblik s ID demo je podnesen, poziva ovu funkciju. Ali sada, ako sam poništiti sve to, zašto onda sam možda napraviti Prije ovog trenutka? Pa, ovo je anonimna funkcija. Jer iskreno, shvatio sam zašto sam ja gnjavi gubiti vrijeme proglašenja funkcija zove rukovatelj () samo nazvati je u jednom i samo jednom mjestu? Ako mi ne treba ime, a ja ne treba ga zvati više od jednog mjesta, neka je samo implementirati funkciju upravo tamo gdje mi je potrebna. I tako JavaScript i PHP podržati ono što nazivaju anonimne funkcije koje dopustite mi da učinite upravo to ovdje. No, mi samo grebanje po površini. Idemo zafrkavati sa samo par Konačni primjeri ovdje. Ako odem u quote.php. Uočite da je ovo zapravo PHP funkcija, PHP program, koji sam napisao da očekuje HTTP parametar zove simbol, a ja mogu proći u vrijednost kao i FB. A ako ćemo zapravo gledati na izvoru broj, to je upite free website zove Yahoo Finance, baš kao p-set sedam godina, a to je povratak na meni nešto što na prvi pogled format poznat je JSON - JavaScript Object zapis. To je samo objekt. Obavijest vitičastim zagradama, citati, debelog crijeva, a zarezi. Sada je u međuvremenu, ovo je baš fora. Budući da sam vjerojatno može koristiti za programiranje jezik za stvaranje URL-ova da izgleda ovako dinamično, zar ne? Ja to ne mogu promijeniti na Google i vratiti Google-a cijena dionica od 1,017.55 $. Tako ćemo vidjeti, ako ne možemo koristiti ovaj sada. Pusti me da Ajax 0 ovdje, koji izgleda ovako. To je samo web stranica koja ima Obrazac s gumb. Dopustite mi ovdje ići naprijed i upisati YHOO za Yahoo dionica simbol, kliknite Get Citat, a sada primijetiti sam stečen upozorenje s 32.86. Dopustite mi zapravo ide na ljubitelj verziji ovo stranica, verzija dva, a upisati recimo Microsoft, MSFT. Dobiti Citat. I sada primjetiti, nema upozorenja. Obavijest gdje piše cijena da se određuje? Tu je najjednostavniji od primjera koji upućuje na ono što Gchat i Facebook Chat, i Gmail, a drugi kao Web stranice su radili tako da su stvarno mijenja web stranicu. Primijetiti. Dopustite mi da se ponovno učitati stranicu. Dopustite mi da se otvori inspektore Chromea. Pusti me na elemente tab ovdje. Sada primijetiti ako sam zumirati ovdje i otvoriti ovaj gore, primijetiti da je ovo moj HTML DOM - moj Document Object Model. Ovo je moja HTML. Ali sada primjetiti, iako to ide biti malo teško vidjeti u oba mjesta u isto vrijeme, ako sam upisati FB ovdje gore, gledati dno zaslona samo. To je zapravo mijenja moja HTML u letu. I to je to vrlo jednostavno radiš nešto poput ovoga. Ako sam otvoriti Ajax 2, obavijest o provedbi nešto kao seksi kao da je, iako je to prilično ružno, ali kao sofisticiran kao da Funkcionalno, to ima neke HTML na dnu. Ali primijetite sam se označiti. Nismo koristili ovo prije, ali ovo je kao što je, ali to ne prisiljava sve na novoj liniji. To samo čini pravokutni regiju Na istoj liniji bitno. Obavijest da sam dao mu je ID cijeni. I ispostavilo se pomoću istog JavaScript knjižnica, imam funkciju zove citat () koja se zove kad god Obrazac se podnosi. A ono što ja radim je to. Ja sam proglašenja varijablu u JavaScriptu zove url, štedi vrijednost quote.php? simbol =. Drugim riječima, ja sam na početku pripremiti HTTP zahtjev, a zatim Ja sam nadovezivanjem na koji s plus sve što je element s ID od simbol, koji obavijest je da Tekstualno polje pravo ovdje. Dakle, baš kao što smo imali oblike u prošlosti. I onda ispada u jQuery, ako nazvati. Val (), koji se poziva od Val funkcija, funkcija vrijednost, koja dobiva god korisnik unese I onda sve mrežnog prometa što se događa je to. $. GetJSON. I kao stranu, znak za dolar je Samo stenogram notacija. To je stvarno jQuery.getJSON. Pusti me da JSON s ovim-om, a kad Zahtjev se vrati, to nazivamo Funkcija i proći u kao argument što se vratio s poslužitelja. Dakle, drugim riječima, ako idem natrag preglednik, i ja vratiti u quote.php, ono što je moj browser radi je dobivanje Ovaj blok podataka. I kad idem na ovu web stranicu ovdje, primijetiti ako smo umjesto toga ići na mrežu Kartica i to jasno, a zatim upišite nešto kao GOOG za Google i dobiti Citat, primijetili stranica nije promijenio. No HTTP zahtjev podnesen, a što Vratio sam se ovdje, ako gledamo odgovor je cijela hrpa JSON da smo konačno pristupiti s ova jednostavna crta ovdje. Data je ono što je stečen s poslužitelja. Cijena je naziv Ključ mi je stalo. Dakle data.price mi daje da. Sada međuvremenu, i to je posljednji primjer. To možete učiniti još više sa stranice. One zapravo, i dvije. Mi može vratiti tag, ako se sjećate to. To je JavaScript. Možemo to učiniti. Vrlo uzbudljivo. Ostavit ćemo to kao Cliffhanger. No, uzbudljivije, možete raditi stvari kao što je ovaj. Ako idem na Geolocation-1, ispada Chrome da zna da smo na zemljopisna duljina širina 42.37. -71,10. Dakle, postoji još postoji na raspolaganju. No, više o tome sljedeći tjedan. Vidimo se u ponedjeljak.