[REPRODUCCIÓ DE MÚSICA] DAVID Malan: Aquest és CS 50, i aquest és el començament de la setmana nou. I el que nosaltres pensem que ho fem avui no és només tancar el capítol de la setmana del passat material d'on ens centrem en el servidor programació web lateral amb PHP i SQL, una mica de matèria de base de dades. Parlarem una mica de avui de seguretat i després transició a una programació del costat del client llenguatge conegut com JavaScript. Però primer, una mica de redempció. Vostè pot recordar que en Dimecres, em vaig disposar per escriure una pàgina web que va prendre a l'entrada de l'usuari per un formulari HTML que després s'emmagatzema que els noms d'entrada de l'usuari, telèfon números, i el telèfon mòbil portadors a la base de dades. I després vaig tenir una mica d'ordre script de línia escrit en PHP que se suposava que iterar sobre les files a la base de dades i enviar missatges de text. Malgrat diversos, de diversos intents, ens no va aconseguir que el treball per al final. Així que em vaig passar tota la setmana de treball en aquest codi per dur-nos més enllà del punt on ho vam deixar, amb la qual cosa tot Vaig arribar al final de dimecres Va ser aquest missatge de text de Margo mentre lluitava, seguit per un missatge de text des d'un altre company de classe, tens aquesta David. Seguit per aquest, meravellosament encoratjadora. Va seguir endavant, molt encoratjador. Gairebé ho vaig aconseguir fins llavors-- i aquesta és la nota que vam acabar dimecres. I a continuació, en realitat potser el meu preferit, un moment després, aquest va entrar. Maleïda sigui directe corrent. Així que avui, podem solucionar aquest problema amb una ràpida mira el que he fet des de llavors. Així que tot el codi està disponible en línia des de la setmana passada, la setmana 8, codi font. I veuràs que jo vaig passar, i en realitat em vaig netejar una mica les coses. Jo vaig presentar un parell altre característiques d'una base de dades SQL. Per exemple, en lloc de només fer transportista de carbó var com crec que ho vaig fer sobre la marxa la setmana passada. Jo en canvi el va definir com el que s'anomena una enumeració. I alguns de vosaltres heu vist aquest com vam explorar C. Enum és en realitat una característica de C on es pot enumerar un munt de constants i assignar-los valors automàtics, com un, dos, tres, quatre sense necessitat de números de codi dur. Així SQL admet la mateixa, de manera que si Té un camp de base de dades que només voler prendre en una de finit valors, pot literalment especificar com ho he fet allà per quatre portadors populars de telèfons mòbils dels Estats Units. Així que vaig fer això. I he fet una sèrie de canvis com així, la més important de les quals era aconseguir email funcionant perquè el record, que aquest programa es va basar en la qual generalment anomenat un correu electrònic a Porta d'entrada de SMS, que és només una forma elegant de dir que Verizon, i AT & T, i altres persones suporten un servidor, per la qual cosa si rep correu electrònic, que converteix SMS i envia un text missatge al telèfon d'algú. Així que si ho vaig fer correctament, aquí és una forma nova i millorada que va a parlar amb nova i millorada codi, que es pot jugar amb línia. I és d'esperar que el meu xiulet telèfon en un moment. Així que en primer lloc, vaig a escriure el meu nom. En segon lloc, jo no vaig per fer això en aquesta ocasió. Jo faré Inspeccionar Element. I això és només una poca cosa, així que no ho faig crear hores de post-producció Treball com ho vaig fer l'última vegada. Ara és el meu número de telèfon. Vaig a seleccionar Verizon. I aquí, centrarem en aquest micròfon aquí, i l'objectiu està en el meu telèfon aquí. Vaig a fer clic Registre, que ha d'esperar el va posar a la base de dades. Ara em vaig a anar a la programa de línia de comandes, el que retir es diu barra de punts text, i creuar els dits. Aquí anem. [DINGS TELÈFON] [Aplaudiments] DAVID Malan: Així que més divertit que esto-- és divertit, és clar, si em fico en ella. Però és més divertit, vaig pensar, si creat un d'aquests moments de la pel·lícula on com una cosa realment dolent ha passat en el món, i com totes les persones de la NSA els telèfons mòbils comencen a sonar amb missatges de text alertant a aquest fet. Així que vaig pensar en provar per recrear el mateix aquí, pel que no s'utilitza una base de dades, I en lloc per endavant va escriure un programa que s'assembla a això. Aquest és un index.php-- i jo vaig posar el codi en línia com bé-- que pel que sembla només fa que form.php, usant un paradigma estil MVC que parlar amb més detall en conjunt problema Set. Aquesta forma és bastant simple. Es va a sotmetre a una arxiu anomenat here.php per correu. I està pel que sembla va a demanar per a un nom i un número de telèfon, i després a través de l'anomenada Seleccioneu el menú, que és donarà com a mínim quatre portadors populars de telèfons mòbils dels Estats Units, i després permetre que vostè efectivament prendre l'assistència fent clic aquí. I aquí, per la seva banda, va a demanar prestat part del codi de l'última vegada. I si vostè acaba de fullejar aquest, veuràs que hi ha un munt de comprovació d'errors. Però la bellesa al final és que no estem escrivint a una base de dades en l'actualitat. Estem fer que sigui senzill i només espero que l'enviament de un missatge de text a través de la funció I va escriure en els últims dies de trucades Text, que està en funcions. php, que és de nou disponible en línia. Així que si t'agradaria participar en això. No anem a guardar res. Aneu a aquesta URL aquí en temps real. No enviar de moment, però anem a veure si podem tenir un d'aquests pel·lícula moments en què el telèfon mòbil de tot el món comença a sonar, amb sort només un cop aquest any a diferència d'en 2011 on aquest va sortir horriblement malament. I una vegada que vostè va a aquesta direcció, vostè ha de veure una forma súper senzilla que si vostè té un nom, un telèfon mòbil nombre, i un vehicle mòbil que coincideix amb la llista d'aquí, anar endavant i omplir el formulari. Però no colpejar a presentar de moment. La forma tindrà aquest aspecte. Seguir endavant i escriure el seu nom, número de telèfon. Oop, algú va per davant de la corba. Està bé. Bé, tot el món està ple el formulari. Això hauria de funcionar en un telèfon, també, si ho desitja. Molt bé, en les seves marques, llestos, ja. Hit Aquí. Què? No Ho juro per Déu, he provat aquest diverses vegades avui. Ho tens? [Interposant VEUS] DAVID Malan: OK, potser un error de l'usuari. Això és dues. Es va treballar per a dos de cadascuna pocs centenars, tres, quatre. OK, això és bo. Quatre de cada cinc per Què hi ha de la correcció. Llavors, ¿què ha passat? Així que, presumiblement, sense veure el seu pantalles, Per què podria haver-hi molts errors? És probable que estàvem tractant de fer massa connexions al servidor de correu de la Universitat de Harvard en tot un cop des de la mateixa adreça IP. Només estic endevinant ja que jo no ho vaig fer el luxe de la prova aquest codi amb alguns 300 persones d'antelació però per ara adonar-se que que almenys ha de han aconseguit la feina feta en aquesta ocasió. Molt bé, així que per què és això tot el més afí al que està passant? Bé en primer lloc, una ràpida parell d'anuncis. Així que un, si vol unir-se a Chang, i Nick, i altres persones en el dinar d'aquest divendres, fer de RSVP a l'adreça URL habitual allà. Si vostè està pensant en concentrar- o fer una secundària en CS, si vostè és un estudiant de segon any, estudiant de primer any o, o fins i tot menor o major en aquest moment i encara pot esprémer en els cursos, adonar-se que l'escola d'enginyeria està reunint de forma gratuïta i Ben Gelat de Jerry i consells això poc després de classe dimecres a les 4:00 PM en l'edifici CS en Maxwell Dworkin. Si aquesta és massa ràpid a la pantalla, només ha d'anar a cs50.harvard.edu per a una enllaç a l'esdeveniment a Facebook on es poden veure més detalls. Mentrestant, jo pensava que anava a corregir una altra cosa que va ficar la pota dimecres. Resulta que aquest ID de Mark a Facebook no va ser tres. Eren les quatre. Resulta que ell tenia més prova comptes del que recorden. Però el que aquest se sentia com una oportunitat de fer és tirar d'una URL com aquesta. Així resulta que Facebook té un API, Application Programming Interface, que és un mecanisme mitjançant el qual es poden sol·licitar dades mitjançant programació a Facebook i tornar màquina informació llegible, no pàgines web però el text només prima, una mica anomenat JavaScript Object Notation. I de fet, si torno a visitar aquesta URL, i un zoom, per defecte, aquest és Mark públicament informació accessible. I el detall interessant aquí és només que el seu ID és de fet, el número quatre, que em es va donar compte tan aviat com ho vaig fer aquesta. Pot fer-ho vostè mateix si vostè sap el seu nom d'usuari de Facebook, si vostè té un. Només has d'escriure fins a dalt allà. I res d'això és privat. Només estic fent això fins i tot en la manera d'incògnit. Així que ni tan sols estic inscrit. I vostè està veient que jo pel que sembla era el número d'usuari 6454 a Facebook, que no és tan malament aquests dies. Així que de totes maneres, també veurà informació addicional allà. I l'aspecte útil que és que vostè podria escriure el seu propi programari que d'alguna manera s'integra dades com aquest en la seva pròpia aplicació. Pot permetre als usuaris a entreu al seu lloc web, no usar el seu propi nom d'usuari personalitzada i però potser la contrasenya d'inici de sessió de Facebook i obtenir informació fins i tot sobre els seus amics, si aproven tals, o similar. Així en compte que CS50, també, té algunes de les seves pròpies APIs, una per a les dades del catàleg suposat, alguns dels menús d'abraçades al menjador sales, totes de la edificis i llocs al campus tenim una API per tal que es pot consultar de manera similar i obtenir dades textual d'esquena que pot integrar en un PHP o JavaScript, o fins i tot, encara que amb menor freqüència, 01:00 C basa projecte final. De fet abans de la final projecte són unes fites. Tens un email de nosaltres l'altre dia. Adonar-se que la proposta cal el dilluns. No és necessàriament vinculant, però que no necessitarà rebre els seus companys d'ensenyament aprovació abans de fer qualsevol canvi a partir de llavors. I després per davant són un nombre d'altres fites. Així que per burlar de vostè, també, amb algunes possibilitats, tenim un munt de aquestes bombetes Hue. I alguns de vostès ara tenen alguns d'aquests a la seva habitació de la residència també. I ells també tenen una API. Així recordar aquestes setmanes bulbs binaris Fa que Dan Bradley i Ansel Duff ha creat per a nosaltres. Van utilitzar una interfície de programari per aquesta bombeta, que en aquest moment està connectat a l'electricitat i després a través de wireless està connectat a una petita cosa anomenat el Pont d'aquí baix, com un petit propietari del router a aquest dispositiu en particular. Però resulta que si sé com enviar missatges HTTP, com tots ho fem ara, Puc enviar un missatge com aquest a aquesta bombeta per encendre o apagat o fer qualsevol nombre de altres operacions en ell. Tingueu en compte que no és arribar, no és POST. Hi ha una altra que es diu put. De fet, hi ha alguns altres tals verbs. Però noti que hi ha un camí allà, slash API, retallar nou desenvolupador, reduir la llum, retallar un, slash estat. Això és pel que sembla només el camí que la companyia, Philips, va decidir vostè ha de colpejar amb una petició HTTP si vostè vol canviar l'estat de la bombeta utilitzant HTTP 1.1. Després noti la línia en blanc. I després, finalment, el que sembla classe d'una gran varietat d'una espècie, aquesta vegada serà anomenat JavaScript Object Notation, o Jason. I el que es veu aquí és que hi ha tres parells de valors clau. Una de les claus està cridada. I el seu valor aparentment serà veritat. La brillantor és 128, el qual és una espècie de int. I llavors el temps de transició és zero, que és aparentment quant de temps prendre per convertir això en alguna cosa. Així que ara mateix aquesta bombeta està apagada. Però si ho faig exactament esto-- deixar me'n vaig a un full de trucs poc que Dan va crear a advance-- i vaig seguir endavant i copiar la següent comanda. Curl, com alguns de vostès podria haver recollit en CS50 Discutir és una utilitat com Telnet, com que pot simular les peticions HTTP, posa específicament. Puc enviar aquestes dades, específicament el que acabem de vam veure fa un moment concret a aquesta URL aquí. I després Curl va a utilitzar totes les capçaleres necessàries i analitzar d'allà. Així que tot el que he de fer és copiar això a una finestra de terminal i després premeu Enter. I la bombeta s'encén. I tot això està passant per el meu equip de manera sense fil d'alguna manera fins al pont, que llavors està parlant amb aquesta bombeta. Jo puc fer una altra cosa. Puc fer aquesta cosa anar de color vermell, per exemple. Per exemple que puc fer aquesta cosa anar verd. Jo puc fer que es vagi blau. I noti en cada un d'aquests casos, tot el que estic canviant és l'anomenat valor de matís a realment donar-li una mica de color. Així que permetin-me pega aquest un endins també. Ara és el blau. I vostè pot fer encara més elegant coses where-- Anem a anar a verd. I jo podria fer això de per descomptat amb el meu propi codi. Però fins i tot la pròpia API dóna suport a les operacions de funky com aquest, que ara es molestaran nosaltres durant els pròxims 30 segons. Així que això és una mostra del que et poden veure amb una API, el qual va involucrar a bombetes. Tingueu en compte que CS50 té un parell parells de Google Glass Per agradaria per fer front a alguna cosa al llarg aquestes línies, Arduino Uns, que són diminuts ordinadors, essencialment, en una placa de circuit petit que es pot connectar cables i altres coses per al control i de fet el seu entorn real. I després hi ha un parell de joguines noves que tenim. Aquest literalment acaba d'arribar el un altre dia per correu, un Myo braçal. I jo que pensava que és una manera de que et entusiasma sobre els projectes que vostè pot utilitzar amb aquest maquinari faria ser per jugar aquest clip curt que utilitzen per a burlar-se de la gent que ara estem vivint en el futur. [REPRODUCCIÓ DE MÚSICA] DAVID Malan: Així que en tan sols unes setmanes, vostè també pot ser que fresc a la fira CS50. Un altre dispositiu que ens tenen un munt de que som feliç de donar per a projectes es diu un controlador de moviment. Es tracta d'un petit dispositiu USB es connecta a un equip que li permet interactuar amb el seu ordinador portàtil, Mac o PC, com si vostè tenia com una Xbox Kinect i en realitat fer moviments físics molt com veiem en aquest visió del futur. [REPRODUCCIÓ DE MÚSICA] DAVID Malan: Així que encara que té ni idea de com alguna cosa així possiblement podria ser inventat o treball a nivell de maquinari, no importa. Fins i tot després de només uns mesos de CS50, i una comprensió de la programació més en general, i la programació web més Recentment, i després també les API, i HTTP, vostè tindrà accés a través de API de programari si no volen demanar prestat un d'aquests dispositius de parlar amb ell i no haver de preocupar-se de la implementació subjacent detalls, que és completament d'acord amb aquesta noció d'estratificació una abstracció que hem vist al llarg del semestre. Així també el cap de setmana, vam veure un parell de peces de notícies. Vagi en primer lloc, anar a seminaris si li agradaria aprendre alguna cosa més en qualsevol nombre de temes. Veure la URL allà. I aquest va ser enviat a jo per Chang, que ja saps, que està imprimint al nostre exèrcit d'elefants. I era un titular com segueix. Estic aterrida del meu nou televisor. Per què tinc por de convertir aquest cosa en la qual vostè i seria massa. Així que ara estem en el apuntar en el semestre, també, on fins i tot si vostè té la menor d'entesa de com funciona la web, i HTTP, i de seguretat, aquest tipus de coses ha de començar a captar la seva atenció. Però també, vas a entendre si aquestes coses són o no són les amenaces reals. Així que vaig prendre alguns extractes d'aquest article aquí. I la història és la següent. Ara sóc l'amo de una nova televisió intel·ligent, que promet lliurar en streaming continguts multimèdia, jocs, aplicacions, mitjans de comunicació social i d'Internet navegació, ah i la televisió també. L'únic problema és que estic ara por d'usar-lo, diu l'autor. Vostè seria, també, si vostè llegeix a través de el 46 pàgina política de privacitat per a la seva televisor. La quantitat de dades d'aquesta recull cosa és sorprenent. Registra on, quan, com, i per quant de temps s'utilitza el televisor. S'hi estableixen les galetes de rastreig, com hem discutit, i fars dissenyats per detectar quan es té contingut particular vist o un missatge de correu electrònic en particular si desitja consultar el correu electrònic al seu televisor. Registra les aplicacions que utilitzar, els llocs web que visita, i la forma d'interactuar amb el contingut, fent tot això a través de la seva televisió intel·ligent. També, yet-- esgarrifós aquesta és la meva addition-- té una càmera incorporada amb reconeixement facial. El propòsit és proporcionar control de gestos per a la TV i li permeten iniciar una sessió a compte utilitzant el seu rostre personalitzat. Pel costat positiu, les imatges són guardat a la televisió en comptes de pujada a un servidor de l'empresa. A la banda negativa, l'Internet connexió fa que tota la TV vulnerables als hackers que han demostrat la capacitat prendre el control complet de la màquina. Més preocupant, com si això no fos prou intel·ligent, és el micròfon. El televisor té una veu funció de reconeixement que permet als espectadors a controlar la pantalla amb les ordres de veu. Però el servei ve amb una advertència en lloc de mal averany. Tingueu en compte que si les seves paraules parlades inclouen personal o un altre sensible informació, que la informació serà un de les dades capturades i transmesa a un tercer. Va aconseguir que? No diguis personal o confidencial coses al davant del seu televisor. Així que això és en realitat de veritat. I és difícil no veure si anar a Best Buy o similar per a televisors en aquests dies. Tots són intel·ligents, d'alguna manera. I que van a obtenir més intel·ligent i més esgarrifós. I estan simplement la recopilació de dades de manera que les que hem parlat i després pujar-lo a través d'HTTP o algun altre protocol a algun servidor. Així que aquest era d'un article de la diversió en aquest lloc web en línia aquí, que parlaven d'un particular, error o codi equivocat que en realitat podem lligar en el debat de la setmana passada. Així que aquest títol era com segueix, la història va aquí, Josh Breckman treballar per a una empresa que va obtenir un contracte per a desenvolupar una gestió de continguts sistema, o CMS com se'ls anomena, per a un lloc web del govern bastant gran. Gran part del projecte va consistir en el desenvolupament d'un sistema de gestió de continguts perquè els empleats serien capaç de construir i mantenir el sempre canviant contingut per al seu lloc. Les coses van anar força bé per pocs dies després d'anar en viu. Però en el sisè dia, les coses no anaven tan bé. Tot el contingut de la lloc web s'havia esvaït per complet. I totes les pàgines van portar a l'omissió, si us plau entrar a la pàgina web de contingut. Vaja. Josh va ser cridat per investigar i es va adonar que un particularment problemàtic adreça IP externa va tenir entrat i eliminat tots el contingut en el sistema. L'adreça IP no pertanyia a algun estranger doblegada pirata informàtic a destruir útil la informació del govern. Es va resoldre googlebot.com, Molt pròpia web de rastreig d'aranya de Google. Vaja. Després d'una mica de recerca i codificació voltant per trobar una còpia de seguretat no corrupta, Josh va trobar el problema. Un usuari havia copiat i enganxat una mica de contingut d'un pàgina a una altra, incloent 1 Modificar enllaç per editar el contingut de la pàgina. Normalment això no seria una problema ja que un usuari extern faria que hagi de introduir un nom i una contrasenya, però el sistema d'autenticació de CMS, el sistema d'inici de sessió, no tenir en compte pirateria informàtica sofisticada tècniques d'aranya de Google. Vaja. Com a resultat, Google Aranya no utilitza galetes, que significa que pot passar per alt fàcilment un xec per la es registra en el conjunt de la galeta és falsa. Així mateix, no presta atenció a JavaScript, el que faria normalment impulsar i redirigir als usuaris que no s'ha entrat. No obstant això, si segueix cada hipervincle a totes les pàgines que troba, incloent aquells amb Eliminar pàgina al títol. Vaja. Llavors, què significa això en la més termes tècnics, però bastant accessible? Només vol dir que a través de la seva pàgina web, tenien adreces URL no a diferència d'aquest que és possible que vegi en un problema establert set. Recordem en problema estableix set o sap de problemes en set que suposa un repte, entre altres coses, per vendre accions en nom dels usuaris. Però l'aplicació d'aquesta funció per mitjà d'obtenir a través d'hipervincles en el seu usuari interfície, probablement no la idea més intel·ligent perquè si el seu lloc és d'alguna manera accessibles ja sigui per un humà que està fent clic voltant o comprar un bot com Google o d'una aranya com se'ls anomena això és només rastreig de la web tractant d'índex la web com un motor de cerca, que podien molt fàcilment colpejar a través d'aconseguir aquest tipus d'URL. I això és funcionalment equivalent a, en aquest cas, la venda de totes les accions de Google. Ara, francament, és completament asnal que el CMS usats JavaScript i galetes per implementar el seu sistema d'inici de sessió i no fer que el costat del servidor, com vostès existeixen i que en PSet 7-- hi ha un login.php file-- sempre, sempre, sempre la seguretat ha de ser fet en el costat del servidor, no en el costat del client, ja que, com aquest article suggereix i és possible que vostè mateix veure en algun moment, és trivial per a un usuari, bo o dolent, que només ha de desactivar JavaScript per no parlar de les cookies. Així que aquest és el seu WTF diari. N'hi ha un més, el que és només una mica de por, així que vaig a esmentar que si només com una lliçó de vida. Cada vegada que s'utilitza una aplicació anomenat com Snapchat o similar que diu que aquestes fotos només duren cinc segons, 10 segons, o el que sigui. Són efímers Això és absolutament no és el cas. De la mateixa manera que no hi ha forma, digitalment, per posar en pràctica alguna forma de vídeo, o imatge, o textual compartir aquesta que un receptor en l'altre extrem no pot d'alguna manera guardar les dades. En la forma més ingènua, algú podria prendre el seu telèfon. I tenen una segona finestra 10 mentre mira a algun complement que acaba de prendre algun altre telèfon i fotografiar, òbviament. Així que vostè pot preservar una mica digitalment d'aquesta manera. Alguns de vostès saben com prendre captures de pantalla en el seu telèfon. De fet, si vostè no sap això, adonar-se que almenys Snapchat, i crec que una altra aplicacions d'aquests dies, almenys si el dir destinatari té en realitat pres una captura de pantalla de la imatge. Però pitjor encara, aquest va ser el snappening, com algú encunyat recentment, on alguns 100000 fermalls de pressió havia estat posat en llibertat en el que s'anomena un arxiu torrent en diversos llocs web en última instància. I aquests contenien un munt de missatges privats i missatges. Resulta la majoria d'ells benigna, pel que no és el que es podria esperar. Però com que la gent tenia fet servir un lloc web de tercers, entrant amb el seu Snapchat nom d'usuari i contrasenya i, a continuació guardar tots els seus fermalls de pressió en aquest lloc web de tercers. I va ser aquest tercer lloc web que va ser hackejat, que només volia dir que algú va descobrir com per obtenir tota 100.000 més d'aquestes imatges en el seu propi disc dur per compartir subsegüent. Francament, aquí també, és una espècie de asnal que Snapchat s'implementa de manera que un tercer pot classificar d'intercepció les dades i que no està lligada a la seva pròpia aplicació que s'executa al telèfon. Però aquí, també, adonar-se que aquests les coses no li han d'agafar per sorpresa, o almenys, ha d'haver ser una lliçó de vida aquí. Si desitja el tècnic detalls, vagi a aquesta URL no això és en les diapositives d'avui. Molt bé, alguna pregunta sobre lliçons de la vida d'avui en dia a CS? Al seu torn que fos. Qualsevol cosa en absolut? Qualsevol cosa en absolut? Tinc una gran quantitat de persones que es registren seva Snapchat o alguna cosa ara. Molt bé, de manera que SQL, Structured Query Language. Anem a embolicar això. I també, encara que només estem rascant la superfície d'aquest idioma, li donarem suficient de la llengua en forma de PSet juliol perquè pugui fer front a alguns funcionalitat bastant comú. Però s'adonen que hi ha un parell coses que no requerim de vostès, però que seran important venir projectes finals i sens dubte venir fent real llocs web amb usuaris reals És aquesta decisió de disseny. Resulta que en una base de dades MySQL, tenir raïms d'opcions com els tipus de dades per a les columnes i altres coses, però també tenen l'elecció d'una trucada d'emmagatzematge motor per a totes les seves dades, el tipus de sistema de fitxers, si està familiaritzat, per totes les seves dades. En quin format es l'emmagatzema en última instància, a? I la més comuna, potser, ha estat MyISAM i InnoDB, els termes tècnics que anem a preocupem només en la mesura que un té i un no té la següent funció. Suposem que vostè té una petita nevera dormitori. I suposem que vostè i el seu company de quart, que comparteixen aquesta nevera, són molt aficionat a la llet per exemple. I aquest és, de fet, la forma en història va ser explicada a mi camí de tornada en el dia en que vaig prendre un curs anomenat CS 161 sistemes operatius, el que explora de manera similar aquest tema. Així que tens aquesta nevera. Estàs fora de la llet. I arribes a casa, el seu company de quart de encara a classe o el que sigui, i decideix que vaig a sortir i aconseguir una mica de llet. Així es tanca la nevera, el bloqueig l'habitació de la residència, anar a l'altre costat del carrer a CVS o on sigui, i obtenir a la fila per comprar una mica de llet. Mentrestant, el seu company de cambra arriba a casa de la classe, es fica a l'habitació de la residència, obre la nevera, també s'adona ooph, estem fora de la llet. Així que ell o ella es tanca la nevera i després succeeix per anar a l'altra CVS, que passa a ser a una quadra de distància dels altres CVS a la plaça, i es posa en línia Per arribar una mica de llet. Bé, és clar, uns pocs minuts més tard, els dos tornis, i el pitjor de tot és possible resultats ha succeït. Tots dos tenen llet. I no ho fa realment com la llet que molt. Així que un d'ells és just va a agrir en algun moment. Així que ara vostè té una quantitat excessiva de llet a la nevera tot perquè ¿per què? [Inaudible] DAVID Malan: Sí, no ho vas fer comunicar-se d'alguna manera un amb l'altre que vostè estava rebent la llet. Així que en el més simple de maneres en el món humà, ¿Com podria evitar aquest ximple escenari succeeixi tal que només acaba amb un. Text ells, sí bo. Però, ¿com si no? Notes Post-it. DAVID Malan: Una nota de post-it. Qualsevol forma de comunicació que li diu al seu company de quart no entrar a la nevera per a la llet. Vaig a anar a repoblar pel meu compte. Així que d'alguna manera necessita per bloquejar aquest recurs. Així que podem fer esto-- podem tipus de arruïnar la història i convertir-se en una història de CS de manera que pensar en això com simplement com un variable, que està emmagatzemant una certa valor. I en aquest moment, la valor de la llet és zero, que vostè no desitja que el seu company de quart per inspeccionar aquesta variable i després prendre una decisió d'ell o ella basant-se en l'estat d'aquesta variable si vostè està en el procés de canviar l'estat d'aquesta variable. Així que una de les línies de SQL que entregar-li en PSet especificació juliol és aquest d'aquí. I no gastem una enorme quantitat de temps parlant d'això. Però resulta que, si vostè està tractant per comprar algunes accions en les finances CS50 que ja té algunes accions de, vostè vull ser capaç de fer un nombre de les coses a l'instant junts. Vols ser capaç de efectivament, en un alt nivell, comprovar bé, si vull per comprar més accions de gratuït, l'acció de penic que parlar en l'especificació, Vull primer xec el nombre d'accions que tinc. I suposo que és de cinc. I suposo que vull comprar 10 més, en última instància, vull tenir 15 accions. Així que he de fer dues preguntes. Quin és l'estat de la variable? Quin és l'estat de la fila? Quantes accions no tinc actualment? Llavors vostè vol seguir endavant i actualitzar-lo. Així que aquest és l'anàleg a la llet en que comprovi la fila, i llavors vostè vol actualitzar- perquè si vostè vol comprar 10 accions, vostè no desitja canviar la fila a 10, que voler canviar a 5 més de 10 o, per descomptat, 15. Aquesta línia de codi garanteix que aquestes dues idees conceptuals ocórrer junts o no en absolut. Ningú, incloent a algun altre usuari que ha iniciat sessió en el mateix lloc web, d'alguna manera es pot interrompre la comprovació de la fila i l'actualització de la fila, la seleccionar i l'actualització si es vol. I la sintaxi no és molt obvi, però aquesta línia, sempre s'és, assegura que aquestes dues operacions comprovi la variable o comprovi la fila i actualitzar la fila succeeixi atòmicament. Oh, aquí anem de nou. Missatge de text en el meu telèfon. Així que anem a fer d'aquest un poc més concret. Suposem que vostè no és l'aplicació d'un refrigerador, i no s'està implementant PSet 7, però un banc real, o un caixer automàtic, un caixer automàtic Màquina, pel qual vostè d'alguna manera vull ser capaç de donar poder els usuaris transferir diners d'un compte a una altra. Acceptar, espera. Vaig a silenciar això ara, gràcies. Així que volem moure diners d'un número de compte en un compte diferent nombre, específicament 100 dòlars. Així que això és una espècie d'una arbitrària exemple, pel que vostè, el caixer automàtic, pot ser que desitgi per executar dos SQL consultes, restar d'un compte, i afegir a l'altre compte. Però vostè vol assegurar-se que aquests dues línies tant ocorren o no en absolut. No vol que alguna cosa sent interromput. No fa una mica de dolent de la pel·lícula intel·ligent d'alguna manera que es col·loca al Bank of America amb dos caixers automàtics davant d'ell i d'alguna manera espècie d'escriure al ordres a la vegada, amb sort tractant de deduir $ 200 en lloc de $ 100 i només té $ 100 acreditats. En poques paraules, vostè vol que això comportar-se exactament com vostè espera. I la forma de fer aquesta base de dades en SQL és que es col·loca en el que és anomenat una transacció. Literalment en SQL, pot trucar CS50 de funció de consulta amb cita inici fi de la cita transacció. A continuació, pot executar qualsevol nombre de consultes SQL subsegüents, però cap d'ells pren efectuar sobre la base de dades fins que cridi consulta entre cometes comprometre, si de nou usant PHP. I d'aquesta manera, vostè pot assegurar-se que fins i tot si vostè té 1.000 usuaris de tot colpejar a la base de dades al mateix temps, SQL li prometo que aquests dues consultes seran implementat una rere l'altra. Així que vostè no acaba amb l'excés de llet o la quantitat equivocada, en última instància, de diners. Així que tingui això en compte, no tant per PSet juliol però per a projectes fi de carrera si ets realment tractant de moure les dades al voltant de a través de les taules com pot ser que aquí. Però potser encara més simple i més obvi per a entendre amb un exemple és aquest d'aquí. I algú ens envia per correu electrònic sobre això l'altre dia quan va veure alguna cosa similar en línia. Així que, que jo sàpiga, el sistema pin no és vulnerable a aquest atac. I no tinc ni idea de si fins i tot usos la base de dades de SQL sota el capó. Però farem servir per En nom de la discussió. Aquí hi ha la pantalla que Gent de Harvard tendeixen per veure en iniciar sessió amb el seu Nombre d'identificació de Harvard i el seu PIN. I suposem que el sistema de passador fora implementat en PHP i MySQL amb un base de dades, el codi que algú Fa anys que podria haver escrit podria tenir aquest aspecte. En primer lloc, declarar una anomenat nom d'usuari variable. I així aconseguir que a partir de la superglobal POST. A continuació, obtenir una altra variable anomenat contrasenya i fer el mateix. I després simplement executar aquesta llarga consulta aquí, seleccioneu l'estrella dels usuaris ON nom d'usuari és igual a tal i tal i la contrasenya és igual a tal i tal. Tingueu present que el arrissat suports que he fet servir aquí només significa que PHP, vagi endavant i substitut el valor dels dos les variables just aquí. No són estrictament necessaris, però que tendeixen a evitar errors de sintaxi subtils. Així que això sembla completament correcta a primera vista. I ho és. Es podria aplicar el sistema de passador d'aquesta manera. Però suposem que un super estudiant intel·ligent i maliciós d'entrada això com el seu PIN. Així que m'he tret la bala signes aquí a la maqueta, i jo he fet vaig revelar el que ell o ella podria ser escriure. I és una mica estrany. Però el que salta a la vista a potencialment preocupant sobre la entrada de l'usuari, encara que no té idea del que un atac d'injecció SQL significa. Per què aquesta mirada una mica a peix? Què és això? [Inaudible] DAVID Malan: El o és una mica sospitós. De fet, aquesta és una paraula clau de SQL. Així que no augura res de bo. El fet que hi ha totes aquestes cites individuals allà-- de fet, un dels més fàcils maneres de trencar algunes bases de dades és escrivint un nom com O'Reilly que té un apòstrof-hi perquè si l'ésser humà que va escriure el codi darrere de les escenes no té en compte que hi ha podria ser cometes simples en un usuari de d'entrada, i ell o ella està utilitzant cometes simples en el seu codi, les coses dolentes poden passar. De fet, pitjor encara, consideri això. Si això va ser de nou el codi que algú a Harvard anys Fa va escriure per al passador sistema, observi el que està a punt de ser substituït per nom d'usuari i contrasenya si l'usuari escriu en el nou skroob com el seu nom d'usuari i després d'un, dos, tres, quatre, cinc, cita o entre cometes un és igual a citar-ne un. I noti el que és clau aquí està l'usuari no ha començat la seva contrasenya o el seu pin amb una cita. I no han acabat amb una cita perquè ell o ella està assumint que si el programador no era tan aguda, que han de tenir els cometes simples en el seu codi. Així que aquí està el codi. I que la substitució ara podria passar és això. I he subratllat el l'usuari ha teclejat. Així que abans, després. I noti el que és lleugerament preocupant ara sobre la meitat dreta d'aquest codi SQL? És una mica més complex, cal reconèixer-ho, de les consultes que hem vist. Però això no pot ser una bona cosa si vostè és dient seleccioneu estrella, que és selecte tot, des de la taula de l'usuari on nom d'usuari és igual skroob i contrasenya és igual a un, dos, tres, quatre, cinc o un és igual a un. Quina és la implicació lògica d'aquesta última clàusula presumiblement? És només sempre és cert. I perquè hem espècie d'endevinar o descobert per assaig i error que el programador que escriure el codi no ho va fer anticipar una persona humana o dolent escriure entre cometes simples, així, podem sintàcticament completar la consulta SQL amb alguna cosa sense sentit però una cosa que és sintàcticament incorrecta que sempre s'avalua com a veritable. Així que si aquest codi es fa servir per respondre la pregunta veritable o falsa hauria es permetrà a aquest usuari a passar, la resposta està sempre aparentment va per ser veritat, perquè això sempre va per seleccionar una mica de la base de dades perquè un per descomptat és igual a un sempre. Llavors, ¿quina és la solució? Bé en PSet 7, que en realitat evitar això tots junts. Li donem una funció de consulta, i nosaltres l'animem a utilitzar signes d'interrogació com a marcadors de posició, de manera similar en esperit al de printf% s, però el que és clau sobre els signes d'interrogació aquí és si realment llegeixi functions.php, on el nostre funció de consulta s'implementa, aquests signes d'interrogació es van escapar, per la qual cosa res potencialment perillós com una cometa simple s'activa en una cita única escapat. Així que això és el que hi ha realment està succeint si utilitzar la funció de cerca de CS50 o qualsevol nombre de biblioteques gratuïtes de tercers que fer el mateix. No importa en aquest cas, en verd, si l'usuari ha teclejat en una única cotització perquè la consulta funció que escrivim és va a afegir barres invertides abans la cotització perillós. Així que això no és, en De fet, serà de fiar. Això és com escriure en un boig buscant contrasenya que és, per descomptat, no va estar contrasenya real de skroob. Així que el menjar per emportar per CS50 és un, absolutament sempre usar alguna cosa com a funció de consulta de l'CS50 o la biblioteca subjacent, que passa a anomenar DOP. Però mai, mai, mai fer un codi com aquest sense escapar o fregar com diuen les seves entrades. I en algun punt, probablement, venir a través d'un lloc web com aquest. De fet, sembla ser el cas com en els aeroports i hotels a llocs on tenen internet Wi-Fi l'accés que vostè ha d'iniciar sessió en, aquests llocs web són sempre horriblement implementat. I així, una mena de diversió en exercici a la llar, no amb fins maliciosos o més d'una diversió a la carretera exercici, és que només has d'escriure un apòstrof, una sola cita, en una forma en algun lloc web i veure què passa. I si el servidor cau o es dóna vostè algun tipus de missatge d'error, pot molt ben ser que algú no ha previst aquesta. I a continuació, vostè ha d'alertar a l'adequada autoritats i no continuarà. Així que ara vostès han d'esperar entendre una mica més d'humor del friki aquí. [El] DAVID Malan: Vostè sap que vostè és un friki. Per als propers anys, que recordaran qui tauletes Bobby és perquè d'aquest dibuix animat aquí. Així que tingues-ho en compte a mesura que canvi de context per última vegada avui per JavaScript. Hem passat relativament poc temps en la sintaxi de PHP perquè en realitat súper similar a C. I molt bé prou, massa JavaScript és super similar a la sintaxi de C així com veurem en un moment, i com anem a veure més endavant aquesta setmana en particular. Què es pot fer amb aquest llenguatge, però, és encara més potent, especialment amb APIs. Però primer una visita ràpida. Així que un, en JavaScript, no hi ha sense funció principal, que és agradable. Igual que amb PHP, vostè pot escriure el codi. Condicions veuen així. I expressions booleanes poden veurà així o així. Hi ha interruptors, i podria tenir aquest aspecte. Quatre bucles es veuen així. Mentre que els bucles es veuen així. Faci estones tenir aquest aspecte. I a continuació, les matrius s'assemblen això, molt similar a PHP. Però noti, que en JavaScript que declarar una variable no amb un dòlar signar, no amb un tipus de dades, però, literalment, dient var per a la variable abans. És també s'escriu lliurement en què té tipus, però no declara explícitament. I després una cadena, per exemple, pot tenir un aspecte així, aquesta cadena ser cridat s en aquest cas. I després un objecte. I aquests que veurem més en poc temps. I un objecte és potser un dels més comunament vist estructures de dades basat en un JavaScript programa perquè permet associar arbitrària parells de valors clau només com arrays associatius de PHP i de la mateixa manera que la seva pròpia taula hash o tractar com implementem fa unes setmanes. Així que anem a veure el que en realitat que podem fer amb JavaScript. I en particular, és a dir una llarga llista de característiques que els navegadors han de ens permeten enganxar JavaScript en un lloc web de la següent manera. JavaScript s'utilitza sovint com un costat del client llenguatge de scripting. No és compilat. És també s'interpreta. Però a diferència de PHP, que ha estat funcionant al servidor, a la web, o molt dins de la clients, JavaScript és diferent en què en general s'executa al navegador. Pel que qualsevol codi JavaScript de començar a escriure per PSet 8, o el projecte final, o en el món real que generalment es va per a ser salvat en el servidor, absolutament HTML en un punt o de punt JS d'arxiu JavaScript. No obstant això, el navegador va descarregar JavaScript codi a la seva pròpia instància de Chrome, o IE, o Firefox, o el que sigui. I el codi és en realitat va a aconseguir executat a l'interior del seu propi navegador. Només per fer-ho més real, anem a veure això en forma concreta. No tenim idea del que fa el codi sense realment llegir a través d'ell. Però me n'aniré a Facebook.com sense iniciar sessió. Déjame anar a inspeccionar Element i anar a, diguem, Xarxa i recarregar la pàgina. I anem a veure- permetin-me moc a carregar la Pàgina de aconseguir les peticions al nou. I el primer arxiu que veig és CSS, CSS. Aquí hi ha la primera JavaScript arxiu, i tinc ni idea del que això fa, però aquí és una part del codi JavaScript que impulsa Facebook. Ni tan sols és veritat que revelant per apropar. Segueix sent igual d'absurd. Però veuràs, fins i tot per sota, hi ha fins i tot més d'aquests arxius JavaScript. Vaja. Això és un ping. Baixem una mica A més, encara més, encara més. N'hi ha un. N'hi ha un. N'hi ha un. Així que tot i que Facebook, darrere de la escenes, està escrit en part en PHP i la pròpia versió dels mateixos de Facebook, hi ha una enorme quantitat de JavaScript. De fet, qualsevol de les xerrant fas a Facebook, qualsevol de les actualitzacions de la línia de temps en línia que això succeeixi en temps real, tot això és impulsat per JavaScript. Sí? AUDIÈNCIA: No estic segur si això és Facebook, però vaig pensar que Facebook ha desenvolupat el seu propi llenguatge de codi a la casa? DAVID Malan: Ho van fer. Així que per això dic una variació de PHP anomenat Hip Hop que, efectivament, característiques afegides a tal que quan Marc va implementar per primera vegada a Facebook, que va ser escrit en PHP. I aquest tipus de s'ha mantingut el tipus de llenguatge extrem frontal que utilitzen per a molt de la seva codificació, però no ha estat un llenguatge que és escales particularment bé a milers de milions de les persones. I pel que han afegit el seu propi millores darrere de les escenes. I utilitzen qualsevol nombre d'altres idiomes per a diverses peces de la seva infraestructura. Així que sí, és una variació de el que avui coneixem com PHP. Així que donem una ullada en un parell d'exemples de com podem utilitzar JavaScript aquí. En el codi font d'avui, tenim una munt d'arxius, el primer dels quals, anem anomenat DOM zero. Així DOM zero es veu de la següent manera. Déjame anar en aquest directori i obrir domzero.html, la part superior dels quals té un tipus de doc declaració, dient aquí ve HTML 5. I ara aquí hi ha una etiqueta HTML. Aquí hi ha l'etiqueta del cap. I això és el que hi ha de nou avui. Ara tenim una etiqueta de script a l'interior del cap de la pàgina. I això pel que sembla fa molt poc, però avís que he definit una guió, un JavaScript. I com un part, ja que aquesta És un error comú, JavaScript té absolutament res a veure amb Java, el llenguatge que alguns de vostès podrien han après a la SCCA. Va ser més d'una comercialització cosa de tot, muntar els faldons de Java fa anys. Però JavaScript, res a veure amb Java, només de manera similar, i molest, confusament anomenat. Així que aquí està com es declara una funció en JavaScript, dir, literalment, la funció, llavors el nom de la funció, llavors qualsevol arguments podria adoptar, igual que en PHP. Resulta que en JavaScript, una de les més funcions molestos que hi ha és un avís. Aquesta és una petita finestra que s'obrirà i que l'avisi en certa peça d'informació. És generalment mal vist. Però el farem servir com el nostre primer exercici aquí. Observi algunes funcions de JavaScript. Les cometes simples i cometes dobles no importa en realitat més. Les cometes simples i dobles cites es poden intercanviar, mentre que en C, vostè ha d'utilitzar cometes dobles per a les cadenes, i vostè té dues individuals Cotitzacions de caràcters. En el món de JavaScript moltes persones, la majoria de la gent utilitzar cometes simples al voltant de les cadenes només perquè és una cosa estilística. Però quin és l'operador més aquí, que no hem vist abans? AUDIÈNCIA: la concatenació. DAVID Malan: concatenació. Així que C no té ni tan sols això. PHP té l'operador punt, que fa això. JavaScript té l'operador més, que confusament és com Java. Ara, què està passant aquí? Així que aquí és on un bàsic la comprensió que la imatge ens tirem un parell Fa dies entra en joc. Recordes quan vam tenir un senzill versió d'un HTML page-- que acaba de dir, hola món. I després dibuixem un arbre a la dreta, que tenia un munt de rectangles i línies connectant-los com un arbre genealògic. Així que aquesta és l'anomenada DOM o Document Object Model. I resulta que es pot accedir rectangles en l'arbre amb la sintaxi com la següent. Vostè, literalment, diu el document, que és un variable global especial en JavaScript programa que té una funció associada a ella que es pot accedir similar a una estructura, sinó que simplement dir punt i després el nom de la funció, obtenir element per ID. L'element que vull aconseguir és aparentment citar nom final de la cita. I després vull obtenir el seu valor. Ara estem arribant davant de nosaltres mateixos. Ni tan sols estic segur del que tot això es tracta. Anem a avançar ràpidament al HTML a La pàgina, que és super simple. Tingueu en compte que he definit Un formulari aquí baix. Tingueu en compte que he fet un únic Identificació, tot i que no hem fet servir aquest atribut abans. Però això existeix en HTML. Vostè pot identificar de forma exclusiva alguns tros d'HTML amb un identificador com aquest. Avís ara esto-- resulta HTML dóna suport, perquè la llista de bugaderia Fa un moment, en el seu conjunt munt de controladors d'esdeveniments. I aquest controlador d'esdeveniments, diu a enviar. En la presentació d'aquest usuari forma, truqui al següent codi. I el codi que va de ser cridat o executats és exactament això, el grec funció seguit de retorn fals. Tota la resta ha de estar bastant familiaritzat. Aquí és una entrada de tipus text, el ID, en aquest cas, serà nom. No tenim un atribut real nom aquest temps-- i un botó d'enviament. Així que la pàgina resultant s'assembla a això. I el comportament resultant, veuràs, són aquestes. La pàgina que alberga locals diu, hola David, tot just un estèticament agradable manera de saludar a un usuari. Però el que realment està passant? Bé, tingui en compte el que és això. Aquest és un camp de text. I d'acord amb la HTML aquí, m'he adonat un identificador únic anomenat cotització nom final de la cita. Mentrestant, el que he dit quan l'usuari envia aquest formulari per prement Enter o feu clic al Presentar botó, truqueu a la funció anomenada Greet i després tornar Fals. Anem a considerar els de darrere. Observi quan feu clic a Enviar, el URL d'aquesta pàgina no canvia. La icona del navegador no començar a girar. Jo no vaig enlloc, i això és literalment, perquè vaig dir: return false. Tornar circuits o parades curtes falsos el comportament predeterminat d'un formulari. Així que després ens deixa amb aquesta última pregunta. Què fa Greet? Bé, pel que sembla Greet crida a una funció anomenada Alerta, passa en una llarg argument que és el resultat de la concatenació d'un conjunt manat de subcadenes, hola espai coma, llavors tot el que aquest torni. Així que el document és com un mundial variable perquè l'arrel d'aquest arbre, cridar a una funció especial, en cas contrari ara conegut com a mètode. Una funció que és a l'interior d'una variable és anomenat mètode en lloc d'una funció. Així que element per ID. Quin element té vostè que vulgui obtenir per la seva ID? Cita nom i fi de la cita llavors el valor específicament. Així, en altres paraules, que el codi simplement es troba el camp de text el ID és el nom i després obté el seu valor. Així que si jo fos a canviar aquesta i dir Davin en lloc de David, i feu clic a Enviar, ara ens tenir una salutació de Davin. Molt bé, així que tot bé i bo. Però anem a veure si podem fer aquesta una mica més net ja que només escriure codi com aquest és en general, serà mal vist. Això es va a veure més aterridor. Però, ¿què és el primer diferència que nota aquí en aquesta versió, a més de la nomenar canviar a DOM un? El que estructuralment es veu diferent sobre aquest enfront de l'altra? Sí? AUDIÈNCIA: És la forma en la part superior de la seqüència de comandaments ara? DAVID Malan: Sí, és la forma en la part superior de la seqüència de comandaments, per alguna raó curiosa. Així que això és el primer que salta a mi, també. I per sort, almenys, aquesta part és idèntica. Així que l'única cosa que sembla a ser diferent és la següent. Així que aquí està el que està ordenat sobre JavaScript febrer. I que fa que sigui difícil entendre a primera vista, especialment per a projectes de final si vostè està buscant en el codi d'exemple en línia, sinó que es redueix a alguns característiques sintàctiques bàsiques. Aquí de nou és que document variable global. Aquí de nou és que el mètode o funció que diu obtenir l'element d'identificació. Aquesta vegada vull obtenir l'ID de trucada de demostració. On és això? Això és pel que sembla la dreta aquí, el propi formulari. I ara compte que pel que sembla si tornar aquest node de l'arbre que representa la forma en si, no és un camp de text, resulta que la forma, que node o rectangle des de l'arbre, té el que anem a cridar a una propietat, molt, molt, molt similar en esperit a una estructura en C. És només un membre de dades dins d'aquest rectangle. Així que tinc la forma aquí, i estic adjuntant, o estic assignant, a la seva Submit gestor o més aviat a Envia a la propietat la següent funció. I aquest és, de lluny, el més boig El fins ara sintàcticament. Resulta que en JavaScript i en PHP, i, francament, per al cas en C, tot i que no ho fem, es pot afegir sense nom, anònim o conegut com lambda funcions que no tenen un nom però pot ser cridat, però. Així que el que estic fent aquí és que estic assignant Enviar aquesta a la propietat, que és dins d'aquest node del meu arbre DOM, 1 funció, punter de funció si es vol. Aquesta funció no té nom, però això no ho fa importa perquè anem a veure en un moment com cridar-ho. Quan aquesta funció es diu, aquest codi és executat, llavors fals es retorna la mateixa manera que abans. Però noto el que he fet. En aquest punt en el història, tinc un formulari. Té un identificador únic anomenat de demostració. Aquí sota, tinc una etiqueta script que executa el següent codi. S'uneix a aquest node en l'arbre que està a Enviar propietat aquesta funció aquí. I només per la naturalesa de com funcionen els navegadors, quan ara faig clic a Envia o premeu Enter, que la funció serà cridat. No necessita un nom que ja diables li importa com es diu. L'única vegada que mai va a arribar anomenat és quan va presentar el formulari. No hi ha necessitat per a mi, el desenvolupador humà, que en realitat cridar-ho en qualsevol altre lloc. Ara només com un reclam, com si això no importaria flexió suficient, fins i tot podem fer que aquesta buscar usant més críptic una biblioteca superpopular anomenat jQuery. De fet jQuery i JavaScript sovint es fusionat. ¿I què farem el dimecres és d'inici l'ús d'aquest llenguatge i aquestes biblioteques per a construir cada vegada asíncron i aplicacions dinàmiques com aconseguir un mapa aplicacions, aplicacions actualitzar la pàgina web en béns temps, de la mateixa manera que Facebook o Gchat fer, i ja no limitar-nos a hitting Presentar per una trobada o simplement ja sol. Així que vaig a veure't dimecres. [REPRODUCCIÓ DE MÚSICA]