[MUZIKO Ludante] DAVID Malan: Jen CS 50 kaj ĉi tiu estas la komenco de la semajno naŭ. Kaj kion ni opiniis, ke ni faru hodiaŭ ne nur fermi la ĉapitro sur lasta semajno materialo kie ni enfokusigis en servilo flanko ttt programado kun PHP kaj SQL, iu datumbazo ajxoj. Ni parolos pri iom da sekureco hodiaŭ kaj poste transiro al kliento flanko programado lingvo konata kiel Javascript. Sed unue, iom elacxeto. Vi eble memoras, ke sur Merkredo, mi ekiris skribi retejo kiu prenis en uzanto enigo per HTML formo kiu tiam stokitaj ke uzanto enigo nomoj, telefono nombroj kaj poŝtelefono portantoj en la datumbazo. Kaj tiam mi devis iom komando linio skripto skribita en PHP kiu supozis persisti super la vicoj en la datumbazo kaj sendu mesaĝojn de teksto. Malgraŭ pluraj, pluraj provoj, ni ne bonstata laborante por la fino. Do mi pasigis tiun tutan semajnon laboras sur tiu kodo akiri ni preterpasis la punkton kie ni cxesis, per ĉiuj Mi alvenis al la fino de la merkredo estis jena teksto mesaĝon el Margo mi baraktis, sekvata de teksto mesaĝo de alia samklasano, Vi havas tiu David. Sekvita de ĉi tiu, mirinde kuraĝiga. Plu iri, tre alentador. Mi alvenis preskaŭ ĝis then-- kaj tio estas la noto ni finis merkrede. Kaj tiam efektive eble mia favorito, post momento, tio venis. Malbenita Live Stream. Do hodiaŭ ni riparos tion per rapida rigardu kion mi faris tiam. Do ĉio ĉi kodo disponeblas linio de la pasinta semajno, semajno ok, fontkodo. Kaj vi vidos, ke mi trapasis, kaj mi fakte purigis tion iom. Mi prezentis paron aliaj trajtojn de SQL datumbazo. Ekzemple, anstataŭ simple portanto de var char mi kredas ke mi faris sur la muŝo pasintsemajne. Mi anstataŭe difinis kiel kio nomiĝas Enum. Kaj iu el vi eble vidis ĉi kiel ni esploris C. Enum estas reale esprimilo de C kie vi povas numeri tutan faskon da konstantoj kaj asigni ilin aŭtomata valoroj kiel unu, du, tri, kvar sen devi hard kodo nombroj. Do SQL subtenas la samajn, per se vi havas datumbazon kampo kiun vi nur deziras alpreni unu el finia valoroj, vi povas laŭvorte specifi ĝin kiel mi agis tie dum kvar populara usona celular portantoj. Do mi faris tion. Kaj mi faris plurajn ŝanĝojn nu, la plej grava el kiuj estis akiri email laboras ĉar recall, ke tiu programo baziĝis sur kiu ĝenerale nomita email al SMS enirejo, kiu estas ĝuste ornama maniero diri ke Verizon, kaj AT & T, kaj aliajn ulojn apogi servilon, per se ĝi ricevas retpoŝto, ĝi konvertas ĝin al SMS kaj etendanta tekston mesaĝon al ies telefonon. Do se mi faris ĉi ĝuste, tie estas nova kaj plibonigita formo kiu tuj parolos al nova kaj plibonigita kodon, kiun Vi povas ludi kun linio. Kaj espereble faros Mian telefono pepi en nur momento. Do unue, mi iros por tajpi en mia nomo. Due, mi ne fari cxi tiun fojon. Mi iras al vi Inspekti Elemento. Kaj ĉi tio estas nur etulon tiel mi ne Krei horoj de post produktado labori kiel mi faris lastan fojon. Tie nun estas mia telefonnumero. Mi elektas Verizon. Kaj tie, ni ŝalti ĉi mikrofono tie, kaj celi tion ĉe mia telefono tie. Mi tuj klaku Register, kiuj devus espereble metu gxin en la datumbazo. Nun mi tuj iros al la komandlinio programo, kiu Memoru nomata skalara oblikvo teksto, kaj transiras la fingrojn. Tie ni iras. [PHONE DINGS] [Aplaŭdo] DAVID Malan: Do pli amuza ol this-- ĝi estas amuza, kompreneble, se mi eniros en gxin. Sed ĝi estas pli amuza, mi pensis, ke ni kreis unu el tiuj filmoj momentoj kie kiel io vere malbona okazis en la mondo, kaj kiel ĉiuj NSA popola poŝtelefonoj komenci beeping kun teksto mesaĝojn atentigante ilin ĉi fakto. Do mi pensis, ni provus amuzi la saman tie, per ne uzanta datumbazon, Mi anstataŭe anticipe verkis programon kiu aspektas kiel ĉi. Tiu estas index.php-- Mi metis tiun kodon en linio kiel well-- kiu ŝajne nur bildigas form.php, uzante MVC stilo paradigmo ke ni raporti en pli detalo en problemo aro sep. Tiu formo estas sufiĉe simpla. Ĝi tuj submetiĝi al dosiero nomata here.php tra poŝto. Kaj estas ŝajne tuj demandos Mia nomo, kaj telefonnumero, kaj poste pere de la tn Elektu menuo, estas tuj donos al vi almenaŭ kvar populara usona celular portantoj, kaj do ebligas al vi efike preni asistencia alklakante ĉi tie. Kaj tie, dume, tuj prunti iujn de la kodo de lasta horo. Kaj se vi simple senkremigi ĉi, vi vidos ke ne estas tutan faskon de eraro kontrolanta. Sed la beleco fine estas ke ni ne skribas por datumbazo hodiaŭ. Ni teni ĝin simpla kaj simple sendo espereble teksta mesaĝo tra funkcion mi skribis dum la pasintaj kelkaj tagoj alvoko Teksto, kiu estas en funkcioj. php, kiu estas denove havebla rete. Do se vi volus partopreni en ĉi tio. Ni ne tuj estos stokante nenion. Iru al tiu URL tie en reala tempo. Ne enigu ĝin nur ankoraŭ, sed ni vidu se ni povas havi unu el tiuj filmoj momentoj kie ĉies poŝtelefono startas beeping, atendu nur fojo ĉi tiu jaro kontraste en 2011 kie tiu iris terure malbone. Kaj kiam vi iras al la adreso, Vi devus vidi súper simpla formo ke se vi havas nomon, poŝtelefono nombro, kaj celular portanto ke egalas la liston tie iri antaŭeniras kaj plenigu la formularon. Sed ne kolizias submit nur ankoraŭ. Formo tuj aspekti ĉi. Bonvolu tajpi vian nomon, telefonnumeron. OOP, iu tuj antaŭ la kurbo. Estas bone. OK, ĉies plenigis la formularon. Tio devus labori sur telefono, tro, se vi volas. Bone, en via markoj, get starigis, iru. Hit tie. Kio? No. Mi ĵuras al Dio, mi provas tio multnombraj fojoj hodiaŭ. Vi havas ĝin? [Intermetante voĉoj] DAVID Malan: Bone, uzanto eraro eble. Tio estas du. Ĝi laboris por du el Kelkcent, tri, kvar. OK, tio estas bona. Kvar el kvin por korekteco kiom pri. Do kio ĵus okazis? Do supozeble, ne vidante vian ekranoj, kial povus esti ŝin errored? Estas probable, ke ni simple provante fari tro multajn rilatojn al Harvard mail server ĉiuj je fojon el la sama IP-adreso. Mi nur diveni ĉar mi ne havas la lukson de testado tiu kodo per kelkaj 300 homoj anticipe sed nun rimarkas ke ke almenaŭ devus ili atingis la laboron farita tiu tempo. Bone, do kial estas tiu tuta pli germane al kio okazas? Nu unue, rapida Paro de anoncoj. Do oni, se vi ŝatus aliĝi Chang, kaj Nick kaj aliaj ĉe lunĉo ĉi Rosa fari RSVP ĉe la kutima adreso tie. Se vi pensas koncentrante aŭ faranta malĉefa en CS, ĉu vi estas sophomore, aŭ freshman, aŭ eĉ junior aŭ altranga ĉe tiu punkto kaj ankoraŭ povas elpremi en la kursoj, rimarkas ke la inĝenierio lernejo kolektinto senpage Ben kaj Jerry glaciaĵo kaj konsiloj tiu merkredo baldaŭ post klaso je 4:00 ptm en la CS konstruaĵo ĉe Maxwell Dworkin. Se tio estas tro rapida sur la ekrano, nur iri al cs50.harvard.edu por ligilo al la Facebook evento kie vi povas vidi pli da detaloj. Dume, mi pensis, ke mi korektu unu alia afero mi goofed merkrede. Rezultas ke Marko ID en Facebook ne tri. Estis kvar. Rezultas li havis pli testo kontoj ol mi respondas. Sed kion tio sentis kiel ŝanco fari estas elsxiros URL kiel ĉi. Do rezultas ke Facebook havas API, Application Programming Interface, kiu estas mekanismo per kiu vi povas peti datumojn programmatically ĉe Facebook kaj reiri maŝino legeblajn informojn, ne retpaĝoj sed nur krudan teksto, io nomata Ĝavoskripto Objekto Skribmaniero. Kaj fakte, se mi vizitas URL zomi, implicite, tio estas Marco publike atingebla informo. Kaj la interesa detalo tie estas nur, ke lia ID Estas vere, la numero kvar, kion mi realigita tiel frue kiel mi faris tion. Vi povas fari tion mem, se vi scias via Facebook salutnomo se vi havas unu. Simple tajpu ĝin pinto. Kaj neniu el ĉi estas privata. Mi nur faras tion eĉ en la incógnito modo. Do mi eĉ ne estas ensalutinta. Kaj vi vidas, ke mi ŝajne estis uzanto nombro 6.454 Facebook, kiu estas ne Domaĝe tiujn tagojn. Do ĉiuokaze, vi ankaux vidos aldonan informon tie. Kaj la utila aspekto de tiu estas kiu vin povus skribi vian propran programaron kiu iel integras datumoj ŝatas ĉi en via propra apliko. Vi povas kapabligi uzantoj ensalutu en vian retejon, Ne uzante sian propran uzantnomon kaj Pasvorto sed eble iliaj Facebook ensaluto kaj akiri informojn eĉ pri siaj amikoj, se aprobi tian, aŭ simila. Do rimarku ke CS50 ankaŭ havas iuj de liaj propraj APIs, unu por la kurso katalogo datumoj iuj por la brakumojn menuoj en la manĝoĉambro salonoj, ĉiuj konstruaĵoj kaj lokoj surterene ni havas API por tiel ke vi povas konsulti simile kaj alveni reen tekstajn datumojn kiuj povas integri en PHP, aŭ Ĝavoskripto, aŭ eĉ, kvankam malpli ofte, oni C bazita projektas finon. Ja antaŭ la fino projekto kelkaj limŝtonoj. Vi akiris retpoŝton de ni la alia tago. Rimarki, ke la propono Estas pro tiu venanta lundo. Ĝi ne estas nepre deviga, sed vi do bezonas ricevi vian instruadon kamaradoj aprobon antaŭ fari ajna ŝanĝojn poste. Kaj tiam antaŭen estas numeron de aliaj limŝtonoj. Do por turmentus vi ankaŭ kun iuj ebloj, ni havas amason da tiuj nuancon ampoloj. Kaj iujn el vi infanoj nun havas iom de tiuj en via dormejo ĉambron tiel. Kaj ankaux ili havas API. Do memoru tiujn duuma bulboj semajnoj antaŭ tiu Dan Bradley kaj Ansel Duff kreis por ni. Ili uzis programaro interfaco por tiu ampolo, kiuj nuntempe estas konektita al elektra kaj tiam tra senkabla estas konektita al malgranda afero nomata Ponto malsupren tie, kiel eta enkursigilo proprieta al tiu aparta mekanismo. Sed rezultu se mi scipovas sendu HTTP mesaĝojn, kiel ni ĉiuj nun fari, Mi povas sendi mesaĝon ŝatas tion tiu ampolo igi ĝin aŭ malŝalti aŭ fari ajnan numeron de aliaj operacioj sur ĝi. Rimarki ke ĝi ne ricevas, ne estas post. Ekzistas alia nomita posteno. Estas fakte kelkaj aliaj tiaj verboj. Sed rimarki tie estas vojo tie, slash API, slash nova programisto, slash lumo slash unu, slash stato. Tio ŝajne nur la irejo kiun la kompanio Philips, decidis vi devas bati kun HTTP peto Se vi volas ŝanĝi la staton de la bulbo uzante HTTP 1.1. Tiam rimarkos la malplenan linion. Kaj poste persiste kio aspektas kiel speco de tabelo de iu tipo, tiu fojo tuj nomos JavaScript Objekto Skribmaniero, aŭ Jason. Kaj kion vi vidas tie estas ke estas tri ŝlosilaj valoro paroj. Unu ŝlosila tuŝas. Kaj lia valoro ŝajne tuj estos vera. Brilo estas 128, kiu Estas ia int. Kaj tiam transiro tempo nulo, kiu ŝajne kiom longe tuj preni turni tion plu. Do nun tiu ampolo estas malŝaltita. Sed se mi faras ĝuste this-- lasu mi iru al iom Gvidfolio ke Dan starigis en advance-- kaj mi tuj antaŭeniri kaj kopii la sekva komando. Frizo, kiel kelkaj el vi eble kolektadis sur CS50 Diskuti estas ilo kiel Telnet tiaj ke vi povas simuli HTTP petojn, specife metas. Mi povas sendi tiun datumon, specife kion ni ĵus vidis antaŭ momento specife al tiu URL super tie. Kaj tiam Curl tuj manipuli ĉiujn necesajn headers kaj sintaksanalizi ekzistas. Do kion mi devas fari estas kopii la jeonon terminalo fenestro kaj tiam batis eniri. Kaj la ampolo daŭras. Kaj tiu estas ĉiu irante tra mia komputilo sendrate iel malsupren al la ponto, kiu Estas tiam parolas al tiu ampolo. Mi povas fari ion alian. Mi povas fari tion iri ruĝa ekz. Mi povas ekzemple fari tion iri verdan. Mi povas trairigu blua. Kaj rimarki en ĉiu el tiuj petskribojn, ĉiuj, ke mi ŝanĝas estas la tn nuancon valoro efektive donu al ĝi iun koloron. Do lasu min alglui ĉi tiu en tiel. Nun estas blua. Kaj vi povas fari eĉ amatoro aferojn where-- ni iru al verda. Kaj mi povus tion faras Kompreneble, per mia propra kodo. Sed eĉ la API mem Elportas funky operacioj kiel tiu, kiu nun tedas ni por la proksima 30 sekundoj. Do jen unu guston de tio, kion vi povus faru kun API, ĉi tiu engaĝante ampoloj. Notu ke CS50 havas paron paroj de Google Vitra se vi volas ŝatus pritrakti ion kune tiuj linioj, Arduino Unos, kiu Estas eta komputiloj, esence, sur malgranda cirkvito tabulo ke vi povas konekti dratoj kaj aliaj aĵoj al kaj reale kontrolo via reala mondo medio. Kaj tiam estas paro de novaj ludiloj kiujn ni havas. Ĉi tiu laŭvorte ĵus alvenis la alia tago per poŝto, Myo braceleto. Kaj mi pensis, ke estas formo de Foriru ekscitita pri projektoj ke vi povu uzi kun tiu aparataro farus estu ludi ĉi mallonga klipo kiu uzas al turmentus ulojn ke ni nun vivas en la estonteco. [MUZIKO Ludante] DAVID Malan: Do en nur kelkaj semajnoj, vi tro eblas ke malvarmeta en la CS50 foiro. Alia mekanismo kiu ni havas faskon de kiu ni feliĉaj prunti el por projektoj nomas mocio adaptilo. Tiu estas malgranda mekanismo USB konekti al komputilo kiu ebligas al vi interagas kun via portebla, Mac aŭ PC, kvazaŭ vi havis kiel Xbox Kinect kaj reale fari fizikan moviĝoj multe kiel ni vidas en ĉi vidado de la estonteco. [MUZIKO Ludante] DAVID Malan: Do eĉ se vi havas neniu ideo kiel io tia eble povus esti elpensitaj aŭ verkon sur aparataro nivelo, ne gravas. Eĉ post malmultaj monatoj de CS50, kaj komprenon de programado pli ĝenerale, kaj ttt programado pli ĵus, kaj tiam ankaŭ APIs kaj HTTP, vi havos aliron tra programaro APIs se vi do volas pruntepreni unu el tiuj aparatoj por fakte parolas al ŝi kaj ne devas maltrankviligi la suba efektivigo detalojn, kiu estas tute konsekvenca kun tiu nocio de layering abstraktaĵo ke ni vidita tra la semestro. Tiel ankaŭ dum la semajnfino, ekvidis paron pecoj de novaĵoj. Iri unue iru seminarioj se vi ŝatus lerni ion pli sur iu ajn nombro de temoj. Vidu la URL tie. Kaj ĉi tiu estis sendita al mi de Chang, kiu vin konas, Kiu estas videbligi nian armeon de elefantoj. Kaj estis ĉeftitolo jene. Mi timegas de mia nova TV. Kial mi estas timigita por defali aferon ankoraux vi estus tro. Do ni estas nun en la notas en la semestro, tro, kie eĉ se vi havas la plej eta de kompreno pri kiel la TTT funkcias, kaj HTTP, kaj sekureco, aĵoj kiel ĉi devus komenci kapti viajn okulojn. Sed ankaŭ, vi komprenos ĉu tio estas aŭ ne estas realaj minacoj. Do mi prenis kelkajn ekstraktojn de tiu artikolo ĉi tie. Kaj la historio estas kiel sekvas. Mi nun la posedanto de nova smart TV, kiu promesas transdoni streaming plurmedia enhavo, ludojn, app, sociaj rimedoj kaj interreto navigacio, aj kaj TV ankaŭ. La sola problemo estas, ke mi estas nun timu uzi ĝin, diras la aŭtoro. Vi estus, ankaŭ, se vi legas tra La 46 paĝoj privatecon politiko por via televido. La kvanto de datumoj ĉi afero recolecta estas miriga. Ĝi registras kie, kiam, kiel kaj por kiel longe vi uzas la televidon. Ĝi elmontras sekvado kuketojn, kiel ni diskutis, kaj lumturoj desegnita detekti kiam vi havas vidita apartan enhavon aŭ apartan retpoŝtan mesaĝon Se vi volas kontroli retpoŝton sur via televido. Ĝi registras la apps vi uzi, la retejojn vi vizitas, kaj kiel vi interagas kun la enhavo, fari cxiujn ke tra via inteligenta televido. Ankaux gxin creepier yet-- tio estas mia addition-- estas enkonstruita en ĉambro kun rekono facial. La celo estas provizi gesto kontrolo por la TV kaj ebligas al vi ensaluti por personigita konton uzante vian vizaĝon. Sur la upside, la bildoj estas savis la TV anstataŭ alŝutita al kompania servilo. Sur la malavantaĝo, interreto konektiĝi faras la tuta TV vundeblaj al hackers kiu pruvis la kapablecon preni kompletan kontrolon de la maŝino. Pli tumulti, kvazaŭ tio ne estis inteligenta sufiĉa, estas la mikrofono. La TV fanfaronas voĉo rekono trajto kiu permesas spektantojn kontroli la ekrano per voĉo ordonas. Sed la servo venas kun iom minaca averto. Bonvolu atenti ke, se via parolitaj vortoj inkluzivi personaj aŭ aliaj sentemaj informo, ke informoj estos inter la datumoj kaptitaj kaj transdonitaj al tria. Got tion? Ne diru personaj aŭ sentemaj stuff antaŭ via televidilo. Do tio estas vere por vera. Kaj estas malfacile ne vidi se vi iri al Best Buy aŭ kiel televidiloj tiuj tagoj. Ili ĉiuj inteligentaj iel. Kaj ili nun estas inteligenta kaj creepier. Kaj ili estas simple kolekti datumoj en manieroj kiuj ni parolis kaj poste alŝuti ĝin tra HTTP aŭ iu alia protokolo al iu servilo. Do tio estis de amuza artikolo en ĉi interreta paĝaro tie, kiuj parolis pri aparta cimon aŭ erara kodo ke ni efektive povas ligi en lasta semajno diskuto. Do tiu subtitolo estis kiel sekvas, la rakonto iras tien, Josh Breckman laboris kompanio kiu surteriĝis kontrakto disvolvi enhavo mastrumado sistemo, aŭ CMS kiam ili estas vokitaj, por sufiĉe granda registaro retejo. Multe de la projekto implikis disvolvante enhavo mastrumado sistemo tial oficistoj estus povis konstrui kaj subteni la ĉiam ŝanĝanta enhavo por ilia retejo. Aĵoj iris sufiĉe bone por kelkajn tagojn post iri vivas. Sed en tago ses, aĵoj ne iris tiel bone. Ĉiuj enhavo sur la retejo estis tute malaperis. Kaj ĉiujn paĝojn kondukis al la defaŭlta, bonvolu eniri enhavo retpaĝo. Whoops. Josh estis nomita por enketi kaj rimarkis ke oni aparte ĝenaj ekstera IP adreso havis aligxo kaj viŝis ĉiujn la enhavo sur la sistemo. La IP-adreso ne apartenis al iu eksterlande hacker fleksita sur detruante helpema registara informo. Ĝi decidis googlebot.com, Google tre propra retejo rampanta araneo. Whoops. Post iom da esplorado kaj grimpadi ĉirkaŭ trovi noncorrupt apogilo, Josh trovis la problemon. Uzanto estis kopiitaj kaj batitaj iun enhavon de unu paĝo al alia, inkludante redaktan hiperligilo redakti la enhavon de la paĝo. Normale tiu ne estus temo ekde ekstera uzanto bezonas entajpi nomon kaj pasvorton, sed la CMS autenticación sistemo, login sistemo, ne enkalkuli malnaiva hacking teknikojn de Google Araneo. Whoops. Kiel ĝi rezultas, Google Araneo ne uzas kuketoj, kio signifas ke ĝi povas facile preteriri ĉekon por estas ensalutinta en kuketo aro al esti malvera. Ĝi ankaŭ ne atentu Ĝavoskripto, kiu kutime suflori kaj redirect uzantoj kiuj ne estas ensalutinta. Ĝi tamen sekvi ĉiun hiperligilo pri ĉiu paĝo trovas, inkludante tiuj kun Forigi Paĝo en la titolo. Whoops. Do kion signifas tio en pli teknika sed sufiĉe atingebla terminoj? Tio simple signifas ke tra lia loko retejo, Ili havis URLoj ne kontraste kun ĉi tiu, kiu vi eble vidos en problemo starigis sep. Memoru en problemo starigis sep nek scios problemo starigis sep ke vi defiita, interalie, vendi akcioj nome de uzantoj. Sed efektivigo tiu karakterizaĵo de vojo de akiri tra hiperligiloj en via uzanto Interfaco, verŝajne ne la plej inteligenta ideo ĉar se via retejo estas iel alirebla aŭ per homa Kiu estas klakante ĉirkaŭe aŭ aĉeti bot kiel Google aŭ Spider kiam ili estas nomitaj tio estas nur trenante la retejo provas indekso la retejon kiel serĉilon, ili povis tre facile batita tra ricevi ĉi tiun klason de URL. Kaj tio estas funkcie samvaloras, tiukaze vendante ĉiuj agoj de Google. Nun sincere, estas tute asinine ke la CMS uzita JavaScript kaj kuketojn implementar lia ensaluto sistemo kaj ne faras tion servilo flanko, kiel vi uloj faras kaj faros en PSet 7-- tie estas login.php file-- ĉiam, ĉiam, ĉiam sekureco devus esti farita sur la servilo flanko ne sur la kliento flanko ĉar, kiel tiu artikolo sugestas kaj eble vi mem vidi en iu punkto, ĝi estas bagatela por uzanto, bonaj aŭ malbonaj, por simple malŝalti Ĝavoskripto Ne mencii kuketojn. Do kiu estas via ĉiutaga WTF. Ekzistas unu pli, kio estas ĝuste speco de timigas, do mi dankinde se nur kiel vivo leciono. Kiam ajn vi uzas apliko nomita kiel Snapchat aŭ simila kiu diras tiujn fotojn nur daŭri kvin sekundoj, dek sekundoj, aŭ whatnot. Ili estas efemeraj Tio estas absolute ne estas la kazo. Kiel ne estas maniero, ciferece, implementar iu formo de vídeo, aŭ bildo, aŭ teksta dividante tiajn ke ricevanto sur la alia fino ne povas iel savi la datumojn. En la plej naiva maniero, iu povis preni sian telefonon. Kaj ili havas 10 dua fenestro dum rigardante kelkaj snap por simple prenu alian telefonon kaj foti ĝin, evidente. Do vi povas antaŭgardi io cifereca tiamaniere. Kelkaj el vi scias kiel preni ekrankopioj de via telefono. Fakte, se vi ne scias tion, rimarkas ke almenaŭ Snapchat, kaj mi opinias, aliaj aplikoj tiuj tagoj, almenaŭ al vi se la ricevonto havas reale prenita ekrankopio de via bildo. Sed malbona ankoraŭ, tiu estis la snappening, kiel iu stampis ŝin ĵus, kie iuj 100.000 punto estis liberigitaj en kio nomas torento dosieron sur diversaj retejoj finfine. Kaj tiuj enhavis tutajn faskon de privataj mesaĝoj kaj afiŝojn. Ĝi rezultas plejparte benigna, tial ne kion vi povus atendi. Sed ĉar la homo havis uzata tria paĝo, ensalutadon iliaj Snapchat salutnomon kaj pasvorton kaj tiam ŝparante ĉiuj iliaj punto sur tiu tria paĝo. Kaj okazis, ke la tria partio retejo kiu estis hackeado, kio ĝuste signifis iu supozis, kiom akiri ĉiuj 100.000 pli de tiuj bildoj en siajn proprajn malmola disko por posta interŝanĝo. Sincere, tie ankaŭ, ĝi estas speco de asinine ke Snapchat implementa en tia vojo ke tria okupiĝos de detranĉo la datumoj kaj ke ĝi ne estas ligita al via propra apliko kuras sur la telefono. Sed ĉi tie ankaŭ rimarkas, ke tiuj aferoj ne kaptos vin per surprizo, aŭ almenaŭ ne devus esti vivo lecionon tie. Se vi ŝatus la teknika detaloj, iru al tiu URL tie tio estas en hodiaŭa diapozitivoj. Bone, demandojn pri hodiaŭa vivo lecionoj en CS? Turnu ke ekstere. Io ajn? Io ajn? Mi havas multe da homoj kontrolanta ilia Snapchat aŭ iu jam. Bone, do SQL, Strukturita Query Language. Ni envolver ĉi. Kaj same, kvankam Ni nur skrapi La surfaco de tiu lingvo, ni donos al vi sufiĉe de la lingvo en formo de PSet 7 por ke vi povu pritrakti iujn sufiĉe komuna funcionalidad. Sed realigi estas kelkaj tion ni ne postulos de vi, sed tuj estos grava veni fino projektoj kaj certe venas farante reala retejojn kun realaj uzantoj Estas ĉi tiu dezajno decido. Ĝi rezultas ke en MySQL datenbazo, vi havas aroj da elektoj kiel la datumtipoj vian kolumnoj kaj aliaj aferoj, sed vi ankaŭ havas la elekto de tiel nomataj stokado motoro por ĉiuj viaj datumoj, la varo de dosiersistemo, se vi estas familiara, por ĉiuj viaj datumoj. Kio formato ĝi finfine stokitaj en? Kaj la plej komuna, eble, estis MyiSAM kaj InnoDB, teknikaj terminoj ke ni devos zorgi pri nur ĝis la punkto kiu havas kaj oni ne devas La jenaj karakterizaĵo. Supozu ke vi havas iom dormejo fridujo. Kaj supozu ke vi kaj via kompano, kiuj dividas ĉi fridujo, Estas vere ŝatis ekzemple lakto. Kaj tio estas, fakte, kiel la rakonto estis rakontita al mi vojon reen en la tago, kiam Mi prenis kurson nomata CS 161 Operating Systems, kiu simile esploras ĉi temo. Do vi havas ĉi fridujo. Vi estas ekster la lakton. Kaj vi venis hejmen, via kompano La ankoraŭ en klaso aŭ kio estu, kaj vi decidas Mi tuj eliru kaj akiri lakton. Do vi fermas la fridujo, lockup la dormejo ĉambro, iri trans la straton al CVS aux kie ajn kaj ricevi en linio por aĉeti lakton. Dume, via kompano ricevas hejmo de klaso, metas en la dormejo ĉambro, malfermas la fridujon, ankaŭ rimarkas ooph, ni estas el lakto. Do li aŭ ŝi fermas la fridujo kaj tiam okazas iri al la alia CVS, kio okazas al esti unu bloko for de la aliaj CVS en la placo, kaj metas en linio tie por akiri lakton. Nun, kompreneble, kelkajn minutojn poste, vi ambaŭ reiri, kaj la plej malbona de ĉiuj eblaj rezultoj okazis. Ambaŭ vi havas lakton. Kaj vi ne vere kiel lakto kiu multe. Do unu el ili estas ĝuste tuj Sour je iu punkto. Do nun vi havas troan kvanton da lakto en la fridujo ĉiuj ĉar kial? [Inaudible] DAVID Malan: Jes, vi ne iel interkomuniki ke vi akiri lakton. Do, en la plej simpla de manierojn en la homa mondo, kiom povus vin eviti ĉi stulta scenaro okazas tiaj ke vi nur finos kun tiu. Teksto ilin, jes bone. Sed kiel alie? Post-it notoj. DAVID Malan: post-it noto. Ajna formo de komunikado kiu rakontas via kompano ne iru en la fridujo por lakto. Mi tuj iros restock sur mia propra. Do vi iel bezonas ŝlosi tiu rimedo. Do ni povas fari this-- ni povas ia ruinigi la rakonto kaj igi CS rakonto per pensi pri tio kiel ĝuste kiel variablo, kiu stoki iu valoro. Kaj nun, la valoron de lakto estas nulo, kion vi ne deziras ke viaj kompano inspekti ke variablo kaj tiam preni decidon li aŭ ŝi bazita sur la stato de tiu variablo Se vi estas en la procezo de ŝanĝi la staton de tiu variablo. Do unu el la linioj de SQL ke ni doni vin en PSet 7 specifo Estas ĉi tie. Kaj ni ne elspezi grandegan kvanto de tempo paroli pri ĝi. Sed rezultas, se vi provas aĉeti iun stoko en CS50 Financoj ke vi jam havas iuj agoj de vi deziras povi fari nombro aferoj tuj kune. Vi volas povi efektive, sur alta nivelo, kontrolu bone, se mi volas aĉeti pli agoj de Libera, la penny stock ni raporti en la spec, Mi volas unue ĉeko kiom agoj mi havas. Kaj supozu estas kvin. Kaj supozu mi volas aĉeti 10 pli, mi finfine volas havi 15 agoj de stock. Do mi devas demandi du demandojn. Kio estas la stato de la variablo? Kio estas la stato de la vico? Kiom da agoj mi havas nuntempe? Tiam vi volas iri antaŭen kaj ĝisdatigi ĝin. Do tio estas la analoga al la lakto en kiu vi kontrolu la vico, kaj tiam vi volas ĝisdatigi ĝin ĉar se vi volas aĉeti 10 kotizoj, Vi ne volas ŝanĝi la vico 10, vi volas ŝanĝi ĝin al 5 plus 10 aŭ, kompreneble, 15. Ĉi tiu linio de kodo certigas ke tiuj du ideoj conceptuales okazi kune aŭ ne. Neniu, inkludante iuj aliaj uzanto Kiu estas ensalutita en la sama paĝo, povas iel interrompi la kontrolado de la vico kaj la ĝisdatigo de la vico, la elekti kaj la ĝisdatigo se vi volas. Kaj la sintakso estas súper evidentaj, sed ĉi tiu linio, estas longe estas, certigas ke tiuj du operacioj kontrolu la variablo aŭ kontroli la vico kaj ĝisdatigi la vico okazi atomically. Ho jen ni reiru. Teksto mesaĝo sur mia telefono. Do ni faru ĉi tion Iom pli konkreta. Supozu ke vi ne efektivigo fridujo, kaj vi ne implementar PSet 7 sed reala banko, aŭ ATM, aŭtomata Teller Maŝino, per kiu vi iel deziras povos plivigligi uzantoj transferir mono de unu konto al alia. OK, pendas sur. Mi iras al enmudecer ĉi nun, dankon. Do ni volas movi monon de unu konto nombro en malsaman konton nombro, specife $ 100. Do ĉi tiu estas speco de arbitran Ekzemple, per ĝi, la ATM, eble volas ekzekuti du SQL pridemandojn, subtrahi de unu konto, kaj aldoni al la alia konto. Sed vi volas certigi ke tiuj du liniojn tiel okazi aŭ ne. Vi ne volas ion akiranta interrompita. Vi do ne iaj inteligentaj malbona ulo iel staras ĉe Banko de Ameriko kun du ATMs antaŭ li kaj iel ia tajpante en la komandas samtempe, espereble provas dedukti $ 200 anstataŭe de $ 100 kaj nur havanta $ 100 akreditita. Mallonge, vi volas ke ĉi tio kondutas precize kiel vi atendas. Kaj la vojon vi faras tiu en SQL datumbazo vi envolver ĝin en kio estas nomita transakcio. Laŭvorte en SQL, vi povas nomi CS50 la informpeto funkcio kun citaĵo unquote komenco transakcio. Tiam vi povas ekzekuti ajnan numeron de posta SQL pridemandojn, sed neniu el ili prenu efekto en la datumbazo ĝis vi nomas informpeto citaĵo unquote commit, se denove uzante PHP. Kaj en tiu maniero, vi povas certigi ke eĉ se vi havas 1,000 uzantoj ĉiuj bati vian datumbazon samtempe, SQL promesos ke tiuj du pridemandojn estos implementado unu tuj post la alia. Do vi ne finos kun troo de lakto aŭ malĝusta kvanto, finfine, mono. Tiel konservi ĉi tio en menso, Ne tiel por PSet 7 sed por fina projektoj Se vi reale provante movi datumojn ĉirkaŭ trans tabloj kiel vi povus tie. Sed eble eĉ pli simpla kaj pli evidenta kompreni kun ekzemplo Estas ĉi tie. Kaj iu retpoŝtis ni pri tio tute alia tago kiam li vidis ion similan en linio. Do laŭ mia scio, la pinglo sistemo ne estas vundebla al tiu atako. Mi havas neniun ideon se ĝi eĉ uzoj la SQL datumbazo sub la kapuĉo. Sed ni uzas ĝin por pro diskuto. Jen la ekrano kiu Harvard ulojn inklinas vidi kiam ensalutadon kun siaj Harvard ID nombro kaj iliaj pinglo. Kaj supozu ke la pinglo sistemo estis implementado en PHP kaj MySQL datenbazo, la kodo ke iu eble skribita jarojn povus aspekti kiel ĉi. Unue, deklari variablon nomis uzantnomon. Kaj simple akiri tiun de la POST superglobal. Tiam akiri alian variablon nomita pasvorton kaj fari same. Kaj tiam simple ekzekuti tiu longa informpeto tie, select stelo de uzantoj kie uzantonomo egalas tia kaj tia kaj pasvorto egalas tian kaj tian. Rimarku ke la frizita krampoj mi uzis ĉi tie nur signifus PHP, iru antaŭen kaj anstataŭanto la valoro de tiuj du variabloj pravas. Ili ne estas strikte necesa, sed inklinas eviti subtila sintaksaj eraroj. Do tiu aspektas tute korekta unuavide. Kaj ĝi estas. Vi povus apliki la pinglo sistemo tiamaniere. Sed supozu, ke la super inteligenta kaj malica studento enigo ĉi kiel lia aŭ ŝia pinglo. Do mi forigis la kuglon signoj tie en la imita supren, kaj mi fakte malkaŝis kion li aŭ ŝi povus esti tajpadon. Kaj estas iom stranga. Sed kion elsaltas ĉe vi en potenciale preocupante pri la uzanto enigo, eĉ se vi havas neniun ideon kio SQL injekto atako signifas. Kial tio aspektas iom suspektinda? Kio estas tio? [Inaudible] DAVID Malan: La aŭ estas iom suspektema. Fakte, tio estas ŝlosilvorto de SQL. Por ke ne aŭguras bone. La fakto ke ekzistas ĉiuj tiuj solan citaĵoj there-- fakte, unu el la plej facilaj manierojn rompi iuj datumbazoj Estas tajpante en nomo kiel O'Reilly kiu havas apostrofon en ĝi ĉar se la homo kiu verkis la kodo malantaŭ la scenoj ne enkalkuli ke eble sola citaĵoj en uzanto enigo, kaj li aŭ ŝi uzas sola citaĵoj en sian kodon, malbonaj aferoj povas okazi. Fakte, plej malbona ankoraŭ, pripensu tion. Se tio estis denove la kodo ke iu ĉe Harvard jaroj antaŭ skribis por la pinglo sistemo, rimarki kio estas al get anstataŭigita por salutnomon kaj pasvorton se la uzanto tipoj denove skroob kiel ilia salutnomo kaj tiam unu, du, tri, kvar, kvin, citaĵo aŭ citaĵo unquote unu egaluloj citi unu. Kaj rimarki kio estas ŝlosila jen la uzanto ne Komencis lian pasvorton aŭ ilia pinglo kun kurzo. Kaj ili ne finis gxin kun citaĵo ĉar li aŭ ŝi estas supozante ke se la programisto ne estis tiel akra, ili tuj havos tiujn sola citaĵoj en sia kodo. Do jen la kodon. Kaj la anstataŭo ke povus nun okazi estas tiu. Kaj mi substrekis kion la uzanto tajpita en. Do antaŭ, post. Kaj rimarki kio estas milde preocupante nun pri la dekstran duonon de ĉi SQL kodo? Ĝi estas iom pli kompleksa, rekoni, ol la pridemandojn ni vidis. Sed tio ne povas eble estus bona afero se vi estas dirante select stelo, kiu estas unuarangaj ĉion de la uzanto tablo kie salutnomo egalas skroob kaj Pasvorto egalas unu, du, tri, kvar, kvin aŭ unu egalas unu. Kio estas la logika implico de tiu lasta klaŭzo supozeble? Estas nur ĉiam vera. Kaj ĉar ni ia divenis aŭ eltrovis per provo kaj eraro ke la programador kiu skribis ĉi kodo ne anticipi homa aŭ malbona persono tajpado per apostrofoj tiel, ni povas sintakse kompletigi la SQL query kun ion sensencan sed iu kiu estas sintakse malĝusta kiu ĉiam taksas al vera. Do se tiu kodo estas uzata por respondi la demando vera aŭ malvera devus tiu uzanto estos permesita pasi, La respondo ĉiam ŝajne irante esti vera ĉar tio estas ĉiam irante elekti ion el la datumbazo ĉar unu kompreneble ĉiam egalas unu. Do kio estas la solvo? Nu en PSet 7, ni reale eviti ĉi ĉiuj kune. Ni donas vin konsulto funkcio, kaj ni kuraĝigi vin uzi demandosignojn kiel anstataŭaĵojn, simila spirite al printf estas% s sed kio estas ŝlosilo pri la demando markoj jen se vi efektive tralegi functions.php, kie nia informpeto funkcio estas implementado, tiuj demandosignojn savitoj, per io potenciale danĝeraj kiel sola citaĵo renversigxis enen eskapis sola citaĵo. Do tio estas kio estas vere okazas se vi uzi CS50 la informpeto funkcio aŭ ajna nombro de triaj libera bibliotekoj kiuj fari same. Ne gravas en tiu ĉi kazo, en verda, se la uzanto tajpita en simpla citaĵo ĉar la informpeto funkcio kiun ni skribis estas tuj aldonos deklivajn streketojn antaŭe tian danĝeran citaĵo. Do tio ne estas, Fakte, tuj estos legit. Ĉi tio estas kiel tajpado en freneza rigardante Pasvorto tio kompreneble ne tuj esti skroob la reala pasvorton. Do la takeaway por CS50 estas unu, absolute ĉiam uzi ion kiel CS50 la informpeto funkcio aŭ la suba biblioteko, kio okazas al nomi PDO. Sed neniam, neniam, neniam faros kodo kiel ĉi sen eskapi aŭ frotante kiel oni diras via enigoj. Kaj vi iam verŝajne ektrovas iun retejon kiel ĉi. Fakte, ŝajnas esti la kazo kiel en flughavenoj kaj hoteloj en lokoj kie havas liberan Wi-Fi aliro kiu vi devas ensaluti, tiuj retejoj estas ĉiam horore implementado. Do ia amuza hejme ekzercon, ne pro malicaj intencoj aŭ pli de amuza survoje ekzerco, estas simple tajpi apostrofo, sola citaĵo, en formo de iu retpaĝaro kaj vidu kio okazas. Kaj se la servilo frakasas aŭ donas vi ian erarmesaĝo, ĝi povas tre bone esti ke iu ne anticipis tion. Kaj tiam vi devus alarmi la taŭga aŭtoritatoj kaj duan fojon. Do nun vi uloj devus espereble kompreni iom pli geek humuro tie. [Ridado] DAVID Malan: Vi scias ke vi estas geek. Por la sekvaj jaroj, vi rememoros kiu iom Bobby Tabloj estas pro tiu karikaturo tie. Observu do, ke en menso kiel ni kunteksto ŝaltilo lasta fojo hodiaŭ Javascript. Ni pasigis relative malgrandan tempo sur la sintakso de PHP ĉar ĝi estas reale súper simila al C. Kaj bonguste sufiĉe, Ĝavoskripto tro Estas súper simila al C sintakso tiel kiel ni vidas en nur momento kaj kiel ni vidu poste tiun semajnon en aparta. Kion vi povas fari kun tiu ĉi lingvo, tamen, estas des pli potenca, precipe kun APIs. Sed unue rapida ĝiras. Do, en JavaScript, ekzistas neniu ĉefa funkcio, kiu estas bela. Kiel kun PHP, vi povas simple skribi kodon. Kondiĉoj aspekti ĉi. Kaj Bulea esprimoj multobligita aspektas kiel tiu aŭ kiel tiu. Ŝaltiloj ekzistas, kaj ili povus aspekti kiel ĉi. Kvar maŝojn aspekti ĉi. Dum maŝojn aspekti ĉi. Ĉu Momentoj aspekti ĉi. Kaj tiam arrays aspekti tiu, tre simila al PHP. Sed rimarki, ke en JavaScript vin deklari variablon ne kun dolaro subskribi, ne kun datumtipo sed laŭvorte dirante var por variablo antaŭ ĝi. Ankaux gxi malstrikte tajpita en tiu havas tipoj, sed vi ne eksplicite deklaras ilin. Kaj tiam ŝnuro, por Ekzemple, eble rigardu tiel, ke kordoj vokite s en tiu kazo. Kaj tiam objekto. Kaj jen ni vidos pli antaŭ longe. Kaj objekto estas eble unu el la plej komune vidataj datumstrukturoj en JavaScript bazita programo ĉar ĝi permesas vi asocii arbitra ŝlosila valoro paroj nur kiel PHP la asociaj tabeloj kaj ĝuste kiel viaj propraj hash tablo aŭ provu kiel ni implementado kelkaj semajnoj reen. Do ni efektive vidas kion ni povas fari kun JavaScript. Kaj precipe, tiu estas lavbutiko lerta de karakterizaĵoj ke retumiloj havas tiun ni permesos conectarse Ĝavoskripto en retejo de la sekva modo. JavaScript estas ofte uzata kiel kliento flanko skripta lingvo. Ĝi ne estas kompilitaj. Ankaux gxi interpretita. Sed kontraste PHP, kiu estis kuranta sur la servilo, en la ttt-servilo, aŭ profunda ene de la klientoj, Ĝavoskripto estas malsama ĉar ĝi kutime kuras en la navegador. Do ajna kodo JavaScript vi komencas skribi por PSet 8, aŭ via fina projekto, aŭ en la reala mondo estas ĝenerale irante esti savitaj en la servilo, absolute en dot HTML aŭ punkto JS por JavaScript dosiero. Sed la retumilo tuj elŝuti kiujn Ĝavoskripto kodo por via propra petskribo de Chrome, aŭ ie, aŭ Firefox, aŭ kion ajn. Kaj la kodo estas vere tuj akiri ekzekutitaj ene de via propra retumilo. Nur por fari tion pli realaj, ni vidas ĉi tion en konkreta formo. Ni havas neniun ideon kio tiu kodo faras sen vere legado tra ĝi. Sed permesu al mi iri al Facebook.com sen ensalutadon. Lasu min iri inspekti Elemento kaj iri al, diru, Reto kaj reŝarĝi la paĝon. Kaj ni see-- lasu min movi Reŝarĝi la Paĝo akiri ĉiujn petojn por novaj. Kaj la unua dosiero mi vidas estas CSS CSS. Jen la unua JavaScript dosiero, kaj mi havas neniun ideon kio tiu faras, sed ĉi tie Estas iuj de la JavaScript kodo kiu pelas Facebook. Estas eĉ ne vere ke malkaŝante zomi. Ĝi estas ankoraŭ same absurda. Sed vi vidos eĉ malsupre, ekzistas eĉ pli de tiuj JavaScript dosierojn. Whoops. Tio estas ping. Mallevigxu iom plu, plu, plu. Ekzistas unu. Ekzistas unu. Ekzistas unu. Do kvankam Facebook, malantaŭ la scenoj, estas skribita parte en PHP kaj Facebook propra versio gxiajn tie estas grandega kvanto de Ĝavoskripto. Fakte, neniu el la babili vi faras en Facebook, iu el la inline timeline ĝisdatigoj kiuj okazas en reala tempo, ĉiuj kiuj estas pelita de Ĝavoskripto. Yeah? Publiko: Mi ne certas se tio estas Facebook, sed mi pensas ke Facebook disvolvis ilia propra interna kodo lingvon? DAVID Malan: ili faris. Do tio estas kial mi diras varianco de PHP nomita Hip Hop ke ili reale aldonis karakterizaĵojn al tia ke kiam Markon unua implementado Facebook Ĝi estis skribita en PHP. Kaj tiu speco de restis la varo de antaŭa fino lingvo ke oni uzu por tre iliaj kodigon, sed Ne estis, ke lingvo skvamojn aparte bone miliardoj de personoj. Kaj tiel ili aldonis siajn proprajn plibonigoj malantaŭ la scenoj. Kaj ili uzos ajnan numeron de aliaj lingvoj por diversaj pecoj de siajn infrastrukturon. Do jes, ĝi estas varianco de kion ni nun scias kiel PHP. Do ni rigardu en paro de ekzemploj de kiel ni povus uzi JavaScript tie. En hodiaŭa fontkodo, ni havas faskon de dosieroj, la unua el kiuj, ni nomas DOM nulo. Do DOM nulo aspektas jene. Lasu min iri en tiun dosierujon kaj malfermu domzero.html, la supro de kiuj havas doc tipo deklaron jene tie venas HTML 5. Kaj nun jen la HTML-etikedo. Jen la kapo etikedo. Kaj jen kio novas hodiaŭ. Ni nun havas skripton etikedo ene de la kapo de la paĝo. Kaj tio ŝajne faras tre malmulte, sed avizo ke mi difinis skripto, JavaScript. Kaj kiel flanken, ĉar tiu Estas komuna eraro, JavaScript devas absolute nenion fari kun Java, la lingvo ke iuj el vi povus lernis en APCs. Ĝi estis pli de marketing afero ol io, rajdante la coattails Java jarojn. Sed JavaScript, neniel rilatas al Java, ĝuste simile, kaj annoyingly, konfuze nomita. Do jen kiel vi rakontos funkcio en JavaScript, laŭvorte diras funkcio, tiam la nomo de la funkcio, tiam ajna argumentoj eble prenos, ĝuste kiel en PHP. Rezultas en JavaScript, unu el la plej ĝena funkcioj kiuj ekzistas estas Alert. Tiu estas malgranda fenestro kiu estos popo kaj alarmi vi iu peco de informo. Ĝi estas ĝenerale malaprobita. Sed ni uzu ĝin kiel nia unua ekzerco tie. Rimarki kelkajn trajtojn de Ĝavoskripto. Sola citaĵoj kaj duoblaj citiloj Ne vere gravas anymore. Sola citaĵoj kaj duobla citiloj povas esti interŝanĝita, dum en C, oni devas uzi citiloj por kordoj, kaj vi havas du solajn citas por signojn. En la Ĝavoskripto mondo, multaj personoj, la plimulto de homoj uzi solan citaĵoj ĉirkaŭ kordoj simple ĉar ĝi estas stila afero. Sed kio estas la pli operatoro tie, kiun ni ne vidis antaŭe? Publiko: kunmeto. DAVID Malan: kunmeto. Do C eĉ ne havas tiun. PHP havas la skalara operatoro, kiu tion faras. Ĝavoskripto havas la pli operatoro, kiu konfuze estas simple kiel Java. Nun kio okazas ĉi tie? Do tie estas kie baza kompreno de tiu bildo ni ĵetis supren paro tagoj venas en ludon. Rememoru kiam ni havis simplan versio de HTML page-- ĝi nur diris, saluton mondo. Kaj tiam ni tiris arbo dekstren, kio havis amaseton da ortanguloj kaj linioj konektante ilin kiel familio arbo. Do tio estas la tn DOM aŭ Document Object Model. Kaj ĝi rezultas ke vi povas aliri ortanguloj en tiu arbo kun sintakso kiel sekva. Vi laŭvorte diras dokumento, kiu estas speciala tutmonda variablo en Ĝavoskripto programo kiu havas funkcion asociita kun ĝi, ke vi povas aliri simila al struct, sed vi simple diru dot kaj tiam la funkcia nomo, ricevas elementon de ID. La elemento Mi volas ricevi estas ŝajne citi unquote nomo. Kaj tiam mi volas trovi ĝian valoron. Nun ni ricevas antaŭ ni. Mi eĉ ne certas kion ĉiuj ĉi estas pri. Ni rapide antaŭen al la HTML de la paĝo, kiu estas súper simpla. Rimarki ke mi difinis Formo malsupren tie. Notice Mi transdonas gxin unika ID, kvankam ni ne uzis tiu atributo antaŭe. Sed tio ekzistas en HTML. Vi povas unike identigi iujn chunk de HTML kun identificador ŝatas ĉi. Notice nun this-- rezultas HTML Elportas, po ke lavbutiko listo antaŭ momento, tuta faskon da okazaĵo manipuladores. Kaj tiu evento traktilo diras sur submetiĝi. Sur la uzanto submetiĝo de tiu formo, alvoki la sekvan kodon. Kaj la kodo kiu okazas esti nomita aŭ ekzekutitaj Estas ĝuste tio, la greka funkcio sekvita reveno falsa. Ĉio alia devus esti bela familiara. Jen enigo de tipo teksto, kies ID, en tiu kazo, estas iranta esti nomo. Ni ne havas la veran nomon atributo ĉi time-- kaj submeto-butonon. Do la sekvonta pagxo aspektas kiel ĉi. Kaj la rezultanta konduto, vi vidos, aspektas kiel ĉi. La paĝo lokaj gastigantoj diras, saluton Davido, malfacile oni estetike agrablaj maniero saluti uzanto. Sed kio vere okazas? Nu, konsideru kia estas. Ĉi tiu estas teksto kampo. Kaj laŭ la HTML, mi donis ĝin identificador sola nomita citaĵo unquote nomo. Dume, mi diris kiam la uzanto prezentas ĉi formon batante Enter aŭ klakante la Submit butonon vokas la funkcion nomita Salutu kaj tiam revenu Falsaj. Ni konsideru tiujn inverse. Rimarki kiam mi klakas Submetu, la URL de ĉi tiu paĝo ne ŝanĝas. La retumilo icon ne komencis ŝpini. Mi ne iras ie, kaj tio estas laŭvorte ĉar mi diris reveni falsaj. Reiru Falsaj fuŝkontaktoj aŭ haltoj la defaŭlta konduto de formo. Tial do lasas nin kun ĉi tiu lasta demando. Kion Salutu fari? Nu, Salutu ŝajne nomas funkcion nomita Atentigo, pasas en unu longa argumento tio la rezulto de concatenando kune faskon de Pitono, saluton komo spaco, tiam ajn tiu revenas. Do dokumento estas kiel tutmonda variablo tiun radikon de tiu arbo, nomante speciala funkcio, alie nun konata kiel metodo. Funkcio tio ene de variablo estas nomita metodo anstataŭ funkcio. Do nepre elementon de ID. Kio elemento vi volas akiri por lia IRU? Citi unquote nomon kaj tiam specife taksas. Do alivorte, ke kodo simple Trovas la teksto kampo kies ID estas nomo kaj do ricevas sian valoron. Do se mi ŝanĝas ĉi kaj diru Davin anstataŭ David kaj alklaku Submetu, nun ni havi saluto por Davin. Bone, do ĉiuj fajnan kaj bonan. Sed ni vidu se ni povas fari tio iom purigisto ekde simple skribi kodon kiel tio Ĝenerale tuj estos malaprobita. Tiu tuj serĉos timinda. Sed kio estas la unua diferenco, ke vi rimarku tie en tiu versio krom la enoficigos ŝanĝante al DOM unu? Kio strukture aspektas malsama pri tiu kontre la aliaj? Yeah? Publiko: Ĉu la formo sur supro de la skripto nun? DAVID Malan: Jes, la formo estas supre de la skripto por iu kurioza kialo. Do tio estas la unua aĵo kiuj elsaltas ĉe mi, ankaŭ. Kaj dankeme almenaŭ, tiu parto estas identaj. Do la sola afero kiu ŝajnas esti malsama estas tiu. Do jen kio estas neta pri Ĝavoskripto 2. Kaj faras malfacile kompreni unuavide, speciale por fina projektoj se Vi rigardata specimenon kodo linio, sed bolas malsupren al kelkaj baza sintaksa karakterizaĵoj. Jen denove estas ke tutmonda variablo dokumento. Jen denove estas tiu metodo aŭ funkcio kiu diras akiri la elemento de ID. Ĉi tiu fojo mi volas akiri la ID nomita demo. Kie ĝi estas? Tio ŝajne dekstra tie, la formo mem. Kaj nun rimarkis ke ŝajne, se mi reiri ke nodo el la arbo reprezentas la formo mem, ne teksta kampo Ĝi rezultas ke formo, ke nodo aŭ rektangulo el la arbo, havas, kion ni nomas propraĵo, tre, tre, tre simila spirite al struct en C. Estas nur datuma membro ene de tiu rektangulo. Do mi havas la formon ĉi tie, kaj mi kunigante, aŭ mi asignanta, lia On Submit traktilo aŭ prefere On Proponu propraĵo La jena funkcio. Kaj tio estas, de for, la plej freneza afero tiel malproksime sintakse. Rezultas en JavaScript kaj en PHP, kaj sincere, cetere en C, eĉ se ni ne faros, vi povas aldonu sennoma, anonima, aŭ AKA lambda funkcioj kiuj ne havas nomon sed povas nomi tamen. Do kion mi faras ĉi tie estas mi asignanta ĉi On Proponu posedaĵo, kiun estas ene de tiu nodo miaj DOM ligno; funkcio, Funkcio montrilo se vi volas. Ke funkcio ne havas nomo, sed tio ne gravas ĉar ni vidos en momento kiel nomi ĝin. Kiam tiu funkcio estas vokita, tiu kodo prenas ekzekutitaj, tiam falsa redonas ĝuste kiel antaŭe. Sed rimarki kion mi faris. Ĉe tiu punkto en la rakonton, mi havas formon. Ĝi estas akiris unikan ID nomita demo. Cxi tie, mi havas skripton etikedo kiu ekzekutas la sekva kodo. Ĝi atribuas al tiu nodo en La arbo estas Sur Submit propraĵo tiu funkcio ĉi tie. Kaj ĝuste per naturo de kiel foliumiloj funkcias, Kiam mi nun klaku Proponu aŭ batis Enter, domadministranto tuj get nomata. Ĝi ne bezonas nomon pro kiu la heck zorgas kio ĝi estas nomata. La nura tempo iam tuj akiri nomita estas kiam mi sendi la formularon. Ne estas bezono por mi la homa programisto, efektive nomas ĝin aliloke. Nun kiel teaser, kvazaŭ ne gravas klinante sufiĉe, ni povas eĉ fari tiun aspektas pli kamufla uzanta súper populara biblioteko nomita jQuery. Fakte jQuery kaj JavaScript Ofte conflated. Kaj kion ni faros merkrede estas komenco uzante tiun lingvon kaj tiuj bibliotekoj konstrui pli nesinkrona kaj dinamikaj aplikoj kiel mapo atingi aplikaĵoj, aplikoj ke ĝisdatigi la retpaĝon en reala tempo, multe kiel Facebook aŭ Gchat faru, kaj ne plu nur pri batante Proponu per get aŭ nur post sole. Do mi vidos vin merkredon. [MUZIKO Ludante]