HANNAH Blumberg: Pozdrav svima. Idemo za početak Samo nekoliko minuta ranije jer imamo puno materijala da se kroz. Ja sam Hannah. Ja sam TF. Maria će se pridružiti nas u samo nekoliko minuta. Predaje odjeljak pravo prije. Učim odjeljak pravo nakon što je, kako ćemo da bi ga na sat i pol. Dakle, kao što ćete vidjeti ovdje, imamo dosta nekoliko tema moramo proći, pa ćemo se ide malo brže. Ali, ako u bilo kojem trenutku možemo reći nešto prebrzo ili ne razumiju, slobodno prekinuti s pitanjima. Želimo biti u mogućnosti da bi ovaj pregled sesije kao korisno za sve vas koliko je moguće. Odlično. Tako ćemo skočiti pravo u sa neke teme da smo zapravo vrlo, vrlo kratko pokriveni za Kviz 0 u kvizu 0 pregleda sjednice. Dakle, počevši s povezanim popisima. Dakle, samo bi bili sigurni da imate neke Osnovna znanja o povezanim popisima i ugodno neke od osnovnih operacija. Dakle, samo za pregled, povezani Popisi su bolje od polja jer oni mogu rasti dinamički. Dakle, imamo tu veliku prednost. Vidjeli smo ih koristi u hash tablica kada Ne znam točno koliko stvari koju ćemo željeti umetnuti u naše strukture podataka. Nažalost, imamo komada povezanog popis cijele memorije, pa ne mora nužno biti u mogućnosti to učiniti stalan pristup vremena na bilo koji element u popisu povezane. Kako bi se naći Posebno je element, mi moraju ponoviti sve put od početka. Dakle, imajte na umu da je većina Osnovni postupci su omega 1. Dakle umetak samo će potrajati 1. Brisanje se događa da se nje, jer mi moram ići naći s popisa. I traži moglo potrajati, u najgorem slučaju, n. Mi ne možemo učiniti nešto slično binarno pretraživanje na popisu povezan Budući da ne možemo jednostavno slučajno skok na sredini. Cool. Odlično. Malo dimnjaka. To, opet, došao na kvizu 0, pa vas treba biti super ugodno s njim. No, stogova, molimo Vas zapamtiti hrpu pladnjeva. I to će biti prvi u, trajati van. Tako smo stog stvari u stog, a zatim ako nastojimo uzeti nešto off-- koje zovemo iskakanje izvan stack-- dolazimo s vrha. I ako želimo staviti nešto u snopu, zovemo ga gura. Tako će uvijek biti odrastanje od dna kao hrpom ladica. Odlično. Vidjeli smo hrpe provodi s obje povezane liste i polja. Ako ste provedbi s polja, što želite kako bi bili sigurni da pratiti i veličina i kapacitet. Dakle, veličina će biti trenutna broj stvari u vašem stog, a kapacitet je ukupan broj stvari koje možete pohraniti u vaš stog. Cool. Vrlo slično, imamo redove. U ovom slučaju, umjesto da razmišlja o snop ladice, misliti na liniji. To će biti prvi u, prvi van. Dakle, ako ste podstava gore za nešto u trgovini, Nadamo se da je osoba prva u linija će se pomoglo prvi. Umjesto da se kaže pritisnite i pop kao mi za stog, samo mi reci u red i dequeue. I opet, ako ste provedbi ovo s nizom, moramo pratiti ne samo veličina i kapacitet, ali i glava, koja će biti ispred našeg reda. Cool. Bilo kakva pitanja o bilo što od toga? Odlično. Premještanje pravo zajedno. OK, hash tablica. Evo gdje se počinje dobiti stvarno zanimljivo. Tako hash tablicu jedna implementacija od asocijativni niz. Tako je u osnovi ono što se dogodilo je da su sve ove ulaz, a mi ga dati na hash funkcija koja kaže: U redu, ovo je mjesto gdje se u hash tablicu pripada. Dakle, najjednostavnije funkcije hash kako smo vidjeli je samo rekao: U redu, pretpostavimo da želimo staviti žice u našoj hash tablici. I doista jednostavna ideja možda reći, u redu, neka je samo sortirati po prvo slovo riječi. Tako možete vidjeti ovdje, uzmemo bananu, smo ga stavili preko hash funkcija, a ona kaže, hej, kako trebao ići na indeksu 1. Tako smo u suštini mogu se sjetiti hash stol kao hrpa različitih kante. I svaki od tih kante ide držati glavu popisu povezane. I u tom povezanom popisu je mjesto gdje možemo zapravo staviti različite dijelove podataka. Dakle, ronjenje malo više u hash funkcija, ovdje je primjer upravo sam opisao gdje smo samo reći, OK, uzeti prvo slovo riječi i mi smo će to riješiti u kante. Dakle, vjerojatno, bit će 26 kante, jedan za svako slovo abecede. Zašto nije ovo veliki hash funkcija? Ono što čini ovaj ne-idealno? Da. PUBLIKA: Ideš imati sudara. HANNAH Blumberg: Da, točno. Ti si idući u morati sudara. Dakle, to je jedna stvar. A mi ćemo govoriti o tome kako možemo popraviti sudara u samo sekundi. Slijedeći problem sa ovim Posebno hash funkcija je da naša različita kante će biti od prilično drastično različite veličine. Mi znamo da postoji puno više riječi koje počinju s A od X, pa ćemo imati vrlo neuravnotežen kante u našem hash tablici. Cool. Tako da, vratimo se točka sudara. Što ćemo učiniti ako postoji sudara? Imamo nekoliko različitih opcija. Dakle, jedan, pa pretpostavljam pokušavamo staviti bobica u našoj hash tablicu. I vidimo, oh, želimo staviti ga u indeks 1, ali banana je već tamo živi. Što ćemo učiniti? Imamo dvije glavne opcije. Broj jedan je možemo reći, u redu, nema mjesta u indeksu 1, ali neka je samo zadržati gledajući kroz dok možemo pronaći još otvoreno mjesto. Tako ćemo reći, u redu, neka ga staviti u mjestu 3. To je jedna opcija. To se zove linearni sondiranja. A druga mogućnost je rekao, u redu, dobro, neka je samo da svaki od tih kante biti šefovi povezane liste. I to je u redu, ako postoji više nego jedna stvar u kantu. Samo ćemo se dodajte ga na pročelju. Dakle, ovdje možete vidjeti, u redu, kad smo umetnuta bobica, mi Samo je banana, vrsta gurnuo preko malo i bacio bobica tamo. I to je također potpuno u redu. To se zove odvojeno ulančavanje. Možete misliti na to kao vrsta kao što niz glava na povezanim popisima. Bilo kakva pitanja o hash stolovi, hash funkcije? Odlično. Stabla i napad. Dakle drvo je bilo kakav strukture podataka u kojem postoji neka vrsta hijerarhije ili neke vrste rangiranja na svoje različite objekte. A to će postati super jasno kad vidimo primjer. A vidjeli smo pokušaja, uz s hash tablica, u pset5-- koja, opet, sasvim fer igra za to quiz-- kao još podataka strukture koje možemo pohraniti različite stvari. U slučaju rječnik, smo pohranjeni hrpu riječi. Tako ćemo pogledati neke stabala. Dakle, ovo je primjer jednog stabla. To je vrsta konstrukcije, da hijerarhijskoj strukturi, gdje možete vidjeti da ovo 1 čvor na vrhu ima nekakvu rang iznad 2 i 3, koji su iznad 4, 5 i 6 i 7, koji su iznad 8 i 9. Dakle, to je sve što smo mislili od strane stabla, tako da možete samo vrste slike to u glavi. Sada imamo par više specijaliziranih stabala. Dakle, jedan primjer je binarno stablo. I binarno stablo je, opet, samo će biti struktura podataka s nekom vrstom hijerarhija, ali svaki od čvorova može imati najviše dvoje djece. To je mjesto gdje se riječ binarni dolazi. Dakle, ovo je primjer binarnog stabla. Dakle, to je manja kategorija stabala. Sada ćemo dobiti još više specifični i govorimo o binarnom trees-- binarnog pretraživanja stabala, a. Dakle ovdje je ideja je ne samo svaki čvor ima najviše dvoje djece, ali sve od djece do lijeva će biti manji i sve djece do Pravo će biti veći. Tako primijetiti u samo naš binarno stablo, postoji nema odnos između brojeva. No, u našem binarnom pretraživanje stabla, vidimo, u redu, ovdje je 44. I svaki broj s lijeve strane 44 manja i sve na desno je veći. I to ima na svakom razina stabla. Dakle, ovdje, to je manja od 22, a to je veći od 22. I to je pretraživanje po binarnom stablu. Zašto mislimo da se zove binarno traženje stablo? Što algoritam to vas podsjetiti? PUBLIKA: Binarni pretraživanja. HANNAH Blumberg: Binarni pretraživanja. Jer ako ste u potrazi za Posebno broj u tom stablu, u svakom trenutku, možete samo pokucati off pola stabla, što je super. I da će nam dati nešto da izgleda puno kao binarnog pretraživanja. Ima li pitanja? U redu, u redu. U redu, pokuša. Svatko je omiljena. Dakle, ovo je primjer koji vidjeli smo hrpu u klasi. I opet, to je samo još jedan način na koji možemo pohraniti podatke. U slučaju rječnik, opet, to samo će biti žice. Tako ćemo vidjeti što to zapravo izgleda kao na nešto nižoj razini. Tako ćemo pogledati na jednom čvoru u Trie. I vidimo, u redu, tu se događa biti Boolean i čvor, pokazivač na čvor. I vidimo da je Booleova naziva is_word. Pa u biti, to je će odgovarati tim malim trokuta koji kaže, ako ste stečen ovdje našli ste potpuni riječi. Znamo da je "Turingov" preko Ovdje je kompletan riječ, dok je samo T-U-R nije riječ jer ne vidim da je malo delta. A da se malo Delta, opet, odgovara ovom is_word, ovo Boolean is_word. I onda imamo niz djece. Tako na svakoj razini, vi imaju određenu čvor, a taj čvor ukazuje na Niz cijelu abecedu. Tako možete vidjeti, opet, u ovom picture-- sam će zadržati skakanje natrag forth-- da je niz na vrhu ima hrpa različitih čvorovi dolaze izvan nje. Ona ima 26, ili 27 ako želite uključiti dodatni karakter. I to nam je daje način za pohranu naše podatke na način da se može promatrati na koje možete pogledati super brzo. Što je vrijeme pretraživanja za Trie? PUBLIKA: [nečujan]. HANNAH Blumberg: Da. U teoriji, to je konstanta vrijeme. To će samo biti veličine riječ koju želite potražiti. Čak i ako dodamo zillion više riječi našem Trie, to neće nas odvesti više kako bi se utvrdilo ako je dao riječ u Trie. Dakle, to je jako lijepo. PUBLIKA: Jeste li samo inicijalizirati taj niz? Propustili ste bod ili dva. Možete li samo govoriti o da je za sekundu? HANNAH Blumberg: Naravno, apsolutno. Dobro pitanje. Pitanje je, što imaju niz koji je će imati čvora zvijezdu kao za razliku od samo čvora, zar ne? Cool. Dakle ovdje ono što govoriš je naš niz je samo će biti upućuje na druge polja. Dakle, to je to essentially-- vrsta osjeća kao popis povezana na ovaj način gdje je svaki od tih djece samo ukazuju na sljedeći čvor. A način na koji smo zapravo utvrdili, hej, u redu, smo ponovljena kroz cijeli Riječ je tu riječ u rječniku, samo smo provjeriti ovu is_word. Veliko pitanje. Da. PUBLIKA: U redu. Dakle, što je bio runtime za Trie? HANNAH Blumberg: Naravno. Dakle, u vrijeme izvođenja za Trie za lookup će biti konstantna vrijeme. Dakle, to je samo idući u biti Broj slova u riječi. To ne ovisi o Veličina rječniku ili veličina strukture podataka. Dakle, ovdje je nešto jednostavniji primjer. U tom slučaju, možete vidjeti da Riječ šišmiš je u rječniku i imate zoom, ali nemaju nešto poput zoološkom vrtu. Kako bi se napraviti zoološki vrt? Kako dodati zoološki vrt na naš rječnik, našem Trie? Da. PUBLIKA: Napravite is_word vrijedi za [nečujan]. HANNAH Blumberg: Dobro. Tako bismo reći Z-O-O, a onda bih želite prekrižite tu kutiju, kao dobro. Veliki. Ajmo usporediti vrlo kratko pokušava odnosu hash tablica. Pokušava su stvarno super jer, kao što smo rekli, oni pružaju konstantnom vremenu pretraživanja. No, veliki nedostatak je oni humongous. Možete dobiti osjećaj, čak i gleda na to, da će potrajati ogromna količina memorije. Znači oni će biti puno veći od hash tablica, ali oni će dati nam mnogo brže vrijeme lookup. Dakle, to je vrsta tvoj tradeoff, što vam je stalo, bilo da je brzina ili memorije. Bilo kakva pitanja o bilo što od toga, sve strukture podataka C. Lijepa. U REDU. Mi ćemo prijeći na malo malo web razvoj s Marijom. MARIJA ZLATKOVA: lijep. U REDU. HANNAH Blumberg: Možete koristiti svoj laptop. MARIJA ZLATKOVA: Lijepo. OK super. Kao što smo premjestiti sada webu razvoj, razgovarali smo malo o promjenjivim dozvolama datoteka i mapa tako da mogu biti dostupne drugim korisnicima, u svijet, pa da možemo vidjeti kako zapravo ih možemo prenijeti kad smo razviti stvari kao što je web stranica da mi govore radili. Tako smo vidjeli chmod naredbu, što je promjena načina rada, u osnovi. To je Linux naredbe i mijenja pristup dozvole datotečnog sustava objekata. A objekt sustav datoteka samo katalog, datoteka, sve što možete mijenjati dozvole. Dakle, da biste vidjeli dozvole za datoteku, smo upišite naredbu ls, popis, -L. A kad mi tip da mi obično vidjeti neke dozvole kako izgleda nešto kao ovo ispred naziva direktorija. Dakle d se odnosi na imenik. I onda imamo tri trijade da je u osnovi odnose se na dozvole ili korisnik, grupa ili svijet. Vrste dozvola koje možemo imati za ove tri skupine ljudi su ili R za čitanje, w za pisati, i x za izvršavanje. A možemo imati one za skupina i svijet kao dobro. Lukav stvar je da ponekad kad smo upišite chmod naredbu, bismo upišite neki broj koja se sastojala od tri bita. Tako smo mogli učiniti kao 777 i da je u osnovi iz dodanoj vrijednosti svakog od ovih trijade jer r će se odnose na 4, W bih odnosi se na 2, a x bi se odnosi na 1, Dakle, kada se doda, svaki od brojeva će doći do kumulativnog broja na kumulativne vrijednosti između 0 i 7. Tako smo mogli imati 0 za ne dozvole na sve. I to u osnovi će nam dati dozvole za obje strane korisnika, skupina, ili svijet. Bilo kakva pitanja o ovom do sada? PUBLIKA: Rekli ste pročitali bilo 4? MARIJA ZLATKOVA: Da. PUBLIKA: [nečujan]. HANNAH Blumberg: Yup. PUBLIKA: A onda dodavanjem svima drugi bi naznačiti svoj broj. MARIJA ZLATKOVA: Da. Da. To su velika pitanja. Lijep. Dalje, skočio mi u HTML i a Malo više o web development. Dakle HTML samo znači Hypertext Markup Language. I to je označavanje jezik koji je standard koji se koristi za izradu web stranice. To se zove označni jezik jer to nije zapravo sastavljen. To ne kažem kako neki broj treba biti izvršen ili bilo što slično. To samo ocrtava i opisuje kako web stranica treba biti postavljen svaki od njenih elemenata i kako bi trebao izgledati za korisnika. Neki od HTML oznake koje smo Prišao su sljedeće. Svi naši HTML dokumente započeo s DOCTYPEhtml. Onda uvijek imamo html tag. Imamo glavu i tijelo. I važno je da ima HTML ova vrsta hijerarhijskoj strukturi jer to je vrlo jasno. I onda to postaje vrlo jasno kad smo treba otvoriti i zapravo bliske oznake. A mi uvijek treba zatvoriti oznake koje smo otvorili. A ovdje imamo neke vrste stvari ispred koje žele imati. Tako da imamo npr naslov CS50. A onda smo zapravo može povezati style sheet koji definira kako smo stil naše web stranice. To je CSS. Ćemo ići preko njega u Sljedeći par slajdova, kao dobro. Unutar tijela, postavljamo neke klase i IDS. I kao podsjetnik, opet, ID su jedinstveni i nastava može se dodijeliti više stavki. A to samo znači da možemo koristiti klase i ID u drugoj structures-- tako, za primjer, u CSS datoteke ili stilu sheets-- se odnose na određene elemente a zapravo reći da želimo stil ili dizajn neki element na neki poseban način. I mislimo na njih njihove osobne iskaznice i klase. I mi također može odnositi na različite stvari po oznakama te, ali osobne iskaznice i klase samo nam dati neke Svestranost i što je posebno smo Želite da se odnosi na. Tako je samo jedan primjer. Mi možemo, opet, u roku CSS datoteke, gdje smo Želite definirati neke style-- tako boje, fontova, i stvari kao što that-- možemo definirati stil za tijelo. Tako da bi ga definirati za cijelo tijelo oznaku. No, tada možemo definirati stil za #title. I opet, hashtag odnosi na naše ID i točka odnosi se na našem razredu. A onda za .info, mi Također možete postaviti neke atribute. I opet, kad smo se vratiti, imali smo klasa se zove info i naša ID naslov. I možemo vidjeti da mislimo im #title i .info. PUBLIKA: Biste li rekli hashtag [? usvojiti mi? ?] MARIJA ZLATKOVA: Žao nam je? PUBLIKA: Biste li rekli hashtag [? usvojiti mi? ?] MARIJA ZLATKOVA: hashtag znači ID, tako #title odnosi se na bilo kakvim elementima imaju ovu ID zove naslov. A onda je točka odnosi na klasu. Dakle, .info odnosi na tog elementa jer ima klase info. Yup. PUBLIKA: Zašto vi razlikovati ih u HTML? Zašto kažeš neke stvari su Osobne iskaznice i neke stvari su klase? MARIJA ZLATKOVA: To je samo do you-- HANNAH Blumberg: Ponovite pitanje. MARIJA ZLATKOVA: Oh, ispričavam se. Zašto mi razlikujemo određene elemente kao IDS i drugih elemenata kao klase? To je samo zato što je stvarno često izbor dizajna. To vam daje mnogo svestranost u biti moći reći što želim ovu specifičnu stavku da se ovaj ID jer žele učiniti puno stvari s njim, a ja samo Želite definirati stil, određeni stil ili boju bilo za tu stavku. A način za to je samo dajući mu ID. A onda, ako želim imati nekoliko različitih predmeta da ima, umjesto ide i postavljanje their-- umjesto da to rade po tag jer bi oznake postaviti stanicu za cijelu oznaku svaki put se koristi da se krpa, možete postaviti klase na više stavki. I onda samo pristupiti tu klasu i reći Želim stil ovoj klasi na taj način. I opet, klasa može biti više različitih predmeta i ID mora biti jedinstven. Velika pitanja. Ima li još pitanja? OK, super. Opet, to je kako ti selektori se upućuje u CSS, uz hashtag, s točkom ili bez ičega za dodjeljivanje stil neke oznake, kao i tijelo. A ovdje imamo opći sintaksa kako je to učinjeno. Ponoviti neke najbolje prakse za HTML i CSS, moramo, opet, zatvorite sve HTML oznake koje smo otvorili. I ono što smo vam preporučuje učiniti za svoje završne projekte, kao i za CS50 financija, je da jesu li svi HTML potvrđuje. I to je učinjeno s W3 Validator. I onda ono što smo radili i ono što preporučujemo radi je odvajanje stil, tako da CSS iz markup HTML. Dakle, sve što se odnosi na to kako Vaša stranica će vizualno izgledati i kako će se mijenjati treba ići u CSS dokumentu. A onda tvoj označavanje govore kako stvari u odnosu na drugu je HTML, i da treba ići u vaše HTML dokumente. Ima li pitanja? MHM. PUBLIKA: Što se točno događa na sa stranice valjanosti kada smo potvrđivanju HTML da [nečujan] stvorio? MARIJA ZLATKOVA: Pa what-- ti misliš. Dakle, što se točno događa na sa validacije stranice i zašto trebamo učiniti? Uglavnom, moramo učiniti jer puno vremena, vaš browser, ako ne zatvoriti oznaku ili tako nešto, Vaš preglednik je još uvijek ide na donijeti stranicu i možda još rade, ali to je najbolji način kako bi bili sigurni da si, opet, zatvorio sve svoje oznake, da sve vaše elementi onako kako bi trebali biti, a zapravo da je od strane konvencije koje su zadane. To je, opet, samo stvar koju treba učiti kako se radi, nasuprot ima sloppier kod i stvari kao što je to. Da. O oprosti. Mislio sam da su podizanje ruku. PUBLIKA: Ne, samo sam [nečujan]. MARIJA ZLATKOVA: U redu. PUBLIKA: Hvala vam. MARIJA ZLATKOVA: Naravno, hvala. Pa opet, događa se u tome Podaci se prenose i komunikacijski modeli za prijenos podataka. TCP / IP. TCP samo znači prijenos Control Protocol i IP odnosi na Internet Protocol. I to samo odnosi na način na koji se podaci dostavljaju. Ako imamo neke podatke koji treba dostaviti na you-- tako napravite zahtjev za određenom poslužitelju. Na primjer, kad pokušati pristupiti cs50.net, možemo napraviti zahtjev CS50 poslužitelja i mi vidjeti da želimo dobiti ova vrsta informacija. A onda se na temelju ovog protokola koliko ova informacija se dostavlja, poslužitelj daje informacije natrag na nas, klijent. A onda smo mogli vidjeti podaci za stranicu a onda ga upotrijebite. Pa onda Hypertext Transfer Protocol je samo još jedan protokol ili skup konvencija koja definira kako web-preglednik i web server treba komunicirati. I stavljajući sve ovo zajedno, HTTP, opet, Samo definira kako to hipertekstualni definirani od HTML-a koji smo to radni, kako to treba biti isporučen na vas i Kako da se podaci koji se dostavljaju na vas dobiva za vas. I zato, ako se vi sjetite iz razreda, imali smo mnogo zahtjeva i imali smo puno sintakse Na zahtjeve koje smo si ići preko sada. Pa opet, kad smo poslali zahtjev na server, moramo definirati par stvari. Dakle, moramo pronaći tip zahtjeva da smo postavljanje. I opet, imamo, na primjer, GET je jedna vrsta metode da smo u našem zahtjevu. A onda HTTP / 1.1 je samo Protokol koji smo trenutno koristi. Većinu vremena, to se događa protokolu koju koristimo. Dakle, ako imate pitanje kao što je to na kvizu. To su konvencije da imamo sada. Backslash odnosi na kakav stvari što smo zahtjev. Zatim, naš domaćin je, na primjer, u ovom slučaj, pokušavamo ići na google.com. Dakle, to je vrijednost za domaćina. To je vrsta zahtjeva koji bi mogao biti poslan. I onda tip odgovora koji bi mogao biti poslana, opet, na temelju ovog Protokola, opet, HTTP / 1.1. Tako da je HTTP verziju ponovo. 200 U redu je samo status kod. I to je u redu je samo fraza na temelju tog statusa kod. A onda Content-Type odnosi se na vrstu koji se vratio na vas da je za tu web-stranicu da ste primili i da pregledniku može pružiti poslije. I to je text / html. PUBLIKA: Što 1.1 znači? MARIJA ZLATKOVA: To je samo Verzija of-- oh, što to znači 1.1? To je samo verzija, HTTP verzija protokola koju koristimo. Veliko pitanje. Ostala pitanja? PUBLIKA: Možete li sumirati Sadržaj-Tip jako brzo? MARIJA ZLATKOVA: Da je ono poslužitelj. vrsta information-- ono što je Vrsta sadržaja je pitanja. Dakle, to je vrsta informacije koje ste dobili natrag s poslužitelja, tip podaci da preglednik može onda čine da koristite. PUBLIKA: Je li to Protokol je reći da radim? MARIJA ZLATKOVA: Žao nam je? PUBLIKA: Je li to ono što je protokol reći? MARIJA ZLATKOVA su: protocol-- PUBLIKA: --what Sadržaj-Tip je ili what-- MARIJA ZLATKOVA: Protokol se temelji on-- što je protokol vam govorim? To je samo način da te informacije je dostavljen Vam se temelji na kakav protokola je ove informacije dobio dostavlja natrag na vas. Da li to smisla vrsta? HANNAH Blumberg: Vi mogu misliti protokola kao A- Mislim profesor Malan opisao u razredu kao vrsta kao A- to je kao ekvivalent ljudskog rukovanjem. Recimo, kao, hej, ja sam zahtjev i ja znate kako se nositi HTTP verzije 1.1. A onda poslužitelj, kaže, Oh, u redu, I-- i oba postoje. Također znam kako se nositi s HTTP / 1.1. I ja ću dati ste sigurnosnu neki sadržaj. U ovom slučaju, to se događa biti tipa text / html. Dakle, to je vrsta samo način od njih za communicating-- MARIJA ZLATKOVA: To je samo kojom se potvrđuje da ste kako slijedi isti protokol i da su i klijent i server-- tako Vaš preglednik i server-- vrsta znati što ste pričaju i imaju Konvencija za donošenje u podacima. PUBLIKA: Dakle Sadržaj-Tip part-- Sadržaja-Type text / html-- to zaseban dio iste poruke? Ili je to dio recimo, 200? Je li 200 Recite im da ili is-- MARIJA ZLATKOVA: 200 kaže da sve ode u redu. I onda tip sadržaja je vrsta odvojeni dio iste poruke, govoreći ono što sam Vraćeno je ovaj tip text / html. To je samo daje više informacija. Imate li što dodati? U REDU. Ima li još pitanja o ovome? Odlično. Tako da neki drugi HTTP statusi koje smo mogli dobiti uz 200 OK, one koje smo vidjeli, možda možda puno su 403 i 404. Dakle 404, ako se pokušavate Pristup nešto što ne postoji. Tako, na primjer, u svom CS50 financija psets, ako je pružanje quote.html a nisu imali tu datoteku, ali umjesto toga ste imali quote.php, da bi rezultirati 404 Not Found jer datoteka možda ne postoji. Za 403 zabranjeno da odnosi na dozvole. Dakle, ako neke datoteke nije čitljiva od strane svijet, možda dobiti 403 vratio. Neki drugi koji vas možda get-- 301, preselili trajno; 302, Pronađeno; 304, Promjena; 400, Bad Zahtjev; a zatim Interna pogreška poslužitelja za 500 i 503, usluga nedostupan. Da. PUBLIKA: Hoćemo očekuje da zapamtiti sve one statuse? MARIJA ZLATKOVA: ja bi ih na vašem mangupirati se plahta. [SMIJEH] PUBLIKA: Jesmo očekuje da znate što izaziva svatko? MARIJA ZLATKOVA: Jesu li? HANNAH Blumberg: Za one koje smo pokrenuti into-- pa je pitanje was-- MARIJA ZLATKOVA: Jesu li očekuje da znam da nitko od tih statusa Kodovi se može pokrenuti? Dakle, za one koje smo koristili i naletio na, rekao bih, da. Tako smo definitivno nisam vidio 200 OK i predavao u psets. Vidjeli smo 403, 404. Za one druge? HANNAH Blumberg: bih kažu 500 čini fer igru. MARIJA ZLATKOVA: 500, da. HANNAH Blumberg: Da. Dovoljno je imati opći osjećaj ono što ih uzrokuje. I također samo to imena, možete vrsta kao i napraviti jedan obrazovani pogodak kao na što ih je prouzročilo. Na primjer, premjestiti trajno, vjerojatno datoteka je premještena trajno. PUBLIKA: Ali na prethodni ispit, bio je tako kako ste nas očekivati ​​da će odgovoriti na to? HANNAH Blumberg: Da Vrijedilo nula bodova. Pitanje na 418 na čajnik je tehnički HTTP statusa, ali bilo je vrijedno nula bodova. Očito nisi Očekuje se da će ih znati. PUBLIKA: Je li to realno? HANNAH Blumberg: To je pravi jedan, ali to ne znači ništa. To je samo šala. Internet ljudi su smiješne. MARIJA ZLATKOVA: velika pitanja, dečki. Ima li još pitanja? PUBLIKA: Što je interna pogreška poslužitelja? MARIJA ZLATKOVA: Interna Pogreška poslužitelja jednostavno znači da ste bili ne može komunicirati s poslužiteljem za nekog razloga. Dakle, to nije nužno nešto što ima veze s klijentom ili nešto slično. Ne znam za bilo koji specifičan primjer da smo otišli na to objasniti, ali da. HANNAH Blumberg: Naravno. Tako, na primjer, kao što su neka je kažu da su radili na Mashup a Google poslužitelj pao za neke Razlog, nestanka struje, recimo. To će biti interni poslužitelj pogreška ili neka vrsta of-- vam se sviđa ne bi dobili odgovor natrag. MARIJA ZLATKOVA: Da. To je samo kad si ne može komunicirati s poslužiteljem za neki razlog, jer od to ide dolje ili neki drugi razlog. Dakle, skakanje u PHP-u. PHP, za razliku od HTML-a, je programski jezik. I mi počeli koristiti ga, jer to je vrlo korisno za web razvoj. Prvo smo ga koristili u CS50 financija. I to zapravo pomaže nam donijeti zajedno to označavanje, dizajn, i kako mi zapravo koristiti podatke prikazati stvari na web stranici. Dakle, PHP sama znači PHP Hypertext Preprocessor, tako da je rekurzivna backnorym po sebi. A otvaranje oznake za PHP mi je lijeva i desnu strelicu s upitnike i PHP. Tako smo već vidjeli gomilu toga. Sada mi samo ići preko neke od osnovnih stvari o njemu. Dakle, s PHP, varijable Imena početi s znak za dolar. Mi ne navodi, opet, varijabla tipa više. Baš kao što smo učinili s C, ne moramo to učiniti. Možemo napraviti hrpa različitih stvari s varijablama. Možemo ih staviti zajedno ih nadovezivanjem s dot notaciji koja nismo mogli učiniti u C ponovo. Opet, imamo malo više svestranost s PHP u pogledu varijabli. Opet, nemamo glavnu ulogu. A PHP interpretira za razliku od sastavio, Pa koliko smo napraviti za C datoteke, nemamo to učiniti za PHP. Ali umjesto toga, način na koji se jezik je trčanje po sebi, to se tumači. A onda labavo upisali samo znači da mi ne moraju odrediti varijablu Vrsta i promjenjive vrste Podrazumijeva se za vrijeme izvođenja. PUBLIKA: ali ono što je učinio znači po dot ulančavanje? MARIJA ZLATKOVA: Naravno. Kada želimo staviti stvari together-- pa ako smo imali neke varijable koje imao vrijednost 3 i imali smo još jedan varijabla koja je imala vrijednost niza, možemo staviti varijable zajedno stavljajući točku između njih te ih nadovezivanjem. Ili možemo stvoriti varijabla zove ime i stavio ga zajedno nadovezivanjem dva konce. Dakle, ako smo imali niz u dvokrevetnoj citati i stavili smo točku nakon njega, a onda smo imali još jedan niz, koji će stvoriti string zajedno. PUBLIKA: U redu. MARIJA LATVIJA: Je li to jasno? PUBLIKA: Da. MARIJA ZLATKOVA: U redu. Da. PUBLIKA: Kada reći tumačiti nego sastavio, pričaš o tebi ne trebaju biti što precizniji kada je riječ o PHP odnosu C? MARIJA ZLATKOVA: Kada kažemo interpretirati kao razliku sastavio, Što mi znači? Dakle, to znači da mi ne treba izvršne datoteke za pokretanje PHP. To znači da se radi kao što ide. Ima li to smisla? Još malo. HANNAH Blumberg: Znači, mogu misliti tumača kao još jedan program koji je odgovoran za idući redak po redak kroz PHP i zapravo ga izvršenja, za razliku od sve to sastavljanje dolje binarno. To zapravo ne znači ništa o tome kako je specifično trebamo biti. Još uvijek trebaju biti precizni, a ne zaboravite svoj zarez i uvjerite se imate svoj znak za dolar, i slične stvari. Dobro pitanje. MARIJA ZLATKOVA: Da. Dakle, redak po redak, kao za razliku od C datoteke, moramo napraviti cijeli finale prije nego što zapravo može ga pokrenuti. To je glavna razlika. Ali opet, ne možemo stvarno biti manje specifična. Dakle polja u PHP predstavlja zapravo naredio karta. Dakle polja pridruženih vrijednosti do ključeva. Dva načina da proglasi polje, na temelju ovog sintaksi, možemo biti jasniji u tvrdnji imamo niz i imamo ovu key1 koji mapira ovo vrijednost1, key2 koji preslikava VALUE2. Ili mi samo može stvoriti niz koji sadrži same vrijednosti a zatim su ključevi Podrazumijeva se na neki način. Bilo kakva pitanja o ovome? Publika: Što bi ključevi se u drugom primjeru? 0, 1, 2, 3? MARIJA ZLATKOVA: Na primjer, to je samo ključevi u to nije nužno promijeniti nešto. Oni jednostavno odrediti kako možete koristiti vrijednosti unutar nje. Dakle, ako smo imali foreach petlje u PHP kako bi nam omogućiti da ide kroz sve vrijednosti, možemo proći kroz svih vrijednosti, čak i ako smo imali ili nisu definirani specifična ključna unutar stranice je prethodna sintakse. Dakle, čak i sa ovom vrstom od niza, ipak smo mogli imaju foreach petlju koja prolazi kroz svaki od vrijednosti u ključ u nizu. Dakle sintaksu foreach petlje, počinjemo s nizom. Ova varijabla $ arr je naš stvarni niz da je definiran u prethodnu stranicu kao vrijednost koja doslovno ide kroz svaku od vrijednosti, bez obzira da li imali smo ključ ili ne. A onda možemo učiniti nešto s vrijednost unutar foreach petlje. Pa opet, ako smo imali niz ovako ovdje created-- tako da imamo ključ foo i vrijednosti bar, ključ Baz i vrijednost qux-- možemo imati foreach petlju koja prolazi kroz niz kao ključne vrijednosti a zatim učinite nešto s ključem i / ili vrijednosti. Ali mi ne nužno uvijek moraju imati foreach petlje koje prolazi kroz niz kao ključnog kartu na vrijednosti. Možemo proći kroz foreach petlje niz kao vrijednost. HANNAH Blumberg: I ​​ja mislim to-- je vaše pitanje, ono je implicitno indeks? PUBLIKA: Kinda. MARIJA ZLATKOVA: Oh. HANNAH Blumberg: Da, da. Tako je u osnovi, ako ne odredite ključ, to će biti 01. MARIJA ZLATKOVA: Da. Baš kao i sa C, to je nula indeksirane ako ne odredite ključ. PUBLIKA: Žao mi je. Možete li pokušati govoriti malo glasnije? Imam malo Problem je sve čuo. MARIJA ZLATKOVA: Žao mi je. Da, naravno. Dakle, želiš mi ići preko toga opet? Ili je this-- PUBLIKA: Pa na prethodnoj slide-- ako možete jednostavno vratiti jednu sekundu. MARIJA ZLATKOVA: Naravno, žao. PUBLIKA: Pa drugi Niz ovdje ne Čini se da imaju vrijednost ključa, nekako [? uzročnost. ?] MARIJA ZLATKOVA: Da, da. PUBLIKA: pa kako se taj posao kad kažeš da je sve ili ništa. Za mene, to izgleda kao A [? foo?] već. MARIJA ZLATKOVA: Da, da. Pa opet, to je naredio karta u tom smislu da su tamo razumjeli, na primjer, indeksi Ovdje se može shvatiti kao 0, 1, 2, 3. Opet, to je s onima Indeksi je naš ekvivalent da ima ključeve preslikati na vrijednosti. Dakle, ako je naš ključni je 0-- žao. HANNAH Blumberg: Ne, tu je krede ovdje. To je zapravo jako lijepo. MARIJA ZLATKOVA: To je super. U REDU. Pa opet, $ ARR 0 će biti ključ za vrijednost 1. 0 će biti ključ za vrijednost 1. PUBLIKA: Žao mi je. To je nevidljiva. HANNAH Blumberg: U redu, nevermind. Kreda je loša ideja. Ja ga uzeti natrag. Možete misliti ključeva kao 0 karata u vrijednosti 1. MARIJA ZLATKOVA: Da. Dakle, ovaj je 0, to je 1, 2, 3. To mogu biti tvoji ključevi. Možete misliti o njima as-- da. Dakle, umjesto da eksplicitnih tipke, oni su vrsta shvatili kao Indeksi početkom u 0. Krede nije pomoglo. Da. PUBLIKA: Za foreach petlje, ako smo htjeli vidjeti što je vrijednost, To bi samo automatski indeks 0? MARIJA ZLATKOVA: Da. To bi proći kroz svaku od vrijednosti. PUBLIKA: [nečujan] kao 0 ili bi to jednostavno učiniti 0? MARIJA ZLATKOVA: Ti bi reći što je znak za dolar, a zatim Neki ime varijable, vrijednost. PUBLIKA: [nečujan]. MARIJA ZLATKOVA: Žao nam je? PUBLIKA: Nažalost, ja sam Samo pokušavam sjetiti. Kako biste učinili da ako to možete učiniti automatski indeksiranje samo 0? MARIJA ZLATKOVA: Pa kako bi ti to ako nisu imali određene ključne imena? PUBLIKA: Da. MARIJA ZLATKOVA: Vi bi samo define-- Samo se reći kako je neko ime. Dakle, u svojim psets, vi možda zapamtite foreach $ redak kao redovi $, stvorili smo sebe ovu $ redak govoreći želimo ići preko reda, kao $ redova. Iako nismo imali to eksplicitno $ redaka definirani, smo mogli samo otići i kažu to može biti naša ključna, i samo proći kroz svaku od vrijednosti. PUBLIKA: Tako je vrijednost nova varijabla mi stvaramo pohraniti [nečujan]? MARIJA ZLATKOVA: Dakle, to nije inherentno nova varijabla. To je varijabla koja se odnosi na unutar polja na svakoj od njih. HANNAH Blumberg: To je novo ime varijable. MARIJA ZLATKOVA: Da, to je novi naziv varijable, ali to nije inherently-- da. To je samo nova varijabla koje možete učiniti. Pa koliko to smo učinili $ red kao $ redaka, redovi je novo ime varijable koje mogao stvoriti u našem foreach petlju. To ne mora postojali prije toga. PUBLIKA: Možete li proći kroz logika za svaki, na primjeru postoji? MARIJA ZLATKOVA: MHM. O oprosti. Evo primjer. Naravno. Tako je za svako array-- tako to znači ići na ovaj niz kao ključ value-- da će proći kroz ovaj niz i prvi put otići i dobiti foo je Ključ foo a bar vrijednost. A onda na drugi iteracija za petlju, to će proći i uzeti ključ Baz i vrijednost qux. A onda možete učiniti nešto s bilo koji od njih ili oboje. PUBLIKA: Dakle, ideja ima ključnu točku na vrijednost, Što ćete završiti pristupu? MARIJA ZLATKOVA: Što je ideja vlasništvo ključni ukazuje na vrijednost? To je samo još jedna konvencija, drugi način prolazi kroz niz i biti u mogućnosti pristupiti bilo ključ ili vrijednost ili oboje i koriste ih. PUBLIKA: Koja je uloga za narediti da se foreach radi u? Dakle, ako smo dodali elementi niza kasnije, bi oni biti prvi pozvao u foreach polje, ili će to biti kasnije? MARIJA ZLATKOVA: Dakle, što je red da foreach petlja prolazi kroz niz u? Ona prolazi kroz prvi element posljednjeg elementa, do posljednjeg dodano elementa. Ako dodate elemente kasnije, što bi biti accessed-- prvi elementi bi pristupiti kao prvi elementi polja, i onda bi proći kroz svaki od elementi kao svojevrstan ordered-- nije naredio, ali način na koji oni su stavili u nizu. PUBLIKA: Tako novi elementi dodaju kasnije? Tako oni added-- oni će biti zadnji u [? iteracija. ?] MARIJA ZLATKOVA: Novi elementi can-- u osnovi, kada se dodaju novi elementi, se dodaju na kraj niza? PUBLIKA: Da. MARIJA ZLATKOVA: Vjerujem da jest. Da. A onda sa svojim foreach petlje, Nakon što ste dodali nove elemente i proći kroz njih, novi elementi bi biti accessed-- novog elementa, ako je to dodao je posljednja, to će biti zadnji pristupiti. PUBLIKA: Možete li samo dati primjer nešto što bi [nečujan] s nešto s vrijednošću kao [nečujan] ili vrijednosti, kao i kako ćeš oblikovati to? MARIJA ZLATKOVA: Naravno. Mogu li dati primjer onoga što što će učiniti s vrijednosti? Pa što vi mogli biti upoznati s je da smo prošli kroz niz i zapravo ispisuju svaki od elemenata, na primjer, u sklopu naredio popis ili nešto što. Znači li to da smisla ili ne želimo to-- PUBLIKA: Možemo ispisati te vrijednosti se? MARIJA ZLATKOVA: Da, možemo ispisati a onda zapravo $ vrijednost, jer na daje specifična vrijednost, mi bi se ispis vrijednosti unutar nje. Dakle, ako smo bili na našoj prvoj iteraciji to i mi tiskani $ vrijednost, mi bi se ispis bar. PUBLIKA: Postoje li su i za petlje u PHP ili samo foreach petlje? MARIJA ZLATKOVA: Nema i za petlje u PHP. I njihova logika je uglavnom isto kao što ste navikli. PUBLIKA: Dakle njegova vrijednost je null. MARIJA ZLATKOVA: To je kao isti. Da. PUBLIKA: ja sam samo pitati. Dakle, kada proglasiti polje, ne trebate reći što veličina to će biti, što znači da možete jednostavno dodavanje i oduzeti elemenata [nečujan]. MARIJA ZLATKOVA: Yup. Yup. Točno. Kad smo proglasiti niz, mi ne treba reći što veličina je, tako da mogu samo dodati elemente na to i kasnije. Više pitanja? Dakle, donoseći PHP i HTML zajedno, ono što smo seen-- dobro, na primjer, u ovom slučaju imamo HTML oblik koji ima polje za unos. I polje za unos je samo ime a onda ima gumb Pošalji. A kad pritisnete Pošalji gumb, u našem hello.php datoteke, jer je postupak za oblika dobili, možemo pristupiti bilo je na ime time dobili globalnu varijablu koja is-- sintaksu jer _GET $. A onda možemo pristupiti bez obzira na unos korisnika unutar tog obrasca za ime određivanjem ime tog polja. Ima li još pitanja ili bilo pitanja o ovom specifičnom primjeru? PUBLIKA: Gdje je PHP? MARIJA ZLATKOVA: Ovdje. Dakle, to je naša otvaranje oznaka za PHP. PUBLIKA: Oh, u redu. MARIJA ZLATKOVA: Da. HANNAH Blumberg? Odgovor: = je stenogram za to je PHP i samo jeka. PUBLIKA: Oh. MARIJA ZLATKOVA: Da, ispričavam se. Trebao sam to jasno. HANNAH Blumberg: Ispis. MARIJA ZLATKOVA: To je samo funkcija koji nam omogućuje ispis nešto. Veliko pitanje. Tako going-- da. PUBLIKA: Ima li će biti dosta malo rukom kodiranje PHP i HTML na kvizu 1? MARIJA ZLATKOVA: Tu može biti sajam iznos od interpretacije PHP i HTML, ne nužno kao ogroman kodiranje, iako možda morati napisati foreach petlju, ipak, for petlje. Bilo koji od petlji koje pokriti ovdje je fer igra. I to je uglavnom to. HANNAH Blumberg: ja bi biti spreman. Na isti način na koji smo vas pitali da napisati hrpa C funkcija na kviz 0, Ja bih bio spreman učiniti Isto u PHP i JavaScript. MARIJA ZLATKOVA: Da. HANNAH Blumberg: Rekao bih little-- kao da nismo će vam napisati veliki HTML stranica samo zato što je malo dosadan, ali možda imaju dijelove. To je potpuno fer igra. Kao mali HTML stranice, potpuno pošteno. PUBLIKA: U redu. Kako ou JavaScript isto kao i? HANNAH Blumberg: Da. JavaScript je fer igra. MARIJA ZLATKOVA: Da. To je potpuno fer igra. HANNAH Blumberg: Dobit ćemo onom u kao 10 minuta. MARIJA ZLATKOVA: SQL, opet, Structured Query Language. To u osnovi omogućuje nam da upravljanje podacima u upravljanje relacijskom bazom podataka Sustav. To samo znači da u osnovi da smo negdje pohraniti neke podatke koje smo možda želite koristiti na web stranici ili u nekom drugom obliku. A onda smo dobili upite Podaci iz naše baze podataka, ili umetnuti podatke u njima. Puno zajedničke ones-- UPDATE, INSERT, SELECT i DELETE. Dakle, za ažuriranje, to je sintaksa za ažuriranje podataka u bazi podataka. Ažuriranje ovu tablicu pod nazivom stol rekavši SET, možemo postaviti neke vrijednosti u svim Redovi ravnopravnom nešto drugo. Dakle, možemo navesti neke specifične Zapisi koje želimo mijenjati a to može biti pomoću GDJE. I možemo navesti da mi samo želimo mijenjati neke retke gdje se kuća za, ako smo imali stol studenata i svi studenti imali kuću, tako da bi samo promijeniti neke vrijednosti gdje je kuća jednaka CURRIER, na primjer. Za INSERT, možemo umetnuti određene vrijednosti u tablici. Dakle INSERT INTO tablica, te vrijednosti, a zatim u zagradama, smo odredili koje vrijednosti želite umetnuti. Dakle INSERT INTO stol, Col1 i col2, vrijednost se VAL1 i VAL2. Dakle, ovo umeće osnovi novi redak u Na tablici vrijednosti 1 i 2 pod stupaca 1 i 2. A onda ćemo ići preko brzo primjer kako to izgleda kao u našoj bazi, malo. Ali ovo konačni upit koji sam da ćemo ići preko, SELECT, samo nam omogućuje odabir podataka iz tablice eventualno ga koristiti poslije. A način na koji mi to radimo je da samo ga pohraniti u neku varijablu. A onda smo eventualno može ga koristiti opet. Pa odaberite zvijezda znači odaberite sve. To je samo skraćenica za odabir sve. IZ stola gdje, tražimo za neke posebne uvjete, pa gdje stupac jednak nešto, npr. Ako smo samo htjeli odaberite sve od stola, to samo odabire sve stupce i sve retke iz tablice. A onda izbrisati iz tablice GDJE col jednak nešto, to samo briše neke red od našeg stola gdje imamo neke specifične uvjete. U ovom slučaju, uvjeti su kolone jednak nešto. Dakle, samo brzo primjer za to. Ako imamo tablicu ovdje i mi umetnite ga u stol, te vrijednosti, da bi umetnuti novi redak. A ako smo imali auto-prirast, to bi Samo povećavati našu ID od 0 do 1 do 2. Ako smo odabrali svi od studenata ga, Samo vraća sva polja i sve retke. Gdje godine veći od ili jednak 2016, da bi samo povratak Ana i ja. A onda, ako mi samo odabrani godine id i godina od studenata gdje je kuća je Cabot kuća, koje bi, opet, povratak Hannah i ja. Onda ako izbrisani iz studente gdje je naziv jednak Rob, kako bi izbrisati cijeli redak. A onda, ako smo postavili ime, UPDATE učenika Naziv skupa jednaka Daven GDJE kuća je jednaka Cabot kuća, da će ići na one retke, a zatim ažurirati ime. I onda nekoliko vrsta SQL podataka su CHAR, VARCHAR, INT, i plutaju. To su fer igra. Ja bih ići ispočetka i provjerite da li znate te ih imati na vašem mangupirati se plahta, što svaki od tih znakova su korišteni za, što možete ih koristiti na svojim psets, i provjerite da li ste upoznati i zadovoljni što odabrati iz različitih vrsta podataka u vašem pset. Da. PUBLIKA: Što je to stol pohranjene? Da, ako se ova tablica pohranjeni? MARIJA ZLATKOVA: Pa, upravo sada, to nije pohranjena. U svakom slučaju, ako se ova tablica pohranjeni? Ali to može biti pohranjeni u SQL baze podataka. PUBLIKA: A gdje je SQL baza podataka? U računalo, on-line negdje, poslužitelj? MARIJA ZLATKOVA: To može biti broj različitih stvari. HANNAH Blumberg: Mi smo povezati s SQL tablice govore s phpMyAdmin. Tako bismo mogli postaviti poslužitelj pohraniti ih za nas. Mi ih mogli pohraniti na vlastitom računalu. MARIJA ZLATKOVA: To samo ovisi o kako želite to učiniti za sebe. No, mi smo bili skladištenje ih, kao što je Hannah spomenuto, na phpMyAdmin, koji je online. A onda je način na koji smo koristili PHP i SQL, možemo ga spremiti u neku varijablu ono što smo pitali za. Dakle, ako smo odabrali sve iz povijesti gdje USER_ID jednaka ID sesije, kako bi odabrali sve retke za određenu osobu koja prijavljen iz povijesti stol i razvrstati ih u redove. Kul je znati da CS50 upit funkciji štiti od SQL injekcije tagova. To samo znači da osigura ulaz koji je ušao je ispravan i da je osoba koja ulazi u ulaz ne pokušava ulaz neki zlonamjerni kod bilo ispadne naše stolove ili izbrisati sve unutar naše baze podataka. Brzi pregled od Model View Controller model to je samo način organiziranja i razmišljam o kodu. To je opet, dizajn paradigma. Što to znači da smo can-- i to je dobra praksa odvojiti različite dijelove našeg koda i što kontrolirati u ove tri paradigme. Dakle, naš pogled je najčešće naša predlošci, naš izgled, način koje smo postavili kako naš broj izgleda. To je uglavnom naša CSS datoteke i način koje smo definirali dizajn našeg koda, u osnovi. Naš kontroler je uglavnom ono što smo radili sa PHP datoteke. Pa opet, rad s informacije koje imamo i definiranje kako se to podaci koriste, a zatim prolazi tu informaciju bilo na pogled ili modelu. A model, način na koji smo bili koristite je naša baza podataka, pa gdje su naši podaci pohranjuju tako da ima negdje živjeti u, i bilo je od kod koji se odnosi na način na koji da smo dobili tu informaciju ili način na koji možemo ažurirati te podatke. Tako je u MVC modelu, HTTP Zahtjevi se šalju na web server. Zatim, kontroler tumače zahtjev od korisnika a zatim potvrđuje korisničkog unosa. To je opcija da imamo kontroler komuniciraju s modelom, tako nešto kao što u našoj bazi ili neke druge funkcije koji releji podatke. I onda na kraju, kontroler prolazi informacije na prikazu tako da se može donio i da to može postaju vidljivi na bilo koju osobu Pristupom web-stranicu. Ima li pitanja? Odlično. Pa opet, model, njezina funkcija, opet, je uporni pohranu podataka, upravljanje i organiziranje podataka. A ono što smo vidjeli, tako daleko je MySQL baza podataka i sve podatkovne datoteke koje se mogu koristiti. Vidi, prikaz informacija korisnik, UI ili korisničko sučelje. A primjer za to je HTML. A onda bismo mogli imati minimalnu PHP. Dakle, za petlje da iterira više podataka koji se ispisuju dio prikazu, kako za razliku od regulatora. A onda je puno naših PHP datoteke spadaju u kategoriju kontrolera. To samo obrađuje zahtjeve korisnika i dobiva informacije od modela. Skakanje u dokumentu Object Model, to samo odnosi na način HTML Dokumenti su organizirani. I oni su organizirani u stablo struktura koja ima hijerarhiju. Dakle, ako imamo pristup [nečujan] prikaz dokumenta, možemo raditi s dokumentom, kao što su možemo manipulirati objektima osnovi. A da bi ovo malo jasnije, kada imamo puno naših Različite oznake odgovori različitim pravcima u našoj stabla. A onda u ovom primjeru smo imaju Početni dokument čvor. Imamo, dakle, naša HTML čvor koji dijeli se u glavi i tijelu. Voditelj je naslov, a zatim Naslov sadrži Pozdrav, svijet. I naše tijelo sadrži samo Pozdrav, svijet kao dobro. Tako da bilo pitanja na bilo koji od stvari koje smo dosad pokrivene? A ako ne, Hannah će preuzeti s JavaScriptom. Odlično. HANNAH Blumberg: OK, super. Ako ništa drugo dolazi s PHP ili HTML, ili bilo koji od stvari Maria pokriven, uvijek možemo pauzirati. Radimo bolje vrijeme opet, tako strašan. I samo da se vrati jako brzo to, ako pogledate svaki prošle godine je ispit, ovaj dolazi either-- ovdje neke HTML, čine ovaj dijagram. Ili ovdje je ovaj dijagram, napraviti neke HTML, tako da svakako praksa da. A onda je jedan zajamčena Pitanje koje možete dobiti pravu. Cool. Dakle, pričajmo o JavaScriptu i kako je malo razlikuje od jezika kao što su PHP i C, dva jezika koje smo vidjeli prije. Dakle broj jedan, to labavo se upisali. To je poput PHP, ali za razliku od C To je tumačiti jezik. Opet, to je kao PHP, za razliku od C i to će nam omogućiti da ga use-- radi jako lijepo s web stranice. To će nam omogućiti da manipuliraju sadržaj i kako to izgleda a ono što čini. Idemo vidjeti malo Ajax. To nam omogućuje da komuniciraju asinkrono s različitim poslužiteljima i dobiti informacije. A to je stvar koja stvarno odvaja JavaScript od PHP i C je da je na strani klijenta. Oba PHP i C su obično na strani poslužitelja. Najvećim dijelom i gotovo u cijelosti ono smo vidjeli, barem u Ovaj razred, JavaScript djeluje na strani klijenta, što znači da preglednik je zapravo odgovorni za to trčanje. A to znači da mi ne trebaju komunicirati s poslužiteljem. Dakle, to znači da može biti puno brže jer to je zapravo samo to Chrome, to je Safari, to je Firefox, sve što vam koristiti se zapravo radi svoj JavaScript. PUBLIKA: Što asinkroni znači? HANNAH Blumberg: Ah, što ne asinkrono znači? Veliko pitanje. Asinkrono means-- dobro, sadržaj u kojem mi koristimo je, u redu, mi su izrade web stranice i moramo dobiti neke informacije. Tako na primjeru Mashup, neke informacije koje možda želite je članak naslova. Sada, could-- smo jednu opciju je to učiniti sinkronizirano a to znači neka je zaustaviti, ići dobiti u članku, dobiti članak leđa, a zatim uzvratiti, ali to će biti jako sporo. To bi bilo loše korisničko iskustvo zato što bi samo sjediti tamo čeka nešto odgovoriti. Asinkrono mi znači ćemo i dalje će o našem poslovanju, renderiranje stranice, i ćemo poslati zahtjev To je vrsta ide dogoditi u pozadini. Mislim da smo koristiti primjer u Predavanje pozivanja Rob i govoreći: hej, možete li ovo pogledati za mene i dobiti natrag na mene, za razliku od samo meni čekanja na telefonu. Dakle asinkrono znači da će se dogoditi u pozadini od nas paralelno. Veliko pitanje. Još nešto? Veliki. Mi ćemo skočiti mnogo više u asinkroni zahtjevi s Ajax. PUBLIKA: Da li JavaScript-- gdje se pasti sa Model-View-Controller? HANNAH Blumberg: Veliki pitanje. Gdje JavaScript pad sa Model-View-Controller? Hm. Mislim da mogu fall-- pa obično ne vole ga mljackati u to paradigme, ali pretpostavljam da bih, U redu, tako JavaScript zapravo ide kako bi se omogućilo nam za prikupljanje podataka, interpretirati podatke, zapravo ne smislene stvari s podacima. Na taj način, to je vrlo upravljačke slično. Ali to također će nam omogućiti da prikazati stvari i ispisa stvari. Na taj način, to je vrlo pogled nalik. Da. Dakle, to je vrsta kao što su PHP u gdje se to može biti i vrsta. Dobro pitanje. Još nešto? U redu, super. Premještanje pravo zajedno. Tako ćemo vidjeti primjer kako možemo koristiti JavaScript je u jednom od naših web programa. Dakle, ja ću to uzeti u obzir index.html s hrpom HTML. A stvar Želim te usredotočiti na to skripta oznaka. A to, kaže, u redu, želim pokrenuti neki JavaScript i ovdje gdje živi. Ona živi u hello.js. I vrlo mnogo kao što su CSS, mogli bismo staviti JavaScript u HTML-u. Zašto se želimo ga izdvojiti? Da. PUBLIKA: Lakše prepisati? HANNAH Blumberg: Da. To je lakše koristiti preko različite web stranice. To čuva stvari čišći. To je samo dobra praksa. Odlično. Dobar odgovor. Pa dobro, tako da to ide biti naš index.html. I onda ovdje je naš maleni malo JavaScripta datoteka. A sve što kaže je uzbuna Pozdrav, svijet. Dakle, što se događa kada ovu stranicu renders-- pa ako idete na bilo website ovo is-- sve što će se dogoditi je to će reći, u redu, ja sam će pokrenuti ovaj JavaScript kôd. I ovo JavaScript kôd Samo kaže upozorenja Pozdrav, svijet. Tako ću dobiti ovo prijateljski mali pop-up. Cool? To je vrsta kao što je naš prvi JavaScript program, naš Zdravo, svijet. Pogledajmo malo više o tome što sintaksa JavaScript izgleda. A posebno, neka je to usporediti s C i PHP, koje smo vidjeli. U JavaScript, ćemo imati var, naziv varijable, a zatim njegova stvarna vrijednost. A mi ne odredite tip, samo kao u PHP-u, ali vrlo razliku u C. Tako na primjer, ako smo htjeli pohraniti vrijednost 50, u C, mi bi se reći, hej, C, želim cijeli broj, Idem ga nazvati ja, a njegova vrijednost je 50. U PHP-u, to je malo lakše. Kažemo, hej, želim varijablu Nazvao sam i njegova vrijednost je 50. Vrlo slično, u JavaScript, mi reći hej, ja želim varijabla sam nazvao, njegova vrijednost je 50. Svako sljedeće put da koristim ja, ne trebam pisati var. To je samo ja od tog trenutka. Na isti način, u C, gdje jednom kažemo int i, možemo samo koristiti i. Cool? U redu. Premještanje na petlje, Srećom, to je gotovo izgleda exactly-- mislim da su točno isto kao što petlje će izgledati u nešto poput C, gdje vam za petlju će imati tri parts-- je inicijalizacija, stanje i ažuriranje. While petlji, to izgleda točno isto. Upravo smo da je to uvjet. I do while petlja, opet isto. Mi to uvjet dati. Recimo ja sam htjela ponoviti over-- Htjela sam napraviti nešto pet puta. U C, mogli bismo napisati za init ja jednak 0. ja je manji od 5, i ++. Jedina je razlika u JavaScript, umjesto da kaže int i = 0, kažemo var ja jednak 0. Lijepa. To je jedina razlika. Bilo kakva pitanja o bilo što od toga? Da. PUBLIKA: Tako je u PHP-u, to je ista stvar, osim već kao varijablu? Ili je to u var primjer? HANNAH Blumberg: Da. Tako je u PHP-u, to će biti znak za dolar. Dakle, to će $ i jednakima 0, $ je i manje od 5, $ i ++. Veliko pitanje. Sada ćemo govoriti o izjave funkcija. U C, kada smo proglašen funkcija, dali smo ime i dali smo neke parametre. A na početku smo pisali tip. U JavaScript, svi smo morate učiniti je napisati funkcija ključna riječ koja kaže, hej, JavaScript, Spremam se definirati funkcije. U ovom slučaju, to je ime svotu. I to traje dva argumenta, X i Y. Obavijest da ne brinu o vrstama x i y. I baš kao i C, imamo taj povratak ključne riječi, tako da možemo učiniti nešto poput povratka x i y. I sad kad smo sam napisao ovaj prvi funkcija, možemo koristiti sumu gdje. I to je sasvim u redu. Jedna stvarno cool stvar o JavaScript da je vrlo razliku C je da funkcije mogu biti tretirani kao vrijednosti. Dakle, možemo učiniti nešto poput ovog gdje Pretpostavljam da pokrije to up-- Ja prikrivali var iznos part-- a mi samo rekao Funkcija xy jednak povratnu x plus y. To je ono što bi se moglo nazvati anonimni funkcija. To je funkcija bez imena. Dok to govori funkcija zbroj, bla, bla, bla, to bi samo reći funkciju. Ali sada, iako imam ovo anonimno funkcija, da funkcija je zapravo samo vrijednost. Možemo ga tretirati kao vrijednosti. Dakle, možemo ga spremiti u varijablu biti ista način na koji smo mogli pohraniti 50 u varijablu. Tako možemo reći, u redu, želim promjenjiva, to se zove suma, i to je ova funkcija. Dakle, ove dvije stvari su zapravo će učiniti točno istu stvar, ali sintaksa je malo drugačiji i vrsta zabave note. Da. PUBLIKA: Tako da bi mogao nazvati funkcija koja je anonimna govoreći, zbroj zagrade 2, 5? HANNAH Blumberg: Da. Možete nazvati ovo anonimno funkcionira na isti način. Ti bi to iznos (2, 5) ;. To bi bilo sasvim u redu. Ako nisam učinio var zbroj jednak funkcija, ako sam samo izbrisana this-- Znam da je na mojoj ruci, ali pretvarati da brišu this-- onda da funkcija vrsta upravo otišao. Vi nikada ne može ga koristiti opet, jer nemate naziv za to. Teško da se odnosi na nešto ne znam što bih nazvati. Dobro pitanje. Da. PUBLIKA: Možete li referentni iznos u druga mjesta u vrijednosti od x plus y? HANNAH Blumberg: Možete li Referentni iznos na drugim mjestima s vrijednošću x plus y? Nisam posve siguran što misliš. PUBLIKA: Znači svoje prošlosti polu-anonimna Funkcija je suma jednaka ovo Anonimni funkciju, tako da je suma Sada varijabla koju can-- HANNAH Blumberg: Tako je. Dakle, suma je promjenjiva, ali to je actually-- tako da zbroj je varijabla čija vrijednost funkcija. Dakle, to je funkcija, koja je vrsta čudan stvar zamotati glavu oko jer smo igrati s C i ne možete to učiniti u C. No, sada možemo nazvati zbrojiti Isto tako bismo mogli nazvati sumu ovdje. PUBLIKA: U redu. HANNAH Blumberg: Da. Dobro pitanje. Da. PUBLIKA: Dakle, mi ne koristiti prototipovi u PHP ili Javascript? HANNAH Blumberg: Ne, Ne morate koristiti prototipa, posebno u JavaScriptu. Dakle, jedna loša praksa stvar koju sam će reći da ne bi trebalo raditi je da ne morate pisati var i = 50. Vi samo mogao početi raditi i = 50. I bi samo bi ja globalna varijabla. To je vrlo loša praksa nikad ne reci proizvo ∂ var ja, ali to je nešto što možete učiniti. Tumač nije će vikati na vas. JavaScript je prilično slično, možete učiniti ono što želite. O oprosti. Postoji dva. U narančastim hlačama. Samo naprijed. PUBLIKA: Ne, ti idi prvi. PUBLIKA: Ne, samo sam govorio Nisam imala moju ruku. U REDU. Dakle, ako ste bili na poziv to prvi put, sada Ukratko, mi to zovemo na isti način, x, y, kao i svaki put? HANNAH Blumberg: Da. Dakle, ove dvije bitno učiniti istu stvar. PUBLIKA: A što je prednost korištenja jedno ili drugo? HANNAH Blumberg: Nema prednost pomoću jednog ili drugog. Samo sam htjela da vam pokazati dva različiti dijelovi sintakse. Mnogo puta, gdje anonimno Funkcije imaju svrhu je li argument u drugu funkcija trebala biti funkcija. I vidjet ćemo da je u samo na drugom mjestu s Ajax. Dakle, ako se to ne bi bilo smisla, pohraniti ga u stražnjem dijelu glave. To je mjesto gdje anonimni Funkcija bi moglo biti korisno jer to nije stvarno isplati dajući mu ime, jer mi smo samo će ga koristiti jednom. Da. PUBLIKA: Ako su x i y promjene kasnije na, će sumirati promijeniti te? HANNAH Blumberg: Ako su x i y promjene kasnije će sumirati promijeniti te? Dakle, to je zapravo sam mislim nešto što je, opet, samo se osjeća vrlo različite iz C. Ovo nije vrijednost. Nije 5. To je samo po sebi radi. Dakle, čim se dati što parametri, onda ste zapravo ćete izračunati vrijednost. MARIJA ZLATKOVA: A onda možete pozvati funkciju i koristiti ga kako bi dobili neku vrijednost. HANNAH Blumberg: Tako je. Točno. Da. PUBLIKA: Dakle, ako vas baš pohraniti ga u varijablu, kao var x jednak zbroju dva values-- HANNAH Blumberg: Da. Dakle, vi samo mogli učiniti var zbroj jednak zbroju dviju vrijednosti. Da. Ima li još pitanja? Da. PUBLIKA: Ali bi to brkaju iznos i iznos? Kao i ako ćete se obratiti svojem varijabilni iznos, bi li pozvati funkciju iznos? HANNAH Blumberg: mm. Mm. Ako ste učinili nešto kao, zbroj jednak zbroj 2, 5? PUBLIKA: Da. HANNAH Blumberg: Vjerujem da će prebrisati vrijednost sume. Dakle, još jedna zanimljiva stvar JavaScript je da jedan varijabla može potrajati na hrpa različitih vrsta. Loša praksa. Vi ne bi trebali učiniti nešto kao što si upravo rekao. No, u C, ako ja postavljen jednaka cijeli broj, znamo da je nikad će postati string. To nije slučaj u JavaScriptu. Da, dobro pitanje. Još nešto? U redu. Radi sve točno na vrijeme. Imajući ide. U redu. Ako gledamo niz u JavaScript, ovdje je brzo primjer niza žice. I nizovi mogu rasti dinamički. Oni nemaju fiksna veličina na isti način da radim u C možemo pristupiti elementi sa samo uglatih zagrada. To izgleda puno kao PHP i puno kao što su C, gdje možemo reći, u ovom slučaju, ako sam htjela riječ JavaScript, bih Ne ARR uglate zagrade s 0, 1, 2. A onda, ako se sjećate kad smo u C htjeli dobiti duljinu niza, to je stvarno neugodno. No, u JavaScriptu, super jednostavno. Sve što radimo, .length. Daje duljine. To je to. PUBLIKA: To je jednostavno. HANNAH Blumberg: Da, čini vaš život mnogo lakše. U redu, ne object-- tamo. Objekti u JavaScript dojam puno kao konstrukt u C i asocijativne polja u PHP. Dakle, ono što smo vidjeli Mnogo je JSON, koji označava JavaScript Object notacija. I to je u osnovi način ustroja naše podatke. Tako ćemo vidjeti primjer, vjerojatno najlakši. Dakle, ovdje je primjer objekta koji pohranjuje razred, CS50. A kad kažem klase, mislim, naravno, Ne volimo-članovima da, tečaj, CS50. I vidjet ćete da sve u objektu će biti sadržane u vitičastim zagradama. I počnemo družiti nazive polja ili tipke sa različitim vrijednostima. Dakle, možete početi da vidite kako je ova vrsta osjeća kao asocijativni niz u PHP-u. Tako ćemo povezati polje ili ključ ime, naravno, uz niz, CS50. Mi ćemo imati instruktora. Mi ćemo imati TFS. Mi ćemo imati niz psets i mi ćemo zabilježili. I jedna super stvar za napomenuti je sve ove stvari su različite vrste, i to je sasvim u redu. To je u redu za neki objekt, u stvari, to je vjerojatno očekuje objekt da imaju kombinaciju žice i brojevi i logičke izraze i nizovi i bilo što drugo što bi moglo Želite imati unutar vašeg objekta. I imajte na umu da su oni će biti imena ili tipke, a zatim smo upravo postavljen je jednaka s malo debelog crijeva. PUBLIKA: Što točno znači JSON? HANNAH Blumberg: Što točno se JSON znači? JSON samo stoji za JavaScript objekta notacija. To je samo način oblikovanja. Da. To je način oblikovanja naše podatke. U C, to je konstrukt. U PHP-u, to je asocijativne nizove. U JavaScript imamo predmete. PUBLIKA: Pa CS50 je objekt? HANNAH Blumberg: CS50 je objekt u ovom slučaju. Sada, kako radimo zapravo pristup one polja ili promijeniti ta polja. Na primjer, pretpostavimo da smo odlučili da ste htjeli jedan manje pset ovaj semestar. Umjesto devet, mi smo samo će imati osam. Kako bismo promijenili to? Oh, pogrešan način. Postoje dva načina na koje možemo učiniti. Broj jedan je s točkom zapis i broj dva je s trga nosača zapisa. Tako, primjerice, ako ja htjela promijeniti ili pristupa polje psets u našem CS50 objekt, što ću učiniti je CS50.psets, tako da naziv objekta točke naziv područja ili ključem. Vrlo slično, to je točno ekvivalent učiniti CS50, a zatim u četvornim proteza, psets. Cool? Da. PUBLIKA: Tako je JSON tehnički JavaScript dalje, iako u psets smo odvojite ga [nečujan]? HANNAH Blumberg: Naravno. Dakle, pitanje je, jesu JavaScript i JSON ekvivalent? Dakle JSON je zapis, u osnovi način na koji pišemo se objekt s JavaScript. Dakle, oni nisu isti. Ja bih rekao JavaScript postoji su objekti u JavaScriptu. JSON uzima one predmete i ih ispisuje i prikazuje ih ili ih pohranjuje na lijep način. Dakle JSON nije programiranje Jezik način da je JavaScript. To je samo zapis za naši objekti u JavaScriptu. Da. PUBLIKA: Pa što točno [Nečujan] završiti? HANNAH Blumberg: Naravno. Dakle, to zapravo ne radi ništa. Ovo je samo jedan način da se pristup. Tako recimo smo htjeli mijenjati broj problematičnih setovima od devet do osam. Ono što mi radimo je nešto kao CS50.psets = 8 ;. Da, veliko pitanje. Ovo je samo pokazati vam sintaksu. Zapravo ne raditi ništa korisno. Ima li pitanja? Premještanje pravo zajedno. Pa pogledajmo brzo primjer kako JavaScript radi jer sam rekla ti to radi sve te stvari i super nam omogućuje da izmijenite web stranice. Idemo zapravo ga vidjeti u akciji. Tako se, primjerice, ovaj HTML datoteku. I što želim da se usredotočite na ovaj tag, što je gumb, s id search_button. To je samo na stranici. Tako sada ćemo vidjeti što zapravo možemo učiniti. Pa, pretpostavljam kada kliknete taj gumb, želimo napraviti alert-- ste kliknuli na gumb. Da vidimo kako možemo učiniti. Dakle window.onload-- to nije nešto da ste vidjeli u razredu, dakle neće morati znati za kviz. No, to u osnovi kaže, u redu, poziv Ova funkcija kada je prozor opterećenja. Dakle, to je samo vrsta postavljanje koda. Ne brinite toliko o tome. Ono što želim da se usredotočite na ovdje. Kažemo var searchButton jednak document.getElementByID search_button. Dakle, kao što ste mogli pogoditi, Što to znači da kaže, U redu, idi naći element s ID search_button. I sad imamo da Stvarni element i sam će ga pohraniti u promjenjiva searchButton. I sada zapravo možemo koristiti taj elementa i to promijeniti, ili pristupiti svoje vrijednosti, takve stvari. Mi zapravo može početi angažirati s web stranice. Dakle, ovdje sam reći, OK, sad kad imam koja tipka, kad se klikne, nazvati ovu anonimnu funkciju. Dakle, ovo je mjesto gdje anonimni funkcije postaju korisne. A što je funkcija učiniti? Pa, to je samo to naziva Funkcija oprezan i ona kaže, ste kliknuli na gumb Search. Što će se dogoditi ako idem gdje god ovaj HTML živi, ​​a ja kliknite na gumb, Ja ću dobiti fancy malo upozorenje koji kaže da ste kliknuli na gumb. Dakle, ono što se usredotočiti na here-- document.getElementByID dobiva određeni HTML element s danom ID. I sada možemo postaviti što bi se trebalo dogoditi kada da određeni element kliknuli. PUBLIKA: Moramo staviti sve to u? HANNAH Blumberg: Žao nam je? PUBLIKA: Moramo li fizički kodirati sve to? HANNAH Blumberg: Ne moramo fizički kodirati sve to? Da. Nije li to vrsta neugodno? To je puno koda. PUBLIKA: Mogli uvesti nešto. HANNAH Blumberg: Tako je. Mogli bismo koristiti nešto. A u particular-- oh, to je mi govori da moram učiti sekciju. Konkretno, neka je koristiti knjižnicu jQuery, jer to je stvarno dugo i jako neugodno a ja želim biti u mogućnosti to pojednostaviti i učiniti ga kraće i lakše pisati. Tako jQuery je JavaScript knjižnica. Dakle JavaScript je programski jezik; jQuery je knjižnica. I to čini hrpu stvari lakše. To čini mijenja i ide preko HTML dokument mnogo lakše. To čini rukovanje događaje lakše. To čini animacija lakšim i čini Ajax lakše. Tako ćemo skočiti u dvoje te stvari upravo sada. Ispričajte me. Prije nego što smo učinili, neke osnovne sintakse. To je ono što najviše poziva na jQuery knjižnice izgledati. Koristimo ovu dolar sign-- nema veze znak PHP, Samo inconvenient-- naziv je selektor, točka, a zatim akcija. Tako ćemo vidjeti neke konkretni primjeri kako. Dakle, ovo je zapravo ista broj od događaja slajd. Dakle ovo dugo, ružna stvar postaje to puno ljepše, manja stvar. Tako ćemo pokušati razbiti ovaj dolje. To, kaže, u redu, jQuery-- ovaj dolar sign-- jQuery, pronašli mi prozor. Dakle, to je selektor. Kad se učitava, nazovite ovu funkciju. Dakle, to je sve što je unutra. U REDU. Zasada je dobro? U redu. Sada, jQuery, nađi mi se stvar s ID search_button. A što se klikne, nazvati ovu funkciju. I onda ova funkcija je isti. Dovoljno je učiniti malo uzbunjivanja, ste kliknuli na gumb Search. Dakle, to je stvarno lijepo. To stvarno kondenzira i pojednostavljuje naš kôd. Kako sam znao da to je ID search_button i ne sviđa klase search_button? PUBLIKA: hashtag? HANNAH Blumberg: Da. To hash znak, to je baš kao i CSS. Tako zapamtite, CSS, kada smo Htio odabrati nešto po ID, koristili smo funta znak. A kad smo htjeli za odabir nešto po klasama, koristimo točku. Veliki. Ima smisla? Tako jQuery je trebao samo bi naš život lakšim. Da. PUBLIKA: Pa ja sam malo zbunjen kao kako anonimni funkcija radi. Znate li ime ovog anonymouse funkcija, funkcionira? Kako se to zove? HANNAH Blumberg: Naravno. Dakle, funkcija je samo ključne riječi koje kaže, ja sam o definirati funkciju. PUBLIKA: Oh, u redu. HANNAH Blumberg: U redu? I onda mi to prođe kao Argument to-- uzmimo taj unutarnji one-- na funkciju klik. Pa da, tako da funkcija, ovo anonimno funkcija, postaje stvarna argument. Dakle, ne zaboravite u JavaScript, mi može liječiti funkcije kao vrijednosti. PUBLIKA: Oh, u redu. HANNAH Blumberg: Da. Volim da je "oh". Lijepo. Ostala pitanja? Vrijeme? MARIJA ZLATKOVA: Dobro. Dobro. HANNAH Blumberg: Awesome. Nekoliko brzih korisna jQuery. Neću ići kroz sve njih. Ovi slajdovi će biti up line malo kasnije, tako da možete provjeriti da se malo kasnije. No u osnovi, opća uzorak drži u kojoj ćemo reći, U redu, hej, jQuery, ovdje je moj Selektor a zatim ovdje je akcija. A vi možete učiniti stvari kao što su pristup vrijednost obliku, pristup neke HTML, kontrola što će se dogoditi kada korisnik podnosi obrazac, takve stvari. Da. PUBLIKA: Pa u ispit, ćemo trebati znati dosta s jQuery dokumentaciju. Dakle, s obzirom da smo kopirajte / zalijepite jQuery Dokumentacija našem mangupirati se plahta, Gdje je linija nacrtana? Kao koliko trebamo znati? HANNAH Blumberg: Veliki pitanje. Pitanje je bitno s obzirom da vas Ne mogu pristupiti jQuery dokumentaciju tijekom ispitivanja, koliko bi trebao znati? Nismo očekivali da dođe se s nekim slučajnim redoslijedom kako bismo Vas očekuje Googleu. Stvari koje su fer igru ​​su bih kažu samo vrsta općeg sintakse, biti u mogućnosti odabrati po ID-a po class-- tako kao CSS. A onda stvarni funkcije sebe, mi vjerojatno ću ti reći. Da. PUBLIKA: Dakle, kada odaberete po razredu bi značilo točku. HANNAH Blumberg: Da, točno. Dobro. Kada odaberete po razredu, to se događa da se točka umjesto funta znak. Da. PUBLIKA: Biste li ići preko razlici između odabira po ID i klasi? HANNAH Blumberg: Naravno. Razlika u odabiru ID i odabir po razredu. Dakle, kao što je Marija, rekao je malo ranije, postoji može biti samo jedan HTML element s tim ID, dok klase, što nam omogućuje da grupa hrpa različitih elemenata zajedno, tako stvari koje su povezane, ali ne i isti. Je li to odgovor na pitanje? Odlično. Da. PUBLIKA: Što ako imate više stvari koje su u istoj klasi? HANNAH Blumberg: Što se događa Ako imate više stvari koje su isti razred? Tako, na primjer, ako smo samo pomoću čistog JavaScript, bismo učiniti nešto slično document.getElementsByClass. I što onda da zapravo ne je vraća niz elemenata. A imate bilo ponoviti više ih ili pronaći koje želite. To neće dati što jedan element. To će vam dati niz elemenata. Veliko pitanje. Još nešto? Odlično. Dakle, mislim da, ako ste upoznati s bilo jQuery ste vidjeli u pset, te bi trebao biti dobar to ići. Pitanje? O ne. Stvarno moram učiti. Opustiti. To će biti u redu. Ja ću doći. Razgovarajmo o Ajax. Dakle, Ajax će biti A- dobro, Počnimo s onim što stoji. To je akronim. Ona se zalaže za Asinkroni JavaScript i XML. I XML osnovi će biti [Nečujan] s vrstom naše podatke. Ali nismo zapravo koristi XML. Umjesto toga, mi samo koristiti JSON. Tako je u osnovi, to je neki data-- asinkroni, JavaScript i podataka, u ovom slučaju, JSON. A naš cilj, kao što smo spomenuli malo ranije, je da bi mogli napraviti Zahtjev, koji su zahtjev za to njegova je stvar u pozadina, ali i dalje učiniti sve što smo namjeravaju učiniti. I onda kad je to informacija spremni, onda ćemo ga ugraditi. Pa da vidimo što je to zapravo izgleda. A to, što bi trebao biti malo poznato iz pset8, onaj koji ste upravo pretvorio u. Dakle, ovdje je valjan jQuery Funkcija da bismo mogli Želite li znati about-- ovaj znak za dolar. Dakle, on kaže jQuery funkciju, .getJson. A što je ova funkcija radi je to traje URL i neke parameters-- tako da mislim da u slučaju od pset8, to je kao, URL je articles.php a Parametri bio go = neku poštanski broj. A ona kaže, u redu, napraviti zahtjev ovaj URL sa zadanim parametrima. I to se događa samo. Kad završi, to je bilo će uspješno završena ili da će to uspjeti. Dakle, to je ekvivalent poziva Rob i zamolite ga da nešto učini. A onda, kada on zove natrag, on je bilo reći što sam učinio ili nisam uspio. Dakle, u slučaju gdje ste učinio, ti kažeš, u redu, ja sam učinio. I onda nazvati ovu funkciju. U ovom slučaju, to će biti funkcija koja traje neke informacije. Onaj obično stalo podataka, podaci koje smo zapravo su se vratili kao rezultat poziva .getJSON. A vi možete učiniti nešto s njom. Dakle, u slučaju pset8, smo ga prikazuju u obliku popisa. Fail će biti u funkciji kako se zove, ako se zahtjev ne uspije iz bilo kojeg razloga. A u slučaju pset8, samo smo ga console.log. Bilo kakva pitanja o tome? Da. PUBLIKA: Možemo li koristiti funkciju theta umjesto funkcije, textStatus, jqHXR. HANNAH Blumberg: Naravno. Tako da, mislim da u pset, smo upravo vidjeli funkciju podatke. Dakle, to je samo the-- da, u redu. To je ono što smo vidjeli u pset. To je sasvim u redu. To su samo ako ste htjeli izvući više informacija, to su stvari koje možete dobiti od .getJSON. Dobro pitanje. Još nešto? Da. PUBLIKA: Pa .getJSON je Ajax? HANNAH Blumberg: U redu. Dakle, to je vrsta lukav dio. To je jQuery funkcija koja omogućuje što učiniti asinkroni pozivi. A ti asinkroni pozivi, to je ono što smo se odnose kao Ajax. Da. To trebalo mi je jako dugo vremena da razvlači kad sam bio student. PUBLIKA: Možete li ponoviti to? HANNAH Blumberg: Da. Mogu reći da je opet? Ova .getJSON funkcija, to je funkcija jQuery. I to će napraviti asinkroni poziv. I ove asinkroni pozivi, mi smo su odnosi na one što su Ajax. Ima li još pitanja? Imamo samo par minuta preostalo. I Marija će završiti sa sigurnošću a onda ćemo da se samo o učinili. MARIJA ZLATKOVA: Strašan, OK. Dakle, ovo is-- samo uzeti par sekundi gledati preko toga. I to nije nešto stvarno super. I može li mi netko reći zašto? Što se događa u foo i svibanj mogao potencijalno rezultirati nešto loše, i što to zove? Da. PUBLIKA: Ako je argument da je donesen je više od 12 znakova, moglo bi se preliti. MARIJA ZLATKOVA: Tako je. Savršen. Kako se to zove? Vi samo ga spomenuo. PUBLIKA: Buffer overflow. MARIJA ZLATKOVA: Yup, buffer overflow. Dakle, to je nešto što smo nazivaju buffer overflow. I vidimo da je unutrašnjost foo, smo definira naš tampon, c, s veličinom od 12 godina. Međutim, u glavnom, mi ne provjeriti na bilo koji način na sve je li argv1-- da bio je drugi argument. Mi ne provjerite je li Veličina je to prikladno. Dakle, ako smo imali posebno zlonamjerni korisnik koji je stavio u neki argument da je dulje od 12, a zatim potencijalno izvan granica koje Argument, imao neke izvršni kod koji je pokušavao učiniti nešto loše s tim; onda, što će se dogoditi, bi nadjačati povratak adresu funkciji foo, uzrokuje funkciju kada povratka na izvršavanje taj kod. A onda se loše stvari bi se moglo dogoditi. Da li to smisla svima? A kako možemo zaštititi od toga? Bilo koji sugestija? Uglavnom, unutar potencijalno foo, kako možemo provjeriti kako bi bili sigurni da to ne može dogoditi? PUBLIKA: Ako je veličina 12 prekoračena, ti bi izdvojiti dodatnu memoriju? MARIJA ZLATKOVA: Prijedlog je, rasporediti Dodatna memorija veličine premašio. Zapravo, možemo učiniti nešto puno jednostavnije od toga, kao dobro. Mi samo možemo dobiti dužinu string argumenta koji je upisan, provjeriti da li je to manje od ili jednaka 12-- što je ono što želimo ga da se zbog toga ne želimo to prelazi granice našeg tampon. A onda, ako se to ne dogodi, mi može raditi s argumentom. A onda, ako se to dogodi, mi zapravo želimo da Yello potencijalno na korisnika. No, to je kako bi to učiniti. Da. PUBLIKA: Možete li objasniti memcpy jako brzo? MARIJA ZLATKOVA: Oh, ispričavam se. Da. Memcpy traje god is-- žao, OK. Memcpy traje ono što je u baru, ono što je prošlo na foo kao argument komandne linije. Dakle, to će potrajati argv1. Argv1 naziva bar ovdje. Dakle, to se događa da se bar i to će ga kopirati u c. PUBLIKA: U redu. MARIJA ZLATKOVA: I to će copy-- treći argument jednostavno odnosi za koliko će kopirati u c. PUBLIKA: Ah. Dakle, ovaj je kopiranje sve to onda. MARIJA ZLATKOVA: Da, to je kopiranje sve to. Da. Prvo, mi bi bili sigurni da je bar ne jednaka null jer je pokazivač. Onda smo dobili duljinu niza bara. Mi bi bili sigurni da je manji ili jednak 12. A onda, jer smo pobrinuo, možemo zapravo memcpy i biti siguran da je to u redu. Ima li pitanja? Veliki. Imam dvije istinite ili lažne pitanja. Može bilo tko reći mene odmah ako su istinite ili lažne? Da, to je lažna. Točno. Obojica su lažne. Tako pomoću jednog lozinku nikada nije stvarno dobra ideja jer ako netko zna vaša lozinka, oni mogu samo pristupiti sve svoje druge račune. A onda ikone ništa kako bi se osigurala sigurnost. Obično smo trebali tražiti HTTPS umjesto HTTP i URL. I neke druge vrste Napadi koje smo spomenuli, David je spomenuto u predavanje, SQL injekcije napada. Već smo vidjeli da ako smo don't-- Funkcija CS50 upit osigurava da SQL injekcije napada ne može dogoditi. Ali ako nismo koristili CS50, citat, citat "u upitu" ćemo morati biti sigurni da je Korisnik unos nije zapravo neki SQL upit koji će uzrokovati sve stolovi biti odbačene ili nešto loše za dogoditi s našim baze podataka. Sjednica je otmica druga vrsta napada što se događa kad neke loše Osoba koristi sjednicu neke žrtve ID pristupiti podatke za prijavu. Dakle, vrlo trivijalan primjer da je kao i ako imamo javno računalo, onda je loša osoba prijavljuje te imaju kolačiće koje su spremljene. I kolačići ne mijenjaju za sjednicu. Onda smo žrtva ići a zatim se prijavite na web stranici. Kolačići ne mijenjaju za određenu sjednicu. A onda je žrtva prijavljuje web stranica, a zatim ostavlja. A onda je osoba koja seže tada može i dalje koristiti svoj ID sesije pristupiti svoje podatke. Dakle, to je jedan primjer kako se to moglo dogoditi. I onda ja ne bih previše brinuti o specifičnoj koda ili bilo što kao što je to koja bi mogla dovesti do toga, ali ima nekakvu ideju što varijable su uključeni u to su. A onda manipulira glavom Podaci se još jedna vrsta napada koji je David govorio o tome. I to samo odnosi na što se može dogoditi kada odgovor, HTTP Odgovor unutar našeg napadača nije dezinficirati ispravno. I svaki od fields-- na primjer, ako netko prepisuje jedno od zaglavlja Vrijednosti da sadrži ništa više od ono što bi trebali contain-- i zapravo sadrže, na primjer, od 200 OK stanje kod, zatim su mogla potencijalno napraviti zlonamjerna stvari kada ne bi smio. Ali ja ne bih brinite previše mnogo o određenoj šifri koji bi mogli izazvati ovo, samo vrsta razumijevanja visoke razine takve stvari. Mislim da je to sve da moramo pokriti. Nevjerojatna. Svatko ima bilo kakvih pitanja o bilo od stvari koje smo pokriveni? Da. PUBLIKA: Dakle, jedna vrsta više logističku pitanje. Je sadržaj uglavnom usmjerena na stvari nakon kviz 1? MARIJA ZLATKOVA: Pa Pitanje je, je sadržaj usmjerena uglavnom na stvari nakon kviz 1? Tako je fokus na poslije kviz 1, s izuzetkom da moramo usredotočiti na stvari u pset5 i puno od strukture podataka da smo pokriveni. A mi ne možemo reći da smo može ignorirati ništa prije da zato što se nadovezuje na to kao dobro. Tako se usredotočiti na to, plus pset5 materijal poput uključujući povezane liste, hrpe, redovi, i sve Hannah je otišao preko. HANNAH Blumberg: Tako je. Da, išli smo preko svih stvari C na samom početku vrlo brzo. No, svakako provjerite to. Vratite se i gledati kviz 0 pregled. Nekoliko više logistički bilješke, Samo, dok mi imamo vašu pažnju. Mi ćemo imati radno vrijeme kako u ponedjeljak i utorak navečer. Oni će biti u MD 119. To je sve na web stranici, tako da ako ne to, ne brinite čuti. MARIJA ZLATKOVA: 8:30 do 11:00. HANNAH Blumberg: Da, 8:30 do 11:00 sati. Mi ćemo biti tamo. Mi ćemo biti tamo odgovoriti na pitanja. To je prilično hladan i zabavno. Vi možete pitati bilo kakva pitanja da imate na kvizu 1. A kviz 1 je na Srijeda, pa sretno. Ako imate bilo kakvih pitanja, možda došli razgovarati s nama ovdje jedan-na-jedan. Cool. Puno hvala. MARIJA ZLATKOVA: Hvala puno, dečki. PUBLIKA: Yay. [PLJESAK]