[REPRODUCCIÓN DE MÚSICA] DAVID MALAN: Este es CS 50, y este es el comienzo de la semana nueve. Y lo que nosotros pensamos que lo hacemos hoy no es sólo cerrar el capítulo de la semana del pasado material de donde nos centramos en el servidor programación web lateral con PHP y SQL, un poco de materia de base de datos. Hablaremos un poco de hoy de seguridad y luego transición a una programación del lado del cliente lenguaje conocido como JavaScript. Pero primero, un poco de redención. Usted puede recordar que en Miércoles, me dispuse para escribir una página web que tomó en la entrada del usuario por un formulario HTML que luego se almacena que los nombres de entrada del usuario, teléfono números, y el teléfono celular portadores en la base de datos. Y luego tuve un poco de orden script de línea escrito en PHP que se suponía que iterar sobre las filas en la base de datos y enviar mensajes de texto. A pesar de varios, de varios intentos, nos no consiguió que el trabajo para el final. Así que me pasé toda la semana de trabajo en ese código para llevarnos más allá del punto donde lo dejamos, con lo cual todo Llegué al final del miércoles Fue este mensaje de texto de Margo mientras luchaba, seguido por un mensaje de texto desde otro compañero de clase, tienes esta David. Seguido por éste, maravillosamente alentadora. Siguió adelante, muy alentador. Casi lo conseguí hasta entonces-- y esa es la nota que terminamos el miércoles. Y a continuación, en realidad tal vez mi favorito, un momento después, este entró. Maldita sea directo corriente. Así que hoy, podemos solucionar este problema con una rápida mira lo que he hecho desde entonces. Así que todo el código está disponible en línea desde la semana pasada, la semana ocho, código fuente. Y verás que yo pasé, y en realidad me limpié un poco las cosas. Yo presenté un par otro características de una base de datos SQL. Por ejemplo, en lugar de sólo hacer transportista de carbón var como creo que lo hice sobre la marcha la semana pasada. Yo en cambio lo definió como lo que se llama una enumeración. Y algunos de ustedes han visto este como exploramos C. Enum es en realidad una característica de C donde se puede enumerar un montón de constantes y asignarles valores automáticos, como uno, dos, tres, cuatro sin necesidad de números de código duro. Así SQL admite la misma, por lo que si Tiene un campo de base de datos que sólo querer tomar en una de finito valores, puede literalmente especificarlo como lo he hecho allí por cuatro portadores populares de teléfonos celulares de Estados Unidos. Así que hice eso. Y he hecho una serie de cambios como así, la más importante de las cuales era conseguir email funcionando porque el recuerdo, que este programa se basó en la cual generalmente llamado un correo electrónico a Puerta de entrada de SMS, que es sólo una forma elegante de decir que Verizon, y AT & T, y otras personas soportan un servidor, por lo que si recibe correo electrónico, que convierte a SMS y envía un texto mensaje al teléfono de alguien. Así que si lo hice correctamente, aquí es una forma nueva y mejorada que va a hablar con nueva y mejorada código, que se puede jugar con línea. Y es de esperar que mi pitido teléfono en un momento. Así que en primer lugar, voy a escribir mi nombre. En segundo lugar, yo no voy para hacer esto en esta ocasión. Yo voy a hacer Inspeccionar Elemento. Y esto es sólo una poca cosa, así que no lo hago crear horas de post-producción Trabajo como lo hice la última vez. Ahora es mi número de teléfono. Voy a seleccionar Verizon. Y aquí, vamos a centrar en este micrófono aquí, y el objetivo esta en mi teléfono aquí. Voy a hacer clic Registro, que debe de esperar lo puso en la base de datos. Ahora me voy a ir a la programa de línea de comandos, lo que retiro se llama barra de puntos texto, y cruzar los dedos. Aquí vamos. [DINGS TELÉFONO] [Aplausos] DAVID MALAN: Así que más divertido que esto-- es divertido, por supuesto, si me meto en ella. Pero es más divertido, pensé, si creado uno de esos momentos de la película donde como algo realmente malo ha ocurrido en el mundo, y como todas las personas de la NSA los teléfonos móviles empiezan a sonar con mensajes de texto alertando a este hecho. Así que pensé en probar para recrear el mismo aquí, por lo que no se utiliza una base de datos, I en lugar de antemano escribió un programa que se parece a esto. Este es un index.php-- y yo puse el código en línea como bien-- que al parecer sólo hace que form.php, usando un paradigma estilo MVC que hablar con más detalle en conjunto problema Siete. Esa forma es bastante simple. Se va a someter a una archivo llamado here.php por correo. Y está al parecer va a pedir para un nombre y un número de teléfono, y luego a través de la llamada Seleccione el menú, que es va a dar por lo menos cuatro portadores populares de teléfonos celulares de Estados Unidos, y luego permitir que usted efectivamente tomar la asistencia haciendo clic aquí. Y aquí, por su parte, va a pedir prestado parte del código de la última vez. Y si usted acaba de hojear este, verás que hay un montón de comprobación de errores. Pero la belleza al final es que no estamos escribiendo a una base de datos en la actualidad. Estamos hacer que sea sencillo y sólo espero que el envío de un mensaje de texto a través de la función I escribió en los últimos días de llamadas Texto, que está en funciones. php, que es de nuevo disponible en línea. Así que si te gustaría participar en esto. No vamos a guardar nada. Vaya a esta URL aquí en tiempo real. No enviarlo por el momento, pero vamos a ver si podemos tener uno de estos película momentos en los que el teléfono móvil de todo el mundo comienza a sonar, con suerte sólo una vez este año a diferencia de en 2011 donde este salió horriblemente mal. Y una vez que usted va a esa dirección, usted debe ver una forma súper sencilla que si usted tiene un nombre, un teléfono celular número, y un vehículo móvil que coincide con la lista de ahí, ir adelante y llenar el formulario. Pero no golpear a presentar por el momento. La forma va a tener este aspecto. Seguir adelante y escribir su nombre, número de teléfono. Oop, alguien va por delante de la curva. Está bien. Bueno, todo el mundo está lleno el formulario. Esto debería funcionar en un teléfono, también, si lo desea. Muy bien, en sus marcas, listos, ya. Hit Aquí. ¿Qué? No. Lo juro por Dios, he probado este varias veces hoy. ¿Lo tienes? [Interponiendo VOCES] DAVID MALAN: OK, tal vez un error del usuario. Eso es dos. Se trabajó para dos de cada una pocos cientos, tres, cuatro. OK, eso es bueno. Cuatro de cada cinco para ¿qué hay de la corrección. Entonces, ¿qué ha pasado? Así que, presumiblemente, sin ver a su pantallas, ¿Por qué podría haber muchos errores? Es probable que estábamos tratando de hacer demasiadas conexiones al servidor de correo de la Universidad de Harvard en todo una vez desde la misma dirección IP. Sólo estoy adivinando ya que yo no lo hice el lujo de la prueba este código con algunos 300 personas de antelación pero por ahora darse cuenta de que que por lo menos debe han conseguido el trabajo hecho en esta ocasión. Muy bien, así que ¿por qué es esto todo el más afín a lo que está pasando? Bueno en primer lugar, una rápida par de anuncios. Así que uno, si desea unirse a Chang, y Nick, y otras personas en el almuerzo de este viernes, hacer de RSVP en la dirección URL habitual allí. Si usted está pensando en concentrarse o hacer una secundaria en CS, si usted es un estudiante de segundo año, estudiante de primer año o, o incluso menor o mayor en este momento y todavía puede exprimir en los cursos, darse cuenta de que la escuela de ingeniería está reuniendo de forma gratuita y Ben Helado de Jerry y consejos esto poco después de clase Miércoles a las 4:00 PM en el edificio CS en Maxwell Dworkin. Si esta es demasiado rápido en la pantalla, sólo tiene que ir a cs50.harvard.edu para una enlace al evento en Facebook donde se pueden ver más detalles. Mientras tanto, yo pensaba que iba a corregir otra cosa que metió la pata el miércoles. Resulta que ese ID de Mark en Facebook no era tres. Eran las cuatro. Resulta que él tenía más prueba cuentas de lo que recuerdan. Pero lo que este se sentía como una oportunidad que hacer es tirar de una URL como esta. Así resulta que Facebook tiene un API, Application Programming Interface, que es un mecanismo mediante el cual se pueden solicitar datos mediante programación en Facebook y volver máquina información legible, no páginas web pero el texto sólo prima, algo llamado JavaScript Object Notation. Y de hecho, si vuelvo a visitar esta URL, y un zoom, de forma predeterminada, este es Mark públicamente información accesible. Y el detalle interesante aquí es sólo que su ID es de hecho, el número cuatro, que me se dio cuenta tan pronto como lo hice esta. Puede hacerlo usted mismo si usted sabe su nombre de usuario de Facebook, si usted tiene uno. Sólo tienes que escribir hasta arriba allí. Y nada de esto es privado. Sólo estoy haciendo esto incluso en el modo de incógnito. Así que ni siquiera estoy inscrito. Y usted está viendo que yo al parecer era el número de usuario 6454 en Facebook, que no es tan mal estos días. Así que de todos modos, también verá información adicional allí. Y el aspecto útil de que es que usted podría escribir su propio software que de alguna manera se integra datos como éste en su propia aplicación. Puede permitir a los usuarios a inicie sesión en su sitio web, no usar su propio nombre de usuario personalizada y pero tal vez su contraseña de inicio de sesión de Facebook y obtener información incluso acerca de sus amigos, si aprueban tales, o similar. Así en cuenta que CS50, también, tiene algunas de sus propias APIs, una para los datos del catálogo supuesto, algunos de los menús de abrazos en el comedor salas, todas de la edificios y lugares en el campus tenemos una API para así que se puede consultar de manera similar y obtener datos textual de espalda que puede integrar en un PHP o JavaScript, o incluso, aunque con menor frecuencia, un C basa proyecto final. De hecho antes de la final proyecto son unos hitos. Tienes un email de nosotros el otro día. Darse cuenta de que la propuesta es debido el próximo lunes. No es necesariamente vinculante, pero que no necesitará recibir sus compañeros de enseñanza aprobación antes de hacer cualquier cambio a partir de entonces. Y luego por delante son un número de otros hitos. Así que para burlarse de usted, también, con algunas posibilidades, tenemos un montón de estas bombillas Hue. Y algunos de ustedes ahora tienen algunos de estos en su habitación de la residencia también. Y ellos también tienen una API. Así que recordar esas semanas bulbos binarios Hace que Dan Bradley y Ansel Duff ha creado para nosotros. Utilizaron una interfaz de software para esta bombilla, que en este momento está conectado a la electricidad y luego a través de wireless está conectado a una pequeña cosa llamado el Puente de aquí abajo, como un pequeño propietario del router a este dispositivo particular. Pero resulta que si sé cómo enviar mensajes HTTP, como todos lo hacemos ahora, Puedo enviar un mensaje como este a esta bombilla para encenderla o apagado o hacer cualquier número de otras operaciones en él. Tenga en cuenta que no es llegar, no es POST. Hay otra que se llama put. De hecho, hay algunos otros tales verbos. Pero note que hay un camino allí, slash API, recortar nuevo desarrollador, reducir la luz, recortar uno, slash estado. Eso es al parecer sólo el camino que la compañía, Philips, decidió usted tiene que golpear con una petición HTTP si usted quiere cambiar el estado de la bombilla utilizando HTTP 1.1. Luego note la línea en blanco. Y luego, por último, lo que parece clase de una gran variedad de una especie, esta vez va a ser llamado JavaScript Object Notation, o Jason. Y lo que se ve aquí es que hay tres pares de valores clave. Una de las claves está llamada. Y su valor aparentemente va a ser verdad. El brillo es 128, el cual es una especie de int. Y entonces el tiempo de transición es cero, que es aparentemente cuánto tiempo va a tomar para convertir esto en algo. Así que ahora mismo esta bombilla está apagada. Pero si lo hago exactamente esto-- dejar me voy a una hoja de trucos poco que Dan creó en advance-- y voy seguir adelante y copiar el siguiente comando. Curl, como algunos de ustedes podría haber recogido en CS50 Discutir es una utilidad como Telnet, tales que puede simular las peticiones HTTP, pone específicamente. Puedo enviar estos datos, específicamente lo que acabamos de vimos hace un momento concreto a esta URL aquí. Y luego Curl va a manejar todas las cabeceras necesarias y analizar de allí. Así que todo lo que tengo que hacer es copiar esto en una ventana de terminal y luego pulse Enter. Y la bombilla se enciende. Y todo esto está pasando por mi equipo de manera inalámbrica de alguna manera hasta el puente, que entonces está hablando con esta bombilla. Yo puedo hacer otra cosa. Puedo hacer esta cosa ir de color rojo, por ejemplo. Por ejemplo que puedo hacer esta cosa ir verde. Yo puedo hacer que se vaya azul. Y note en cada uno de estos casos, todo lo que estoy cambiando es el llamado valor de matiz a realmente darle un poco de color. Así que permítanme pega este uno adentro también. Ahora es el azul. Y usted puede hacer aún más elegante cosas where-- Vamos a ir a verde. Y yo podría hacer esto de por supuesto con mi propio código. Pero incluso la propia API apoya las operaciones de funky como este, que ahora se molestarán nosotros durante los próximos 30 segundos. Así que eso es una muestra de lo que te pueden ver con una API, el cual involucró a bombillas. Tenga en cuenta que CS50 tiene un par pares de Google Glass Si desea gustaría para hacer frente a algo a lo largo esas líneas, Arduino Unos, que son diminutos ordenadores, esencialmente, en una placa de circuito pequeño que se puede conectar cables y otras cosas para el control y de hecho su entorno real. Y luego hay un par de juguetes nuevos que tenemos. Éste literalmente acaba de llegar el otro día por correo, una Myo brazal. Y yo que pensaba que es una manera de que te entusiasma acerca de los proyectos que usted puede utilizar con este hardware haría ser para jugar este clip corto que utilizan para burlarse de la gente que ahora estamos viviendo en el futuro. [REPRODUCCIÓN DE MÚSICA] DAVID MALAN: Así que en tan sólo unas semanas, usted también puede ser que fresco en la feria CS50. Otro dispositivo que nos tienen un montón de que somos feliz de prestar para proyectos se llama un controlador de movimiento. Se trata de un pequeño dispositivo USB se conecta a un equipo que le permite interactuar con su computadora portátil, Mac o PC, como si usted tenía como una Xbox Kinect y en realidad hacer movimientos físicos mucho como vemos en este visión del futuro. [REPRODUCCIÓN DE MÚSICA] DAVID MALAN: Así que incluso si usted tiene ni idea de cómo algo así posiblemente podría ser inventado o trabajo a nivel de hardware, no importa. Incluso después de sólo unos meses de CS50, y una comprensión de la programación más en general, y la programación web más Recientemente, y luego también las API, y HTTP, usted tendrá acceso a través de API de software si no quieren pedir prestado uno de estos dispositivos que hablar con él y no tener que preocuparse de la implementación subyacente detalles, que es completamente en consonancia con esta noción de estratificación una abstracción que hemos visto a lo largo del semestre. Así también el fin de semana, vimos un par de piezas de noticias. Vaya en primer lugar, ir a seminarios si le gustaría aprender algo más en cualquier número de temas. Ver la URL allí. Y éste fue enviado a yo por Chang, que ya sabes, que está imprimiendo a nuestro ejército de elefantes. Y era un titular como sigue. Estoy aterrorizada de mi nuevo televisor. ¿Por qué tengo miedo de convertir este cosa en la que usted y sería demasiado. Así que ahora estamos en el apuntar en el semestre, también, donde incluso si usted tiene la menor de entendimiento de cómo funciona la web, y HTTP, y de seguridad, este tipo de cosas debe comenzar a captar su atención. Pero también, vas a entender si estas cosas son o no son las amenazas reales. Así que tomé algunos extractos de este artículo aquí. Y la historia es la siguiente. Ahora soy el dueño de una nueva televisión inteligente, que promete entregar en streaming contenidos multimedia, juegos, aplicaciones, medios de comunicación social y de Internet navegación, ah y la televisión también. El único problema es que estoy ahora miedo de usarlo, dice el autor. Usted sería, también, si usted lee a través de el 46 página política de privacidad para su televisor. La cantidad de datos de esta recoge cosa es asombrosa. Registra dónde, cuándo, cómo, y por cuánto tiempo se utiliza el televisor. En él se establecen las cookies de rastreo, como hemos discutido, y faros diseñados para detectar cuando se tiene contenido particular visto o un mensaje de correo electrónico en particular si desea consultar el correo electrónico en su televisor. Registra las aplicaciones que utilizar, los sitios web que visita, y la forma de interactuar con el contenido, haciendo todo esto a través de su televisión inteligente. También, yet-- espeluznante esa es mi addition-- tiene una cámara incorporada con reconocimiento facial. El propósito es proporcionar control de gestos para la TV y le permiten iniciar una sesión en cuenta utilizando su rostro personalizado. Por el lado positivo, las imágenes son guardado en la televisión en vez de subida a un servidor de la empresa. En el lado negativo, el Internet conexión hace que toda la TV vulnerables a los hackers que han demostrado la capacidad tomar el control completo de la máquina. Más preocupante, como si eso no fuera lo suficientemente inteligente, es el micrófono. El televisor cuenta con una voz función de reconocimiento que permite a los espectadores a controlar la pantalla con los comandos de voz. Pero el servicio viene con una advertencia en lugar de mal agüero. Tenga en cuenta que si sus palabras habladas incluyen personal u otro sensible información, que la información será uno de los datos capturados y transmitida a un tercero. Consiguió que? No digas personal o confidencial cosas en frente de su televisor. Así que esto es en realidad de verdad. Y es difícil no ver si ir a Best Buy o similar para televisores en estos días. Todos son inteligentes, de alguna manera. Y que van a obtener más inteligente y más espeluznante. Y están simplemente la recopilación de datos de manera que las que hemos hablado y luego subirlo a través de HTTP o algún otro protocolo a algún servidor. Así que este era de un artículo de la diversión en este sitio web en línea aquí, que hablaban de un particular, error o código equivocado que en realidad podemos atar en el debate de la semana pasada. Así que este título era como sigue, la historia va aquí, Josh Breckman trabajó para una empresa que obtuvo un contrato para desarrollar una gestión de contenidos sistema, o CMS como se les llama, para un sitio web del gobierno bastante grande. Gran parte del proyecto consistió en el desarrollo de un sistema de gestión de contenidos para que los empleados serían capaz de construir y mantener el siempre cambiante contenido para su sitio. Las cosas fueron bastante bien para pocos días después de ir en vivo. Pero en el sexto día, las cosas no iban tan bien. Todo el contenido de la sitio web se había desvanecido por completo. Y todas las páginas llevaron a la omisión, por favor entrar en la página web de contenido. ¡Vaya. Josh fue llamado para investigar y se dio cuenta que uno particularmente problemático dirección IP externa tuvo entrado y eliminado todos el contenido en el sistema. La dirección IP no pertenecía a algún extranjero doblada pirata informático en destruir útil la información del gobierno. Se resolvió googlebot.com, Muy propia web de rastreo de araña de Google. ¡Vaya. Después de un poco de investigación y codificación alrededor para encontrar una copia de seguridad no corrupta, Josh encontró el problema. Un usuario había copiado y pegado algo de contenido de un página a otra, incluyendo una Modificar hipervínculo para editar el contenido de la página. Normalmente esto no sería una problema ya que un usuario externo haría que tenga que introducir un nombre y una contraseña, pero el sistema de autenticación de CMS, el sistema de inicio de sesión, no tener en cuenta piratería informática sofisticada técnicas de araña de Google. ¡Vaya. Como resultado, Google Araña no utiliza cookies, que significa que puede pasar por alto fácilmente un cheque por la se registra en el conjunto de la galleta es falsa. Asimismo, no presta atención a JavaScript, lo que haría normalmente impulsar y redirigir a los usuarios que no se ha autentificado. Sin embargo, sí sigue cada hipervínculo en todas las páginas que encuentra, incluyendo aquellos con Eliminar página en el título. ¡Vaya. Entonces, ¿qué significa esto en la más términos técnicos, pero bastante accesible? Sólo significa que a través de su página web, tenían direcciones URL no a diferencia de éste que usted puede ser que vea en un problema establecido siete. Recordemos en problema establece siete o sabe de problemas en siete que supone un reto, entre otras cosas, para vender acciones en nombre de los usuarios. Pero la aplicación de esta función por medio de obtener a través de hipervínculos en su usuario interfaz, probablemente no la idea más inteligente porque si su sitio es de alguna manera accesibles ya sea por un humano que está haciendo clic alrededor o comprar un bot como Google o de una araña como se les llama eso es sólo rastreo de la web tratando de índice la web como un motor de búsqueda, que podían muy fácilmente golpear a través de conseguir este tipo de URL. Y eso es funcionalmente equivalente a, en este caso, la venta de todas las acciones de Google. Ahora, francamente, es completamente asnal que el CMS usados ​​JavaScript y cookies para implementar su sistema de inicio de sesión y no hacer que el lado del servidor, como ustedes existen y que en PSet 7-- hay un login.php file-- siempre, siempre, siempre la seguridad debe ser hecho en el lado del servidor, no en el lado del cliente, ya que, como este artículo sugiere y es posible que usted mismo ver en algún momento, es trivial para un usuario, bueno o malo, que sólo tiene que desactivar JavaScript por no hablar de las cookies. Así que ese es su WTF diario. Hay uno más, lo que es sólo un poco de miedo, así que voy a mencionar que si sólo como una lección de vida. Cada vez que se utiliza una aplicación llamado como Snapchat o similar que dice que estas fotos sólo duran cinco segundos, diez segundos, o lo que sea. Son efímeros Eso es absolutamente no es el caso. Al igual que no hay forma, digitalmente, para poner en práctica alguna forma de vídeo, o imagen, o textual compartir dicha que un receptor en el otro extremo no puede de alguna manera guardar los datos. En la forma más ingenua, alguien podría tomar su teléfono. Y tienen una segunda ventana 10 mientras mira a algún complemento que acaba de tomar algún otro teléfono y fotografiarlo, obviamente. Así que usted puede preservar algo digitalmente de esa manera. Algunos de ustedes saben cómo tomar capturas de pantalla en su teléfono. De hecho, si usted no sabe esto, darse cuenta de que al menos Snapchat, y creo que otra aplicaciones de estos días, al menos si el decir destinatario tiene en realidad tomado una captura de pantalla de la imagen. Pero peor aún, este fue el snappening, como alguien acuñado recientemente, donde algunos 100000 broches de presión había sido puesto en libertad en lo que se llama un archivo torrent en varios sitios web en última instancia. Y estos contenían un montón de mensajes privados y mensajes. Resulta la mayoría de ellos benigna, por lo que no es lo que cabría esperar. Pero debido a que la gente tenía usado un sitio web de terceros, entrando con su Snapchat nombre de usuario y contraseña y, a continuación guardar todos sus broches de presión en este sitio web de terceros. Y fue ese tercero sitio web que fue hackeado, que sólo significaba que alguien descubrió cómo para obtener toda 100.000 más de esas imágenes en su propio disco duro para compartir subsiguiente. Francamente, aquí también, es una especie de asnal que Snapchat se implementa de tal manera que un tercero puede clasificar de intercepción los datos y que no está ligada a su propia aplicación que se ejecuta en el teléfono. Pero aquí, también, darse cuenta de que estos las cosas no le deben coger por sorpresa, o por lo menos, debe haber ser una lección de vida aquí. Si desea el técnico detalles, vaya a esa URL no eso es en las diapositivas de hoy. Muy bien, alguna pregunta sobre lecciones de la vida de hoy en día en CS? A su vez que fuera. Cualquier cosa en absoluto? Cualquier cosa en absoluto? Tengo una gran cantidad de personas que se registran su Snapchat o algo ahora. Muy bien, por lo que SQL, Structured Query Language. Vamos a envolver esto. Y también, aunque sólo estamos rascando la superficie de este idioma, le daremos suficiente de la lengua en forma de PSet 7 para que pueda hacer frente a algunos funcionalidad bastante común. Pero se dan cuenta que hay un par cosas que no requerimos de ustedes, pero que van a ser importante venir proyectos finales y sin duda venir haciendo real sitios web con usuarios reales Es esta decisión de diseño. Resulta que en una base de datos MySQL, tener racimos de opciones como los tipos de datos para las columnas y otras cosas, pero también tienen la elección de una llamada de almacenamiento motor para todos sus datos, el tipo de sistema de archivos, si está familiarizado, para todos sus datos. ¿En qué formato se lo almacena en última instancia, en? Y la más común, tal vez, ha sido MyISAM y InnoDB, los términos técnicos que vamos a preocupamos sólo en la medida en que uno tiene y uno no tiene la siguiente función. Supongamos que usted tiene una pequeña nevera dormitorio. Y supongamos que usted y su compañero de cuarto, que comparten esta nevera, son muy aficionado a la leche por ejemplo. Y este es, de hecho, la forma en la historia fue contada a mí camino de regreso en el día en que tomé un curso llamado CS 161 sistemas operativos, lo que explora de manera similar este tema. Así que tienes esta nevera. Estás fuera de la leche. Y llegas a casa, su compañero de cuarto de aún en clase o lo que sea, y decide que voy a salir y conseguir un poco de leche. Así se cierra la nevera, el bloqueo la habitación de la residencia, ir al otro lado de la calle a CVS o donde sea, y obtener en la fila para comprar un poco de leche. Mientras tanto, su compañero de cuarto llega a casa de la clase, se mete en la habitación de la residencia, abre la nevera, también se da cuenta ooph, estamos fuera de la leche. Así que él o ella se cierra la nevera y luego sucede para ir a la otra CVS, que pasa a ser a una cuadra de distancia de los otros CVS en la plaza, y se pone en línea Para llegar un poco de leche. Ahora, por supuesto, unos pocos minutos más tarde, a los dos vuelvas, y lo peor de todo es posible resultados ha sucedido. Ambos tienen leche. Y no lo hace realmente como la leche que mucho. Así que uno de ellos es justo va a agriar en algún momento. Así que ahora usted tiene una cantidad excesiva de leche en la nevera todo porque ¿por qué? [Inaudible] DAVID MALAN: Sí, no lo hiciste comunicarse de alguna manera uno con el otro que usted estaba recibiendo la leche. Así que en el más simple de maneras en el mundo humano, ¿cómo podría evitar este tonto escenario suceda tal que sólo termina con uno. Texto ellos, sí bueno. Pero, ¿cómo si no? Notas Post-it. DAVID MALAN: Una nota de post-it. Cualquier forma de comunicación que le dice a su compañero de cuarto no entrar en la nevera para la leche. Voy a ir a repoblar por mi cuenta. Así que de alguna manera necesita para bloquear este recurso. Así que podemos hacer esto-- podemos tipo de arruinar la historia y convertirse en una historia de CS por lo que pensar en esto como simplemente como un variable, que está almacenando un cierto valor. Y en este momento, la valor de la leche es cero, que usted no desea que su compañero de cuarto para inspeccionar esa variable y luego tomar una decisión de él o ella basándose en el estado de esa variable si usted está en el proceso de cambiar el estado de esa variable. Así que una de las líneas de SQL que darle en PSet especificación 7 es este de aquí. Y no gastamos una enorme cantidad de tiempo hablando de ello. Pero resulta que, si usted está tratando para comprar algunas acciones en las finanzas CS50 que ya tiene algunas acciones de, usted quiero ser capaz de hacer un número de las cosas al instante juntos. ¿Quieres ser capaz de efectivamente, en un alto nivel, comprobar bien, si quiero para comprar más acciones de gratuito, la acción de penique que hablar en la especificación, Quiero primer cheque el número de acciones que tengo. Y supongo que es de cinco. Y supongo que quiero comprar 10 más, en última instancia, quiero tener 15 acciones. Así que tengo que hacer dos preguntas. ¿Cuál es el estado de la variable? ¿Cuál es el estado de la fila? ¿Cuántas acciones no tengo actualmente? Entonces usted quiere seguir adelante y actualizarlo. Así que ese es el análogo a la leche en que compruebe la fila, y entonces usted quiere actualizarlo porque si usted quiere comprar 10 acciones, usted no desea cambiar la fila a 10, que querer cambiarlo a 5 más 10 o, por supuesto, 15. Esta línea de código garantiza que esas dos ideas conceptuales ocurrir juntos o no en absoluto. Nadie, incluyendo a algún otro usuario que ha iniciado sesión en el mismo sitio web, de alguna manera se puede interrumpir la comprobación de la fila y la actualización de la fila, la seleccionar y la actualización si se quiere. Y la sintaxis no es muy obvio, pero esta línea, siempre se es, asegura que estas dos operaciones compruebe la variable o compruebe la fila y actualizar la fila suceda atómicamente. Oh, aquí vamos de nuevo. Mensaje de texto en mi teléfono. Así que vamos a hacer de este un poco más concreto. Supongamos que usted no es la aplicación de un refrigerador, y no se está implementando PSet 7, pero un banco real, o un cajero automático, un cajero automático Máquina, por el que usted de alguna manera quiero ser capaz de empoderar los usuarios transferir dinero de una cuenta a otra. Aceptar, espera. Voy a silenciar esto ahora, gracias. Así que queremos mover dinero de un número de cuenta en una cuenta diferente número, específicamente $ 100. Así que esto es una especie de una arbitraria ejemplo, por el que usted, el cajero automático, puede ser que desee para ejecutar dos SQL consultas, restar de una cuenta, y añadir a la otra cuenta. Pero usted quiere asegurarse de que éstos dos líneas tanto ocurren o no en absoluto. Usted no quiere que algo siendo interrumpido. Usted no hace algo de malo de la película inteligente de alguna manera que se coloca en el Bank of America con dos cajeros automáticos delante de él y de alguna manera especie de escribir en el comandos al mismo tiempo, con suerte tratando de deducir $ 200 en lugar de $ 100 y sólo tiene $ 100 acreditados. En pocas palabras, usted quiere que esto comportarse exactamente como usted espera. Y la forma de hacer esta base de datos en SQL es que se coloca en lo que es llamado una transacción. Literalmente en SQL, puede llamar CS50 de función de consulta con cita inicio fin de la cita transacción. A continuación, puede ejecutar cualquier número de consultas SQL subsiguientes, pero ninguno de ellos toma efectuar sobre la base de datos hasta que llame consulta entre comillas comprometerse, si de nuevo usando PHP. Y de esta manera, usted puede asegurarse de que incluso si usted tiene 1.000 usuarios de todo golpear a su base de datos al mismo tiempo, SQL le prometo que estos dos consultas serán implementado una tras otra. Así que usted no termina con el exceso de leche o la cantidad equivocada, en última instancia, de dinero. Así que tenga esto en cuenta, no tanto por PSet 7 pero para proyectos fin de carrera si eres realmente tratando de mover los datos en torno a a través de las tablas como puede ser que aquí. Pero quizás aún más simple y más obvio para entender con un ejemplo es este de aquí. Y alguien nos envía por correo electrónico acerca de esto el otro día cuando vio algo similar en línea. Así que, que yo sepa, el sistema pin no es vulnerable a este ataque. Y no tengo ni idea de si incluso usos la base de datos de SQL debajo del capó. Pero vamos a usar para En aras de la discusión. Aquí está la pantalla que Gente de Harvard tienden para ver al iniciar sesión con su Número de identificación de Harvard y su PIN. Y supongamos que el sistema de pasador fuera implementado en PHP y MySQL con un base de datos, el código que alguien Hace años que podría haber escrito podría tener este aspecto. En primer lugar, declarar una llamado nombre de usuario variable. Y así conseguir que a partir de la superglobal POST. A continuación, obtener otra variable llamado contraseña y hacer lo mismo. Y luego simplemente ejecutar esta larga consulta aquí, seleccione la estrella de los usuarios DONDE nombre de usuario es igual a tal y tal y la contraseña es igual a tal y tal. Observe que el rizado apoyos que he usado aquí sólo significa que PHP, vaya adelante y sustituto el valor de los dos las variables justo ahí. No son estrictamente necesarios, pero que tienden a evitar errores de sintaxis sutiles. Así que esto parece completamente correcta a primera vista. Y lo es. Se podría aplicar el sistema de pasador de esta manera. Pero supongamos que un super estudiante inteligente y malicioso de entrada esto como su PIN. Así que me he quitado la bala signos aquí en la maqueta, y yo he hecho revelé lo que él o ella podría ser escribir. Y es un poco extraño. Pero lo que salta a la vista en potencialmente preocupante acerca de la entrada del usuario, incluso si usted no tiene idea de lo que un ataque de inyección SQL significa. ¿Por qué esta mirada un poco a pescado? Qué es eso? [Inaudible] DAVID MALAN: El o es un poco sospechoso. De hecho, esa es una palabra clave de SQL. Así que no augura nada bueno. El hecho de que hay todas estas citas individuales allí-- de hecho, uno de los más fáciles maneras de romper algunas bases de datos es escribiendo un nombre como O'Reilly que tiene un apóstrofe en ella porque si el ser humano que escribió el código detrás de las escenas no tiene en cuenta que hay podría ser comillas simples en un usuario de de entrada, y él o ella está utilizando comillas simples en su código, las cosas malas pueden suceder. De hecho, peor aún, considere esto. Si esto fue de nuevo el código que alguien en Harvard años Hace escribió para el pasador sistema, observe lo que está a punto de ser sustituido por nombre de usuario y contraseña si el usuario escribe en el nuevo skroob como su nombre de usuario y después de uno, dos, tres, cuatro, cinco, cita o entre comillas uno es igual a citar a uno. Y note lo que es clave aquí está el usuario no ha comenzado su contraseña o su pin con una cita. Y no han terminado se con una cita porque él o ella está asumiendo que si el programador no era tan aguda, que van a tener los comillas simples en su código. Así que aquí está el código. Y que la sustitución ahora podría pasar es esto. Y he subrayado lo el usuario ha tecleado. Así que antes, después. Y note lo que es ligeramente preocupante ahora sobre la mitad derecha de este código SQL? Es un poco más complejo, hay que reconocerlo, de las consultas que hemos visto. Pero esto no puede ser una buena cosa si usted es diciendo seleccione estrella, que es selecto todo, desde la mesa del usuario donde nombre de usuario es igual skroob y contraseña es igual a uno, dos, tres, cuatro, cinco o uno es igual a uno. ¿Cuál es la implicación lógica de esa última cláusula presumiblemente? Es sólo siempre es cierto. Y porque hemos especie de adivinar o descubierto por ensayo y error que el programador que escribió el código no lo hizo anticipar una persona humana o malo escribir entre comillas simples, así, podemos sintácticamente completar la consulta SQL con algo sin sentido pero algo que es sintácticamente incorrecta que siempre se evalúa como verdadera. Así que si este código se utiliza para responder la pregunta verdadera o falsa debería se permitirá a este usuario a pasar, la respuesta está siempre aparentemente va para ser verdad, porque esto siempre va para seleccionar algo de la base de datos porque uno por supuesto es igual a uno siempre. Entonces, ¿cuál es la solución? Bueno en PSet 7, que en realidad evitar esto todos juntos. Le damos una función de consulta, y nosotros le animamos a usar signos de interrogación como marcadores de posición, de forma similar en espíritu al de printf% s, pero lo que es clave sobre los signos de interrogación aquí es si realmente lea functions.php, donde nuestro función de consulta se implementa, esos signos de interrogación se escaparon, por lo que nada potencialmente peligroso como una comilla simple se activa en una cita única escapado. Así que esto es lo que hay realmente está sucediendo si utilizar la función de búsqueda de CS50 o cualquier número de bibliotecas gratuitas de terceros que hacer lo mismo. No importa en este caso, en verde, si el usuario ha tecleado en una única cotización porque la consulta función que escribimos es va a agregar barras invertidas antes dicha cotización peligroso. Así que esto no es, en De hecho, va a ser de fiar. Esto es como escribir en un loco buscando contraseña que es, por supuesto, no va estar contraseña real de skroob. Así que la comida para llevar para CS50 es uno, absolutamente siempre usar algo como función de consulta del CS50 o la biblioteca subyacente, que pasa a llamarse DOP. Pero nunca, nunca, nunca hacer un código como este sin escapar o fregar como dicen sus entradas. Y en algún punto, probablemente, venir a través de un sitio web como este. De hecho, parece ser el caso como en los aeropuertos y hoteles en lugares donde tienen conexión Wi-Fi el acceso que usted tiene que iniciar sesión en, estos sitios web son siempre horriblemente implementado. Y así, una especie de diversión en ejercicio en el hogar, no con fines maliciosos o más de una diversión en la carretera ejercicio, es que sólo tienes que escribir un apóstrofe, una sola cita, en una forma en algún sitio web y ver qué pasa. Y si el servidor se cae o se da usted algún tipo de mensaje de error, puede muy bien ser que alguien no ha previsto esta. Y a continuación, usted debe alertar a la adecuada autoridades y no continuará. Así que ahora ustedes deben de esperar entender un poco más de humor del friki aquí. [Risas] DAVID MALAN: Usted sabe que usted es un friki. Para los próximos años, que recordarán quien mesitas Bobby es porque de este dibujo animado aquí. Así que tenlo en cuenta a medida que cambio de contexto por última vez hoy para JavaScript. Hemos pasado relativamente poco tiempo en la sintaxis de PHP porque en realidad súper similar a C. Y muy bien lo suficiente, demasiado JavaScript es super similar a la sintaxis de C así como veremos en un momento, y como vamos a ver más adelante esta semana en particular. ¿Qué se puede hacer con este lenguaje, sin embargo, es aún más potente, especialmente con APIs. Pero primero una visita rápida. Así que uno, en JavaScript, no hay sin función principal, que es agradable. Al igual que con PHP, usted puede escribir el código. Condiciones ven así. Y expresiones booleanas pueden verá así o así. Existen interruptores, y podría tener este aspecto. Cuatro bucles se ven así. Mientras que los bucles se ven así. Haga ratos tener este aspecto. Y a continuación, las matrices se parecen esto, muy similar a PHP. Pero note, que en JavaScript que declarar una variable no con un dólar firmar, no con un tipo de datos, pero, literalmente, diciendo var para la variable antes. Es también se escribe libremente en que tiene tipos, pero no declara explícitamente. Y luego una cadena, para ejemplo, puede tener un aspecto así, esa cadena ser llamado s en este caso. Y luego un objeto. Y estos que veremos más en poco tiempo. Y un objeto es quizás uno de los más comúnmente visto estructuras de datos basado en un JavaScript programa porque permite asociar arbitraria pares de valores clave sólo como arrays asociativos de PHP y al igual que su propia tabla hash o tratar como implementamos hace unas semanas. Así que vamos a ver lo que en realidad que podemos hacer con JavaScript. Y en particular, esto es una larga lista de características que los navegadores tienen que nos permiten enganchar JavaScript en un sitio web de la siguiente manera. JavaScript se utiliza a menudo como un lado del cliente lenguaje de scripting. No es compilado. Es también se interpreta. Pero a diferencia de PHP, que ha estado funcionando en el servidor, en el servidor web, o muy dentro de la clientes, JavaScript es diferente en que por lo general se ejecuta en el navegador. Por lo que cualquier código JavaScript de empezar a escribir para PSet 8, o el proyecto final, o en el mundo real que generalmente se va para ser salvado en el servidor, absolutamente HTML en un punto o de punto JS de archivo JavaScript. Sin embargo, el navegador va descargar JavaScript código a su propia instancia de Chrome, o IE, o Firefox, o lo que sea. Y el código es en realidad va a conseguir ejecutado en el interior de su propio navegador. Sólo para hacer esto más real, vamos a ver esto en forma concreta. No tenemos idea de lo que hace el código sin realmente leer a través de él. Pero déjame ir a Facebook.com sin iniciar sesión. Déjame ir a Inspeccionar Elemento e ir a, digamos, Red y recargar la página. Y vamos a ver-- permítanme muevo Recargar la Página de conseguir todas las peticiones al nuevo. Y el primer archivo que veo es CSS, CSS. Aquí está la primera JavaScript archivo, y tengo ni idea de lo que esto hace, pero aquí es una parte del código JavaScript que impulsa Facebook. Ni siquiera es verdad que revelando para acercar. Sigue siendo igual de absurdo. Pero verás, incluso por debajo, hay incluso más de estos archivos JavaScript. ¡Vaya. Eso es un ping. Bajemos un poco Además, aún más, aún más. Hay uno. Hay uno. Hay uno. Así que a pesar de que Facebook, detrás de la escenas, está escrito en parte en PHP y la propia versión de los mismos de Facebook, hay una enorme cantidad de JavaScript. De hecho, cualquiera de las charlando haces en Facebook, cualquiera de las actualizaciones de la línea de tiempo en línea que eso suceda en tiempo real, todo eso es impulsado por JavaScript. ¿Sí? AUDIENCIA: No estoy seguro si esto es Facebook, pero pensé que Facebook ha desarrollado su propio lenguaje de código en la casa? DAVID MALAN: Lo hicieron. Así que por eso digo una variación de PHP llamado Hip Hop que, efectivamente, características añadidas a tal que cuando Marcos implementó por primera vez en Facebook, que fue escrito en PHP. Y ese tipo de se ha mantenido el tipo de lenguaje extremo frontal que utilizan para mucho de su codificación, pero no ha sido un lenguaje que es escalas particularmente bien a miles de millones de las personas. Y por lo que han añadido su propio mejoras detrás de las escenas. Y utilizan cualquier número de otros idiomas para diversas piezas de su infraestructura. Así que sí, es una variación de lo que hoy conocemos como PHP. Así que echemos un vistazo en un par de ejemplos de cómo podemos utilizar JavaScript aquí. En el código fuente de hoy, tenemos una montón de archivos, el primero de los cuales, vamos llamado DOM cero. Así DOM cero se ve de la siguiente manera. Déjame ir en este directorio y abrir domzero.html, la parte superior de los cuales tiene un tipo de doc declaración, diciendo aquí viene HTML 5. Y ahora aquí está una etiqueta HTML. Aquí está la etiqueta de la cabeza. Y esto es lo que hay de nuevo hoy. Ahora tenemos una etiqueta de script en el interior de la cabeza de la página. Y esto al parecer hace muy poco, pero aviso que he definido una guión, un JavaScript. Y como un aparte, ya que esta Es un error común, JavaScript tiene absolutamente nada que ver con Java, el lenguaje que algunos de ustedes podrían han aprendido en la SCCA. Fue más de una comercialización cosa que nada, montar los faldones de Java hace años. Pero JavaScript, nada que ver con Java, sólo de manera similar, y molesto, confusamente llamado. Así que aquí está cómo se declara una función en JavaScript, decir, literalmente, la función, entonces el nombre de la función, entonces cualquier argumentos podría adoptar, al igual que en PHP. Resulta que en JavaScript, una de las más funciones molestos que existen es una alerta. Esta es una pequeña ventana que se abrirá y que le avise en cierta pieza de información. Es generalmente mal visto. Pero lo usaremos como nuestro primer ejercicio aquí. Observe algunas características de JavaScript. Las comillas simples y comillas dobles no importa en realidad más. Las comillas simples y dobles citas se pueden intercambiar, mientras que en C, usted tiene que utilizar comillas dobles para las cadenas, y usted tiene dos individuales Cotizaciones de caracteres. En el mundo de JavaScript muchas personas, la mayoría de la gente utilizar comillas simples alrededor de las cadenas sólo porque es una cosa estilística. Pero ¿cuál es el operador más aquí, que no hemos visto antes? AUDIENCIA: La concatenación. DAVID MALAN: concatenación. Así que C no tiene ni siquiera esto. PHP tiene el operador punto, que hace esto. JavaScript tiene el operador más, que confusamente es como Java. Ahora, ¿qué está pasando aquí? Así que aquí es donde un básico la comprensión de que la imagen nos tiramos un par Hace días entra en juego. ¿Recuerdas cuando tuvimos un sencillo versión de un HTML page-- que acaba de decir, hola mundo. Y luego dibujamos un árbol a la derecha, que tenía un montón de rectángulos y líneas conectándolos como un árbol genealógico. Así que esa es la llamada DOM o Document Object Model. Y resulta que se puede acceder rectángulos en el árbol con la sintaxis como la siguiente. Usted, literalmente, dice el documento, que es un variable global especial en JavaScript programa que tiene una función asociada a ella que se puede acceder similar a una estructura, sino que simplemente decir punto y luego el nombre de la función, obtener elemento por ID. El elemento que quiero conseguir es aparentemente citar nombre fin de la cita. Y luego quiero obtener su valor. Ahora estamos llegando delante de nosotros mismos. Ni siquiera estoy seguro de lo que todo esto se trata. Vamos a avanzar rápidamente al HTML en La página, que es super simple. Tenga en cuenta que he definido Un formulario aquí abajo. Note que he dado un único Identificación, a pesar de que no hemos usado este atributo antes. Pero esto existe en HTML. Usted puede identificar de forma exclusiva algunos trozo de HTML con un identificador como este. Aviso ahora esto-- resulta HTML apoya, por que la lista de lavandería Hace un momento, en su conjunto montón de controladores de eventos. Y este controlador de eventos, dice en enviar. En la presentación de este usuario forma, llame al siguiente código. Y el código que va de ser llamado o ejecutados es exactamente esto, el griego función seguido de retorno falso. Todo lo demás debe estar bastante familiarizado. Aquí es una entrada de tipo texto, cuyo ID, en este caso, va a ser nombre. No tenemos un atributo real nombre este tiempo-- y un botón de envío. Así que la página resultante se parece a esto. Y el comportamiento resultante, verás, se parece a esto. La página que alberga locales dice, hola David, apenas un estéticamente agradable manera de saludar a un usuario. Pero lo que realmente está pasando? Bueno, tenga en cuenta lo que es esto. Este es un campo de texto. Y de acuerdo con la HTML aquí, me he dado un identificador único llamado cotización nombre fin de la cita. Mientras tanto, lo que he dicho cuando el usuario envía este formulario por oprimir la tecla Enter o haga clic en el Presentar botón, llame a la función llamada Greet y luego regresar Falso. Vamos a considerar los de atrás. Observe cuando haga clic en Enviar, el URL de esta página no cambia. El icono del navegador no empezar a girar. Yo no voy a ninguna parte, y eso es literalmente, porque dije: return false. Volver circuitos o paradas cortas falsos el comportamiento predeterminado de un formulario. Así que luego nos deja con ésta última pregunta. ¿Qué hace Greet? Bueno, al parecer Greet llama a una función llamada Alerta, pasa en una largo argumento de que es el resultado de la concatenación de un conjunto manojo de subcadenas, hola espacio coma, entonces todo lo que este regrese. Así que el documento es como un mundial variable para que la raíz de ese árbol, llamar a una función especial, de lo contrario ahora conocido como método. Una función que es en el interior de una variable es llamado método en lugar de una función. Así que elemento por ID. ¿Qué elemento tiene usted que desee obtener por su ID? Cita nombre y fin de la cita entonces el valor específicamente. Así, en otras palabras, que el código simplemente se encuentra el campo de texto cuyo ID es el nombre y luego obtiene su valor. Así que si yo fuera a cambiar esta y decir Davin en lugar de David, y haga clic en Enviar, ahora nos tener un saludo de Davin. Muy bien, así que todo bien y bueno. Pero vamos a ver si podemos hacer esta un poco más limpio ya que sólo escribir código como este es en general, va a ser mal visto. Esto se va a ver más aterrador. Pero, ¿qué es lo primero diferencia que nota aquí en esta versión, además de la nombrar cambiar a DOM uno? Lo que estructuralmente se ve diferente acerca de este frente a la otra? ¿Sí? AUDIENCIA: ¿Es la forma en la parte superior de la secuencia de comandos ahora? DAVID MALAN: Sí, es la forma en la parte superior de la secuencia de comandos, por alguna razón curiosa. Así que eso es lo primero que salta a mí, también. Y por suerte, al menos, esta parte es idéntica. Así que la única cosa que parece a ser diferente es la siguiente. Así que aquí está lo que está ordenado acerca de JavaScript 2. Y que hace que sea difícil entender a primera vista, especialmente para proyectos de final si usted está buscando en el código de ejemplo en línea, sino que se reduce a algunos características sintácticas básicas. Aquí de nuevo es que documento variable global. Aquí de nuevo es que el método o función que dice obtener el elemento de identificación. Esta vez quiero obtener el ID de llamada de demostración. Donde es eso? Eso es al parecer la derecha aquí, el propio formulario. Y ahora cuenta de que al parecer si volver ese nodo del árbol que representa la forma en sí, no es un campo de texto, resulta que la forma, que nodo o rectángulo desde el árbol, tiene lo que vamos a llamar a una propiedad, muy, muy, muy similar en espíritu a una estructura en C. Es sólo un miembro de datos dentro de este rectángulo. Así que tengo la forma aquí, y estoy adjuntando, o estoy asignando, a su Submit manejador o más bien en Enviar en la propiedad la siguiente función. Y este es, de lejos, el más loco Lo hasta ahora sintácticamente. Resulta que en JavaScript y en PHP, y, francamente, para el caso en C, a pesar de que no lo hacemos, se puede añadir sin nombre, anónimo o conocido como lambda funciones que no tienen un nombre pero puede ser llamado, no obstante. Así que lo que estoy haciendo aquí es que estoy asignando Enviar esta en la propiedad, que es dentro de este nodo de mi árbol DOM, un función, puntero de función si se quiere. Esa función no tiene nombre, pero eso no lo hace importa porque vamos a ver en un momento cómo llamarlo. Cuando esta función se llama, este código es ejecutado, entonces falso se devuelve al igual que antes. Pero noto lo que he hecho. En este punto en el historia, tengo un formulario. Tiene un identificador único llamado de demostración. Aquí abajo, tengo una etiqueta script que ejecuta el siguiente código. Se une a ese nodo en el árbol que está en Enviar propiedad esta función aquí. Y sólo por la naturaleza de cómo funcionan los navegadores, cuando ahora hago clic en Enviar o pulse Enter, que la función va a ser llamado. No necesita un nombre que ya diablos le importa cómo se llama. La única vez que nunca va a llegar llamado es cuando presento el formulario. No hay necesidad para mí, el desarrollador humano, que en realidad llamarlo en cualquier otro lugar. Ahora sólo como un reclamo, como si eso no se importaría flexión suficiente, incluso podemos hacer que esta buscar usando más críptico una biblioteca súper popular llamado jQuery. De hecho jQuery y JavaScript a menudo se fusionado. ¿Y qué vamos a hacer el miércoles es de inicio el uso de este lenguaje y estas bibliotecas para construir cada vez asíncrono y aplicaciones dinámicas como conseguir un mapa aplicaciones, aplicaciones que actualizar la página web en bienes tiempo, al igual que Facebook o Gchat hacer, y ya no limitarnos a hitting Presentar por un encuentro o simplemente puesto solo. Así que voy a verte el miércoles. [REPRODUCCIÓN DE MÚSICA]