HANNAH Blumberg: Saluton ĉiuj. Ni tuj starti nur kelkaj minutoj frue ĉar ni havas tutan multon de materialo por atingi tra. Mi estas Hannah. Mi estas TF. Maria tuj estos aliĝanta nin en nur kelkaj minutoj. Ŝi instruas sekcio dekstra antaŭe. Mi instruos sekcio dekstra post, do ni tuj teni ĝin al la horo kaj duono. Do kiel vi vidos tie, ni havas tre kelkaj temoj ni bezonos akiri tra, tiel ni estos iranta iomete rapida. Sed se ĉe ajna punkto ni diras ion tro rapide aŭ vi ne komprenos, bonvolu interrompi kun demandoj. Ni volas povi fari ĉi revizii kunsido kiel utilaj al ĉiuj el vi kiel eble. Imponega. Do ni saltas bone kun iuj temoj kiujn ni efektive tre tre mallonge kovrita por la kvizo 0 en la kvizo 0 revizio kunsido. Do startanta kun ligitaj listoj. Do nur certigi vi havas iujn bazajn konojn pri ligitaj listoj kaj estas komforta faranta iuj de la bazaj operacioj. Do simple revizii, ligita listoj estas bonaj ol tabeloj ĉar ili povas kreski dinamike. Do ni havas tiun grandegan avantaĝon. Ni vidis ilin uzataj en hash tabloj kiam ni ne scias precize kiom da aferojn ni tuj volas enmeti en nia datumstrukturo. Bedaŭrinde, ni ne havas pecojn de la ligillisto ĉie memoro, do ni ne nepre estos kapabla fari konstanta tempo aliro al ajna elemento en la ligitaj listo. Por trovi aparta elemento, ni devas persisti ĉiuj vojo de la komenco. Do memoru, ke la plejparto de la bazaj operacioj estas omega de 1. Do enigaĵo estas ĝuste tuj prenu 1. Forviŝu tuj prenos n ekde ni devos iri trovi ĝin el la listo. Kaj serĉo povis preni, ĉe plej malbone, n. Ni ne povas fari ion kiel binaran serĉon sur ligillisto cxar ne eblas simple hazarde salti al la mezo. Malvarmeta. Imponega. Iomete de stakoj. Tio, denove, elkreskigis kvizo 0, do vi devus esti super komforta kun ĝi. Sed por stakoj, ni petas vin memori pilo de pletoj. Kaj ĝi estas iranta esti unua en, daŭri eksteren. Do ni stakigas aĵojn en la pilo, kaj tiam se ni provas preni ion off-- kiun ni nomas krevanta for la stack-- ni elspezas la supro. Kaj se ni volas meti ion en la pilo, ni nomas ĝin puŝante. Do ĝi estas ĉiam iranta esti kreskante el la fundo kiel stako de pletoj. Imponega. Ni vidis stakoj implementado kun ambaŭ ligitaj listoj kaj tabeloj. Se vi efektivigado kun sensilo, vi volas por certiĝi sekvigi ambaŭ la grandecon kaj la kapablo. Do grandeco tuj estos la nunan nombro de aferoj en via pilo, dum kapablo estas la totala nombro de aĵoj vi povas stoki en via pilo. Malvarmeta. Tre simile, ni havas atendovicoj. En tiu kazo, anstataŭ pensi pri pilo de pletoj, Pensi de linio. Ĉi tiu tuj estos la unua en, unua el. Do se vi viciganta por io ĉe la vendejo, Ni esperas ke la persono unue en linio tuj helpindaj unue. Anstataŭ diri puŝo kaj pop kiel ni faru por pilo, ni nur diru enqueue kaj dequeue. Kaj denove, se vi estas implementando ĉi kun tabelo, ni bezonas konservi trako de ne nur la grandeco kaj kapablo, sed ankaŭ la kapon, kiu tuj estos la fronto de niaj atendovico. Malvarmeta. Demandojn pri ajna el tio? Imponega. Moviĝante dekstren kune. OK, hash tabloj. Jen kie komencas ricevas vere interesa. Do hash tablo estas unu efektivigo de asocieca tabelo. Do esence kio okazis Estas ni cxiuj havas tiun enigo, kaj ni donas lin al hash funkcio, kiu diras: Okej, tio estas kie en la hash tablo apartenas. Do la plej simpla hash funkcio ke ni vidis estas ĝuste diri: OK, supozi ni volas meti kordoj en nia hash tablo. Kaj vere simplan ideon eblus diri, OK, ni simple ordigi laŭ la unua litero de la vorto. Do vi povas vidi ĉi tie, ni preni bananon, ni metas ĝin tra hash funkcio, kaj ĝi diras, hey, ke iru ĉe indekso 1. Do ni povas esence pensas pri hash tablo kiel faskon da malsamaj siteloj. Kaj ĉiu el tiuj siteloj tuj teni la kapon de ligitaj listo. Kaj en tiu ligillisto estas kie ni povas efektive metis malsamaj pecoj de datumoj. Do plonĝado iomete pli en hash funkcio, jen la ekzemplon mi ĵus priskribis, kie ni nur diru, OK, preni la unuan literon de la vorto kaj ni tuj ordigi ĝin en la siteloj. Do supozeble, ni havas 26 siteloj, unu por ĉiu litero de la alfabeto. Kial estas ne tiu granda hash funkcio? Kion faras ĉi ne-ideala? Yeah. Spektantaro: Vi tuj havi kolizioj. HANNAH Blumberg: Jes, ĝuste. Vi tuj devas kolizioj. Do tio estas unu afero. Kaj ni parolos pri kiel ni povas ripari kolizioj en nur dua. Alia problemo kun ĉi aparta krada funkcio estas ke nia malsamajn siteloj tuj estos de bela draste malsamaj grandecoj. Ni scias ke ekzistas tuta amaso pli da vortoj kiuj komencas kun A ol ikso, do ni tuj devas tre neobjektiva siteloj en nia hash tablo. Malvarmeta. Do jes, ni reiros al la punkto de kolizioj. Kion ni faru se ekzistas kolizio? Ni havas paron malsamaj ebloj. Do unu, do eble ni provas meti bero en nian hash tablo. Kaj ni vidas, ho, ni volas meti ĝin en indekso 1, sed banano jam vivas tie. Kion ni faru? Ni havas du ĉefaj ebloj. Numero unu estas ni povas diri, OK, ne estas loko en indekso 1, sed ni simple observu rigardante tra ĝis ni trovos alian malfermita loko. Do ni diru, bone, ni metu ĝin en loko 3. Tio estas unu eblo. Tio nomiĝas lineara tuŝoprobado. Kaj dua eblo estas diri, OK, nu, ni nur faras ĉiu el tiuj siteloj esti kapoj de ligitaj listoj. Kaj estas bone se ekzistas pli ol unu afero en sitelo. Ni nur tuj append ĝin sur la fronto. Do jen vi povas vidi, okej, kiam ni insertita bero, ni nur prenis bananon, ia puŝis ĝin iomete kaj ĵetis bero en tie. Kaj tio estas ankaŭ tute bone. Tio nomiĝas apartan sinsekvon. Vi povas pensi pri tio kiel speco de kiel tabelo de kapoj al ligitaj listoj. Demandojn pri hash tabloj, kradaj funkcioj? Imponega. Arboj kaj provojn. Do arbo estas omnaspeca de la datumstrukturo en kiu ekzistas ia de hierarkio aŭ ian de rango al via malsamajn celojn. Kaj tiu fariĝos súper klara kiam ni vidas ekzemplon. Kaj ni vidis provojn, kune kun hash tabloj, en pset5-- kiu, denove, tute justa ludo por ĉi quiz-- kiel alia datumo strukturoj kiuj ni povas stoki malsamaj aferoj. En la kazo de vortaro, ni stokis faskon da vortoj. Do ni rigardu iuj arboj. Do tiu estas ekzemplo de arbo. Ĝi havas ian strukturon, ke hierarkia strukturo, kie vi povas vidi ke ĉi 1 nodo ĉe la supro havas ian rangon super 2 kaj 3, kio estas supre 4, 5, kaj 6 kaj 7, kio estas supre 8 kaj 9. Do jen ĉio ni signifi per arbo, tiel vi povas nur ia de bildigi tion en via kapo. Nun, ni havas paron de pli specialigitaj arboj. Do unu ekzemplo estas duuma arbo. Kaj duuma arbo estas, denove, nur tuj estos datumstrukturo kun ia hierarkio, sed ĉiu el la nodoj povas havi maksimume du infanojn. Tie estas kie la vorto duuma devenas. Do tiu estas ekzemplo de binara arbo. Do tio estas pli malgranda kategorio da arboj. Nun ni akiras eĉ pli specifaj kaj paroli pri duuma trees-- duuma serĉo arboj, prefere. Do jen la ideo ne nur faras ĉiu nodo havas maksimume du infanojn, sed ĉiuj infanoj al la maldekstra tuj estos pli malgranda kaj ĉiuj la infanoj al la dekstra tuj estos granda. Do rimarki en nur nia duuma arbo, ekzistas neniu rilato inter la nombroj. Sed en nia duuma serĉo arbo, ni vidas, bone, jen 44. Kaj ĉiu nombro al la maldekstra de 44 estas malgranda kaj ĉiu al la dekstra estas pli granda. Kaj kiu tenas en ĉiu nivelo de la arbo. Do jen, tiu estas pli malgranda ol 22 kaj jen granda ol 22. Kaj tio estas duuma serĉo arbo. Kial ni pensas ĝi nomiĝas duuma serĉo arbo? Kio algoritmo faras ĝi memorigas vin pri? Publiko: Duuma serĉo. HANNAH Blumberg: Duuma serĉo. Ĉar se vi serĉas aparta nombro en tiu arbo, je ĉiu punkto, vi povas simple frapi for duono de la arbo, kiu estas granda. Kaj por ke tuj doni al ni ion kiu aspektas tre kiel duuma serĉo. Demandojn? Bone, malvarmeta. Bone, provas. Ĉies preferataj. Do tiu estas la ekzemplo kiu ni vidis aron en klaso. Kaj denove, ĉi tiu estas nur alia modo kiun povas stoki datumojn. En la kazo de vortaro, denove, tiu estas nur tuj estos kordoj. Do ni vidu kion tiu reale aspektas kiel ĉe iomete pli malalta nivelo. Do ni rigardu ĉe unu nodo en trie. Kaj ni vidas, bone, ekzistas iranta esti Bulea kaj nodo, puntero al nodo. Kaj ni vidas ke la Buleaj nomiĝas is_word. Do esence, jen tuj respondas al tiuj malgranduloj trianguloj kiuj diras, se vi akiris ĉi tie, vi trovis kompletan vorto. Ni scias ke "Turing" super tie estas kompleta vorto, dum nur T-U-R ne unu vorton ĉar ni ne vidas ke iom delto. Kaj kiu iom delto, denove, respondas al tiu is_word, ĉi Buleaj is_word. Kaj tiam ni havas aron de infanoj. Do je ĉiu nivelo, vi havas apartan nodon, kaj ke nodo punktoj al tabelo de la tuta alfabeto. Do vi povas vidi, denove, en ĉi picture-- mi tuj subteni saltante tien kaj forth-- ke tiu tabelo supre havas aron da malsamaj nodoj elspezi ĝin. Ĝi havas 26 aŭ 27 se vi volas inkludi ekstran karakteron. Kaj tio donas al ni maniero por stoki niaj datumoj en maniero kiu povas rigardis ke vi povas rigardi supre super rapida. Kio estas la lookup tempo por trie? Spektantaro: [inaudible]. HANNAH Blumberg: Yeah. En teorio, ĝi estas konstanta tempo. Ĝi estas nur tuj estos la grandeco de la vorto, kiun vi volas serĉi. Eĉ se ni aldonas Zillion pli da vortoj al nia trie, ĝi ne iras por preni nin plu al determini se donita vorto estas en la trie. Do jen vere bela. Spektantaro: Ĉu vi ĵus pravalorizi tiu tabelo? Vi maltrafis punkto aŭ du. Ĉu vi povas simple paroli pri ke por dua? HANNAH Blumberg: Certe, absolute. Bona demando. La demando estis, ni havas tabelo tio tuj devas nodo stelo kiel kontraste al nura nodo, ĉu ne? Malvarmeta. Do jen kion ni dirante estas nia tabelo estas nur tuj estos punteros al aliaj tabeloj. Do ĝi estas essentially-- ĝi ia sentas ligillisto tiamaniere kie ĉiu de tiuj infanoj nur indiki al la sekva nodo. Kaj la vojon, kiun ni fakte determini, hej, nu bone, ni ripetis tra tuta vorto, estas tiu vorto en la vortaro, ni nur kontroli ĉi is_word. Granda demando. Yeah. Publiko: OK. Do kio estis la ekzekuto por la trie? HANNAH Blumberg: Sure. Do la ekzekuto por trie por lookup tuj estos konstanta tempo. Do ĝi estas nur tuj estos la nombro de literoj en la vorto. Tio ne dependas de la grandeco de la vortaro aŭ la grandeco de la datumstrukturo. Do jen iomete pli simpla ekzemplo. En tiu kazo, vi povas vidi ke la vorto vesperto estas en la vortaro kaj vi havas zoom, sed vi ne havas ion kiel zoo. Kiel ni fari zoon? Kiel ni aldonu al nia bestoĝardeno vortaro, al nia trie? Yeah. Publiko: Faru is_word vera por la [inaudible]. HANNAH Blumberg: Bonan. Do ni dirus Z-ho-ho, kaj tiam ni estus volas kontroli ekstere ke skatolo tiel. Granda. Ni komparu tre mallonge provas kontre hash tabloj. Tries estas vere granda ĉar, kiel ni diris, ili provizas konstantan tempo lookup. Sed la grandega malavantaĝo Estas ili estas humongous. Vi povas akiri la senton, eĉ rigardante ŝin, ke ĝi tuj prenos grandegan kvanton da memoro. Do ili tuj estos multe granda ol hash tabloj, sed ili tuj donu ni multe pli rapide lookup fojojn. Do jen speco de via tradeoff, kion vi zorgas pri, ĉu ĝi estas rapido aŭ memoro. Demandojn pri ajna el tio, ĉiuj de la C datumstrukturoj. Bela. BONE. Ni tuj pluiri al iom bita de ttt disvolviĝo kun Maria. MARIA ZLATKOVA: Lovely. BONE. HANNAH Blumberg: Vi povas uzi mian tekkomputilon. MARIA ZLATKOVA: Nice. Bone, mojose. Kiel ni movos nun al ttt disvolviĝo, ni parolis iom pri ŝanĝanta permesojn de dosieroj kaj dosierujoj por ke ili povu esti alirebla al aliaj uzantoj, al la mondo, kaj por ke ni povas vidi kiom resume ni povas transdoni ilin kiam ni evoluigi aĵoj kiel retejoj ke ni plejparte estis farante. Do ni vidis la chmod komando, kio estas ŝanĝo moduso, esence. Tio estas Linuksa komando kaj ŝanĝas aliro permesojn de dosiersistemo objektoj. Kaj dosiersistemon objekto estas nur dosierujo, dosiero, io ke vi povas ŝanĝi la permesojn de. Do por vidi la dosierajn permesojn, ni tajpu la komandon ls, listo, -l. Kaj kiam ni tajpas ke ni kutime vidi iujn permesojn aspektantaj ia kiel tiu antaŭ dosierujo nomon. Do d rilatas al dosierujo. Kaj tiam ni havas tri triadoj kiu esence rilati al la permesojn de ĉu uzanto, grupo, aŭ la mondo. La tipoj de permesoj kiujn ni povas havas tiujn tri homgrupoj estas ĉu r por legado, w por skribi, kaj x por ekzekuti. Kaj ni povas havi tiujn por la grupo kaj mondo ankaŭ. La malfacila afero estas ke foje kiam ni tajpi la chmod komando, ni devus tajpi iun numeron kiu konsistis el tri bitoj. Do ni povus fari kiel 777 kaj kiu esence rilatis al la valoro aldonita de ĉiu el tiuj triadoj ĉar r devus referi al 4, w volus referi al 2, kaj x devus referi al 1, do kiam aldonis supren, ĉiu el la nombroj malsupreniri al tuteca nombro al akumulan valoron inter 0 kaj 7. Do ni povus ankaŭ havi 0 cxar neniu permesojn ajn. Kaj kiu esence doni nin la permesojn por ĉu la uzanto, la grupo, aŭ la mondo. Demandojn sur tio ĝis nun? Spektantaro: Vi diris legis estis 4? MARIA ZLATKOVA: Jes. Spektantaro: [inaudible]. HANNAH Blumberg: Yup. Publiko: Kaj poste aldonante ĉiuj tiuj aliaj indikus vian numeron. MARIA ZLATKOVA: Yeah. Yeah. Tiuj estas grandaj demandoj. Lovely. Tuj, ni ensaltis en HTML kaj iom pli pri ttt disvolviĝo. Do HTML nur signifas Hipertextual Markup Language. Kaj kiu estas la markado lingvo kiu estas normo ke ĝi estas uzata por krei retpaĝojn. Ĝi nomiĝas markaĵojn ĉar ĝi ne vere kompilis. Ĝi ne diras kiel iu kodo devus lanĉiĝos aŭ io simila. Ĝi nur konturas kaj priskribas kiel ttt paĝo devus esti starigita kun ĉiu el ĝiaj eroj kaj kiel ili devus rigardi al la uzanto. Iuj de la HTML etikedoj kiuj ni transiris estas la sekvaj. Ĉiuj niaj HTML dokumentoj komenciĝis kun la DOCTYPE html. Tiam ni havas ĉiam la html etikedo. Ni havas kapon kaj korpon. Kaj gravas ke HTML havas tiu speco de nestitaj strukturo ĉar ĝi estas tre klara. Kaj tiam ĝi fariĝas tre klara kiam ni bezonas malfermi kaj efektive proksime etikedoj. Kaj ni ĉiam bezonas fermi etikedoj kiuj ni jam malfermiĝis. Kaj tie ni havas iom de la tipoj de aferoj antaŭ ke ni volas havi. Do ni havas, ekzemple, la titolo de CS50. Kaj tiam ni efektive povas ligi stilo folio kiu difinas kiel ni stiligi nia retejo. Ke estas CSS. Ni tuj iru supren en la sekvanta paro de diapozitivoj tiel. Ene de la korpo, ni starigis kelkaj klasoj kaj IDs. Kaj kiel memorigilo, denove, IDs estas unikaj kaj klasoj povas esti atribuitaj al plurajn erojn. Kaj tio nur signifas ke ni povas uzi klasoj kaj IDs ene aliajn structures-- tiel, por Ekzemple, ene CSS dosierojn aŭ stilo sheets-- rilati al specifa elementoj kaj esence diri ke ni volas stiligi aŭ desegni iun elementon en iu aparta maniero. Kaj ni priparolas ilin per ilia IDs kaj klasoj. Kaj ni ankaŭ povas rilati al malsamajn aferojn per etikedoj tiel, sed IDs kaj klasoj simple doni nin iuj versatilidad kaj kion specife ni volas raporti al. Do nur ekzemplo. Ni povas, denove, ene CSS dosiero kie ni volas difini iun style-- tiel koloroj, tiparoj, kaj da that-- eblan difini la stilo por korpo. Do kiu difinus lin por la tuta korpo etikedo. Sed tiam ni povas ankaŭ difini stilo por #title. Kaj denove, la hashtag rilatas al nia ID kaj la skalara rilatas al nia klaso. Kaj tiam por la .info, ni povas ankaŭ agordi iuj atributoj. Kaj ankoraux, kiam ni iros reen, ni havis nian klaso nomita info kaj niaj ID titolo. Kaj ni povas vidi ke ni priparolas al ili per #title kaj .info. Spektantaro: Ĉu vi diras hashtag [? adopti mi? ?] MARIA ZLATKOVA: Pardonu? Spektantaro: Ĉu vi diras hashtag [? adopti mi? ?] MARIA ZLATKOVA: hashtag signifas ID, tiel #title referencas al kiom elementoj havas ĉi ID nomita titolo. Kaj tiam la skalara rilatas al klaso. Do .info referencas al tiu elemento ĉar ĝi havas la klaso info. Jes. Publiko: Kial vi distingi ilin en la HTML? Kial vi diras kelkaj aferoj estas IDs kaj certaj aferoj estas klaso? MARIA ZLATKOVA: Tio estas nur ĝis you-- HANNAH Blumberg: Ripetu la demandon. MARIA ZLATKOVA: Ho, pardonon. Kial ni distingas certaj elementoj kiel IDs kaj aliaj elementoj kiel klasoj? Tio estas nur ĉar ĝi estas vere ofte dezajnon elekto. Ĝi donas vin multa versatilidad en estanta kapabla diri mi volas ĉi specifa ero havi ĉi ID ĉar ili volas fari multon kun ĝi, kaj mi nur volas difini stilon, certaj stilo aŭ koloro ajn por tiu ero. Kaj la maniero por fari tion estas nur donanta ĝin ID. Kaj poste se mi volas havi paro de malsamaj eroj havante ke, anstataŭ irante kaj fiksanta their-- anstataŭ fari ĝin etikedo ĉar la etikedo volis starigis la ĉelo por la tuta etikedo por ĉiu tempo ke etikedo estas uzata, Vi povas agordi klaso al plurajn erojn. Kaj tiam simple aliri tiun klason kaj diri Mi volas stiligi tiu klaso tiel. Kaj denove, la klaso povas esti multoblaj malsamaj eroj kaj la ID devas esti unika. Grandaj demandoj. Aliajn demandojn? OK, awesome. Denove, tio estas kiom tiuj selectores estas referencita en CSS, kun etiketo, kun streketo aŭ sen io por asignanta la stilo de iuj etikedo, kiel korpo. Kaj ĉi tie ni havas la ĝeneralajn sintakso de kiel ĉi estas farita. Ripeti iun bonan praktikojn por HTML kaj CSS, ni bezonas, denove, proksime ĉiuj HTML etikedoj ke ni malfermas. Kaj kion ni rekomendas vin fari por via fina projektoj, tiel kiel por CS50 Financoj, estas fari certas ke ĉiuj viaj HTML validigas. Kaj tio estas farita kun la W3 Kontrolilo. Kaj tiam kion ni faris kaj kion ni rekomendas fari disigas stilo, do CSS de markado HTML. Do io ajn kiu rilatas al kiel via paĝo tuj vide aspektas kaj kiel ĝi estas iranta esti modifitaj iru en CSS dokumento. Kaj tiam via markado dirante kiel aferoj estas en rilato al ĉiu alia estas HTML, kaj kiu devus iri interne de via HTML dokumentojn. Demandojn? MHM. Publiko: Kio precize tuj sur la paĝo kontrolada kiam ni validigi la HTML kiu [inaudible] kreis? MARIA ZLATKOVA: Do what-- pensas vi. Do kio precize estas iranta sur kun paĝo kontrolada kaj kial ni bezonas fari tion? Esence, ni bezonas fari tion ĉar multajn fojojn, via retumilo, se vi ne fermos etikedo aŭ io simila, via retumilo estas ankoraŭ iranta Redonu la paĝo kaj eble ankoraŭ funkcias, sed ĝi estas bona praktiko por certigi ke vi, denove, fermis ĉiujn viajn etikedoj, ke ĉiuj viaj elementoj estas la vojo ke ili devus esti, kaj esence ke ĝi estas de la konvenciojn kiuj antaŭdifinita. Estas, denove, nur afero ke vi devus lernante esti farante, kontraste al havado sloppier kodo kaj da tio. Yeah. Ho, pardonon. Mi kredis ke vi levante via mano. Spektantaro: Ne, mi estis ĵus [inaudible]. MARIA ZLATKOVA: OK. Publiko: Dankon. MARIA ZLATKOVA: Kompreneble, dankon. Do denove, okazas en kiom informo estas kopiita kaj komunikadaj modeloj translokigi informo. TCP / IP. TCP nur signifas Transmission Kontrolo Protocol kaj IP rilatas al Interreto Protocol. Kaj tio nur rilatas al la vojo datumoj estas transdonita. Se ni havas iujn datumojn kiuj bezonoj liverita al you-- tiel vi fari peton por certa servilo. Ekzemple, kiam ni provu aliri cs50.net, ni petegas la CS50 servilo kaj ni vidu ke ni volas atingi tiu speco de informoj. Kaj tiam estas bazitaj sur tiu protokolo por kiel tiu informo estas transdonita, la servilo donas informojn revenis al ni, la kliento. Kaj tiam ni povas vidi la informo pri la paĝo kaj tiam uzi ĝin. Tial Hipertextual Transfer Protocol Estas nur alia protokolo aŭ aro de konvencioj kiuj difinas kiel la foliumilon kaj la retservilo devus komuniki. Kaj metanta ĉi ĉiuj kune, HTTP, denove, nur difinas kiel tiu hiperteksta difinita per la HTML kiu ni estis laborante ŝin, kiel ĝi devus esti transdonita al vi kaj ke datumoj kiu estas transdonita al vi alvenas al vi. Kaj tial, se vi infanoj memoras de klaso, ni havis multajn petojn kaj ni havis multajn sintakso por tiuj petoj ke ni estas tuj transiru nun. Do denove, kiam ni sendu peto al servanto, ni devas difini kelkajn aferojn. Do ni devas trovi la tipo de peto ke ni opcio. Kaj cetere, ni havas, ekzemple, GET estas unu tipo de metodo ke ni havas en nia peto. Kaj tiam HTTP / 1.1 estas nur la protokolo kiun ni uzas nuntempe. Plej ofte, tio okazas al la protokolo kiun ni uzas. Do se vi havas demandon kiel tiu en via kvizo. Jen la konvencioj ke ni havas ĝis nun. Backslash rilatas al kia de aferoj ni petas. Tiam, nia gastiganto estas, ekzemple, en tiu kazo, ni provas iri al google.com. Do tiu estas la valoro por gastiganto. Tiu estas tipo de peto kiu povus esti sendita. Kaj tiam tipo de respondo kiu povis estos senditaj, denove, surbaze de tiu protokolo, Estas denove, HTTP / 1.1. Do jen la HTTP versio denove. 200 OK estas nur la statuso kodon. Kaj ke OK estas nur frazon surbaze de tiu statuso kodon. Kaj tiam la Content-Type rilatas al la tipo ke vi rericevos ke estas por ke retpaĝo ke vi akceptu kaj ke via retumilo povas repagi poste. Kaj tiu estas teksto / html. Publiko: Kion 1.1 signifas? MARIA ZLATKOVA: Tio estas nur la versio of-- ho, kion signifas 1,1 signifas? Tio estas ĝuste la versio, la HTTP versio de protokolo kiu ni uzas. Granda demando. Aliaj demandoj? Spektantaro: Ĉu vi povas resumi Content-Type reala rapida? MARIA ZLATKOVA: Por ke Estas kion la servilo. la tipo de information-- kio estas enhavo tipo estis la demandoj. Do kiu estis la tipo de informo ke vi revenas de la servilo, la tipo de datumoj kiuj la retumilo povas tiam redonu ke vi uzas. Spektantaro: Ĉu pri tio ĉi protokolo estas diranta vin fari? MARIA ZLATKOVA: Pardonu? Publiko: Estas ke kion la protokolo diri? MARIA ZLATKOVA: La protocol-- Publiko: --what la Content-Type estas aŭ what-- MARIA ZLATKOVA: La protokolo estas bazita on-- kio estas la protokolo diranta vin? Tio estas nur la vojo ke tiu informo estis liverita al vi bazita sur kia protokolo estis tiu informo atingis transdonita al vi. Ĉu tio sencon ia? HANNAH Blumberg: Vi povas pensi protokolo kiel a-- Mi pensas profesoro Malan priskribis en klaso kiel ia kiel a-- estas kvazaŭ la ekvivalento de homaj handshaking. Diru, kiel, hej, mi peton kaj mi scipovas manipuli HTTP- de versio 1.1. Kaj tiam la servilo diras, ho, okej, I-- kaj ambaŭ ekzistas. Mi ankaŭ scias kiel trakti HTTP / 1.1. Kaj mi tuj donu You Back iun enhavon. En tiu kazo, ĝi tuj esti de tipo text / html. Do ĝi estas speco de nur maniero ilian communicating-- MARIA ZLATKOVA: Estas nur konfirmante ke vi estas ambaŭ sekvante la sama protokolo kaj ke ambaŭ la kliento kaj la server-- tiel via legilo kaj la server-- ia scias kion vi estas parolas kaj havas la konvencio por pasanta en datumoj. Publiko: Do ​​la Content-Type part-- la Content-Type teksto / html-- tio aparta parto de la sama mesaĝo? Aŭ ĉu parto de ni diru, 200? Ĉu 200 informi ilin ke aŭ is-- MARIA ZLATKOVA: 200 diras ĉion iris OK. Kaj tiam enhavo tipo estas speco de aparta parto de la sama mesaĝo, kaj dirante tion, kion mi Revenita havas tiun tipon de teksto / html. Ĝi simple donante pli informo. Havas ion por aldoni? BONE. Ajna alia demandojn sur tio? Imponega. Do iuj aliaj HTTP statusoj ke ni povus akiri krom 200 OK, kiuj ni vidis eble eble amaso estas 403 kaj 404. Do 404, se vi volis aliro ion kiu ne ekzistas. Do ekzemple, en via CS50 Financoj psets, se vi estis faranta quote.html kaj vi ne havas tiun dosieron, sed anstataŭe vi havus quote.php, ke rezultigus 404 Not Found ĉar la dosiero povus ne ekzisti. Por 403 malpermesita, ke referencas al la permesojn. Do se iu dosiero ne estas legebla per la mondo, vi ekhavos 403 revenis. Aliajn kiujn vi eble get-- 301, Movitaj konstante; 302, Trovita; 304, Modifita; 400 Bad Request; kaj tiam Interna Servilo Eraro dum 500 kaj 503, Servo USD. Jes. Publiko: ni atendas enmemorigi ĉiujn tiujn statusojn? MARIA ZLATKOVA: Mi havus ilin sur vian cheat folio. [Ridado] Spektantaro: Ĉu ni atendas scias kion deĉenigas ĉiun? MARIA ZLATKOVA: Cxu ili? HANNAH Blumberg: Por tiuj kiuj ni havas kuri into-- do la demando was-- MARIA ZLATKOVA: Ĉu ili atendis scias kio ĉiu de tiuj statuso kodoj povus esti ekkaŭzita de? Do por tiuj kiuj ni uzis kuris al mi dirus, jes. Do ni sendube vidis 200 OK kaj prelegis en psets. Ni vidis 403, 404. Por aliaj aĵoj? HANNAH Blumberg: mi volus diru 500 ŝajnas justa ludo. MARIA ZLATKOVA: 500, yeah. HANNAH Blumberg: Yeah. Nur havas ĝeneralan senton de kio kaŭzas ilin. Kaj ankaŭ nur tiuj nomojn, vi povas ia kiel fari edukita konjekton kiel al kio fakte kaŭzis ilin. Ekzemple movi konstante, verŝajne la dosiero estis movita permanente. Publiko: Sed en antaŭa ekzameno, estis tiel kial vi supozas ke ni respondu ke? HANNAH Blumberg: Ke valoris nulo punktoj. La demando sur 418 sur la tekruĉo estas teknike HTTP status, sed valoris nulo punktoj. Evidente, vi ne estas atendita scii ilin. Spektantaro: Ĉu reala? HANNAH Blumberg: Estas reala unu, sed ĝi signifas nenion. Estas nur ŝerco. Interreto homoj estas amuza. MARIA ZLATKOVA: Granda demandoj, knaboj. Aliajn demandojn? Publiko: Kio estas Interna Servilo Eraro? MARIA ZLATKOVA: Interna servilo eraro nur signifas ke vi estis nekapabla komuniki kun la servilo ial. Do tio ne nepre iu kiu devas vidi kun la kliento aŭ io simila. Mi ne scias pri iu specifa ekzemplo ke ni trapasis klarigi, sed jes. HANNAH Blumberg: Sure. Do ekzemple, kiel ni diris ke vi laboras pri mashup kaj Google servilo malsupreniris por iuj kialo, potenco outage, ni diru. Tio estus interna servilo eraro aŭ ian of-- ŝatas vin ne ricevas respondon reen. MARIA ZLATKOVA: Yeah. Estas nur kiam vi estas nekapabla komuniki kun la servilo ial ĉar ĝin subiro aŭ alian kialon. Do salto en PHP. PHP, kontraste HTML, estas programlingvo. Kaj ni komencis uzi ĝin ĉar ĝi estas tre utila por ttt disvolviĝo. Ni unue uzis ĝin en CS50 Financoj. Kaj esence helpas nin konduku kune ĉi markado, la dezajno, kaj kiel ni efektive utiligas informon por montri aferojn en retpaĝo. Do PHP mem signifas PHP Hipertextual antaŭtraktilo, do ĝi estas rekursia backnorym per sin. Kaj malfermante etikedoj por PHP ni maldekstren kaj ĝuste sagoj kun la demandosignojn kaj php. Do ni jam vidis aron da gxi. Nun, ni nur tuj iros super kelkaj el la bazaj aferoj pri ĝi. Do kun PHP, variablo nomoj starti kun dolaro signo. Ni ne specifas, denove, ŝanĝiĝema tajpi plu. Samkiel ni faris kun C, ni ne bezonas fari tion. Ni povas fari multajn malsamajn stuff kun variabloj. Ni povas meti ilin kune per concatenando ilin kun la skalara skribmaniero, kiu ni ne povis fari en C denove. Denove, ni havas iom pli versatilidad kun PHP en terminoj de variabloj. Denove, ni ne havas ĉefan funkcion. Kaj PHP estas interpretita kontraste al kompilis, Do ĝuste kiel ni faras por C dosieroj, ni ne devas fari tion por PHP. Sed prefere, la maniero ke la lingvo funkciigas mem, ĝi estas interpretita. Kaj tiam loze tajpita nur signifas ke ni ne devas specifi ŝanĝiĝema tipo kaj la variablo tipoj komprenas je ekzekuto. Publiko: Sed kion vi celas per skalara kunmeto? MARIA ZLATKOVA: Sure. Kiam ni volas meti aferojn together-- do se ni havis iun variablon kiu havis la valoron de 3 kaj ni havis alian variablo kiu havis la valoron de kordoj, Ni povus meti la variabloj kune metante punkto intere ilin kaj concatenando ilin. Aŭ ni povus krei ŝanĝiĝema nomita nomon kaj metis gxin kune per concatenando du kordoj. Do se ni havis ĉenon en duobla citaĵoj kaj ni metos punkton post ĝi, kaj tiam ni plian tendeno, kreus ĉenon entute. Publiko: OK. MARIA LATVIO: Was ke klara? Publiko: Yeah. MARIA ZLATKOVA: OK. Jes. Spektantaro: Kiam vi diras interpretita anstataŭ kompilita, vi parolas vi ne bezonas esti kiel specifa kiam temas PHP kontre C? MARIA ZLATKOVA: Kiam ni diras interpretitaj kiel kontraŭ kompilita, Kion ni celas? Do tio signifas ke ni ne bezonas ruleblan dosierojn kuri PHP. Ĝi signifas ke ĝi kuras kiel ĝi iras. Ĉu tio havas sencon? Iom pli. HANNAH Blumberg: Do vi povas pensi interpretisto kiel alia programo kiu komisias cxar irante linion post linio tra PHP kaj reale ekzekuti ĝin, kontraste por kompilanta ĉion malsupren al duuma. Ĝi ne vere signifas ion pri kiel specifa ni bezonas esti. Ni ankoraŭ bezonas esti precizaj, kaj ne faras forgesu vian punktokomo, kaj certigi vi havos vian dolaro signo, kaj aĵoj tiel. Bona demando. MARIA ZLATKOVA: Yeah. Do linio por linio, kiel kontraste al per C dosieroj, Ni devas fari la tutan finan antaŭ ni povas reale ruli ĝin. Tio estas la ĉefa diferenco. Sed denove, ni ne povas vere esti malpli specifa. Do arrays en PHP reprezenti fakte ordigita mapo. Do arrays asociita valorojn al klavoj. La du manieroj deklari tabelo, bazita sur tiu sintakso, ni povas esti pli eksplicita eldirante ni havas tabelo kaj ni havas ĉi key1 kiu mapas al ĉi value1, key2 kiu mapas value2. Aŭ ni povas simple krei tabelo kiu enhavas la valorojn mem kaj tiam la ŝlosiloj estas komprenita en maniero. Demandojn sur tio? Publiko: Kio estus la klavoj esti en la dua ekzemplo? 0, 1, 2, 3? MARIA ZLATKOVA: Ekzemple, estas nur la klavoj en ĉi fari ne nepre fari diferencon. Ili simple difini kiel vi povas uzi la valoroj ene de ĝi. Do se ni havis foreach buklo en PHP kiu farus nin permesas iri tra ĉiuj la valoroj, ni povas iri tra ĉiuj la valoroj, eĉ se ni havis aŭ ne difinita specifan ŝlosilon ene la paĝaro antaŭa sintakso. Do eĉ kun tiu speco de tabelo, ni povus ankoraŭ havas foreach buklo kiu iras tra ĉiu de la valoroj en la ŝlosilo en la tabelo. Do la sintakso de foreach buklo, ni starti kun tabelo. Ĉi $ arr variablo estas nia reala tabelo ke ni difinis en la antaŭa glitejo kiel valoro kiu laŭvorte iras tra ĉiu de la valoroj, sendistinge de ĉu ni havis ŝlosilan aŭ ne. Kaj tiam ni povas fari ion kun la valoron ene de la foreach buklo. Do denove, se ni havis tabelo kiel ĉi tie created-- tial ni havas la ŝlosilon de foo kaj valoro de trinkejo, la ŝlosilo de rabado kaj valoro de qux-- ni povas havi foreach buklo ke iras tra tabelo kiel ŝlosilo valoro kaj tiam fari ion kun la ŝlosilo kaj / aŭ valoro. Sed ni ja ne nepre ĉiam devas havi foreach maŝojn ke iras tra tabelo kiel ŝlosilo mapo al valoro. Ni povas iri tra la foreach buklo tabelo kiel valoro. HANNAH Blumberg: Kaj mi kredas to-- estis via demando, kio estas la implicita indekso? Publiko: Kinda. MARIA ZLATKOVA: Ho. HANNAH Blumberg: Yeah, yeah. Do resume, se vi ne specifas ŝlosila, ĝi tuj estos 01. MARIA ZLATKOVA: Yeah. Ĝuste kiel kun C, ĝi estas nulo indeksita se vi ne specifi ŝlosilo. Publiko: Pardonu. Ĉu vi povas provi paroli iomete pli laŭte? Mi havas iom da problemon aŭdi ĉion. MARIA ZLATKOVA: Mi tiom pardonpetas. Jes, kompreneble. Do ĉu vi volas min iri super ĉi tien? Aŭ estas this-- Publiko: Tial en la antaŭa slide-- se vi povus nur iri reen por unu sekundo. MARIA ZLATKOVA: Kompreneble, pardonon. Publiko: Do ​​la dua tabelo tie ne ŝajnas havi valoron tajpi, ia [? causalidad. ?] MARIA ZLATKOVA: Dekstra, dekstra. Publiko: Do ​​kiel faras tiun laboron kiam vi diras ke estas ĉiuj aŭ neniu. Al mi, kiu aspektas kiel A [? umo?] jam. MARIA ZLATKOVA: Yeah, yeah. Do denove, ĉi estas ordigita mapo en tiu senco ke estas komprenitaj, ekzemple, la indeksoj tie eblas komprenita kiel 0, 1, 2, 3. Denove, tio estas havi tiujn indeksoj estas nia ekvivalento havi ŝlosilojn mapita sur valoroj. Do se nia ŝlosilo estis 0-- bedaŭras. HANNAH Blumberg: Ne, tie estas kreto tien. Ĝi estas fakte vere bela. MARIA ZLATKOVA: Tio estas granda. BONE. Do denove, $ arr 0 estus la ŝlosilo por la valoro 1. 0 estus la ŝlosilo por la valoro 1. Publiko: Mi bedaŭras. Ĝi estas nevidebla. HANNAH Blumberg: Bone, Nevermind. Kreto estis malbona ideo. Mi prenas ĝin reen. Vi povas pensi de la ŝlosiloj kiel 0 mapoj al la valoro 1. MARIA ZLATKOVA: Yeah. Do tiu estas 0, ĉi tiu estas 1, 2, 3. Tiuj povas esti via klavoj. Vi povas pensi de ilin as-- yeah. Do anstataŭ havanta eksplicita ŝlosilojn, ili estas ia komprenita kiel estante la indeksoj ekde 0. La kreto ne helpis. Yeah. Publiko: Por la foreach buklo, se ni volis vidi la kiel valoro, ĝi estus ĵus aŭtomate indekso al 0? MARIA ZLATKOVA: Yeah. Ĝi irus tra ĉiu de la valoroj. Spektantaro: [inaudible] kiel 0 aŭ estus ke simple fari 0? MARIA ZLATKOVA: Vi havus diri kiel dolaro signo kaj tiam iu variablo nomo, valoro. Spektantaro: [inaudible]. MARIA ZLATKOVA: Pardonu? Publiko: Pardonon, mi estas nur provas memori. Kiel vi farus tion se vi povas fari ĝin aŭtomate indeksado estas ĝuste 0 de? MARIA ZLATKOVA: Do kiel vi farus tion se vi ne havas specifan ŝlosilon nomoj? Publiko: Yeah. MARIA ZLATKOVA: vi simple define-- nur diru mem kiel iu nomo. Do en via psets, vi infanoj eble memoru foreach $ vico kiel $ vicoj, ni kreis samaj ĉi $ vico dirante ni volas iri tra vico kiel $ vicoj. Kvankam ni ne havis tiu eksplicita $ vicoj difinita, ni povus simple iri kaj diru ĉi povas esti nia ŝlosilo, kaj ĝuste iri tra ĉiu de la valoroj. Publiko: Do ​​estas valoro nova variablo ni kreas stoki [inaudible]? MARIA ZLATKOVA: Do estas ne imanente nova variablo. Ĝi estas variablo kiu rilatas al la interne de la tabelo por ĉiu el ili. HANNAH Blumberg: Estas nova variablo nomo. MARIA ZLATKOVA: Yeah, ĝi estas nova variablo nomo, sed ĝi ne inherently-- yeah. Estas nur nova variablo ke vi povas fari tion. Do ĝuste kiel ni faris $ remi kiel $ vicoj, vicojn estis nova variablo nomo kiun ni povus krei en nia foreach buklo. Ĝi ne devas preexist antaŭ tio. Spektantaro: Ĉu vi povas iri tra la logikon por ĉiu, uzante la ekzemplon tie? MARIA ZLATKOVA: MHM. Ho, pardonon. Jen la ekzemplo. Certe. Do por ĉiu tabelo tiel tio signifas iri al ĉi tabelo kiel ŝlosilo value-- ke tuj iri tra tiu tabelo kaj unue iri kaj akiri umo, La ŝlosilo umo kaj la valoro trinkejo. Kaj poste sur la dua ripeto de la por buklo, ĝi tuj iri tra kaj prenas la ŝlosilo Rabado kaj la valoro qux. Kaj tiam vi povas fari ion kun iu el ili aŭ ambaŭ de ili. Publiko: Do ​​la ideo malantaŭ havi ŝlosilan punkton por la valoro, Kion vi finos alirante? MARIA ZLATKOVA: Kio estas la ideo havi ŝlosilan montradon taksi? Estas nur alia konvencio, alia vojo iri tra la tabelo kaj povante aliri ĉu la klavo aŭ la valoro aŭ ambaŭ kaj uzi ilin. Publiko: Kio estas la rolo por la ordigi ke la foreach kuras en? Do se ni devis aldoni elementoj al la tabelo poste, estus tiuj estu la unuaj nomita en la foreach tabelo, aŭ estus, pli poste? MARIA ZLATKOVA: Do kio estas la ordon ke la foreach buklo iras tra tabelo en? Ĝi iras tra la unua elemento al la lasta elemento, al la lasta aldonita elemento. Se vi aldonas elementojn pli poste, ili farus esti accessed-- la unuaj elementoj esti alirita kiel la unua elementoj de la tabelo, kaj tiam vi volus iri tra ĉiu de la elementoj kiel ian ordered-- ne ordigita, sed la maniero kiu ili estis metitaj en la tabelo. Publiko: Do ​​novaj elementoj estas aldonitaj pli poste? Do ili estas added-- ili estos la lastaj en la [? ripeto. ?] MARIA ZLATKOVA: Novaj elementoj can-- esence, kiam novaj elementoj estas aldonitaj, ili aldonis al la fino de la tabelo? Publiko: Yeah. MARIA ZLATKOVA: Mi kredas tiel. Jes. Kaj tiam kun via foreach buklo, post vi aldonis novajn elementojn kaj vi iros tra ili, la novaj elementoj esti accessed-- la nova elemento, se ĝi estas aldonita lasta, estus aliritaj lasta. Publiko: Cxu vi povas nur doni ekzemplon de iu kiu farus [inaudible] kun ion kun valoro kiel [inaudible] aŭ valoro, Ŝatas kiel oni kredus formato kiu? MARIA ZLATKOVA: Sure. Ĉu mi povas doni ekzemplon de kio ni farus kun la valoro? Do kion vi uloj povus esti familiara kun estas ke ni trapasis tabelo kaj esence presita ĉiu de la elementoj, ekzemple, kiel parto de ordigita listo aŭ io tiel. Ĉu tio havas sencon aŭ ĉu ni volas to-- Spektantaro: Ĉu ni povas presi tiujn valorojn ekstere? MARIA ZLATKOVA: Jes, ni povus presi kaj tiam esence $ valoro ĉar ĉe ke specifa valoro, ni estus presi la valoro ene de ĝi. Do se ni estis en nia unua ripeto de ĝi kaj ni presis $ valoro, ni estus videbligi trinkejo. Spektantaro: Ĉu ekzistas ankaŭ por masxojn en PHP aŭ nur foreach maŝojn? MARIA ZLATKOVA: Ekzistas ankaŭ por bukloj en PHP. Kaj ilia logiko estas plejparte la sama kiel kio vi estis uzita. Publiko: Do ​​ĝia valoro estas nula. MARIA ZLATKOVA: Estas kiel la sama. Yeah. Publiko: Mi simple tuj demandi. Do kiam vi deklaru tabelo, vi ne bezonas diri kion grandeco ĝi tuj esti, kio signifas ke vi povas nur aldoni kaj forpreni elementojn [inaudible]. MARIA ZLATKOVA: Yup. Jes. Ekzakte. Kiam ni deklaras tabelo, ni ne bezonas diri kion grandeco estas, tial ni povas simple aldoni elementojn sur ĝin poste ankaŭ. Pli demandoj? Do alportante PHP kaj HTML kune, kion ni seen-- bone, ekzemple, en tiu ekzemplo, ni havas HTML formo kiu havas eniga kampo. Kaj la enmetkampo estas nur nomo kaj tiam ĝi havas Submetu butonon. Kaj kiam vi premas Submit butono, en nia hello.php dosiero, ĉar la metodo por la formo estas atingi, ni povas aliri kiom estas ĉe nomon per tiu ricevos tutmonda variablo kiu is-- la sintakson por ĝi estas $ _GET. Kaj tiam ni povas aliri ajn la Uzanta enigo ene de tiu formo por nomo specifante la nomon de tiu kampo. Aliajn demandojn aŭ ajna demandoj sur tiu specifa ekzemplo? Spektantaro: Kie estas la PHP? MARIA ZLATKOVA: tie. Do tiu estas nia malfermo etikedo por PHP. Publiko: Ho, dekstre. MARIA ZLATKOVA: Jes. HANNAH Blumberg: La? = Estas stenografio cxar tio PHP kaj nur eĥo. Publiko: Ho. MARIA ZLATKOVA: Yeah, pardonon. Mi devus farinta ke klara. HANNAH Blumberg: Print. MARIA ZLATKOVA: Estas nur la funkcio kiu permesas presi iun. Granda demando. Do going-- jes. Spektantaro: Ĉu ne tuj estos tute iom de mano kodigo de PHP kaj HTML sur kvizo 1? MARIA ZLATKOVA: Povas esti justan kvanton de interpretado de PHP kaj HTML, ne nepre kiel grandega kvanto de kodita, Kvankam vi eble devus skribi foreach buklo, kvankam, por buklo. Ajna de la bantoj kiuj nin kovri tie estas justa ludo. Kaj tio estas plejparte ĝin. HANNAH Blumberg: mi pretus. En la sama maniero ke ni petis vin skribi faskon de C funkcioj sur kvizo 0, Mi estus preta fari la sama en PHP kaj Javascript. MARIA ZLATKOVA: Yeah. HANNAH Blumberg: mi dirus a little-- kiel ni ne estas iranta fari vin skribi grandegan HTML paĝo nur ĉar tio estas iomete teda, sed vi povus havi partojn. Tio estas tute justa ludo. Kiel malgrandaj HTML paĝo, tute justa. Publiko: OK. Kiom proksimume en JavaScript tiel? HANNAH Blumberg: Yeah. JavaScript estas justa ludo. MARIA ZLATKOVA: Yeah. Tio tute justa ludo. HANNAH Blumberg: Ni ricevos por ke tiel same 10 minutojn. MARIA ZLATKOVA: SQL, denove, Strukturita Query Language. Ĝi esence nin permesas administri datumoj en rilata datumbazo demarŝo sistemo. Tio simple signifas esence ke ni havas ie stoki iujn datumojn kiuj ni povus voli uzi en retejo aŭ en iu alia formo. Kaj tiam ni havas pridemandojn akiri informoj el nia datumbazo, aŭ enmeti informojn en ili. Multa la komuna ones-- UPDATE, INSERT, ELEKTU kaj DELETE. Do por UPDATE, tiu estas la sintakso por ĝisdatigi datumojn en datumbazo. Ĝisdatigante ĉi tablo vokis tablon dirante SET, ni povas agordi iuj valoroj en ĉiuj vicoj egalan io alia. Do ni povas ankaŭ specifi iuj specifaj Aktualaĵoj ke ni volas modifi kaj kiu povas esti uzanta KIE. Kaj ni povas specifi ke ni nur volas modifi iuj vicoj kie la domo por, se ni havis tabelo de studentoj kaj ĉiuj studentoj havis domon, tiel ni nur modifi iujn valorojn kie domon egalas Currier, ekzemple. Por INSERT, ni povas enmeti certaj valoroj en tablo. Do enmeti en tabelo, kaj tiam la valoroj, kaj tiam en krampoj, ni specifi kiuj taksos vi volas enigi. Do enmeti en tablo, col1 kaj col2, la valoro estas val1 kaj val2. Do tiu enmetas esence nova vico en tablo enhavanta la valoroj 1 kaj 2 sub la kolumnoj 1 kaj 2. Kaj tiam ni tuj iru super rapida ekzemplo de kiel tio aspektas kiel en nia datumbazo iomete. Sed tiu fina query ke mi pensu ni tuj transiros ELEKTU, ĝi nur permesas nin elekti datumojn de tablo eble uzi ĝin poste. Kaj la vojo ni fari tion ĉi estas ni nur stoki ĝin en iu variablo. Kaj tiam ni povas eble uzi ĝin denove. Do ELEKTU stelo signifas elektu ĉiuj. Tio estas nur stenografio Por elekti tutajn. EL tablo kie, ni serĉas por iuj specifaj kondiĉoj, Do kie kolumno egalas io, ekzemple. Se ni nur volis Elekti ĉiuj el tablo, ĉi nur selektas ĉiuj kolumnoj kaj ĉiuj vicoj de tabelo. Kaj tiam DELETE FROM tablo KIE col egalas io, ĉi nur forigas iun remi de nia tablo kie ni havas kelkajn specifajn kondiĉojn. En tiu kazo, la kondiĉoj estas kolumno egalas ion. Do nur rapidan ekzemplo de tiu. Se ni havas tiun rajton tablo tie kaj ni enmeti ĝin en tablo, tiuj valoroj, kiu enmeti novan vicon. Kaj se ni havis auto-pliigo, tiu estus nur pliigo nia IRU de 0 al 1 al 2. Se ni selektas ĉiu de studentoj, ĝi nur revenas ĉiuj kampoj kaj ĉiuj vicoj. Kie jaro estas pli granda ol aŭ egala al 2016, kiu ĵus revenas Hannah kaj mi mem. Kaj tiam se ni nur selektitaj jaro identigilo kaj jaron de studentoj kie la domo estas Cabot House, ke estus, denove, revenas Hannah kaj mi mem. Tiam se ni forviŝita el studentoj kie nomo estas egala al Rob, ke estus forigi la tutan vicon. Kaj tiam se ni starigos la nomo, UPDATE studentoj SET nomo egalas al Daven KIE domo estas egalaj Cabot House, tiu tuj iri al tiuj vicoj kaj tiam ĝisdatigi la nomo. Kaj tiam kelkaj SQLa datumtipoj estas Char, VARCHAR, INT, kaj flosas. Tiuj estas justa ludo. Mi irus denove kaj certigi vin scias kaj havi ilin sur via cheat folio, kion ĉiu el tiuj karakteroj uziĝis por, kio vi uzis ilin sur vian psets, kaj certigi vi konas kaj komforta kun havado elekti de malsamaj datumtipoj en via pset. Jes. Publiko: Kio estis tiu tablo stokitaj? Jes, kie estas tiu tablo stokitaj? MARIA ZLATKOVA: Nu, nun, ĝi ne estas stokitaj. Ĉiuokaze, kie estas tiu tablo stokitaj? Sed ĝi povas esti stokita en SQL datumbazo. Spektantaro: Kie estas la SQL datumbazo? En la komputilo, rete ie, la servilo? MARIA ZLATKOVA: Ĝi povas esti nombro de malsamaj aferoj. HANNAH Blumberg: Ni interfaced kun SQLa tabloj plejparte kun phpMyAdmin. Do ni povus demandi servilo enteni ilin por ni. Ni povus stoki ilin en nia propra komputilo. MARIA ZLATKOVA: Ĝi nur dependas kiamaniere vi volas fari tion por vi mem. Sed ni estis stokante ilin, kiel Hannah menciita, sur phpMyAdmin, kiuj estas ensalutintaj. Kaj tiam la maniero kiun uzas PHP kaj SQL, ni stoki ĝin en iu variablo kion ni konsulti por. Do se ni SELECT ĉiuj EL historio kie user_id egalas la SESIO identigilo, ke selektus ĉiuj vicoj por la specifa persono kiu estas ensalutinta el la historio tablo kaj ordigi ilin en vicoj. A cool afero scii estas ke CS50 query funkcio protektas kontraŭ SQL injekto etikedoj. Tio simple signifas ke ĝi certigas la enigo, kiu venis estas korekta kaj ke la persono kiu eniras la enigo ne provas enigo iu malica kodon al ĉu faligi niaj tabloj aŭ forviŝi ĉiun ene de nia datumbazo. Rapida trarigardo de la Modelo Montri Controller modelon, ĝi estas nur maniero de organizado kaj pensante pri kodo. Estas denove, dezajno paradigmo. Kion tio signifas estas ke ni can-- kaj ĝi estas bona praktiko apartigi malsamajn partojn de nia kodo kaj kion ili kontroli en tiuj tri paradigmoj. Do nia vidpunkto estas plej ofte niaj ŝablonoj, nia aranĝo, la vojo ke ni starigu kiel nia kodo aspektas. Tio plejparte niaj CSS dosierojn kaj la vojo ke ni difinas la dezajno de nia kodo, esence. Nia regilo estas plejparte kion ni estis farante kun PHP dosierojn. Do denove, laborante kun la informo kiun ni havas kaj difinante ke informo estas uzata, kaj tiam pasante tiu informo ĉu sur la vido aŭ la modelo. Kaj la modelo, la vojo kiu ni estis uzante IS estis nia datumbazo, Do kie nia informo stokitaj tiel ĝi havas ie vivi en, kaj iu el la kodo kiu rilatas al la maniero ke ni akiras ke informo aŭ la maniero ke ni ĝisdatigi tiun informon. Do en la MVC modelo, HTTP petoj estas sendita al reta servilo. Tiam, la regilo interpretas peto de la uzanto kaj tiam validigas la uzanto enigo. Ĝi estas laŭvola, ke ni havas la regilo komuniki kun modelo, do io kiel nia datumbazo aŭ alian funcionalidad ke elsendas informon. Kaj poste fine, la controlador pasas informon sur la vido tiel ke ĝi povas esti pruntitaj kaj ke ĝi povas vidigxi al ajna persono aliranta la retpaĝo. Demandojn? Imponega. Do denove, la modelo, lia funkcio, denove, estas persista stokado de informo, administri kaj organizi datumojn. Kaj kion ni vidis ĝis for estas la MySQL datumbazo kaj neniu datumo dosieroj povas uzi. Vidi, prezento de informo al la uzanto, la UI aŭ uzantinterfaco. Kaj la ekzemplo de tiu estas HTML. Kaj tiam ni povus havi minimuma PHP. Do por buklo ke ripetas super datumoj kiuj estas eligataj el estas parto de la vido, kiel kontraste al la regilo. Kaj tiam multajn niajn PHP dosierojn fali en la regilo kategorio. Ĝi nur manipulas uzanto petojn kaj ricevas informojn de la modelo. Saltante en la Dokumento Objekto Modelo, ĉi nur rilatas al la maniero HTML dokumentoj estas organizitaj. Kaj ili estas organizitaj en arbon strukturo kiu havas hierarkion. Do se ni havas aliron al [inaudible] reprezento de la dokumento, Ni povas labori kun la dokumentoj, kiel Ni manipuli celojn esence. Kaj por fari ĉi iomete pli klara, kiam Ni havas multe de niaj malsamaj etikedoj respondi al malsamaj itineroj en nia arbo. Kaj tiam por tiu ekzemplo, ni havas la startanta dokumenton nodo. Ni havas, tiam, nia HTML nodo ke fendetiĝas en kapo kaj korpo. Kapo havas titolon kaj poste titolo enhavas saluton, mondo. Kaj nia korpo nur enhavas saluton, mondo ankaŭ. Do demandojn je ajna de la kion ni kovrita ĝis nun? Kaj se ne, Hannah volo transpreni kun JavaScript. Imponega. HANNAH Blumberg: OK, malvarmeta. Se io venas supre kun PHP aŭ HTML, aŭ iu el la aĵoj Maria kovrita, ni povas ĉiam paŭzi. Ni faras bonan sur fojo, tiel timinda. Kaj ĝuste iri reen vere rapide al tiu, se vi rigardas ĉiun pasinteco ĉijara ekzameno, tiu suprenvenas either-- tie estas iuj HTML, klarigu diagramo. Aŭ tie estas tio diagramo, fari iun HTML, tiel definitive praktiki tion. Kaj tiam tio estas unu garantiita demando kiun vi povas akiri rajton. Malvarmeta. Do ni parolu pri Ĝavoskripto kaj kiel ĝi estas iomete malsama de lingvoj kiel PHP kaj C, la du lingvoj ni vidis antaŭe. Do numero oni, ĝi estas loze tajpita. Tio estas kiel PHP, sed kontraste C. Estas interpretita lingvo. Denove, tio estas kiel PHP, kontraste C Kaj ĉi tuj permesos nin use-- ĝi funkcias vere bele kun retpaĝoj. Ĝi tuj permesos nin manipuli la enhavo kaj kiel aspektas kaj kion ĝi faras. Ni tuj vidos iom de Ajax. Ĝi permesas nin komuniki nesamtempe kun malsamaj serviloj kaj ricevu informon. Kaj jen estas tio, ke vere disigas Ĝavoskripto de PHP kaj C estas ke estas kliento-flanko. Ambaŭ PHP kaj C estas tipe servilo-flanko. Plejparte kaj preskaŭ tute kion ni vidis, almenaŭ en tiu klaso, Ĝavoskripto agas sur kliento-flanko, kiu signifas ke la navegador estas reale respondeca kurante ĝin. Kaj tio signifas ke ni ne bezonas interagi kun la servilo. Do ĝi signifas ke ĝi povas esti multe pli rapida ĉar ĝi estas fakte nur estas Chrome, ĝi estas Safaro, ĝi estas Firefox, kion ajn vi uzu reale kurante via Javascript. Publiko: Kion nesinkrona signifas? HANNAH Blumberg: Ha, kia does nesamtempe signifas? Granda demando. Nesamtempe means-- nu, la enhavo en kiu ni uzas estas, okej, ni kreas retpaĝon kaj ni devas akiri informojn. Do kun la ekzemplo de la mashup, iuj informoj kiujn ni povus voli Estas artikolo titoloj. Nun, ni could-- unu opcion estas fari ĝin sinkrone kaj tio signifas let estas halti, Iri akiri la artikolo, akiri la artikolo reen, kaj tiam repagi, sed ke estus vere malrapida. Tio estus malbona uzanto sperto ĉar vi simple sidas tie atendis ion respondi. Nesamtempe signifas ni daŭrigi rondirante nia afero, pruntante la paĝo, kaj ni sendos ekstere peton Tio estas speco de iranta okazas en la fono. Mi pensas ke ni uzu la ekzemplon en prelego de vokanta Rob kaj dirante: hej, ĉu vi povas rigardi ĉi supre por mi kaj reiri al mi, kontraste al nur mi atendantaj sur la telefono. Do nesamtempe signifas okazas fone eskapis nin en paralela. Granda demando. Ion alian? Granda. Ni salti multe pli en nesinkrona petoj kun Ajaco. Spektantaro: Ĉu JavaScript-- kie faras ĝi falas kun modelo-vido-regilo? HANNAH Blumberg: Granda demando. Kie faras Javascript falo kun modelo-vido-regilo? Hm. Mi supozas ke povas fall-- Do ni ne kutime ŝatas squish ĝin ke paradigma, sed mi supozas ke mi dirus, Bone, do Ĝavoskripto fakte tuj permesos nin kolekti datumojn, interpreti datumojn, efektive plenumi signifoplena aĵoj kun la datumoj. En tiu maniero, ĝi estas tre kontrolo-simila. Sed ĝi estas ankaŭ tuj permesos nin montri aferojn kaj presaĵo aferojn. En tiu maniero, ĝi estas tre vido-simila. Yeah. Do ĝi estas speco de kiel PHP en kie povas ia esti ambaŭ. Bona demando. Ion alian? Bone, awesome. Moviĝante dekstren kune. Do ni vidas ekzemplon de kiel ni povas uzi JavaScript en unu el niaj ttt programoj. Do mi pripensu index.html kun fasko de HTML. Kaj la afero mi volas vin temigi estas tiu skripto etikedo. Kaj tiu diras, OK, mi volas kuri iuj JavaScript kaj tie estas kie vivas. Ĝi vivas en hello.js. Kaj tre tre kiel CSS, ni povis metis JavaScript ene la HTML. Kial povus ni volas disigi gxin? Yeah. Publiko: Easier reskribi? HANNAH Blumberg: Yeah. Ĝi facilas uzi trans malsamaj retpaĝoj. Ĝi tenas aferojn purigilon. Estas nur bona praktiko. Imponega. Bona respondo. Tiel bona, Do tiu tuj esti nia index.html. Kaj poste malsupren tie estas nia malgrandaĵeto JavaScript dosiero. Kaj ĉiuj diras estas atentigo Saluton, mondo. Do kio okazas estas kiam ĉi paĝon renders-- do se vi iros al kiom paĝaro ĉi is-- ĉiuj kiuj okazos Estas ĝi tuj diri, OK, mi estas tuj ekkuros tiu kodo JavaScript. Kaj tiu kodo JavaScript nur diras atentigo Saluton, mondo. Do mi tuj ricevas tiun amika iom popo-up. Cool? Tio estas speco de kiel nia tre unua Ĝavoskripto programo, nia Saluton, mondo. Ni rigardu iomete pli da pri kio la sintakso de JavaScript aspektas. Kaj specife, ni komparu ĝin al C kaj PHP, kiun ni vidis antaŭe. En JavaScript, ni tuj devas var, la nomo de la variablo, kaj tiam lia reala valoro. Kaj ni ne specifi tipo, nur kiel en PHP, sed tre malsimilaj en C. Do ekzemple, se ni volus stoki la valoron 50, en C, ni devus diri, hej, C, mi volas entjero, Mi tuj vokos ŝin I, kaj ĝia valoro estas 50. En PHP, estas iomete pli facila. Ni diras, hey, mi volas variablon nomis i kaj ĝia valoro estas 50. Tre simile, en JavaScript, ni diru hey, mi volas variablo nomis i, ĝia valoro estas 50. Ĉiu posta tempo ke mi uzas Mi, mi ne bezonas skribi var. Estas nur mi de tiu punkto sur. En la sama maniero, en C, kie iam ni diru int i, ni simple uzu i. Cool? Bone. Pasante al bukloj, feliĉe, tiuj preskaŭ rigardas exactly-- Mi opinias ilin ĝuste la sama kiel kio masxojn tuj similos en io kiel C kie via por buklo tuj havos tri parts-- inicialización, kondiĉo, kaj ĝisdatigon. Dum ciklo, ĝi aspektas precize sama. Ni nur doni kondiĉon. Kaj do dum buklo, denove, precize la sama. Ni donas ĝin kondiĉo. Diru mi volis persisti over-- Mi volis fari ion kvinfoje. En C, ni povus skribi por prepar i egalas 0. i estas malpli ol 5, i ++. Nur diferenco, en JavaScript, anstataŭ diri int i egalas 0, ni diras var i egalas 0. Bela. Tio estas la sola diferenco. Demandojn pri ajna el tio? Jes. Publiko: Do ​​en PHP, ĝi estas la sama afero, escepte sed kiel variablo? Aŭ estis ke var ekzemplo? HANNAH Blumberg: Yeah. Do en PHP, ĝi tuj esti dolaro signo. Do ĝi estas tuj $ i egalas 0, $ i estas malpli ol 5, $ i ++. Granda demando. Nun ni parolu pri funkcio deklaroj. En C, kiam ni deklaris funkcio, ni donis al ĝi nomon kaj ni donis gxin iuj parametroj. Kaj komence, ni skribis la tipo. En JavaScript, ĉiuj ni devas fari estas skribi la ŝlosilvorto funkcio kiu diras, hej, Ĝavoskripto, Mi pri difini funkcion. En tiu kazo, ĝi havas nomon sumo. Kaj ĝi prenas du argumentojn, x kaj y. Rimarku ke ni ne zorgas pri la tipoj de x kaj y. Kaj ĝuste kiel C, ni havi tiu ŝlosilvorto reveno, do ni povas fari ion kiel reveno x kaj y. Kaj nun unufoje ni skribis tiun unuan funkcio, ni povas uzi sumon anywhere. Kaj tio estas tute bone. Unu vere malvarmeta aĵo ĉirkaŭ JavaScript kiu estas tre kontraste C estas ke funkcioj povas esti traktata kiel valoroj. Do ni povas fari ion kiel ĉi tie kie supozeble mi kovri ĉi up-- Mi kovris supre la var sum part-- kaj ni ĵus diris funkcio xy egalas reveno x plus y. Tion estus nomita anonima funkcio. Estas funkcio sen nomo. Dum tiu diras funkcio sumo, bla, bla, bla, tiu estus nur diru funkcio. Sed nun eĉ se mi havas tiu anonima funkcio, ke funkcio estas vere nur valoro. Ni povas trakti ĝin kiel valoro. Do ni povas konservi ĝin en variablo la sama Tiel ni povis stoki 50 en variablo. Do ni povas diri, OK, Mi volas variablo, ĝi nomiĝas sumo, kaj estas tiu funkcio. Tiuj du aferoj estas reale tuj fari la ĝustan samon, sed la sintakso estas iom malsamaj kaj speco de amuza noto. Yeah. Publiko: Do ​​vi povus voki funkcio kiu estis anonima dirante, sumo krampoj 2, 5? HANNAH Blumberg: Yeah. Vi povas voki ĉi anonima funkcio en la sama maniero. Vi farus sum (2, 5) ;. Tio estus tute bone. Se mi ne faras var sumo egalas funkcio, se mi nur forviŝita this-- Mi scias ke estas sur mia mano, sed ŝajnigi mi forviŝita this-- tiam ke funkcio estas speco de simple malaperis. Vi neniam povas uzi ĝin denove ĉar vi ne havas nomon por ĝi. Estas malfacile rilati al io vi ne scias kiel nomi. Bona demando. Yeah. Spektantaro: Ĉu vi povas referenci sumon en aliaj lokoj kun la valoro de x plus y? HANNAH Blumberg: Ĉu vi povas referenco sum en aliaj lokoj kun la valoro x plus y? Mi ne estas tute certa kio vi signifas. Publiko: Do ​​via pasinta duon-anonima funkcio estas sumo egalas al tiu anonima funkcio, do sumo estas nun variablo kiu vi can-- HANNAH Blumberg: Dekstra. Do sumo estas la variablo, sed estas actually-- do sumo estas variablo kies valoro estas la funkcio. Do ĝi estas funkcio, kiu estas speco de stranga afero envolvi vian kapon ĉirkaŭe ekde ni estis ludante kun C kaj vi povas fari tion en C. Sed nun ni povas nomi elprenu la sammaniere ni povus nomi sumo tie. Publiko: OK. HANNAH Blumberg: Yeah. Bona demando. Yeah. Publiko: Do ​​ni ne uzu la prototipoj en PHP aŭ JavaScript? HANNAH Blumberg: Ne, ni ne bezonas uzi prototipoj, speciale en JavaScript. Do unu malbona praktiko, kio mi estas dironta ke vi ne devus fari estas vi ne devas skribi var i = 50. Vi povus simple komenci fari i = 50. Kaj simple fari i tutmonda variablo. Ĝi estas tre malbona praktiko Neniam diru eksplicite var i, sed ĝi estas io vi povas fari. La interpretisto ne tuj krias al vi. JavaScript estas sufiĉe similaj, vi povas fari kion vi volas. Ho, pardonon. Ekzistas du. En la oranĝa pantalono. Antaŭen. Spektantaro: Ne, vi iru unue. Spektantaro: Ne, mi nur diras Mi ne havas mian manon supren. BONE. Do se vi estus nomi ke unua fojo, nun resumi, Ni nomas ĝin la sama vojo, x, y, kiel ĉiu ununura tempo? HANNAH Blumberg: Yeah. Do tiuj du esence fari la samon. Publiko: Kaj kio estas la avantaĝo uzi unu aŭ la alia? HANNAH Blumberg No avantaĝon uzi unu aŭ la alia. Mi nur volis montri al vi du malsamajn pecojn de sintakso. Multaj tempoj kie anonima funkcioj fari havi celon estas se la argumento al alia funkcio devus esti funkcio. Kaj ni vidos ke en nur dua kun Ajaco. Do se tio ne faras ajnan senton, stoki ĝin en la malantaŭo de via kapo. Jen kie anonima funkcio povas esti utila ĉar ĝi ne estas vere valoras donante al ĝi nomon ekde ni ĵus tuj uzi ĝin unufoje. Yeah. Publiko: Se x kaj y ŝanĝo poste sur, estos Resume ŝanĝi tiel? HANNAH Blumberg: Se x kaj y ŝanĝo poste, estos Resume ŝanĝi tiel? Do tiu estas fakte mi opinias ion jen, denove, gxi nur sentas tre malsama de C. Tio ne estas valoro. Ĝi ne estas 5. Estas nur la funkcio mem. Tuj, kiam vi donos ĝin parametroj, tiam vi reale kalkuli valoron. MARIA ZLATKOVA: Kaj poste vi povas nomi la funkcion kaj uzi ĝin por akiri iun valoron. HANNAH Blumberg: Dekstra. Ekzakte. Yeah. Publiko: Do ​​se vi nur stoki ĝin en la variablo, kiel var x egalas sumo de du values-- HANNAH Blumberg: Yeah. Do vi povus simple fari var sum egalas sumo de du valoroj. Yeah. Aliajn demandojn? Yeah. Publiko: Sed se tiel konfuzi sumo kaj sumo? Kiel se vi nomas vian variablo sumo, ĉu vi nomas la funkcio sumo? HANNAH Blumberg: Mm. Mm. Se vi faris ion kiel, sumo egalas sumo 2, 5? Publiko: Yeah. HANNAH Blumberg: mi kredas ke estus anstataŭigi la valoro de sumo. Do alia interesa afero pri Ĝavoskripto estas ke ununura variablo povas preni sur faskon de malsamaj tipoj. Malbona praktiko. Vi devus ne fari ion kiel kion vi ĵus diris. Sed en C, se i estas fiksita egala al entjero, Ni scias ke ĝi estas neniam okazos al ŝnuro. Tiu ne estas la kazo en JavaScript. Jes, bona demando. Ion alian? Bone. Farante bone ĝustatempe. Subtenante iras. Bone. Se ni rigardas tabelo en JavaScript, jen rapida ekzemplo de tabelo de kordoj. Kaj tabeloj povas kreski dinamike. Ili ne havas fiksa grandeco same ke ili faras en C. Ni povas aliri la elementoj kun nur la rektaj krampoj. Tio aspektas tre kiel PHP kaj multon kiel C, kie ni povas diri, en tiu kazo, se mi volus la vorton Ĝavoskripto, mi volus ĉu arr kvadrataj krampoj kun 0, 1, 2. Kaj tiam se vi memoras en C kiam ni volis akiri la longo de tabelo, ĝi estis vere ĝena. Sed en JavaScript, súper facila. Ĉiuj ni, .length. Donas la longoj. Jen ĝi. Publiko: Jen simpla. HANNAH Blumberg: Yeah, faras vian vivon tre pli facila. OK, object-- ne ekzistas. Objektoj en JavaScript sento tre kiel structs en C kaj asocia arrays en PHP. Do kion ni vidis Multaj estas JSON, kio starejoj por JavaScript Objekto Skribmaniero. Kaj ĝi estas resume vojo de strukturi niajn datumojn. Do ni vidas ekzemplon, probable la plej facila. Do jen ekzemplo de objekto kiu stokas la klaso, CS50. Kaj kiam mi diras klaso, mi signifas kompreneble Ne like-- yeah, la kurso, CS50. Kaj vi vidos ke ĉio en la objekto tuj esti haltigataj en buklaj krampoj. Kaj ni komencas asocii kampo nomoj aŭ klavoj kun la malsamaj valoroj. Do vi povas komenci al vidi kiel ĉi tiu speco de sentas kiel asocieca tabelo en PHP. Do ni tuj asocias la kampo aŭ la ŝlosila nomo, kompreneble, kun la ŝnuro, CS50. Ni tuj devas instrukciisto. Ni tuj devas TFS. Ni tuj devas nombro de psets kaj ni tuj registris. Kaj unu malvarmeta afero noti estas ĉiuj tio havas malsamajn tipojn, kaj tio estas tute bone. Ĝi estas bone por objekto, fakte, ĝi estas probable atendis por objekto havi kombinaĵon de kordoj kaj nombrojn kaj Booleans kaj tabeloj kaj kion ajn alian vi povus volas havi en vian celon. Kaj rimarku ke ĉi tiuj tuj estos la nomoj aŭ la ŝlosilojn, kaj tiam ni ĵus starigis ĝin egala kun iom dupunkto. Publiko: Kio ĝuste faras JSON signifas? HANNAH Blumberg: Kio ĝuste does JSON signifas? JSON ĝuste staras por JavaScript Objekto Skribmaniero. Estas nur maniero de formatado. Yeah. Estas maniero de formatado niaj datumoj. En C, estas structs. En PHP, estas asociaj tabeloj. En JavaScript, ni havas celojn. Publiko: Do ​​CS50 estas objekto? HANNAH Blumberg: CS50 estas la celo en ĉi tiu kazo. Nun, kiel do ni efektive aliro tiuj kampoj aŭ ŝanĝi tiujn kampojn. Ekzemple, supozi ni decidis ke vi deziris unu malpli pset ĉi semestro. Anstataŭ naŭ, ni estas simple tuj havi ok. Kiel ni ŝanĝu tion? Ho, misfunkcias. Ekzistas du manieroj kiuj ni povas fari tion. Numero oni estas kun la skalara skribmaniero kaj numero du estas kun la kvadrata krampo skribmaniero. Do, ekzemple, se mi volis ŝanĝi aŭ aliro la psets kampo en nia CS50 objekto, kion mi farus estas CS50.psets, tial la nomo de la objekto skalara la nomo de la kampo aŭ la klavo. Tre simile, ĝi estas precize ekvivalenta fari CS50, kaj tiam en kvadrataj krampoj, psets. Cool? Yeah. Publiko: Do ​​estas JSON teknike JavaScript ankoraŭ, kvankam en la psets ni apartigi ĝin [inaudible]? HANNAH Blumberg: Sure. Do la demando estas, estas JavaScript kaj JSON ekvivalentaj? Do JSON estas skribmaniero, esence la vojo ni admonu eksteren objekto de Ĝavoskripto. Do ili ne estas precize la sama. Mi dirus Ĝavoskripto, tie estas celoj en JavaScript. JSON prenas tiuj celoj kaj presas ilin kaj videbligas ilin aŭ stokas ilin en bela maniero. Do JSON estas ne programlingvo lingvo la maniero ke JavaScript estas. Estas nur la skribmaniero por niajn celojn en JavaScript. Yeah. Publiko: Do ​​kio precize [Inaudible] kompletigi? HANNAH Blumberg: Sure. Do tiu fakte nenion faras. Tiu estas nur vojo por aliri. Do diru ni volis ŝanĝi la nombro de problemo aroj de naŭ al ok. Kion ni faras estas fari ion kiel CS50.psets = 8 ;. Jes, granda demando. Tiu estas nur por montri al vi sintakso. Ne vere fari ion utilan. Demandojn? Moviĝante dekstren kune. Do ni rigardu rapidan ekzemplon de kiel Ĝavoskripto funkcias ĉar mi diris al vi ke faras cxiujn tiujn aferojn kaj malvarmeta nin permesas modifi retpaĝoj. Ni fakte vidi ĝin en ago. Do prenu, ekzemple, ĉi HTML dosiero. Kaj la afero mi volas vin por fokusigi estas tiu aparta etikedo, kiu estas butono, kun identigilo search_button. Estas nur sur la paĝo. Do nun ni vidu kion ni efektive povas fari. Nu, supozu kiam vi alklakas tiun butonon, ni volas fari alert-- vi klakis la butonon. Ni vidu kiel ni povas fari tion. Do window.onload-- ĉi ne estas io ke vi vidis en klaso, do ne bezonos scii ĝin por la kvizo. Sed ĉi esence diras, OK, alvoko tiun funkcion kiam la fenestro ŝarĝoj. Do jen nur speco de instalinstrukciojn kodo. Ne multe maltrankvilas pri tio. Kion mi volas vin por fokusigi estas en tie. Ni diru var Searchbutton egalas document.getElementByID search_button. Do kiel vi povus diveni, kion tiu faras estas ĝi diras, OK, iru trovi la elemento kun ID search_button. Kaj nun ni havas tion fakta ero kaj mi estas tuj stoki ĝin en ŝanĝiĝema Searchbutton. Nun ni povas efektive uzi tiun elementon kaj ŝanĝi ĝin, aŭ aliri ĝiajn valorojn, tiaĵojn. Ni povas vere komenci okupi kun la retpaĝo. Do jen mi diras, OK, nun ke mi havas tiun butonon, kiam klakis, nomas tiun anoniman funkcion. Do tiu estas kie anonima funkcioj fariĝi utila. Kaj kion faras la funkcion fari? Nu, ĝi nur nomas ĉi atentigo funkcio kaj ĝi diras, vi klakis la Serĉu butonon. Do kio okazos, se mi iros al kie ajn ĉi HTML vivas kaj mi klakas la butonon, Mi havos imago iom atentigo kiu diras vi klakis la butonon. Do la aferoj temigi here-- document.getElementByID ricevas apartan HTML elemento kun la donita ID. Kaj nun ni povas fiksi Kio devus okazi kiam tiu aparta elemento estas klakis. Publiko: Ni devas meti ĉiuj ke en? HANNAH Blumberg: Pardonu? Spektantaro: Ĉu ni devas fizike kodigi ĉiujn ke? HANNAH Blumberg: Ĉu ni devas fizike kodigi ĉiujn ke? Jes. Tio estas ja speco de ĝenaj? Jen multan kodon. Spektantaro: Vi povus importi ion. HANNAH Blumberg: Dekstra. Ni povus uzi ion. Kaj en particular-- Ho, estas rakontanta min mi devas instrui sekcio. En aparta, ni uzi la bibliotekon jQuery, ĉar tio estis vere longaj kaj vere ĝena kaj mi volas povi simpligi gxin kaj fari ĝin pli mallongaj kaj pli facile skribi. Do jQuery estas JavaScript biblioteko. Do JavaScript estas programado lingvo; jQuery estas biblioteko. Kaj ĝi faras faskon da aĵoj pli facile. Ĝi faras ŝanĝanta kaj iras trans HTML dokumenton multe pli facila. Ĝi faras uzado okazaĵoj facila. Ĝi faras kuraĝigo facila kaj faras Ajax facila. Do ni saltas en du el tion ĝuste nun. Pardonu min. Antaŭ ni, iuj bazaj sintakso. Tiu estas kio plej nomas la jQuery biblioteko aspekti. Ni uzas ĉi dolaro sign-- neniu rilato signalo al PHP, nur inconvenient-- la nomo de seleccionador, streketo kaj tiam agon. Do ni vidas iun konkretaj ekzemploj de tio. Do tiu fakte estas la sama kodo de la okazaĵo glito. Do tiu longa, malbela afero iĝas tiu multe pli agrabla, pli malgranda afero. Do ni provu rompi ĉi malsupren. Ĉi tio diras, OK, jQuery-- ĉi dolaro sign-- jQuery, trovi min la fenestro. Do jen la seleccionador. Kiam ĝi ŝarĝas, nomas tiun funkcion. Do jen ĉio ene. BONE. Ĝis nun, tiel bona? Bone. Nun, jQuery, trovi min la afero kun ID search_button. Kaj kio ĝi estas klakita, nomas tiun funkcion. Kaj tiam tiu funkcia precize samaj. Ĝuste fari iomete de garde, vi klakis la Serĉu butonon. Do estas vere bela. Ĝi vere densigas kaj simpligas nian kodon. Kiel mi scias, ke ĝi estas ID search_button kaj ne kiel klaso search_button? Publiko: hashtag? HANNAH Blumberg: Yeah. Ĉi hash simbolo, estas nur kiel CSS. Do memoru, kun CSS, kiam ni volis elekti iun por ID, ni uzis la funton signo. Kiam ni volis elekti iun por klaso, ni uzas la skalara. Granda. Sencon? Do jQuery laŭsupoze nur fari nian vivon pli facila. Yeah. Publiko: Do ​​mi estas iomete konfuzita kiel al kiel la anonima funkcio laboras. Ĉu vi nomu ĉi anonymouse funkcio, funkcio? Kial nomi? HANNAH Blumberg: Sure. Do funkcio estas nur ŝlosilvorto ke diras, mi estas ronde difini funkcion. Publiko: Oh, OK. HANNAH Blumberg: OK? Kaj tiam ni pasas lin kiel argumento to-- ni prenu tiun internan one-- al la klako funkcio. Do jes, tiel ke la funkcio, tiu anonima funkcio, iĝas fakta argumento. Do memoru en JavaScript, ni povas trakti funkcioj kiel valoroj. Publiko: Oh, OK. HANNAH Blumberg: Yeah. Mi ŝatas ke "io." Nice. Aliaj demandoj? Tempo? MARIA ZLATKOVA: Bonan. Bona. HANNAH Blumberg: Imponega. Kelkaj rapidaj utila jQuery. Mi ne tuj iri tra ĉiuj el tiuj. Tiuj diapozitivoj estos supren rete iomete poste, tiel vi povas kontroli ĝin iomete poste. Sed esence, la ĝenerala mastro tenas kie ni diras, OK, hej, jQuery, jen mia seleccionador kaj tiam jen agon. Kaj vi povas fari tion kiel aliro la valoro de formo, aliri iun HTML, kontrolo kio okazas kiam la uzanto submetas formo, aĵoj tiel. Jes. Publiko: Do ​​en la ekzameno, ni tuj bezonos scii sufiĉe multe de la jQuery dokumentado. Do donita ke ni kopiu / algluu la jQuery dokumentado al nia cheat folio, Kie estas la linio desegnita? Kiel kiom ni bezonas scii? HANNAH Blumberg: Granda demando. La demando estas esence donita ke vi ne povas aliri la jQuery dokumentado dum la testo, kiom devus vi scias? Ni ne atendas, ke vi venu kun iu hazarda funkcio ke ni atendus vin al Google. Aĵoj kiuj estas justa ludo estas mi volus diri nur speco de la ĝenerala sintakso, povante elekti de ID kaj per class-- tiel simple kiel CSS. Kaj tiam la fakta funkcioj themself, ni probable diras. Yeah. Publiko: Do ​​kiam vi elektas per klaso signifus punkto. HANNAH Blumberg: Jes, ĝuste. Bona. Kiam vi elektis por la klaso, ĝi tuj esti dot anstataŭ la funto signo. Jes. Spektantaro: Ĉu vi transiru la diferenco inter elektanta de ID kaj de klaso? HANNAH Blumberg: Sure. La diferenco inter selektado ID kaj elekto de klaso. Do kiel Maria diris iomete pli frue, tie povas esti nur unu HTML elemento kun donita ID, dum klaso, ĝi permesas nin kolekti faskon de malsamaj elementoj kune, tiel aferojn kiuj estas rilatigitaj, sed ne ekzakte la sama. Ĉu tio respondas la demandon? Imponega. Jes. Publiko: Kio se vi havas plurajn kio estas en la sama klaso? HANNAH Blumberg: Kio okazas se vi havas plurajn aferojn estas la sama klaso? Do, ekzemple, se ni estas nur uzante puran Ĝavoskripto, ni devus fari ion kiel document.getElementsByClass. Kaj tiam kion tio vere faras estas revenas tabelo de elementoj. Kaj vi devas aŭ iteracii ilin aŭ trovi kion vi volas. Oni ne tuj doni vi sola ero. Ĝi tuj donu vin tabelo de elementoj. Granda demando. Ion alian? Imponega. Do mi pensas se vi konas ajna jQuery vi vidis en la pset, vi devus esti bona iri. Demando? Ho ne. Mi vere devas instrui. Relax. Glatos. Mi ricevos tie. Ni parolu pri Ajax. Do Ajax tuj estos a-- bone, ni komencu per kio ĝi signifas. Ĝi estas akronimo. Ĝi staras por Asynchronous JavaScript kaj XML. Kaj XML estas esence tuj estos [Inaudible] kun tipo de niaj datumoj. Tamen ni ne vere uzis XML. Anstataŭe, ni simple uzu JSON. Do resume, estas iuj data-- nesinkrona, JavaScript, kaj datumoj, tiukaze, JSON. Kaj nia celo, kiel ni menciis iomete pli frue, estas povi fari peto, havi tiun peton fari lia afero en la fonon, sed daŭrigi Kion ajn ni intencante fari. Kaj tiam kiam tiu informo preta, tiam ni korpigi ĝin. Do ni vidu kion tiu reale aspektas. Kaj tiun, vi devas esti iomete familiara el pset8, tiu kiun ĵus iradis. Do jen validan jQuery funkcio kiu ni eble volas scii about-- ĉi dolaro signo. Do ĝi diras jQuery funkcio, .getJson. Kaj kion tiu funkcio faras estas ĝi prenas URL kaj iuj parameters-- do mi kredas en la kazo de pset8, ĝi estis kvazaŭ, la URL estis articles.php kaj la parametroj estis iri = iuj poŝtkodo. Kaj ĝi diras, OK, petegas tiu URL kun la donita parametroj. Kaj tio nur okazas. Ĝi kiam finas, ĝi estas ĉu tuj sukcese kompleta aŭ ĝi estas tuj malsukcesos. Do tiu estas la ekvivalento de alvoko Rob kaj petu lin fari ion. Kaj poste kiam li vokas reen, li estas aŭ dironta mi faris aŭ mi malsukcesis. Do en la kazo kie vi estas fari, Vi diras, OK, mi estas farita. Kaj poste vi nomas tiun funkcion. En tiu kazo, ĝi tuj estu funkcio kiu prenas kelkajn informojn. La ni kutime zorgas pri estas datumoj, la datumoj kiujn ni fakte revenis kiel rezulto de vokanta .getJSON. Kaj vi povas fari ion kun ĝi. Do en la kazo de pset8, ni montris ĝin kiel listo. Fail tuj esti funkcio nomata se la peto ne sukcesas ial ajn. Kaj en la kazo de pset8, ni nur console.log ĝin. Demandojn sur tio? Yeah. Spektantaro: Ĉu ni povas simple uzi funkcio theta anstataŭ funkcio, textStatus, jqHXR. HANNAH Blumberg: Sure. Do jes, mi kredas en la pset, ni nur vidis funkcio datumoj. Do estas nur the-- jes, OK. Tion ni vidis en la pset. Tio estas tute bone. Tiuj estas nur se vi volis eltiri pli informo, jen tio ke vi povus ricevi de .getJSON. Bona demando. Ion alian? Yeah. Publiko: Do ​​.getJSON estas Ajax? HANNAH Blumberg: OK. Do tiu estas la speco de malfacila parto. Ĝi estas jQuery funkcio kiu permesas vi faru nesinkrona alvokoj. Kaj tiuj nesinkrona alvokoj, jen kio ni estis raportante al kiel Ajaco. Yeah. Tio portis min vere longa tempo por tiri dise kiam mi estis studento. Publiko: Cxu vi povas rediri tion? HANNAH Blumberg: Yeah. Ĉu mi povas diri tion denove? Ĉi .getJSON funkcio, ĝi estas jQuery funkcio. Kaj ĝi tuj fari asíncrona alvokon. Kaj tiuj nesinkrona alvokoj, ni aludanta al tiuj kiel Ajaco. Aliajn demandojn? Ni havas nur kelkaj minutoj. Kaj Maria tuj envolver supren kun sekureco kaj tiam ni tuj esti preskaŭ farita. MARIA ZLATKOVA: Imponega, OK. Do tiu is-- nur prenu paro de sekundoj por transrigardi ĉi. Kaj tiu ne estas io vere granda. Kaj povas iu diri al mi kial? Kio okazas en foo kaj eble povis potenciale rezultigi ion fian, kaj kion tio nomiĝas? Yeah. Publiko: Se la argumento tio pasis en pli ol 12 karakteroj, ĝi povis superflui. MARIA ZLATKOVA: Dekstra. Perfekta. Kio estas ĝi vokis? Vi nur menciis ĝin. Publiko: Buffer overflow. MARIA ZLATKOVA: Yup, buffer overflow. Do tiu estas iu kiun ni referi al kiel buffer overflow. Kaj ni vidas ke interne de umo, ni difinis niajn bufron, c, kun grandeco de 12. Tamen, en ĉefa, tamen ni ne kontroli iamaniere ajn ĉu la argv1-- por ke Estis la dua argumento. Ni ne kontrolu ĉu la grandeco de ĝi estas taŭga. Do se ni havis speciale malica uzanto Kiu metis en iuj argumento kiu estis longa ol 12, kaj tiam potenciale preter la saltegoj de tiu argumento, havis iun plenumeblan kodon ke li provis fari ion malbonan kun ĝi; tiam tiu, kio okazus, estus nuligi la reveno Adreso de la foo funkcio, kaŭzante la funkcio kiam reveninte ekzekuti tiu kodo. Kaj tiam malbonaj aferoj povus okazi. Ĉu tio havas sencon por ĉiuj? Kaj kiel ni povas protekti kontraŭ tio? Ajna sugestojn? Esence, interne de potenciale umo, kiom ni povas kontroli por certiĝi ke tio ne povas okazi? Publiko: Se la grandeco 12 estas preterpasita, vi rezervu aldonan memoron? MARIA ZLATKOVA: Sugesto estas, destini aldona memoro de la grandeco superis. Fakte, ni povas fari ion multe pli simpla ol tiu tiel. Ni povas nur ricevi la kordo longo de la argumento kiu eniris, kontroli se tio estas malpli ol aŭ egala al 12-- kiu estas kion ni volas ĝin esti ĉar ni ne volas ĝi superi la limojn de nia buffer. Kaj tiam se ne, ni povas labori kun la argumento. Kaj tiam se ĝi faras, ni fakte volas al Yello potenciale ĉe la uzanto. Sed jen kiel ni farus tion. Jes. Publiko: Could You klarigi memcpy reala rapida? MARIA ZLATKOVA: Ho, pardonon. Jes. Memcpy prenas ajn is-- bedaŭras, OK. Memcpy prenas kion ajn estas en trinkejo, kio ajn estas pasita sur foo kiel la komandlinio argumento. Do ĝi estas tuj prenos argv1. Argv1 nomiĝas trinkejo tie. Do ĝi estas tuj prenos trinkejo kaj ĝi tuj kopii ĝin ĉ. Publiko: OK. MARIA ZLATKOVA: Kaj ĝi tuj copy-- la tria argumento simple raportas al kiom ĝi tuj kopii en c. Publiko: Ha. Do tiu onies kopiado cxio tiam. MARIA ZLATKOVA: Yeah, ĝi estas kopiado tuto. Yep. Unue, ni certigu la trinkejo estas ne egala al nula ĉar ĝi estas puntero. Tiam ni atingos la kordo longo de trinkejo. Ni certiĝu ke ĝi estas malpli ol aŭ egala al 12. Kaj tiam ĉar ni certigis, ni povas reale memcpy kaj certi ke tio estas bone. Demandojn? Granda. Mi havas du veraj aŭ falsaj demandoj. Povas iun ajn diras min tuj se tiuj estas veraj aŭ falsaj? Jes, estas malvera. Ekzakte. Ambaux estas falsaj. Do uzanta sola pasvorton estas neniam vere bona ideo ĉar se iu scias vian pasvorton, ili povas nur aliri ĉiujn viajn aliajn kontojn. Kaj tiam ikonoj faras nenion certigi sekurecon. Ni devus kutime serĉas HTTPS anstataŭ HTTP kaj la URL. Kaj iuj aliaj tipoj de atakoj kiuj ni jam menciis, ke David menciis en prelegi, SQL injekto atakoj. Ni jam vidis, ke se ni don't-- la CS50 query funkcio certigas ke SQLa injekto atakoj ne povas okazi. Sed se ni ne estis uzante CS50, citaĵo, unquote "en konsulto," ni devus certigi ke la uzanto enigo estas ne fakte iuj SQL query kiuj kaŭzos ĉiuj niaj tabloj al esti gutita aŭ io malbona al okazi kun nia datumbazo. Sesio kidnapo estas alia tipo de atako tio okazas kiam iu malbona persono uzas iu viktimo sesio ID aliri la salutinformon. Do tre bagatela ekzemplo de tio estas kiel se ni havas publikan komputilon, tiam la malbona persono ensalutas kaj tiam ili kuketojn kiuj estas konservitaj. Kaj kuketoj ne ŝanĝas por kunsido. Tiam ni la viktimo iras en kaj tiam ensaluti en la retejo. La kuketoj ne ŝanĝas por certa kunsido. Kaj tiam la viktimo registras en la retejon kaj tiam forlasas. Kaj tiam la persono kiu superas tiam povas ankoraŭ uzi iliajn kunsido ID aliri siajn informojn. Do jen unu ekzemplo de ke povis okazi. Kaj poste mi ne tro maltrankviliĝu pri specifa kodo aŭ io kiel tiu kiu povus kaŭzi ĉi, sed havante ian ideon kio la variabloj implikitaj en tiu estas. Kaj tiam manipulanta kaplinio datumoj estas alia tipo de atako kiu havas David raportis. Kaj ĝi nur rilatas al Kio povas okazi kiam la respondo, la HTTP respondo ene de nia kaplinio ne sanitized konvene. Kaj iu el la fields-- ekzemple, se iu overwrites unu el la kaplinio valorojn por enhavi ion pli ol kion nun contain-- kaj reale enhavas, ekzemple, 200 OK statuso kodon, tiam ili povus potenciale fari malican aĵoj kiam ili ne laŭsupoze. Sed mi ne maltrankviligas tro multe pri la specifa kodo kiu povus kaŭzi ĉi, nur ia kompreno altnivelajn aferojn tiel. Mi pensas, ke estas ĉiuj ke ni devas kovri. Amazing. Iu havas demandojn je ajna el la aĵoj kiujn ni kovris? Jes. Publiko: Do ​​unu ia pli loĝistikaj demando. Estas la enhavo plejparte koncentrita sur aĵoj post kvizo 1? MARIA ZLATKOVA: Do demando estas, estas la enhavo centris ĉefe sur aĵoj post kvizo 1? Do la fokuso estas sur post kvizo 1, kun la escepto ke ni bezonas enfokusigi aferoj pset5 kaj multa la datumstrukturoj ke ni kovris. Kaj ni ne povas diri ke ni povas ignori ion antaŭ ke ĉar surkonstruas tiel. Do temigi ke, plus pset5 materialo kiel inkludante ligitaj listoj, stakoj, atendovicoj, kaj ĉio ke Hannah trapasis. HANNAH Blumberg: Dekstra. Jes, ni travivis tutan C havajxoj tuj en la komenco tre rapide. Sed certigi revizii tion. Reiru kaj spekti la kvizon 0 recenzo. Paro pli loĝistikaj notoj, nur dum ni havas vian atenton. Ni estas irantaj havi oficejon horoj ambaŭ lundon kaj mardon nokto. Ili tuj estos en MD 119. Tio estas ĉio sur la paĝaro, do se vi ne auxskultos, sen ĉagrenoj. MARIA ZLATKOVA: 8:30 al 11:00. HANNAH Blumberg: Yeah, 8:30 al 11:00. Ni estos tie. Ni estos tie por respondi demandojn. Estas bela malvarmon kaj amuza. Vi uloj povas demandi demandojn ke vi havas sur kvizo 1. Kaj kvizo 1 estas sur Merkredo, tiel bona sorto. Se vi havas demandojn, eble veni babilado al ni supren tie unu-sur-unu. Malvarmeta. Danke tiel. MARIA ZLATKOVA: Danke tiel, knaboj. Publiko: Yay. [Aplaŭdo]