1 00:00:00,000 --> 00:00:01,940 >> [REPRODUCCIÓN DE MÚSICA] 2 00:00:01,940 --> 00:00:11,130 3 00:00:11,130 --> 00:00:14,620 >> DAVID MALAN: Este es CS 50, y este es el comienzo de la semana nueve. 4 00:00:14,620 --> 00:00:18,240 Y lo que nosotros pensamos que lo hacemos hoy no es sólo cerrar el capítulo de la semana del pasado 5 00:00:18,240 --> 00:00:22,670 material de donde nos centramos en el servidor programación web lateral con PHP y SQL, 6 00:00:22,670 --> 00:00:23,549 un poco de materia de base de datos. 7 00:00:23,549 --> 00:00:25,590 Hablaremos un poco de hoy de seguridad y luego 8 00:00:25,590 --> 00:00:29,590 transición a una programación del lado del cliente lenguaje conocido como JavaScript. 9 00:00:29,590 --> 00:00:31,330 Pero primero, un poco de redención. 10 00:00:31,330 --> 00:00:35,030 >> Usted puede recordar que en Miércoles, me dispuse 11 00:00:35,030 --> 00:00:37,550 para escribir una página web que tomó en la entrada del usuario 12 00:00:37,550 --> 00:00:41,120 por un formulario HTML que luego se almacena que los nombres de entrada del usuario, teléfono 13 00:00:41,120 --> 00:00:43,124 números, y el teléfono celular portadores en la base de datos. 14 00:00:43,124 --> 00:00:45,540 Y luego tuve un poco de orden script de línea escrito en PHP 15 00:00:45,540 --> 00:00:47,956 que se suponía que iterar sobre las filas en la base de datos 16 00:00:47,956 --> 00:00:49,400 y enviar mensajes de texto. 17 00:00:49,400 --> 00:00:53,870 A pesar de varios, de varios intentos, nos no consiguió que el trabajo para el final. 18 00:00:53,870 --> 00:00:57,820 >> Así que me pasé toda la semana de trabajo en ese código para llevarnos más allá del punto 19 00:00:57,820 --> 00:01:01,220 donde lo dejamos, con lo cual todo Llegué al final del miércoles 20 00:01:01,220 --> 00:01:05,500 Fue este mensaje de texto de Margo mientras luchaba, 21 00:01:05,500 --> 00:01:09,940 seguido por un mensaje de texto desde otro compañero de clase, tienes esta David. 22 00:01:09,940 --> 00:01:14,030 Seguido por éste, maravillosamente alentadora. 23 00:01:14,030 --> 00:01:15,840 Siguió adelante, muy alentador. 24 00:01:15,840 --> 00:01:20,960 Casi lo conseguí hasta entonces-- y esa es la nota que terminamos el miércoles. 25 00:01:20,960 --> 00:01:25,850 Y a continuación, en realidad tal vez mi favorito, un momento después, este entró. 26 00:01:25,850 --> 00:01:27,000 Maldita sea directo corriente. 27 00:01:27,000 --> 00:01:31,080 >> Así que hoy, podemos solucionar este problema con una rápida mira lo que he hecho desde entonces. 28 00:01:31,080 --> 00:01:35,440 Así que todo el código está disponible en línea desde la semana pasada, la semana ocho, 29 00:01:35,440 --> 00:01:36,300 código fuente. 30 00:01:36,300 --> 00:01:39,425 Y verás que yo pasé, y en realidad me limpié un poco las cosas. 31 00:01:39,425 --> 00:01:42,080 Yo presenté un par otro características de una base de datos SQL. 32 00:01:42,080 --> 00:01:45,300 Por ejemplo, en lugar de sólo hacer transportista de carbón var 33 00:01:45,300 --> 00:01:47,310 como creo que lo hice sobre la marcha la semana pasada. 34 00:01:47,310 --> 00:01:49,820 Yo en cambio lo definió como lo que se llama una enumeración. 35 00:01:49,820 --> 00:01:53,310 >> Y algunos de ustedes han visto este como exploramos C. Enum es en realidad 36 00:01:53,310 --> 00:01:56,820 una característica de C donde se puede enumerar un montón de constantes 37 00:01:56,820 --> 00:01:59,640 y asignarles valores automáticos, como uno, dos, tres, cuatro 38 00:01:59,640 --> 00:02:01,330 sin necesidad de números de código duro. 39 00:02:01,330 --> 00:02:04,780 Así SQL admite la misma, por lo que si Tiene un campo de base de datos que sólo 40 00:02:04,780 --> 00:02:09,389 querer tomar en una de finito valores, puede literalmente especificarlo 41 00:02:09,389 --> 00:02:13,120 como lo he hecho allí por cuatro portadores populares de teléfonos celulares de Estados Unidos. 42 00:02:13,120 --> 00:02:13,819 >> Así que hice eso. 43 00:02:13,819 --> 00:02:16,610 Y he hecho una serie de cambios como así, la más importante de las cuales 44 00:02:16,610 --> 00:02:20,090 era conseguir email funcionando porque el recuerdo, que este programa se basó en la cual 45 00:02:20,090 --> 00:02:23,470 generalmente llamado un correo electrónico a Puerta de entrada de SMS, que es sólo 46 00:02:23,470 --> 00:02:27,670 una forma elegante de decir que Verizon, y AT & T, y otras personas soportan un servidor, 47 00:02:27,670 --> 00:02:30,740 por lo que si recibe correo electrónico, que convierte a SMS 48 00:02:30,740 --> 00:02:33,290 y envía un texto mensaje al teléfono de alguien. 49 00:02:33,290 --> 00:02:37,010 Así que si lo hice correctamente, aquí es una forma nueva y mejorada 50 00:02:37,010 --> 00:02:39,259 que va a hablar con nueva y mejorada código, que 51 00:02:39,259 --> 00:02:40,300 se puede jugar con línea. 52 00:02:40,300 --> 00:02:44,140 Y es de esperar que mi pitido teléfono en un momento. 53 00:02:44,140 --> 00:02:47,240 >> Así que en primer lugar, voy a escribir mi nombre. 54 00:02:47,240 --> 00:02:51,400 En segundo lugar, yo no voy para hacer esto en esta ocasión. 55 00:02:51,400 --> 00:02:53,920 Yo voy a hacer Inspeccionar Elemento. 56 00:02:53,920 --> 00:02:56,710 Y esto es sólo una poca cosa, así que no lo hago 57 00:02:56,710 --> 00:02:59,250 crear horas de post-producción Trabajo como lo hice la última vez. 58 00:02:59,250 --> 00:03:02,300 Ahora es mi número de teléfono. 59 00:03:02,300 --> 00:03:03,560 >> Voy a seleccionar Verizon. 60 00:03:03,560 --> 00:03:10,260 Y aquí, vamos a centrar en este micrófono aquí, y el objetivo esta en mi teléfono aquí. 61 00:03:10,260 --> 00:03:13,130 Voy a hacer clic Registro, que debe de esperar 62 00:03:13,130 --> 00:03:14,530 lo puso en la base de datos. 63 00:03:14,530 --> 00:03:16,780 Ahora me voy a ir a la programa de línea de comandos, lo que 64 00:03:16,780 --> 00:03:20,825 retiro se llama barra de puntos texto, y cruzar los dedos. 65 00:03:20,825 --> 00:03:24,092 66 00:03:24,092 --> 00:03:26,527 Aquí vamos. 67 00:03:26,527 --> 00:03:27,501 >> [DINGS TELÉFONO] 68 00:03:27,501 --> 00:03:28,962 >> [Aplausos] 69 00:03:28,962 --> 00:03:31,815 70 00:03:31,815 --> 00:03:34,940 DAVID MALAN: Así que más divertido que esto-- es divertido, por supuesto, si me meto en ella. 71 00:03:34,940 --> 00:03:38,004 Pero es más divertido, pensé, si creado uno de esos momentos de la película 72 00:03:38,004 --> 00:03:40,420 donde como algo realmente malo ha ocurrido en el mundo, 73 00:03:40,420 --> 00:03:42,860 y como todas las personas de la NSA los teléfonos móviles empiezan a sonar 74 00:03:42,860 --> 00:03:44,860 con mensajes de texto alertando a este hecho. 75 00:03:44,860 --> 00:03:47,026 Así que pensé en probar para recrear el mismo aquí, 76 00:03:47,026 --> 00:03:49,610 por lo que no se utiliza una base de datos, I en lugar de antemano 77 00:03:49,610 --> 00:03:51,490 escribió un programa que se parece a esto. 78 00:03:51,490 --> 00:03:53,660 >> Este es un index.php-- y yo puse el código en línea 79 00:03:53,660 --> 00:03:56,710 como bien-- que al parecer sólo hace que form.php, 80 00:03:56,710 --> 00:04:00,990 usando un paradigma estilo MVC que hablar con más detalle en conjunto problema 81 00:04:00,990 --> 00:04:01,650 Siete. 82 00:04:01,650 --> 00:04:02,910 Esa forma es bastante simple. 83 00:04:02,910 --> 00:04:06,634 Se va a someter a una archivo llamado here.php por correo. 84 00:04:06,634 --> 00:04:09,300 Y está al parecer va a pedir para un nombre y un número de teléfono, 85 00:04:09,300 --> 00:04:11,400 y luego a través de la llamada Seleccione el menú, que es 86 00:04:11,400 --> 00:04:14,250 va a dar por lo menos cuatro portadores populares de teléfonos celulares de Estados Unidos, 87 00:04:14,250 --> 00:04:17,470 y luego permitir que usted efectivamente tomar la asistencia haciendo clic aquí. 88 00:04:17,470 --> 00:04:20,471 >> Y aquí, por su parte, va a pedir prestado parte del código de la última vez. 89 00:04:20,471 --> 00:04:22,553 Y si usted acaba de hojear este, verás que hay 90 00:04:22,553 --> 00:04:23,900 un montón de comprobación de errores. 91 00:04:23,900 --> 00:04:26,640 Pero la belleza al final es que no estamos escribiendo a una base de datos en la actualidad. 92 00:04:26,640 --> 00:04:29,130 Estamos hacer que sea sencillo y sólo espero que el envío de 93 00:04:29,130 --> 00:04:32,190 un mensaje de texto a través de la función I escribió en los últimos días de llamadas 94 00:04:32,190 --> 00:04:36,270 Texto, que está en funciones. php, que es de nuevo disponible en línea. 95 00:04:36,270 --> 00:04:38,210 >> Así que si te gustaría participar en esto. 96 00:04:38,210 --> 00:04:40,190 No vamos a guardar nada. 97 00:04:40,190 --> 00:04:43,809 Vaya a esta URL aquí en tiempo real. 98 00:04:43,809 --> 00:04:46,850 No enviarlo por el momento, pero vamos a ver si podemos tener uno de estos película 99 00:04:46,850 --> 00:04:49,830 momentos en los que el teléfono móvil de todo el mundo comienza a sonar, con suerte sólo 100 00:04:49,830 --> 00:04:53,580 una vez este año a diferencia de en 2011 donde este salió horriblemente mal. 101 00:04:53,580 --> 00:04:58,910 Y una vez que usted va a esa dirección, usted debe ver una forma súper sencilla 102 00:04:58,910 --> 00:05:03,884 que si usted tiene un nombre, un teléfono celular número, y un vehículo móvil que 103 00:05:03,884 --> 00:05:06,175 coincide con la lista de ahí, ir adelante y llenar el formulario. 104 00:05:06,175 --> 00:05:07,880 Pero no golpear a presentar por el momento. 105 00:05:07,880 --> 00:05:10,850 >> La forma va a tener este aspecto. 106 00:05:10,850 --> 00:05:13,660 Seguir adelante y escribir su nombre, número de teléfono. 107 00:05:13,660 --> 00:05:17,670 Oop, alguien va por delante de la curva. 108 00:05:17,670 --> 00:05:18,170 Está bien. 109 00:05:18,170 --> 00:05:19,340 Bueno, todo el mundo está lleno el formulario. 110 00:05:19,340 --> 00:05:21,400 Esto debería funcionar en un teléfono, también, si lo desea. 111 00:05:21,400 --> 00:05:23,695 Muy bien, en sus marcas, listos, ya. 112 00:05:23,695 --> 00:05:24,195 Hit Aquí. 113 00:05:24,195 --> 00:05:27,275 114 00:05:27,275 --> 00:05:27,775 ¿Qué? 115 00:05:27,775 --> 00:05:31,140 116 00:05:31,140 --> 00:05:31,640 No. 117 00:05:31,640 --> 00:05:34,410 118 00:05:34,410 --> 00:05:40,250 Lo juro por Dios, he probado este varias veces hoy. 119 00:05:40,250 --> 00:05:41,720 ¿Lo tienes? 120 00:05:41,720 --> 00:05:43,145 >> [Interponiendo VOCES] 121 00:05:43,145 --> 00:05:46,470 122 00:05:46,470 --> 00:05:49,560 >> DAVID MALAN: OK, tal vez un error del usuario. 123 00:05:49,560 --> 00:05:50,550 Eso es dos. 124 00:05:50,550 --> 00:05:53,300 Se trabajó para dos de cada una pocos cientos, tres, cuatro. 125 00:05:53,300 --> 00:05:55,940 OK, eso es bueno. 126 00:05:55,940 --> 00:05:58,520 Cuatro de cada cinco para ¿qué hay de la corrección. 127 00:05:58,520 --> 00:05:59,810 >> Entonces, ¿qué ha pasado? 128 00:05:59,810 --> 00:06:02,727 Así que, presumiblemente, sin ver a su pantallas, ¿Por qué podría haber muchos errores? 129 00:06:02,727 --> 00:06:05,518 Es probable que estábamos tratando de hacer demasiadas conexiones 130 00:06:05,518 --> 00:06:08,110 al servidor de correo de la Universidad de Harvard en todo una vez desde la misma dirección IP. 131 00:06:08,110 --> 00:06:10,740 Sólo estoy adivinando ya que yo no lo hice el lujo de la prueba 132 00:06:10,740 --> 00:06:13,220 este código con algunos 300 personas de antelación 133 00:06:13,220 --> 00:06:16,040 pero por ahora darse cuenta de que que por lo menos debe 134 00:06:16,040 --> 00:06:18,250 han conseguido el trabajo hecho en esta ocasión. 135 00:06:18,250 --> 00:06:22,880 >> Muy bien, así que ¿por qué es esto todo el más afín a lo que está pasando? 136 00:06:22,880 --> 00:06:24,900 Bueno en primer lugar, una rápida par de anuncios. 137 00:06:24,900 --> 00:06:29,350 Así que uno, si desea unirse a Chang, y Nick, y otras personas en el almuerzo de este viernes, 138 00:06:29,350 --> 00:06:32,400 hacer de RSVP en la dirección URL habitual allí. 139 00:06:32,400 --> 00:06:35,650 Si usted está pensando en concentrarse o hacer una secundaria en CS, 140 00:06:35,650 --> 00:06:38,941 si usted es un estudiante de segundo año, estudiante de primer año o, o incluso menor o mayor en este momento 141 00:06:38,941 --> 00:06:42,490 y todavía puede exprimir en los cursos, darse cuenta de que la escuela de ingeniería 142 00:06:42,490 --> 00:06:45,620 está reuniendo de forma gratuita y Ben Helado de Jerry y consejos 143 00:06:45,620 --> 00:06:48,910 esto poco después de clase Miércoles a las 4:00 PM en el edificio CS 144 00:06:48,910 --> 00:06:49,771 en Maxwell Dworkin. 145 00:06:49,771 --> 00:06:51,520 Si esta es demasiado rápido en la pantalla, sólo tiene que ir 146 00:06:51,520 --> 00:06:55,260 a cs50.harvard.edu para una enlace al evento en Facebook 147 00:06:55,260 --> 00:06:57,140 donde se pueden ver más detalles. 148 00:06:57,140 --> 00:07:01,390 >> Mientras tanto, yo pensaba que iba a corregir otra cosa que metió la pata el miércoles. 149 00:07:01,390 --> 00:07:04,400 Resulta que ese ID de Mark en Facebook no era tres. 150 00:07:04,400 --> 00:07:05,230 Eran las cuatro. 151 00:07:05,230 --> 00:07:08,330 Resulta que él tenía más prueba cuentas de lo que recuerdan. 152 00:07:08,330 --> 00:07:12,400 Pero lo que este se sentía como una oportunidad que hacer es tirar de una URL como esta. 153 00:07:12,400 --> 00:07:16,680 >> Así resulta que Facebook tiene un API, Application Programming Interface, 154 00:07:16,680 --> 00:07:20,070 que es un mecanismo mediante el cual se pueden solicitar datos mediante programación 155 00:07:20,070 --> 00:07:24,480 en Facebook y volver máquina información legible, no páginas web 156 00:07:24,480 --> 00:07:28,690 pero el texto sólo prima, algo llamado JavaScript Object Notation. 157 00:07:28,690 --> 00:07:32,150 Y de hecho, si vuelvo a visitar esta URL, y un zoom, de forma predeterminada, 158 00:07:32,150 --> 00:07:34,960 este es Mark públicamente información accesible. 159 00:07:34,960 --> 00:07:37,430 >> Y el detalle interesante aquí es sólo que su ID 160 00:07:37,430 --> 00:07:40,670 es de hecho, el número cuatro, que me se dio cuenta tan pronto como lo hice esta. 161 00:07:40,670 --> 00:07:44,260 Puede hacerlo usted mismo si usted sabe su nombre de usuario de Facebook, si usted tiene uno. 162 00:07:44,260 --> 00:07:45,440 Sólo tienes que escribir hasta arriba allí. 163 00:07:45,440 --> 00:07:46,640 Y nada de esto es privado. 164 00:07:46,640 --> 00:07:48,670 Sólo estoy haciendo esto incluso en el modo de incógnito. 165 00:07:48,670 --> 00:07:49,900 Así que ni siquiera estoy inscrito. 166 00:07:49,900 --> 00:07:54,440 Y usted está viendo que yo al parecer era el número de usuario 6454 167 00:07:54,440 --> 00:07:56,480 en Facebook, que no es tan mal estos días. 168 00:07:56,480 --> 00:07:59,900 Así que de todos modos, también verá información adicional allí. 169 00:07:59,900 --> 00:08:02,150 >> Y el aspecto útil de que es que usted 170 00:08:02,150 --> 00:08:06,890 podría escribir su propio software que de alguna manera se integra datos como éste 171 00:08:06,890 --> 00:08:08,170 en su propia aplicación. 172 00:08:08,170 --> 00:08:10,650 Puede permitir a los usuarios a inicie sesión en su sitio web, 173 00:08:10,650 --> 00:08:14,190 no usar su propio nombre de usuario personalizada y pero tal vez su contraseña de inicio de sesión de Facebook 174 00:08:14,190 --> 00:08:16,170 y obtener información incluso acerca de sus amigos, 175 00:08:16,170 --> 00:08:18,740 si aprueban tales, o similar. 176 00:08:18,740 --> 00:08:21,430 Así en cuenta que CS50, también, tiene algunas de sus propias APIs, 177 00:08:21,430 --> 00:08:24,620 una para los datos del catálogo supuesto, algunos de los menús de abrazos en el comedor 178 00:08:24,620 --> 00:08:26,730 salas, todas de la edificios y lugares 179 00:08:26,730 --> 00:08:30,930 en el campus tenemos una API para así que se puede consultar de manera similar y obtener 180 00:08:30,930 --> 00:08:35,520 datos textual de espalda que puede integrar en un PHP o JavaScript, o incluso, 181 00:08:35,520 --> 00:08:38,320 aunque con menor frecuencia, un C basa proyecto final. 182 00:08:38,320 --> 00:08:41,190 >> De hecho antes de la final proyecto son unos hitos. 183 00:08:41,190 --> 00:08:42,980 Tienes un email de nosotros el otro día. 184 00:08:42,980 --> 00:08:45,761 Darse cuenta de que la propuesta es debido el próximo lunes. 185 00:08:45,761 --> 00:08:49,010 No es necesariamente vinculante, pero que no necesitará recibir sus compañeros de enseñanza 186 00:08:49,010 --> 00:08:51,260 aprobación antes de hacer cualquier cambio a partir de entonces. 187 00:08:51,260 --> 00:08:54,280 Y luego por delante son un número de otros hitos. 188 00:08:54,280 --> 00:08:56,542 >> Así que para burlarse de usted, también, con algunas posibilidades, 189 00:08:56,542 --> 00:08:58,250 tenemos un montón de estas bombillas Hue. 190 00:08:58,250 --> 00:09:01,190 Y algunos de ustedes ahora tienen algunos de estos en su habitación de la residencia también. 191 00:09:01,190 --> 00:09:02,920 Y ellos también tienen una API. 192 00:09:02,920 --> 00:09:07,300 Así que recordar esas semanas bulbos binarios Hace que Dan Bradley y Ansel 193 00:09:07,300 --> 00:09:08,780 Duff ha creado para nosotros. 194 00:09:08,780 --> 00:09:12,560 Utilizaron una interfaz de software para esta bombilla, que en este momento 195 00:09:12,560 --> 00:09:15,232 está conectado a la electricidad y luego a través de wireless 196 00:09:15,232 --> 00:09:17,690 está conectado a una pequeña cosa llamado el Puente de aquí abajo, 197 00:09:17,690 --> 00:09:21,280 como un pequeño propietario del router a este dispositivo particular. 198 00:09:21,280 --> 00:09:26,540 >> Pero resulta que si sé cómo enviar mensajes HTTP, como todos lo hacemos ahora, 199 00:09:26,540 --> 00:09:31,670 Puedo enviar un mensaje como este a esta bombilla para encenderla o apagado 200 00:09:31,670 --> 00:09:34,000 o hacer cualquier número de otras operaciones en él. 201 00:09:34,000 --> 00:09:36,110 Tenga en cuenta que no es llegar, no es POST. 202 00:09:36,110 --> 00:09:37,760 Hay otra que se llama put. 203 00:09:37,760 --> 00:09:39,630 De hecho, hay algunos otros tales verbos. 204 00:09:39,630 --> 00:09:42,920 Pero note que hay un camino allí, slash API, recortar nuevo desarrollador, 205 00:09:42,920 --> 00:09:44,990 reducir la luz, recortar uno, slash estado. 206 00:09:44,990 --> 00:09:49,060 >> Eso es al parecer sólo el camino que la compañía, Philips, 207 00:09:49,060 --> 00:09:51,640 decidió usted tiene que golpear con una petición HTTP 208 00:09:51,640 --> 00:09:55,010 si usted quiere cambiar el estado de la bombilla utilizando HTTP 1.1. 209 00:09:55,010 --> 00:09:56,380 Luego note la línea en blanco. 210 00:09:56,380 --> 00:10:00,170 Y luego, por último, lo que parece clase de una gran variedad de una especie, 211 00:10:00,170 --> 00:10:04,730 esta vez va a ser llamado JavaScript Object Notation, o Jason. 212 00:10:04,730 --> 00:10:08,000 Y lo que se ve aquí es que hay tres pares de valores clave. 213 00:10:08,000 --> 00:10:09,115 >> Una de las claves está llamada. 214 00:10:09,115 --> 00:10:10,990 Y su valor aparentemente va a ser verdad. 215 00:10:10,990 --> 00:10:13,612 El brillo es 128, el cual es una especie de int. 216 00:10:13,612 --> 00:10:15,820 Y entonces el tiempo de transición es cero, que es aparentemente 217 00:10:15,820 --> 00:10:17,970 cuánto tiempo va a tomar para convertir esto en algo. 218 00:10:17,970 --> 00:10:19,890 >> Así que ahora mismo esta bombilla está apagada. 219 00:10:19,890 --> 00:10:22,880 Pero si lo hago exactamente esto-- dejar me voy a una hoja de trucos poco 220 00:10:22,880 --> 00:10:25,200 que Dan creó en advance-- y voy 221 00:10:25,200 --> 00:10:27,920 seguir adelante y copiar el siguiente comando. 222 00:10:27,920 --> 00:10:30,200 Curl, como algunos de ustedes podría haber recogido en CS50 223 00:10:30,200 --> 00:10:35,080 Discutir es una utilidad como Telnet, tales que puede simular las peticiones HTTP, 224 00:10:35,080 --> 00:10:36,360 pone específicamente. 225 00:10:36,360 --> 00:10:39,710 Puedo enviar estos datos, específicamente lo que acabamos de 226 00:10:39,710 --> 00:10:43,430 vimos hace un momento concreto a esta URL aquí. 227 00:10:43,430 --> 00:10:46,310 Y luego Curl va a manejar todas las cabeceras necesarias 228 00:10:46,310 --> 00:10:47,600 y analizar de allí. 229 00:10:47,600 --> 00:10:54,700 >> Así que todo lo que tengo que hacer es copiar esto en una ventana de terminal y luego pulse Enter. 230 00:10:54,700 --> 00:10:56,000 Y la bombilla se enciende. 231 00:10:56,000 --> 00:10:59,060 Y todo esto está pasando por mi equipo de manera inalámbrica 232 00:10:59,060 --> 00:11:01,960 de alguna manera hasta el puente, que entonces está hablando con esta bombilla. 233 00:11:01,960 --> 00:11:02,960 Yo puedo hacer otra cosa. 234 00:11:02,960 --> 00:11:07,050 Puedo hacer esta cosa ir de color rojo, por ejemplo. 235 00:11:07,050 --> 00:11:11,040 Por ejemplo que puedo hacer esta cosa ir verde. 236 00:11:11,040 --> 00:11:12,220 Yo puedo hacer que se vaya azul. 237 00:11:12,220 --> 00:11:14,760 >> Y note en cada uno de estos casos, todo lo que estoy cambiando 238 00:11:14,760 --> 00:11:18,540 es el llamado valor de matiz a realmente darle un poco de color. 239 00:11:18,540 --> 00:11:20,320 Así que permítanme pega este uno adentro también. 240 00:11:20,320 --> 00:11:21,000 Ahora es el azul. 241 00:11:21,000 --> 00:11:24,672 >> Y usted puede hacer aún más elegante cosas where-- Vamos a ir a verde. 242 00:11:24,672 --> 00:11:26,630 Y yo podría hacer esto de por supuesto con mi propio código. 243 00:11:26,630 --> 00:11:30,670 Pero incluso la propia API apoya las operaciones de funky 244 00:11:30,670 --> 00:11:35,510 como este, que ahora se molestarán nosotros durante los próximos 30 segundos. 245 00:11:35,510 --> 00:11:39,170 >> Así que eso es una muestra de lo que te pueden ver con una API, el cual involucró a 246 00:11:39,170 --> 00:11:40,010 bombillas. 247 00:11:40,010 --> 00:11:42,510 Tenga en cuenta que CS50 tiene un par pares de Google Glass Si desea 248 00:11:42,510 --> 00:11:45,380 gustaría para hacer frente a algo a lo largo esas líneas, Arduino Unos, que 249 00:11:45,380 --> 00:11:48,670 son diminutos ordenadores, esencialmente, en una placa de circuito pequeño 250 00:11:48,670 --> 00:11:50,470 que se puede conectar cables y otras cosas 251 00:11:50,470 --> 00:11:52,732 para el control y de hecho su entorno real. 252 00:11:52,732 --> 00:11:54,940 Y luego hay un par de juguetes nuevos que tenemos. 253 00:11:54,940 --> 00:11:59,294 Éste literalmente acaba de llegar el otro día por correo, una Myo brazal. 254 00:11:59,294 --> 00:12:01,710 Y yo que pensaba que es una manera de que te entusiasma acerca de los proyectos 255 00:12:01,710 --> 00:12:03,720 que usted puede utilizar con este hardware haría 256 00:12:03,720 --> 00:12:08,900 ser para jugar este clip corto que utilizan para burlarse de la gente 257 00:12:08,900 --> 00:12:10,500 que ahora estamos viviendo en el futuro. 258 00:12:10,500 --> 00:12:13,494 259 00:12:13,494 --> 00:12:15,490 >> [REPRODUCCIÓN DE MÚSICA] 260 00:12:15,490 --> 00:13:33,410 261 00:13:33,410 --> 00:13:37,109 >> DAVID MALAN: Así que en tan sólo unas semanas, usted también puede ser que fresco en la feria CS50. 262 00:13:37,109 --> 00:13:39,150 Otro dispositivo que nos tienen un montón de que somos 263 00:13:39,150 --> 00:13:42,090 feliz de prestar para proyectos se llama un controlador de movimiento. 264 00:13:42,090 --> 00:13:45,030 Se trata de un pequeño dispositivo USB se conecta a un equipo que 265 00:13:45,030 --> 00:13:47,520 le permite interactuar con su computadora portátil, Mac o PC, 266 00:13:47,520 --> 00:13:51,570 como si usted tenía como una Xbox Kinect y en realidad hacer movimientos físicos mucho 267 00:13:51,570 --> 00:13:54,509 como vemos en este visión del futuro. 268 00:13:54,509 --> 00:13:56,505 >> [REPRODUCCIÓN DE MÚSICA] 269 00:13:56,505 --> 00:15:03,380 270 00:15:03,380 --> 00:15:06,260 >> DAVID MALAN: Así que incluso si usted tiene ni idea de cómo algo así 271 00:15:06,260 --> 00:15:10,050 posiblemente podría ser inventado o trabajo a nivel de hardware, no importa. 272 00:15:10,050 --> 00:15:13,520 Incluso después de sólo unos meses de CS50, y una comprensión de la programación 273 00:15:13,520 --> 00:15:19,460 más en general, y la programación web más Recientemente, y luego también las API, y HTTP, 274 00:15:19,460 --> 00:15:21,830 usted tendrá acceso a través de API de software si 275 00:15:21,830 --> 00:15:24,680 no quieren pedir prestado uno de estos dispositivos que hablar con él 276 00:15:24,680 --> 00:15:27,180 y no tener que preocuparse de la implementación subyacente 277 00:15:27,180 --> 00:15:30,220 detalles, que es completamente en consonancia con esta noción de estratificación 278 00:15:30,220 --> 00:15:33,610 una abstracción que hemos visto a lo largo del semestre. 279 00:15:33,610 --> 00:15:37,990 >> Así también el fin de semana, vimos un par de piezas de noticias. 280 00:15:37,990 --> 00:15:40,640 Vaya en primer lugar, ir a seminarios si le gustaría aprender algo 281 00:15:40,640 --> 00:15:42,160 más en cualquier número de temas. 282 00:15:42,160 --> 00:15:43,340 Ver la URL allí. 283 00:15:43,340 --> 00:15:45,890 Y éste fue enviado a yo por Chang, que ya sabes, 284 00:15:45,890 --> 00:15:47,850 que está imprimiendo a nuestro ejército de elefantes. 285 00:15:47,850 --> 00:15:49,910 Y era un titular como sigue. 286 00:15:49,910 --> 00:15:51,280 Estoy aterrorizada de mi nuevo televisor. 287 00:15:51,280 --> 00:15:54,301 ¿Por qué tengo miedo de convertir este cosa en la que usted y sería demasiado. 288 00:15:54,301 --> 00:15:56,050 Así que ahora estamos en el apuntar en el semestre, 289 00:15:56,050 --> 00:15:58,860 también, donde incluso si usted tiene la menor de entendimiento 290 00:15:58,860 --> 00:16:02,620 de cómo funciona la web, y HTTP, y de seguridad, este tipo de cosas 291 00:16:02,620 --> 00:16:03,980 debe comenzar a captar su atención. 292 00:16:03,980 --> 00:16:07,450 Pero también, vas a entender si estas cosas son o no son 293 00:16:07,450 --> 00:16:08,430 las amenazas reales. 294 00:16:08,430 --> 00:16:10,940 >> Así que tomé algunos extractos de este artículo aquí. 295 00:16:10,940 --> 00:16:12,540 Y la historia es la siguiente. 296 00:16:12,540 --> 00:16:14,300 Ahora soy el dueño de una nueva televisión inteligente, que 297 00:16:14,300 --> 00:16:18,470 promete entregar en streaming contenidos multimedia, juegos, aplicaciones, 298 00:16:18,470 --> 00:16:21,450 medios de comunicación social y de Internet navegación, ah y la televisión también. 299 00:16:21,450 --> 00:16:24,410 El único problema es que estoy ahora miedo de usarlo, dice el autor. 300 00:16:24,410 --> 00:16:29,592 Usted sería, también, si usted lee a través de el 46 página política de privacidad para su televisor. 301 00:16:29,592 --> 00:16:31,800 La cantidad de datos de esta recoge cosa es asombrosa. 302 00:16:31,800 --> 00:16:35,710 Registra dónde, cuándo, cómo, y por cuánto tiempo se utiliza el televisor. 303 00:16:35,710 --> 00:16:38,190 En él se establecen las cookies de rastreo, como hemos discutido, 304 00:16:38,190 --> 00:16:40,560 y faros diseñados para detectar cuando se tiene 305 00:16:40,560 --> 00:16:43,185 contenido particular visto o un mensaje de correo electrónico en particular 306 00:16:43,185 --> 00:16:45,230 si desea consultar el correo electrónico en su televisor. 307 00:16:45,230 --> 00:16:48,430 Registra las aplicaciones que utilizar, los sitios web que visita, 308 00:16:48,430 --> 00:16:52,280 y la forma de interactuar con el contenido, haciendo todo esto a través de su televisión inteligente. 309 00:16:52,280 --> 00:16:55,470 También, yet-- espeluznante esa es mi addition-- 310 00:16:55,470 --> 00:16:58,140 tiene una cámara incorporada con reconocimiento facial. 311 00:16:58,140 --> 00:17:01,010 >> El propósito es proporcionar control de gestos para la TV 312 00:17:01,010 --> 00:17:05,490 y le permiten iniciar una sesión en cuenta utilizando su rostro personalizado. 313 00:17:05,490 --> 00:17:08,940 Por el lado positivo, las imágenes son guardado en la televisión en vez de subida 314 00:17:08,940 --> 00:17:09,940 a un servidor de la empresa. 315 00:17:09,940 --> 00:17:12,520 En el lado negativo, el Internet conexión hace que toda la TV 316 00:17:12,520 --> 00:17:14,811 vulnerables a los hackers que han demostrado la capacidad 317 00:17:14,811 --> 00:17:16,700 tomar el control completo de la máquina. 318 00:17:16,700 --> 00:17:20,880 >> Más preocupante, como si eso no fuera lo suficientemente inteligente, es el micrófono. 319 00:17:20,880 --> 00:17:23,599 El televisor cuenta con una voz función de reconocimiento 320 00:17:23,599 --> 00:17:26,859 que permite a los espectadores a controlar la pantalla con los comandos de voz. 321 00:17:26,859 --> 00:17:30,290 Pero el servicio viene con una advertencia en lugar de mal agüero. 322 00:17:30,290 --> 00:17:33,030 Tenga en cuenta que si sus palabras habladas incluyen 323 00:17:33,030 --> 00:17:36,210 personal u otro sensible información, que la información 324 00:17:36,210 --> 00:17:40,310 será uno de los datos capturados y transmitida a un tercero. 325 00:17:40,310 --> 00:17:40,870 Consiguió que? 326 00:17:40,870 --> 00:17:45,860 No digas personal o confidencial cosas en frente de su televisor. 327 00:17:45,860 --> 00:17:47,280 >> Así que esto es en realidad de verdad. 328 00:17:47,280 --> 00:17:50,530 Y es difícil no ver si ir a Best Buy o similar para televisores 329 00:17:50,530 --> 00:17:51,030 en estos días. 330 00:17:51,030 --> 00:17:52,540 Todos son inteligentes, de alguna manera. 331 00:17:52,540 --> 00:17:54,740 Y que van a obtener más inteligente y más espeluznante. 332 00:17:54,740 --> 00:17:57,490 Y están simplemente la recopilación de datos de manera que las que hemos hablado 333 00:17:57,490 --> 00:18:01,840 y luego subirlo a través de HTTP o algún otro protocolo a algún servidor. 334 00:18:01,840 --> 00:18:05,720 >> Así que este era de un artículo de la diversión en este sitio web en línea 335 00:18:05,720 --> 00:18:08,940 aquí, que hablaban de un particular, error o código equivocado 336 00:18:08,940 --> 00:18:11,340 que en realidad podemos atar en el debate de la semana pasada. 337 00:18:11,340 --> 00:18:15,730 Así que este título era como sigue, la historia va aquí, 338 00:18:15,730 --> 00:18:18,720 Josh Breckman trabajó para una empresa que obtuvo un contrato 339 00:18:18,720 --> 00:18:22,390 para desarrollar una gestión de contenidos sistema, o CMS como se les llama, 340 00:18:22,390 --> 00:18:24,380 para un sitio web del gobierno bastante grande. 341 00:18:24,380 --> 00:18:27,300 Gran parte del proyecto consistió en el desarrollo de un sistema de gestión de contenidos 342 00:18:27,300 --> 00:18:29,840 para que los empleados serían capaz de construir y mantener 343 00:18:29,840 --> 00:18:31,877 el siempre cambiante contenido para su sitio. 344 00:18:31,877 --> 00:18:34,210 Las cosas fueron bastante bien para pocos días después de ir en vivo. 345 00:18:34,210 --> 00:18:37,020 Pero en el sexto día, las cosas no iban tan bien. 346 00:18:37,020 --> 00:18:39,500 Todo el contenido de la sitio web se había desvanecido por completo. 347 00:18:39,500 --> 00:18:42,950 Y todas las páginas llevaron a la omisión, por favor entrar en la página web de contenido. 348 00:18:42,950 --> 00:18:43,810 ¡Vaya. 349 00:18:43,810 --> 00:18:46,080 Josh fue llamado para investigar y se dio cuenta 350 00:18:46,080 --> 00:18:49,390 que uno particularmente problemático dirección IP externa tuvo 351 00:18:49,390 --> 00:18:53,380 entrado y eliminado todos el contenido en el sistema. 352 00:18:53,380 --> 00:18:56,290 >> La dirección IP no pertenecía a algún extranjero doblada pirata informático 353 00:18:56,290 --> 00:18:58,340 en destruir útil la información del gobierno. 354 00:18:58,340 --> 00:19:05,190 Se resolvió googlebot.com, Muy propia web de rastreo de araña de Google. 355 00:19:05,190 --> 00:19:06,010 ¡Vaya. 356 00:19:06,010 --> 00:19:09,150 Después de un poco de investigación y codificación alrededor para encontrar una copia de seguridad no corrupta, 357 00:19:09,150 --> 00:19:10,180 Josh encontró el problema. 358 00:19:10,180 --> 00:19:12,700 >> Un usuario había copiado y pegado algo de contenido de un 359 00:19:12,700 --> 00:19:15,670 página a otra, incluyendo una Modificar hipervínculo 360 00:19:15,670 --> 00:19:17,577 para editar el contenido de la página. 361 00:19:17,577 --> 00:19:20,160 Normalmente esto no sería una problema ya que un usuario externo haría 362 00:19:20,160 --> 00:19:24,320 que tenga que introducir un nombre y una contraseña, pero el sistema de autenticación de CMS, 363 00:19:24,320 --> 00:19:27,520 el sistema de inicio de sesión, no tener en cuenta 364 00:19:27,520 --> 00:19:30,980 piratería informática sofisticada técnicas de araña de Google. 365 00:19:30,980 --> 00:19:31,700 ¡Vaya. 366 00:19:31,700 --> 00:19:33,610 >> Como resultado, Google Araña no utiliza 367 00:19:33,610 --> 00:19:36,950 cookies, que significa que puede pasar por alto fácilmente un cheque por la 368 00:19:36,950 --> 00:19:39,840 se registra en el conjunto de la galleta es falsa. 369 00:19:39,840 --> 00:19:42,620 Asimismo, no presta atención a JavaScript, lo que haría normalmente 370 00:19:42,620 --> 00:19:45,170 impulsar y redirigir a los usuarios que no se ha autentificado. 371 00:19:45,170 --> 00:19:48,610 Sin embargo, sí sigue cada hipervínculo en todas las páginas que encuentra, 372 00:19:48,610 --> 00:19:51,700 incluyendo aquellos con Eliminar página en el título. 373 00:19:51,700 --> 00:19:52,650 ¡Vaya. 374 00:19:52,650 --> 00:19:56,070 >> Entonces, ¿qué significa esto en la más términos técnicos, pero bastante accesible? 375 00:19:56,070 --> 00:19:58,340 Sólo significa que a través de su página web, 376 00:19:58,340 --> 00:20:02,287 tenían direcciones URL no a diferencia de éste que usted puede ser que vea en un problema establecido siete. 377 00:20:02,287 --> 00:20:04,620 Recordemos en problema establece siete o sabe de problemas en siete 378 00:20:04,620 --> 00:20:06,411 que supone un reto, entre otras cosas, 379 00:20:06,411 --> 00:20:08,570 para vender acciones en nombre de los usuarios. 380 00:20:08,570 --> 00:20:14,010 Pero la aplicación de esta función por medio de obtener a través de hipervínculos en su usuario 381 00:20:14,010 --> 00:20:16,880 interfaz, probablemente no la idea más inteligente 382 00:20:16,880 --> 00:20:20,300 porque si su sitio es de alguna manera accesibles ya sea por un humano 383 00:20:20,300 --> 00:20:23,577 que está haciendo clic alrededor o comprar un bot como Google o de una araña 384 00:20:23,577 --> 00:20:26,160 como se les llama eso es sólo rastreo de la web tratando de índice 385 00:20:26,160 --> 00:20:29,060 la web como un motor de búsqueda, que podían muy fácilmente 386 00:20:29,060 --> 00:20:31,340 golpear a través de conseguir este tipo de URL. 387 00:20:31,340 --> 00:20:33,770 Y eso es funcionalmente equivalente a, en este caso, 388 00:20:33,770 --> 00:20:37,000 la venta de todas las acciones de Google. 389 00:20:37,000 --> 00:20:40,030 >> Ahora, francamente, es completamente asnal que el CMS 390 00:20:40,030 --> 00:20:43,240 usados ​​JavaScript y cookies para implementar su sistema de inicio de sesión 391 00:20:43,240 --> 00:20:47,100 y no hacer que el lado del servidor, como ustedes existen y que en PSet 7-- 392 00:20:47,100 --> 00:20:49,940 hay un login.php file-- siempre, siempre, 393 00:20:49,940 --> 00:20:52,789 siempre la seguridad debe ser hecho en el lado del servidor, 394 00:20:52,789 --> 00:20:56,080 no en el lado del cliente, ya que, como este artículo sugiere y es posible que usted mismo 395 00:20:56,080 --> 00:20:59,600 ver en algún momento, es trivial para un usuario, bueno o malo, 396 00:20:59,600 --> 00:21:02,860 que sólo tiene que desactivar JavaScript por no hablar de las cookies. 397 00:21:02,860 --> 00:21:06,020 Así que ese es su WTF diario. 398 00:21:06,020 --> 00:21:07,970 >> Hay uno más, lo que es sólo un poco de miedo, 399 00:21:07,970 --> 00:21:11,360 así que voy a mencionar que si sólo como una lección de vida. 400 00:21:11,360 --> 00:21:14,850 Cada vez que se utiliza una aplicación llamado como Snapchat o similar 401 00:21:14,850 --> 00:21:19,380 que dice que estas fotos sólo duran cinco segundos, diez segundos, o lo que sea. 402 00:21:19,380 --> 00:21:21,680 Son efímeros Eso es absolutamente no es el caso. 403 00:21:21,680 --> 00:21:25,670 Al igual que no hay forma, digitalmente, para poner en práctica alguna forma de vídeo, 404 00:21:25,670 --> 00:21:30,150 o imagen, o textual compartir dicha que un receptor en el otro extremo 405 00:21:30,150 --> 00:21:31,660 no puede de alguna manera guardar los datos. 406 00:21:31,660 --> 00:21:34,300 >> En la forma más ingenua, alguien podría tomar su teléfono. 407 00:21:34,300 --> 00:21:36,850 Y tienen una segunda ventana 10 mientras mira a algún complemento 408 00:21:36,850 --> 00:21:39,410 que acaba de tomar algún otro teléfono y fotografiarlo, obviamente. 409 00:21:39,410 --> 00:21:41,660 Así que usted puede preservar algo digitalmente de esa manera. 410 00:21:41,660 --> 00:21:44,620 Algunos de ustedes saben cómo tomar capturas de pantalla en su teléfono. 411 00:21:44,620 --> 00:21:49,290 De hecho, si usted no sabe esto, darse cuenta de que al menos Snapchat, 412 00:21:49,290 --> 00:21:51,040 y creo que otra aplicaciones de estos días, 413 00:21:51,040 --> 00:21:53,720 al menos si el decir destinatario tiene en realidad 414 00:21:53,720 --> 00:21:55,310 tomado una captura de pantalla de la imagen. 415 00:21:55,310 --> 00:22:00,870 >> Pero peor aún, este fue el snappening, como alguien acuñado recientemente, 416 00:22:00,870 --> 00:22:04,680 donde algunos 100000 broches de presión había sido puesto en libertad 417 00:22:04,680 --> 00:22:09,310 en lo que se llama un archivo torrent en varios sitios web en última instancia. 418 00:22:09,310 --> 00:22:12,000 Y estos contenían un montón de mensajes privados y mensajes. 419 00:22:12,000 --> 00:22:15,210 Resulta la mayoría de ellos benigna, por lo que no es lo que cabría esperar. 420 00:22:15,210 --> 00:22:17,580 Pero debido a que la gente tenía usado un sitio web de terceros, 421 00:22:17,580 --> 00:22:20,270 entrando con su Snapchat nombre de usuario y contraseña y, a continuación 422 00:22:20,270 --> 00:22:23,470 guardar todos sus broches de presión en este sitio web de terceros. 423 00:22:23,470 --> 00:22:26,130 Y fue ese tercero sitio web que fue hackeado, 424 00:22:26,130 --> 00:22:30,710 que sólo significaba que alguien descubrió cómo para obtener toda 100.000 más de esas imágenes 425 00:22:30,710 --> 00:22:33,822 en su propio disco duro para compartir subsiguiente. 426 00:22:33,822 --> 00:22:36,030 Francamente, aquí también, es una especie de asnal que Snapchat 427 00:22:36,030 --> 00:22:39,360 se implementa de tal manera que un tercero puede clasificar de intercepción 428 00:22:39,360 --> 00:22:43,310 los datos y que no está ligada a su propia aplicación que se ejecuta en el teléfono. 429 00:22:43,310 --> 00:22:46,947 Pero aquí, también, darse cuenta de que estos las cosas no le deben coger por sorpresa, 430 00:22:46,947 --> 00:22:49,030 o por lo menos, debe haber ser una lección de vida aquí. 431 00:22:49,030 --> 00:22:52,220 Si desea el técnico detalles, vaya a esa URL no 432 00:22:52,220 --> 00:22:53,570 eso es en las diapositivas de hoy. 433 00:22:53,570 --> 00:23:00,960 Muy bien, alguna pregunta sobre lecciones de la vida de hoy en día en CS? 434 00:23:00,960 --> 00:23:02,710 A su vez que fuera. 435 00:23:02,710 --> 00:23:04,970 Cualquier cosa en absoluto? 436 00:23:04,970 --> 00:23:06,301 Cualquier cosa en absoluto? 437 00:23:06,301 --> 00:23:09,050 Tengo una gran cantidad de personas que se registran su Snapchat o algo ahora. 438 00:23:09,050 --> 00:23:11,690 >> Muy bien, por lo que SQL, Structured Query Language. 439 00:23:11,690 --> 00:23:12,509 Vamos a envolver esto. 440 00:23:12,509 --> 00:23:14,300 Y también, aunque sólo estamos rascando 441 00:23:14,300 --> 00:23:16,310 la superficie de este idioma, le daremos 442 00:23:16,310 --> 00:23:18,930 suficiente de la lengua en forma de PSet 7 443 00:23:18,930 --> 00:23:22,140 para que pueda hacer frente a algunos funcionalidad bastante común. 444 00:23:22,140 --> 00:23:24,912 Pero se dan cuenta que hay un par cosas que no requerimos de ustedes, 445 00:23:24,912 --> 00:23:27,120 pero que van a ser importante venir proyectos finales 446 00:23:27,120 --> 00:23:30,760 y sin duda venir haciendo real sitios web con usuarios reales 447 00:23:30,760 --> 00:23:32,040 Es esta decisión de diseño. 448 00:23:32,040 --> 00:23:34,460 >> Resulta que en una base de datos MySQL, 449 00:23:34,460 --> 00:23:37,460 tener racimos de opciones como los tipos de datos para las columnas 450 00:23:37,460 --> 00:23:41,670 y otras cosas, pero también tienen la elección de una llamada de almacenamiento 451 00:23:41,670 --> 00:23:44,570 motor para todos sus datos, el tipo de sistema de archivos, 452 00:23:44,570 --> 00:23:46,700 si está familiarizado, para todos sus datos. 453 00:23:46,700 --> 00:23:48,830 ¿En qué formato se lo almacena en última instancia, en? 454 00:23:48,830 --> 00:23:53,300 Y la más común, tal vez, ha sido MyISAM y InnoDB, los términos técnicos 455 00:23:53,300 --> 00:23:56,060 que vamos a preocupamos sólo en la medida en que uno tiene 456 00:23:56,060 --> 00:23:58,500 y uno no tiene la siguiente función. 457 00:23:58,500 --> 00:24:00,390 >> Supongamos que usted tiene una pequeña nevera dormitorio. 458 00:24:00,390 --> 00:24:03,030 Y supongamos que usted y su compañero de cuarto, que comparten esta nevera, 459 00:24:03,030 --> 00:24:04,682 son muy aficionado a la leche por ejemplo. 460 00:24:04,682 --> 00:24:07,140 Y este es, de hecho, la forma en la historia fue contada a mí camino de regreso 461 00:24:07,140 --> 00:24:10,890 en el día en que tomé un curso llamado CS 161 sistemas operativos, lo que 462 00:24:10,890 --> 00:24:12,580 explora de manera similar este tema. 463 00:24:12,580 --> 00:24:13,760 Así que tienes esta nevera. 464 00:24:13,760 --> 00:24:14,630 Estás fuera de la leche. 465 00:24:14,630 --> 00:24:17,000 Y llegas a casa, su compañero de cuarto de aún en clase o lo que sea, 466 00:24:17,000 --> 00:24:19,208 y decide que voy a salir y conseguir un poco de leche. 467 00:24:19,208 --> 00:24:22,630 Así se cierra la nevera, el bloqueo la habitación de la residencia, ir al otro lado de la calle 468 00:24:22,630 --> 00:24:25,330 a CVS o donde sea, y obtener en la fila para comprar un poco de leche. 469 00:24:25,330 --> 00:24:28,960 >> Mientras tanto, su compañero de cuarto llega a casa de la clase, se mete en la habitación de la residencia, 470 00:24:28,960 --> 00:24:31,802 abre la nevera, también se da cuenta ooph, estamos fuera de la leche. 471 00:24:31,802 --> 00:24:33,760 Así que él o ella se cierra la nevera y luego sucede 472 00:24:33,760 --> 00:24:35,610 para ir a la otra CVS, que pasa a ser 473 00:24:35,610 --> 00:24:38,470 a una cuadra de distancia de los otros CVS en la plaza, y se pone en línea 474 00:24:38,470 --> 00:24:40,230 Para llegar un poco de leche. 475 00:24:40,230 --> 00:24:42,524 Ahora, por supuesto, unos pocos minutos más tarde, a los dos vuelvas, 476 00:24:42,524 --> 00:24:44,690 y lo peor de todo es posible resultados ha sucedido. 477 00:24:44,690 --> 00:24:45,792 Ambos tienen leche. 478 00:24:45,792 --> 00:24:47,500 Y no lo hace realmente como la leche que mucho. 479 00:24:47,500 --> 00:24:49,625 Así que uno de ellos es justo va a agriar en algún momento. 480 00:24:49,625 --> 00:24:55,941 Así que ahora usted tiene una cantidad excesiva de leche en la nevera todo porque ¿por qué? 481 00:24:55,941 --> 00:24:57,072 >> [Inaudible] 482 00:24:57,072 --> 00:24:59,780 DAVID MALAN: Sí, no lo hiciste comunicarse de alguna manera uno con el otro 483 00:24:59,780 --> 00:25:00,904 que usted estaba recibiendo la leche. 484 00:25:00,904 --> 00:25:04,320 Así que en el más simple de maneras en el mundo humano, 485 00:25:04,320 --> 00:25:08,390 ¿cómo podría evitar este tonto escenario suceda tal 486 00:25:08,390 --> 00:25:09,750 que sólo termina con uno. 487 00:25:09,750 --> 00:25:10,840 Texto ellos, sí bueno. 488 00:25:10,840 --> 00:25:12,877 Pero, ¿cómo si no? 489 00:25:12,877 --> 00:25:13,460 Notas Post-it. 490 00:25:13,460 --> 00:25:14,626 DAVID MALAN: Una nota de post-it. 491 00:25:14,626 --> 00:25:17,150 Cualquier forma de comunicación que le dice a su compañero de cuarto 492 00:25:17,150 --> 00:25:18,670 no entrar en la nevera para la leche. 493 00:25:18,670 --> 00:25:20,440 Voy a ir a repoblar por mi cuenta. 494 00:25:20,440 --> 00:25:22,770 Así que de alguna manera necesita para bloquear este recurso. 495 00:25:22,770 --> 00:25:27,180 Así que podemos hacer esto-- podemos tipo de arruinar la historia y convertirse en una historia de CS 496 00:25:27,180 --> 00:25:30,360 por lo que pensar en esto como simplemente como un variable, que está almacenando un cierto valor. 497 00:25:30,360 --> 00:25:32,570 Y en este momento, la valor de la leche es cero, 498 00:25:32,570 --> 00:25:35,410 que usted no desea que su compañero de cuarto para inspeccionar esa variable 499 00:25:35,410 --> 00:25:38,730 y luego tomar una decisión de él o ella basándose en el estado de esa variable 500 00:25:38,730 --> 00:25:42,430 si usted está en el proceso de cambiar el estado de esa variable. 501 00:25:42,430 --> 00:25:46,140 >> Así que una de las líneas de SQL que darle en PSet especificación 7 502 00:25:46,140 --> 00:25:47,310 es este de aquí. 503 00:25:47,310 --> 00:25:49,740 Y no gastamos una enorme cantidad de tiempo hablando de ello. 504 00:25:49,740 --> 00:25:55,100 Pero resulta que, si usted está tratando para comprar algunas acciones en las finanzas CS50 505 00:25:55,100 --> 00:25:58,000 que ya tiene algunas acciones de, usted 506 00:25:58,000 --> 00:26:01,750 quiero ser capaz de hacer un número de las cosas al instante juntos. 507 00:26:01,750 --> 00:26:04,360 ¿Quieres ser capaz de efectivamente, en un alto nivel, 508 00:26:04,360 --> 00:26:06,700 comprobar bien, si quiero para comprar más acciones de gratuito, 509 00:26:06,700 --> 00:26:08,780 la acción de penique que hablar en la especificación, 510 00:26:08,780 --> 00:26:10,660 Quiero primer cheque el número de acciones que tengo. 511 00:26:10,660 --> 00:26:11,810 Y supongo que es de cinco. 512 00:26:11,810 --> 00:26:14,600 Y supongo que quiero comprar 10 más, en última instancia, 513 00:26:14,600 --> 00:26:17,069 quiero tener 15 acciones. 514 00:26:17,069 --> 00:26:18,360 Así que tengo que hacer dos preguntas. 515 00:26:18,360 --> 00:26:20,230 ¿Cuál es el estado de la variable? 516 00:26:20,230 --> 00:26:21,470 ¿Cuál es el estado de la fila? 517 00:26:21,470 --> 00:26:22,970 ¿Cuántas acciones no tengo actualmente? 518 00:26:22,970 --> 00:26:24,636 Entonces usted quiere seguir adelante y actualizarlo. 519 00:26:24,636 --> 00:26:27,720 Así que ese es el análogo a la leche en que compruebe la fila, 520 00:26:27,720 --> 00:26:30,730 y entonces usted quiere actualizarlo porque si usted quiere comprar 10 acciones, 521 00:26:30,730 --> 00:26:32,521 usted no desea cambiar la fila a 10, que 522 00:26:32,521 --> 00:26:35,300 querer cambiarlo a 5 más 10 o, por supuesto, 15. 523 00:26:35,300 --> 00:26:40,030 >> Esta línea de código garantiza que esas dos ideas conceptuales 524 00:26:40,030 --> 00:26:42,810 ocurrir juntos o no en absoluto. 525 00:26:42,810 --> 00:26:46,920 Nadie, incluyendo a algún otro usuario que ha iniciado sesión en el mismo sitio web, 526 00:26:46,920 --> 00:26:49,900 de alguna manera se puede interrumpir la comprobación de la fila 527 00:26:49,900 --> 00:26:52,960 y la actualización de la fila, la seleccionar y la actualización si se quiere. 528 00:26:52,960 --> 00:26:57,360 Y la sintaxis no es muy obvio, pero esta línea, siempre se es, 529 00:26:57,360 --> 00:27:01,150 asegura que estas dos operaciones compruebe la variable o compruebe la fila 530 00:27:01,150 --> 00:27:04,660 y actualizar la fila suceda atómicamente. 531 00:27:04,660 --> 00:27:06,849 >> Oh, aquí vamos de nuevo. 532 00:27:06,849 --> 00:27:07,890 Mensaje de texto en mi teléfono. 533 00:27:07,890 --> 00:27:09,954 Así que vamos a hacer de este un poco más concreto. 534 00:27:09,954 --> 00:27:12,120 Supongamos que usted no es la aplicación de un refrigerador, 535 00:27:12,120 --> 00:27:16,400 y no se está implementando PSet 7, pero un banco real, 536 00:27:16,400 --> 00:27:20,000 o un cajero automático, un cajero automático Máquina, por el que usted de alguna manera 537 00:27:20,000 --> 00:27:22,960 quiero ser capaz de empoderar los usuarios transferir dinero 538 00:27:22,960 --> 00:27:24,500 de una cuenta a otra. 539 00:27:24,500 --> 00:27:25,100 Aceptar, espera. 540 00:27:25,100 --> 00:27:26,683 Voy a silenciar esto ahora, gracias. 541 00:27:26,683 --> 00:27:30,450 Así que queremos mover dinero de un número de cuenta 542 00:27:30,450 --> 00:27:33,600 en una cuenta diferente número, específicamente $ 100. 543 00:27:33,600 --> 00:27:37,690 Así que esto es una especie de una arbitraria ejemplo, por el que usted, el cajero automático, 544 00:27:37,690 --> 00:27:41,060 puede ser que desee para ejecutar dos SQL consultas, restar de una cuenta, 545 00:27:41,060 --> 00:27:42,430 y añadir a la otra cuenta. 546 00:27:42,430 --> 00:27:46,766 Pero usted quiere asegurarse de que éstos dos líneas tanto ocurren o no en absoluto. 547 00:27:46,766 --> 00:27:48,640 Usted no quiere que algo siendo interrumpido. 548 00:27:48,640 --> 00:27:51,440 Usted no hace algo de malo de la película inteligente de alguna manera que se coloca en el Bank of America 549 00:27:51,440 --> 00:27:53,270 con dos cajeros automáticos delante de él y de alguna manera 550 00:27:53,270 --> 00:27:55,270 especie de escribir en el comandos al mismo tiempo, 551 00:27:55,270 --> 00:28:01,230 con suerte tratando de deducir $ 200 en lugar de $ 100 y sólo tiene $ 100 acreditados. 552 00:28:01,230 --> 00:28:04,450 En pocas palabras, usted quiere que esto comportarse exactamente como usted espera. 553 00:28:04,450 --> 00:28:06,540 >> Y la forma de hacer esta base de datos en SQL es 554 00:28:06,540 --> 00:28:09,350 que se coloca en lo que es llamado una transacción. 555 00:28:09,350 --> 00:28:14,290 Literalmente en SQL, puede llamar CS50 de función de consulta con cita inicio fin de la cita 556 00:28:14,290 --> 00:28:15,370 transacción. 557 00:28:15,370 --> 00:28:18,640 A continuación, puede ejecutar cualquier número de consultas SQL subsiguientes, 558 00:28:18,640 --> 00:28:20,870 pero ninguno de ellos toma efectuar sobre la base de datos 559 00:28:20,870 --> 00:28:25,880 hasta que llame consulta entre comillas comprometerse, si de nuevo usando PHP. 560 00:28:25,880 --> 00:28:29,810 Y de esta manera, usted puede asegurarse de que incluso si usted tiene 1.000 usuarios de todo 561 00:28:29,810 --> 00:28:32,080 golpear a su base de datos al mismo tiempo, SQL 562 00:28:32,080 --> 00:28:34,540 le prometo que estos dos consultas serán 563 00:28:34,540 --> 00:28:36,740 implementado una tras otra. 564 00:28:36,740 --> 00:28:40,330 Así que usted no termina con el exceso de leche o la cantidad equivocada, en última instancia, 565 00:28:40,330 --> 00:28:40,830 de dinero. 566 00:28:40,830 --> 00:28:43,110 >> Así que tenga esto en cuenta, no tanto por PSet 7 567 00:28:43,110 --> 00:28:45,250 pero para proyectos fin de carrera si eres realmente 568 00:28:45,250 --> 00:28:49,690 tratando de mover los datos en torno a a través de las tablas como puede ser que aquí. 569 00:28:49,690 --> 00:28:53,980 Pero quizás aún más simple y más obvio para entender con un ejemplo 570 00:28:53,980 --> 00:28:54,860 es este de aquí. 571 00:28:54,860 --> 00:28:57,760 Y alguien nos envía por correo electrónico acerca de esto el otro día 572 00:28:57,760 --> 00:28:59,600 cuando vio algo similar en línea. 573 00:28:59,600 --> 00:29:03,480 >> Así que, que yo sepa, el sistema pin no es vulnerable a este ataque. 574 00:29:03,480 --> 00:29:06,637 Y no tengo ni idea de si incluso usos la base de datos de SQL debajo del capó. 575 00:29:06,637 --> 00:29:08,470 Pero vamos a usar para En aras de la discusión. 576 00:29:08,470 --> 00:29:10,178 Aquí está la pantalla que Gente de Harvard tienden 577 00:29:10,178 --> 00:29:13,620 para ver al iniciar sesión con su Número de identificación de Harvard y su PIN. 578 00:29:13,620 --> 00:29:19,020 Y supongamos que el sistema de pasador fuera implementado en PHP y MySQL con un 579 00:29:19,020 --> 00:29:22,000 base de datos, el código que alguien Hace años que podría haber escrito 580 00:29:22,000 --> 00:29:23,270 podría tener este aspecto. 581 00:29:23,270 --> 00:29:25,230 En primer lugar, declarar una llamado nombre de usuario variable. 582 00:29:25,230 --> 00:29:27,560 Y así conseguir que a partir de la superglobal POST. 583 00:29:27,560 --> 00:29:30,140 A continuación, obtener otra variable llamado contraseña y hacer lo mismo. 584 00:29:30,140 --> 00:29:33,080 Y luego simplemente ejecutar esta larga consulta aquí, 585 00:29:33,080 --> 00:29:36,690 seleccione la estrella de los usuarios DONDE nombre de usuario es igual a tal y tal 586 00:29:36,690 --> 00:29:38,510 y la contraseña es igual a tal y tal. 587 00:29:38,510 --> 00:29:40,660 >> Observe que el rizado apoyos que he usado aquí 588 00:29:40,660 --> 00:29:42,880 sólo significa que PHP, vaya adelante y sustituto 589 00:29:42,880 --> 00:29:45,400 el valor de los dos las variables justo ahí. 590 00:29:45,400 --> 00:29:50,090 No son estrictamente necesarios, pero que tienden a evitar errores de sintaxis sutiles. 591 00:29:50,090 --> 00:29:53,650 Así que esto parece completamente correcta a primera vista. 592 00:29:53,650 --> 00:29:54,240 Y lo es. 593 00:29:54,240 --> 00:29:56,680 Se podría aplicar el sistema de pasador de esta manera. 594 00:29:56,680 --> 00:30:00,460 >> Pero supongamos que un super estudiante inteligente y malicioso 595 00:30:00,460 --> 00:30:03,020 de entrada esto como su PIN. 596 00:30:03,020 --> 00:30:05,550 Así que me he quitado la bala signos aquí en la maqueta, 597 00:30:05,550 --> 00:30:08,760 y yo he hecho revelé lo que él o ella podría ser escribir. 598 00:30:08,760 --> 00:30:10,350 Y es un poco extraño. 599 00:30:10,350 --> 00:30:13,850 Pero lo que salta a la vista en potencialmente preocupante acerca de la entrada del usuario, 600 00:30:13,850 --> 00:30:16,450 incluso si usted no tiene idea de lo que un ataque de inyección SQL significa. 601 00:30:16,450 --> 00:30:20,300 ¿Por qué esta mirada un poco a pescado? 602 00:30:20,300 --> 00:30:21,050 Qué es eso? 603 00:30:21,050 --> 00:30:21,550 [Inaudible] 604 00:30:21,550 --> 00:30:24,260 DAVID MALAN: El o es un poco sospechoso. 605 00:30:24,260 --> 00:30:26,310 De hecho, esa es una palabra clave de SQL. 606 00:30:26,310 --> 00:30:28,105 Así que no augura nada bueno. 607 00:30:28,105 --> 00:30:29,980 El hecho de que hay todas estas citas individuales 608 00:30:29,980 --> 00:30:32,646 allí-- de hecho, uno de los más fáciles maneras de romper algunas bases de datos 609 00:30:32,646 --> 00:30:35,880 es escribiendo un nombre como O'Reilly que tiene un apóstrofe en ella 610 00:30:35,880 --> 00:30:38,600 porque si el ser humano que escribió el código detrás de las escenas 611 00:30:38,600 --> 00:30:41,570 no tiene en cuenta que hay podría ser comillas simples en un usuario de 612 00:30:41,570 --> 00:30:45,060 de entrada, y él o ella está utilizando comillas simples en su código, 613 00:30:45,060 --> 00:30:46,040 las cosas malas pueden suceder. 614 00:30:46,040 --> 00:30:47,870 >> De hecho, peor aún, considere esto. 615 00:30:47,870 --> 00:30:50,600 Si esto fue de nuevo el código que alguien en Harvard años 616 00:30:50,600 --> 00:30:53,100 Hace escribió para el pasador sistema, observe lo que está 617 00:30:53,100 --> 00:30:56,220 a punto de ser sustituido por nombre de usuario y contraseña 618 00:30:56,220 --> 00:30:59,780 si el usuario escribe en el nuevo skroob como su nombre de usuario 619 00:30:59,780 --> 00:31:03,960 y después de uno, dos, tres, cuatro, cinco, cita o entre comillas uno es igual a 620 00:31:03,960 --> 00:31:04,660 citar a uno. 621 00:31:04,660 --> 00:31:07,220 Y note lo que es clave aquí está el usuario no ha 622 00:31:07,220 --> 00:31:09,900 comenzado su contraseña o su pin con una cita. 623 00:31:09,900 --> 00:31:12,610 Y no han terminado se con una cita porque él o ella 624 00:31:12,610 --> 00:31:16,315 está asumiendo que si el programador no era tan aguda, 625 00:31:16,315 --> 00:31:18,690 que van a tener los comillas simples en su código. 626 00:31:18,690 --> 00:31:19,860 >> Así que aquí está el código. 627 00:31:19,860 --> 00:31:23,820 Y que la sustitución ahora podría pasar es esto. 628 00:31:23,820 --> 00:31:26,350 Y he subrayado lo el usuario ha tecleado. 629 00:31:26,350 --> 00:31:28,480 Así que antes, después. 630 00:31:28,480 --> 00:31:33,330 Y note lo que es ligeramente preocupante ahora sobre la mitad derecha de este código SQL? 631 00:31:33,330 --> 00:31:36,300 Es un poco más complejo, hay que reconocerlo, de las consultas que hemos visto. 632 00:31:36,300 --> 00:31:38,550 Pero esto no puede ser una buena cosa si usted es 633 00:31:38,550 --> 00:31:42,240 diciendo seleccione estrella, que es selecto todo, desde la mesa del usuario 634 00:31:42,240 --> 00:31:46,630 donde nombre de usuario es igual skroob y contraseña es igual a uno, dos, tres, cuatro, 635 00:31:46,630 --> 00:31:49,610 cinco o uno es igual a uno. 636 00:31:49,610 --> 00:31:53,860 ¿Cuál es la implicación lógica de esa última cláusula presumiblemente? 637 00:31:53,860 --> 00:31:55,650 Es sólo siempre es cierto. 638 00:31:55,650 --> 00:31:59,930 >> Y porque hemos especie de adivinar o descubierto por ensayo y error 639 00:31:59,930 --> 00:32:02,760 que el programador que escribió el código no lo hizo 640 00:32:02,760 --> 00:32:07,250 anticipar una persona humana o malo escribir entre comillas simples, así, 641 00:32:07,250 --> 00:32:10,350 podemos sintácticamente completar la consulta SQL 642 00:32:10,350 --> 00:32:12,260 con algo sin sentido pero algo que 643 00:32:12,260 --> 00:32:15,930 es sintácticamente incorrecta que siempre se evalúa como verdadera. 644 00:32:15,930 --> 00:32:19,130 Así que si este código se utiliza para responder la pregunta verdadera o falsa debería 645 00:32:19,130 --> 00:32:22,930 se permitirá a este usuario a pasar, la respuesta está siempre aparentemente va 646 00:32:22,930 --> 00:32:26,930 para ser verdad, porque esto siempre va para seleccionar algo de la base de datos 647 00:32:26,930 --> 00:32:29,280 porque uno por supuesto es igual a uno siempre. 648 00:32:29,280 --> 00:32:30,360 >> Entonces, ¿cuál es la solución? 649 00:32:30,360 --> 00:32:33,290 Bueno en PSet 7, que en realidad evitar esto todos juntos. 650 00:32:33,290 --> 00:32:37,360 Le damos una función de consulta, y nosotros le animamos a usar signos de interrogación 651 00:32:37,360 --> 00:32:40,430 como marcadores de posición, de forma similar en espíritu al de printf% s, 652 00:32:40,430 --> 00:32:43,710 pero lo que es clave sobre los signos de interrogación aquí es si realmente lea 653 00:32:43,710 --> 00:32:46,950 functions.php, donde nuestro función de consulta se implementa, 654 00:32:46,950 --> 00:32:52,780 esos signos de interrogación se escaparon, por lo que nada potencialmente peligroso 655 00:32:52,780 --> 00:32:58,210 como una comilla simple se activa en una cita única escapado. 656 00:32:58,210 --> 00:33:00,590 >> Así que esto es lo que hay realmente está sucediendo si 657 00:33:00,590 --> 00:33:04,850 utilizar la función de búsqueda de CS50 o cualquier número de bibliotecas gratuitas de terceros que 658 00:33:04,850 --> 00:33:06,000 hacer lo mismo. 659 00:33:06,000 --> 00:33:09,850 No importa en este caso, en verde, si el usuario ha tecleado en una única cotización 660 00:33:09,850 --> 00:33:12,070 porque la consulta función que escribimos es 661 00:33:12,070 --> 00:33:15,120 va a agregar barras invertidas antes dicha cotización peligroso. 662 00:33:15,120 --> 00:33:17,360 Así que esto no es, en De hecho, va a ser de fiar. 663 00:33:17,360 --> 00:33:20,910 Esto es como escribir en un loco buscando contraseña que es, por supuesto, no va 664 00:33:20,910 --> 00:33:23,490 estar contraseña real de skroob. 665 00:33:23,490 --> 00:33:28,260 >> Así que la comida para llevar para CS50 es uno, absolutamente siempre usar algo 666 00:33:28,260 --> 00:33:30,860 como función de consulta del CS50 o la biblioteca subyacente, 667 00:33:30,860 --> 00:33:32,560 que pasa a llamarse DOP. 668 00:33:32,560 --> 00:33:35,880 Pero nunca, nunca, nunca hacer un código como este 669 00:33:35,880 --> 00:33:39,472 sin escapar o fregar como dicen sus entradas. 670 00:33:39,472 --> 00:33:42,430 Y en algún punto, probablemente, venir a través de un sitio web como este. 671 00:33:42,430 --> 00:33:46,060 De hecho, parece ser el caso como en los aeropuertos y hoteles en lugares 672 00:33:46,060 --> 00:33:48,880 donde tienen conexión Wi-Fi el acceso que usted tiene que iniciar sesión en, 673 00:33:48,880 --> 00:33:51,010 estos sitios web son siempre horriblemente implementado. 674 00:33:51,010 --> 00:33:55,680 Y así, una especie de diversión en ejercicio en el hogar, no con fines maliciosos o más 675 00:33:55,680 --> 00:33:59,170 de una diversión en la carretera ejercicio, es que sólo tienes que escribir 676 00:33:59,170 --> 00:34:02,850 un apóstrofe, una sola cita, en una forma en algún sitio web 677 00:34:02,850 --> 00:34:03,810 y ver qué pasa. 678 00:34:03,810 --> 00:34:06,660 Y si el servidor se cae o se da usted algún tipo de mensaje de error, 679 00:34:06,660 --> 00:34:09,690 puede muy bien ser que alguien no ha previsto esta. 680 00:34:09,690 --> 00:34:15,239 Y a continuación, usted debe alertar a la adecuada autoridades y no continuará. 681 00:34:15,239 --> 00:34:20,843 >> Así que ahora ustedes deben de esperar entender un poco más de humor del friki aquí. 682 00:34:20,843 --> 00:34:24,120 >> [Risas] 683 00:34:24,120 --> 00:34:27,571 684 00:34:27,571 --> 00:34:29,070 DAVID MALAN: Usted sabe que usted es un friki. 685 00:34:29,070 --> 00:34:30,944 Para los próximos años, que recordarán 686 00:34:30,944 --> 00:34:33,520 quien mesitas Bobby es porque de este dibujo animado aquí. 687 00:34:33,520 --> 00:34:36,760 Así que tenlo en cuenta a medida que cambio de contexto por última vez 688 00:34:36,760 --> 00:34:38,770 hoy para JavaScript. 689 00:34:38,770 --> 00:34:41,600 Hemos pasado relativamente poco tiempo en la sintaxis de PHP 690 00:34:41,600 --> 00:34:43,440 porque en realidad súper similar a C. 691 00:34:43,440 --> 00:34:47,300 Y muy bien lo suficiente, demasiado JavaScript es super similar a la sintaxis de C 692 00:34:47,300 --> 00:34:49,639 así como veremos en un momento, y como vamos a 693 00:34:49,639 --> 00:34:51,205 ver más adelante esta semana en particular. 694 00:34:51,205 --> 00:34:54,080 ¿Qué se puede hacer con este lenguaje, sin embargo, es aún más potente, 695 00:34:54,080 --> 00:34:55,790 especialmente con APIs. 696 00:34:55,790 --> 00:34:56,960 >> Pero primero una visita rápida. 697 00:34:56,960 --> 00:35:00,450 Así que uno, en JavaScript, no hay sin función principal, que es agradable. 698 00:35:00,450 --> 00:35:02,650 Al igual que con PHP, usted puede escribir el código. 699 00:35:02,650 --> 00:35:04,310 Condiciones ven así. 700 00:35:04,310 --> 00:35:07,100 Y expresiones booleanas pueden verá así o así. 701 00:35:07,100 --> 00:35:09,530 Existen interruptores, y podría tener este aspecto. 702 00:35:09,530 --> 00:35:10,970 Cuatro bucles se ven así. 703 00:35:10,970 --> 00:35:12,390 Mientras que los bucles se ven así. 704 00:35:12,390 --> 00:35:14,160 Haga ratos tener este aspecto. 705 00:35:14,160 --> 00:35:16,850 Y a continuación, las matrices se parecen esto, muy similar a PHP. 706 00:35:16,850 --> 00:35:20,740 Pero note, que en JavaScript que declarar una variable no con un dólar 707 00:35:20,740 --> 00:35:25,190 firmar, no con un tipo de datos, pero, literalmente, diciendo var para la variable antes. 708 00:35:25,190 --> 00:35:27,900 Es también se escribe libremente en que tiene tipos, 709 00:35:27,900 --> 00:35:29,729 pero no declara explícitamente. 710 00:35:29,729 --> 00:35:31,520 Y luego una cadena, para ejemplo, puede tener un aspecto 711 00:35:31,520 --> 00:35:34,350 así, esa cadena ser llamado s en este caso. 712 00:35:34,350 --> 00:35:35,410 Y luego un objeto. 713 00:35:35,410 --> 00:35:37,010 Y estos que veremos más en poco tiempo. 714 00:35:37,010 --> 00:35:41,470 Y un objeto es quizás uno de los más comúnmente visto estructuras de datos 715 00:35:41,470 --> 00:35:44,050 basado en un JavaScript programa porque permite 716 00:35:44,050 --> 00:35:46,680 asociar arbitraria pares de valores clave sólo 717 00:35:46,680 --> 00:35:51,240 como arrays asociativos de PHP y al igual que su propia tabla hash 718 00:35:51,240 --> 00:35:54,042 o tratar como implementamos hace unas semanas. 719 00:35:54,042 --> 00:35:56,250 Así que vamos a ver lo que en realidad que podemos hacer con JavaScript. 720 00:35:56,250 --> 00:35:59,410 Y en particular, esto es una larga lista de características 721 00:35:59,410 --> 00:36:02,300 que los navegadores tienen que nos permiten enganchar JavaScript 722 00:36:02,300 --> 00:36:05,470 en un sitio web de la siguiente manera. 723 00:36:05,470 --> 00:36:09,340 JavaScript se utiliza a menudo como un lado del cliente lenguaje de scripting. 724 00:36:09,340 --> 00:36:10,130 No es compilado. 725 00:36:10,130 --> 00:36:11,370 Es también se interpreta. 726 00:36:11,370 --> 00:36:15,740 Pero a diferencia de PHP, que ha estado funcionando en el servidor, en el servidor web, 727 00:36:15,740 --> 00:36:18,220 o muy dentro de la clientes, JavaScript 728 00:36:18,220 --> 00:36:22,190 es diferente en que por lo general se ejecuta en el navegador. 729 00:36:22,190 --> 00:36:26,060 >> Por lo que cualquier código JavaScript de empezar a escribir para PSet 8, o el proyecto final, 730 00:36:26,060 --> 00:36:29,890 o en el mundo real que generalmente se va para ser salvado en el servidor, absolutamente 731 00:36:29,890 --> 00:36:33,110 HTML en un punto o de punto JS de archivo JavaScript. 732 00:36:33,110 --> 00:36:35,770 Sin embargo, el navegador va descargar JavaScript 733 00:36:35,770 --> 00:36:39,530 código a su propia instancia de Chrome, o IE, o Firefox, o lo que sea. 734 00:36:39,530 --> 00:36:43,870 Y el código es en realidad va a conseguir ejecutado en el interior de su propio navegador. 735 00:36:43,870 --> 00:36:46,560 Sólo para hacer esto más real, vamos a ver esto en forma concreta. 736 00:36:46,560 --> 00:36:50,120 >> No tenemos idea de lo que hace el código sin realmente leer a través de él. 737 00:36:50,120 --> 00:36:52,670 Pero déjame ir a Facebook.com sin iniciar sesión. 738 00:36:52,670 --> 00:37:00,440 Déjame ir a Inspeccionar Elemento e ir a, digamos, Red y recargar la página. 739 00:37:00,440 --> 00:37:04,150 Y vamos a ver-- permítanme muevo Recargar la Página de conseguir todas las peticiones al nuevo. 740 00:37:04,150 --> 00:37:08,850 Y el primer archivo que veo es CSS, CSS. 741 00:37:08,850 --> 00:37:10,880 Aquí está la primera JavaScript archivo, y tengo 742 00:37:10,880 --> 00:37:14,600 ni idea de lo que esto hace, pero aquí es una parte del código JavaScript 743 00:37:14,600 --> 00:37:16,180 que impulsa Facebook. 744 00:37:16,180 --> 00:37:18,400 Ni siquiera es verdad que revelando para acercar. 745 00:37:18,400 --> 00:37:20,260 Sigue siendo igual de absurdo. 746 00:37:20,260 --> 00:37:24,341 >> Pero verás, incluso por debajo, hay incluso más de estos archivos JavaScript. 747 00:37:24,341 --> 00:37:24,840 ¡Vaya. 748 00:37:24,840 --> 00:37:25,440 Eso es un ping. 749 00:37:25,440 --> 00:37:28,550 Bajemos un poco Además, aún más, aún más. 750 00:37:28,550 --> 00:37:29,894 Hay uno. 751 00:37:29,894 --> 00:37:31,238 Hay uno. 752 00:37:31,238 --> 00:37:31,880 Hay uno. 753 00:37:31,880 --> 00:37:35,820 >> Así que a pesar de que Facebook, detrás de la escenas, está escrito en parte en PHP 754 00:37:35,820 --> 00:37:39,100 y la propia versión de los mismos de Facebook, hay una enorme cantidad de JavaScript. 755 00:37:39,100 --> 00:37:41,330 De hecho, cualquiera de las charlando haces en Facebook, 756 00:37:41,330 --> 00:37:45,520 cualquiera de las actualizaciones de la línea de tiempo en línea que eso suceda en tiempo real, todo eso 757 00:37:45,520 --> 00:37:47,944 es impulsado por JavaScript. 758 00:37:47,944 --> 00:37:48,444 ¿Sí? 759 00:37:48,444 --> 00:37:50,235 >> AUDIENCIA: No estoy seguro si esto es Facebook, 760 00:37:50,235 --> 00:37:53,624 pero pensé que Facebook ha desarrollado su propio lenguaje de código en la casa? 761 00:37:53,624 --> 00:37:54,540 DAVID MALAN: Lo hicieron. 762 00:37:54,540 --> 00:37:58,110 Así que por eso digo una variación de PHP llamado Hip Hop que, efectivamente, 763 00:37:58,110 --> 00:38:03,440 características añadidas a tal que cuando Marcos implementó por primera vez en Facebook, 764 00:38:03,440 --> 00:38:04,710 que fue escrito en PHP. 765 00:38:04,710 --> 00:38:07,370 Y ese tipo de se ha mantenido el tipo de lenguaje extremo frontal 766 00:38:07,370 --> 00:38:09,030 que utilizan para mucho de su codificación, pero 767 00:38:09,030 --> 00:38:11,870 no ha sido un lenguaje que es escalas particularmente bien a miles de millones 768 00:38:11,870 --> 00:38:12,630 de las personas. 769 00:38:12,630 --> 00:38:15,300 Y por lo que han añadido su propio mejoras detrás de las escenas. 770 00:38:15,300 --> 00:38:17,049 Y utilizan cualquier número de otros idiomas 771 00:38:17,049 --> 00:38:19,170 para diversas piezas de su infraestructura. 772 00:38:19,170 --> 00:38:24,080 Así que sí, es una variación de lo que hoy conocemos como PHP. 773 00:38:24,080 --> 00:38:26,610 >> Así que echemos un vistazo en un par de ejemplos 774 00:38:26,610 --> 00:38:28,890 de cómo podemos utilizar JavaScript aquí. 775 00:38:28,890 --> 00:38:32,530 En el código fuente de hoy, tenemos una montón de archivos, el primero de los cuales, 776 00:38:32,530 --> 00:38:34,090 vamos llamado DOM cero. 777 00:38:34,090 --> 00:38:36,770 Así DOM cero se ve de la siguiente manera. 778 00:38:36,770 --> 00:38:40,730 Déjame ir en este directorio y abrir domzero.html, 779 00:38:40,730 --> 00:38:44,970 la parte superior de los cuales tiene un tipo de doc declaración, diciendo aquí viene HTML 5. 780 00:38:44,970 --> 00:38:46,440 Y ahora aquí está una etiqueta HTML. 781 00:38:46,440 --> 00:38:47,540 Aquí está la etiqueta de la cabeza. 782 00:38:47,540 --> 00:38:49,210 Y esto es lo que hay de nuevo hoy. 783 00:38:49,210 --> 00:38:52,620 >> Ahora tenemos una etiqueta de script en el interior de la cabeza de la página. 784 00:38:52,620 --> 00:38:55,290 Y esto al parecer hace muy poco, pero aviso 785 00:38:55,290 --> 00:38:58,410 que he definido una guión, un JavaScript. 786 00:38:58,410 --> 00:39:01,050 Y como un aparte, ya que esta Es un error común, 787 00:39:01,050 --> 00:39:05,220 JavaScript tiene absolutamente nada que ver con Java, el lenguaje 788 00:39:05,220 --> 00:39:08,010 que algunos de ustedes podrían han aprendido en la SCCA. 789 00:39:08,010 --> 00:39:10,480 Fue más de una comercialización cosa que nada, 790 00:39:10,480 --> 00:39:12,980 montar los faldones de Java hace años. 791 00:39:12,980 --> 00:39:17,300 Pero JavaScript, nada que ver con Java, sólo de manera similar, y molesto, 792 00:39:17,300 --> 00:39:18,480 confusamente llamado. 793 00:39:18,480 --> 00:39:21,890 >> Así que aquí está cómo se declara una función en JavaScript, decir, literalmente, la función, 794 00:39:21,890 --> 00:39:24,556 entonces el nombre de la función, entonces cualquier argumentos podría adoptar, 795 00:39:24,556 --> 00:39:25,530 al igual que en PHP. 796 00:39:25,530 --> 00:39:28,990 Resulta que en JavaScript, una de las más funciones molestos que existen es una alerta. 797 00:39:28,990 --> 00:39:31,392 Esta es una pequeña ventana que se abrirá y que le avise 798 00:39:31,392 --> 00:39:32,600 en cierta pieza de información. 799 00:39:32,600 --> 00:39:33,766 Es generalmente mal visto. 800 00:39:33,766 --> 00:39:35,980 Pero lo usaremos como nuestro primer ejercicio aquí. 801 00:39:35,980 --> 00:39:37,900 >> Observe algunas características de JavaScript. 802 00:39:37,900 --> 00:39:41,524 Las comillas simples y comillas dobles no importa en realidad más. 803 00:39:41,524 --> 00:39:43,690 Las comillas simples y dobles citas se pueden intercambiar, 804 00:39:43,690 --> 00:39:46,220 mientras que en C, usted tiene que utilizar comillas dobles para las cadenas, 805 00:39:46,220 --> 00:39:48,150 y usted tiene dos individuales Cotizaciones de caracteres. 806 00:39:48,150 --> 00:39:51,150 En el mundo de JavaScript muchas personas, la mayoría de la gente 807 00:39:51,150 --> 00:39:54,970 utilizar comillas simples alrededor de las cadenas sólo porque es una cosa estilística. 808 00:39:54,970 --> 00:39:58,330 Pero ¿cuál es el operador más aquí, que no hemos visto antes? 809 00:39:58,330 --> 00:39:59,836 >> AUDIENCIA: La concatenación. 810 00:39:59,836 --> 00:40:00,960 DAVID MALAN: concatenación. 811 00:40:00,960 --> 00:40:02,450 Así que C no tiene ni siquiera esto. 812 00:40:02,450 --> 00:40:04,820 PHP tiene el operador punto, que hace esto. 813 00:40:04,820 --> 00:40:09,710 JavaScript tiene el operador más, que confusamente es como Java. 814 00:40:09,710 --> 00:40:11,440 Ahora, ¿qué está pasando aquí? 815 00:40:11,440 --> 00:40:14,260 >> Así que aquí es donde un básico la comprensión de que la imagen 816 00:40:14,260 --> 00:40:17,010 nos tiramos un par Hace días entra en juego. 817 00:40:17,010 --> 00:40:19,620 ¿Recuerdas cuando tuvimos un sencillo versión de un HTML page-- 818 00:40:19,620 --> 00:40:20,830 que acaba de decir, hola mundo. 819 00:40:20,830 --> 00:40:22,770 Y luego dibujamos un árbol a la derecha, que 820 00:40:22,770 --> 00:40:27,320 tenía un montón de rectángulos y líneas conectándolos como un árbol genealógico. 821 00:40:27,320 --> 00:40:30,820 Así que esa es la llamada DOM o Document Object Model. 822 00:40:30,820 --> 00:40:36,759 Y resulta que se puede acceder rectángulos en el árbol con la sintaxis 823 00:40:36,759 --> 00:40:37,550 como la siguiente. 824 00:40:37,550 --> 00:40:41,370 Usted, literalmente, dice el documento, que es un variable global especial en JavaScript 825 00:40:41,370 --> 00:40:45,890 programa que tiene una función asociada a ella que se puede acceder 826 00:40:45,890 --> 00:40:50,280 similar a una estructura, sino que simplemente decir punto y luego el nombre de la función, 827 00:40:50,280 --> 00:40:52,390 obtener elemento por ID. 828 00:40:52,390 --> 00:40:55,460 >> El elemento que quiero conseguir es aparentemente citar nombre fin de la cita. 829 00:40:55,460 --> 00:40:57,150 Y luego quiero obtener su valor. 830 00:40:57,150 --> 00:40:58,330 Ahora estamos llegando delante de nosotros mismos. 831 00:40:58,330 --> 00:41:00,038 Ni siquiera estoy seguro de lo que todo esto se trata. 832 00:41:00,038 --> 00:41:03,000 Vamos a avanzar rápidamente al HTML en La página, que es super simple. 833 00:41:03,000 --> 00:41:05,370 >> Tenga en cuenta que he definido Un formulario aquí abajo. 834 00:41:05,370 --> 00:41:07,940 Note que he dado un único Identificación, a pesar de que no hemos usado 835 00:41:07,940 --> 00:41:08,870 este atributo antes. 836 00:41:08,870 --> 00:41:11,300 Pero esto existe en HTML. 837 00:41:11,300 --> 00:41:15,570 Usted puede identificar de forma exclusiva algunos trozo de HTML con un identificador como este. 838 00:41:15,570 --> 00:41:19,880 >> Aviso ahora esto-- resulta HTML apoya, por que la lista de lavandería 839 00:41:19,880 --> 00:41:22,490 Hace un momento, en su conjunto montón de controladores de eventos. 840 00:41:22,490 --> 00:41:25,060 Y este controlador de eventos, dice en enviar. 841 00:41:25,060 --> 00:41:28,730 En la presentación de este usuario forma, llame al siguiente código. 842 00:41:28,730 --> 00:41:31,360 Y el código que va de ser llamado o ejecutados 843 00:41:31,360 --> 00:41:35,260 es exactamente esto, el griego función seguido de retorno falso. 844 00:41:35,260 --> 00:41:37,360 Todo lo demás debe estar bastante familiarizado. 845 00:41:37,360 --> 00:41:42,050 >> Aquí es una entrada de tipo texto, cuyo ID, en este caso, va a ser nombre. 846 00:41:42,050 --> 00:41:45,430 No tenemos un atributo real nombre este tiempo-- y un botón de envío. 847 00:41:45,430 --> 00:41:48,330 Así que la página resultante se parece a esto. 848 00:41:48,330 --> 00:41:52,890 Y el comportamiento resultante, verás, se parece a esto. 849 00:41:52,890 --> 00:41:56,940 La página que alberga locales dice, hola David, apenas un estéticamente agradable 850 00:41:56,940 --> 00:41:58,340 manera de saludar a un usuario. 851 00:41:58,340 --> 00:41:59,950 Pero lo que realmente está pasando? 852 00:41:59,950 --> 00:42:01,360 >> Bueno, tenga en cuenta lo que es esto. 853 00:42:01,360 --> 00:42:02,310 Este es un campo de texto. 854 00:42:02,310 --> 00:42:04,635 Y de acuerdo con la HTML aquí, me he dado 855 00:42:04,635 --> 00:42:07,350 un identificador único llamado cotización nombre fin de la cita. 856 00:42:07,350 --> 00:42:09,770 Mientras tanto, lo que he dicho cuando el usuario envía este formulario 857 00:42:09,770 --> 00:42:13,820 por oprimir la tecla Enter o haga clic en el Presentar botón, llame a la función llamada Greet 858 00:42:13,820 --> 00:42:15,410 y luego regresar Falso. 859 00:42:15,410 --> 00:42:16,870 Vamos a considerar los de atrás. 860 00:42:16,870 --> 00:42:20,590 Observe cuando haga clic en Enviar, el URL de esta página no cambia. 861 00:42:20,590 --> 00:42:22,420 El icono del navegador no empezar a girar. 862 00:42:22,420 --> 00:42:27,050 Yo no voy a ninguna parte, y eso es literalmente, porque dije: return false. 863 00:42:27,050 --> 00:42:31,534 Volver circuitos o paradas cortas falsos el comportamiento predeterminado de un formulario. 864 00:42:31,534 --> 00:42:33,700 Así que luego nos deja con ésta última pregunta. 865 00:42:33,700 --> 00:42:34,764 ¿Qué hace Greet? 866 00:42:34,764 --> 00:42:36,680 Bueno, al parecer Greet llama a una función llamada 867 00:42:36,680 --> 00:42:39,250 Alerta, pasa en una largo argumento de que es 868 00:42:39,250 --> 00:42:43,950 el resultado de la concatenación de un conjunto manojo de subcadenas, hola espacio coma, 869 00:42:43,950 --> 00:42:45,810 entonces todo lo que este regrese. 870 00:42:45,810 --> 00:42:51,490 Así que el documento es como un mundial variable para que la raíz de ese árbol, 871 00:42:51,490 --> 00:42:55,560 llamar a una función especial, de lo contrario ahora conocido como método. 872 00:42:55,560 --> 00:42:57,650 Una función que es en el interior de una variable es 873 00:42:57,650 --> 00:42:59,640 llamado método en lugar de una función. 874 00:42:59,640 --> 00:43:01,570 >> Así que elemento por ID. 875 00:43:01,570 --> 00:43:03,940 ¿Qué elemento tiene usted que desee obtener por su ID? 876 00:43:03,940 --> 00:43:06,970 Cita nombre y fin de la cita entonces el valor específicamente. 877 00:43:06,970 --> 00:43:12,000 Así, en otras palabras, que el código simplemente se encuentra el campo de texto cuyo ID es el nombre 878 00:43:12,000 --> 00:43:13,380 y luego obtiene su valor. 879 00:43:13,380 --> 00:43:16,460 Así que si yo fuera a cambiar esta y decir Davin en lugar de David, 880 00:43:16,460 --> 00:43:20,670 y haga clic en Enviar, ahora nos tener un saludo de Davin. 881 00:43:20,670 --> 00:43:22,890 >> Muy bien, así que todo bien y bueno. 882 00:43:22,890 --> 00:43:25,480 Pero vamos a ver si podemos hacer esta un poco más limpio ya que sólo 883 00:43:25,480 --> 00:43:28,190 escribir código como este es en general, va a ser mal visto. 884 00:43:28,190 --> 00:43:30,060 Esto se va a ver más aterrador. 885 00:43:30,060 --> 00:43:32,330 Pero, ¿qué es lo primero diferencia que nota aquí 886 00:43:32,330 --> 00:43:35,970 en esta versión, además de la nombrar cambiar a DOM uno? 887 00:43:35,970 --> 00:43:41,110 Lo que estructuralmente se ve diferente acerca de este frente a la otra? 888 00:43:41,110 --> 00:43:41,932 ¿Sí? 889 00:43:41,932 --> 00:43:43,890 AUDIENCIA: ¿Es la forma en la parte superior de la secuencia de comandos ahora? 890 00:43:43,890 --> 00:43:46,570 DAVID MALAN: Sí, es la forma en la parte superior de la secuencia de comandos, por alguna razón curiosa. 891 00:43:46,570 --> 00:43:48,736 Así que eso es lo primero que salta a mí, también. 892 00:43:48,736 --> 00:43:50,990 Y por suerte, al menos, esta parte es idéntica. 893 00:43:50,990 --> 00:43:53,470 Así que la única cosa que parece a ser diferente es la siguiente. 894 00:43:53,470 --> 00:43:55,296 >> Así que aquí está lo que está ordenado acerca de JavaScript 2. 895 00:43:55,296 --> 00:43:57,420 Y que hace que sea difícil entender a primera vista, 896 00:43:57,420 --> 00:44:00,670 especialmente para proyectos de final si usted está buscando en el código de ejemplo en línea, 897 00:44:00,670 --> 00:44:04,200 sino que se reduce a algunos características sintácticas básicas. 898 00:44:04,200 --> 00:44:06,230 Aquí de nuevo es que documento variable global. 899 00:44:06,230 --> 00:44:09,540 Aquí de nuevo es que el método o función que dice obtener el elemento de identificación. 900 00:44:09,540 --> 00:44:11,570 Esta vez quiero obtener el ID de llamada de demostración. 901 00:44:11,570 --> 00:44:12,490 Donde es eso? 902 00:44:12,490 --> 00:44:15,400 Eso es al parecer la derecha aquí, el propio formulario. 903 00:44:15,400 --> 00:44:20,010 >> Y ahora cuenta de que al parecer si volver ese nodo del árbol que 904 00:44:20,010 --> 00:44:22,940 representa la forma en sí, no es un campo de texto, 905 00:44:22,940 --> 00:44:26,970 resulta que la forma, que nodo o rectángulo desde el árbol, 906 00:44:26,970 --> 00:44:30,450 tiene lo que vamos a llamar a una propiedad, muy, muy, muy similar 907 00:44:30,450 --> 00:44:35,390 en espíritu a una estructura en C. Es sólo un miembro de datos dentro de este rectángulo. 908 00:44:35,390 --> 00:44:38,300 >> Así que tengo la forma aquí, y estoy adjuntando, 909 00:44:38,300 --> 00:44:44,650 o estoy asignando, a su Submit manejador o más bien en Enviar en la propiedad 910 00:44:44,650 --> 00:44:45,740 la siguiente función. 911 00:44:45,740 --> 00:44:49,000 Y este es, de lejos, el más loco Lo hasta ahora sintácticamente. 912 00:44:49,000 --> 00:44:53,610 Resulta que en JavaScript y en PHP, y, francamente, para el caso en C, 913 00:44:53,610 --> 00:44:58,990 a pesar de que no lo hacemos, se puede añadir sin nombre, anónimo o conocido como lambda 914 00:44:58,990 --> 00:45:03,000 funciones que no tienen un nombre pero puede ser llamado, no obstante. 915 00:45:03,000 --> 00:45:07,050 >> Así que lo que estoy haciendo aquí es que estoy asignando Enviar esta en la propiedad, que 916 00:45:07,050 --> 00:45:14,330 es dentro de este nodo de mi árbol DOM, un función, puntero de función si se quiere. 917 00:45:14,330 --> 00:45:16,310 Esa función no tiene nombre, pero eso no lo hace 918 00:45:16,310 --> 00:45:19,110 importa porque vamos a ver en un momento cómo llamarlo. 919 00:45:19,110 --> 00:45:21,780 Cuando esta función se llama, este código es ejecutado, entonces 920 00:45:21,780 --> 00:45:24,210 falso se devuelve al igual que antes. 921 00:45:24,210 --> 00:45:25,800 >> Pero noto lo que he hecho. 922 00:45:25,800 --> 00:45:27,830 En este punto en el historia, tengo un formulario. 923 00:45:27,830 --> 00:45:30,190 Tiene un identificador único llamado de demostración. 924 00:45:30,190 --> 00:45:33,740 Aquí abajo, tengo una etiqueta script que ejecuta el siguiente código. 925 00:45:33,740 --> 00:45:37,720 Se une a ese nodo en el árbol que está en Enviar 926 00:45:37,720 --> 00:45:40,260 propiedad esta función aquí. 927 00:45:40,260 --> 00:45:44,310 Y sólo por la naturaleza de cómo funcionan los navegadores, cuando ahora hago clic en Enviar o pulse Enter, 928 00:45:44,310 --> 00:45:45,889 que la función va a ser llamado. 929 00:45:45,889 --> 00:45:48,680 No necesita un nombre que ya diablos le importa cómo se llama. 930 00:45:48,680 --> 00:45:52,540 La única vez que nunca va a llegar llamado es cuando presento el formulario. 931 00:45:52,540 --> 00:45:55,130 No hay necesidad para mí, el desarrollador humano, 932 00:45:55,130 --> 00:45:57,330 que en realidad llamarlo en cualquier otro lugar. 933 00:45:57,330 --> 00:46:00,720 >> Ahora sólo como un reclamo, como si eso no se importaría flexión suficiente, 934 00:46:00,720 --> 00:46:03,330 incluso podemos hacer que esta buscar usando más críptico 935 00:46:03,330 --> 00:46:05,850 una biblioteca súper popular llamado jQuery. 936 00:46:05,850 --> 00:46:08,760 De hecho jQuery y JavaScript a menudo se fusionado. 937 00:46:08,760 --> 00:46:12,790 ¿Y qué vamos a hacer el miércoles es de inicio el uso de este lenguaje y estas bibliotecas 938 00:46:12,790 --> 00:46:16,030 para construir cada vez asíncrono y aplicaciones dinámicas 939 00:46:16,030 --> 00:46:18,950 como conseguir un mapa aplicaciones, aplicaciones 940 00:46:18,950 --> 00:46:22,360 que actualizar la página web en bienes tiempo, al igual que Facebook o Gchat 941 00:46:22,360 --> 00:46:27,130 hacer, y ya no limitarnos a hitting Presentar por un encuentro o simplemente puesto 942 00:46:27,130 --> 00:46:27,630 solo. 943 00:46:27,630 --> 00:46:29,055 Así que voy a verte el miércoles. 944 00:46:29,055 --> 00:46:31,805 945 00:46:31,805 --> 00:46:35,550 >> [REPRODUCCIÓN DE MÚSICA] 946 00:46:35,550 --> 00:48:09,728