[00:00:02] [MUZIKO Ludante] Hannah: Saluton, ĉiuj. Dankon infanoj tiel por eliras en la naŭza vetero por kvizo unu revizii kunsido. Kiel vi uloj scias, kvizo unu estas tiu merkredo. Do ni tuj iru tra faskon da temoj. DAVIN: Hej, mi povas diri io reala rapide? Hannah: Yeah, Davin okazas ekparoli reala rapida. DAVIN: Pardonu. Nur reala rapidaj, se vi havas demandojn pri la kvizo, vi povas iri en linio. Iru al 2014 kvizon unu, pri la kvizo. Ĝi sukcese loĝistiko pri kien iri, kiam iri. Se vi samtempe enskribis, ni estas tuj havos ŝminkon kvizon je 5:30. Aŭ se vi sendas min elfluon, vi havas iun alian aferon. Sed 5:30 estas la konsiston tempo merkrede. Sed se vi havas demandojn, ĝeneralaj demandoj, Enreta havas ĉiujn loĝistiko. Do kontrolu tie unue. [00:00:47] Hannah: Awesome. Do jen la granda lerta de topikoj ke ni tuj iru tra hodiaŭ. Mi iras al kovri ĉiuj de la C uzatajxojn, kiu estas tiu unua kolumno. Do la C stuff ke ni kovrita post kvizon nulo. Komencante kun ligillisto, kiu inkluzivas punteros. [00:01:05] Bone, do ni vidis tiun en la lasta revizio kunsido, tial mi estas ironta tra tiu estas iomete pli rapida. Nur levi vian manon se vi deziras tion malrapidigi aŭ alparoli ion plu. Sed ni uzas ligitaj lertaj ĉar ni komencis en C kun arrays. Kaj arrays estas granda, sed la problemo estas ke ili havas fiksan grandecon. Ligitaj lertaj nin permesus krei dinamike grandeco datumstrukturoj. [00:01:28] Kaj ni havas nian bazaj operacioj, enigi, forigi, kaj sercxado. Kaj ni povas fari insert en plej malbona kazo konstanta tempo se ni nur metis ĝin tuj en la komenco. Forigi kaj esplori, plej malbona kazo big ho de n tempon. Do denove, nur por klaki tra tiuj bildoj, Mi scias nin vidis tiujn lasta fojo, sed ni volas konservi trako de nia ligillisto per konservanta trako de la kapo de nia ligillisto. Ĉar ni scias ke cxiu el niaj nodoj estas nur tuj indikas la proksima nodo en nia ligillisto. [00:01:58] Do tiel estas kiel ni konservi trako. Eĉ kvankam ĉi tiuj estas ne kontinuaj pecoj de memoro, Ni povas trovi ilin per simple sekvante la malsamaj sagoj. Jen nia strukturo por ligillisto nodo. Ni vidis ĉi lasta tempo. Ni havas nian struct nodo. Kaj ĝi havas du propraĵoj. Numero unu, la efektiva valoron ni volas stoki. En tiu kazo, estas entjero. Ĝi eblus kordoj, povis esti char, kion vi volas. Kaj tiam, ni devas konservi trako de la venonta nodo en nia ligillisto. Por ke tuj estos sagon al la sekva nodo. Se vi nur faranta serĉo, kiel mi diris antaŭe, vi devus sekvi vian sagoj suben. Inserción, vi devus konservi trako de kie la resto de via listo estas. Kaj vi volas redirekti la kapo atentigi al nia nova elemento, kiun en tiu kazo estas unu, kaj tiam oni notos al la resto de la ligillisto. Do denove, mi konas ĉi estas iom bito de ripeto de kvizo nulo. Do ni devas esti tre zorgema pri la ordo en kiu ni faras cxi pointings do ni ne perdi spuron de la posta parto de la listo. OK, demandojn kun nur unuope ligitaj listoj? Imponega, OK, malvarmeta. [00:03:06] Do nun, ni tuj iru sur io nur iomete pli komplika, duoble ligitaj listoj. Do krom konservante spuro de la sekva nodo, ni ankaŭ volas konservi trako de la antaŭa nodo. Kaj ĉi tio nin permesas, se ni estos iam dum nia ligillisto, Ne nur iri antaŭen, sed ankaŭ persisti malantaŭen. Ĉar kiel ni vidis en oni sole ligillisto, se ni en iu nodo, kaj subite, ni decidis, vere, mi volas iri al la nodon dekstren antaŭ mi, Vi devus iri ĉiuj la vojo reen al la kapo kaj persisti tra ĝis fondu la nodo vi serĉis. [00:03:35] Do tio igas aferoj iomete pli facila kiel ni estas provante persisti tra nia ligillisto. Sed ĝi admonas nin al konservi trako de unu pli puntero, do unu pli nodo stelo. Bone, do jen venas la amuza parto. Ni intencas praktiki efektivigo forigi por duoble ligitaj listoj. Do ĉi tio estas iu kiu estas tute justa ludo por la kvizo. Ĝi aperis en pasinteco kvizojn. Do definitive esti preta kodigi iomete en C. Ne forgesu, ke per cxiuj tiu amuza PHP kaj Javascript, ni ankoraŭ devos memori fari C. Do refreŝigi sur tiu se ili sentas rusta. [00:04:12] Bone, ni vidu se ni povas fari ĉi tion. OK, malvarmeta. Do ni provos redakti juste tie, kaj espereble tiu iras kiel planita. Bone, ĉu iu volas doni min sugesto pri kiel mi devus komenci? La nura supozo mi estas farado estas ke mi jam havas strukturon difinita, la unu mi montris en la lasta paĝo, sur la lasta slide. Kaj Mi stokante la kapo de mia ligitaj lerta en iuj puntero nomis lerta. Chu iu volas min komenciĝis? [00:04:42] Publiko: Ĉu vi povas krei novan nodo nomi tra la listo? [00:04:45] Hannah: Awesome, do ni iras al krei nova nodo rampi tra la listo. Mi ŝatas tion. Mi simple nomas ĝin puntero se tio estas OK. Kaj kie oni ĉe origine komencis? [00:04:57] Publiko: Probable ĉe la kapo de la listo. Hannah: Bela. Ni volas komenci je la kapo, kiu Mi diris tuj estos stokitaj en listo. Imponega. Ĝis nun, tiel bona. Kaj nun, nia celo estas persisti tra la elenco ĝis ni trovos la nodo kun valoro n, ke ni volas forigi. OK? [00:05:13] Do nun estas la parto kie ni volas persisti tra. Cxu iu povas sugesti vojo persisti tra? [00:05:19] Publiko: Ciklo. [00:05:20] Hannah: Ciklo. Mi amas ĝin. Specife, ni povas provi dum buklo. OK, kaj ni scias ke ni atingis la fino de nia lerta kiam kio? Publiko: Kiam puntero estas nula. Hannah: Kiam puntero estas nula. Belega, mi amas gxin. OK, malvarmeta. Do bedaŭras se miaj baranta krampoj estas ia falante la ekrano. Ni veturigis gxin returne. OK, malvarmeta. Kio sekvas? [00:05:48] Do ni scias ke ni volas forigi la nodo kiu havas valoro n. Do ni trovu la kazo kie ni fakte trovi nian nodo. Do kiel mi kontroli ke? Mi volonte simple dirus se puntero, kaj tiam, se mi volas atingi la valoron ekster puntero, Mi simple arrow n, egalas n, la parametro ke ni donis al ĉi tiu funkcio, la nodo ke ni volas vere forigi. Demandojn ĝis tie? Bone. OK, do nun ni tiros rapidan foton sur la tabulo por visualizar ĉi. [00:06:24] Do diru ke estas nia aminda nodo. Kaj ĝi havas valoron, mi simple diras kvar. Kaj ĝi notas al la sekvanta nodo en nia ligillisto. Kaj nenio estas antaŭ ĝi. Do ni havas nian antaŭa indikante nenion. En ĉi tiu kazo, ni notas al malantaŭen. OK, ĵus subiris miajn ligillisto super tie. Kaj ni havas liston kiu notas al tiu strukturo por komenci kun. Mi tiros pli por pro kompleteco. Akcepti. Mi notas ĉi antaŭen. Kaj mi notas ke unu reen. Oops, sorry. Yeah, atingis tiun malantaŭen. Faru tion refoje. OK, tie ni iru. Bone, got it. OK, jen nia bildo. [00:07:21] OK, do ni volas konsideri du kazoj. La unua kazo estas se la nodo ni volas forigi estas ĉe la tre komenco de nia listo. Kaj tiam, la dua kazo ke ni volas al konsideri estas se ĝi estas aliloke. Mi komprenas ke tio tute senorda desegnante per mia tuta viŝante, sed espereble ni penos fari ĉi klara kun iu kodo. [00:07:40] OK, do ni kovri la kazo kie ni trovis nian nodo, kaj ĝi estas en la tre starti de nia ligillisto. Iu donu al mi sugesto tie kiel al kio Mi devus fari por reale forigi nian nodo? Estas iom malfacila. OK? [00:07:56] Publiko: Vi devas preni la nodo kiu estus antaŭ ol ĝi kaj fari ĝin punkto por la kiu estus post tio, kaj prenu la nodo ke estus post ĝin kaj fari ĝi notas al la nodo antaŭ ĝi. Hannah: Ekzakte. OK, do ĉi tiu estas la kazo where-- ni havas du kazojn. Ni havas la kazon kie la nodo ke ni serĉas estas la fronto de la listo. OK, kaj tiam la kazo ke vi priskribita estas alie, ĉu ne? Estas ie aliloke en la listo. Do vi diris, ni bezonas rigardi la nodo antaŭa, kaj fari la antaŭa nodo fingromontras la sekva nodo. Do diru ni estas klopodante preni el kvin Miaj tre senorda desegno super tie. Ni volas certigi ke kvar nun notas al ses. Kvar la proksimaj punktoj al ses. Kaj ses antaŭaj punktoj por kvar. Tio estas nia celo ĉi tie, ĉu ne? Jen kion mi pensas vi nur diris tie. [00:08:56] OK, do ni bonstata unua peco. Ni faru la havi la antaŭa puntero antaŭa. Do kvar la proksima devus celi kio? Ĝuste, en ĉi tiu kazo, ses. Do ni devus diri montrilo, sekva. OK? Bone. Do ni forigi ĉi malbela bildo kaj provu desegni iomete pli agrabla unu. Ni havas nian liston kapon tie. Kaj kiu notas al la unua nodo en nia ligillisto, kiun ni diris estas kvar. Jen nia dua nodo, kvin. Kaj nia tria nodo, ses. Nur klopodis desegni la ĝusta sama bildo, nur iom pli pure. OK, do kvar la proksima origine notas al kvin. Kvin la proksimaj punktoj al ses. Ses antaŭaj punktoj al kvin. Kaj kvin antaŭaj punktoj por kvar. Do multe pli agrable! OK, malvarmeta. [00:10:04] Do nun, kion ni faris nur tie, ĉi tiu linio de kodo, kiu diras puntero antaŭa apud, do kion signifas tio? Tio signifas, se ni rigardas kvin, iru al la antaŭa nodo, kaj ĝi estas proksima devus nun punkto al kvin la sekva. Do esence, kio tio estas faranta estas ke la viŝante ĉi sagon kaj farante ĝin salti dekstra super kvin. Ĉu tio estas klara? Mi scias, ke povas esti iomete Sketchy. Mi vidas kelkajn kapo kapsignas. Tio estas bona. OK, malvarmeta. Nun, kio estas la sekva paŝo? [00:10:39] Mi reagordi la sekva. Nun, kio alia sago do mi devas ŝanĝi? Ĉi tiu dekstra tie. Ses antaŭa. Ni ne volas ses antaŭa atentigi al kvin anymore. Ni volas ke ĝi indikas kvar. Ĉu tio bildo sencon? Do nun ni povas reale preni kvin eksteren. Do ni bonstata peco. Kion mi faru antaŭ Mi reset ses antaŭaj kvar? Ajna ideojn tie? [00:11:14] Publiko: Malligu la nodo inter ilin per opcio ĝin al NULL? Hannah: Cool. Definitive, nia fina celo estas tuj estos liberigi la nodo. Do ni povas fari tion ĉi tie. Liberaj puntero. Absolute. Sed eĉ antaŭ tio, ni just-- nia celo dekstra tie estas starigi puntero apud antaŭa egala al Pointer antaŭa. Mi scias ĉi estas akiranta kovrita. Bone, ni take-- malvarmeta. Povas ĉiuj vidi ĉi malsupra linio? Aŭ ĉu súper eta? [00:11:50] Do antaŭ ol ni ekzekuti tiu linio tie, ni volas por certigi ke montrilo proksima ne estas nula. Ĉar se puntero proksima estas nula, kia eraro Mi ricevas kiam mi provas referenci nula puntero? Publiko: Seg kulpo. Hannah: A seg kulpo, bela. OK, do se tio ne nula, tiam ni povas restarigi. Kaj ni havas ses punkto denove al kvar. Demandojn supren ĝis tiu punkto? Jes? [00:12:17] Publiko: En via unua se aserto, ĉu vi signifas havi la sagon apud, aŭ [inaudible]? Hannah: Mi signifis puntero sago n. Do esence, kion mi provas fari estas diri, la nuna nodo ke mi estas ripetanta super, la nuna nodo ke Mi rigardas, mi stokante en puntero. Kaj mi volas scii puntero La valoro, kiu en tiu kazo estas n. Kaj mi volas vidi, estas la nodo Mi serĉas cxar la nodo Mi celas forigi? Do jen kial ni havas ĉi tie Pointer n. [00:12:47] Publiko: Do ​​la sago iris al n, vi starigis la valoro kaj stoki ĝin en nodo nomita n? [00:12:55] Hannah: Tiel estas kiel se mi irante tra ĉi ligillisto kaj montrante kvin. Se mi volas atingi tiun valoron, se Mi volas ricevi tiun numeron, 5, Mi devas fari puntero sago n. Cool? Yeah. [00:13:07] Publiko: estas n la nomon de la variablo? Hannah: Jes. Do se ni klaki reen unu slide, n estas la nomo de la valoro ene de la nodo en nia ligillisto. Kaj mi scias, ĝi povas alveni iom iom konfuza ĉar ni ankaŭ alvokas la afero ke ni volas forigi n. Do tie estas kie tiu unu linio devenas. Yeah? [00:13:27] Publiko: Kion vi havas [Inaudible] kiel funkcias? Al puntero [inaudible]? [00:13:35] Hannah: Sure. Ĉu vi parolas about-- kiun linio? Publiko: La lasta linio [inaudible]. [00:13:44] Hannah: Certe, OK. Do ni rigardu la foton en Por provi klarigi ĉi. Mi bedaŭras, por la ĉambro, la demando estis ni povas klarigi montrilon arrow sekva puntero antaŭa. OK, do ni diru ni ĉe kvin kaj nia celo estas forviŝi kvin. Do puntero sekva: kiu el tiuj tri nodoj signifas tiu al ni? Tio alportas nin al la sesa nodo, dekstra? [00:14:10] OK, do nun ni mendas por la ses antaŭaj. OK? Kaj ni recomposición ĉi esti egala al kvar, kiu pasis al esti kvin antaŭaj. Mi scias, estas súper malfacile konservi trako de. Mi vere rekomendas vin tiros bildoj se vi ricevas demandon kiel ĉi. Jes? [00:14:30] Publiko: Ĉu la kialo ke ni ne havas [inaudible]? [00:14:37] Hannah: Ekzakte. Do la demando estis, kial ni ne bezonas kontroli tie? Kial ni ne bezonas kontroli ke montrilo antaŭa estas ne egala al nula? Kaj estas ĉar ni jam disigita el la kazo se la montrilo estas tuj en la komenco. Tre bona demando. Ion alian sur tio? OK, malvarmeta. Do ni finos gxin supren. Ni estas preskaŭ tie. [00:14:59] Do kio se estas en la kapo? Kio se anstataŭ provas forigi kvin, ni fakte volis forigi kvar? Kion mi devas fari? Nu, mi volas restarigi mian kapon por kio? Ekkriu gxin? Publiko: La unu post ĝi. Hannah: Bela. OK, do ni volas listo esti montrante al kiom nia puntero sekva nodo estas. Bona. Kaj nur por kompleteco la Mi agas, ni farus utile kontroli, ke tiel longe kiel nia listo ne estas nula, tiel longe kiel nia listo ne estas malplena, tiam ni volas agordi nia antaŭa egala al nula. Demando ĝis nun? Unu paŝon for from--? [00:15:53] Publiko: Ĉu estus se listo ne egala al nula? [00:15:55] Hannah: Jes, vi estas tute prava. Mi tiom pardonpetas. Estas listo estas ne egala al nula. Imponega. Provante alporti ĉi cxiuj sur la ekrano. Estas speco de falante. Pardonu, knaboj. Kaj laste sed ne malpleje, la tuta ni devas fari estas reveno. Akcepti. Tio estis multe superplenigas en vere rapide. Prenu duan rigardi tion. Diru al mi se vi havas demandojn. Yeah? [00:16:20] Publiko: Se listo estas kapo, then-- atendi, Nevermind. [00:16:26] Hannah: OK, bone. Do ĉi tiu estas se listo estas kapo, ni forigu gxin al kiom ni enmetita. Yeah? [00:16:31] Publiko: Ĉu vi povas klarigi la unua se deklaro denove? Se la montrilon al n estas egala al n? Hannah: Sure. Do nia celo de tiu tuta funkcio estas forigi la nodon kiu havas valoro n. Do se ni trovos, kiel ni estas ripetanta tra nia listo, la nodo kun valoro n, tio estas la unu ni volas forigi. Do ĉiuj la forigo okazas ene de tiu granda se aserto. Ĉu tio havas sencon? Cool. Yeah? [00:16:59] Publiko: Eble vi simple ne povas vidi ĝi, sed ne vi ankaŭ bezonas linion por rulado tra la listo? Hannah: Awesome. Ni konduku ĉi supren iomete kaj ni devos ĵeti ke ĝuste en la fundo. Eble la estraro estus jam estis iomete pli bona ideo. Do kiel mi movi montrilon antaŭen? [00:17:17] Publiko: Pointer egalas puntero plus unu. [00:17:20] Hannah: Bela. Por ke permesas nin daŭrigi ripetanta tra. Akcepti. Publiko: Ĉu ne ekzistos la alia? Hannah: Unu pli da tempo? Publiko: Ĉu ne ekzistas al alia post la granda maljuna se deklaro [inaudible]? Hannah: Kiu parto? Mi bedaŭras. [00:17:38] Publiko: La trairado, ne devus tie esti alie? Hannah: Vi absolute povus havi alian. Ĉar mi havas revenon dekstra tie, vi ne bezonas alian. Sed jes, bona demando. OK, jes? Publiko: Ĉu ni povas elpensi montrilon kiu movigxas tra la elenco prenado sur la valoro de ĉiu nodo en la listo? Aŭ ĉu ni pensu pri ĝi kiel ia ekstera al la listo? [00:18:00] Hannah: ĉu unu estas bone, mi pensas. La maniero mi imagas estas Mi diras, OK, mi estas puntero. Kaj tiu estas mi. Jen mia mano. Mi iras al punkto al la malsamaj kion mi volas persisti tra. Unue mi tuj atentigi al la kapo de la listo. Kaj kiu rakontas min mi estas tuj atentigi al kvar. Kaj tiel mi, estante ekstera al la listo, Mi povas montri al ĉiu de ĉi tiuj elementoj. Do mi pensas pri mi mem kiel puntero. Publiko: Do ​​kiam vi forigas unu el tiuj elementoj, vi forigas vin mem, por tiel diri. Hannah: Ekzakte. Do vi forigas la afero vi indikante. Do en la ekzemplo ke ni vidis, kie ni estas provas forigi kvin, kiam mi montras al kvin, Mi volas forigi la aferon mi indikante. Ekzakte pravas. Jes? Publiko: Ĉu ni atentas al la kazo kie n estas ne en la listo? Hannah: Se n estas ne en la listo? Ĉio tio okazos estas vi iras ankaŭ persisti tra kaj ripeti tra, kaj tiam, vi tuj atingi puntero estante nula, kaj tiam vi tuj estos farata. [00:18:48] Publiko: Faru tiel ni havas redoni ion? Hannah: Ni povus. La vojo ke se difinita ĉi funkcio, mi nur diru ke ĝi revenas vanigas sendistinge. Sed vi povus havi ion kiel reveni entjero, kaj ĝi revenos negativa 1 se ĝi malsukcesas. Iel simile. Demandojn with-- jes? Publiko: [inaudible]? Hannah: Pardonu? Publiko: [inaudible]? Hannah: Sure. Do tio estas la actual-- unufoje ni faris tiun tutan laboron de movi ĉiuj tiuj sagoj ĉirkaŭe, nia tuta celo estis forigi la nodo ke ni serĉas. Do en ĉi tiu kazo, liberigante puntero, se mi montrante kvin, estas kiel viŝi ĉi mezo nodo. Tio estas la libera puntero parto. Tio havas sencon? [00:19:29] Publiko: Do ​​eĉ pensis vi faris ne [inaudible]? [00:19:31] Hannah: Do ni supozis komence ni havis iujn liston kiu estis already-- oni jxetis ĉi kune. Do, por konstrui ĉi lerta, ili must've [inaudible]. Cool. Ion alian kun tio? Jes? [00:19:46] Publiko: Kio se la elenco ne egalas la nulan linion? [Inaudible]? Hannah: Dekstra tie? Publiko: Yeah. Hannah: OK, ĉiuj mi faras Estas mi simple certigi ke antaŭ ol mi provos dereference lerta, antaŭ mi provas aliri la antaŭa, Mi volas certigi ke ne nula tuj kiam mi ne ricevos seg kulpo. Cool. [00:20:08] OK, mi konas ĉi estis tute multon akiri tra. Do ĉi slide estos disponigis al vi. Do vi povas iri tra ĝi pli detale. Jes? [00:20:17] Publiko: Kial la listo [inaudible]? Hannah: Sure. Do lerta vere notas al tiu elemento ĉi tie, la unua elemento en la listo. Do ĝi ne povas havi antaŭan. Jes? [00:20:31] Publiko: Ĉu la puntero punkto al la sama adreso en memoro? Ĉu ĝi notas al la sama adreso en memoro kiel la nodo ke ĝi estas indikante? [00:20:40] Hannah: Jes, ĝi notas al tiu nodo en memoro. [00:20:43] Publiko: Rajto, tiel kiam vi [inaudible]? [00:20:47] Hannah: Iel, jes. Akcepti. Bone, ni movi kune kun tiu. Kaj se vi havas pli da demandoj, Stick Around fine, kaj ni povas iri tra ĝi denove. OK, malvarmeta. Nun, ni preni pluveturi por hash tabloj, provas, kaj arboj, kio vi ricevis la super konanta en p-aro kvin, Speller. [00:21:04] Do hash tablo estas nur tabelo kun unuope ligitaj listoj aŭ duoble ligitaj listoj elspezi ĝin. Do ni havas ian de asocieca tabelo. Kaj kiom ni scias, kiu el tiuj arrays rubujoj por eniri, ni uzu hash funkcio. Do en ĉi tiu kazo, vi povas paroli divenu la hash funkcio estus simple bazitaj sur iuj de la enigo kaj eligo? [00:21:31] Publiko: Letero nombro de la alfabeto. Hannah: Ekzakte. Ĝi simple metas ilin en alfabeta ordo. Ĉio ke startas kun A estas metita en la unuan sitelon. Ĉiu kun B estas metita en la dua sitelo tiel plu, kaj tiel plu. Imponega, OK. Kaj hash funkcio estas ajna funkcio kiu prenas en vorto kaj mi diros al vi, kion Bucket ĝi apartenas en. Do kion eniron en nia tabelo ĝi apartenas en. [00:21:55] Do ĉiufoje mi donos mian hash funkcii unuvorte ĝi devus diri al mi la saman meti cxiun solan fojon. Do se ni uzas la hash funkcio el la antaŭaj slide kien ni ordig de la unua litero de la alfabeto, ĉiu tempo mi donos mian hash funkcio "pomo" ĝi devus doni min reen 0. Do se mi havas pomon meti en mian hash tablo, se mi donos "pomo" en mian hash funkcio, ĝi devus diri, iru metis ĝin en rubujon 0. Se mi serĉas pomo en mia hash tablo kaj mi diras, kie potenco pomon vivas, vi demandu vian hash funkcio. Kaj ĝi diras, iru al sitelo 0. Bone? Demandoj kun kradaj funkcioj? Imponega. [00:22:34] Ĉi tie estas iomete pli detala klarigo de kia hash funkcio povus aspekti. Bone. Nun, la problemo kun hash funkcioj estas en ideala mondo, ni nur havus unu afero en ĉiu sitelo. Sed fakte, ekzistas ne nur unu vorton kiu komenciĝas per A. Jen ne nur unu vorto, kiu komenciĝas per B. Do en tiu kazo, se ni subite get "bero" kaj ni volas meti ĝin en nian hash tablo, kaj ni vidu, ho, ne, banano estas jam ekzistas, kio estas ni Gonna Do? [00:23:03] Nu, ni havas du eblojn. La unua eblo estas lineara sondado, kiu nur signifas iras trovi la proksima malplena sitelo. Iru trovi la proksima malplena tabelo eniro. Kaj ĝuste meti "bero" tie. Do mi scias ke estas supozeble iru kun banano en sitelo unu. Sed ĝuste meti ĝin en rubujon tri, ĉar sitelo tri estas malplena. Alia eblo estas probable kion vi implementar en via p-aro, kie vi havis apartan sinsekvon. Do ĉiu el viaj siteloj, ĉiu de via tabelo elementoj, ne nur tenas unu vortoj, sed reale tenas puntero al listo de vortoj. Tiel ke se vi havis banano en via hash tablo kaj vi subite volis aldoni bero, neniu problemo. Nur aldonu bero en la fino, aŭ al la komenco, de via ligitaj listo. OK, awesome. Demandoj kun hash tabloj antaux ni iru? [00:23:58] Bone. Arboj kaj peras. OK, do tiu estis alia eblo por implementar vortaro. Vi povus esti farita provo. Do estas speciala speco de arbo ke kondutas kiel multi-nivelo hash tablo. Do, vi vidos la foton kie vi havas tabelo ke notas al faskon de arrays ke punkto al aro da matricoj ke punkto al aro da matricoj. Kaj ni vidos precize kion tio aspektus kiel sur futura diapozitivo. Kaj pli ĝenerale, arbo Estas simple neniu datumstrukturo en kiu la datumoj estas organizita en iu hierarkio. Do kie ni vidis ni havas ia kompreno de pinta nivelo, sekva nivelo, proksima nivelo, sekva nivelo. Do ĉi tiu estas probable la plej klara kun iuj specifaj ekzemploj. Do jen nia arbo. Vi povas vidi ke ĝi havas apartajn nivelojn ke ni komencu per tiu radiko nodo, unu. Kaj ni povas iri malsupren tra nia arbo. [00:24:50] A duuma arbo estas aparta tipo de arbo. Kaj la sola especificación por duuma arbo estas ke ĉiu nodo havas maksimume du folioj. Do vi ne tuj vidas ian de tiuj nodoj havas tri aŭ kvar aŭ iu alia nombro de folioj. Kaj tiam eĉ pli specifaj estas duuma serĉo arbo kie ĉiu nodo al la maldekstra de la nodo tuj havas valoron pli malgranda. Kaj cxiun valoron al la dekstra tuj estos granda. Do se vi vidas 44 estas ĉe nia radiko, maldekstren, 11, 22, kaj 33 estas ĉiuj malpli ol nia radiko. Kaj dekstre estas ĉiuj nombroj bigger-- 66, 55, kaj 77. Kaj ĉi tiu propraĵo veras vera je ĉiu nivelo de la arbo. [00:25:37] Do kiam ni iros al 22, 11, kaj 33, ankoraŭ 11 estas pli malgranda ol 22 kaj 33 estas pli granda ol 22. Kaj ĉi faciligante serĉo ĉar se ni serĉas numeron, ni scias precize kion branĉo sekvi suben. Do tiu devus memorigi vin Iomete de duuma serĉo. Yeah? [00:25:56] Publiko: Do ​​kiam vi estas priskribante duuma, vi diris havas maksimume du folioj? Hannah: Hmm. Publiko: Could ĝi havas malpli? Hannah: Yeah. Do ni diru, ekzemple, vi ne havas eĉ multaj aferoj kaj vi ne povis plenigi ĉiujn viajn folioj, estas delikata se oni havas unu. OK? Imponega. Ajna alia demandojn sur arboj? Akcepti. [00:26:16] Reen al nia tries kiel Mi parolis pri iomete pli frue, kiel ni havas ĉi tiuj multi-nivelo arrays. Do en ĉi tiu kazo, ni komencu ĉe la supro. Kaj ni povas sekvi ajnan donita vorto suben. Do diru ni volis serĉi Turing. Ni starti je T, sekvu ĝin malsupren por tabelo kiu enhavas U, kaj sekvu ĝin malsupren ĝis ni atingi tiun malgrandan delto kiu diras al ni, jes, vi trovis unu vorton. Klara sur tries? Io ajn iri tien? Jes? Publiko: Ĉu la simbolo de delto devas okupi spacon ene try? Hannah: Yeah, do tio ne eble eĉ bezonas esti delto. Sed ni bezonas iun manieron diru nia computer-- bedaŭras, por ke ni sciu ke Tur ne estas vorto. Ĉar ni diras, ke ni ne havis tiu koncepto de delta, tiu koncepto de gratuloj, vi trovis vorton, irus tra kaj persisti T-U-R, kaj tiam diri, awesome, mi trovis ĝin! Ĝi devas esti vorto. Sed estas vere ne. Ni volas tutaj Turing por esti vorto. Do ni devas ion ĉe la fino kiu diras, gratuloj, vi trovis tauxga vorto. Publiko: Do ​​se vi havis kiel 26 literoj en la alfabeto, ĉu vi efektive havas 27 klavoj en via provi? [00:27:24] Hannah: Imponega, yeah. Do fakte, mi kredas ke estos sur la proksima glito. Ta-da! Kie se vi havas nodo en via provo, vi estas tuj havos 27 idoj anstataŭ 26. Demandojn kun tiu? Yeah? Publiko: Kial tries prenu tiom multa spaco [inaudible] kiel vi iros? Kial konsiderata [inaudible]? Hannah: Sure. Ni iru reen. La demando estas, kial estas tries multe pli granda, ol iu kiel hash tablo. Do ĉiu el tiuj niveloj, eĉ se ili ne eltiris ĉi tie, vi devas havi ĉiuj 26 karakteroj. Kaj la kialo ke vi ne povas diras, ho, sed kiel por Turing, mi Ne necesas havi iun el tiuj samajn aferojn sur la nivelo de U. Nu, se subite vi volis aldoni iu kiu estis kiel T-H, vi bezonus havi la kapablo de aldoni tiun vorton. Do por ĉiu unuopa litero, vi tuj devos havi faskon da arrays elspezi ĝin. Do vi povas vidi kiel ĝi volas akiri vere granda, vere rapida. Ajna alia demandojn? Bone. Yeah? [00:28:29] Publiko: Kiam estas tries rapida ol hash tabloj? [00:28:33] Hannah: Kiam estas tries rapida ol hash tabloj? Do se vi havus vere malbona hash funkcio. Do diru min kiel, Jen via hash funkcio. Neniu afero kiu vorto vi donu al mi, mi estas ĉiam tuj metis ĝin en tabelo eniro 0. Kaj tiel ni finas kun nur metante ĉiu en unu granda longa ligillisto. Kaj tiel oni lookup tempo prenus ĉe plej malbona n se ĝi estas en la fino de nia listo. Kun try, ni nur devas persisti tra la literoj en la vorto. Do eĉ se ni aldonis faskon pli da vortoj al nia provo, ne lin portus al ni plu trovi apartan vorton. [00:29:09] Ĉiuj ni devas fari estas, por Ekzemple, en tiu kazo, Supozu ke ni serĉas zoom, ni nur devas persisti super Z-ho-ho-M, kvar literoj. Do tio estas nur la longeco de la vorto zoom. Ne gravas kiom da pli da vortoj ni metis en ĉi provo. Ni povas ĉiam akiri ĝin en tiuj kvar ŝtupoj. Imponega. Jes? [00:29:32] Publiko: Tiel [inaudible] estas tabelo, dekstra? [00:29:34] Hannah: Hmm. Publiko: Se vi estas serĉi [inaudible], ĉu vi devas iri tra via tabelo trovi [inaudible]? Hannah: Sure. Publiko: Ĉu tio ne prenos pli da tempo? Hannah: Se Mi iras al diras ke mia tabelo estas ĉiam tuj estos A, B, C, D, E, F, G, bla bla bla, do se mi ĉiam scias, ke tio en la sama ĝusta ordo, se mi ĉiam scias, ke tio laŭalfabete, Mi povas nur diri O estas nombro tiel kaj tiel en la alfabeto. Nur salti al tiu loko. Ĉar rememoru, kun sensilo, ni povas konsenti ajna elemento de tiu tabelo en konstanta tempo se ni scias kie ni serĉas. Yeah? [00:30:09] Publiko: Sur la antaŭa gliti [inaudible] 27 sed 26 por la unua unu. [00:30:14] Hannah: Pardonu? [00:30:15] Publiko: Ĉu ne la unua unu 0, do ĉu ne estus 26? [00:30:18] Hannah: Certe, do kiam ni diras 27, tio estas tuj donos al ni indicoj 0 tra 26. Sed se vi reale kalkuli tiuj el, ĝi tuj estos 27. Bona demando. Ion alian? Yeah? [00:30:31] Publiko: Tiaj estas tries malrapida ol hash tabloj? [00:30:34] Hannah: Tries tuj estos, en teorio, pli rapida ol hash tabloj sed prenu pli da memoro. Yeah? Publiko: [inaudible]? [00:30:45] Hannah, Mi bedaŭras, mi ne aŭdis vin. Publiko: [inaudible]. 0 ĝis 25 donas vin 26. [00:30:54] Hannah: 0 ĝis 25 farus doni al vi 26, dekstre. [00:30:56] Publiko: Kaj poste [inaudible]. Hannah: Rajto. Do la nombro ni preciziganta estas la nombro de aĵoj en nia tabelo. Do se ni havas 27, estas tuj donos al ni 0 tra 26, kiu donos ni salonon por, en tiu kazo, Mi ne inkludante apostrofo. Do ni nun estas 0 tra 25 estas la unuaj 26 literoj de la alfabeto, aŭ ĉiuj 26 literoj de la alfabeto. Kaj tiam tiu lasta afero, ĉe eniro 26, estas tuj estos la ĉeko markon, la delto. Ion alian? Imponega. Perdita mia spaco. OK, malvarmeta. [00:31:31] Do ni jam tuŝis sur ĉi. Sed la granda komerco ekstere inter tries kaj hash tabloj Estas kiu provas havigi, en teorio, konstanta serĉi fojoj sed uzu tutajn multan memoron. Bone, nun ni havas iomete malpli komplikaj strukturoj, kaj ni povas fari per C, kaj ni iru dekstren kune. [00:31:49] Do stakoj, ni vidis tion en lekcio kie vi havi iun kiel pilo de pletoj kie la lasta afero vi metis sur la stako tuj esti la unua kiu despegar. Do tio estas kio vere difinas pilo estas ke la lasta afero vi surmetis tuj estos la unua afero vi forflugos. Kaj la terminologion ke ni uzu se ni tuj metis ion, se ni iras aldoni ion nia stako, ni nomas tion premante. Kaj se ni akceptas ion malproksime, ni nomas ĝin popping. Se ni iras al praktikigi pilo, ni bezonas certi spuri ambaŭ la grandecon kaj la kapablo. Do la tuta numero de elementoj ni povas teni kaj la aktuala nombro de elementoj ke ni tenante. [00:32:27] Kaj tre simile, ni havas vostoj. Kaj la sola diferenco Estas anstataŭ kun stakoj, ni diris la lastan aĵon ni surmetis Estas la unua horo ni demetu. Do kun vostoj, la ni unue metu en tuj estos la ni unue eltiri. Do ĉi tio estas kiel se vi estas efektive tegante ekloĝis en vendejo kaj vi estante helpita, tiam la unua persono en linio devus esti la unua persono esti helpita. Do tio estus vosto. [00:32:52] Do ni bezonas konservi trako de la grandeco, kapablo, kaj estro kiam ni estas tuj prenos ĉiuj super la fronto de la diskutlisto anstataŭ la dorso. Demandojn sur tio? Ajna C demandojn tedante vi? Datumstrukturoj, ia de tiu amuza stuff? Bone, malvarmeta. Do mi devos transdoni ilin al Alison al salti en iuj pli programado. [00:33:14] Alison: Ho, ni jam vidos. Ni vidos kiel bone mi faras tie ĉi. OK, mi tuj provos ekflugos tra ĉi stuff, knaboj. Hannah iris tre en profundo sur ĉiujn ŝiajn aferojn. Mi tuj provos doni vi rapidan ekblovo Superrigardo tiel ke ni povas atingi al Davin kun ĉiuj la amuza JavaScript kaj sekureco aferoj ke eble vi reale volas aŭdi pli pri. [00:33:33] OK, kiel Hannah diris, se vi havas demandojn, Mi iras tro rapide, bonvolu, sciigu min. Mi respondos demandojn kiel necesa. Do por komenci, ni tuj komencu per Probable unu el la unuaj aferoj vi lernis kun retejo programado, permesojn. Do chmod, vi uloj devus vizitis majstroj en tiu kun ĉiuj retejo programado kiu vin fagoj estintaj farante últimamente. Estas esence nur komando kiu ŝanĝas la permesojn aŭ la aliro permesojn de nia dosiersistemo celoj. Kompreneble, por fakte vidi tiujn, se vi estas havante iun problemon kun tiuj dum via problemo aroj, Vi eble uzis ls -l, kiu estas longa, akiri la vido ia kiel tiu, kie vi reale vidi la tutan la permesojn por dosiero. [00:34:16] Kaj vere, ni nur tuj iros tra belaj rapide simple bela tre kio ĉiu el tiuj signifas. Do ni d dekstra tie, kiuj ĝuste staras por la dosierujo. Evidente ĉi tie, ni vidas rwx, kiu estas legebla, konservebla, kaj plenumebla. Tiuj povus ankaŭ esti prezentita kiel bitoj, kiun ni ricevos en en la sekva paĝo. Do ĉiu triada ke ni vidis tie, tuj kiam estas tri triadoj. Ni rwx, r nenio x kaj r nenio x por tiu unua dosiero. Estas ĉi tiu ĝenerala strukturo. [00:34:49] Do ni havas iujn dosierujo. Ni havas iujn uzanto grupo kun tiuj permesoj. Iuj grupo kiu havas tiujn permesojn, kaj mondo kiu havas permeson. Vi povas pensi pri tiuj kiel Triad. Vi povas pensi pri tiuj kiel tri bitoj. Do ili povas teni valoroj ie ajn de 0 ĝis 7, kiu estas kial kelkfoje ni havis vi faras chmod 600 anstataŭ chmod rw ajn. Ni ricevos en ekzemplo tie. Sed esence, vi povas pensi de tiuj kiel ĉu ĝuste rwx, aŭ vi povas pensi pri ili kiel iuj numeron kie tiu unua tien reprezentas nombron inter 0 kaj 7, tiu dua reprezentas nombron inter 0 kaj 7, kaj la tria unu reprezentas nombron inter 0 kaj 7, OK? [00:35:38] r havas valoron de 4. w havas valoron de 2, kaj x havas valoron de 1, kiu estas kial ĉi permeson tie estus chmod 700. Ĉar en ĉi tiu kazo tie, ĝi diras nin esti la unua bito tie estas spegulita sur. Do ni havas 4 por legado. La dua bito estas spegulita en por w, kiu estas 2, do nun ni havas 6. Kaj la tria bito spegulita sur por x, kiu estas 1, do ni preni sep. Kaj kompreneble, nia grupo kaj nia mondo estas ĉiu 0. Do ĉi tiu estas ankaŭ la ekvivalento de chmod 700. Kaj Mi certe provos kompreni la surĵeto inter tiuj. Mi ne certas se ĝi havas supreniru sur kvizon antaŭe, sed estus demando kiun mi povus demandi. [00:36:18] Malmulta iras eĉ plui enen chmod tie, tie estas la tre ĝenerala strukturo de chmod alvokon. Do kompreneble, ni chmod tie. Referencoj, kion ĉi referencas al estas Kiuj ni donas ĉi tiujn permesojn al aŭ kiuj ni preni tiujn permesojn for de. Do ni havas ĉi tie en la permesoj, kiel ni donis al vi chmod alpago x, kiel ni vidos poste. justa signifas doni tiujn specifajn permesojn al ĉiuj. Donu ilin al ĉiuj. Do vi povus tre bone havi u plus x aŭ g plus x aŭ o plus x aŭ multnombraj largxo. Do tiu unua parto estas ĉiam tuj estos referencojn. Kiuj ni donas ĉi tiujn permesojn al, aŭ kiuj ni preni ilin for de? [00:37:03] La dua unu estas la operatoro. Do vi infanoj plejparte pritraktis pli. Tio donas permesojn al Kiu vi donante ilin, dum minus, logike, forigas ilin. Do nenio tro terura tie. Kaj tiam Modoj estas kion nin raportas kun legado, skribo, aŭ ekzekuti. Do alpago x signifas doni plenumebla permesojn al ĉiuj. Kaj tiam, kompreneble, sur kiu specifa dosiero aŭ dosierujo. OK? Cxiu bona kun chmod? Ne tro malbona? [00:37:37] OK, do HTML, iu el vi estas plenaĝiĝos to-- MySpace aĝo? Mi sendis tion al mia sekcio, kaj laŭvorte duono la personoj rigardis min kiel mi estis freneza. Kaj mi estis kiel, knaboj, ni ne estas ke maljuna. Venu. Do hipertekstaj Markup Language, ĝi estas honeste simple maniero por vi por montri iuj aĵoj en la reto. Do ĝi estas markado lingvo. Tio ne estas scripting lingvo. Mankas logiko en ĝi. Ĝi estas simple ŝanĝi la vojo io montriĝas. OK, do tio estas grava distingo fari. Ĝi estas konsiderita markado lingvon, ne estas scripting lingvo. [00:38:12] Do jen ni havas niajn HTML etikedoj. Sur tiu diapozitivo estas verŝajne la plimulto de la kiuj vi devus koni kaj vere komforta kun. Do evidente, ni havas nia HTML tag, kiun designa ke ĉio en inter tiuj du estos HTML. Ni havas kelkajn ligilo, kiu evidente donos vin ligilo al ekstera retpaĝo. Iuj titolo, ene ni estro ĉi tie. Kaj ni havas nian korpon kun h1, kiu estas kaplinio, do ĝi faros lin bela kaj aŭdaca kaj pli granda. Kaj tiam, ni havas kelkajn p, kiu estas alineo. Vi devus probable scias kaj estu familiarizados kun aĵoj kiel kiel vi enmetas bildon, estas ja ekzistas alia kaplinio klasoj? Mi certe estos komforta kun div. Tiuj havas la plimulton de etikedoj ke vi devus koni. Sed kompreneble, kiel kun ĉiu en CS 50, la lerta ne estas ĝisfunda. Do, certigu ke vi ekzercu sur tio. [00:39:08] CSS, do CSS, se iu el vi spekti miaj seminario de du semajnoj, Estas vere simple maniero stiligi la retpaĝo? OK, do ni havos iom da markado lingvo. HTML, kiu atentas nur la teksto kaj kie li havu sur la paĝo. Sed CSS estas vere kion faras bela. Vi povus havi tiujn en via HTML dosierojn, sed kiel ni diskutos poste, Mi estas sufiĉe certa ke potenco esti la proksima glito, ĝi Estas komuna praktiko, kaj reale praktiko kiu ni vere instigas, por vin subteni ilin disigis kiam ni paroli pri MVC kaj ke tutaj paradigmo. Tio estas vere kion tiu manĝas en. [00:39:42] Do CSS estas nur maniero fari aferojn aspekti bela. La vivo ĉi tie, kiel korpo kaj #title kaj .info, tiuj estas nomitaj selectores kaj kion ili faras estas ili selektas specifajn aferojn inter viaj HTML dosiero kaj apliku ajn stilo, ajn speco de aferoj vi volas, por ke specifa ero de via retejo paĝo. Do jen, ni havas fona koloro kaj koloro kaj tiparon familio kiu estas esti aplikita al kio ajn estas en la korpo. Do se ni rerigardis tie, ne aplikas al la titolo. Estus nur aplikas al kio estas en tiuj korpo selectores, OK? [00:40:22] Kun titolo tie, ĉi tiu estas tuj estos la sama afero, la koloro de la teksto esti blua nur tuj tuŝi kio estas ene la titolo selectores. Krom informoj ĉi tie, la teksto estos rozkolora, ajn la info, kio estas gxusta cxi tie. Do la nura afero kiu estus rozo en tiu paĝo estas dato, lundo, novembro 17, 2014. OK, do CSS estas nur maniero havi pli kontrolo over-- jes? [00:40:48] Publiko: Kial vi havas uzi la hash kun titolo? [00:40:51] Hannah: Sekva diapozitivo, promesas! Ni alvenos tie. Do ĉi tiu estas kial ni devas uzi hash. Do selectores transpreni tri ĉefaj formoj ke ni parolas al vi uloj pri. Mi fyou volas lerni pli, tie estas multe tie. Ekzistas granda CSS dokumentado. Tie estas etikedo nomo, kiu rilatas al plenumado kun nur via normala etikedoj en HTML. Do h1, p, div, h2, tiujn varojn de aĵoj. Kaj ni povas nur citi tiujn kiel estas. Do kiel ni vidas tie kun korpo, ĝi estas normala etikedo. Do ni povas simple meti korpon kiam ni parolas en niaj CSS dosiero. [00:41:26] Kun titolo, la tuta kialo ni havas ĉi hash estas ni havas kio estas konsiderita ID. Do IRU devus ĉiam esti unika inter viaj HTML-paĝo por ke kiam vi estas raportante al li, vi scias ke vi nur raportante al unu specifa afero. Do en ĉi tiu kazo tie, kun nia h1 tie, CS 50 revizio kunsido, ni havos identigilo de titolo. Do, por nur aludi al tiu peco de nia HTML, ni faru kradon titolo. Nur per konvencio, IDs estas designados kun hash antaŭ ili. En la sama maniero, ni vidas info tie estas klaso. Kaj tiel klaso kun CSS estas designado kiel skalara klaso aŭ ŝprucas ajn ke klaso estas. Do en ĉi tiu kazo tie, estas info. [00:42:10] Do mi prenu ŝin reen. Ambaŭ estus rozkolora por niaj CSS tie ĉar ili ambaŭ havas klaso de informoj. Kaj en niaj CSS dosiero, ni designado ke io kun klaso de info estos rozkolora. Ĉu tio havas sencon? Jes? [00:42:27] Publiko: Se vi volus fari ĉio en la korpon blankan, kaj tiam vi klopodas fari io en ĝi bluaj, estus kiuj kaŭzas problemojn? [00:42:34] Hannah: Do CSS estas CSS. Do kiom estas turnita malsupro prenos prioritaton. Do se vi faros ion kun korpo, kaj vi faros ĉiun blankan, kaj tiam vi poste ŝanĝi la titolon aŭ vi ŝanĝos la tekston ene korpon, ĝi overwrites tio. Do, frazoj cele la malsupro prenos prioritaton. Jes? [00:42:56] Publiko: Kaj IDs estas solaj, sed klasoj povas esti pli? Hannah: Rajto. Do IDs devas esti sola, kaj klasoj povas referi al kiel multaj aferoj kiel vi ŝatus. Ajna alia demandojn? Jes. [00:43:09] Publiko: [inaudible]. Mi scivolas ĉu tio faras diferencon. Hannah, Mi bedaŭras, Kio estis la demando? Publiko: Estas malgranda "F" kaj kapitalo "F." Hannah: Do la diferenco inter malgrandaj "f" kaj kapitalo "F" ne devus fari diferencon. Do "f" estos 15 ĉu vojo. Cool, ion alian? Cxiu bona, CSS? Jes? [00:43:30] Publiko: Pardonu. Ĉu vi havas klaso kaj IRU? [00:43:35] Hannah: Jes, vi povas. Aĵoj povas havi ambaŭ klaso kaj IRU. Kaj mi forte rekomendas provante tiuj sur via propra. CSS vi lernos bona simple per fari io, tre simpla retpaĝon, streki iun CSS, kaj ĝuste vidante kiel ili interagas. Kaj vi gajnus tre bona, intuicia senco de kiel ĝi funkcias. [00:43:56] OK, ĉiuj bone kun CSS? Vi ĉiuj volas fari bela retejojn kun CSS jam. OK, bonaj praktikoj, ĝuste aferoj teni en menso, aĵoj that-- ĉi estas kial ni albordiĝi vi por diseñador kaj whatnot. Do fermi ĉiujn viajn HTML etikedoj. Do se vi havas malfermitan korpon, tie devus esti proksime korpo. Se vi havas malfermitan alineo, tie devus esti proksima alineo. Kontrolu por vidi vian paĝon validigas. Vi ĉiuj devus esti tre familiara kun tiu de p-starigis sep kun CS 50 financoj kun la W3 Kontrolilo. Kaj kiel mi diris antaŭe, unu el niaj grandaj paradigmoj disigas vian stilon kun CSS de via markado, kiu estas HTML. Kaj tiam, kompreneble, ni havas tiu granda XKCD malsupren tie. Yay, komika! [00:44:38] OK, TCP / IP. Inter tiuj kaj HTTP, esence ili estas ambaŭ protokoloj. Do vi povus simple opinias el ili kiel aro de reguloj kiuj regas kiel aferoj movi sur la Reto. Do transdono kontrolo protokolo, aŭ interreto protokolo, estas simple maniero certigi ke datumoj ricevas kie okazas kaj ke ni scias se ni iam mankas datumojn. Do se vi uloj pensas reen al prelego paro semajnoj kun Davido kie ni havis kvar kovertoj, ili estis cxiuj kalkulitaj kiel unu el kvar, du el kvar, tri el kvar, kvar el kvar, ĉi tiu estas nur aro de reguloj. Ni diris, OK, kiam ajn ni estas sendante pli ol unu paketon, ni tuj kalkuli kun kiu nombro estas kaj kiom da tutaj ke la uzanto devos akiri. [00:45:19] Kaj tiu estas ĝuste diri kiu ajn ricevas la datumojn ĉu ili esti alveninta ĉiu aŭ se io perdiĝis survoje. Ili bezonas peti ĝin denove. Tio estas vere nur aro de reguloj. Tiel estas kiel vi povas pensi pri tio, OK? Kaj ankaŭ, precizigas la haveno, kiu vi uloj can-- Mi scias dum prelego, ili havis tutan liston de havenoj. Sed ni ne havas ilin ĉi tie en ĉi tiu momento. [00:45:41] Do Hiperteksto-Transiga Protokolo estas, denove, estas alia protokolo. Do estas alia aro de reguloj kiuj regas, en tiu kazo, kiel hiperteksto estas trapasita. Do ĝi nur permesas retumiloj paroli al retserviloj. Kaj kiel ni diris ĉi tie, estas kiel homa handshaking. Estas nur maniero por regi kiel la TTT-servilo estas tuj interagi kun via retumilo. Kaj ni havas nur paro de ekzemploj. Ni havas kelkajn petojn tie kie Get estas la metodo. Ni havas HTTP 1.1, kiu estas protokolo versio por ni. Kaj tiam, la gastiganto, kiu estas kiu ni fakte provis aliri. Kaj tiam, kiel vi vidas tie, ni akiri iun respondon kun tiu 200 OK kiel nia HTTP respondo kodo. Ni havas grandan liston Mi iras tiri supren en dua ke vi uloj devus koni. Kaj ni havas ĉi enhavo tipo text / html, kio ĝuste diras kion tipo de datumoj ni ricevas de la servilo, OK? Ĉi gastiganto kaj tiu enhavo tipo estas parto de la HTTP kaplinioj. Vi povas havi kiel malmultaj aŭ kiel malmulte kiel necesaj por la kunteksto de kio vi kontraktanta kun. Kelkfoje vi devos multan informo devenante vian servilon. Eble ili estas petante multe de informoj de la uzanto. Ĝi varias laŭ la kunteksto. Se vi rigardas al CS 50 Studo, restas multa pli sur tio. Sed ni havas multe por akiri tra, do mi iros ĝuste iros antaŭen se ke estas bone kun vi uloj? Cool. Atendu. Mi certe havas ke tuta lerta of-- huh! Mi ne scias, kial tiu estas tuta vojo super tie. Mi pensis mi laŭvorte kopiis ĝi dum mi estis sitting-- [00:47:15] DAVIN: Ĉu vi volas instrui ĝin? Aux cxu vi volas, ke mi instruu lin? [00:47:17] Publiko: Mi pensis ke ni povis nur montru al komenci kun. Mi volas diri, vi povas iri en ilin pli detale, sed mi opiniis faris pli sentita kiam mi ĵus parolis pri HTTP statuses. Do jen la tuta listo. Mi supozas kion okazos estas Davin tuj iros tra ili poste. Sed estas tuta listo, oni antaŭrigardo de la gusto veni. OK, ni tuj blow-- tiu tuj esti PHP kraŝo kurson kiel neniu alia. [00:47:41] Do PHP, hiperteksta antaŭtraktilo, ĝi estas rikura backronym, kio signifas, ke ĝi estis enoficigita ion alian. Kaj tiam ĝi iris kiel ĉi ne vere havas sencon. Do ili ĵus enoficigita it-- kaj estis akronimo, do ili simple faris PHP hiperteksto antaŭtraktilo, kiu nur ne havas sentita. Amuza rakonto. Estas programlingvo. Do, kiom mi elstari ke HTML ne estas programlingvo, ĝi estas markado lingvo, PHP Estas lingvo de programado. Kiel vi scias ĉi estas ĉar estas logiko. Ekzistas conditionals. Ni havas variablo, dum ni havi tion, en HTML. [00:48:12] Bone, do ni havas ĉi tiu malgranda iom tie ke estas kiel gusto de PHP. Do baza, variablo nomoj starti kun dolaro signo. Multaj homoj ŝatas ĝin. Memorigas nin monon. Ĉio granda. Ni ĉiuj volas PHP. Do ni ne specifi variablo estas tipo anymore. Ĝi estas determinita je tempo de ekzekuto. La interpretisto similos, ho, ni simple kuri tra, kaj laŭ la kunteksto, Ni vidos kion tipoj de tipoj tiuj variabloj devas havi. Mankas ĉefa funkcio. Aĵoj estos nur kuri. Vi uloj kun via importado en via lasta p-aro, vi rimarkos tion. Tie ne estis vere ĉefa funkcio. Vi nur skribis kion vi volis okazi. Kaj ĝuste speco de okazita. Do tio estas PHP por vi. [00:48:56] Arrays estas tre similaj. Ni ankoraŭ havas ĉi krampo. Tie, ni havas iu variablo nomata arr, kaj estas egalaj to-- ni havas nian normalan krampo skribmaniero. Kaj ni havas kelkajn ŝlosilo valoro. Kaj la granda diferenco inter C kaj PHP arrays estas ke ni povas havi ĉi associate-- ni povas asocii valorojn al klavoj. Do anstataŭ nur havi tabelo kiu indeksis per la numero aŭ la pozicio de tiu elemento en la tabelo, ni povas reale asocii ĝin kun ŝlosilo. Kie ni povas diri, OK, mi volas ajn valoro estas asociita kun fruktoj. Kaj eble ni havas frukton iris al bananon. Do volonte revenos bananon al ni. [00:49:41] Sed esence, la plej potenca afero pri ĉi estas ke se vi uloj memoras la demo de prelego kie ni esence reverkis Speller en PHP, kaj tio was-- lookup estis vere ĵus volas, Ĉu tio ŝlosilo ekzistas? Tio estas vere afabla de la potenco de ĝi. Vi ne bezonas persisti tra via tabelo. Vi ne bezonas scii kion spaco estas en. Povus esti en la fino aŭ la komenco. Tiel longe kiel vi scias la ŝlosilo ke estas asociita kun la valoro, PHP povas simple kracxos ke valoro Right Back ekstere ĉe vi, okej? [00:50:09] Kaj tiam, ni ankaŭ apenaŭ havi nur ĉar ni povas havi ŝlosila valoro paroj ne signifas vi devas. Vi povas ankaŭ simple kreu normala tabelo kiel ĉi tie, ĉe la malsupro, kie ĝi estas nur unu, du, tri, kvar. Tiuj estas niaj valoroj. Kaj fakte, iliaj klavoj estas la indeksoj. Do la ŝlosilon por tiu estus nulo. La ŝlosilo por du estus unu. Tiel plu kaj tiel antaŭen, krom se Vi eksplicite asignu ŝlosilo, vi povus supozi, ke la valoro estas nur ilia indekso. Ĉu tio havas sencon por ĉiuj? Neniu demandojn? Imponega. [00:50:38] OK, foreach estas maniero persisti tra via arrays. Do ni havas ion ĉi tie, nur la ĝenerala strukturo. Do foreach, la nomon de nia tabelo, kiel ajn vi volas nomi ĉiun elemento en via tabelo, kaj ni povas fari iun kun ke elemento aŭ kun tiu valoro. Do ni havas ekzemplon tie. Ni havas asocieca tabelo kun tiuj du enskriboj kun trinkejo asociante kun foo kaj qux asociante kun Rabado. Do klavoj estas foo kaj Baz. Valoroj estas trinkejo kaj qux. Do foreach, ni havas nia tabelo tie, kiel la ŝlosilo valoro paro. Ĉi tio nin permesas aliri ambaŭ la ŝlosilon kaj valoro. Eble vi volas nur la valoro, en kies kazo vi povus simple imitu arr kiel $ valoro, kaj tiam vi Ĝuste nun alirante la valoro kiel vi persisti tra. Sed eble, por kelkaj Tial, vi volas ke la ŝlosilo, tial mi elektis tiu ekzemplo anstataŭe. Do vi efektive povas manipuli klavon kaj valoro en ĉi tiu kazo. OK? Demando? [00:51:41] Publiko: Se vi volis nur manipuli la ŝlosilon, estus Vi nur devas foreach-- [00:51:45] Alison: Rajto. Do se vi volas manipuli ĝuste la ŝlosilo, vi devus ankoraŭ bezonas tiun sintakso ĉar se vi nur havas arr kiel ion, kiel unu afero, estas tuj supozos vi volas la valoro, ne la ŝlosilo. Do se vi iam simple devas nur ŝatas arr kiel, eble tiu estas kiel $ ero, ĝi tuj supozas ke vi demandas por nur la valoro je ĉiu punkto. Se vi eksplicite volas fari iun kun la ŝlosilo, eĉ se vi ne tuj fari ion kun la valoro, vi bezonas tiun strukturo ke ni havas ĉi tie kie vi eksplicite demandas tiel por la ŝlosilo kaj la valoro. Granda demando. Ion alian? Cool. [00:52:27] Bone, PHP kaj HTML. Ho, ni estas reen al p-starigis sep denove. Do tiu devus rigardi iom familiara. Do tiu estas iuj simplaj HTML formo kiu havas iujn enigo nomon saluton. Kaj ni vidos ni havas nia metodo de akiri. Kaj se ni memoras el nia p-aro, kiam tiu formo estas prezentita, sendas tabelo nomita $ _GET kiu havas ĉiuj tiuj enigoj aŭ variabloj de la formo kiu estu manipulita en nia PHP. Do en ĉi tiu kazo, la uzanto metus en ilia nomo. Ili enigu ĝin. Kaj ni vidas, ke ni atingos iun tabelo tie. Ni havas niajn Get tabelo. Kaj ni aliru la nomo. [00:53:11] Do kiu diras, OK, donu al mi la valoro kiu estas asociita kun nomo, enoficigos esti la ŝlosilo tie. Kaj ke mapas rekte al kio ni diris nian input nomo estas. Do tiu donis al vi la ŝlosilon al kio tuj estos en via tabelo tie. Ĉu tio havas sencon por ĉiuj? Jes? [00:53:32] Publiko: Ĉu la nomo en Get referi al la purpura linio en [inaudible]? [00:53:36] Alison: Ĝi nomas tiun ĉi tie. Do tiu kampo ĉi tie, ĝi raportas al ĉi nomo tie. Do ĉi tio povus esti estinta enoficigita kiel Telefonnumero, aŭ kion ajn. Tiu nomo fakte diras, kion vi nomante tiu kampo? Kiel vi iras al referi al ĉi tiu kampo? Kaj tiu nomo estas vere ŝatas, ni estas dirante tiu kampo estas nomita nomo. Tiel estas kiel ni tuj aliri gxin. [00:53:59] Publiko: tiom mi ŝatas, input nomo egalas Bob, kaj- [00:54:02] Alison: Dekstra, tiam vi akirus Bob tie malsupre. Trafe. Ĉiuj malvarmeta? Bone, do GET kontre POST, tiuj estas la du ĉefaj manieroj ke ni pasas datumojn en HTTP peto. Vi ĉiuj devus esti vidita ambaŭ de tiuj espereble. Do kun bonstato-informoj estas pasita tra la URL. Do se vi iam faras Google serĉoj, Youtube, vi verŝajne rimarkos demandosigno. Kaj tiam, ĉiuj vortoj ke vi simple meti en tie. Kaj POST pasas la datumojn en la HTTP cxefteksto. Do kontraste GET, vi ia konsideri ke la datumoj estas kaŝita de la uzanto. Sed kio estas vere Gravas kompreni estas ke tiu estas ankoraŭ same necerta kiel akiri. La analogio Mi ŝatas uzi estas se Vi havas vian bankokonton nombro kaj vi skribas gxin ekster koverton, tamen tio estas tre necerta. Se vi estus skribi ĝin sur pecon de paperon kaj metis gxin interne de la envolvaĵo, ĝi estas ankoraŭ vere nesekura ĉar ĉiuj vi devas fari estas malfermi supre kaj rigardu la realan enhavon de la mesaĝo por vidi tion. Do tiu estas "kaŝitaj" kaj homoj kiel al kredas ke estas sekura, sed estas vere ne. Kaj mi certas Davin volo eniras kiu pli, eble. Sed estas grava distingo fari kaj iu vere bona por kompreni. [00:55:15] OK, SQL, strukturita Query Language. Ĉiuj taskoj ni estis vidintaj ĝis lastatempe! Do ĝi estas esence nur desegnita, evidente, por la demarŝo de datumoj. Vi ĉiuj havis multajn spertojn kun tio en viaj tabloj kun PHP MyAdmin. Kaj estas kvar komunaj pridemandojn ke ni volas ke vi infanoj scii. Do tie estas ĝisdatigo, insert, elekti, kaj forigi. Do, certigu ke vi scias tiujn vere bone. Ni intencas iri tra ili vere rapide. [00:55:40] Do ĝisdatigi, vere, kiel kion Vi povus pensi faras, ĝi ĵus ĝisdatigas datumojn en via datumbazo. Do ni havas iujn ekzemplo tie. Tiu estas la ĝenerala strukturo de ĝisdatigo mendo. Do ni ĝisdatigas la tablo ke ni parolas. Kaj ni volas agordi iujn valoroj, certaj kolumnoj egala al specifaj valoroj. Do ĉi nur ĝisdatigas la tablo, ŝanĝante valoroj en ĉiuj vicoj en tiu kazo. Do en ĉi tiu malsupren tie, reala Ekzemple, ni havas insert-- bedaŭras. Tio slide antaŭis sen mi rimarki. [00:56:17] Do ĉi ĝisdatigoj tablon starigu col1 egalaj al val1 kie domo egalas "Currier." Kio ĉi tiu faras estas ĝi nur ŝanĝiĝas, ĝi nur Ĝisdatigas tiujn valorojn en specifaj lokoj. Do en tiu unua unu, ĝi ŝanĝas tiujn valorojn por ĉiu en via tablo, OK? Ĝi estas tuj ŝanĝos ĉi kolumno por ĉiu ununura eniro, por ĉiu unuopa vico. Sed ĉi kie vi povus rigardante ĝin kiel eliminatorias. Do ĝi estas nur tuj ŝanĝos ĝin en tre specifaj lokoj. Do en p-starigis sep, kiam vi eble ĝisdatigis la kvanto de cash ke via uzanto devis, vi probable havis iuj kie ID egalas kunsido ID, dekstra? [00:56:53] Ĉar vi ne volis ŝanĝi la kvanton de mono por ĉiu persono kiu estis uzante vian retejon. Ĉu vi volis ŝanĝi ĝin por unu specifa persono, tiu persono estas kiu ajn estis uzante ĝin tiutempe. Dekstra? OK, do enmeti, insert certaj valoroj en tabuloj. Ĉi tio estas kiel kiam vi estas kreante marko nova uzanto. La ĝenerala strukturo tie estas enmeti en iu ajn tablo ni parolas. Valoroj, estante la valoroj kiujn ni fakte volas enigi. OK, tiel kiel ni vidas ĉi tie, ni ili enmeti en tablo. Tio estas specifa kolumnoj kun ilia respondis valoroj. Do tiu diras, insert nova vico enhavanta valoroj val1 kaj val2 sub tiujn specifajn kolumnoj. [00:57:33] Do eble vi nur deziras plenigi el duono la aĵojn en tiu vico. Tion ĉi parto ĉi tie permesas fari. Ĝi permesas reale determini kiu parto. Jes? [00:57:44] Publiko: Can vi nur [inaudible] ĉeloj en la vico [inaudible]? [00:57:52] Alison: Se vi nur plenigi certaj partoj de via vico, la resto de tiuj ĉeloj estas ĝuste malplena. Tiel longe kiel vi permesas al ili estu malplena, ĝi ne estas problemo. Se vi provas konsenti ili, estas tuj revenos iun malplena elemento. Sed estas grave scii ke en certaj tabloj, Ili devas rajti esti nula. Vi eble kolizios kun problemon dum via p-aro ĉar ni ne devas restigi iom de via valoroj esti nula. Sed vi povas specifi laŭvola valoro en via tablo. [00:58:26] OK, unuaranga, tiel ĉi estas simple maniero de prenanta specifajn datumojn de tablo en iuj ensalutilo ke vi deziras. Do unuarangan stelo de tablo kie col egalas ion signifas nur, donu al mi ĉiujn datumojn asociitaj kie tiu specifa kolumno estas vera. Do la stelo en tiu kazo volas resendi la kompletan vicon al vi, okej? [00:58:49] Kaj tiam, en tiu kazo, elektu stelon de tablo ĝuste donas vin la tuta tabelo. Kaj tiam, forviŝi evidente, ĝi nur forigas la vico de la tabelo. Do forviŝi el tablo, ajn tablo ni estas referenco, kie iuj specifaj ensalutilo aŭ iu kondiĉo estas vera. Jes? [00:59:07] Publiko: Demando. Kial vi uzas duobla citaĵoj, kaj ĉu vi do citiloj aŭ sola citaĵoj, faras ĝi fari diferencon? [00:59:13] Alison: Duoblaj citiloj aŭ apostrofoj ne fari diferencon en SQL. Mi pensis ke mi vidis alian demandon. Jes? [00:59:20] Publiko: ĉu ne tuŝi kion ricevas eskapis el la informpeto? [00:59:25] Alison: Rob? [00:59:27] ROB: Kion vi aludas per forigxis el la informpeto? [00:59:31] Publiko: Se iu havas sola konsulto en la formo of-- [00:59:36] ROB: Se iu devis metis sola citaĵo en, tiam tiel longe kiel vi sanitizing via enigo, do ne gravas. Sed se vi uzas sola citaĵo kaj vi estas malĝuste eskapi vian enigoj, tiam jes, ili bezonas meti sola citaĵo por rompi via kodo. se vi uzas duoblan citaĵoj, ili bezonas meti duoblan citi rompi vian kodon. Sed tiel longe kiel vi eskapos tion korekte, ne gravas. Ĝi simple tuj estos tradukita al la ĝusta simbolo ĉiuokaze. [00:59:59] Publiko: Kion eskapo signifus? Alison: Nu, kiel sanitizing kaj eskapo. La ekzameno, kiun ni havas, la granda XKCD komika, ke ili elsxiros kie vi havas, oh-- ROB: Estas la lasta slide. Alison: Estas la lasta slide, vere? Ho mia dio. Tie ni iru, perfekta. OK, do esence, vi povas injekti ion en tiun SQL query kie rompas vian kodo, aŭ kiel David montris en klaso, se ni havas iun sola citaĵo 1 estas 1 kaj se en nia kodo, ni simple rekte kopii ke en kaj ni havos finaĵon sola citajxo, kio okazas estas ni preni iuj esprimo kiu taksas al vera ke volo lasu iun eniri nia datumbazo kaj akiri datumojn kiuj ni ne volas ilin akiri. Do sanitizing la eniroj nur signifas certigante ke ni eskapas tiujn karakteroj kaj designar ilin kiel signojn kaj ne tion kiuj devus esti permesita esti prenita laŭvorte kiel nia SQL aserto. [01:01:04] Do la granda afero ke ni diris ke vi uloj devus esti uzanta estis HTML specialajn signojn, kio estas io ke vi eble volas preni rigardi. OK, forviŝi. Datumtipoj, tiu estos ĉiuj esti enreta. Kiel ni 15 minutoj forlasis, mi estas nur tuj iros rekte tra ĉi. PHP kaj SQL, esence ĉi estas nur ni havis konsulto funkcio kiu helpis protekti kontraŭ tiujn malicajn atakojn. Do kiam ajn vi uzas informpeto, ni estis certigi ke tio estis sanitized kaj whatnot. [01:01:36] MVC estas nur dezajno paradigmo, tia modelo, vido, adaptilo. Estas nur maniero por subteni la aĵojn bela kaj disigis en la sama vojo ke ni inklinas faktora el kodon en funkcioj. Tiu estas nur dezajno retejo kadro kiu permesas vin fari la samon. Mi iras al preterlasas. [01:01:54] Tiu estas iu kiu mi estus súper comfy kun. Estas granda tableto tie. Ĝi donas al vi la funkcio Ekzemplo de la modelo. Mi nur trairante tiun ĉar mi vere volas Davin por povi paroli. Se vi havas demandojn, bonvolu bonvolu. Mi estos ĉi tie post. Ĵus venis paroli kun mi. Kun tiu, ni havas HTTP statuses. Kaj Davin okazas blovi tra ĉi en 15 minutoj. Ĉi tuj estos granda. [01:02:17] DAVIN: OK. Uh, via mic? Yeah. Pardonu. Alison: Vojo esti preta. DAVIN: Ne, mi estas preta. Mi estas preta. Ni faru ĉi. Estas preta. Akcepti. Pardonu. Mi verŝis kafon sur min mem. Mi ne scias ĉu mi estas pli tedis ke mi aspektas stulta, aŭ ke mi ne havas kafon anymore. Kiel estas, simple rapidan anonco pri la folio vi uloj havas. Do ĉi foja vi uloj havas estas ne la oficiala kio estas sur la kvizo. Tiu estas la oficiala kio estas sur la kvizo. Ankaŭ, en la retejo, ni diru vi, bone, tio estos la kvizo. Do en la eta Gvidfolio vi havas, ne oficialaj. Kaj ekzistas erarojn sur ĝi. Do pli bone ne nur blinde uzi ĝin. Do jes, jen tio. Do ni eniras en ĉi tiu reala rapida. [01:03:05] Do HTTP statuses. Do kio okazas kiam la retejo, ĉio estas en ordo. Ĉio estas en ordo. Ĉiu venas reen al vi la vojon vi deziras ĝin al. Vi akiras 200 OK. 301, kie ni vidis ke 301 antaŭ? Atendu, kio estas supre? Pardonu. Ni vidis i tin prelego dum sekureco. Do dum sekureco, tiel se Davido tajpita en http kaj tiam provis iri al cs50.net, vi tuj vidos 301 movis. Kial? Ĉar tuj redirect vi aŭtomate al nia HTTPS. [01:03:35] Do 301 movis, nur estas esence redirección. Kaj vi povas pensi pri tio kiel ĉi. Ajna el statuses kiuj komenciĝas je 2'S, tiuj estas kiel, bone, ĉio estas en ordo. Ajna el statuses ke komenci kun 3, tiuj estas redirección. Statuses kiuj komencas kun 4, kiu pere ekzistas ia kliento eraro. Statuses kiuj komenciĝas je 5, tio estas ia servilo eraro. Do vi ia disrompi la statuses tiel. Do 304 ne ne modifita, do en via server.c p-arojn, tiel ni diru vi ŝarĝita cat.html. Ĉiu venas reen, vi ricevas 200s, OK, granda. [01:04:03] Imagu ke vi refreŝigis ŝin. Nu, enen tiu cat.html, vi havas JPEG. Nu, tio JPEG estas ne tuj get reloaded. Vi ne tuj sendi alian GET peton al la servilo, kaj tiam mi atingos tiun informon reen. Iĝos nur be-- tiun bildon estas tuj estos kaŝmemoro en via maŝino. Kaj por ke la bildo estos 304. Tuj kiam ne estas modifita. Se vi tiam fermi, klaraj kuketojn, kaj tiam refreŝigi kaj provu ŝargi tiun paĝon denove, vi tuj vidos 200s. Vi ne tuj vidos kiuj 304. [01:04:28] 400, malbona deziro, reala rapida, kiel se vi tuj sendos JSON objekto al la servilo kaj via JSON objekto estis malĝusta, vi vidos ion kiel tion. 403, malpermesita. Kiam vi vidos malpermesita? Probable Probable? Publiko: chmod. DAVIN: chmod, yeah. Do vi ne havas permesojn korekte. 404, ne trovis. Ĝi simple ne ekzistas. Do se vi tajpas en la malĝusta URL. 500, interna servilo eraro, la servilo verŝajne ne estis agordita ĝuste. Io ne sur via fino, sed ion sur la servilo flanko. Kaj 503? Multaj homoj vidis 503s en la lastaj p-aro. Kiam estus tio okazis? Mi aŭdis flustrojn. [01:05:05] Publiko: Kiam Google Decidas vi estas roboto. DAVIN: Yeah, kiam Google decidas vi estas roboto, vi ricevas 503s. Do estas ja superŝarĝas. Se vi petis de la servilo tro da, ĝi estas kutime temporal. Kaj plejparto de vi rimarkis. Do vi vidis 503. Vi verŝajne akceptus iom paŭzo, tiam la 503s foriris, kaj ĉio estis en ordo. [01:05:20] Gabe: Reala rapida, kiam vi infanoj ricevas 500 en probable tiu lasta problemo starigis? Jes? [01:05:27] Publiko: Kutime se la servilo havas dosieron misplaced aŭ [inaudible] ilia maŝino [inaudible]. [01:05:34] Gabe: Do eble estos agordon afero en via PHP sur via servilo. Sed ĝi mem justa ion kiel punktokomo ke via forgesis. Se vi tajpas PHP, iuj neĝustaj sintakso povus akiri vin io kiel tio. OK? [01:05:46] DAVIN: Cool. Ĉu vi volas ke mi faru ĝuste ĝis AJAX? [01:05:51] Gabe: [inaudible]. DAVIN: OK. Do kio estas la DOM? Kion DOM signifas? [01:05:55] Publiko: Dokumento objekto modelo. DAVIN: Nice. Kaj kial ni ŝatas ĝin? Imponega. Ĝuste, do ĝi nur nin permesas aliri HTML, konsenti niajn paĝo tre rapide. Kial? Ĉar ni trakti niajn paĝo, traktante nia HTML etikedoj, traktante ĉiun kvazaŭ ili estas objektoj. Se ni traktante ilin kiel ili estas celoj, tiam kion ni povas fari? Nu, ni povas nomi funkcioj sur ilin. Kaj tiu estas grava kial? Nu, ĉar ni iras al uzi Ĝavoskripto por ĝisdatigi niajn HTML, ĝisdatigi tiujn celojn. Do se ni traktos ilin kiel celoj, ni povas tiam nomita funkcioj sur ilin. Mi iras al eniri en tiu iom pli kiam mi entreprenas Ĝavoskripto, sed vi ĉiuj vidis kiel document.getElementByID. Do dokumento estas via elemento, akiri elementon de IRU, tial vi estas iranta rigardi por iuj ID en HTML etikedo. Kaj tiam, vi povos fari ion alian por tio. Ekzemple, kiel document.body, tiam vi povas alfiksus infano. Do vi estas iranta trovi la dokumenton. Vi havas la dokumenton. Vi tuj trovos la korpo. Vi trovis la korpon. Kaj tiam, vi tuj voki iun funkcion sur ĝi. Do alfiksus infanon, kaj vi povas alfiksus iuj HTML sur la fino ene via korpo. Do esence, estas simple traktante ĝin kiel objekto. Vi trakti HTML etikedoj kiel objekto. Kaj ĝi faras lin tre facila kaj rapida iri tra ili. Sed ĝi ankaŭ permesas vin nomi funkcioj sur ilin tiel vi povas manipuli kaj ŝanĝi la elementoj. [01:07:04] Gabe: Donita ĉi, kial estas JavaScript tiaj belan lingvon por interagi kun HTML? Odds estas, kiam homoj estis elektanta la lingvon por la navegador, por kliento flanko, JavaScript estas vere bela, estas vere spertas pri traktado celoj. Kaj la objektoj estas speco de ŝatas la celoj kiuj aperas en la HTML, tial ĝi estas tre facile por Ĝavoskripto fari tian uzadon. DAVIN: Nice. Do jen estas nur ekzemplo. Do mi pensas pri pasintjara kvizo aŭ eble du jaroj, ni demandis vin krei arbo. Do ĉi tiu estas ekzakte kion vi volas fari. Do vi komencos evi dokumenton. Kaj tiam vi esence Nur rigardu etikedoj. Do se vi rigardas, ni starti kun HTML etikedo. Kaj tiam, vi ricevas aŭtoveturejojn sur kiel fari ĉi bazita sur la deŝovon. Do kapo speco de branĉoj malproksime. Ene kapo, ni havas alia etikedo por titolo. Tial, ni havas titolon etikedo. Kaj ene de tiu, ni havos kelkajn kordo. Kaj tiel ni reprezentos ŝnureto en cirklo. Kaj ĉiuj etikedoj estas en la stalo. [01:07:54] Kaj se vi rigardas, se ni pensu pri ĉi tion kiel arbo, kaj ni diru, ke HTML estas gepatro, tiam kapo kaj korpo tuj estos gefratoj. Ili ambaŭ tuj estos infanoj de tiu gepatro. Do ĉar ili estas ambaŭ gefratoj, ili estas tuj estos speco de apud reciproke en nia arbo modelo. Kaj tiam, vi esence fari la ĝustan saman aferon. Do ne estas malfacila, sed ni petis demandojn kiel ĉi antaŭe sur la kvizo. Gabe: Ĉu iu ajn havas demandojn ĝis nun? Ĉu ĝi bona? DAVIN: Cool. Ĝavoskripto, OK, la bona stuff. Do Ĝavoskripto, kio estas JavaScript? Nu, Ĝavoskripto is-- estas komplika, sed tiuj estas kelkaj el la brilaĵoj ke vi devus teni en menso. Unue, ĝi estas loze tajpita. Kion tio signifas? Do PHP was-- yeah, kio estas supre? [01:08:35] Publiko: Vi ne devas eksplicite ŝtata kio tipo de variablo estas. DAVIN: Perfekta. Do li diris vin ne devas eksplicite deklari la tipo de variablo. Ekzakte pravas. Do en C, se mi havis int i egalas 50, tiam en PHP, estas nur kiel tiu, $ i, egalas 50. Tiam en JavaScript, kio estus la alvoko estos? Var, dekstra? Estus kiel var i egalas 50. Sed vi ne devas esti kiel, nu bone, ĉi tiu estas int. OK, ĉi estas ĉeno. Neniu bezono fari tion. Ĝi estas interpretita lingvo. Do kion tio signifas? [01:09:04] Publiko: Ne kompilita. [01:09:06] DAVIN: Kio ne kompilis signifas? Yeah? [01:09:11] Publiko: Vi ne restrukturi la kodo pretigu por la komputilon por ruligi ĝin. Estas nur prenita en la momento de ekzekuto kaj la komputilo [inaudible]. DAVIN: Yeah, do ĝi tuj pasi tra interpretisto. Sed vi estas ekzakte pravas. Do vi neniam iras kompili ĝin, ĉu ne? Kiam vi faris vian PHP kaj Javascript kodo, vi neniam nomis compilación. Vi neniam nomis iun kiel fari aŭ io kiel tio. Tio estas ĉar ĝi estas interpretita. Do ĉiufoje ĝi iras tra navegador, iras tra interpretisto. Kaj ke tuj gxin klarigas ĝuste en reala tempo tuj por vi. Do kio estas kelkaj pozitivaj kaj negativaj por havi interpretita lingvo kaj havante kompilita lingvo? Do compiling-- yeah, kio estas supre? [01:09:50] Publiko: Interpretita estas malrapida. DAVIN: En kiu senco? [01:09:57] Publiko: Post kiam vi kompili, vi ne havas fari ajnan ekstra paŝoj ekzekuti ĝin, dum tiu [inaudible]. [01:10:04] DAVIN: Dekstra, perfekta. Do kion vi diris estas esence ke tiu kompilita, kiam vi kompili, vi havas Multaj upfront kostoj, dekstra? Vi tuj kompili ĝin. Sed post vi kompili ĝin, la tradukilo tuj optimumigi ĝin. Ĝi tuj estos rapida. Iĝos esence esti tiel rapida kiel ĝi eblas. Kun interpretante, vi neniam havas tiun upfront kosto. Pli ĝuste, ĝi tuj estos iomete pli malrapida ĉiu ununura tempo vi gxin klarigas. Kaj vi tuj devos interpreti ĝin ĉiu ununura tempo. Do anstataŭ havanta ĉi unu tempo kosto, nun vi estas tuj devos interpreti ĝin ĉiufoje la paĝo laude. [01:10:29] Do interpretistoj estas bona ĉar vi ne devas kompili ĝin, sed ili estas malbonaj en kiuj ĉiu tempo la paĝo ŝarĝoj, estas tuj devos interpreti ĉi Javascript. Kaj tuj kuri iomete pli malrapida ol se vi estus kompili ĝin. Permesas communicate-- Ho, atendu. Uzita por manipuli la enhavo kaj aspekto. Ni nur parolis pri tio. Ĝi uzas la DOM. AJAX, ni akiros en AJAX en iomete. Kaj poste, ĝi estas kliento flanko. Do PHP estas servilo flanko. JavaScript estas kliento flanko. Kio estas pozitivaj por ke? Ĝi diras ĝin. Estas rapida, dekstra? Ĉar vi ne havas to-- estas rapida. Vi ne devas komuniki kun iu alia mekanismo. Se vi estas nur en via kliento, vi neniam tuj devos iri kaj vidi kio estas sur la servilo kaj tiam raporti reen aŭ iel simile. Do kliento flanko inklinas esti iomete pli rapida. [01:11:15] Gabe: Yeah, sed ĉi ne signifas PHP estas rapida ol Ĝavoskripto aŭ ion tian. Ili kuras ia en la sama rapido ĉar ili estas ambaŭ interpretitaj lingvoj. Kio plej malrapida jen la peto. Do vi fakte irante tutan vojon super al Brazilo akiri informon kiu vivas tie. Sed PHP kaj Javascript, ili speco de kuri en la sama rapido. Ne ke oni estas rapide ol la aliaj. Tiu, ankaŭ, lertaĵo demando ĉi tie. Do Javascript neniam iĝas maŝino kodo, vera aŭ falsa? [01:11:47] Publiko: Falsa. Gabe: Falsa. Ĝi devas fariĝi maŝino kodo ĉar maŝino kodo lin sola kiu la maŝino komprenas. Eĉ kvankam ĝi ne estas kompilis, ĝi ankoraŭ igas maŝino kodo ĉar la interpretisto estas nur programo kiu iras linio por linio kaj transformas tiu linio en io la komputilo komprenas. OK? Cool. [01:12:08] DAVIN: Jen nur tre bazajn saluton mondo Javascript programo. Do mi ne scias if-- vi vidis ĉi. Sed vi simple devos HTML. Kaj anstataŭ efektive metante la JavaScript en la skripto etikedoj, tiel oni kredus kutime metis ĝin en kapo. Vi havas skripton etikedoj. Vi faligis ĝin tie. Ĉio ni faris ĉi tie estas ni ligitaj in-- tial ni ligitaj en JavaScript dosiero kiel tiu. Kaj vi ĉiuj faris tion, ĉu ne? Do kiam vi estis uzante jQuery kaj underscore.js en la lastaj p-aro, vi ne havas tunojn de kodo en via skripto etikedoj, en via kapo. Vi povus fari tion, sed anstataŭe vi nur ligas ĝin. Kaj vi ligi ĝin samkiel vi faras kun CSS. Do ĝi ĝuste faciligante legi tiom via kodo ne ŝatas 1.000 linioj longaj kun tunoj de funkcioj kiuj vi eble ne uzos. [01:12:52] Anstataŭe, vi nur ligas ĝin. Ĝi compartmentalizes ĝin. Estas kiel skribi iujn kaplinio dosiero, kaj tiam inkludante ke kaplinio dosiero en C. Pensu ĝin ĝuste kiel ĉi tiu. Do kion signifas ĉi fari? Nu, tiu tuj kuru. Iĝos alarmi. Do vi estas iranta akiri iom aperigi nomata saluton mondo. Rapida demando, nur prudento ĉeko, do komprenu tie en la korpo, diru korpo, HTML. Kio venas unue? Ĉu mi vidas korpon, HTML, aŭ ĉu mi vidas la garde unuan? [01:13:19] Publiko: Alert. [01:13:20] DAVIN: Rajto. Li diras garde. Kial? [01:13:22] Publikon: Pro vi iri de supre sube. [01:13:24] DAVIN: Jes. Perfekta. Do li diras, vi iri de supre fundo, kiu estas absolute korekta. Vi tuj iru de supre sube. Kaj en JavaScript, jQuery, vi havas funkcio kiu estas kvazaŭ onload, aŭ preta, kaj kiu diras, OK, atendu ĉion ĉi HTML ŝarĝis. Kaj tiam, invitu Javascript. Ĉar ni ne havas tiun ĉi tien, la tre unua kiu okazos Estas ĝi tuj iri de supre sube. Iĝos hit kiu js voki, ĝi tuj alarmos. Post ke vi klakas OK, ke garde iras. Tiam ĝi tuj montras vi la korpon HTML. Nice. [01:13:54] OK, do ĝuste reala rapida, skribo en JavaScript estas súper rapida. Por deklari variablo, var nomo. Do en C, vi havas int i, vi havas deklari kia tipo ĝi estas. PHP, $. Ĝavoskripto, var. Ni parolis pri tiu. Bone, ni iru. [01:14:11] Masxojn, samo. Sama afero. Funkcio deklaroj, do samkiel vi vidis en C. Lin sola malsama estas tiel kiam vi alvenas al aliaj programlingvoj, kiel kiam vi prenas 51 sekva semestro kaj vi faras kun OCaml, vi povas trakti kun anonima funkcioj. Do tio estas ĝuste kion vi havas tie. Do vi volas meti en sumo, ia sumo valoro. Sed vi povus nur esti farante ĝin unu tempo. Do vi ne volas nomi ĝin funkcio sumo, donu gxin funkcio deklaro. Anstataŭe, vi simple uzi ĝin kiel anonima funkcio. Kaj vi vidis ĉi tre. Vi vidos ekzemplon de tiu en paro diapozitivoj. Yeah, ni jam vidos. Gabe: Bona demando. Kiam povus vi volas uzi anonima funkcio ĉi tie? Esence, kiam vi volas ion, kiel okazaĵo, okazi. Do kiam la muso estas clicked, ekzemple, Vi volas iun funkcion esti vokita. Do vi pasos al la okazaĵo traktilo, sekvinberoj al la evento, ia, la funkcio kiu vi volas nomi. Kaj kion vi pasi Estas kiel, fine de la tago, nur montrilon al ke instrukcioj, al la funkcio. Do ĝi ne estas kiel vi pasi la tutan kodon, same kiel puntero al la funkcio. Kaj tiam, kiam iu alklakas la muson, tiam tiu funkcio prenas nomata. [01:15:17] DAVIN: arrays, do vi havi tabelo deklaro. Tiam, tabelo meti aĵojn en. Reala rapida, kion faros ĉi elprinti? Kion la tria ero estos? [01:15:31] Publiko: "JS". [01:15:32] DAVIN: Rajto, ke estus "js." Atendu, reiri. Kiel longa? [01:15:37] Publiko: Tri. DAVIN: Tri, dekstra? Precize kion vi pensas. OK, nun iru. Arrays, vi povas aldoni aĵojn por ili. Do vi povas iri pli tie iliaj komencaj baroj. Nur io teni en menso. PHP, JavaScript, ili estas iom iom pli pardonanta en terminoj de aferoj kiel tio. Objektoj, tre multe kiel structs en C, tre multe kiel asocia arrays en PHP. Vi cxiuj havis sperton kun tiu. Do JSON, kiam vi estas pasante JSON tien kaj reen en p-ara ok, tio estas via objekto. [01:16:03] Do jes, ekzemple, realan rapidan ekzemplon. Ĉi tie estas objekto. La vojo vi referenci tiun objekto, do ĝuste reala rapida, diru mi volis trovi el, OK, kio estas la kurso? Do la objekto nomo tie estas CS50. Kaj tiam se mi havus asocieca tabelo, kiom mi farus tion? Mi uzos ŝlosilon, dekstra? Do mi havas la nomon de la tabelo. Mi havas krampo, citaĵoj, ŝlosilo, fino citaĵoj, fino krampo, kaj kiu referencas ke elemento ene mia asocieca tabelo. Kiel mi referencita Certe ene mian celon? Iu scias? [01:16:39] Publiko: [inaudible]. [01:16:40] DAVIN: Kiel vi? Publiko: CS50.course. DAVIN: Dekstra, yeah. Do CS50.course. Do la vojo vi referenci tion ene JSON objekto estas per punkto. [01:16:48] Publiko: Vi povas ankaŭ uzi tabelo sintakso. [01:16:53] DAVIN: OK, bone. [01:16:54] Gabe: Vi povas ankaŭ uzi CS50 krampo, kordoj, kiel citiloj. Publiko: Mi kredas ke estas identaj al PHP. Gabe: Estas la sama afero. DAVIN: Bone! Sed vi vidos ĉi aliloke. Yeah, do plu iri. Jen kion mi ĵus diris. Do en JavaScript jQuery ekzemplo. Do tio estas mia DOM, dekstra? Reala rapida, do mi havas kapo, saluton mondo, korpo. Mi havas butonon. Ĝi diras "puŝi min," do mi volas puŝi ĝin. Kaj mi volas fari ion kiam ĝi estos klakis. Ĝuste, sekva. [01:17:31] Ĝuste, do cxi tio estas mia Javascript. Do jQuery estas nur facilan maniero skribi Javascript. Do tiu, kaj kion mi montros al vi proksima, tuj estos jQuery, estas identaj. Do ili faros la samajn aferojn. Nur jQuery inklinas esti iom pli facila. Homoj emas ŝati ĝin pli. Ĝi havas multajn funkciojn. Do homoj inklinas uzi jQuery. Vi ĉiuj uzis jQuery en la lastaj p-aro. Do kio estos ĉi fari? Kion ĉi JavaScript-- tiel tiu estas nur ordinaraj Javascript. Kion ĉi fari? Kion ĝi faras? [01:18:03] Do unue, vi vidos fenestro onload. Dekstra? Do ni tute ne vidis antaŭe. Do tiu tuj atendos ĝis la tuta fenestro ŝarĝoj. Do ĝi estas tuj atendos ĝis HTML, ĉiuj bildoj ŝarĝas antaŭ ol ĝi faras nenion. Do diru nia DOM ŝarĝis. Ĉio estas tie. Do kion okazos? Yeah? [01:18:19] Publiko: Buton aperas. [01:18:22] DAVIN: La butono estas jam tie. Yeah, do la butono la jam tie. Sed tiu tuj diros, OK, se mi klakas la butonon, tial la butono estas jam negrave, ke HTML etikedo. Atendu, revenu vera rapida. Ĉi etikedo dekstran dekstre jen tuj estos butonon jam. Ekzistas jam butonon. Sed tiam, la Ĝavoskripto etikedo, ĝuste ĉi tie, ĝi diras, OK, Mi volas akiri elementon de IRU, tia serĉo butonon nur diras, OK, Mi volas por mapi tiun variablon al tiu butono. Por ke variablo estas nur facilan manieron por aliri tiun butonon. Kaj mi diras, OK, se mi klakas ke butono, do se mi klakas tiun elementon, kaj ĉi elemento referencas al la butonon, se mi klakas ĝin, tiam mi volas nomi funkcio. Ĉi tie estas unu el tiuj anonimaj funkcioj ni parolas. [01:19:03] Nur voki iu funkcio. Ene tiu funkcio, esence io ni vidis multon, garde. Vi klaku la serĉo butonon. Iĝos esence havi butonon. Vi klaku ĝin. Vi bonstata garde. X eksteren. Estas tio. Yeah? [01:19:16] Publiko: Do ​​se vi metis la skripto [Inaudible], skripto etikedo en via HTML? [01:19:21] DAVIN: Vi povas meti la skripto etikedo rekte en la kapo ĉar vi havas ĉi onload. Estas ankaŭ ke vi havas klako. Do ĝi estas tuj atendos ĝis vi klaku por io. Sed onload estas nur esti sekura, por fari certe ĉio ŝarĝoj en vian HTML antemano. Yeah? Vi volas diri ion? [01:19:40] Gabe: [inaudible]. DAVIN: Yeah. [01:19:42] Publiko: Do ​​onload Evitas difinante la variablo serĉo butono per nur diras document.getElementByID serĉo butonon dot [inaudible]. [01:19:49] DAVIN: Definitive, sed tiam vian ĉenon nur ricevas grandegan. Ekzakte, do ĉi estas nur por plifaciligi por vi, jes. Jes? [01:19:56] Publiko: Kien ni Krei window.onload? Aŭ document.ready? [01:19:58] DAVIN: Jes, ekzistas. Jes, tie estas, mi kontrolis. [01:20:02] Gabe: Ne por ili zorgi pri. [01:20:03] DAVIN: OK, do mi iros informi vin ĉiukaze. Do esence, ĝuste ĝenerale, tiel window.onload atendas ĝis via DOM, ĉiuj via HTML, ŝarĝo. Ĝi atendas ĝis via idolo ŝarĝo. Ĝi atendas ĝis ĉiu ŝarĝoj. document.ready, ĝi nur atendas ĝis via DOM ŝarĝoj. Iam la HTML estas ĉiuj tie, fojo via DOM estas tie, komenciĝas kurante. Tio estas la nura diferenco. [01:20:23] Gabe: Rapida prudento kontrolu tie. Do ĉi tio povas vidi specon de kiel linio de kodo, dekstra? Ĉar estas window.onload egalas faskon da aĵoj. Kiam Javascript legas ĉi, veraj aŭ falsa, la funkcio prenas ekzekutita. Falsa. OK? Kio okazas tie, vi nur pasas ĉi funkcio kiel anonima funkcioj al window.onload. Kaj tiam kiam ĝi iras por fakte get ekzekutita? Kiam la fenestro ŝarĝoj. Tio estas okazaĵo. Do tio estas la jus t afero ni estas parolante pri antaŭe, dekstra? Do kiam la okazaĵo okazas, la funkcio okazas. Sama afero kun la onclick. [01:20:59] DAVIN: OK, do iu prenis for la document.ready. Sed tiu estos la ĝusta same-- Publiko: La dolaro signo, ke estas document.ready. Tio estas simbola ligilo. [01:21:07] DAVIN: Ho, tio estas? OK, do ĉi rimedoj document.ready, ŝparvojo. Sed tio estas la sama kiel window.onload krom ke malmulta diferenco Mi rakontis al vi. Kaj jen estas jQuery. Do tiu estas la ĝusta sama thing-- ĉi estas JavaScript. Tiu estas just-- iuj homoj pensas pri gxi kiel pli malpeza pezo, glata versio kiu havas multaj funcionalidades ke vi probable uzos. Do ĉi tio faras la ĝustan samon. [01:21:34] Do tion al ia atentigi. Do en la alia ekzemplo, ni havis document.getElementByID, do ni havis ĉi longa ĉeno kiu tuj akiri la elemento per nenial ID havas. Tio anstataŭita de tiu alvoko ĝuste ĉi tie. Do komprenu la dolaro signo, tiam vi vidos citaĵo, hashtag. Hashtag estas ĉiam selector. Ĝi diras, OK, ĉi tio devas vidi kun ID. Kio estas la seleccionador por klaso? [01:21:56] Publiko: Dot. [01:21:57] DAVIN: Dot, dekstre. Se vi simple intencas elekti etikedo, kio estas? Estas nur la etikedon, precize. Kaj vi povus uzi tiun ĉi tie, ankaŭ. [01:22:05] Gabe: Kaj laŭ etikedo, ni subkomprenas ŝatas div, ekzemple, aŭ kapo. [01:22:08] DAVIN: Aŭ korpo aŭ p aŭ ion tian, jes. Do jen, OK, anstataŭ diri document.getElementByID, ĉi tio estas nur la ĝusta sama afero. Nur en jQuery, ĝi estas pli mallonga. Do estas pli simpla. Tial do, ne plu onclick, simple alklaku. jQuery funkcio, nomas tiun funkcion. Garde estas la ĝusta sama. Do estas iom malgranda, aŭ iomete malpli longa, iom bit-- homoj pensas ĝi estas iom pli facile skribi ekstere, iomete pli facile kompreni. Sed tio estas jQuery. Multaj homoj akiras iom iom konfuzita kaj maltrankviligita kaj ili opinias, OK, jQuery estas malsama ol Javascript. Mi devas memori tiujn du malsamaj aferoj. Ne. Mi volas diri, estas malsama sintakso. Sed jQuery estas JavaScript. Estas nur kvazaŭe bona versio kiu povus esti facile kompreni ke homoj uzas. Gabe: Yeah, esti honesta, ke dolaro signo ke vi vidas en jQuery, tio estas nur la nomo de funkcio kiu jQuery difinas. Ĝi ne havas nenion speciala. Estas Estas nur la nomo de funkcio, same kiel vi povus difini dolaro signo. [01:23:03] DAVIN: Yeah, do parolis pri tio. Iuj utilaj aĵoj. Mi rerigardas ĉe la malnova kvizojn. En la pasintaj kelkaj kvizoj, ili jam devis uzi aĵojn kiel tiu. Do document.ready, do certigi ĉio ŝarĝita antaŭ vi komencas faranta aferojn. Elekti ID, aŭ elektos klaso, ĝi estis ĵus esti citaĵo pentras al iu klaso, fino citaĵo. Proponu, do se vi estas Sendante formo kaj alvoko tiu funkcio post la formo submetas. Valoron, do ni diru mi havis formon submetiĝon, kiel uzanto nomo, email, ajn. Mi havis tekstujon. Do mi tajpas en tiun tekstujon. Nu, se vi volas ricevi la valoron el tiu teksto skatolo, vi uzas dot val. Kaj tiam, malsupren tie, dot HTML estas la sama estas kiel dokumento dot getElementByID dot innerHTML. Por ke tuj revenos vi la HTML de tiu IRU. Ĉi tie, vi ĵus uzas iun ID aŭ nenial dot HTML. Tio ricevos la HTML de tiu elemento. Se vi volas do ŝanĝu tion HTML, vi povas pasi ĝin ion. Do vi estus kiel skalara HTML, kaj tiam ene, citaĵoj, nova HTML aŭ iu. [01:24:05] Gabe: OK, do AJAX. Mi vere ŝatus kompreni AJAX vere bone. Do mi volas vin infanoj al kompreni AJAX vere bone. Ĉar se vi fari, vi preskaux irante kompreni ĉion devas vidi kun HTTP, PHP, Ĝavoskripto ĉar ĉiuj kunfluas en AJAX. AJAX ne estas lingvo. AJAX estas tekniko. Kaj ĝi uzas multajn malsamajn ilojn. AJAX staras por nesinkrona JavaScript XML. Do la metodo, la lingvo, la datumoj. [01:24:36] Do la ĉefa lingvo kiu ni uzas en AJAX deĉenigi ĉio kaj manipuli ĉiun poste estas JavaScript. Tial ĝi rilatas tre proksima al JavaScript. Kaj tiam nesinkrona estas ĉar ni ne faras ĝin ĉiuj samtempe kiam ni ŝarĝas la paĝon. Tio estas kion ni povas fari aferojn ia en paralela. La ĉefa ideo malantaŭ AJAX estas ke vi volas ĝi akiri iun specifan informon. Ekzemple, kiam vi tajpas nova uzantonomo kiam vi registras uzanto nomo, mia konto estas abc123. Kaj poste, fine de la formo, vi devas alklaki Proponu. Kaj ĝi devis iri al la servilo, kaj tiam kontroli ĉu en la datumbazo, abc123 estas jam tie. Kaj se ĝi estas jam tie, ĝi diras, uzantonomo jam en la datumbazo. Kaj ili, vi devas plenigi el la tuta formo denove. Sed estis vere, vere malbona. [01:25:23] Kaj tiam homoj diras, OK, kial povas ne ni ĵus fari malgrandan HTTP peto ricevi justan kontroli al vidi se ĉi tiu uzanto estas en la datumbazo antaŭ la uzanto devis submit la tuta formo? Do ekzemple, kiam la uzanto finas tajpado abc123, ni nur iri al la servilo iom brido kaj simple akiri veran aŭ falsan de la servilo por vidi se tio validan salutnomon aŭ ne. OK, do tio estas unu el la ĉefaj Uzas de AJAX nuntempe ankoraŭ. [01:25:49] DAVIN: Do reala rapida, en oni Ajax alvokon en jQuery, vi povus signifi ke vi volas ke ĝi esti sinkronigita. Vi ne devus fari tion. Sed vi povas fari tion. Kaj se vi faris tion, kio okazus? Nu, ekzemple, kiam oni estas eksciinte aŭ kio ajn, Via foliumilo estas simple perdos tempon ĝis tiu tuta alvoko estas kompleta anstataŭ lasanta vin fari aliajn tion tuj post vi klakas ĝin. [01:26:14] Gabe: Ĝi estas ne pasi plu. Ho mia dio. Pardonu! Yup. "En la pasinteco, la kliento bezonis peto la tutan enhavon de retejo. " Tio estas kion mi diris. Ĝi permesas nin sendi aldona Get aŭ POST petoj sen devi por reŝarĝi nia retumilo. Do je la fino de la tago, ni estas fakte farante HTTP petojn tie uzante JavaScript. Ĉar antaŭe, ni nur uzis Ĝavoskripto ŝanĝi la HTML kiu jam venis. Kaj nun ni povas uzi ĝin por interfaco kun la servantoj retejo ankaŭ. La vojo ĉi okazas Estas ni havas la kliento. Davin estas kliento. Kaj li havas ĉiujn Ĝavoskripto kurante ĉar HTML estas muta. JavaScript estas inteligenta. Do davin Davin havas sia inteligenta parto kaj sia muta parto. Li tuj uzos lian inteligenta parto nun. Li tuj uzos Ĝavoskripto al peto, ekzemple, ĉu abc123 estas en la datumbazo aŭ ne. [01:27:04] Do Davin, bonvolu, vi nur Lasu min HTTP peto. Dankon. Do li simple sendis HTTP peto. Vi vidos ke? Kaj tio estas ĝuste la sama vojo ke iu HTTP peto estas sendita. La navegador, Google Chrome aŭ ion, estas tuj vidos ke Davin La provante sendi HTTP peto, tuj helpos HM iomete. Kaj tio estas ironta tutan vojon al la servilo. Nun, la servilo tuj havos PHP tie, aŭ ajna alia lingvo. Ĝuste kiel en normala HTTP peto. Estas sufiĉe tre normala HTTP peto. [01:27:31] Kaj poste, la servilo tuj diros, nu bone, Davin volas min por kontroli ĉu ĉi abc123 estas en la datumbazo. Iru paroli al la modelo. La modelo diras ke estas ne. abc123 estas bona salutnomon. Kaj tiam, la TTT-servilo tuj uzi PHP por repagi iun formon de dosiero. Ĝi povus esti laŭvorte ĝuste dosiero kiu enhavas "jes" en ĝi, aŭ "ne, aŭ iel simile. Ĝi eblus ajnan dosieron. [01:27:54] Ĝi povus esti kiel mi iros al sendu Davin bildon de anaso se ĝi estas en la datumbazo kaj sendu foton de hamstro se ĝi ne estas en la datumbazo. Tio estus speco de muta, sed ĝi funkcios. OK, do mi sendas anason al Davin. Davin akiris anaso. Kaj nun, kiu tuj manipuli la anaso? Davin la inteligenta parto denove, tiel Ĝavoskripto, dekstra? Ĝavoskripto sendis la peto, kaj JavaScript tuj ricevos la peton kaj interpreti ĝin en iu formo. [01:28:22] Kaj en ĉi tiu senso, ĝi tuj diri, OK, se anaso tiam mi estas bona. Se hamstro, tiam mi iros diri, ne, vikipediista nomo jam ekzistas en la datumbazo. Sed kutime, vi ne estas tuj sendos anaso. Vi tuj sendu ion iomete inteligenta. Kaj kion ni uzas estas XML. Kaj pli ĵus, ni uzas JSON. JSON estas ĝuste Ĝavoskripto Objekto Skribmaniero, kiu esence vi ricevas tutaj JavaScript objekto. Kaj vi metos ĝin en iu dosiero, nur ŝatas ke CS50 celo kiun vi uloj vidis. Vi metis ĝin en iu dosiero, kaj vi sendu ĝin al Davin. [01:28:53] Do en ĉi tiu kazo, mi farus fari JavaScript objekto kaj ĝuste diri, uzanto ekzistas, jes. Aŭ uzanto ekzistas, ne. Kaj sendi ĝin reen al li. Kaj kial JSON? Ĉar la persono Kiu estas ricevi ĉi estas tuj uzos Ĝavoskripto manipuli la respondo. Kaj JavaScript funkcias tiel bone ĉar ĝi nomiĝas JavaScript Objekto Skribmaniero. Dekstra? Do li povas nur voki funkcio kaj instigi tiu bela objekto de la respondo. Kaj tiam, li tuj sciis, ĉu ke uzanto estas en la datumbazo aŭ ne. [01:29:22] Do vi vidas, ĉio venanta kune en la TTT-servilo, kaj tiam ekzistas unu HTTP por peto kaj unu HTTP respondo kaj ĉion. Do certigi vi uloj kompreni ĉi AJAX alvoko ĉar ĝi helpas vin kompreni la tutan de la konceptoj ni parolas. [01:29:37] Do jen ekzemplo de AJAX kun jQuery. Kaj tie, ni faru kun get JSON. Do ni ne klopodas ricevi bildo de kato tie, aŭ anaso. Ni provas akiri JSON dosiero. Kaj tiam ni atendos ĝis ĝi estas farita, dot farita. Tio signifas mi atendas la respondon. Ĝi povus preni momenton. Tiam, vi vidas iom de ŝarĝo. Se vi volas fari tion en via paĝaro. Do pentras farita, kaj poste kio okazas kiam ĝi estas farita? Vi pasas en anonima funkcio, kiel ni vidis antaŭe. Ĉar farita estas evento, ĵus kiel klakante muson aŭ kio ajn, por jQuery. Do vi pasos en ĉi tiu funkcio kun datumoj, tekstoj, statuso, kaj jqXHR. Kaj esence, tio estas nur iuj variabloj ke vi povas uzi poste havi la statuso de la HTTP-peto, la datumoj kiujn ĝi okazas por sendi al vi. Sekve vi povas poste interpreti ĝin kaj faru ion signfa kun ĝi. Kaj se ĝi malsukcesas, kiam forto gxi malsukcesos? Nu, kiam la HTTP peto donas vi 500 aŭ iel simile. Tiam, ĝi tuj diros tion statuson, kia fiasko kiu estis, kaj cxiajn ajxojn. Vi devas certigi manipuli ambaŭ kazoj, alie la programo iras freneza. [01:30:42] DAVIN: Tiel yeah, tiu estas ĝuste kion vi vidis en via lasta p-aro. La efektiva AJAX alvoko estas en la Get JSON. Tio estas la alvoko. Kaj tiam, dot farita similas ĝi kontrolas se estas sukcesa. Se ĝi estas sukcesa, vi volas fari iun kun la datumoj. Vi reiri el tiu JSON peto datumoj. Tio estas kion vi ricevas reen. Do se vi memoras el via p-aro, multan vi estis kiel datumoj krampo i aŭ kio ajn, dot ligilo aŭ titolo. Kion ajn venas reen de tiu JSON, kio ajn la kampoj estas en tiu JSON objekto, ke estas kion vi fariĝas reen. Datumoj estas kion vi fariĝas reen. Teksto statuson, nur iu kiu permesas koni kio okazis. Kaj tiam, la jqXHR, tio estas nur la jQuery XML HTTP peto. Tio estas nur kiel objekton. Kaj poste malsukcesos, ĝuste kiel Gabe diris. Gabe: En nia eta ekzemplo de abc123 ĝuste por kontroli se tio en la datumbazo aŭ ne, la datumoj estus iu vin farus, se datumoj punkto uzantonomo ekzistas, kiu estas kiu via PHP generita por vi, se datumoj punkto uzantonomo ekzistas, tiam Mi iras al alarmi, uzanto nomo jam ekzistas. Alie, mi simple lasos la uzanto procedi plenigante la Formularon. OK, sekureco, malvarmeta. [01:31:50] DAVIN: Want min? [01:31:52] Gabe: Mi ŝatas tiun ĉi. Do iu kiu similas familiara. Ni preskaŭ farita. Do ĉi tio estas nur la ekzemplo vi uloj vidis en klaso. Vi uzis argv1 tie. Tio estas kiel komandlinio argumento. Kaj ni MEM kopiado ke en buffer de grandeco 12. Kio estas la problemo ĉi tie? Buffer overflow! Ĉar ni havas buffer de grandeco 12. argv1 havu grandecon de du miliardoj. Ni ne faras neniun limon kontrolanta. Do ni povus kopii multajn memoro. Kaj ni estos aparte malbona pri tio. Kio povus ni fari tio tre tre signifas en ĉi tiu kazo? Jes? Publiko: Parto de la du miliardoj aferoj enhavas plenumeblajn kodo kiu revenas [Inaudible]. Gabe: Ekzakte. Do tio estas la speco de afero ke homo uzas al Jailbreak iPhone, ekzemple. Por ke speco de aĵo. Ĉar vi povas nur fari la aparaton ekzekuti ajna kodo kiu vin ŝatas. La solvon, do la riparas estas facila. Nur kontroli la limojn. Vi kontrolu por nulaj ĉar ni ĉiam kontroli por nula kiam ni kontraktanta kun kordoj. Kaj tiam, vi prenas la kordo longo antaŭe. Kaj se la kordo longeco estas valida kordo longo, kiu estas ene 0 kaj 12, tiam ni estas bonaj. [01:33:03] DAVIN: Se ci ne markas por nula, realaj rapidaj, kio okazos? Ĝi devos seg kulpo. Por kio ĝi seg kulpo? Ĉar vi vokas strlen en nula. Gabe: Yeah. Vera aŭ malvera, uzante unu Pasvorto estas bona ideo. [01:33:19] Publiko: Falsa. [01:33:20] Gabe: Falsa. Uzu multajn pasvortojn, kaj grandaj, longaj. Pendseruro ikonoj certigi sekurecon. [01:33:26] Publiko: Falsa. [01:33:27] Gabe: Falsa. Ĝi ne signifas ion ajn. Estas nur ikonon. SSL protektas kontraŭ viron en la mezo de atako. Publiko: Falsa. Gabe: Falsa. OK, do ĉiuj tiuj estas falsaj. Nice. [Inaudible] Volas paroli pri tio? Via vico. DAVIN: Tipoj de atakoj, viron en la mezo. Kio estas homo en la mezo atako? Publiko: [inaudible]. DAVIN: Se vi sendas HTTP peto, ili povus fari tion, ĉu ne? Sed se vi sendas HTTPS, ili probable ne povos fari tion. Estas multaj punktoj kune vian rilaton. Vi havas routers. Vi havas DNS-serviloj. Se iu povas fizike vidi kion vi sendas, tial iu povas reale preni inter vi, la kliento, kaj la servilo, kaj estas povis vidi kion vi sendas, ĉi tio estas viro en la mezo atako. Do por vidi kion vi provas preni de la servilo, aŭ povas see-- malbona, vi eble povos vidi kuketojn aŭ iel simile. [01:34:16] Do ekzemple, se vi ne uzante SSL, li eble povus vidi via kunsido ID kuketojn. Kaj tio nomiĝas kunsido kidnapo cxar li vidas vian ID kuketojn, kaj tiam li estas kapabla de iri al tiu retejo kaj ŝajnigi esti vi. Ĉar ĝuste kiel en PHP, memoru kiam ni ensalutinta, kion ni faru? Ni starigu kunsido ID egala al ID. Do kiu identigas vin. Tial vi povas vidi viajn biletujo kaj ne ĉiuj aliaj la biletujo. [01:34:38] Nu, se mi estas suficxe bonstata kuketo, tiam mi povas ensaluti en tiu paĝo. Kaj tiam, mi povas simple vidi vian stuff kaj komenci aĉeti kaj vendi ajxoj. Do tio estas kunsido kidnapo. Sed vi ne devus esti kapabla to-- tiel vi povas uzi la viro en la mezo de atako eĉ se ili estas uzanta SSL. Sed vi ne devus esti kapabla. Se ili uzas SSL, vi ne povas kunsido forrabi. Kial? Ĉar ĝi estas ĉiuj ĉifrita, dekstra? se ĝi estas ĉifrita, kaj mi ankoraŭ estas homo en la mezo, mi ankoraŭ akiri vian datumon. Tio estas bone. Sed gxi ĉifrita. Do mi ne povas vere uzi ĝin. Do tio estas du. [01:35:09] Reala rapida, kruco ejo peto falsado. Tio estas nur se ligilo kaj ke ligilo faras ion ke vi ne kredas ke devus fari. Do ekzemple, se la ligilo estis iri aĉeti stokoj aŭ vendi karcero; kaj vi ne scias. Vi alklakis la ligilon, sendis peton, aĉetis aŭ vendis iun kiu vi ne intencis fari. Tio estas tio. [01:35:25] Kruco ejo scripting, do ĉi tie, vi pasante en tra variablo q, anstataŭ pasante en ia de valoro, eble q similas al nomo. Do anstataŭ pasante q egaluloj Davin aŭ iel simile, se vi ne uzas HTML speciala signojn, se vi ne eskapas ĉi certigi ĝi estas OK, tiam mi povis eniri anstataŭe diru tien mi estas diranta print aŭ iel simile, tiam mi povis eniri tien ĉi skripton alvokon. [01:35:51] Tial, anstataŭ nur nun ŝanĝiĝema, Mi devus tiam ekzekuti ĉi skripton alvokon. Do ene ol skripton voki, kion faras ĝi fari? Dokumento dot situon, ke tuj ŝanĝi la lokon de la dokumento. Do Mi tuj redirect al aliloken. Ĝi nomas malbona ulo en tiu ekzemplo, tre bona. Ne povis pensi la vorto. Kaj tiam, kio estas eĉ malbona estas ke mi iros tiam starigu kuketo, kiuj estas iuj variablo mi havas en ĉi tiu retejo. Mi tuj metos gxin egalaj la dokumenton dot kuketo. Sekve, mi iros ŝteli vian kuketo. Kaj mi tuj redirect iuj informoj al retejo ke vi ne devu aliri. Kaj ĉi ĉiuj okazas ĉar vi estas ne eskapi kion vi vidis. Yeah? [01:36:29] Publiko: Do ​​apenaŭ al fari ke klara, estas vulnerable.com ke estas vundeblaj al ĉi. Tiel ke ligilo povas aperi sur ajna donita paĝo. Iu klakas sur ĝi, iras al vulnerable.com. Vi havas kuketo al vulnerable.com. Diru Facebook vundebla, tiel facebook.com. Vi havas vian Facebook kuketo. Kion ĉi tiu farante, vi estas tuj facebook.com, ĝi estas tuj redireccionando vi badguy.com, sed inkludante vian kuketon informo. Do estas rapida alidirektado, sed via Facebook kuketo ĝi inkludas kun tiu alidirektilo, kaj tiel estis kiel ili [inaudible]. Gabe: Yeah, estas iuj tre meznombro aferoj ke homoj povas fari, se tie estas tio. Ekzemple, se Facebook permesita ĉiuj ŝanĝi vian salutnomon, kaj ili ne faris ajnan prudento ĉekoj, tiel vi povus insertar Javascript afero ke ŝanĝas vian bildon al hamstro. Kaj kiu inserta la saman Ĝavoskripto en ĉiuj kiu vidas vian paĝon. Do ĉiuj kiuj vidas vian paĝon havas la saman aferon en la salutnomon. Kaj ĉar ĝi estas viruso, ĝi propagas eksponente. DAVIN: Ni transsaltu la lasta unu, kaj tiam ni faris. Do ĉi tiu estas nur alia ekzemplo. Tial tiele ili ne estas eskapi siajn SQL tablo. Do vi povas lasi ĝin. Do vi volas eskapi tion. Tio estis la antaŭa ekzemplo kun la kruco ejo scripting. Pardonu ni kuris iom malfrue. Morgaŭ, pardonon! Morgaŭ, ni havos oficejon horoj. Do oficejo horoj en Cabbot 8:00 al 11:00. La oficejo horoj estas strikte por kvizo demandoj.