HANNAH Blumberg: Pozdravljeni vsi. Bomo, da bi začeli le nekaj minut zgodaj saj imamo cel kup materiala priti skozi. Jaz sem Hannah. Sem TF. Maria se bo pridružil nas v samo nekaj minutah. Poučuje poglavje tik pred. Učim poglavje pravico ko, tako da gremo da ostane do uro in pol. Tako kot boste videli tu gor, imamo precej Nekaj ​​teme moramo priti skozi, tako da bomo šli malo hitro. Ampak, če na kateri koli točki smo rekli nekaj prehitro ali pa ne razumejo, vas prosimo, da prekinejo z vprašanji. Želimo, da bi lahko, da bi to pregledati sejo kot koristna za vse vas možnem času. Awesome. Torej, kaj je skok pravico z nekatere teme, ki smo dejansko Zelo, zelo na kratko zajeti za kviz 0 v pregledu zasedanja kviz 0. Torej, začenši s povezanimi seznamov. Tako da samo poskrbite, da imate nekaj osnovno znanje o povezanih seznamih in so udobne delaš nekaterih osnovnih operacij. Torej samo za pregled, ki je povezan Seznami so boljši kot nizi ker lahko rastejo dinamično. Torej imamo to veliko prednost. Videli smo jih uporabili v hash tabel, ko smo Ne vem točno, koliko Stvari bomo želeli vstaviti v našo strukturo podatkov. Na žalost imamo kosov povezano seznam vsega spomina, tako da ne bo nujno sposobni narediti stalen dostop čas za vsak element v povezanem seznamu. Da bi našli Zlasti element smo morali ponoviti vse pot od začetka. Torej, imejte v mislih, da je večina osnovne operacije so omega od 1. Torej, vložek je samo bo trajalo 1. Izbriši bo trajalo n, saj smo iti ga lahko najdete na seznamu. In search bi lahko, v najslabšem primeru, n. Ne moremo narediti nekaj podobnega dvojiško iskalno na povezanem seznamu saj ne moremo preprosto naključno skok na sredini. Cool. Awesome. Malo nizov. To pa ponovno prišel na kvizu 0, zato vas mora biti zelo udobno z njim. Ampak za kupe, vas prosimo, zapomniti skladovnice pladnjev. In to se dogaja, da je prvi noter, zadnji ven. Tako smo kup stvari v plasteh, in nato če smo poskušali vzeti nekaj off-- ki smo jih poimenovali popping off stack-- pridemo off vrhu. In če želimo dati nekaj v plasteh, pravimo, da potiska. Torej, to je vedno dogaja, da se med odraščanjem iz dna kot skladovnice pladnjev. Awesome. Videli smo nizov izvajajo z obema povezanih seznamih in nizi. Če ste izvajanju z nizi, ki jih želite se prepričajte, da bi spremljali tako velikost in zmogljivost. Tako velikost se bo trenutna število stvari v vaših žetonov, ker so zmogljivosti je skupno število stvari, ki jih lahko shranite v dimnika. Cool. Zelo podobno, imamo čakalne vrste. V tem primeru je namesto razmišljanje o Sveženj pladnjev, pomislite črto. To bo prvi noter, prvi ven. Torej, če ste podloga ki gre gor za nekaj v trgovini, upamo, da se oseba prvič v linija se bo najprej pomagal. Namesto, da bi rekel Pritisni in pop, kot smo storili za dimnika, smo pravkar rekel enqueue in dequeue. In še enkrat, če ste izvajanju tega s paleto, moramo slediti ne le velikost in sposobnost, ampak tudi glava, ki je se bo prednji del naše vrste. Cool. Vsa vprašanja v zvezi kaj od tega? Awesome. Premikanje desno skupaj. OK, hash tabele. Tukaj je, kjer se začne zares zanimivo. Torej hash tabela je ena izvedba o asociativni array. Torej v bistvu, kaj se je zgodilo se imamo vse te prispevke, in mi ga dal na hash Funkcija, ki pravi, OK, to je, če v hash tabela spada. Torej najenostavnejši funkcije razpršitve da smo videli, je samo rekel, OK, recimo, želimo postaviti strune v naši hash tabele. In res preprosta ideja lahko bi rekli, v redu, kaj je samo rešiti z Prva črka besede. Tako si lahko ogledate tukaj, vzamemo banana, smo ga s pomočjo funkcije razpršitve, in pravi, hej, da bi morala iti na indeks 1. Tako bomo lahko v bistvu razmišljati o hash miza kot kup različnih vedri. In vsak od teh vedra se dogaja držati glavo povezanega seznama. In v tem povezan seznam je, če bomo lahko dejansko dal različnih kosov podatkov. Torej, potapljanje malo bolj v funkcijo razpršitve, tukaj je primer sem opisano kjer smo samo reči, OK, vzemite prvo črko besede in smo dogaja, da ga rešiti v vedra. Torej verjetno, bo prišlo do 26 vedra, ena za vsako črko abecede. Zakaj ni to super funkcija hash? Kaj je ta non-ideal? Ja. OBČINSTVO: Greš imeti trkov. HANNAH Blumberg: Ja, točno. Ti boš imel trčenja. Torej, to je ena stvar. In bomo govorili o tem, kako smo lahko popraviti trke v samo sekundo. Drug problem s tem zlasti funkcija razpršitve je, da je naša razlikuje vedra se bodo za precej drastično različnih velikosti. Vemo, da obstaja cel kup več besed, ki se začnejo z A kot X, tako da bomo imeli zelo neuravnoteženih vedra v naši hash tabele. Cool. Torej, ja, pojdimo nazaj točka trkov. Kaj naj naredimo, če obstaja trčenja? Imamo nekaj različnih možnosti. Torej ena, zato domnevam, poskušamo postaviti jagodami v naši hash tabelo. In vidimo, oh, smo želeli da ga v indeksu 1, ampak banana že živi tam. Kaj bomo storili? Imamo dve glavni možnosti. Številka ena je, lahko rečemo, OK, ni prostora v indeksu 1, ampak kaj je samo da je videti skozi dokler ne bomo našli drugo odprto mesto. Tako bomo rekli, v redu, dajmo ga dal v mestu 3. To je ena od možnosti. To se imenuje linearna sondiranje. In druga možnost je rekel, v redu, dobro, kaj je samo, da je vsak od teh vedri biti vodje povezanih seznamov. In to je v redu, če obstaja več kot eno stvar v vedro. Mi smo le, da bo ga dodajte na sprednji strani. Torej tu lahko vidite, OK, ko smo vstavi jagodami, smo pravkar vzel banano, vrsta jo potisnil čez malo in vrgel jagodami tam. In to je tudi povsem v redu. To se imenuje ločen veriženje. Si lahko zamislite, da je to nekako kot array glav povezanih seznamov. Vsa vprašanja v zvezi hash mize, hash funkcije? Awesome. Drevesa in poskuša. Tako drevo je kakršno koli strukture podatkov pri katerih obstaja nekakšen hierarhije ali neke vrste uvrstitve na vaše različne predmete. In to bo postala super jasno, ko smo videli zgled. In videli smo poizkusih skupaj s hash tabele, v pset5-- ki je, spet, povsem pošteno igro za to quiz-- kot drugi podatki strukture, da bomo lahko shranjevanje različnih stvari. Pri slovarju, imamo shranjene kup besed. Torej, dajmo si oglejte nekaj dreves. Torej, to je primer drevesa. Ima neko strukturo, da hierarhično strukturo, kjer lahko vidite, da To 1 vozlišče na vrhu ima neke vrste čin nad 2 in 3, ki so nad 4, 5 in 6 in 7, ki so nad 8 in 9. Tako, da je vse, kar pomeni, vloži drevo, tako da lahko samo vrste od predstavljam to v tvoji glavi. Zdaj imamo nekaj bolj specializirane drevesa. Torej, en primer je binarno drevo. In binarno drevo, Ponovno, samo bo podatkovna struktura z neke vrste hierarhija, toda vsaka od vozlišč ima lahko največ dva otroka. To je, kjer je beseda binarni prihaja. Torej je to primer binarnega drevesa. Tako da je manjša kategorija dreves. Sedaj pa se še bolj specifične in govorimo o binarni trees-- binarnem iskanju drevesa, ne. Torej, tukaj je ideja, ne samo vsako vozlišče ima največ dvema otrokoma, vendar pa so vsi otroci na levo se bodo manjši in vsi otroci do Pravica se bo večji. Torej opazili v samo naše binarno drevo, tam je no razmerje med številkami. Toda v našem binarnem iskanju drevo, vidimo, OK, tukaj je 44. In vsaka številka na levi strani 44 je manjši in vse na desni je večji. In da ima na vsakem stopnja drevesa. Torej tukaj, to je manjša od 22 in to je večja od 22. In to je dvojiško iskalno drevo. Zakaj mislimo, da se imenuje binarno iskalno drevo? Kaj algoritem ne vas spominja? OBČINSTVO: Binarni iskanje. HANNAH Blumberg: Binarno iskanje. Ker če iščete Zlasti število v tem drevesu na vsaki točki, si lahko samo knock off polovica drevesa, kar je super. In tako, da se dogaja, da nam nekaj ki je videti zelo podobna binarnega iskanja. Kakšno vprašanje? V redu, v redu. Vredu, poskusi. Najljubša vsakogar. Torej, to je primer, ki smo videli kup v razredu. In še enkrat, to je samo še en Tako, da bomo lahko shranjevanje podatkov. Pri slovarju spet to je samo bo strune. Torej, poglejmo, kaj to dejansko Izgleda na nekoliko nižji ravni. Torej, vzemimo si oglejte na enem vozlišču v trie. In vidimo, OK, tam se dogaja biti logično in vozlišče, kazalec na vozlišče. In vidimo, da je Boolean se imenuje is_word. Torej v bistvu, da je dogaja, da ustrezajo na teh malih trikotnikov, ki pravi, če ste tukaj gotten, ste ugotovili popolno besedo. Vemo, da je "turing" nad Pred vami je beseda, ker le T-U-R ni beseda saj ne vidimo, da je malo delta. In da malo delta, še enkrat, ustreza tej is_word, to Boolean is_word. In potem imamo celo paleto otrok. Torej, na vsaki stopnji, boste imajo posebno vozlišča in to vozlišče kaže na Niz celotne abecede. Tako boste lahko videli, še enkrat, V tem picture-- sem dogaja, da skakanje nazaj in forth-- da ta niz na vrhu ima kup razlikuje vozlišča, ki prihajajo izven nje. Ima 26 ali 27, če hočeš da vključuje dodaten znak. In to nam tudi daje način za shranjevanje naših podatkov na način, da se lahko opazovali da si lahko ogledate do super hitro. Kaj je čas iskanje za trie? OBČINSTVO: [neslišno]. HANNAH Blumberg: Ja. V teoriji, da je stalen čas. To je samo še, da je velikost beseda, ki jo želite pogledati. Tudi če dodamo Zillion več besed za naše Trie, to ne dogaja, da nas bo več določiti če neka beseda v Trie. Tako, da je res lepo. OBČINSTVO: Ste pravkar inicializacijo ta niz? Zamudili ste točko ali dve. Lahko samo govorimo o da za trenutek? HANNAH Blumberg: Seveda, absolutno. Dobro vprašanje. Vprašanje je bilo, smo imajo niz, ki je dogaja, da imajo vozlišča zvezdo v nasprotju s samo vozlišče, kajne? Cool. Torej, tukaj kaj govoriš je naša matrika je samo bo kazalci na druge nizi. Torej, to je to essentially-- vrste počuti kot povezanega seznama, na ta način kjer je vsak od teh otrocih Samo opozarjajo na naslednje vozlišče. In tako, da smo dejansko ugotoviti, hej, OK, smo poudarili, skozi celotno beseda, je ta beseda v slovarju, smo pravkar preverite to is_word. Great vprašanje. Ja. OBČINSTVO: OK. Torej, kaj je bilo runtime za trie? HANNAH Blumberg: Seveda. Torej, runtime za trie za Iskanje se bo konstantna čas. Torej, to je šele tekoč, da bo število črk v besede. To ni odvisna od Velikost slovarju ali velikost strukture podatkov. Torej, tukaj je nekoliko enostavnejši primer. V tem primeru, lahko vidite, da beseda bat je v slovarju in imate zoom, vendar boste nimajo kaj takega živalskem vrtu. Kako bi naredili živalski vrt? Kako dodati zoo za naše slovar, da naši trie? Ja. OBČINSTVO: Naredite is_word velja za [neslišno]. HANNAH Blumberg: Dobro. Torej sva rekli Z-O-O, in potem sva želeli preveriti off to polje, kot dobro. Great. Naj primerjajo zelo na kratko skuša versus hash tabel. Poskuša so res super saj, kot smo rekli, zagotavljajo konstantno časovno iskanje. Toda ogromno škodo je oni humongous. Lahko bi dobili občutek, čeprav jih gledaš na to, da bo trajalo ogromne količine pomnilnika. Torej, oni 'tekoč, da je veliko večji od hash tabele, ampak oni dogaja, da nam veliko hitreje lookup krat. Torej, to je nekako vaš kompromis, kaj vas skrbi, ali je hitrost ali spomin. Vsa vprašanja v zvezi kaj od tega, vse podatkovne C struktur. Lepa. V REDU. Bomo, da se premaknete na malo malo spletnega razvoja z Marijo. MARIA ZLATKOVA: Lovely. V REDU. HANNAH Blumberg: Lahko uporabite svoj laptop. MARIA ZLATKOVA: Lepo. OK kul. Kot gremo zdaj na spletu razvoj, smo se pogovarjali malo o spreminjajočih dovoljenj datotek in imenikov tako, da so lahko dostopne drugim uporabnikom, da svetu in da bomo lahko videli, kako v bistvu jih lahko posredujejo ko smo razviti stvari, kot so spletne strani da smo v glavnem počeli. Tako smo videli ukaz chmod, kar je način sprememba, v bistvu. To je ukaz Linux in se spreminja dovoljenja za dostop datotečnega sistema predmetov. In datotečni sistem objekt samo imenik, datoteka, vse, kar si lahko spremenite dovoljenja. Torej, da bi videli dovoljenja datotek, vpišemo ukaz ls, seznam, -l. In ko smo tipa, da smo ponavadi vidimo nekaj dovoljenja da je videti nekako takole pred imenom imenika. Torej, d se nanaša na imenik. In potem imamo tri triadi, ki v bistvu nanašajo na dovoljenj bodisi uporabnik, skupino ali svetu. Vrste dovoljenj, da smo lahko za te tri skupine ljudi sta bodisi r za branje, w za pisati in x za izvršitev. In lahko imamo tiste, za skupina in svetu, kot tudi. Rafiniran stvar je, da včasih ko smo vnesite ukaz chmod, želimo vnesti nekaj več da sestavljena iz treh bitov. Torej, kar lahko storimo, kot 777 in ki v bistvu skliceval na dodano vrednost vsakega od teh triad ker bi r nanašajo na 4, bi w nanaša na 2, in x opozarja na 1, tako da, ko se seštejejo, vsaka od številk bi prišel na skupno število kumulativno vrednost med 0 in 7. Tako smo lahko tudi 0 za brez dovoljenja sploh. In, da bi nas v bistvu dal dovoljenja za bodisi uporabnika, skupina, ali svet. Vsa vprašanja o tem tako daleč? OBČINSTVO: rekli ste prebrali bilo 4? MARIA ZLATKOVA: Da. OBČINSTVO: [neslišno]. HANNAH Blumberg: Yup. OBČINSTVO: In potem z dodajanjem vse tiste, drugi bi navesti vašo številko. MARIA ZLATKOVA: Ja. Ja. To so veliki vprašanja. Lovely. Dalje smo skočil v HTML in a malo več o spletnem razvoju. Torej HTML samo pomeni, HyperText Markup Language. In da je označevalni jezik, ki je standardni ki je uporabljena za ustvarjanje spletnih strani. To se imenuje označevalni jezik ker je dejansko ne zbirajo. To ne pove, kako nekateri koda smeli izvrši ali kaj podobnega. Samo zarisuje in opisuje, kako je spletna Stran je treba vzpostaviti z vsakim izmed njegovih elementov in kako naj izgledajo na uporabnika. Nekatere oznake HTML, ki smo šli čez, so naslednja. Vseh naših dokumentih HTML Začelo se je z DOCTYPE html. Potem imamo vedno html tag. Imamo glave in telesa. In to je pomembno, da ima HTML tovrstna ugnezdenih strukture ker je zelo jasno. In potem postane jasno, ko smo je treba odpreti in dejansko tesne oznake. In smo vedno morali zapreti oznake, ki smo jih odprli. In tukaj imamo nekatere vrste stvari so pred nami, ki jih želimo imeti. Torej imamo, na primer, naslov CS50. In potem smo dejansko lahko povežete slogi , ki določa, kako bomo stil našo spletno stran. To je CSS. Bomo šli nad njim v naslednjih nekaj diapozitivov, kot dobro. V telesu, smo postavili nekateri razredi in ID-ji. In kot opomnik, še enkrat, ID-ji so edinstveni in razredi se lahko dodeli več predmetov. In to samo pomeni, da moremo uporabiti razrede in ID v drugi structures-- Torej, za Na primer, v CSS datotek ali slog sheets-- se nanašajo na posamezne elemente in v bistvu pravijo, da želimo slog ali oblikovati nek element na nek določen način. In mislimo, da jim jih njihove ID-ji in razredi. In bomo lahko nanašajo tudi na različne stvari z oznakami, kot tudi, ampak ID in razredi nam samo dal nekaj Vsestranskost in kaj posebej smo želeli, da se nanašajo na. Torej samo primer. Mi lahko, še enkrat, v datoteka CSS, kjer smo želite določiti nekatere style-- tako barve, pisave, in stvari, kot that-- moremo opredeliti slog za telo. Tako da bi ga opredeljujejo za celotno telo oznako. Potem pa bomo lahko tudi določite stil za #title. In spet je hashtag nanaša na naše ID in pika nanaša na našem razredu. In potem za .info, smo lahko nastavite tudi nekatere atribute. In spet, ko bomo šli nazaj, smo imeli Razred poklical info in naša ID naslov. In vidimo, da se sklicujemo ki jim jih #title in .info. OBČINSTVO: Bi lahko rekli, lojtra [? me sprejme? ?] MARIA ZLATKOVA: Oprostite? OBČINSTVO: Bi lahko rekli, lojtra [? me sprejme? ?] MARIA ZLATKOVA: hashtag pomeni imenom, zato #title nanaša na kakršenkoli elementov imajo ID imenovano naslov. In nato pika nanaša na razred. Torej Info nanaša na ta element ker ima informacije razred. Yup. OBČINSTVO: Zakaj ste storili jih loči v HTML? Zakaj praviš nekatere stvari, ki so ID-ji in nekatere stvari, ki so razred? MARIA ZLATKOVA: To je samo do you-- HANNAH Blumberg: Ponovite vprašanje. MARIA ZLATKOVA: Oh, oprostite. Zakaj ločimo nekatere elemente kot številke in drugi elementi, kot so razredi? To je samo zato, ker je res pogosto izbira dizajn. To vam daje veliko vsestranskost v tem, da mogli reči hočem to posebno postavko da ima ta ID, ker hočejo narediti veliko stvari z njo, in jaz samo želite definirati slog, nekateri slog ali barva karkoli za to postavko. In način, kako to storiti je samo ji daje ID. In potem, če želim imeti nekaj različnih predmetov ob da namesto dogaja in nastavitev their-- namesto da bi to počeli s tag, ker bi tag nastaviti celico za celotno tag za vsak čas se uporablja, da je oznaka, lahko nastavite razred več predmetov. In potem samo dostop do takega razreda in reči Hočem, da stil tem razredu na ta način. In spet, lahko razred biti več različnih predmetov in ID mora biti edinstvena. Velika vprašanja. Vsa druga vprašanja? OK, super. Še enkrat, to je, kako ti selektorji so navedeni v CSS, s hashtag, s piko ali brez vsega za dodeljevanje slog neke tag, kot telo. In tukaj imamo splošno sintaksa, kako je to storjeno. Če želite ponoviti nekatere najboljše prakse za HTML in CSS, moramo spet zaprite vse oznake HTML, ki jih odpirajo. In kaj vam priporoča, storiti za svoje končne projekte, kot tudi za CS50 finance, je, da bi prepričani, da vse vaše HTML potrdi. In to je naredil z W3 Validator. In potem, kaj smo naredili in kaj priporočamo počne je ločevanje slog, tako CSS od označevalni HTML. Torej vse, kar se nanaša na to, kako vaša stran bo vizualno pogledati in kako se dogaja, da je treba spremeniti bi morala iti v dokumentu CSS. In potem vaša označevalni rekel, kako stvari so v medsebojni povezavi HTML, in da je treba iti v notranjosti vaših dokumentov HTML. Kakšno vprašanje? Mhm. OBČINSTVO: Kaj točno se dogaja o s potrjevanjem stran ko smo validaciji HTML, da [neslišno] ustvaril? MARIA ZLATKOVA: Torej what-- ti misliš. Torej, kaj točno se dogaja o s potrjevanjem stran in zakaj moramo to storiti? V bistvu smo morali storiti, da ker veliko krat, brskalnik, če ne zaprete tag ali nekaj takega, Vaš brskalnik je še vedno dogaja, da render stran in morda še vedno deluje, ampak to je najboljša praksa, da se prepričajte, da da ste spet zapreti vse svoje oznake, da so vse vaše elemente način, da bi morali biti, in v bistvu, da je z konvencij, ki so prednastavljene. To je, še enkrat, samo stvar, ki jo morate učiti, da se delaš, v nasprotju z ob sloppier kodo in stvari, kot je ta. Ja. Oh, oprosti. Mislila sem, da dvignete roko. OBČINSTVO: Ne, bil sem [neslišno]. MARIA ZLATKOVA: OK. OBČINSTVO: Hvala. MARIA ZLATKOVA: Seveda, hvala. Torej še enkrat, se dogaja v tem, kako Podatki se prenesejo in komunikacijski modeli za prenos podatkov. TCP / IP. TCP pomeni le Menjalnik Control Protocol in IP nanaša na internetnem protokolu. In to samo pomeni, da Podatki način dostavi. Če imamo nekaj podatkov, ki mora dostaviti tako you-- naredite zahtevo za določen strežnik. Na primer, ko smo poskusite dostopati cs50.net, naredimo zahtevek strežnik CS50 in smo vidim, da si želimo, da bi dobili ta vrsta informacij. Nato pa temeljijo na tem protokolu za to, kako se izvaja ta informacija, strežnik daje informacije nazaj k nam, odjemalec. In potem smo sposobni, da si ogledate podatki za stran in jo nato uporabite. Torej Hypertext Transfer Protocol je samo še en protokol ali nastavite konvencij, ki določa, kako spletni brskalnik in spletni strežnik morajo sporočiti. In dajanje vse to skupaj, HTTP, še enkrat, samo določa, kako je opredeljena to hypertext s HTML, ki smo se ga delajo, kako je treba dostaviti za vas in kako, da se podatki, ki se dostavijo vam pride do vas. In zato, če vidva ne pozabite iz razreda, smo imeli veliko prošenj in smo imeli veliko sintakse teh zahtev, da smo bo šel čez prav zdaj. Torej še enkrat, ko smo poslali zahtevek na strežnik, moramo oblikujeta par stvari. Torej moramo najti vrsto o zahtevi, da smo nastavitev. In spet imamo, na primer, GET ena vrsta metode da imamo v naši zahtevi. In potem je HTTP / 1.1 le Protokol, ki smo z uporabo trenutno. Večino časa, da se dogaja protokolu, ki ga uporabljamo. Torej, če imate vprašanje kot da je na vašem kvizu. To je konvencijah da imamo tako daleč. Poševnica nazaj se nanaša na kakšno stvari smo prosilka. Potem, naš gostitelj je, na primer, v tem primera, smo poskušali iti v google.com. Torej je ta vrednost za gostitelja. To je vrsta zahtevo da lahko pošlje. In potem tip odziva, ki bi lahko se pošlje še enkrat, na podlagi tega protokola, je spet, HTTP / 1.1. Torej, to je različica HTTP znova. 200 OK je samo koda stanja. In to v redu je le fraza na podlagi tega zakonika stanja. In potem Content-Type Nanaša se na vrsto da se vrne v vas, ki je za to spletno stran, ki jo prejmete in da vaš brskalnik lahko postanejo kasneje. In to je text / html. OBČINSTVO: Kaj 1.1 pomeni? MARIA ZLATKOVA: To je samo Različica of-- oh, kaj 1.1 pomeni? To je le različica, HTTP Različica protokola, ki ga uporabljamo. Great vprašanje. Druga vprašanja? OBČINSTVO: Bi lahko povzamemo Content-Type resnično hitro? MARIA ZLATKOVA: Da je tisto, kar strežnik. tip information-- kaj je Vrsta vsebine bilo vprašanja. Tako da je bila vrsta informacije, ki jih boste dobili nazaj od strežnika, na vrsto Podatki, ki jih brskalnik lahko potem render, ki ga uporabljate. OBČINSTVO: Je to tisto, kar ta Protokol je povedal, da naredim? MARIA ZLATKOVA: Oprostite? OBČINSTVO: Je to kaj protokol rečem? MARIA ZLATKOVA: The protocol-- OBČINSTVO: --what Content-Type je ali what-- MARIA ZLATKOVA: Protokol temelji on-- kaj je protokol ti povem? To je samo način da te informacije je bilo podano, da vas na na kakšno protokola je bil ta podatek dobil pripeljali nazaj k tebi. Ali to smisla vrste? HANNAH Blumberg: You lahko zamislite protokola kot a-- Mislim, profesor Malan ga je opisal v razredu, kot je nekako kot a-- je všeč ekvivalent človeškega Vod. Reči, kot so, hej, jaz sem zahtevo in jaz vedo, kako ravnati HTTP verzije 1.1. In potem strežnik pravi, oh, OK, I-- in tako obstaja. Vem tudi, kako ravnati s HTTP / 1.1. In bom dal ste varnostno nekaj vsebine. V tem primeru, da se dogaja biti tipa text / html. Torej, to je nekako le način od njih za communicating-- MARIA ZLATKOVA: To je samo potrjuje, da ste tako po isti protokol in da oba naročnik in server-- tako Vaš brskalnik in server-- nekako vem, kaj ste govoriš in imajo konvencija za prenos v podatkih. OBČINSTVO: Torej Content-Type part-- Content-Type besedilo / html-- da je ločen del istega sporočila? Ali je to del, recimo, 200? Ali 200 jim povem, da ali is-- MARIA ZLATKOVA: 200 pravi, da je šlo vse v redu. In potem tip vsebina je neke vrste ločen del istega sporočila, in pravijo, da stvar, ki sem Vrnjeno je ta tip text / html. To je samo daje več informacij. Imate kaj za dodati? V REDU. Vsa ostala vprašanja o tem? Awesome. Torej nekatere druge HTTP statusi, ki bi lahko dobili poleg 200 OK, tisti, ki smo videli morda možnosti je veliko, so 403 in 404. Torej 404, če bi poskušali Dostop do nekaj, kar ne obstaja. Tako, na primer, v vašem CS50 Finance psets, če bi bili vi upodabljanje quote.html in niste imeli te datoteke, ampak ste imeli quote.php, da bi povzročila 404 Not Found ker je datoteka morda ne obstaja. Za 403 prepovedano, da se nanaša na dovoljenja. Torej, če je nekaj datoteka ni berljiva z svet, boste morda dobili 403 vrnil. Nekateri drugi, da boste morda get-- 301, preselil trajno; 302, ugotovljeno; 304, spremeniti; 400, Bad Request; in nato Notranja napaka strežnika za 500 in 503, storitev ni na voljo. Da. OBČINSTVO: Bomo po pričakovanjih zapomniti vse te statuse? MARIA ZLATKOVA: Jaz bi imel jim na vaš goljufija stanja. [Smeh] OBČINSTVO: Ali smo pričakovali, da se vem, kaj sproži vsak eno? MARIA ZLATKOVA: So? HANNAH Blumberg: Za tiste, ki smo jih teči into-- Torej vprašanje was-- MARIA ZLATKOVA: Ali se pričakuje, da vem, kaj vsak od teh statusa Kode se lahko sprožijo? Torej za tiste, ki smo jih uporabljajo in tekel v, bi rekel, ja. Zato smo zagotovo videli 200 OK in predaval v psets. Smo videli 403, 404. Za druge narave? HANNAH Blumberg: Jaz bi pravijo 500 zdi pošteno igro. MARIA ZLATKOVA: 500, ja. HANNAH Blumberg: Ja. Samo imajo splošen občutek o tem, kaj jih povzroča. In tudi samo z njimi Imena, lahko nekako kot da izobraženi ugibati kot za kaj jih dejansko povzročil. Na primer, premaknite trajno, verjetno datoteka se je preselila za stalno. OBČINSTVO: Ampak na prejšnji izpit, je bil tako kako si nas pričakujejo, da bodo odgovorili na to? HANNAH Blumberg: That bil vreden nič točk. Vprašanje o 418 na čajnik je tehnično stanje HTTP, vendar je bilo vredno nič točk. Očitno je, da nisi Pričakuje se, da jih poznam. OBČINSTVO: Je to pravi ena? HANNAH Blumberg: To je resnična ena, vendar to ne pomeni ničesar. To je samo šala. Internet ljudje so smešni. MARIA ZLATKOVA: Veliko vprašanj, fantje. Vsa druga vprašanja? OBČINSTVO: Kaj je notranja napaka strežnika? MARIA ZLATKOVA: notranji Napaka strežnika samo pomeni, da ste bili ne morejo komunicirati s strežnikom za nekega razloga. Torej, to ni nujno nekaj, kar mora storiti s stranko ali kaj podobnega. Ne vem, o vsakem konkretnem primeru da smo šli čez razložiti, ampak ja. HANNAH Blumberg: Seveda. Tako, na primer, kot dovolimo rekli ste delali Mashup in Google strežnik znižale za nekatere Razlog, izpada elektrike, recimo. Da bi notranji strežnik napaka ali neka vam of-- všeč ne bi dobil odgovor nazaj. MARIA ZLATKOVA: Ja. To je samo, ko ste ne morejo komunicirati s strežnikom za neznanega razloga zato ker o gre navzdol ali iz kakšnega drugega razloga. Torej, skakanje v PHP. PHP, za razliko od HTML, je programski jezik. In smo ga začeli uporabljati, ker je zelo koristno za razvoj spletnih strani. Najprej smo ga uporabili v CS50 finance. In to je v bistvu nam pomaga prinesti skupaj to markup, oblikovanje, in kako smo dejansko uporabili podatke prikazati stvari na spletni strani. Torej PHP pomeni sam PHP Hypertext Preprocessor, tako da je rekurzivna backnorym sama. In odpiranje oznake za PHP smo leva in desno puščice z vprašanjem znamk in php. Torej smo že videli kup njej. Zdaj smo le, da bo šel čez nekaj osnovnih stvari o njej. Torej s PHP, spremenljivke imena začnejo z znak za dolar. Mi ne določite, še enkrat, spremenljivka tipa anymore. Tako kot smo to storili s C, nam ni treba storiti. Mi lahko naredimo kup razlikuje stvari s spremenljivkami. Mi jih lahko skupaj da jih concatenating z dot zapis, ki nismo mogli storiti v C znova. Spet smo imeli malo več vsestranskost s PHP v smislu spremenljivk. Še enkrat, ne bomo imeli glavno funkcijo. In PHP razlaga v nasprotju z zbrati, Torej, kako mi je, da za datoteke C, ne bomo morali storiti, da za PHP. Ampak, tako da jeziku se vodijo po sebi, je razlaga. In potem ohlapno tipkal samo pomeni, da smo ne bi bilo treba določiti spremenljivke tip in spremenljivka vrste se razume na runtime. OBČINSTVO: Ampak kaj ste pomeni ga dot spoj? MARIA ZLATKOVA: Seveda. Ko smo želeli postaviti stvari together-- tako da, če bomo imeli nekaj spremenljivko, ki imela vrednost 3 in smo imeli drugo spremenljivka, ki je imela vrednost niza, lahko bi dal spremenljivke skupaj z uvedbo piko med njimi in jih združite. Ali pa bi lahko ustvarili spremenljivka imenuje ime in ga skupaj s povezovanjem dveh nizov. Torej, če smo imeli niz v dvojni quotes in mi dal piko po njej, nato pa smo imeli še en niz, da bi ustvarili niz v celoti. OBČINSTVO: OK. MARIA LATVIJA: Je bilo to jasno? OBČINSTVO: Ja. MARIA ZLATKOVA: OK. Da. OBČINSTVO: Ko rečeš razlagati namesto zbrati, govoriš Nimate morajo biti kot posebno ko gre za PHP primerjavi C? MARIA ZLATKOVA: Ko rečemo, razlagati tako, da nasprotuje zbrati, kaj mislimo? Torej to pomeni, da ne potrebujemo izvedljive datoteke teči PHP. To pomeni, da ta deluje kot gre. Ali to smiselno? Malo več. HANNAH Blumberg: Torej si lahko zamislite tolmača kot drug program, ki je odgovoren za odhod po vrsticah preko PHP in dejansko izvršitve, v nasprotju da je vse pripravo navzdol binarno. To ne dejansko pomeni nič o tem, kako specifični moramo biti. Mi še vedno morali biti natančni, in ne pozabite podpičjem in se prepričajte, imate znak za dolar, in take stvari. Dobro vprašanje. MARIA ZLATKOVA: Ja. Torej, po vrsticah, kot nasprotuje z datotekami C, moramo narediti celotno konč preden lahko dejansko vodijo. To je glavna razlika. Ampak še enkrat, ne moremo res manj natančna. Torej nizi v PHP predstavljajo dejansko naloži zemljevid. Torej nizi pridruženih vrednostmi do ključev. Dva načina, da razglasi matrika, ki temelji na tej sintaksi, smo lahko bolj eksplicitno V rekoč imamo niz in imamo to key1, ki se preslika to value1, key2 ki preslika VALUE2. Ali mi lahko samo ustvariti niz ki vsebuje sama vrednosti in potem tipke so razumeti na način. Vsa vprašanja o tem? Publika: Kaj bi ključe v drugem primeru? 0, 1, 2, 3? MARIA ZLATKOVA: Na primer, to je samo ključi v to ne nujno Naredi spremembo. Samo določite, kako si lahko uporablja vrednosti znotraj njega. Torej, če bomo imeli foreach zanke v PHP, ki bi nam omogočajo, da gredo skozi vseh vrednot, moremo iti skozi vseh vrednot, čeprav smo imeli ali še ni definirana poseben ključ v mesto je Prejšnja sintaksa. Tako da tudi s to vrsto od array, smo lahko še vedno imajo foreach zanke ki gre skozi vsako vrednosti v ključu v matriki. Torej sintakso za foreach zanka, začnemo s paleto. Ta $ arr spremenljivka je naša dejanska matrika da smo definirali v prejšnjem stekelce kot vrednost, ki dobesedno gre skozi vsako od vrednosti, ne glede na to, ali smo imeli ključ ali ne. In potem bomo lahko storite z nekaj vrednost notranjost foreach zanke. Torej še enkrat, če bi imeli niz kot je ta tukaj created-- tako da imamo ključ foo in vrednosti bar, ključni Baz in vrednost qux-- lahko imamo foreach zanke, ki gre skozi paleto kot ključna vrednota nato pa naredite nekaj s ključem in / ali vrednost. Ampak mi ni nujno vedno imeti foreach zanke, ki gre skozi paleto kot ključnem zemljevidu na vrednosti. Lahko gremo skozi foreach zanke matrika kot vrednost. HANNAH Blumberg: In mislim, to-- je bilo vaše vprašanje, kaj je implicitni indeks? OBČINSTVO: Kinda. MARIA ZLATKOVA: Oh. HANNAH Blumberg: Ja, ja. Torej v bistvu, če ne določite ključno, da se dogaja, da bo 01. MARIA ZLATKOVA: Ja. Tako kot pri C, to je nič indeksirane, če ne določite ključ. OBČINSTVO: Žal mi je. Lahko poskusite gledano malo glasneje? Imam malo Težava vse zaslišanje. MARIA ZLATKOVA: Tako mi je žal. Ja seveda. Torej hočeš, da me iti čez to še enkrat? Ali je this-- OBČINSTVO: Torej, glede na predhodno slide-- če si lahko samo vrniti za eno sekundo. MARIA ZLATKOVA: Seveda, žal. OBČINSTVO: Torej drugi Niz tukaj ne Zdi se, da imajo vrednosti vpisati, nekako [? vzročno zvezo. ?] MARIA ZLATKOVA: Dobro, dobro. OBČINSTVO: Torej, kako to delo ko ste rekli, da je vse ali nič. Za mene, ki je videti kot [£ foo?] že. MARIA ZLATKOVA: Ja, ja. Torej še enkrat, to je naloži zemljevid v tem smislu da so tam razume, na primer, indeksi Tukaj lahko razumemo kot 0, 1, 2, 3. Še enkrat, to je tistih, ki imajo indeksi je naš ekvivalent imajo ključe preslikanih na vrednosti. Torej, če je naš ključni bil 0-- žal. HANNAH Blumberg: Ne, tam je kreda tukaj. To je pravzaprav res lepo. MARIA ZLATKOVA: To je super. V REDU. Torej še enkrat, bi $ arr 0 biti tipko za vrednost 1. 0 bi ključ za vrednost 1. OBČINSTVO: Žal mi je. To je neviden. HANNAH Blumberg: V redu, nevermind. Kreda je bila slaba ideja. Vzamem nazaj. Si lahko zamislite ključev kot 0 kart z vrednostjo 1. MARIA ZLATKOVA: Ja. To je torej 0, to je 1, 2, 3. Ti so lahko vaši ključi. Lahko misliš o njih as-- ja. Torej, namesto da eksplicitne ključi, oni nekako razumeti kot indeksi se začne pri 0. Kreda ni pomagalo. Ja. OBČINSTVO: Za foreach zanke, če bi želeli, da se prikaže kot vrednost, Treba bi bilo samo avtomatsko indeks na 0? MARIA ZLATKOVA: Ja. Bilo bi šel skozi vsako od vrednosti. OBČINSTVO: [neslišno] kot 0 ali bi to pač 0? MARIA ZLATKOVA: Vi bi morali reči kot znak za dolar in potem nekateri ime spremenljivke, vrednost. OBČINSTVO: [neslišno]. MARIA ZLATKOVA: Oprostite? OBČINSTVO: Žal mi je, da sem samo poskušam zapomniti. Kako bi vam, da če lahko to storite avtomatično indeksiranje je samo 0 od? MARIA ZLATKOVA: Torej, kako bi to naredil Če niste imeli posebne ključne imena? OBČINSTVO: Ja. MARIA ZLATKOVA: Vi bi samo define-- samo reči sebe kot neke imenom. Torej v vašem psets, vidva morda zapomni si foreach $ vrstico kot $ vrstice, smo Sebe ustvarili to $ vrstico rek želimo, da gredo skozi vrsto kot $ vrstic. Čeprav nismo imeli to izrecno $ vrstice opredeljena, smo lahko samo pojdi in pravijo, je to lahko naša ključna, in samo skozi vsako od vrednosti. OBČINSTVO: Torej je vrednost novo spremenljivko smo ustvariti za shranjevanje [neslišno]? MARIA ZLATKOVA: Torej to ni po sebi novo spremenljivko. To je spremenljivka, ki se nanaša na znotraj polja vsako od njih. HANNAH Blumberg: To je novo ime spremenljivke. MARIA ZLATKOVA: Ja, to je nova spremenljivka ime, vendar to ni inherently-- ja. To je samo novo spremenljivko da lahko to storite. Torej, kako bomo naredili $ vrstici kot $ vrstice, vrstice je novo ime spremenljivke, ki smo lahko ustvarite v našem foreach zanke. To ni nujno, da preexist pred tem. OBČINSTVO: Lahko greš skozi logika za vsako uporabo primer tam? MARIA ZLATKOVA: Mhm. Oh, oprosti. Tukaj je primer. Sure. Torej za vsak array-- tako to pomeni, da gredo v ta sklop kot ključ value--, ki se dogaja iti skozi ta niz in prvič pojdi in dobili foo je Ključ foo in bar vrednost. In potem na drugi ponovitvi zanke, to se dogaja, da gredo skozi in sprejeti ključ baz in qux vrednost. In potem lahko to storite z nekaj enega od njiju ali oba. OBČINSTVO: Torej ideja ima ključno točko na vrednost, Kaj boste na koncu dostopu? MARIA ZLATKOVA: Kaj je ideja imajo ključno kazalno ceniti? To je samo še en dogovor, drugo pot skozi polja in je omogočen dostop bodisi ključ ali vrednost ali oboje, in jih uporabljati. OBČINSTVO: Kakšna je vloga za odredi, da se foreach teče v? Torej, če smo bili, da dodate elementi matrike kasneje bi tisti, biti prvi, poklical v foreach array, ali bi bilo kasneje? MARIA ZLATKOVA: Torej, kaj je sklep, da se foreach zanka gre skozi niz v? Gre skozi prvo element za zadnji element, na zadnji dodani element. Če dodate elemente kasneje, bi jih se accessed-- prvi elementi bi je dostopna kot prvi elementi matrike, in potem bi šel skozi vsako od elementi, kot neke vrste ordered-- ni urejeno, vendar je način, da so bili dani v array. OBČINSTVO: Torej novi elementi dodajo kasneje? Torej oni added-- oni biti Slednjih v [? ponovitev. ?] MARIA ZLATKOVA: Novi elementi can-- v bistvu, ko se novi elementi, se doda na koncu polja? OBČINSTVO: Ja. MARIA ZLATKOVA: Verjamem, da. Da. In potem s svojim foreach zanke, po tem, ko ste dodali nove elemente in greš skozi njih, novi elementi bi biti accessed-- novim elementom, če je Dodana zadnja, bi bilo mogoče dostopati zadnji. OBČINSTVO: Lahko daš primer nečesa, kar bi [neslišno] z nečim z vrednostjo kot [neslišno] ali vrednosti, všeč, kako boš formatirati to? MARIA ZLATKOVA: Seveda. Lahko dam primer, kaj mi bi naredil z vrednostjo? Torej, kaj vidva bi biti seznanjeni z je, da smo šli skozi niz in v bistvu tiskani vsakega izmed elementov, na primer kot del urejen seznam, ali nekaj, kar. Ali to smisel ali pa želimo to-- OBČINSTVO: Ali lahko natisnete te vrednote ven? MARIA ZLATKOVA: Ja, smo lahko natisnete in nato v bistvu $ vrednost, saj na da je posebna vrednost, bi morali biti tiskanje vrednost znotraj njega. Torej, če smo bili na naši prvi ponovitvi nje in natisnili smo $ vrednost, mi bi se bar tiskanje. OBČINSTVO: Ali obstajajo tudi za zanke v PHP ali samo foreach zanke? MARIA ZLATKOVA: Obstaja tudi zanke v PHP. In njihova logika je predvsem enako kot tisto, kar ste bili vajeni. OBČINSTVO: Torej je njegova vrednost null. MARIA ZLATKOVA: To je všeč isto. Ja. OBČINSTVO: Jaz sem le, da bo vprašal. Torej, ko razglasi matrika, ki jih ne potrebujete povedati, kaj velikost, da se dogaja, da biti, kar pomeni, da si lahko samo dodajanje in odnese elementov [neslišno]. MARIA ZLATKOVA: Yup. Yup. Točno tako. Ko izjavljamo matriko, smo ni treba povedati, kaj velikost je, tako da bomo lahko le dodamo elemente na pozneje, kot dobro. Več vprašanj? Torej prinaša PHP in HTML skupaj, kar smo seen-- dobro, na primer, v tem primeru imamo HTML obliko, ki ima vnosno polje. In polje za vnos je le ime in potem ima Oddajte gumb. In ko pritisnete Potrdi Gumb, v našem hello.php datoteki, ker metoda za obliko je dobili smo lahko dostopate kar je v imenu s tem dobili globalno spremenljivko, ki is-- skladnjo za to je $ _GET. In potem bomo lahko dostopate ne glede na Uporabnik vhod znotraj tega obrazca za imenom z navedbo imena tem področju. Vsa druga vprašanja ali katerega koli Vprašanja o tem konkretnem primeru? OBČINSTVO: Kje je PHP? MARIA ZLATKOVA: Tukaj. Torej je to naša otvoritev tag za PHP. OBČINSTVO: Oh, v redu. MARIA ZLATKOVA: Da. HANNAH Blumberg:? = Je okrajšava za to je PHP in samo odmev. OBČINSTVO: Oh. MARIA ZLATKOVA: Ja, žal. Imam treba, da je jasno. HANNAH Blumberg: Print. MARIA ZLATKOVA: To je samo funkcija ki nam omogoča, da natisnete nekaj. Great vprašanje. Torej going-- ja. OBČINSTVO: Je tam dogaja, da je precej malo ročno kodiranje PHP in HTML na kvizu 1? MARIA ZLATKOVA: Ne more biti Poštena vrednost razlage PHP in HTML, ni nujno, da kot ogromne količine kodiranja, čeprav boste morda morali napisati foreach zanke, čeprav za zanke. Koli izmed zank, da smo zajemajo tukaj je pošteno igro. In to je v glavnem to. HANNAH Blumberg: Jaz bi bil pripravljen. Na enak način, da smo vas prosili, da napišite kup funkcij C na kvizu 0, Jaz bi bila pripravljena storiti Enako v PHP in JavaScript. MARIA ZLATKOVA: Ja. HANNAH Blumberg: Jaz bi rekel, little--, kot da smo ne dogaja, da napišete ogromen HTML stran samo zato, ker da je malo dolgočasno, vendar boste morda morali dele. To je povsem pošteno igro. Tako kot majhen HTML strani, popolnoma pravičen. OBČINSTVO: OK. Kaj pa v JavaScriptu, kot tudi? HANNAH Blumberg: Ja. Pošteno igro Javascript. MARIA ZLATKOVA: Ja. To je povsem pošteno igro. HANNAH Blumberg: Bomo dobili tistemu v kot 10 minut. MARIA ZLATKOVA: SQL, še enkrat, Structured Query Language. To v bistvu nam omogoča upravljanje podatkov v upravljanje relacijskih baz podatkov sistem. To samo v bistvu pomeni, da imamo nekje za shranjevanje nekaj podatkov, ki bi lahko želimo uporabite na spletni strani ali v neki drugi obliki. In potem imamo poizvedbe, da bi dobili informacije iz naše podatkovne baze, ali vstaviti podatke v njih. Veliko skupnega ones-- UPDATE, INSERT SELECT in DELETE. Torej za UPDATE, to je sintaksa za posodobitev podatkov v podatkovni bazi. Posodabljanje to tabelo imenovano miza z besedami SET, moremo postaviti nekaj vrednosti v vseh vrstice do enakega nekaj drugega. Tako bomo lahko določite tudi nekatere posebne vnosov, ki jih želimo spremeniti in da se lahko uporabi, kadar. In mi lahko določite, da želimo le, da se spremeniti nekaj vrstic, kjer je hiša za, če bi imeli tabelo študentov in vsi študenti imeli hišo, tako da bi spremenil le nekatere vrednote kjer hiša enaka Kožar, npr. Za INSERT, lahko vstavite določene vrednosti v tabeli. Torej INSERT INTO mizo, nato se vrednosti in nato v oklepaju smo določiti katere vrednosti želite vstaviti. Torej INSERT INTO mizo, COL1 in col2, je vrednost VAL1 in VAL2. Torej je to v bistvu vstavi novo vrstico v tabelo, ki vsebuje vrednost 1 in 2 v stolpcih 1 in 2. In potem smo šli čez hiter primer, kako to izgleda kot v naši bazi podatkov malo. Ampak to končno vprašanje, ki sem Mislimo, da smo šli čez, SELECT, samo nam omogoča, tako da izbira podatke iz tabele da ga morda uporabili kasneje. In način, kako to storiti, je, da smo samo ga shranite v neki spremenljivki. In potem bomo lahko morebiti ponovno uporabiti. Torej SELECT zvezda pomeni izberite vse. To je samo okrajšava za izbiro vse. FROM tabela WHERE, iščemo za nekatere posebne pogoje, tako da kadar je v stolpcu enaka nekaj, npr. Če bomo samo hotel izberi vse iz tabele, to samo izbere vse stolpce in vse vrstice iz tabele. In potem DELETE FROM tabela KJE col enak nekaj, to samo izbriše nekatere veslati iz naše tabele kjer imamo nekatere posebne pogoje. V tem primeru pogoji so stolpec enak nekaj. Torej, samo na hitro primer tega. Če imamo to mizo tukaj in mi jo vstavite v tabeli, te vrednosti, da vstavite novo vrstico. In če bomo imeli avto-prirastek, bi to Samo prirastek našo ID od 0 do 1 do 2. Če smo izbrali vse od študentov je, samo vrne vsa področja in vse vrstice. Kadar leto večja ali enako 2016 da bi samo vrnitev Hannah in jaz. In potem, če smo le izbrana leto id in leto IZ študentov kjer je hiša Cabot House, ki bi spet vrne Hannah in jaz. Potem, če smo izbrisani iz študentov kjer je ime enako Rob, da izbrišete celotno vrstico. In potem, če smo nastavite ime, UPDATE študente SET ime enak Daven KJE hiša je enaka Cabot House, ki je šel na te vrstice in nato posodobite ime. In potem še nekaj podatkov SQL tipi so CHAR, VARCHAR, INT, in FLOAT. To so pošteno igro. Jaz bi šel znova in poskrbite, da boste vedeli, in jih imajo na vaši goljufija stanja, kaj vsak od teh likov so bili uporabljeni za, kaj ste jih uporabljali na vaše psets, in se prepričajte, da ste seznanjeni in udobno morali izbrati iz različnih podatkovnih tipov v vašem pset. Da. OBČINSTVO: Kaj je bila ta tabela shranjena? Ja, če je ta tabela shranjena? MARIA ZLATKOVA: No, zdaj, to ni shranjeno. Kakorkoli že, če je ta tabela shranjena? Vendar se lahko shranijo v podatkovni bazi SQL. OBČINSTVO: In kje je zbirka podatkov SQL? V računalniku, na spletu nekje, strežnik? MARIA ZLATKOVA: To je lahko število različnih stvari. HANNAH Blumberg: Smo povezan z SQL tabele predvsem s phpMyAdmin. Tako smo lahko vprašali strežnik da jih shranite za nas. Lahko jih shranite na lastnem računalniku. MARIA ZLATKOVA: To je samo odvisno od kako želite, da to storite sami. Vendar smo bili shranjevanje njih, kot je omenjeno Hannah, na phpMyAdmin, ki je na spletu. In potem je pot, ki jih uporabljamo PHP in SQL, smo ga shranite v neki spremenljivki kaj smo poizveduje za. Torej, če bomo Izberite vse iz zgodovine kjer USER_ID enaka Session ID, da bi izbrali vse vrstice za določeno osebo, ki zabeležita iz zgodovine miza in jih razvrstite v vrste. Kul stvar, ki vedo da funkciji poizvedbe CS50 je ščiti pred tags SQL injection. To samo pomeni, da omogoča, da vhod, ki je vpisana pravilna in da je oseba, ki vstopa v vložek ne poskuša vhod nekateri zlonamerno koda bodisi padec naše mize ali izbrišete vse Notranjost naši bazi podatkov. Hiter pregled Model View Controller model to je samo način organiziranja in razmišljam o zakoniku. To je spet, design paradigma. Kaj to pomeni, da smo can-- in to je dobra praksa za ločevanje različnih delov naše kodo in kaj so nadzor v teh treh paradigem. Torej, naš pogled je najbolj pogosto naša Predloge, naša postavitev, način da smo si zastavili, kako naša koda izgleda. To je predvsem naša CSS datoteke in pot da smo opredelili zasnovo našega kodeksa, v bistvu. Naš krmilnik je večinoma kaj smo počeli z PHP datotek. Torej še enkrat, ki delajo z Podatki, ki smo in opredeljuje, kako da podatki se uporabljajo, nato pa mimo, da so informacije bodisi na pogled ali modelu. In model, tako da smo jih bila uporabljate, je bila naša baza podatkov, Torej, kje je naše informacije shranjeni tako da ima nekje za življenje, s katero koli od kodo, ki se nanaša na način da bomo dobili te informacije ali Tako, da smo te podatke posodobiti. Torej v modelu MVC, HTTP zahtevki se pošljejo na spletni strežnik. Nato interpretira krmilnik zahteva od uporabnika in potem potrdi vnos uporabnika. To je neobvezno, da imamo upravljavec sporoči z modelom, tako da nekaj kot naši podatkovni bazi ali kakšno drugo funkcionalnost ki bo posredovala informacije. In potem končno, regulator prehaja informacije na pogled tako da je lahko opravljene in da je lahko postanejo vidni za vse osebe, dostop do spletne strani. Kakšno vprašanje? Awesome. Torej še enkrat, model, njena funkcija, še enkrat, je obstojna shranjevanje podatkov, vodenje in organiziranje podatkov. In tisto, kar smo videli, da če je zbirka podatkov MySQL in vse podatkovne datoteke, ki se lahko uporabljajo. Poglej, predstavitev informacij uporabnik, IU ali uporabniški vmesnik. In primer tega je HTML. In potem bomo morda imeli minimalno PHP. Torej za zanko, ki se ponovi več podatkov, ki se natisne je del pogleda, kakor nasprotju s krmilnikom. In potem je veliko naših PHP datotek spadajo v kategorijo krmilnika. Samo ročaji uporabniške zahteve in dobi podatke od modela. Skakanje v dokumentu Object Model, to samo se nanaša na način HTML dokumenti so organizirani. In oni so organizirana v drevo objekt, ki ima hierarhijo. Torej, če imamo dostop do [neslišno] predstavitev dokumenta, lahko delamo z dokumentom, kot smo manipulirati predmete v bistvu. In da bi to malo bolj jasno, ko imamo veliko naših različne oznake odzvati na različne poti v našem drevesu. In nato za ta primer, še izhodiščni dokument vozlišče. Imamo torej, naša HTML vozlišče da razdeli v glavi in ​​telesu. Vodja ima naziv in nato naslov vsebuje zdravo, svet. In naše telo samo vsebuje zdravo, svet kot dobro. Tako da kakršna koli vprašanja o katero koli od stvari, ki jih doslej zajete? In če ne, bo Hannah prevzame z JavaScriptom. Awesome. HANNAH Blumberg: OK, kul. Če se kaj zgodi z PHP ali HTML, ali katero od stvari Maria pokriva, smo lahko vedno ustavite. Delamo bolje znova, tako super. In samo, da se vrnete Res hitro k temu, če pogledaš na vsak Preteklo leto je izpit, to prihaja do either-- tukaj nekaj HTML, da ta diagram. Ali tukaj je ta diagram, da so nekateri HTML, tako da zagotovo prakso, ki. In potem je to ena zagotovljena Vprašanje, ki ga lahko dobite v redu. Cool. Torej, kaj je govoril o JavaScriptu in kako se je malo razlikuje od jezikov, kot so PHP in C, dveh jezikov, ki jih prej videla. Torej številka ena, je to ohlapno tipkal. To je, kot so PHP, vendar za razliko od C To je razlaga jezik. Še enkrat, da je kot PHP, za razliko od C in to se dogaja, da nam omogočajo, da ga use-- Deluje zelo lepo s spletnih strani. To se dogaja, da nam omogočajo, da manipulira vsebina in kako izgleda in kaj počne. Bomo videli malo Ajax. To nam omogoča, da komunicirajo asinhrono z različnih strežnikih in dobili informacije. In to je stvar, ki je res loči JavaScript od PHP in C je, da je na strani odjemalca. Oba PHP in C sta običajno na strani strežnika. Za večino del in skoraj v celoti, kar smo videli, vsaj v ta razred, JavaScript deluje na strani odjemalca, kar pomeni, da brskalnik je dejansko odgovoren za njeno vodenje. In to pomeni, da ne bomo potrebujejo za interakcijo s strežnikom. Torej to pomeni, da je lahko veliko hitreje ker je dejansko samo to je Chrome, je Safari, je Firefox, kar vas uporabiti dejansko teče vaše JavaScript. OBČINSTVO: Kaj asinhrona pomeni? HANNAH Blumberg: Ah, kaj ne asinhrono pomeni? Great vprašanje. Asinhrono means-- dobro, vsebnost v kateri bomo uporabili, da je v redu, smo Ustvarjamo spletne strani in smo morali dobiti nekaj informacij. Torej s primerom Mashup, nekatere informacije, ki bi lahko želimo je članek naslovov. Zdaj smo could-- eno možnost je, da to storite sinhrono in to pomeni, da Oglejmo ustavi, pojdi članek, dobili članka nazaj, in potem render, ampak da bi bilo res počasi. Da bi bila slaba uporabniška izkušnja ker bi se samo sedel tam čaka nekaj, da se odzove. Asinhrono pomeni, da bomo še naprej bo o našem poslovanju, upodabljanje strani, in vam bomo poslali off zahtevo to je nekako dogaja, da dogajajo v ozadju. Mislim, da smo uporabili primer v predavanje kliče Rob in rekel, hej, lahko to pogledate za mene in priti nazaj k meni, v nasprotju s samo zame čakanje na telefonu. Torej asinhrono pomeni, da se zgodi v ozadju stran od nas vzporedno. Great vprašanje. Karkoli drugega? Great. Bomo skoči veliko več v asinhroni prijave z Ajax. OBČINSTVO: Ali JavaScript-- kjer ne pade z vzorcem-pogled-krmilnik? HANNAH Blumberg: Velika vprašanje. Kje JavaScript padec z vzorcem-pogled-krmilnik? Hm. Mislim, da lahko fall-- tako da ne bomo ponavadi radi Mljackati v to paradigma, ampak mislim, da bi rekel, OK, tako da je JavaScript dejansko se dogaja, da se omogoči nam za zbiranje podatkov, razlago podatkov, dejansko ne Pomembnih stvari s podatki. Na ta način, da je zelo nadzor podobno. Ampak to tudi dogaja, da nam omogočajo, da prikazati stvari in tiskanja stvari. Na ta način, da je zelo pogled podobno. Ja. Torej, to je nekako kot PHP v kjer je mogoče nekako biti oboje. Dobro vprašanje. Karkoli drugega? V redu, super. Premikanje desno skupaj. Torej, poglejmo primer kako lahko uporabimo JavaScript v enem od naših spletnih programov. Tako da bom to upoštevati index.html s kupom HTML. In stvar, ki sem vam želim osredotočiti na ta scenarij tag. In to pravi, OK, želim teči nekaj JavaScript in tukaj je, kjer živi. Živi v hello.js. In zelo podobno kot CSS, smo lahko dal JavaScript v HTML. Zakaj bi mi želeli izločiti? Ja. OBČINSTVO: Lažje reportaža? HANNAH Blumberg: Ja. To je lažje za uporabo po vsej različnih spletnih straneh. To ohranja stvari čistejši. To je samo dobra praksa. Awesome. Dober odgovor. Tako dober, da se to dogaja biti naš index.html. In potem je tukaj dol je Nostra mali JavaScript datotek. In vse to pravi, je opozorilo Pozdravljen, svet. Torej, kaj se zgodi, ko ta stran renders-- tako da če greš v kakršni koli spletno stran to is-- vse, kar se bo zgodilo se dogaja, da reči, OK, sem tekoč teči to kodo JavaScript. In to kodo JavaScript Samo pravi alert Pozdravljen, svet. Torej bom dobil to prijazno malo pop-up. Cool? To je nekako kot naš prvi JavaScript programa, naše Pozdravljen, svet. Oglejmo si malo več o tem, kaj sintaksa JavaScript izgleda. In še posebej, kaj je to primerjati z C in PHP, ki smo ga videli prej. V JavaScript, da bomo imeli var, ime spremenljivke, in nato njegova dejanska vrednost. In mi ne določite vrsto, samo kot v PHP, vendar zelo drugače kot v C. Torej, za primer, če smo želeli za shranjevanje vrednosti 50, v C, bi morali reči, hej, C, hočem celo število, Jaz grem, da ga pokličete i, in njegova vrednost je 50. V PHP, je malo lažje. Pravimo, hej, hočem spremenljivko Poklical sem in njegova vrednost je 50. Zelo podobno, v JavaScript, smo reči, hej, hočem spremenljivka sem poklical, njegova vrednost je 50. Vsak poznejši čas, ki ga uporabljam i, ne rabim pisati var. To je samo i od te točke naprej. Na enak način, pri C, pri čemer ko rečemo int i, bomo šele raba i. Cool? V redu. Selitev na zank, Na srečo, to je skoraj poglej exactly-- Mislim, da oni povsem enako kot kaj zanke se bo izgledal v nekaj podobnega C, kjer vaš zanke se dogaja, da imajo tri parts-- za inicializacijo, pogoj, in posodobitev. Nekaj ​​časa zanka, je videti točno isto. Pravkar smo izročiti to stanje. In storila, medtem ko zanke, spet povsem enako. Dajemo pa pogoj. Recimo, da sem želel ponoviti over-- Želel sem narediti nekaj petkrat. V C, lahko pišemo za init i enak 0. i je manj kot 5, i ++. Edina razlika je v JavaScriptu, namesto da bi rekel int i enak 0, rečemo var i enak 0. Lepa. To je edina razlika. Vsa vprašanja v zvezi kaj od tega? Da. OBČINSTVO: Torej v PHP, je isto stvar, razen ampak kot spremenljivko? Ali pa je bil, da na primer var? HANNAH Blumberg: Ja. Torej v PHP, da se dogaja da je znak za dolar. Tako se dogaja, da $ i enakopravnimi 0, $ i je manj kot 5, $ i ++. Great vprašanje. Zdaj pa govoriti o Izjave funkcijo. V C, ko smo razglašena za Funkcija, smo mu dali ime in smo ji dali nekaj parametrov. In na začetku, smo pisali vrsto. V JavaScript, vse, kar smo morate storiti, je napisati funkcija ključna beseda, ki pravi, hej, JavaScript, Jaz sem na tem, da se opredeli funkcijo. V tem primeru je ime vsoto. In to traja dva argumenta, X in Y. Opazimo, da nam ni mar o vrstah x in y. In tako kot C, imamo ta vrnitev ključnih besed, tako da lahko naredimo nekaj kot povratno x in y. In zdaj, ko smo že napisal to prvo funkcija, lahko uporabite vsoto kjerkoli. In to je povsem v redu. Ena res kul stvar JavaScript, da je zelo razliko C je, da lahko deluje se obravnavajo kot vrednosti. Tako da lahko naredimo nekaj podobnega tukaj kjer mislim, da to zajema up-- Jaz prikrili var vsoto part-- in smo pravkar rekel Funkcija xy enaka povratni x plus y. To je tisto, kar bi lahko imenovali anonimni funkcija. To je funkcija brez imena. Ker ta pravi funkcija Vsota, bla, bla, bla, to bi šele rekli funkcijo. Toda zdaj, čeprav imam ta anonimna funkcija, da funkcija je res samo vrednost. Mi lahko obravnavajo kot vrednoto. Tako bomo lahko shranite v spremenljivko istega Tako bomo lahko shranite 50 v spremenljivko. Tako lahko rečemo, OK, sem se želijo spremenljivka, se imenuje vsota, in to je ta funkcija. Torej ti dve stvari so dejansko boš naredil točno isto stvar, ampak sintaksa je malo drugačna in vrsta zabavno noto. Ja. OBČINSTVO: Torej lahko pokličete funkcija, ki je bila anonimna z besedami, vsota nosilci 2, 5? HANNAH Blumberg: Ja. Pokličete lahko to anonimni deluje na isti način. Vi bi naredil vsoto (2, 5) ;. To bi bilo povsem v redu. Če nisem naredil var vsota enaka funkcija, če sem izbrisan this-- Vem, da je na moji strani, ampak se pretvarjamo, sem izbrisal this-- nato to funkcijo je nekako le šlo. Nikoli ne moreš uporabiti še enkrat, ker nimate ime za to. Težko je, da se nanašajo na nekaj Če ne veste, kaj bi poklicati. Dobro vprašanje. Ja. OBČINSTVO: Lahko reference vsoto v drugih krajev z vrednostjo x plus y? HANNAH Blumberg: Lahko referenčna vsota v drugih krajih z vrednostjo x plus y? Nisem povsem prepričan, kaj misliš. OBČINSTVO: Torej vaš mimo semi-anonimen funkcija je vsota je enaka to Funkcija anonimna, zato vsota je Sedaj spremenljivka, ki ste can-- HANNAH Blumberg: Right. Torej vsota je spremenljivka, ampak to je actually-- tako da vsota je spremenljivka, katere vrednost je funkcija. Tako da je funkcija, ki je nekako čudna stvar, da zaviti svojo glavo okoli saj smo se igrali z C in ne morete narediti v C. Zdaj pa lahko rečemo sešteti enak način smo lahko pokličete vsoto tukaj. OBČINSTVO: OK. HANNAH Blumberg: Ja. Dobro vprašanje. Ja. OBČINSTVO: Torej mi ne uporabljajte prototipe v PHP ali JavaScript? HANNAH Blumberg: Ne, ne potrebujejo za uporabo prototipov, še posebej v JavaScript. Torej ena slaba praksa stvar, ki sem reči, ki jih ne bi smeli početi je nimate pisati var i = 50. Lahko samo začeti početje i = 50. In bi samo, da i globalna spremenljivka. To je zelo slaba praksa, da nikoli ne reci to izrecno var i, ampak to je nekaj, kar lahko storite. Tolmač ni bo kričati na vas. JavaScript je precej podobno, lahko narediš, kar hočeš. Oh, oprosti. Tam je dva. V oranžnih hlačah. Kar daj. OBČINSTVO: Ne, greš prvi. OBČINSTVO: Ne, jaz sem samo rekel, Nisem imel mojo roko. V REDU. Torej, če ste bili, da pokličete da prvič, zdaj povzamemo, pravimo, da na enak način, x, y, tako kot vsak čas? HANNAH Blumberg: Ja. Torej ti dve v bistvu narediti isto stvar. OBČINSTVO: In kakšna je prednost z uporabo enega ali drugega? HANNAH Blumberg: Ne prednost z uporabo ene ali druge. Želela sem, da vam pokažem dva Različni kosi sintakse. Veliko krat, kjer anonimna Funkcije imajo svoj namen je, če je argument v drugo Funkcija mora biti funkcija. In bomo videli, da je v samo druga z Ajax. Torej, če to ni nobenega smisla, ga shranite v zadnji del glave. To je, če anonimni Funkcija lahko koristno ker to ni res vredno ji daje ime, saj smo pravkar tekoč, da ga uporabite enkrat. Ja. OBČINSTVO: Če sta x in y sprememba kasneje dalje bo povzamemo spremenijo tudi? HANNAH Blumberg: Če sta x in y sprememba kasneje, bo povzamemo spremenijo tudi? Torej, to je pravzaprav sem mislim, nekaj, kar je, še enkrat, samo počuti zelo razlikuje iz C. To ni vrednost. To ni 5. To je samo funkcija sama. Torej, takoj, ko se jim zdi, da parametri, potem boste dejansko izračunati vrednost. MARIA ZLATKOVA: In potem lahko pokličete funkcijo in jo uporabite, da bi dobili nekaj vrednosti. HANNAH Blumberg: Right. Točno tako. Ja. OBČINSTVO: Torej, če vas le ga shranite v spremenljivko, kot var x enaka vsoti dveh values-- HANNAH Blumberg: Ja. Torej si lahko samo naredil var vsoto enaka vsoti dveh vrednosti. Ja. Vsa druga vprašanja? Ja. OBČINSTVO: Ampak bi, da je zmesti vsoto in vsoto? Všeč, če pokličete svojo spremenljivo vsoto, bi pokličete funkcijo vsoto? HANNAH Blumberg: Mm. Mm. Če ste naredili nekaj podobno, vsota enaka vsota 2, 5? OBČINSTVO: Ja. HANNAH Blumberg: Verjamem, da bi prepiše vrednost vsote. Torej, še ena zanimiva stvar JavaScript je, da lahko posamezno variabilno sprejmejo na kup različnih vrst. Slaba praksa. Vam ni treba storiti nekaj všeč, kar ste pravkar povedali. Toda v C, če se i nastavljena enaka celo število, vemo, da je nikoli ne bo postal niz. To pa ne velja v JavaScript. Ja, dobro vprašanje. Karkoli drugega? V redu. Narediti vse ravno ob pravem času. Vodenje dogaja. V redu. Če pogledamo niz v JavaScript, tukaj je hiter primer niz nizov. In nizi lahko rastejo dinamično. Oni nimajo fiksna velikost enak način da delajo v C. Mi lahko dostop do elementi s samo oglatem oklepaju. Ki je videti zelo podobna PHP in veliko kot C, kjer bomo lahko rekli, v tem primeru, če sem hotel besedo JavaScript, jaz bi ne arr oglate oklepaje z 0, 1, 2. In potem, če se spomnite, v C, ko smo je želel, da bi dobili dolžina array, je bilo res nadležno. Toda v JavaScript, super enostavno. Vse, kar delamo, .length. Daje dolžin. To je to. OBČINSTVO: To je preprosta. HANNAH Blumberg: Ja, naredi vaše življenje veliko lažje. OK, object-- ni. Objekti v JavaScript občutek veliko, kot konstruktov v C in asociativne nize v PHP. Torej, kaj smo videla Veliko je JSON, ki stojala za JavaScript Object Notation. In to je v bistvu način strukturiranja naše podatke. Torej, poglejmo primer, verjetno najlažji. Torej, tukaj je primer predmeta ki shranjuje razred, CS50. In ko rečem razred, mislim seveda, ne like-- ja, seveda, CS50. In videli boste, da Vse v predmetu se bo vsebovala V zavitimi oklepaji. In začnemo povezati imena polj ali tipke z različnimi vrednostmi. Tako da lahko začnete, da vidite, kako ta vrsta počuti kot asociativni niz v PHP. Torej bomo povezali polja ali Ime ključa, seveda z nizom, CS50. Bomo imeli inštruktorja. Bomo imeli TFS. Bomo morali število psets in bomo zabeležili. In ena kul stvar je tudi omeniti vse Te stvari imajo različne vrste, in to je popolnoma v redu. To je v redu za objekt, v resnici, to je verjetno pričakovati za objekt da imajo kombinacijo strun in številke in Booleans in nizi in karkoli drugega, boste morda želite imeti v vašem objektu. In ugotavljajo, da se ti bo imena ali ključe, nato pa smo pravkar nastavljen je enaka z malo debelo črevo. OBČINSTVO: Kaj pravzaprav JSON pomeni? HANNAH Blumberg: Kaj pravzaprav JSON pomeni? JSON samo stoji za JavaScript Object Notation. To je samo način oblikovanja. Ja. To je način za oblikovanje naše podatke. V C, je konstruktov. V PHP, je asociativne nize. V JavaScript, imamo predmete. OBČINSTVO: Torej CS50 je objekt? HANNAH Blumberg: CS50 je predmet v tem primeru. Zdaj, kaj počnemo pravzaprav dostop ta polja ali spremeniti ta polja. Recimo, da smo se odločili, da si želel eno manj pset ta semester. Namesto devetih, smo pravkar dogaja, da imajo osem. Kako bi spremenili to? Oh, napačen način. Obstajata dva načina, da to lahko storimo. Številka ena je s piko zapis in številka dve je z oglati oklepaj zapisu. Tako, na primer, če je I želel spremeniti ali dostopa polje psets v našem CS50 objekta, kaj bi naredil, je CS50.psets, tako ime objekta piko ime polja ali ključa. Zelo podobno, to je točno ekvivalent narediti CS50, in nato z oglatimi oklepaji, psets. Cool? Ja. OBČINSTVO: Torej je JSON tehnično JavaScript vedno, čeprav v psets smo ga izločiti [neslišno]? HANNAH Blumberg: Seveda. Torej, vprašanje je, ali JavaScript in JSON enakovredni? Torej JSON je zapis, v bistvu način, da smo napisali predmet iz JavaScriptom. Torej oni niso povsem enaka. Jaz bi rekel, JavaScript, tam so predmeti v JavaScriptu. JSON traja tiste predmete in jih natisne in jih prikaže ali jih shranjuje na lep način. Torej JSON ni programski jezik, tako, da je JavaScript. To je samo zapis za naši predmeti v JavaScript. Ja. OBČINSTVO: Torej, kaj točno [Neslišno] dokončati? HANNAH Blumberg: Seveda. Torej, to dejansko ne naredi ničesar. To je samo način za dostop. Torej, recimo, da smo želeli spremeniti število problematičnih sklopov od devet do osem. Kaj moramo storiti, je narediti nekaj kot CS50.psets = 8 ;. Ja, veliko vprašanje. To je samo, da vam pokaže, sintakso. Dejansko ne storiti ničesar koristnega. Kakšno vprašanje? Premikanje desno skupaj. Zato si oglejmo hitro primer, kako JavaScript deluje, ker sem ti rekel, da počne vse te kul stvari in nam omogoča, da spremenite spletne strani. Naj jo dejansko videli v akciji. Torej bi, na primer, to datoteko HTML. In stvar, želim si, da se osredotoči na je to posebno oznako, ki je gumb, z id search_button. To je samo na strani. Zdaj pa poglejmo, kaj bomo lahko dejansko narediti. No, recimo, ko kliknete ta gumb, želimo narediti alert-- boste kliknili na gumb. Pa poglejmo, kako lahko to storim. Torej window.onload-- to ni nekaj, ki ste jih videli v razredu, zato ne bo treba, da ga pozna za kviz. Ampak to v bistvu pravi, OK, call Ta funkcija, ko je okno obremenitve. Torej, to je le nekako nastavitvenem kode. Ne skrbi toliko o tem. Kaj hočem, da se osredotoči na, je tu. Pravimo var Searchbutton enaka document.getElementById search_button. Torej, kot ste lahko uganiti, kaj to počne je pravi, OK, pojdite poiščite element z ID search_button. In zdaj imamo, da Dejanski element in sem tekoč, da ga shranite v spremenljivka Searchbutton. In zdaj bomo lahko dejansko uporablja ta element in ga spremeniti ali dostop do svojih vrednot, stvari, kot da. Mi lahko dejansko začeli sodelovati s spletno stranjo. Torej, tukaj sem rekel, v redu, sedaj, ko imam da gumb, ko je kliknil, pokličite to anonimno funkcijo. Torej, to je, če anonimni Funkcije postal koristen. In kaj je funkcija storiti? No, to samo zahteva ta Funkcija opozarjanja in pravi, boste kliknili na gumb Iskanje. Torej, kaj se bo zgodilo, če grem kamorkoli to HTML živi in ​​sem kliknite gumb, Jaz bom dobil fancy malo opozorilo ki pravi, da ste kliknili na gumb. Torej stvari, da se osredotoči na here-- document.getElementById dobi posebno HTML element z navedenim ID-jem. In zdaj smo lahko nastavite kaj bi se zgodilo, če da zlasti element je kliknil. OBČINSTVO: Moramo dati vse, da se? HANNAH Blumberg: Oprostite? OBČINSTVO: Ali moramo fizično kodo vse to? HANNAH Blumberg: Ali moramo fizično kodo vse to? Da. Ali ni ta vrsta siten? To je veliko kode. OBČINSTVO: Lahko uvozite nekaj. HANNAH Blumberg: Right. Mi lahko uporabite nekaj. In v particular-- oh, to je mi pravi, moram naučiti poglavje. Še zlasti, kaj je uporabite knjižnico jQuery, ker je to res dolgo in zelo nadležno in želim, da bi lahko poenostavili in da bo krajše in lažje pisati. Torej jQuery je knjižnica JavaScript. Torej JavaScript je programiranje jezik; jQuery je knjižnica. In to naredi kup lažje stvari. To naredi spreminjajo in gredo čez HTML dokument, veliko lažje. To naredi dogodkov ravnanje lažje. To naredi animacijo lažje in ga naredi Ajax lažje. Torej, kaj je skočiti v dveh te stvari zdaj. Oprostite. Preden smo storili, nekateri osnovno sintakso. To je tisto, kar najbolj klice knjižnica jQuery izgledal. Mi uporabljamo to dolar sign-- ni povezave znamenje PHP, Samo inconvenient-- ime selektor, pika, nato pa dejanje. Torej, poglejmo nekaj konkretni primeri, da je. Torej, to je pravzaprav enaka koda iz dogodka diapozitiva. Torej to dolgo, grda stvar postane to veliko lepše, manjša stvar. Torej, poskusimo, da bi prekinil to dol. Ta pravi, OK, jQuery-- to dolarja sign-- jQuery, najti mi okno. Tako da je selektor. Ko to obilje, pokličite to funkcijo. Torej, to je vse, kar je notri. V REDU. Doslej je tako dobro? V redu. Zdaj, jQuery, najti me je stvar z ID search_button. In kaj je kliknil, pokličite to funkcijo. In potem ta funkcija je povsem enako. Pač malo opozorila, boste kliknili na gumb Iskanje. Torej, to je res lepo. Res kondenzira in poenostavlja našo kodo. Kako sem vedel, da je to je ID search_button in ne kot razred search_button? OBČINSTVO: hashtag? HANNAH Blumberg: Ja. Ta simbol hash, to je tako kot CSS. Torej, ne pozabite, s CSS, ko smo je želel, da izberete nekaj po ID, smo uporabili znak za funt. In ko smo želeli, da izberete Nekaj ​​po razredu, ki jih uporabljamo na piko. Great. Ima smisel? Torej je jQuery naj bi samo, da naše življenje lažje. Ja. OBČINSTVO: Torej sem malo zmeden kako je anonimna funkcija deluje. Ali ste poimenovati anonymouse funkcija deluje? Kako se imenuje? HANNAH Blumberg: Seveda. Torej funkcija je le ključna beseda, ki pravi, da sem o tem, da se opredeli funkcijo. OBČINSTVO: Oh, v redu. HANNAH Blumberg: OK? In potem smo jo prenese kot argument to-- vzemimo Ta notranja one-- funkcijo klik. Torej, ja, da te funkcije, ta anonimna funkcija, postane dejanski argument. Torej, ne pozabite, v JavaScript, smo lahko zdravi funkcij kot vrednote. OBČINSTVO: Oh, v redu. HANNAH Blumberg: Ja. Všeč mi je, da je "oh". Lepo. Druga vprašanja? Čas? MARIA ZLATKOVA: Dobro. Dobro. HANNAH Blumberg: Awesome. Nekateri hitro uporabno jQuery. Jaz ne bom šel skozi vse to. Ti preparati bodo do spletnega malo kasneje, tako da lahko preverite ven malo kasneje. Ampak v bistvu, splošno Vzorec ima, kjer smo rekli, OK, hej, jQuery, tukaj je moj selektor, potem tukaj je dejanje. In lahko narediš stvari, kot so dostop na Vrednost obliki, dostop do nekaj HTML, nadzor, kaj se zgodi, ko uporabnik predloži obrazec, takšne stvari. Da. OBČINSTVO: Torej, v izpit, bomo potrebovali vedeti zelo veliko iz dokumentacija jQuery. Torej, glede na to, smo se copy / paste jQuery Dokumentacija za naše goljufija stanja, Kje je črta? Like koliko jih moramo vedeti? HANNAH Blumberg: Velika vprašanje. Vprašanje je, v bistvu saj vas ne morejo dostopati do dokumentacije jQuery med preskusom, koliko jih je treba vedeli? Mi ne bi pričakoval, da pridejo z nekaj naključno funkcijo da bi vas pričakujemo na Googlu. Stvari, ki so pošteno igro so Jaz bi pravijo le nekakšno splošno sintakso, da lahko izbere po ID in ga class-- zato tako kot CSS. In potem dejanske funkcije themself, bomo verjetno vam povem. Ja. OBČINSTVO: Torej, če izberete po razredu bi pomenilo piko. HANNAH Blumberg: Ja, točno. Dobro. Ko izberete glede na razred, da se dogaja se dot namesto funta znaka. Da. OBČINSTVO: Bi si iti čez razlike med izbiro po ID in po razredu? HANNAH Blumberg: Seveda. Razlika med selekcionira ID in izbiranje po razredu. Tako kot je dejal Maria malo prej, obstaja lahko samo eden HTML element z navedenim ID-jem, medtem ko razred, nam omogoča, da skupina kup različnih elementov skupaj, tako stvari, ki so povezane, vendar ne povsem enako. Ali, da je odgovor na vprašanje? Awesome. Da. OBČINSTVO: Kaj pa, če imate več stvari, ki so v istem razredu? HANNAH Blumberg: Kaj se zgodi, Če imate več stvari, ki sta enaka razred? Tako, na primer, če smo samo z uporabo čistega JavaScript, želimo narediti nekaj podobnega document.getElementsByClass. In potem, kaj to dejansko počne se vrne niz elementov. In boste morali bodisi ponoviti čez jih ali najti katero želite. To se ne dogaja, da si en sam element. To se dogaja, da vam array elementov. Great vprašanje. Karkoli drugega? Awesome. Zato mislim, če ste seznanjeni z vsaka jQuery ste videli v pset, bi morali biti na dobri poti. Vprašanje? Oh, ne. Res moram naučiti. Sprostite se. To bo v redu. Jaz bom tam. Spregovorimo o Ajax. Torej Ajax se bo a-- dobro, Začnimo s tem, kar je kratica za. To je kratica. To pomeni asinhroni JavaScript in XML. In XML je v bistvu se bo [Neslišno] z vrsto naših podatkov. Vendar smo dejansko ne uporablja XML. Namesto tega smo šele raba JSON. Torej v bistvu, to je nekaj data-- asinhroni, JavaScript, in podatki, V tem primeru, JSON. In naš cilj, kot smo omenili malo prej, je, da se lahko vložijo zahteva, da se prošnja storiti njegova stvar v ozadju, vendar še naprej storiti vse, kar smo se nameravajo storiti. In potem, ko je ta informacija pripravljen, potem bomo to vključiti. Torej, poglejmo, kaj je to dejansko izgleda. In to, morate biti malo pozna od pset8, tista, ki ste jo pravkar obrnil. Torej, tukaj je veljavna jQuery Funkcija, ki smo morda želeli vedeti about-- to znak za dolar. Torej je pravi funkcija jQuery, .getJson. In kaj ta funkcija pa je, da traja URL in nekaj parameters-- tako da mislim, da v primeru od pset8, je bilo všeč, URL je articles.php in Parametri bilo iti = nekaj poštno številko. In pravi, OK, da zahtevek ta URL z danimi parametri. In to samo zgodi. Ko se konča, to je bodisi bo uspešno končana ali pa se dogaja, da ne. Torej je to enakovredno postanka Rob in ga prosi, da narediš nekaj. In potem, ko se pokliče nazaj, on je bodisi reči da sem storil, ali mi ni uspelo. Torej v primeru, ko ste ga storili, ste rekli, v redu, bom končal. In potem pokličete to funkcijo. V tem primeru, da se dogaja, da je Funkcija, ki traja nekaj informacij. Tista, smo ponavadi skrbi so podatki, Podatki, ki smo dejansko vrne kot posledica kliče .getJSON. In lahko narediš nekaj z njo. Torej, v primeru pset8, jo prikaže v obliki seznama. Fail se bo funkcija ki se imenuje, če se zahteva ne ne glede na razlog. In v primeru pset8, smo ga pravkar console.log. Vsa vprašanja glede tega? Ja. OBČINSTVO: Lahko smo samo uporabiti funkcijo theta namesto funkcije textStatus, jqHXR. HANNAH Blumberg: Seveda. Torej, ja, mislim, da v pset, smo pravkar videli podatke funkcijo. Torej, to je samo the-- ja, v redu. To je tisto, kar smo videli v pset. To je povsem v redu. To so le, če si hotel izvleči več informacij, To so stvari, ki jih boste lahko dobili od .getJSON. Dobro vprašanje. Karkoli drugega? Ja. OBČINSTVO: Torej .getJSON je Ajax? HANNAH Blumberg: OK. Torej je to neke vrste rafiniran del. To je funkcija jQuery ki omogoča da narediš asinhrone klice. In ti asinhroni klici, da je kar smo se nanašajo na kot Ajax. Ja. To mi je res dolgo časa, da se potegnite narazen, ko sem bil še študent. OBČINSTVO: Lahko ponoviš? HANNAH Blumberg: Ja. Lahko rečem, da je spet? Ta funkcija .getJSON, je funkcija jQuery. In to se dogaja, da asinhroni klic. In ti asinhroni klici, ki smo jih so namenjene tistim, kot Ajax. Vsa druga vprašanja? Imamo samo nekaj minut tekme. In Maria se dogaja, da zaviti z varnostjo in potem gremo se skoraj končali. MARIA ZLATKOVA: Awesome, OK. Torej, to is-- vzemite par sekund, da si več kot to. In to ni nekaj res super. In mi lahko nekdo pove, zakaj? Kaj se dogaja v foo in lahko bi potencialno povzroči nekaj slabega, in kaj, da se imenuje? Ja. OBČINSTVO: Če je argument, da je opravili v več kot 12 znakov, da bi lahko preliva. MARIA ZLATKOVA: Right. Popolna. Kako se imenuje? Pravkar si ga omenil. OBČINSTVO: Buffer overflow. MARIA ZLATKOVA: Yup, buffer overflow. Torej, to je nekaj, kar smo glejte kot buffer overflow. In vidimo, da je notranjost foo, smo opredeljevali naše buffer, c, z velikostjo 12. Vendar pa se v glavnem ne bomo preverjanje kakorkoli sploh ali argv1-- da je bil drugi argument. Mi ne preveri, ali je Velikost je primerno. Torej, če smo imeli predvsem zlonamerni uporabnik ki je postavil v nekaterih trditev, da je bila več kot 12, nato pa potencialno onkraj meja, ki argument, je imel nekaj izvedljivo kodo da je poskušal narediti kaj slabega z njim; potem je to, kaj bi se zgodilo, bi preglasijo vrnitev naslov funkcije foo, povzroča funkcijo ko vrnitvi izvršiti to kodo. In potem slabe stvari se lahko zgodi. Ali je to smiselno za vsakogar? In kako se lahko zaščiti pred tem? Vsi predlogi? V bistvu, notranjost potencialno foo, kako bomo lahko preverite, da to ne more zgoditi? OBČINSTVO: Če je velikost 12 presežene, bi dodeliti dodaten pomnilnik? MARIA ZLATKOVA: Pobuda je dodelila dodatni spomin velikosti presežena. Pravzaprav, lahko naredimo nekaj, kar veliko lažje kot to, kot dobro. Mi lahko samo dobil dolžino niza z argumentom, da se je začel, preverite, če je manj ali enako 12-- ki je tisto, kar smo želeli da zato, ker ne želimo, to presega meje naše pufra. In potem, če se to ne zgodi, smo lahko delajo z argumentom. In potem, če se to zgodi, dejansko želimo potencialno Yello na uporabnika. Ampak to je, kako bi to naredil. Da. OBČINSTVO: Bi lahko razložiti memcpy resnično hitro? MARIA ZLATKOVA: Oh, oprostite. Da. Memcpy traja karkoli is-- žal, OK. Memcpy je vse, kar je V baru, kar je minilo na foo kot argument ukazne vrstice. Tako se dogaja, da sprejmejo argv1. Argv1 se imenuje bar tukaj. Tako se dogaja, da sprejmejo bar in to se dogaja, da ga kopirajte v c. OBČINSTVO: OK. MARIA ZLATKOVA: In to se dogaja, copy-- tretji argument samo sklicuje za koliko se bo skopirala v c. OBČINSTVO: Ah. Torej, tale je kopiranje vse to takrat. MARIA ZLATKOVA: Ja, to je kopiranje vse to. Ja. Najprej se prepričajte, da bar ni enaka NULL, ker je kazalec. Potem smo dobili dolžino niza bara. Poskrbimo, da je manjša ali enaka 12. In potem, ker smo jih je prepričan, lahko smo dejansko memcpy in se prepričajte, da je to v redu. Kakšno vprašanje? Great. Imam dva pravilna ali napačna vprašanja. Mi lahko kdo pove takoj če so to drži ali ne? Ja, to je napačen. Točno tako. Oba sta napačni. Torej z uporabo enega samega geslo ni nikoli res dobra ideja ker če kdo ve gesla, ki jih lahko samo dostop do vseh vaših druge račune. In potem ikone ni da se zagotovi varnost. Morali bi običajno iskati HTTPS namesto HTTP in URL. In nekatere druge vrste Napadi, ki smo navedeni, da je David omenjeno v predavanje, napadov SQL injection. Smo že videli, da če bomo don't-- Funkcija CS50 poizvedba poskrbi, da SQL napadi injekcija ne more nastati. Ampak, če ne bomo uporabljali CS50, citiram, konec citata "v poizvedbi" mi bi morali zagotoviti, da vhod uporabnik dejansko ni nekaj SQL izraz, ki bo povzročila vse naše mize se znižale ali kaj slabega zgodilo z našo bazo podatkov. Ugrabitve seja druga vrsta očitno da se zgodi, ko nekaj slabega oseba, ki uporablja sejo nekaterih žrtvino ID za dostop do informacij za prijavo. Torej zelo trivialno primer, da je kot če imamo javni računalnik, potem je slaba oseba prijavi v sistem in nato so piškotki, ki so shranjene. In piškotki ne spreminjajo za sejo. Potem smo žrtev iti v in potem se prijavite na spletni strani. Piškotki ne spreminjajo za določeno sejo. In potem je žrtev prijavi v spletna stran, nato pa zapusti. In potem je oseba, ki sega lahko potem še vedno uporabljajo svojo Session ID dostop do svojih podatkov. Torej, to je en primer kako bi se to zgodilo. In potem jaz ne bi skrbite preveč o posebno kodo ali karkoli kot da bi to lahko povzročilo to, vendar imajo neko idejo, kaj spremenljivke, vključene v to so. In potem manipulirajo glave podatkov je druga vrsta napada da ima David je govoril. In to samo pomeni, da kaj se lahko zgodi, ko odgovor, HTTP Odziv znotraj naše glave ni sanirati pravilno. In vsaka od fields-- za primer, če nekdo prepiše eno glavi Vrednosti vsebovati kaj več kot kaj naj contain-- in dejansko vsebujejo, na primer, 200 OK koda stanja, nato pa so bi lahko naredil zlonamerno Stvari, če oni ne bi smel. Ampak jaz ne bi skrbite preveč veliko o posebno kodo ki lahko povzroči to, le neke vrste razumevanja Stvari na visoki ravni, kot je ta. Mislim, da je to vse da moramo za pokritje. Neverjeten. Kdo kakršna koli vprašanja o katerikoli od stvari, ki jih zajema? Da. OBČINSTVO: Torej, ena vrsta več logistično vprašanje. Je vsebina osredotočena predvsem na stvari, po kvizu 1? MARIA ZLATKOVA: Torej Vprašanje je, ali je vsebina osredotočila predvsem na stvari, po kvizu 1? Torej je poudarek na po kviz 1, z izjemo da se moramo osredotočiti na stvari, pset5 in veliko podatkovnih struktur da smo pokrili. In ne moremo reči, da smo mogoče prezreti ničesar pred da zato, ker temelji na njej pa tudi. Tako osredotočiti na to, plus pset5 materiala kot tudi povezane sezname, nizov, čakalne vrste, in vse, kar je da Hannah šli čez. HANNAH Blumberg: Right. Ja, smo šli preko vseh C tvar na samem začetku zelo hitro. Vendar se prepričajte, da pregleda to. Pojdi nazaj in gledal kviz 0 pregleda. Nekaj ​​več logistične ugotavlja, samo, ko imamo svojo pozornost. Bomo imeli uradnih ur tako v ponedeljek in torek zvečer. Oni bo v MD 119. To je vse na spletni strani, tako da Če ga ne, brez skrbi slišati. MARIA ZLATKOVA: 08:30 do 11:00. HANNAH Blumberg: Ja, 08:30 do 11:00. Mi bomo tam. Mi bomo tam, da odgovori na vprašanja. To je zelo mrzel in zabavno. Vidva lahko zaprosijo katerega koli vprašanja da imate na kvizu 1. In kviz 1 je na Sreda, tako srečno. Če imate kakršnakoli vprašanja, morda pridejo Pogovorite se z nami tukaj ena na ena. Cool. Hvala zelo. MARIA ZLATKOVA: Najlepša hvala, fantje. OBČINSTVO: Bravo. [Aplavz]