1 00:00:00,000 --> 00:00:02,570 [Powered by Google Translate] [Semana 9] 2 00:00:02,570 --> 00:00:04,740 [David J. Malan - Harvard University] 3 00:00:04,740 --> 00:00:07,170 [Esta es CS50. - CS50.TV] 4 00:00:07,170 --> 00:00:12,350 Está bien. Bienvenido de nuevo. Esto es CS50, y este es el comienzo de la semana 9. 5 00:00:12,350 --> 00:00:16,600 Hoy nos centramos en particular en el diseño, ya no en el contexto de la C 6 00:00:16,600 --> 00:00:20,010 pero en el contexto de PHP y un poco de SQL y un poco de JavaScript, 7 00:00:20,010 --> 00:00:23,730 especialmente hacia el fin de los dos pset 7 y también su proyecto final. 8 00:00:23,730 --> 00:00:26,310 De hecho, si usted está en ese punto en el proyecto final 9 00:00:26,310 --> 00:00:30,100 donde presumiblemente a partir de una hora o así que hace que por lo menos empezamos a pensar un poco 10 00:00:30,100 --> 00:00:33,730 a su proyecto final y estás pensando que te gustaría colaborar con 1 o 2 compañeros de clase, 11 00:00:33,730 --> 00:00:36,150 si usted está teniendo problemas para conectarse con dichos compañeros, 12 00:00:36,150 --> 00:00:40,570 no dude en rellenar el formulario en cs50.net/partners/form. 13 00:00:40,570 --> 00:00:42,880 Simplemente te pregunta quién eres, qué tipo de proyecto que usted está pensando, 14 00:00:42,880 --> 00:00:44,870 donde vive sólo por razones logísticas. 15 00:00:44,870 --> 00:00:49,510 Y luego, si desea mantener un ojo en la próxima semana o así que la URL de hoja de cálculo allí, 16 00:00:49,510 --> 00:00:53,520 A continuación, puede ver una versión de sólo lectura del documento de Google Docs 17 00:00:53,520 --> 00:00:56,010 en el que estamos recogiendo esa información. 18 00:00:56,010 --> 00:00:58,930 Así que si usted quiere trabajar con alguien, por todos los medios no dude en acercarse a la gente 19 00:00:58,930 --> 00:01:00,480 a través de ese mecanismo. 20 00:01:00,480 --> 00:01:02,690 Pero la mayoría de la gente hacer solo trabajo. Eso es totalmente bien. 21 00:01:02,690 --> 00:01:06,120 Así que no creo que esto es de alguna manera obligatoria. 22 00:01:06,120 --> 00:01:09,680 El viernes era sólo yo y unos pocos del equipo de aquí, 23 00:01:09,680 --> 00:01:11,100 teatro vacío en su mayor parte. 24 00:01:11,100 --> 00:01:14,600 Hubo 3 turistas sentado ahí arriba, así que fue un poco incómodo. 25 00:01:14,600 --> 00:01:18,970 Lo que hablaba era de bases de datos y hablamos de pset 7 un poco. 26 00:01:18,970 --> 00:01:22,200 Y si no fue así para capturar en video que por el momento, eso está bien. 27 00:01:22,200 --> 00:01:26,770 Voy a tratar de definir los términos que de otra manera sería dar por sentado 28 00:01:26,770 --> 00:01:28,840 basado en conferencia del viernes. 29 00:01:28,840 --> 00:01:32,550 >> Pero hoy vamos a tratar de llegar al punto 30 00:01:32,550 --> 00:01:34,990 de no sólo ser capaz de hacer algo así pset 7 31 00:01:34,990 --> 00:01:37,360 pero realmente entender lo que está pasando debajo de la campana, 32 00:01:37,360 --> 00:01:41,910 en particular algunas de las abstracciones que hemos puesto en marcha en el archivo functions.php 33 00:01:41,910 --> 00:01:45,780 para hacer su vida un poco más fácil, pero por lo que entiendo que en última instancia 34 00:01:45,780 --> 00:01:48,760 de modo que cuando las ruedas de entrenamiento salir en un par de semanas usted todavía puede sobrevivir 35 00:01:48,760 --> 00:01:53,750 en el mundo real y hacer estas cosas sin un marco CS50 debajo de usted. 36 00:01:53,750 --> 00:01:57,500 Este $ _SESSION, para aquellos de ustedes que están familiarizados 37 00:01:57,500 --> 00:02:01,960 o que ya cogido el video el viernes, ¿qué vamos a hacer SESIÓN 38 00:02:01,960 --> 00:02:04,330 en una aplicación web basada en PHP? 39 00:02:04,330 --> 00:02:09,650 Esta es una variable superglobal, lo que significa que es similar en espíritu a GET y POST 40 00:02:09,650 --> 00:02:13,970 y algunos otros, pero ¿qué es esto útil? 41 00:02:13,970 --> 00:02:18,320 >> ¿Cuál es SESIÓN utiliza? Si. [Estudiante] Logueandote 42 00:02:18,320 --> 00:02:21,040 ¿Cómo dice? [Estudiante] Logging in Logging in Indeed. 43 00:02:21,040 --> 00:02:25,100 En pset 7 que estamos usando este superglobal sesión para facilitar la tala pulg 44 00:02:25,100 --> 00:02:28,600 Y lo que es bueno de este superglobal es que es una matriz asociativa. 45 00:02:28,600 --> 00:02:33,190 Una matriz asociativa, recordar, es sólo un conjunto, pero cuyos índices ya no tienen que ser números 46 00:02:33,190 --> 00:02:37,670 como 012. Ellos pueden ser números o pueden ser incluso cadenas. 47 00:02:37,670 --> 00:02:44,890 Y lo que si ha buceado en pset 7, sin embargo, se recordará que estamos almacenando un ID de clave llamada 48 00:02:44,890 --> 00:02:50,330 dentro de esta matriz asociativa cuyo valor es algo así como 123 - 49 00:02:50,330 --> 00:02:53,780 cualquiera que sea el iniciado sesión ID de usuario es. 50 00:02:53,780 --> 00:02:59,470 El motivo de esto es que incluso después de que el usuario ha visitado localhost 51 00:02:59,470 --> 00:03:02,720 o mi sitio web en general y que han iniciado sesión, 52 00:03:02,720 --> 00:03:07,320 incluso si no hace clic en un enlace o volver a mi sitio web durante 5 minutos 53 00:03:07,320 --> 00:03:10,730 o incluso una hora o incluso un día, pero dejan su ventana del navegador abierta, 54 00:03:10,730 --> 00:03:14,370 a través de este superglobal puedo recordar que se ha autentificado 55 00:03:14,370 --> 00:03:21,140 >> En otras palabras, lo que me permite almacenar cualquier cosa un poco largo plazo Quiero acerca de un usuario. 56 00:03:21,140 --> 00:03:24,390 Y usted puede pensar que es realmente como la encarnación de un carrito de compras. 57 00:03:24,390 --> 00:03:27,740 Sitios como Amazon, obviamente, vamos a poner las cosas en un carro de compras, 58 00:03:27,740 --> 00:03:32,230 pero HTTP, el protocolo que alimenta la Web, es apátrida 59 00:03:32,230 --> 00:03:34,230 en el sentido de que cuando usted visita un sitio web, 60 00:03:34,230 --> 00:03:37,290 en su mayor parte no tiene algún tipo de conexión de red permanente 61 00:03:37,290 --> 00:03:39,270 entre su navegador y el servidor. 62 00:03:39,270 --> 00:03:42,190 Tan pronto como usted haya descargado el código HTML y JPEG y GIF las y los de todo, que 63 00:03:42,190 --> 00:03:48,200 la conexión desaparece y sólo hay una copia del código HTML y otras cosas desde el servidor. 64 00:03:48,200 --> 00:03:53,000 Pero si el servidor quiere recordar algo acerca de usted, 65 00:03:53,000 --> 00:03:57,580 la carga está en el servidor para registrar realmente esa información. 66 00:03:57,580 --> 00:04:00,130 Y por lo que el programador que tiene control sobre el servidor 67 00:04:00,130 --> 00:04:04,400 puede poner casi cualquier cosa que quieras dentro de esta matriz asociativa superglobal 68 00:04:04,400 --> 00:04:06,850 y que estará allí la próxima vez que el usuario vuelve, 69 00:04:06,850 --> 00:04:12,070 si se trata de minutos o incluso días más tarde, a menos que cerrar la ventana de su navegador, 70 00:04:12,070 --> 00:04:14,360 en la que SESIÓN punto desaparece. 71 00:04:14,360 --> 00:04:17,779 Así que es efímero almacenamiento, es no persistente, y que está destinado a desaparecer 72 00:04:17,779 --> 00:04:22,360 tan pronto como el usuario cierra su navegador - no sólo esa pestaña, a menudo el navegador entero, 73 00:04:22,360 --> 00:04:24,930 lo que efectivamente el registro el usuario fuera. 74 00:04:24,930 --> 00:04:28,000 Entonces, ¿cómo es esto en realidad práctica? 75 00:04:28,000 --> 00:04:31,360 Echemos un rápido vistazo a un ejemplo sencillo vimos el viernes. 76 00:04:31,360 --> 00:04:33,340 Para aquellos no familiarizados, es tan simple como esto. 77 00:04:33,340 --> 00:04:35,910 Esta es una página web cuyo único propósito en la vida es que me digas 78 00:04:35,910 --> 00:04:38,000 cuántas veces he visitado esta página. 79 00:04:38,000 --> 00:04:41,670 Esta es la primera vez hoy aquí que la visité, por lo que dice 0 veces. 80 00:04:41,670 --> 00:04:46,940 >> Pero si empiezo a volver a cargar esta página, se dice 1 hora, 2, 3, 4, 5, 81 00:04:46,940 --> 00:04:49,800 y esto finalmente se acaba de seguir contando hacia arriba, arriba, arriba, arriba, arriba 82 00:04:49,800 --> 00:04:53,130 por cada vez que haga clic en Actualizar en realidad en él. 83 00:04:53,130 --> 00:04:58,830 Entonces, ¿cómo es este trabajo? Déjame ir dentro de este archivo llamado counter.php. 84 00:04:58,830 --> 00:05:02,490 La parte superior de la misma es todos los comentarios azules, pero la parte interesante está aquí. 85 00:05:02,490 --> 00:05:06,670 En la línea 13 se llama session_start esta función, 86 00:05:06,670 --> 00:05:09,600 y que es, literalmente, todo lo que tienes que hacer si quieres tener acceso 87 00:05:09,600 --> 00:05:13,610 a este superglobal especial llamada $ _SESSION. 88 00:05:13,610 --> 00:05:17,430 Eso hace que todo sea posible, y veremos cómo en un momento en que todo es posible. 89 00:05:17,430 --> 00:05:20,350 En la línea 16 aviso de lo que estoy haciendo. 90 00:05:20,350 --> 00:05:25,960 Si la clave, llamado contra - en otras palabras, el valor del índice - "contador" 91 00:05:25,960 --> 00:05:32,310 existe dentro de esta matriz llamada SESSION, entonces ¿qué estoy haciendo con él en la línea de abajo? 92 00:05:32,310 --> 00:05:36,650 ¿Cuál es la línea 18 va? 93 00:05:36,650 --> 00:05:40,360 >> [Respuesta de los estudiantes inaudible] ¿Qué es eso? [Estudiante] Almacenar el valor. Bueno. 94 00:05:40,360 --> 00:05:45,800 Se almacena el valor que está en sesión en este momento en una nueva variable temporal local, 95 00:05:45,800 --> 00:05:48,250 $ Contador en minúsculas. 96 00:05:48,250 --> 00:05:50,770 Tenga en cuenta que PHP ya está siendo un poco perezoso aquí. 97 00:05:50,770 --> 00:05:55,550 Tenga en cuenta que no tenemos ninguna mención de int o float o cadena ni nada de eso 98 00:05:55,550 --> 00:06:00,480 debido a que PHP es tipos débiles, por lo que no es necesario especificar el tipo de una variable, 99 00:06:00,480 --> 00:06:03,310 y en este caso aquí no he siquiera lo declarado todavía. 100 00:06:03,310 --> 00:06:08,980 Lo estoy declarando dentro de estas llaves ya diferencia de C, esto es realmente bueno. 101 00:06:08,980 --> 00:06:13,800 No importa cuán profundamente anidado declaración de una variable es en PHP - 102 00:06:13,800 --> 00:06:16,650 dentro de llave, dentro de llave de cierre y similares - 103 00:06:16,650 --> 00:06:21,230 será en ese momento en el tiempo existe para el resto del programa, 104 00:06:21,230 --> 00:06:22,680 para bien o para mal. 105 00:06:22,680 --> 00:06:26,930 Así que inmediatamente se convierte en global tan pronto como usted lo define como estamos haciendo aquí. 106 00:06:26,930 --> 00:06:31,620 >> De lo contrario, si no me parece que haya nada en el superglobal REUNIÓN, 107 00:06:31,620 --> 00:06:34,680 Estoy aparentemente inicializar esta variable contador a 0, 108 00:06:34,680 --> 00:06:37,580 por lo tanto sólo suponiendo que el usuario nunca ha estado aquí antes. 109 00:06:37,580 --> 00:06:40,030 Y después de este curso es incrementar el contador, ¿cómo? 110 00:06:40,030 --> 00:06:44,480 Estoy actualizando el valor que hay dentro de esta matriz asociativa 111 00:06:44,480 --> 00:06:49,530 fijándola igual a lo que actualmente es contador + 1. 112 00:06:49,530 --> 00:06:53,520 Si me desplazo hasta aquí para el código HTML de la página, en realidad es bastante simple. 113 00:06:53,520 --> 00:06:58,920 Todo lo que tengo en el cuerpo de esta página es: "Usted ha visitado este sitio veces fulano de tal". 114 00:06:58,920 --> 00:07:00,350 Y este es un constructo PHP. 115 00:07:00,350 --> 00:07:06,080 Si lo hace 00:07:12,600 Realmente es equivalente a algo así como printf, que hemos visto muchas veces en C, 117 00:07:12,600 --> 00:07:15,940 aunque, como ustedes saben ya de la especificación en pset 7, 118 00:07:15,940 --> 00:07:20,160 impresión es también una función que sólo imprime algo, en realidad no utilizar códigos de formato, 119 00:07:20,160 --> 00:07:23,270 y en realidad se puede decir que echo también. 120 00:07:23,270 --> 00:07:27,460 Son todos muy ligeramente diferente, aunque el efecto neto es en última instancia el mismo. 121 00:07:27,460 --> 00:07:31,270 Así que este uso del signo igual es sólo una especie de una manera elegante de hacerlo 122 00:07:31,270 --> 00:07:34,910 más brevemente de lo que de otro modo podrían ser capaces de hacerlo. 123 00:07:34,910 --> 00:07:38,370 Así que eso es todo lo hace este sitio web. Se imprime el valor del contador. 124 00:07:38,370 --> 00:07:40,550 ¿Cómo es que todo esto realmente suceda? 125 00:07:40,550 --> 00:07:43,250 Usted puede recordar una semana o así que hace que empezamos a buscar debajo de la capucha 126 00:07:43,250 --> 00:07:47,910 la forma en que una página web funciona mediante el uso de esta ficha Inspector. 127 00:07:47,910 --> 00:07:51,900 >> Chrome tiene esta tanto en la versión para Mac, la versión de Windows, e incluso la versión de Linux, 128 00:07:51,900 --> 00:07:59,510 y Firefox e IE tienen mecanismos similares mediante el cual usted tiene este depurador integrado 129 00:07:59,510 --> 00:08:01,400 dentro del navegador. 130 00:08:01,400 --> 00:08:03,040 Vamos a echar un vistazo a la siguiente. 131 00:08:03,040 --> 00:08:06,960 Tenemos un montón de fichas de aquí, y recordar que la izquierda es un Elements, 132 00:08:06,960 --> 00:08:10,700 y no importa lo espantosa el código HTML y JavaScript en una página, 133 00:08:10,700 --> 00:08:15,710 Recordemos que con la pestaña Elementos en realidad se puede navegar por el código HTML jerárquicamente 134 00:08:15,710 --> 00:08:17,050 y agradable y ordenada. 135 00:08:17,050 --> 00:08:19,370 Así que si usted está tratando de aprender de un sitio web como Google o Facebook 136 00:08:19,370 --> 00:08:22,370 o en realidad cualquier sitio web, cuenta de que usted está probablemente mejor 137 00:08:22,370 --> 00:08:26,360 mirar el código fuente de esta manera en lugar de ver la fuente de crudo, 138 00:08:26,360 --> 00:08:29,580 que puede ser un desastre, como hemos visto, especialmente en el sitio de Google. 139 00:08:29,580 --> 00:08:32,220 Así que si en vez haga clic en la ficha Red aquí, 140 00:08:32,220 --> 00:08:34,830 vamos a ver lo que está pasando en mi visita a esta página. 141 00:08:34,830 --> 00:08:38,669 En primer lugar quiero limpiar mi caché. 142 00:08:38,669 --> 00:08:43,570 Voy a ir a Ajustes en Chrome y luego ir a la Historia 143 00:08:43,570 --> 00:08:46,420 y luego Borrar datos de navegación. 144 00:08:46,420 --> 00:08:48,170 Puede ser utilizado para hacer esto para otros fines, [risas] 145 00:08:48,170 --> 00:08:51,990 pero cuando se trata de desarrollo de sitios web, es realmente útil - 146 00:08:51,990 --> 00:08:55,980 si te ríes tú sabes. [Risas] 147 00:08:55,980 --> 00:08:59,310 De hecho, es muy útil en el desarrollo de sitios web porque la realidad es 148 00:08:59,310 --> 00:09:04,100 cosas como galletas y cosas por el estilo en caché los archivos HTML en caché, archivos JavaScript 149 00:09:04,100 --> 00:09:06,390 puede llegar a ser un gran dolor de cabeza, ya que si por cualquier razón 150 00:09:06,390 --> 00:09:11,500 el navegador decide almacenar en caché algún archivo y, sin embargo usted ha realizado cambios en el archivo en el servidor 151 00:09:11,500 --> 00:09:14,670 pero el navegador no se ha dado cuenta realmente de que el archivo ha cambiado 152 00:09:14,670 --> 00:09:19,060 y por lo tanto no es realmente volver a descargarlo, incluso cuando usted haga clic en el botón Actualizar, 153 00:09:19,060 --> 00:09:23,210 una de las formas más seguras de hacer sólo que la culpa no es de su código, 154 00:09:23,210 --> 00:09:26,480 es con el comportamiento del navegador, es ir en aquí en tu navegador 155 00:09:26,480 --> 00:09:29,950 y simplemente borrar el historial completo para que no haya confusión. 156 00:09:29,950 --> 00:09:33,210 >> Y entonces, si usted realmente quiere ser paranoico, salga del navegador, reinicia, 157 00:09:33,210 --> 00:09:35,660 y luego asegurarse de que todo está funcionando como se esperaba. 158 00:09:35,660 --> 00:09:38,820 Así que en resumen, caché de compensación es bueno cuando se hace el desarrollo. 159 00:09:38,820 --> 00:09:40,690 Así que aquí tenemos la pestaña Network. 160 00:09:40,690 --> 00:09:46,020 Yo había visitado previamente el sitio de 9 veces, pero déjame seguir adelante ahora y haga clic en Actualizar. 161 00:09:46,020 --> 00:09:47,500 Y estoy de vuelta a 0. 162 00:09:47,500 --> 00:09:52,100 Vamos a ver realmente cómo es que este superglobal sesión está siendo implementado. 163 00:09:52,100 --> 00:09:55,990 Voy a hacer clic en la solicitud de un HTTP que se hizo, 164 00:09:55,990 --> 00:09:58,810 y esta ventana de depuración me permite mirar dentro de eso. 165 00:09:58,810 --> 00:10:01,970 Aquí veo sólo la respuesta del servidor, que no es interesante. 166 00:10:01,970 --> 00:10:04,030 He visto esto en cualquier número de maneras. 167 00:10:04,030 --> 00:10:06,350 Pero lo que es técnicamente interesante son las cabeceras. 168 00:10:06,350 --> 00:10:11,770 Si me desplazo hasta aquí y se centran en las cabeceras de petición y haga clic en Ver código fuente, 169 00:10:11,770 --> 00:10:14,400 lo que voy a ver es, literalmente, la petición HTTP 170 00:10:14,400 --> 00:10:17,250 que acaba de ir de mi navegador al servidor, 171 00:10:17,250 --> 00:10:21,400 GET es la palabra clave y, a continuación, / counter.php siendo el nombre del archivo 172 00:10:21,400 --> 00:10:25,670 HTTP/1.1 sólo es la versión de HTTP que el navegador está usando. 173 00:10:25,670 --> 00:10:31,070 Esta línea aquí es un pequeño recordatorio desde el navegador al servidor cuál es el nombre del servidor es 174 00:10:31,070 --> 00:10:33,020 que quiere hablar. 175 00:10:33,020 --> 00:10:38,200 Y a continuación, el resto de este es a veces interesante, pero no es relevante en este momento. 176 00:10:38,200 --> 00:10:40,090 >> Esto es sólo una especie de curiosidad. 177 00:10:40,090 --> 00:10:43,530 Cryptic aunque esta cadena es, en cualquier momento de su navegador visita una página web 178 00:10:43,530 --> 00:10:47,110 se informa al servidor el navegador que está utilizando 179 00:10:47,110 --> 00:10:50,040 y qué sistema operativo que esté utilizando y qué versión de la misma. 180 00:10:50,040 --> 00:10:52,650 Así que si alguna vez se preguntó cómo los sitios web como CNN y otras cosas 181 00:10:52,650 --> 00:10:56,860 saber cuáles son los porcentajes de usuarios de Mac en los usuarios de PC, Web, 182 00:10:56,860 --> 00:11:00,820 Usuarios de Internet Explorer, los usuarios de Chrome y similares, es porque todos los navegadores 183 00:11:00,820 --> 00:11:04,300 están diciendo a todos los sitios web solo por ahí lo que somos. 184 00:11:04,300 --> 00:11:07,410 No necesariamente contienen información de identificación personal, 185 00:11:07,410 --> 00:11:13,060 pero sí indicar al servidor cuál es su dirección IP es y qué navegador y sistema operativo que esté utilizando. 186 00:11:13,060 --> 00:11:14,720 Así que ahí es donde esta información. 187 00:11:14,720 --> 00:11:19,960 Pero lo que es más interesante ahora, cuando se trata de estas sesiones es la cabecera de respuesta. 188 00:11:19,960 --> 00:11:22,530 Déjame ver el código fuente, haga clic en siguiente a la respuesta. 189 00:11:22,530 --> 00:11:24,590 Lo que es interesante aquí es algunas cosas. 190 00:11:24,590 --> 00:11:27,580 1, tenemos un código de estado de 200. 191 00:11:27,580 --> 00:11:29,840 Nunca vemos este código de estado porque eso significa que todo está bien. 192 00:11:29,840 --> 00:11:32,920 Significa, literalmente, bien en contraste con otra cosa. 193 00:11:32,920 --> 00:11:36,380 ¿Qué es un número que a veces vemos que eso es malo? [Estudiante] 404. 194 00:11:36,380 --> 00:11:39,860 404, archivo no encontrado, 403 usted puede ser que ya tropezar, 195 00:11:39,860 --> 00:11:43,660 lo que está prohibido, lo que significa que usted se olvidó de algo chmod, lo más probable. 196 00:11:43,660 --> 00:11:45,190 Y hay un montón de otros. 197 00:11:45,190 --> 00:11:47,760 >> Aquí abajo, esto es un poco loco. 198 00:11:47,760 --> 00:11:52,340 Me acabo de escribir este archivo hace unos minutos pegándola en gedit. 199 00:11:52,340 --> 00:11:57,100 ¿Por qué esta página expira en 1981, antes de que realmente era una Web? 200 00:11:58,010 --> 00:12:00,730 ¿Qué está pasando ahí? 201 00:12:00,730 --> 00:12:04,390 >> [Respuesta de los estudiantes inaudible] La marca de tiempo. Pero ¿por qué? 202 00:12:06,110 --> 00:12:09,120 Es algo arbitrario, pero es realmente útil. 203 00:12:09,120 --> 00:12:15,500 Lo que esto nos dice a mi navegador es el archivo PHP que acaba solicitado ya haya expirado. 204 00:12:15,500 --> 00:12:18,580 De hecho, expirado hace 30 años. 205 00:12:18,580 --> 00:12:20,260 Pero, ¿qué significa eso realmente? 206 00:12:20,260 --> 00:12:22,500 Sólo significa que la próxima vez que el usuario visita esta página, 207 00:12:22,500 --> 00:12:25,540 ya sea por carga o escribiendo la URL en la barra de direcciones, 208 00:12:25,540 --> 00:12:28,010 asegúrese de ir a buscar una nueva copia de la misma. 209 00:12:28,010 --> 00:12:30,840 Esta es una especie de un ejemplo de almacenamiento en caché, 210 00:12:30,840 --> 00:12:33,790 una palabra estúpida que sólo significa tratar de disuadir a los navegadores 211 00:12:33,790 --> 00:12:37,260 de hecho HTML almacenamiento en caché que se ha enviado desde un servidor 212 00:12:37,260 --> 00:12:41,490 de modo que usted no golpea accidentalmente recarga y luego ver la misma versión del archivo. 213 00:12:41,490 --> 00:12:43,730 Usted realmente quiere que el servidor envíe una copia nueva. 214 00:12:43,730 --> 00:12:47,440 Así que el hecho de que es 1981 sólo significa que eso es lo que el aparato está eligiendo 215 00:12:47,440 --> 00:12:50,280 como una fecha arbitraria en el pasado. 216 00:12:50,280 --> 00:12:53,380 Pero lo real es jugosa ahora esta. 217 00:12:53,380 --> 00:12:57,550 Incluso antes de los 50 es probable que vagamente familiarizado con las cookies. 218 00:12:57,550 --> 00:13:01,820 A partir de ahora, sobre todo entre los menos cómoda o en el medio, 219 00:13:01,820 --> 00:13:04,120 ¿qué es una cookie en su comprensión en este momento 220 00:13:04,120 --> 00:13:06,980 a pesar de que estamos a punto de hacer de su conocimiento más técnico? 221 00:13:08,150 --> 00:13:10,070 ¿Qué es una cookie? Si. 222 00:13:10,070 --> 00:13:13,890 [Estudiante] Información sobre el usuario, como si han escrito su nombre de usuario o algo así. 223 00:13:13,890 --> 00:13:17,370 >> Bueno. Es una información sobre el usuario, ya sea que haya escrito en su nombre de usuario ya. 224 00:13:17,370 --> 00:13:21,190 Las cookies son un medio por el cual los servidores pueden recordar algo acerca de un usuario. 225 00:13:21,190 --> 00:13:25,810 Y lo que realmente es una cookie es un archivo de texto o de alguna secuencia de bytes 226 00:13:25,810 --> 00:13:28,340 que está emplazada a un servidor dentro de su navegador, 227 00:13:28,340 --> 00:13:31,960 y dentro de ese archivo o entre los bytes es algún tipo de identificador. 228 00:13:31,960 --> 00:13:35,640 Tal vez sea literalmente su nombre de usuario, pero más a menudo es algo más críptico de aspecto 229 00:13:35,640 --> 00:13:43,700 como esta cosa aquí - bo8dal3ct y así sucesivamente - esta cadena alfanumérica muy grande 230 00:13:43,700 --> 00:13:47,050 que realmente sólo pretende ser un identificador único para ti. 231 00:13:47,050 --> 00:13:49,790 O usted puede pensar en él como una especie de sello de mano virtual. 232 00:13:49,790 --> 00:13:53,020 Si usted va a un club o un parque de diversiones, recordar que usted ha pagado 233 00:13:53,020 --> 00:13:55,850 y entrado, le pusieron una pegatina roja en la mano de algún tipo, 234 00:13:55,850 --> 00:13:59,270 y que recuerda a la gente en el mostrador que ya has pagado 235 00:13:59,270 --> 00:14:01,340 y que pueda entrar y salir cuando quiera. 236 00:14:01,340 --> 00:14:04,250 Las cookies son un poco similares en espíritu a eso. 237 00:14:04,250 --> 00:14:08,070 La primera vez que visité este sitio web, como acabo de hacer después de limpiar mi caché, 238 00:14:08,070 --> 00:14:11,620 el servidor web, el aparato en este caso, poner un sello en mi mano 239 00:14:11,620 --> 00:14:15,030 cuyo nombre es PHPSESSID, ID de sesión, 240 00:14:15,030 --> 00:14:18,260 cuyo valor es la cadena alfanumérica muy largo. 241 00:14:18,260 --> 00:14:22,470 >> Así que ahora es una especie de estampado en mi mano para que la próxima vez que me golpeó recargar 242 00:14:22,470 --> 00:14:25,230 o manualmente visitar esta URL en el navegador, 243 00:14:25,230 --> 00:14:29,230 mi navegador por definición de HTTP se va a presentar el sello en la mano 244 00:14:29,230 --> 00:14:31,940 una y otra vez y otra vez. 245 00:14:31,940 --> 00:14:34,550 Así que, aunque el servidor no tiene por qué saber quién soy, 246 00:14:34,550 --> 00:14:39,610 que por lo menos sé que soy el mismo usuario o por lo menos, más concretamente, el mismo navegador. 247 00:14:39,610 --> 00:14:45,660 Y esto es en última instancia cómo el superglobal sesión se implementa. 248 00:14:45,660 --> 00:14:51,200 El servidor no tiene idea de quién es usted cuando vuelva a visitar un sitio web para la segunda o tercera vez 249 00:14:51,200 --> 00:14:53,410 menos que usted presente este sello en la mano. 250 00:14:53,410 --> 00:14:55,530 Y tan pronto como usted presente que sello en la mano, 251 00:14:55,530 --> 00:14:59,370 el servidor web esencialmente entra en una pequeña base de datos de su propio 252 00:14:59,370 --> 00:15:06,040 y los cheques, vale, acabo de ver el sello de la mano de bo8dal3ct usuario y así sucesivamente. 253 00:15:06,040 --> 00:15:09,850 Déjame ver la información que el programador ha almacenado 254 00:15:09,850 --> 00:15:12,380 dentro de la superglobal sobre este usuario, 255 00:15:12,380 --> 00:15:17,000 y luego dejar que me asegure de que esos datos son de nuevo dentro de la sesión superglobal 256 00:15:17,000 --> 00:15:19,830 de modo que el programador puede volver a acceder a esos datos 257 00:15:19,830 --> 00:15:23,360 incluso si se ha establecido algunos minutos u horas antes. 258 00:15:23,360 --> 00:15:26,150 Así que en otras palabras, las galletas, que ha recibido una mala reputación desde hace algún tiempo 259 00:15:26,150 --> 00:15:29,990 a causa de la inseguridad en los navegadores y que realmente puede violar nuestra privacidad y todo esto, 260 00:15:29,990 --> 00:15:31,900 en realidad tienen una gran utilidad ya que sin ellos 261 00:15:31,900 --> 00:15:36,110 que constantemente se inicie sesión en cada página Facebook visitas 262 00:15:36,110 --> 00:15:40,680 o todos los correos electrónicos de Gmail que leer si el navegador no tuviera alguna manera de recordar 263 00:15:40,680 --> 00:15:43,320 que ya ha autenticado. 264 00:15:43,320 --> 00:15:46,640 >> Así que de esta manera se envían las cookies de ida y vuelta a través del cable. 265 00:15:46,640 --> 00:15:52,470 Otra curiosidad acerca de las cookies, sobre todo aquí, es que esto es completamente sin cifrar. 266 00:15:52,470 --> 00:15:54,930 No hay cifrado pasando aquí en absoluto, 267 00:15:54,930 --> 00:15:57,240 y de hecho estoy usando HTTP en el momento. 268 00:15:57,240 --> 00:16:00,890 Uno de nuestros momentos favoritos en CS50, que ahora es de 2 años, 269 00:16:00,890 --> 00:16:04,750 fue alrededor del tiempo de una herramienta llamada Firesheep salió. 270 00:16:04,750 --> 00:16:08,320 Este era un fanático de la descarga que fue hecho por un investigador de seguridad 271 00:16:08,320 --> 00:16:13,250 como una llamada de atención para la comunidad de decir cuán atrozmente implementado 272 00:16:13,250 --> 00:16:17,900 ciertos mecanismos de autenticación en la red eran. 273 00:16:17,900 --> 00:16:22,880 Así por algún tiempo, Facebook era casi enteramente a través de HTTP, HTTPS no. 274 00:16:22,880 --> 00:16:25,640 E incluso si usted no tiene idea de cómo funciona el cifrado, S es seguro 275 00:16:25,640 --> 00:16:27,950 lo que significa que hay por lo menos algunos cifrados. 276 00:16:27,950 --> 00:16:30,610 Facebook se utiliza para cifrar los nombres de usuario y contraseñas, 277 00:16:30,610 --> 00:16:33,560 pero tan pronto como lo hiciste con tu pokes o sus mensajes o su servicio de noticias, 278 00:16:33,560 --> 00:16:35,360 todo eso fue sin cifrar. 279 00:16:35,360 --> 00:16:37,870 Así fue hasta que Gmail sólo un año o dos atrás. 280 00:16:37,870 --> 00:16:41,100 Cada vez que usted ha entrado en sí, que utiliza cifrado seguro 281 00:16:41,100 --> 00:16:44,300 pero después no lo hicieron. ¿Y por qué podría ser? 282 00:16:44,300 --> 00:16:49,210 ¿Por qué no utilizar la criptografía todo el tiempo en los casos de uso de este tipo? 283 00:16:49,210 --> 00:16:53,700 ¿Qué es eso? Creo que he oído algo. [Estudiante] Velocidad. 284 00:16:53,700 --> 00:16:56,250 Velocidad, ¿no? Hay maneras de evitar esto. 285 00:16:56,250 --> 00:16:59,610 Pero si sólo un poco de pensar en ello, lógicamente, si cifra algo, 286 00:16:59,610 --> 00:17:01,820 lo que tienes que hacer por lo menos un poco más de trabajo. 287 00:17:01,820 --> 00:17:05,460 En pset 2 cuando usted implementa César o Vigenére o grieta, incluso, 288 00:17:05,460 --> 00:17:07,760 sólo imprime una cadena es relativamente fácil. 289 00:17:07,760 --> 00:17:12,040 Cifrar y luego imprimir una cadena mínimamente requiere un poco más. 290 00:17:12,040 --> 00:17:14,520 >>  Para los súper populares sitios web como Google y Facebook, 291 00:17:14,520 --> 00:17:18,839 si usted tiene que hacer más trabajo para cada usuario para cada página web única que visitan, 292 00:17:18,839 --> 00:17:20,520 que sólo se necesita más tiempo de CPU. 293 00:17:20,520 --> 00:17:22,920 Y si usted necesita más tiempo de CPU, es posible que necesite más servidores, 294 00:17:22,920 --> 00:17:24,270 lo que significa que usted puede ser que necesite más dinero. 295 00:17:24,270 --> 00:17:27,579 Y así, durante muchos años, este realmente no era la mejor práctica. 296 00:17:27,579 --> 00:17:31,440 La gente utiliza cifrado SSL sólo cuando era necesario. 297 00:17:31,440 --> 00:17:34,960 Pero resultó, y como este tipo con Firesheep hizo súper clara, 298 00:17:34,960 --> 00:17:37,920 cuando ustedes que se encuentran actualmente en Facebook en este momento - 299 00:17:37,920 --> 00:17:39,880 Por curiosidad, a ver si va a confesar. 300 00:17:39,880 --> 00:17:42,620 Si estás en Facebook ahora mismo en alguna pestaña, incluso si no está en primer plano, 301 00:17:42,620 --> 00:17:46,610 es la dirección URL HTTP o HTTPS? 302 00:17:46,610 --> 00:17:50,560 [Los estudiantes] varias S. S? [Risas] 303 00:17:50,560 --> 00:17:55,510 Bien. Cualquier HTTP? A sólo 1? Bien. 304 00:17:55,510 --> 00:17:58,940 Así que todos podemos hackear cuenta de ese tipo Facebook en estos momentos. 305 00:17:58,940 --> 00:18:04,100 En su mayor parte, esto se ha convertido activada de forma predeterminada, por lo menos en algunos sitios web. 306 00:18:04,100 --> 00:18:08,120 Y cuento largo, si el tráfico de su web no está cifrada, 307 00:18:08,120 --> 00:18:12,960 no sólo el código HTML ir y venir a través de las wifis sin cifrar, 308 00:18:12,960 --> 00:18:16,760 así que cosas como las galletas van y vienen todo el aire 309 00:18:16,760 --> 00:18:18,940 sin ningún tipo de encriptación. 310 00:18:18,940 --> 00:18:23,540 Así que si tienes un poco de sentido común de programación o un poco de google habilidades 311 00:18:23,540 --> 00:18:27,410 para encontrar software libre que hace esto, lo único que tienes que hacer es sentarse en Starbucks 312 00:18:27,410 --> 00:18:30,680 o sentarse en un aeropuerto donde hay generalmente no cifrado WiFi 313 00:18:30,680 --> 00:18:36,070 y mira por palabras claves como Set-Cookie: o PHPSESSID 314 00:18:36,070 --> 00:18:39,300 porque si usted tiene el conocimiento técnico para ver sólo el WiFi 315 00:18:39,300 --> 00:18:43,010 para todos los bits que fluyen a través del aire para este patrón, 316 00:18:43,010 --> 00:18:50,840 entonces se puede decir que PHPSESSID chico resulta ser bo8dal y así sucesivamente. 317 00:18:50,840 --> 00:18:53,890 Y luego otra vez si eres lo suficientemente experto en tecnología o tener la herramienta adecuada, 318 00:18:53,890 --> 00:18:58,890 a continuación, puede simplemente volver a configurar su propio navegador para iniciar la presentación de ese sello en la mano 319 00:18:58,890 --> 00:19:05,030 a Facebook.com, y Facebook es sólo va a suponer que usted es ese tipo 320 00:19:05,030 --> 00:19:09,880 porque todo lo que saben no es lo que eres, sino que tiene el siguiente identificador único. 321 00:19:09,880 --> 00:19:14,650 Así que si usted roba ese identificador único y presentarlo al servidor web como el suyo propio, 322 00:19:14,650 --> 00:19:16,860 que sólo se va a mostrar a esa persona feed de noticias 323 00:19:16,860 --> 00:19:18,980 o de esa persona mensajes o toques. 324 00:19:18,980 --> 00:19:23,190 >> Y yo haría Google ahora cómo activar HTTPS en Facebook, tal vez. 325 00:19:23,190 --> 00:19:25,150 Pero realmente es tan simple como eso. 326 00:19:25,150 --> 00:19:27,660 Y así, Facebook y Google y similares se han puesto realmente bueno en esto, 327 00:19:27,660 --> 00:19:31,870 pero mantener un ojo hacia fuera aún más por los sitios web que visite que no utilizan HTTP 328 00:19:31,870 --> 00:19:35,020 y tienen algún tipo de información sensible en ellos, 329 00:19:35,020 --> 00:19:37,490 ya sea financiera o personal o similar. 330 00:19:37,490 --> 00:19:43,180 Si no está utilizando esta, muy posiblemente puede ser galletas como este muy fácilmente robados 331 00:19:43,180 --> 00:19:46,270 y luego forjada, y eso es exactamente lo que hizo Firesheep. 332 00:19:46,270 --> 00:19:48,250 Usted no tiene que ser un programador. 333 00:19:48,250 --> 00:19:51,680 Todo lo que tenía que hacer era tener una conexión a Internet, descarga esta herramienta gratuita, 334 00:19:51,680 --> 00:19:56,490 y lo que haría es que se conecte y luego le mostrará los nombres de Facebook 335 00:19:56,490 --> 00:20:00,170 de todos en Sanders, en esta demostración particular, a su alrededor 336 00:20:00,170 --> 00:20:03,260 y todo lo que tenía que hacer era hacer clic en su nombre y el software automatizado el proceso 337 00:20:03,260 --> 00:20:05,970 de oler esa cookie, presentando a Facebook como el suyo propio, 338 00:20:05,970 --> 00:20:07,990 y, voila, usted está registrado 339 00:20:07,990 --> 00:20:11,190 Así que este es otro de esos "no hagas esto" oficialmente. 340 00:20:11,190 --> 00:20:14,660 Si usted tiene su propia red doméstica y desea retocar, por todos los medios, 341 00:20:14,660 --> 00:20:17,530 pero se dan cuenta que esto hace cruzar la línea en un entorno universitario. 342 00:20:17,530 --> 00:20:20,030 >> Pero el objetivo aquí es realmente para destacar no cómo hacerlo 343 00:20:20,030 --> 00:20:22,320 pero la forma de defenderse de este tipo de cosas. 344 00:20:22,320 --> 00:20:26,180 Y la solución trivial aquí, a pesar de que ella misma es defectuosa, 345 00:20:26,180 --> 00:20:31,360 es reducir realmente el uso de sitios que no utilizan HTTPS constantemente. 346 00:20:31,360 --> 00:20:34,520 Así que sitios como Facebook y Google tienen cada vez más casillas de verificación 347 00:20:34,520 --> 00:20:36,200 donde se puede optar por este tipo de cosas, 348 00:20:36,200 --> 00:20:40,000 y los bancos han tenido esto durante años por razones similares. 349 00:20:40,000 --> 00:20:43,580 Así que un poco de un factor de miedo si podemos. Pero eso es en pocas palabras. 350 00:20:43,580 --> 00:20:46,420 Así es como un servidor recuerde quién es usted. 351 00:20:46,420 --> 00:20:50,760 Y tan pronto como puedan recordar quiénes son, pueden recordar nada de ti 352 00:20:50,760 --> 00:20:56,140 que el programador ha almacenado en el interior de este superglobal especial llamada $ _SESSION. 353 00:20:56,140 --> 00:20:59,750 Y para pset 7 lo estamos usando trivialmente sólo para recordar un int, 354 00:20:59,750 --> 00:21:02,260 a saber, la identificación única del usuario que ha iniciado sesión, 355 00:21:02,260 --> 00:21:05,880 por lo que sabemos que han estado allí antes. 356 00:21:05,880 --> 00:21:12,450 Cualquier pregunta entonces sobre las sesiones o las cookies o similares? 357 00:21:12,450 --> 00:21:15,130 Firesheep no funciona tan bien ya, 358 00:21:15,130 --> 00:21:18,310 y tienes que poner el equipo en un modo promiscuo especial 359 00:21:18,310 --> 00:21:20,700 por lo que en realidad estás escuchando el tráfico además de ustedes mismos. 360 00:21:20,700 --> 00:21:23,940 Así que si usted está descargando actualmente Firesheep, hazlo realidad no es tan fácil 361 00:21:23,940 --> 00:21:26,850 como lo era antes de demostrar. 362 00:21:26,850 --> 00:21:29,070 Está bien. Y no lo hacen en Sanders. Hazlo en casa. 363 00:21:29,070 --> 00:21:30,890 Bases de datos. 364 00:21:30,890 --> 00:21:33,580 Una de las cosas que hicimos en el conjunto de procesadores 7 muy deliberadamente 365 00:21:33,580 --> 00:21:37,780 Se le dará una tabla de base de datos de la muestra para los usuarios que tiene algunos identificadores de usuario, 366 00:21:37,780 --> 00:21:41,020 algunos nombres de usuario, contraseñas encriptadas y algunos en el mismo. 367 00:21:41,020 --> 00:21:44,520 Y como verás, si no lo ha hecho, usted va a tener que cambiar la mesa un poco. 368 00:21:44,520 --> 00:21:47,710 Vas a tener que añadir un poco de caché para cada uno de los usuarios en esa mesa, 369 00:21:47,710 --> 00:21:51,130 y vas a tener que agregar otra tabla de historia, una mesa de carteras, 370 00:21:51,130 --> 00:21:53,310 o tal vez llamarlo de otra manera. 371 00:21:53,310 --> 00:21:56,740 Pero en términos de pensar acerca de cómo hacer esto, vamos a abrir esta herramienta 372 00:21:56,740 --> 00:22:00,570 que utilizamos el viernes, pero si no familiar, el aparato viene con una herramienta 373 00:22:00,570 --> 00:22:04,680 phpMyAdmin que se llama casualmente escrito en PHP, 374 00:22:04,680 --> 00:22:07,950 pero su propósito en la vida, después de iniciar sesión aquí como jharvard con carmesí, 375 00:22:07,950 --> 00:22:15,160 es que me diera una manera fácil de usar de ver y cambiar mi base de datos. 376 00:22:15,160 --> 00:22:18,040 >> La base de datos que estoy corriendo en el dispositivo que se llama MySQL. 377 00:22:18,040 --> 00:22:23,420 Esto es muy popular, y es una base de datos de código abierto que es maravillosamente fácil de usar, 378 00:22:23,420 --> 00:22:25,620 especialmente con extremos delanteros de esta manera. 379 00:22:25,620 --> 00:22:29,350 Lo que esta herramienta me permite hacer, por ejemplo, es hurgar tablas. 380 00:22:29,350 --> 00:22:30,890 Déjame ir adelante y hacerlo. 381 00:22:30,890 --> 00:22:36,580 El viernes creamos una tabla llamada alumnos que era super simple. 382 00:22:36,580 --> 00:22:41,680 Tenía 3 columnas - id, nombre y correo electrónico - y se inserta manualmente un par de filas 383 00:22:41,680 --> 00:22:44,420 como David y Mike en este ejemplo particular. 384 00:22:44,420 --> 00:22:47,290 Veamos esto un poco más, y vamos a suponer que queremos recordar más 385 00:22:47,290 --> 00:22:49,660 que sólo el nombre y el correo electrónico de un usuario. 386 00:22:49,660 --> 00:22:53,090 Permítanme haga clic en Estructura aquí en la parte superior. 387 00:22:53,090 --> 00:22:55,440 Y otra vez, el conjunto de procesadores le guía por los pasos necesarios aquí, 388 00:22:55,440 --> 00:22:58,150 así que no te preocupes si algo de esto es un poco rápido. 389 00:22:58,150 --> 00:22:59,690 Entonces voy a hacer clic aquí. 390 00:22:59,690 --> 00:23:02,270 Voy a añadir un cierto número de columnas que siguen email 391 00:23:02,270 --> 00:23:04,130 porque quiero añadir algo como casa. 392 00:23:04,130 --> 00:23:06,640 Me olvidé de registrar la casa de un estudiante. 393 00:23:06,640 --> 00:23:11,400 Permítanme hacer clic en Ir, y ahora tenemos esta forma que por desgracia es un poco amplio de izquierda a derecha, 394 00:23:11,400 --> 00:23:13,710 pero yo voy a llamar el nombre de esta casa de campo, 395 00:23:13,710 --> 00:23:16,050 y entonces el tipo que ahora tiene que elegir. 396 00:23:16,050 --> 00:23:18,870 Así que vamos a tener una breve charla sobre los distintos tipos de MySQL 397 00:23:18,870 --> 00:23:24,590 porque mientras que PHP es tipos débiles y que tipo de juega rápido y libremente con los tipos, 398 00:23:24,590 --> 00:23:29,430 en una base de datos especial que es super importante usar realmente escribiendo a su ventaja 399 00:23:29,430 --> 00:23:33,260 porque una de las cosas MySQL y otros motores de base de datos puede hacer por usted 400 00:23:33,260 --> 00:23:37,910 es asegurarse de que usted no pone datos falsos en su base de datos. 401 00:23:37,910 --> 00:23:41,850 Esta es una especie de error de cheques gratis a su disposición. 402 00:23:41,850 --> 00:23:46,250 >> En casa somos nosotros, obviamente, no queremos que sea un int, que es un valor de 32-bit en MySQL. 403 00:23:46,250 --> 00:23:49,810 Hicimos hablar brevemente el viernes sobre varchar, que significa carbón longitud variable. 404 00:23:49,810 --> 00:23:54,720 ¿Qué es esto? Esto le permite especificar que desea que se trata de una cadena de algún tipo. 405 00:23:54,720 --> 00:23:56,840 No se sabe muy bien de antemano cuánto tiempo es, 406 00:23:56,840 --> 00:24:00,100 por lo que voy a decir arbitrariamente un nombre de la casa puede ser de 255 caracteres, 407 00:24:00,100 --> 00:24:04,190 pero se puede ir con 32, 64 - un número realmente. 408 00:24:04,190 --> 00:24:10,700 Pero la ventaja de utilizar un varchar sobre un campo llamado char es lo que? 409 00:24:10,700 --> 00:24:15,110 Sólo intuitivamente si me desplazo hasta aquí, note que hay char y varchar hay. 410 00:24:15,110 --> 00:24:19,520 Varchar es la longitud de caracteres variable; char es una longitud fija de caracteres. 411 00:24:19,520 --> 00:24:24,730 Así que basado sólo en esa definición, ¿cuál es la ventaja o desventaja de cada uno de estos? 412 00:24:24,730 --> 00:24:30,490 En otras palabras, que se preocupa por la distinción, o por qué te importa? 413 00:24:31,660 --> 00:24:35,750 >> Si. [Estudiante] Varchar tiene más flexibilidad, pero ocupa más memoria. 414 00:24:35,750 --> 00:24:40,730 Bueno. Varchar ocupa más - Vamos a ver. No estoy seguro si he oído ese derecho. 415 00:24:40,730 --> 00:24:42,360 ¿Se puede decir que una vez más? 416 00:24:42,360 --> 00:24:45,850 [Estudiante] dije varchar probablemente tiene más flexibilidad pero ocupa más memoria. 417 00:24:45,850 --> 00:24:51,170 Interesante. Bien. Varchar probablemente le da más flexibilidad, pero ocupa más memoria. 418 00:24:51,170 --> 00:24:53,220 Este último no es necesariamente cierto. 419 00:24:53,220 --> 00:24:56,290 Depende del contexto, pero vamos a volver a eso. 420 00:24:56,290 --> 00:25:03,230 >> [Respuesta de los estudiantes inaudible] Exactamente. 421 00:25:03,230 --> 00:25:06,900 De hecho, es el caso que char suele utilizar más memoria 422 00:25:06,900 --> 00:25:10,950 porque un char, como en C, es como una cadena, es una serie de caracteres. 423 00:25:10,950 --> 00:25:13,690 Así que si te dicen que un campo char de longitud 255, 424 00:25:13,690 --> 00:25:16,910 la base de datos es, literalmente, te va a dar 255 caracteres. 425 00:25:16,910 --> 00:25:22,290 Y si la casa termina siendo personajes Mather y 6 en total, 426 00:25:22,290 --> 00:25:25,090 usted está perdiendo más de 200 caracteres. 427 00:25:25,090 --> 00:25:29,640 >> Así que un varchar efectivamente sólo utiliza tantos caracteres como sea necesario 428 00:25:29,640 --> 00:25:31,590 hasta un importe máximo. 429 00:25:31,590 --> 00:25:35,470 Pero el precio que se paga es en realidad el rendimiento, potencialmente. 430 00:25:35,470 --> 00:25:39,740 Si usted sabe de antemano que todas sus cadenas van a ser de 8 caracteres - 431 00:25:39,740 --> 00:25:43,090 Por ejemplo, suponga que requieren contraseñas de longitud 8 - 432 00:25:43,090 --> 00:25:47,350 la ventaja de utilizar un campo char de vez en cuando, aunque no a menudo, 433 00:25:47,350 --> 00:25:51,100 es especificar una longitud fija para algo así como una contraseña 434 00:25:51,100 --> 00:25:53,300 porque ahora la base de datos puede ser aún más inteligente. 435 00:25:53,300 --> 00:25:58,160 Si se sabe que cada campo char, cada cadena en una columna es la misma longitud, 436 00:25:58,160 --> 00:26:00,780 a recuperar la función de acceso aleatorio. 437 00:26:00,780 --> 00:26:05,110 Usted puede saltar entre los campos char diversas en la tabla de base de datos 438 00:26:05,110 --> 00:26:07,940 porque pensar en una base de datos como filas y columnas. 439 00:26:07,940 --> 00:26:11,670 Así que si cada una de las cadenas de la misma longitud, 440 00:26:11,670 --> 00:26:17,820 Sabía usted que la primera es en el byte 0, el siguiente es el byte 8 441 00:26:17,820 --> 00:26:20,240 y luego 16 y luego 24 y así sucesivamente. 442 00:26:20,240 --> 00:26:24,500 Así que si todas las cuerdas son de la misma longitud, puede saltar mucho más eficiente. 443 00:26:24,500 --> 00:26:26,710 Así que puede ser un beneficio en términos de rendimiento, 444 00:26:26,710 --> 00:26:29,420 pero por lo general usted no tiene el lujo de saber de antemano, 445 00:26:29,420 --> 00:26:32,170 por lo que un varchar es el camino a seguir. 446 00:26:32,170 --> 00:26:36,030 Aquí hay otro detalle que incluso Facebook encontré con el tiempo. 447 00:26:36,030 --> 00:26:39,670 Ints son geniales, y nos tipo de utilizarlos de forma predeterminada cada vez que queramos un número, 448 00:26:39,670 --> 00:26:41,750 pero es sólo 32 bits. 449 00:26:41,750 --> 00:26:46,210 >> Y a pesar de que Facebook no acaba de tener 4 mil millones de usuarios ahora, 450 00:26:46,210 --> 00:26:48,680 definitivamente hay algunas personas por ahí con varias cuentas 451 00:26:48,680 --> 00:26:50,960 o las cuentas que se han abierto y cerrado, 452 00:26:50,960 --> 00:26:55,130 y por lo mismo creo que Facebook hace unos años tuvo la transición de int 453 00:26:55,130 --> 00:27:00,010 que, como es bien llamado, bigint, que está a sólo 64 bits en su lugar. 454 00:27:00,010 --> 00:27:02,230 Así que esto también es una decisión de diseño. 455 00:27:02,230 --> 00:27:06,570 Usted sería increíblemente afortunado si su proyecto final se convierte en el inicio, 456 00:27:06,570 --> 00:27:10,010 Dispone de 4 millones de dólares y los usuarios 1, más o menos, 457 00:27:10,010 --> 00:27:13,200 en cuyo caso el uso ints podría ser un poco miope. 458 00:27:13,200 --> 00:27:16,230 Pero, en realidad, su tabla de usuarios está probablemente muy bien con ints. 459 00:27:16,230 --> 00:27:19,340 Pero para que algo como pset 7, como su tabla de historia, 460 00:27:19,340 --> 00:27:23,700 es posible que tenga miles, millones de usuarios si convertirse en etrade.com. 461 00:27:23,700 --> 00:27:26,020 Así que, puede que no tenga más de 4 mil millones de usuarios, 462 00:27:26,020 --> 00:27:30,070 aquellos usuarios que sí tienen pueden tener más de 4 mil millones de transacciones a través del tiempo - 463 00:27:30,070 --> 00:27:33,200 compra y vende y las cosas en su historia. 464 00:27:33,200 --> 00:27:38,090 Así que si usted hace prever - una vez más, estos son buenos problemas a tener si usted tiene esta cantidad de datos - 465 00:27:38,090 --> 00:27:40,920 si lo hace anticipar datos que superan el tamaño de un int, 466 00:27:40,920 --> 00:27:47,740 ir con algo como bigint es una dirección que no con la frecuencia suficiente adoptado por los diseñadores 467 00:27:47,740 --> 00:27:49,710 porque figura gente que no va a ser un problema, 468 00:27:49,710 --> 00:27:51,930 pero es tan fácil de elegir algo más grande que eso. 469 00:27:51,930 --> 00:27:55,380 Decimal que estamos usando en pset 7, que especifica la precisión fija 470 00:27:55,380 --> 00:27:59,840 por lo que puede evitar los problemas relacionados con los flotadores y dobles y reales y similares. 471 00:27:59,840 --> 00:28:02,440 >> Y luego hay algunos otros campos aquí. Vamos a agitar las manos en ellos hasta cierto punto. 472 00:28:02,440 --> 00:28:07,270 Sin embargo, las fechas, horas tienen un formato establecido en MySQL, 473 00:28:07,270 --> 00:28:10,830 y la ventaja de almacenar fechas como fechas y VARCHAR no 474 00:28:10,830 --> 00:28:15,730 significa que la base de datos en realidad se puede cambiar el formato en diferentes formatos, 475 00:28:15,730 --> 00:28:18,800 si un formato de EE.UU. o formato europeo o similar - sin embargo usted lo desea - 476 00:28:18,800 --> 00:28:22,700 mucho más eficiente que si se tratara de algo genérico varchar. 477 00:28:22,700 --> 00:28:25,150 Y luego hay algunos otros binario, varbinary blobs. 478 00:28:25,150 --> 00:28:28,580 Estos son objetos binarios grandes, y también puede almacenar datos binarios 479 00:28:28,580 --> 00:28:30,750 así como los datos geométricos en una base de datos. 480 00:28:30,750 --> 00:28:34,350 Pero para nosotros, por lo general va a importa enteros y VARCHAR y similares. 481 00:28:34,350 --> 00:28:36,230 Vamos a terminar con este ejemplo casa. 482 00:28:36,230 --> 00:28:40,030 Casa que voy a decir arbitrariamente en 255 caracteres. 483 00:28:40,030 --> 00:28:42,850 A continuación, el valor por defecto que pudiéramos hacer esto. 484 00:28:42,850 --> 00:28:47,440 Podríamos poner a todos de forma predeterminada en Mather House, por ejemplo. 485 00:28:47,440 --> 00:28:49,710 Así es como podríamos especificar que la base de datos 486 00:28:49,710 --> 00:28:52,460 debe asegurarse de que siempre hay alguien que tiene un valor. Pero voy a dejar que sea. 487 00:28:52,460 --> 00:28:55,270 De hecho, para las personas que viven fuera de la escuela y no en una casa, 488 00:28:55,270 --> 00:28:59,590 tal vez yo realmente desea especificar que el valor predeterminado de la casa es NULL, 489 00:28:59,590 --> 00:29:04,890 y luego tengo que marcar esta casilla y decirle a la base de datos que está bien si la casa del usuario es NULL. 490 00:29:04,890 --> 00:29:07,270 >> Una vez más, este es otro mecanismo de defensa que puede poner en su lugar 491 00:29:07,270 --> 00:29:10,590 por lo que no tienen ni siquiera para ponerlo en el código PHP necesariamente. 492 00:29:10,590 --> 00:29:14,630 La base de datos se asegurará de que las cosas son o no son NULL. 493 00:29:14,630 --> 00:29:17,310 Y por último, Atributos. 494 00:29:17,310 --> 00:29:18,920 Ninguno de estos son realmente relevantes. 495 00:29:18,920 --> 00:29:22,880 Binario sin signo - ninguno de esos son relevantes para una varchar. 496 00:29:22,880 --> 00:29:24,220 Index. 497 00:29:24,220 --> 00:29:27,320 ¿Alguien sabe o no recuerda o tiene una conjetura en cuanto a lo que es un índice 498 00:29:27,320 --> 00:29:29,510 por algo como la casa? 499 00:29:29,510 --> 00:29:35,240 También esto es en realidad una decisión de diseño importante y relativamente fácil. 500 00:29:35,240 --> 00:29:39,200 Para aquellos que aún no la han visto, el viernes hablamos brevemente sobre las claves principales. 501 00:29:39,200 --> 00:29:43,240 En una tabla de base de datos, una clave primaria es el campo o columna 502 00:29:43,240 --> 00:29:46,270 que identifica de forma única las filas en la tabla. 503 00:29:46,270 --> 00:29:49,150 Así, en la tabla actual que tenemos identificaciones, tenemos nombres y correos electrónicos. 504 00:29:49,150 --> 00:29:52,050 ¿Cuál de ellos es el mejor candidato para ser una clave principal, 505 00:29:52,050 --> 00:29:55,810 cuya función consiste en identificar de forma única las filas? 506 00:29:55,810 --> 00:29:57,530 Probablemente ID. 507 00:29:57,530 --> 00:29:59,930 Sin duda, también podríamos usar lo que sin embargo? 508 00:29:59,930 --> 00:30:02,860 Tal vez usted podría utilizar el correo electrónico debido a que en teoría es único 509 00:30:02,860 --> 00:30:05,380 a menos que la gente está compartiendo cuentas de correo electrónico. 510 00:30:05,380 --> 00:30:09,980 Pero la realidad es que si usted está utilizando un ID numérico como 1234, 511 00:30:09,980 --> 00:30:14,170 eso es sólo de 32 bits, mientras que una dirección de correo electrónico podría ser esta cantidad de bytes o bytes que este. 512 00:30:14,170 --> 00:30:16,610 Así que en términos de eficiencia de los identificadores únicos, 513 00:30:16,610 --> 00:30:19,270 que tiende a ser buena práctica sólo para utilizar un int 514 00:30:19,270 --> 00:30:23,090 incluso si usted tiene algún candidato cadena que sin duda podría utilizar. 515 00:30:23,090 --> 00:30:26,760 >> Para algo como la casa, esto no debería ser una clave principal 516 00:30:26,760 --> 00:30:30,770 porque entonces sólo una persona podía vivir en Mather y 1 persona de Currier y similares. 517 00:30:30,770 --> 00:30:32,790 Del mismo modo, esto no debe ser única. 518 00:30:32,790 --> 00:30:37,830 La diferencia entre el primario y único es que en el caso de nuestra tabla actual, 519 00:30:37,830 --> 00:30:42,620 ID sería primario pero el correo electrónico no es primario por la razón que acabamos de mencionar - 520 00:30:42,620 --> 00:30:44,740 rendimiento - pero todavía debe ser único. 521 00:30:44,740 --> 00:30:47,200 Por lo que aún puede forzar unicidad sin hacer la reclamación 522 00:30:47,200 --> 00:30:49,520 que es un súper campo primario importante. 523 00:30:49,520 --> 00:30:52,610 Pero este es bastante útil: Index. 524 00:30:52,610 --> 00:30:56,180 Si usted sabe de antemano por su proyecto final, para pset 7, o en general, 525 00:30:56,180 --> 00:30:59,480 que esta casa de campo va a ser algo que usted busca en un terreno 526 00:30:59,480 --> 00:31:01,910 usando la palabra clave de selección o de alguna otra cosa, 527 00:31:01,910 --> 00:31:05,180 entonces preventivamente puede decir la base de datos para trabajar su magia 528 00:31:05,180 --> 00:31:10,510 y asegurarse de que se crea en la memoria de cualquier estructura de datos lujo necesario 529 00:31:10,510 --> 00:31:13,770 para agilizar las búsquedas basadas en casa. 530 00:31:13,770 --> 00:31:17,860 Tal vez pueda utilizar una tabla hash, tal vez va a utilizar una lista enlazada. 531 00:31:17,860 --> 00:31:21,260 En realidad, se tiende a utilizar un árbol, a menudo una estructura llamada B-tree - 532 00:31:21,260 --> 00:31:24,090 no es un árbol binario pero el árbol B-- que es un árbol muy grande 533 00:31:24,090 --> 00:31:27,370 que se pueden ver en una clase como CS124, la clase de estructuras de datos. 534 00:31:27,370 --> 00:31:31,800 Pero en fin, usted no tiene que preocuparse de que al utilizar el software de base de datos inteligente. 535 00:31:31,800 --> 00:31:35,890 Usted puede simplemente decir, "Índice de este campo, así que puede buscar en él de manera más eficiente." 536 00:31:35,890 --> 00:31:40,250 >> Si deja este apagado y usted trata de buscar para cada uno en la base de datos que reside en Mather, 537 00:31:40,250 --> 00:31:42,710 que recaerá en búsqueda lineal. 538 00:31:42,710 --> 00:31:45,360 Y si usted tiene 6.000 estudiantes de licenciatura todos los que viven en una casa, 539 00:31:45,360 --> 00:31:47,900 usted va a buscar en toda la tabla para encontrar las Matherites, 540 00:31:47,900 --> 00:31:52,190 mientras que si usted dice Index, espero que sea algo cercano a una búsqueda logarítmica 541 00:31:52,190 --> 00:31:54,510 para encontrar este tipo de estudiantes. 542 00:31:54,510 --> 00:31:56,750 Esto es sólo una función gratuita para encender, 543 00:31:56,750 --> 00:31:59,530 a pesar de que viene a un precio de una cierta cantidad de espacio. 544 00:31:59,530 --> 00:32:02,690 Por último, el incremento automático, este campo AI, 545 00:32:02,690 --> 00:32:05,830 Sólo significa que si se trata de un entero y no quiere cuidar a incrementarlo usted mismo 546 00:32:05,830 --> 00:32:07,570 cada vez que hay un nuevo usuario, comprobar que, 547 00:32:07,570 --> 00:32:11,910 y cada usuario que se inserta automáticamente obtendrá una nueva identificación. 548 00:32:11,910 --> 00:32:15,620 Vamos a hacer clic en Guardar, y ahora vamos a encontrar ningún defecto con este diseño. 549 00:32:15,620 --> 00:32:20,200 Si entro en Browse, observe que tanto Mike y mi casa es NULL. 550 00:32:20,200 --> 00:32:22,420 Puedo utilizar phpMyAdmin para editar este manual. 551 00:32:22,420 --> 00:32:25,110 Yo puedo entrar aquí y escriba Mather y luego pulsa Enter, 552 00:32:25,110 --> 00:32:27,740 y ahora cuenta de la tabla es diferente. 553 00:32:27,740 --> 00:32:29,270 Pero note que podía hacer algo más también. 554 00:32:29,270 --> 00:32:33,530 Identificación de David es 1, así que de nuevo phpMyAdmin es una herramienta administrativa; 555 00:32:33,530 --> 00:32:35,970 esto no es algo que los usuarios son cada vez va a ver. 556 00:32:35,970 --> 00:32:38,810 Así que si en vez haga clic en la ficha SQL encima de la tapa - 557 00:32:38,810 --> 00:32:41,450 y otra vez, pset 7 le dará a conocer más de estas consultas - 558 00:32:41,450 --> 00:32:45,260 Me puede ejecutar manualmente el comando SQL Lenguaje de consulta estructurado 559 00:32:45,260 --> 00:32:56,410 Usuarios UPDATE SET casa = 'Pfoho' WHERE id = 1. 560 00:32:56,410 --> 00:33:00,830 Estas consultas SQL son, bien poco, bastante legible de izquierda a derecha. 561 00:33:00,830 --> 00:33:04,350 Actualización de la tabla de usuarios, establezca el campo llamado casa a Pfoho 562 00:33:04,350 --> 00:33:06,830 donde el ID del usuario es 1. 563 00:33:06,830 --> 00:33:11,480 O incluso podría hacer que email = 'malan@harvard.edu'. 564 00:33:11,480 --> 00:33:14,860 Mientras que únicamente me identifica, que pueden funcionar tan bien. 565 00:33:14,860 --> 00:33:18,810 Pero Identificación tiende a ser más alto rendimiento, por lo que vamos a hacer eso. 566 00:33:18,810 --> 00:33:22,950 Vamos, haga clic en Ir. Bueno, lecture.users no existe. ¿Cuál es mi error? 567 00:33:22,950 --> 00:33:26,220 ¿Cuál es la mesa en realidad se llama aquí? 568 00:33:26,220 --> 00:33:28,770 Se llama a los estudiantes simplemente porque eso es lo que hemos hecho hasta aquí arriba a la izquierda. 569 00:33:28,770 --> 00:33:31,860 Se llama a los estudiantes no los usuarios. Entonces haga clic en Ir ahora. 570 00:33:31,860 --> 00:33:34,330 1 fila afectada. Consulta tomó 0,01 segundos. 571 00:33:34,330 --> 00:33:38,010 Si hago clic en Explorar ahora, ahora vive en Pfoho Malan. 572 00:33:38,010 --> 00:33:42,070 Así que esa es otra muestra de SQL, pero el conjunto de procesadores le guiará a través de más un poco de eso. 573 00:33:42,070 --> 00:33:44,710 >> Hay una decisión estúpida que ya he hecho aquí. 574 00:33:44,710 --> 00:33:47,820 Yo diría que este diseño de base de datos es ineficiente 575 00:33:47,820 --> 00:33:51,650 porque cuantas más personas que se suman a la mesa de los estudiantes, 576 00:33:51,650 --> 00:33:54,730 los más de nosotros que empezar a añadir, más de la TFS que empezar a añadir, 577 00:33:54,730 --> 00:33:58,320 vamos a empezar a ver lo que los despidos en esta mesa? 578 00:34:00,840 --> 00:34:06,020 >> Si. [Alumno] Viendo que está en los estudiantes, estamos usando la misma [inaudible] 579 00:34:06,020 --> 00:34:07,360 Lo mismo - Claro, exactamente. 580 00:34:07,360 --> 00:34:10,400 Entonces, si 400 personas viven en Mather, más o menos, 581 00:34:10,400 --> 00:34:15,000 finalmente esta tabla va a tener 400 filas que dicen "Mather", "Mather," 582 00:34:15,000 --> 00:34:16,590 "Mather", "Mather", "Mather". 583 00:34:16,590 --> 00:34:19,820 Estamos perdiendo todos estos bytes, y hay un par de robos de balón allí. 584 00:34:19,820 --> 00:34:23,080 1, está el caso de la esquina loca en la que si alguien paga un montón de dinero 585 00:34:23,080 --> 00:34:25,949 y cambia el nombre Mather, ahora tenemos que cambiar nuestra tabla de base de datos completa. 586 00:34:25,949 --> 00:34:29,730 Eso no va a ocurrir a menudo, aunque Pfoho una vez fue llamado North House hace 15 años, 587 00:34:29,730 --> 00:34:32,310 así sucede. Pero eso no es todo lo que convincente. 588 00:34:32,310 --> 00:34:36,000 Más convincente que un caso como ese rincón de la necesidad de actualizar los datos de forma masiva 589 00:34:36,000 --> 00:34:41,150 para una base de datos es ¿por qué almacenar MATHER una y otra vez y otra vez y otra vez? 590 00:34:41,150 --> 00:34:43,020 Eso es un montón de caracteres, 6 caracteres. 591 00:34:43,020 --> 00:34:45,500 ¿No podemos hacerlo mejor que eso, especialmente para Pforzheimer? 592 00:34:45,500 --> 00:34:48,320 Seguro que podemos hacer algo mejor que ese número de caracteres. 593 00:34:48,320 --> 00:34:51,790 ¿Por qué no asociar un identificador único a cada casa 594 00:34:51,790 --> 00:34:55,020 y la tienda que para cada usuario? Así que vamos a probar esto. 595 00:34:55,020 --> 00:35:00,610 En lugar de utilizar la tabla de los estudiantes, déjame ir a mi base de datos de lectura hasta aquí arriba a la izquierda. 596 00:35:00,610 --> 00:35:02,600 Nótese aquí que dice Crear tabla. 597 00:35:02,600 --> 00:35:04,550 Vamos a crear una tabla nueva llamada casas. 598 00:35:04,550 --> 00:35:08,880 El número de columnas va a ser 2. Intro. 599 00:35:08,880 --> 00:35:11,200 Ahora tengo dos campos. 600 00:35:11,200 --> 00:35:14,600 Voy a llamar a esto el nombre, y que va a ser un varchar de longitud 255, 601 00:35:14,600 --> 00:35:18,770 >> pero eso es bastante arbitraria. Déjame poner esto aquí por convención. 602 00:35:18,770 --> 00:35:22,840 Así que ponga una identificación aquí. Vamos a dar a cada casa un identificador único. 603 00:35:22,840 --> 00:35:25,360 Vamos a dar a cada casa un nombre. 604 00:35:25,360 --> 00:35:30,980 Vamos a especificar que el identificador no está firmado sólo por convención de utilizar sólo números positivos. 605 00:35:30,980 --> 00:35:35,020 Vamos a seguir adelante y dar a este un campo de incremento automático por ahora. 606 00:35:35,020 --> 00:35:38,160 Y ¿necesitamos algo más? 607 00:35:38,160 --> 00:35:41,010 Vamos a seguir adelante y haga clic en Guardar. 608 00:35:41,010 --> 00:35:42,480 Ahora tengo una segunda tabla. 609 00:35:42,480 --> 00:35:45,860 Observe como un aparte este es el comando SQL ligeramente críptica 610 00:35:45,860 --> 00:35:50,280 que habría tenido que escribir manualmente si no se utiliza una herramienta administrativa como phpMyAdmin. 611 00:35:50,280 --> 00:35:51,990 Así que otra razón por la que lo utilice. 612 00:35:51,990 --> 00:35:55,480 Es algo maravillosamente útil pedagógicamente porque puede hacer clic en torno a 613 00:35:55,480 --> 00:36:01,050 y averiguar cómo funcionan las cosas con sólo copiar y pegar lo que phpMyAdmin hizo. 614 00:36:01,050 --> 00:36:04,150 Sin embargo, el comando CREATE TABLE es lo ejecutado justo, y aquí está mi mesa. 615 00:36:04,150 --> 00:36:11,370 Déjame ir adelante ahora y usar SQL primas en lugar de simplificar demasiado, haga clic en la pestaña Insertar. 616 00:36:11,370 --> 00:36:15,040 Déjame hacer INSERT INTO casas, 617 00:36:15,040 --> 00:36:22,230 y yo voy a decir el nombre de la casa va a tener un valor de 'Mather. 618 00:36:22,230 --> 00:36:24,790 Eso es todo. Esta sintaxis es un poco más críptica. 619 00:36:24,790 --> 00:36:26,660 Este es el nombre de los campos que desee insertar. 620 00:36:26,660 --> 00:36:30,390 Estos son los valores que queremos insertar en esos campos. Permítanme hacer clic en Ir. 621 00:36:30,390 --> 00:36:34,410 1 fila insertada tomó 0,02 segundos. Permítanme haga clic en Examinar ahora. 622 00:36:34,410 --> 00:36:42,020 >> Observe si hago clic en Examinar, hay Mather, cuyo ID es la automatización del número 1. 623 00:36:42,020 --> 00:36:45,000 Permítanme hacer otro. Déjame ir a la pestaña SQL. 624 00:36:45,000 --> 00:36:52,950 INSERT INTO casas. El nombre de la casa va a tener un valor de Pfoho y así sucesivamente. 625 00:36:52,950 --> 00:36:56,350 Go. Y puedo seguir haciendo esto una y otra vez y otra vez. 626 00:36:56,350 --> 00:36:59,470 O si te aburres con phpMyAdmin, puedes usar la pestaña Insertar 627 00:36:59,470 --> 00:37:01,000 y no tener que escribir el código SQL en bruto. 628 00:37:01,000 --> 00:37:04,690 Usted sólo puede golpear a cabo con mayor rapidez al escribir, por ejemplo, Currier, Enter, 629 00:37:04,690 --> 00:37:07,610 y ahora, si hacemos clic en Examinar, hay Currier con un diámetro interior de 3. 630 00:37:07,610 --> 00:37:09,920 Así que esto es lo que queremos decir con incremento automático. 631 00:37:09,920 --> 00:37:12,280 Pero ahora tenemos que arreglar algo en los estudiantes. 632 00:37:12,280 --> 00:37:16,240 En lo que a los estudiantes si el tipo de datos del campo casa ahora ser? 633 00:37:16,240 --> 00:37:19,450 Debe ser un entero, ¿no? 634 00:37:19,450 --> 00:37:23,950 Así, el objetivo aquí es para excluir, también conocido como normalizar, las tablas 635 00:37:23,950 --> 00:37:27,940 de modo que nosotros no almacenamos información redundante en ninguno de mis cuadros. 636 00:37:27,940 --> 00:37:31,130 Y de nuevo, el camino que estaban aquí va a decir Mather, Mather, 637 00:37:31,130 --> 00:37:34,220 Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, que es muy redundante 638 00:37:34,220 --> 00:37:36,240 en términos de despilfarro de los caracteres. 639 00:37:36,240 --> 00:37:40,820 Así que permítanme seguir adelante y cambiar esto haciendo clic en Estructura, 640 00:37:40,820 --> 00:37:44,620 y déjame seguir adelante y marcar el campo de casa, haga clic en Cambiar 641 00:37:44,620 --> 00:37:46,990 y ahora me voy a cambiar esto sea un int. 642 00:37:46,990 --> 00:37:49,490 255 ya no es relevante. 643 00:37:49,490 --> 00:37:54,010 Déjenme seguir adelante y decir que está bien si todavía NULL. Guardar. 644 00:37:54,010 --> 00:37:55,870 Ahora los estudiantes de mesa ha sido alterado con éxito, 645 00:37:55,870 --> 00:37:59,090 y observe de nuevo la casa es un int. 646 00:37:59,090 --> 00:38:02,220 Como acotación al margen, ignora el número entre paréntesis cuando se trata de ints. 647 00:38:02,220 --> 00:38:03,770 >> Esto es por razones de herencia. 648 00:38:03,770 --> 00:38:06,920 De vuelta en el día en que no tenía GUIs, en su lugar había un entorno de línea de comandos, 649 00:38:06,920 --> 00:38:11,580 los 10 y 11, respectivamente, se especifican el número de caracteres que deben mostrar 650 00:38:11,580 --> 00:38:13,950 en la ventana de terminal para ver realmente los campos. 651 00:38:13,950 --> 00:38:19,150 No tiene nada que ver con la longitud en bits del campo real, por lo que sólo tendremos que hacer caso omiso de eso por ahora. 652 00:38:19,150 --> 00:38:20,990 Ahora tengo que entrar en esta tabla. 653 00:38:20,990 --> 00:38:24,610 Y si David vive en Mather, la casa no debe ser 0, 654 00:38:24,610 --> 00:38:27,350 que es un valor predeterminado int más cercano a NULL. 655 00:38:27,350 --> 00:38:29,810 Él debe vivir en la casa 1. 656 00:38:29,810 --> 00:38:36,870 Vamos a decir que arbitrariamente Mike vive en Pfoho casa, por lo que el número 2. 657 00:38:36,870 --> 00:38:40,160 Ahora mi mesa se ve un poco más críptico. 658 00:38:40,160 --> 00:38:41,960 Pero tenga en cuenta la eficiencia. 659 00:38:41,960 --> 00:38:44,860 Ahora estoy usando sólo 32 bits para identificar la casa, 660 00:38:44,860 --> 00:38:49,530 lo que significa que sólo hay una definición canónica de mi casa Mather y Pfoho 661 00:38:49,530 --> 00:38:52,090 y que está en la mesa de las casas. 662 00:38:52,090 --> 00:38:55,880 Así que si quiero a reunirse ahora estas tablas, pensar de esta manera. 663 00:38:55,880 --> 00:39:01,980 Aquí tengo mi mesa de los estudiantes, y en el lado derecho hay estos números, 1 y 2. 664 00:39:01,980 --> 00:39:04,180 1 es Mather, 2 es Pfoho. 665 00:39:04,180 --> 00:39:08,580 Tenemos los mismos números en esta otra tabla, que se llama casas, 666 00:39:08,580 --> 00:39:11,020 1 y 2 y 3 para las 3 casas. 667 00:39:11,020 --> 00:39:14,990 Lo que ahora quiero hacer es tener la capacidad en el código, PHP y SQL, 668 00:39:14,990 --> 00:39:18,800 a una especie de reunirse con estas tablas, en la que si estos son los estudiantes y estos son las casas, 669 00:39:18,800 --> 00:39:22,050 queremos de alguna manera de combinarlos para que uno se alinea con 1, 670 00:39:22,050 --> 00:39:25,670 2 líneas con 2, y que por lo que podemos averiguar donde David 671 00:39:25,670 --> 00:39:28,000 y donde Mike y donde todo el mundo vive. 672 00:39:28,000 --> 00:39:31,850 Para ello, puede ejecutar una consulta SQL como la siguiente. 673 00:39:31,850 --> 00:39:40,470 SELECT * FROM estudiantes ÚNETE casas ON - 674 00:39:40,470 --> 00:39:43,000 ¿Y ahora qué campos queremos que se unan los? 675 00:39:43,000 --> 00:39:49,520 Así students.house = houses.id. 676 00:39:49,520 --> 00:39:54,150 >> Un poco críptico, sino que significa esta parte literalmente crear una nueva tabla temporal 677 00:39:54,150 --> 00:39:56,690 que es el resultado de unir a los estudiantes y casas. 678 00:39:56,690 --> 00:40:00,340 ¿Y cómo se quiere combinar la punta de los dedos en esta lista? 679 00:40:00,340 --> 00:40:05,280 Set de campo de casas iguales a las casas de los estudiantes "campo ID. 680 00:40:05,280 --> 00:40:10,220 Y si yo ahora haga clic en Ir, vuelva exactamente lo que yo esperaba. 681 00:40:10,220 --> 00:40:15,890 David está en Mather, Mike está en Pfoho, y también veo los identificadores únicos. 682 00:40:15,890 --> 00:40:18,640 Pero el punto es que ahora tengo una tabla completa. 683 00:40:18,640 --> 00:40:23,020 Y así, la comida para llevar aquí para pset 7 o realmente para el proyecto final: 684 00:40:23,020 --> 00:40:25,830 Si usted encuentra que usted está almacenando cualquier tipo de información redundante, 685 00:40:25,830 --> 00:40:28,850 si se trata de una casa, tal vez es una ciudad, estado y código postal 686 00:40:28,850 --> 00:40:32,050 donde ZIP puede por lo general, pero no siempre se utiliza como un identificador único, 687 00:40:32,050 --> 00:40:35,810 pasan por el ejercicio mental y luego con algo como phpMyAdmin 688 00:40:35,810 --> 00:40:40,660 de factoring que los datos comunes sobre todo porque la Página Web atrae más bien utilizado 689 00:40:40,660 --> 00:40:45,440 y más popular, esta es la forma de asegurarse de que todo es súper rápido, 690 00:40:45,440 --> 00:40:51,930 dando a la base de datos como muchas sugerencias en cuanto a la singularidad como sea posible. 691 00:40:51,930 --> 00:40:53,860 Eso era mucho. 692 00:40:53,860 --> 00:40:59,010 ¿Alguna pregunta? Está bien. Vamos a tomar un descanso de 5 minutos allí y reagruparse. 693 00:41:01,600 --> 00:41:03,540 Está bien. 694 00:41:03,540 --> 00:41:08,680 El siguiente es un ejemplo que se utilizó hace unos años cuando tomé CS161, 695 00:41:08,680 --> 00:41:10,960 que es la clase de sistemas operativos en el colegio 696 00:41:10,960 --> 00:41:15,160 que es conocido por ser increíble, pero una increíble cantidad de trabajo, 697 00:41:15,160 --> 00:41:19,810 y se concentra realmente en algunos de los problemas de bajo nivel que surgen en los sistemas operativos 698 00:41:19,810 --> 00:41:22,700 y también incluso en el mundo de las bases de datos. 699 00:41:22,700 --> 00:41:27,040 >> La historia que fue contada por mi profesor, Margo Seltzer, ese año fue el siguiente. 700 00:41:27,040 --> 00:41:30,990 Supongamos que usted tiene una nevera pequeña residencia para usted y su compañero de cuarto 701 00:41:30,990 --> 00:41:34,030 y los dos que realmente le gusta la leche. 702 00:41:34,030 --> 00:41:36,360 Así que llegas a casa de clase un día, su compañero de cuarto no es todavía allí, 703 00:41:36,360 --> 00:41:39,650 se abre la nevera, y te das cuenta, "Oh maldita sea, nos quedamos sin leche." 704 00:41:39,650 --> 00:41:42,070 Así se cierra la nevera, se puede caminar por la calle para CVS 705 00:41:42,070 --> 00:41:45,830 y obtener en las líneas cada vez más largas para comprar un poco de leche en CVS. 706 00:41:45,830 --> 00:41:48,470 Mientras tanto, su compañero de cuarto llega a casa de su clase, 707 00:41:48,470 --> 00:41:51,690 entra en la habitación, abre la nevera realmente quieren un poco de leche, 708 00:41:51,690 --> 00:41:54,130 abre la nevera y, "Maldita sea, no hay leche". 709 00:41:54,130 --> 00:41:57,890 Así que él o ella cierra la nevera, sale por la puerta, y se va a ABP 710 00:41:57,890 --> 00:42:00,910 o en algún lugar que no sea CVS en el que no vamos a chocar entre sí 711 00:42:00,910 --> 00:42:02,790 para ir a buscar un poco de leche. 712 00:42:02,790 --> 00:42:04,820 Por supuesto, unos minutos más tarde, los dos volver a casa 713 00:42:04,820 --> 00:42:07,740 y ahora usted tiene la leche dos veces más que en realidad quería. 714 00:42:07,740 --> 00:42:10,670 Y siendo la leche, ahora va a ir mal porque le gusta la leche 715 00:42:10,670 --> 00:42:14,200 pero no me gusta mucho la leche, por lo que ahora tiene mucha leche, así que va a agriarse. 716 00:42:14,200 --> 00:42:16,830 Esta es una situación horrible, horrible. 717 00:42:16,830 --> 00:42:22,920 ¿Qué podría haber resuelto esta situación si usted fuera el compañero de cuarto en casa por primera vez? Sí. 718 00:42:22,920 --> 00:42:25,970 [Estudiante] Debería haber dejado una nota. [Risas] 719 00:42:25,970 --> 00:42:28,090 Bueno. Debería haber dejado una nota. 720 00:42:28,090 --> 00:42:32,320 Usted debería haber puesto una nota Post-it o similar, diciendo: "Lo que para la leche" 721 00:42:32,320 --> 00:42:36,830 y luego su compañero de cuarto conceptualmente habría sido bloqueada de realmente hacer eso. 722 00:42:36,830 --> 00:42:38,010 O usted podría ir un paso más allá. 723 00:42:38,010 --> 00:42:41,060 Usted, literalmente, podría bloquear el refrigerador con una especie de candado, 724 00:42:41,060 --> 00:42:44,870 y ahora su compañero de cuarto, literalmente, se cerró la puerta de la nevera. 725 00:42:44,870 --> 00:42:48,520 Si generalizamos volver a la programación, 726 00:42:48,520 --> 00:42:51,610 casi se puede pensar en la nevera como una especie de variable o una estructura, 727 00:42:51,610 --> 00:42:53,500 algún tipo de contenedor de información. 728 00:42:53,500 --> 00:42:58,290 El problema fundamental aquí es que los dos se les permitió inspeccionar 729 00:42:58,290 --> 00:43:02,370 o leer el estado de esta estructura de datos, 730 00:43:02,370 --> 00:43:08,050 pero lo visto en diferentes momentos y sin embargo ambos se tomó una decisión 731 00:43:08,050 --> 00:43:11,920 basado en el estado del mundo en esos momentos diferentes en el tiempo. 732 00:43:11,920 --> 00:43:15,570 Así que te había bloqueado el refrigerador, habría al menos evitar su compañero de cuarto 733 00:43:15,570 --> 00:43:19,070 de haber sido capaz de inspeccionar el estado del mundo, 734 00:43:19,070 --> 00:43:22,530 para que él o ella no podría haber hecho la misma decisión. 735 00:43:22,530 --> 00:43:25,780 Entonces, bases de datos, como resultado, tienen este problema constantemente. 736 00:43:25,780 --> 00:43:31,050 >> Vamos a ver si podemos construir un escenario. 737 00:43:31,050 --> 00:43:34,310 Supongamos que eres una especie de chico malo y te vas a Bank of America 738 00:43:34,310 --> 00:43:37,950 o uno de los otros lugares en el cuadrado que tienen un lado par cajeros automáticos por lado, 739 00:43:37,950 --> 00:43:41,200 y de alguna manera descubrió cómo duplicar una tarjeta de cajero automático - no es tan difícil. 740 00:43:41,200 --> 00:43:42,730 Es sólo una banda magnética. 741 00:43:42,730 --> 00:43:45,180 Y por eso lo que quieres hacer es tratar de jugar a este juego 742 00:43:45,180 --> 00:43:49,060 mediante el cual se pone una tarjeta en una máquina, otra tarjeta en la máquina, 743 00:43:49,060 --> 00:43:51,980 y básicamente se quiere tratar de sacar dinero al mismo tiempo, 744 00:43:51,980 --> 00:43:54,930 porque imagino que la historia es la siguiente. 745 00:43:54,930 --> 00:43:57,350 La máquina de la izquierda toma su tarjeta y su PIN, 746 00:43:57,350 --> 00:44:00,240 y luego dices: "Dame 100 dólares". 747 00:44:00,240 --> 00:44:04,790 El cajero automático está programado para hacer primero una selección en su base de datos o su equivalente - 748 00:44:04,790 --> 00:44:10,780 cualquier base de datos que está utilizando - para ver qué este usuario tener al menos $ 100 en su cuenta? 749 00:44:10,780 --> 00:44:16,180 Si es así, entonces escupir los $ 100 y restar $ 100 de su balance. 750 00:44:16,180 --> 00:44:20,470 Pero por supuesto, si hay varias máquinas aquí o varias formas de inspección 751 00:44:20,470 --> 00:44:23,560 el Estado de ese mundo, la bóveda de un banco, para ver cuánto dinero usted tiene, 752 00:44:23,560 --> 00:44:26,780 supongamos que por casualidad la máquina a la izquierda y la derecha 753 00:44:26,780 --> 00:44:30,140 tanto esa pregunta casi al mismo momento en el tiempo. 754 00:44:30,140 --> 00:44:34,160 >> Y esto sí puede suceder. Los cajeros automáticos son las computadoras en estos días. 755 00:44:34,160 --> 00:44:37,670 Así que si la máquina de la izquierda dice: "Sí, usted tiene por lo menos $ 100" 756 00:44:37,670 --> 00:44:42,150 Mientras tanto, el equipo de la derecha dice: "Sí, usted tiene por lo menos 100 dólares" 757 00:44:42,150 --> 00:44:47,420 entonces ambos proceder a finalizar sus programas y, de hecho escupir los $ 100 758 00:44:47,420 --> 00:44:50,820 y decir: "Anteriormente usted tenía $ 200." 759 00:44:50,820 --> 00:44:54,890 "Vamos a actualizar la variable a ser ahora $ 100 que queda en la cuenta." 760 00:44:54,890 --> 00:44:58,780 Pero si ambos han comprobado el saldo de su cuenta, hemos detectado que es $ 200 761 00:44:58,780 --> 00:45:02,000 y dos de ellos luego hacer los cálculos y 200 dicen - 100, 762 00:45:02,000 --> 00:45:06,990 las máquinas potencialmente escupir dos billetes de $ 100 en cada máquina, 763 00:45:06,990 --> 00:45:11,360 pero sólo he actualizado el saldo de su cuenta a la suma de $ 100. 764 00:45:11,360 --> 00:45:15,130 En otras palabras, usted ha tomado fuera de $ 200, pero debido a que inspeccionó el estado del mundo 765 00:45:15,130 --> 00:45:18,840 simultáneamente y luego tomó una decisión sobre la base de ese valor, 766 00:45:18,840 --> 00:45:21,930 puede ser que no haga las cuentas en última instancia correctamente. 767 00:45:21,930 --> 00:45:25,520 Así que en una situación demasiado banco realmente desea tener algún tipo de bloqueo 768 00:45:25,520 --> 00:45:28,450 de modo que tan pronto como se haya comprobado el estado de alguna variable 769 00:45:28,450 --> 00:45:31,220 eso es muy importante, al igual que el saldo de su cuenta, 770 00:45:31,220 --> 00:45:36,070 No deje que otras personas tomen decisiones sobre la base de que hasta que haya terminado de hacer su cosa, 771 00:45:36,070 --> 00:45:38,920 donde en este caso es el cajero automático de la izquierda. 772 00:45:38,920 --> 00:45:41,160 Bloquee todos los demás fuera. 773 00:45:41,160 --> 00:45:44,650 En realidad se puede lograr este efecto en un par de maneras diferentes. 774 00:45:44,650 --> 00:45:48,660 >> La forma más sencilla de MySQL es una línea de SQL que le dio 775 00:45:48,660 --> 00:45:52,030 en la especificación de conjunto de problemas que se ve exactamente como esta. 776 00:45:52,030 --> 00:45:57,420 Inserte en la mesa - como se llame - un id, un símbolo, y compartir, un número de acciones, 777 00:45:57,420 --> 00:45:59,660 los siguientes valores, por ejemplo. 778 00:45:59,660 --> 00:46:03,370 Si usted no ha leído las especificaciones, sin embargo, este es un ejemplo relacionado con cómo usted va sobre 779 00:46:03,370 --> 00:46:07,340 la compra de 10 acciones de esta acción de penique para el presidente Skroob, 780 00:46:07,340 --> 00:46:10,340 cuyo ID de usuario pasa a ser el número 7? 781 00:46:10,340 --> 00:46:14,070 Esto dice INSERT INTO tabla el identificador siguiente, el símbolo y el número de acciones 782 00:46:14,070 --> 00:46:18,200 de 7, 'DVN.V', y 10. 783 00:46:18,200 --> 00:46:21,510 Pero - pero, pero, pero - la segunda línea es la importante. 784 00:46:21,510 --> 00:46:26,310 DUPLICADOS DE ACTUALIZACIÓN acciones clave = acciones + Valores (acciones). 785 00:46:26,310 --> 00:46:28,350 Así que totalmente de aspecto críptico a primera vista. 786 00:46:28,350 --> 00:46:31,990 Pero el hecho de que esta consulta SQL, a pesar de que se ajusta en 2 líneas, 787 00:46:31,990 --> 00:46:35,920 es una consulta de larga, esto significa que es atómica 788 00:46:35,920 --> 00:46:41,000 en el sentido de que esta consulta sea será ejecutado todos juntos o no en absoluto. 789 00:46:41,000 --> 00:46:45,100 Y por definición de MySQL, que es como se implementa esta consulta. 790 00:46:45,100 --> 00:46:51,010 Es, por definición, en el manual garantiza que ejecuta todo de una vez o en absoluto. 791 00:46:51,010 --> 00:46:54,020 La motivación para esto es la siguiente. 792 00:46:54,020 --> 00:46:58,540 Si en este caso usted está tratando de comprar 10 acciones, 793 00:46:58,540 --> 00:47:02,260 es una especie de la misma historia que la leche, es una especie de la misma historia que el cajero automático. 794 00:47:02,260 --> 00:47:04,970 >> Si comete el error de no utilizar esta sintaxis 795 00:47:04,970 --> 00:47:09,610 pero en lugar de seleccionar la base de datos para ver cuántas acciones de esta penny stock 796 00:47:09,610 --> 00:47:13,750 dice el presidente Skroob tener, y supongamos que tiene 10 acciones, 797 00:47:13,750 --> 00:47:19,330 y algo fracción de segundo más tarde, a continuación, hacer una instrucción UPDATE, 798 00:47:19,330 --> 00:47:24,810 que es otra declaración de SQL que dice seguir adelante y añadir 10 acciones más 799 00:47:24,810 --> 00:47:28,700 a su actual 10 idealmente de modo que el total es de 20, 800 00:47:28,700 --> 00:47:33,490 el problema se debe a que en los sistemas de bases de datos de hoy en día y debido a que en los ordenadores de hoy en día 801 00:47:33,490 --> 00:47:35,990 tiene varios procesadores, núcleos múltiples - 802 00:47:35,990 --> 00:47:38,920 en otras palabras, las computadoras, literalmente, puede hacer varias cosas a la vez - 803 00:47:38,920 --> 00:47:44,270 no hay garantía de que el SELECT y su actualización en este caso 804 00:47:44,270 --> 00:47:46,150 van a suceder una tras otra. 805 00:47:46,150 --> 00:47:49,140 Así que un mal escenario sería hacer el SELECT 806 00:47:49,140 --> 00:47:51,670 para ver cuántas acciones de esta acción de penique es Skroob tienen, 807 00:47:51,670 --> 00:47:54,710 y luego sólo por casualidad otra consulta de base de datos se ejecuta - 808 00:47:54,710 --> 00:47:57,740 tal vez su Skroob en otra ventana del navegador tratando de comprar 10 acciones 809 00:47:57,740 --> 00:48:00,700 en una ventana nueva del todo, al igual que el cajero automático - 810 00:48:00,700 --> 00:48:05,410 y supongamos que se mete en otra consulta SELECT y UPDATE entre el. 811 00:48:05,410 --> 00:48:10,210 Podría ser el caso que Skroob pierde ahora un cierto número de acciones 812 00:48:10,210 --> 00:48:14,340 porque otro proceso está inspeccionando el estado de su mundo, 813 00:48:14,340 --> 00:48:17,800 o se pone más acciones de lo que debería tener. 814 00:48:17,800 --> 00:48:23,250 No vamos a entrar en los detalles de exactamente cuáles son esas líneas de la historia en particular sería, 815 00:48:23,250 --> 00:48:28,380 pero el punto es que si usted tiene que comprobar un valor de variables y luego tomar una decisión, 816 00:48:28,380 --> 00:48:32,500 si hay un riesgo de que alguien más haciendo algo entre esos dos estados, 817 00:48:32,500 --> 00:48:36,220 como sucede en los sistemas multiprocesador, en sistemas multi-núcleo, 818 00:48:36,220 --> 00:48:41,220 equipos con la capacidad de hacer varias cosas a la vez, las cosas malas pueden suceder 819 00:48:41,220 --> 00:48:44,530 cuentas bancarias, como se efectúa el cargo incorrectamente, la compra de leche dos veces más, 820 00:48:44,530 --> 00:48:46,730 o en este caso el número equivocado de acciones. 821 00:48:46,730 --> 00:48:48,370 Pero hay una manera más fácil pensar en esto. 822 00:48:48,370 --> 00:48:53,290 >> Resulta que también es compatible con SQL, si configura su mesa correctamente, 823 00:48:53,290 --> 00:48:56,920 algo que se llama las transacciones, que yo diría que es incluso más fácil de entender 824 00:48:56,920 --> 00:49:00,650 que esto, pero no es un 1-liner, por lo que en realidad es un poco más complicado. 825 00:49:00,650 --> 00:49:04,960 Hay, literalmente, una declaración en SQL llamado START TRANSACTION. 826 00:49:04,960 --> 00:49:08,300 Al igual que hay SELECT, UPDATE, INSERT, DELETE y JOIN y un montón de otros, 827 00:49:08,300 --> 00:49:10,970 hay palabras claves como START TRANSACTION. 828 00:49:10,970 --> 00:49:13,560 Y lo que usted realice en el contexto del conjunto de procesadores 7 - 829 00:49:13,560 --> 00:49:17,270 usted no tiene que hacer esto para pset 7, es negada explícitamente que no es necesario, 830 00:49:17,270 --> 00:49:18,830 pero para proyectos de fin puede ser útil - 831 00:49:18,830 --> 00:49:22,820 si se llama a una consulta de START TRANSACTION y luego otra consulta 832 00:49:22,820 --> 00:49:25,620 y luego otra consulta y luego otro, otro, y otro, 833 00:49:25,620 --> 00:49:31,860 las consultas en realidad no se ejecutará hasta que se llama a la sentencia SQL COMMIT, 834 00:49:31,860 --> 00:49:37,220 momento en el cual, si se trata de dos declaraciones o afirmaciones 20, todos ellos serán ejecutados a la vez, 835 00:49:37,220 --> 00:49:42,770 lo que significa que nadie más puede querer comprar demasiada leche o débito demasiado dinero 836 00:49:42,770 --> 00:49:46,340 o recomprar acciones demasiados porque todas las consultas se ejecutará 837 00:49:46,340 --> 00:49:48,410 espalda con espalda a espalda con espalda. 838 00:49:48,410 --> 00:49:51,580 Y esto es super importante, sobre todo cuando estás haciendo algo como esto. 839 00:49:51,580 --> 00:49:54,900 Este es un ejemplo arbitrario que dice que vamos a actualizar la cuenta bancaria 840 00:49:54,900 --> 00:50:00,200 mediante el establecimiento de un equilibrio igual al saldo - $ 1000 donde el número de cuenta: 2. 841 00:50:00,200 --> 00:50:04,260 Y luego la segunda declaración es que ahora vamos a depositar que $ 1000 842 00:50:04,260 --> 00:50:07,310 en la cuenta de otro banco cuyo número de cuenta: 1. 843 00:50:07,310 --> 00:50:10,400 >> En otras palabras, este es un ejemplo perfecto de donde usted quiere asegurarse de 844 00:50:10,400 --> 00:50:13,590 que ambos de estos estados ocurrir o no en absoluto 845 00:50:13,590 --> 00:50:15,450 porque de lo contrario el cliente se va a follar 846 00:50:15,450 --> 00:50:17,670 y usted va a tomar su dinero y no depositarlo en otra parte, 847 00:50:17,670 --> 00:50:20,470 o el banco va a follar a dónde va a depositar el dinero 848 00:50:20,470 --> 00:50:23,140 pero en realidad no lo restar de la cuenta del usuario. 849 00:50:23,140 --> 00:50:25,810 Así que usted quiere a ambos a ejecutar en conjunto. 850 00:50:25,810 --> 00:50:29,140 Así entra en las transacciones mundiales. 851 00:50:29,140 --> 00:50:31,360 Así que eso es algo a tener en la parte de atrás de tu mente, 852 00:50:31,360 --> 00:50:34,710 no tanto por los efectos de un proyecto final, 853 00:50:34,710 --> 00:50:36,700 pero si usted desea continuar con su proyecto final en algún lugar, 854 00:50:36,700 --> 00:50:39,040 si usted desea poner en marcha alguna empresa que lo rodea, 855 00:50:39,040 --> 00:50:41,270 si quiere resolver el problema de algún grupo de estudiantes en el campus 856 00:50:41,270 --> 00:50:45,210 y en realidad tiene un sitio web en vivo, activo, este es el tipo de errores sutiles que pueden surgir 857 00:50:45,210 --> 00:50:49,480 si no alcanzas a pensar a través de lo que puede suceder si 2 personas 858 00:50:49,480 --> 00:50:54,190 Está intentando acceder a su sitio web en, literalmente, en el mismo momento en el tiempo, 859 00:50:54,190 --> 00:50:56,890 por lo cual sus consultas de otro modo podrían quedar entrelazados. 860 00:50:58,840 --> 00:51:01,420 >> Preparado para algo de JavaScript, un teaser del mismo? 861 00:51:01,420 --> 00:51:04,320 Este es nuestro último idioma para el semestre. Está bien. 862 00:51:04,320 --> 00:51:09,940 Afortunadamente, JavaScript parece muy, muy, muy similar a los 2 idiomas, C y PHP, 863 00:51:09,940 --> 00:51:11,140 que hemos hecho hasta ahora. 864 00:51:11,140 --> 00:51:14,340 No hay ningún conjunto de procesadores JavaScript en 7, pero es una herramienta increíblemente útil 865 00:51:14,340 --> 00:51:18,840 cuando se trata de hacer basados ​​en la web los proyectos finales o en realidad sólo la programación web más general. 866 00:51:18,840 --> 00:51:20,950 Así que una rápida visión general de algo que se llama DOM. 867 00:51:20,950 --> 00:51:23,600 Aquí hay una página web súper simple que realmente sólo dice hola, mundo 868 00:51:23,600 --> 00:51:25,970 tanto en el título y en el cuerpo. 869 00:51:25,970 --> 00:51:29,270 Como la indentación ha estado sugiriendo durante algún tiempo, 870 00:51:29,270 --> 00:51:31,380 en efecto, hay una jerarquía de páginas web. 871 00:51:31,380 --> 00:51:34,220 Podía dibujar este fragmento de código HTML misma como un árbol, 872 00:51:34,220 --> 00:51:37,470 pensando en volver a nuestra discusión de las estructuras de datos en C, como se indica a continuación. 873 00:51:37,470 --> 00:51:40,710 Tengo algún nodo raíz especial llamado el nodo de documento, 874 00:51:40,710 --> 00:51:43,650 y vamos a ver la analogía de esto en JavaScript en un momento. 875 00:51:43,650 --> 00:51:48,330 El primer hijo y único hijo de que en este caso es la etiqueta HTML. 876 00:51:48,330 --> 00:51:49,880 No hay ninguna asignación directa del tipo de documento. 877 00:51:49,880 --> 00:51:53,170 Eso es algo especial, por lo que deberíamos ignorarlo cuando se trata de esta DOM, 878 00:51:53,170 --> 00:51:55,810 Este Modelo de Objetos de Documento árbol. 879 00:51:55,810 --> 00:51:59,530 Observe que la etiqueta HTML, que he representado arbitrariamente como un rectángulo, 880 00:51:59,530 --> 00:52:02,890 tiene 2 hijos: cabeza y cuerpo. 881 00:52:02,890 --> 00:52:04,840 >> Aquellos son igualmente elaborado en forma de rectángulos. 882 00:52:04,840 --> 00:52:08,970 Es significativo que la cabeza es gráficamente a la izquierda del cuerpo. 883 00:52:08,970 --> 00:52:11,960 La implicación es que la cabeza es lo primero en el árbol. 884 00:52:11,960 --> 00:52:14,910 Así que en realidad es un pedido para un árbol cuando lo dibuja como este, 885 00:52:14,910 --> 00:52:17,460 a pesar de que las formas y otras cosas son arbitrarias. 886 00:52:17,460 --> 00:52:20,360 Head por su parte tiene un hijo único llamado título, 887 00:52:20,360 --> 00:52:25,170 y el título en realidad tiene su propio hijo, que es "hola, mundo", 888 00:52:25,170 --> 00:52:32,210 que me atrajo deliberadamente como un óvalo aquí para que sea un poco diferente de la del rectángulo. 889 00:52:32,210 --> 00:52:37,420 Estos rectángulos son elementos, mientras que hola, mundo es en realidad un nodo de texto. 890 00:52:37,420 --> 00:52:39,850 Así que es un nodo en el árbol, pero es un tipo diferente de nodo 891 00:52:39,850 --> 00:52:41,730 así que lo sacó arbitrariamente diferente. 892 00:52:41,730 --> 00:52:45,000 Del mismo modo se tiene el cuerpo de un niño llamado hola, mundo, así, 893 00:52:45,000 --> 00:52:47,910 nodo de forma diferente aunque son casualmente el mismo texto, 894 00:52:47,910 --> 00:52:52,100 pero lo he dibujado con la misma forma. Entonces, ¿quién le importa? 895 00:52:52,100 --> 00:52:56,820 Bueno, lo bueno de HTML es que tiene este carácter jerárquico. 896 00:52:56,820 --> 00:53:01,010 Y lo que es bueno de JavaScript y en particular las bibliotecas que están libremente disponibles 897 00:53:01,010 --> 00:53:07,120 y populares como jQuery, puede navegar por la estructura de árbol tan increíblemente fácil. 898 00:53:07,120 --> 00:53:11,790 Cualquiera de las cosas que hicimos en C con los punteros y los árboles de desplazamiento y recursividad en los nodos 899 00:53:11,790 --> 00:53:15,300 hijo de la izquierda a la derecha niño, de repente podemos clasificar de dar por sentado 900 00:53:15,300 --> 00:53:19,450 por ser increíblemente iluminadora si no es un poco frustrante 901 00:53:19,450 --> 00:53:22,470 pero no casi una forma eficiente de ir sobre la programación. 902 00:53:22,470 --> 00:53:24,470 Y así, con estos lenguajes de alto nivel como JavaScript 903 00:53:24,470 --> 00:53:28,340 vamos a ser capaces de navegar por este árbol mucho más intuitiva. 904 00:53:28,340 --> 00:53:30,430 >> Y de hecho la sintaxis va a ser muy familiar. 905 00:53:30,430 --> 00:53:32,950 Si usted nunca ha visto antes de JavaScript, esta es una referencia muy agradable 906 00:53:32,950 --> 00:53:35,910 de la gente de Mozilla, la gente que hacer que Firefox, 907 00:53:35,910 --> 00:53:38,370 así que siéntase libre de navegar que a su conveniencia. 908 00:53:38,370 --> 00:53:41,590 Lo que vas a encontrar - y estas diapositivas son idénticos a los que se utilizó el otro día - 909 00:53:41,590 --> 00:53:44,030 Del mismo modo, la principal se ha ido. 910 00:53:44,030 --> 00:53:47,010 Así que cuando se escribe un programa en JavaScript, no hay una función principal. 911 00:53:47,010 --> 00:53:48,690 Usted acaba de empezar a escribir código. 912 00:53:48,690 --> 00:53:51,660 Sin embargo, una distinción clave entre JavaScript y C y PHP 913 00:53:51,660 --> 00:53:55,890 es que, mientras que C y PHP hasta ahora han sido ejecutadas lado del servidor 914 00:53:55,890 --> 00:53:59,180 por el aparato en este caso, o más generalmente, por un servidor, 915 00:53:59,180 --> 00:54:04,270 JavaScript por diseño normalmente se ejecuta en un navegador. 916 00:54:04,270 --> 00:54:08,440 En otras palabras, es posible escribir código JavaScript, ya que estamos a punto de, 917 00:54:08,440 --> 00:54:13,080 en un servidor en el aparato, sino que lo incluye entre su HTML, entre la CSS, 918 00:54:13,080 --> 00:54:16,100 entre sus GIFs y PNGs tus y tus JPEGs 919 00:54:16,100 --> 00:54:19,170 de modo que cuando el usuario visita su página web, si usted está utilizando JavaScript, 920 00:54:19,170 --> 00:54:21,770 que el código JavaScript llega desde el servidor al navegador, 921 00:54:21,770 --> 00:54:24,540 y es el navegador que realmente se ejecuta. 922 00:54:24,540 --> 00:54:27,960 Así que esto tiene implicaciones significativas para la propiedad intelectual, incluso. 923 00:54:27,960 --> 00:54:32,600 Es un poco tonto para pensar en la protección de su propiedad intelectual cuando se trata de código JavaScript 924 00:54:32,600 --> 00:54:37,560 ya que por la naturaleza de la lengua, el fichero es ejecutado normalmente lado del navegador. 925 00:54:37,560 --> 00:54:40,360 >> Se puede confundir, lo que significa que usted puede hacer que parezca una locura y lo feo 926 00:54:40,360 --> 00:54:45,400 sin espacios en blanco, horribles nombres de las variables, para que sea más difícil para la gente a robar su IP, 927 00:54:45,400 --> 00:54:48,120 pero la clave es que se ejecute lado del navegador. 928 00:54:48,120 --> 00:54:51,790 A pesar de que como parte del servidor a un lado JavaScript se puede utilizar, 929 00:54:51,790 --> 00:54:54,480 el caso de uso más común en este momento está todavía en el navegador. 930 00:54:54,480 --> 00:54:59,800 Y esto es lo que parece. He aquí un if-else if-else construir al igual que C, al igual que PHP. 931 00:54:59,800 --> 00:55:02,420 He aquí una expresión booleana cuando usted "o" las cosas 2 juntos. 932 00:55:02,420 --> 00:55:04,330 Aquí es cuando usted "y" 2 cosas juntas. 933 00:55:04,330 --> 00:55:08,300 Aquí es una declaración interruptor, que es similar a PHP 934 00:55:08,300 --> 00:55:10,810 en que se puede cambiar en diferentes tipos de valores. 935 00:55:10,810 --> 00:55:15,180 Loops similar para tener lazos aquí, que se estructuran de forma idéntica a lo que hemos visto antes. 936 00:55:15,180 --> 00:55:18,110 Mientras que los bucles; Tenemos que hacer bucles while. 937 00:55:18,110 --> 00:55:20,290 Variables, muy ligeramente diferente. 938 00:55:20,290 --> 00:55:24,560 Usted no declarar las variables como se hace en PHP y C, 939 00:55:24,560 --> 00:55:27,860 pero igualmente es JavaScript tipos débiles. 940 00:55:27,860 --> 00:55:32,730 No se especifica int o float o cadena ni nada de eso por lo general. 941 00:55:32,730 --> 00:55:34,240 Puede especificar var. 942 00:55:34,240 --> 00:55:38,040 Usted no tiene que especificar var, pero tiene implicaciones si no lo haces. 943 00:55:38,040 --> 00:55:42,000 Por lo general, si se omite var, que accidentalmente crear una variable global en lugar de local. 944 00:55:42,000 --> 00:55:46,420 Así que permítanme proponer que casi siempre acaba de decir var y luego el nombre de la variable. 945 00:55:46,420 --> 00:55:48,740 No es un tipo, que es sólo para la variable var. 946 00:55:48,740 --> 00:55:52,930 Este sería un ejemplo, ya sea 123 o "hola mundo". 947 00:55:52,930 --> 00:55:58,910 Las matrices están presentes y sintácticamente similar a PHP. 948 00:55:58,910 --> 00:56:03,690 Voy a decir números var y luego usar corchetes de nuevo para declarar una variable 949 00:56:03,690 --> 00:56:08,870 cuyo tipo es array que tiene estos números particulares en ella, separados por comas. 950 00:56:08,870 --> 00:56:11,740 Y luego, por último, esta es la única que realmente se ve diferente. 951 00:56:11,740 --> 00:56:16,700 Recordemos que en PHP que se han puesto en marcha una matriz asociativa para un estudiante 952 00:56:16,700 --> 00:56:20,220 como Zamyla que puede tener un aspecto como este, donde la variable se llama estudiante. 953 00:56:20,220 --> 00:56:23,370 Los corchetes significan aquí viene una matriz. 954 00:56:23,370 --> 00:56:28,500 >> El hecho de que no estoy usando índices numéricos sino cadenas - id, casa, y nombre - 955 00:56:28,500 --> 00:56:30,990 significa que se trata de una matriz asociativa, 956 00:56:30,990 --> 00:56:34,490 y estas flechas con el signo igual y el soporte angular 957 00:56:34,490 --> 00:56:37,310 significa que la clave es "id", el valor es 1; 958 00:56:37,310 --> 00:56:39,310 la clave está en "casa", el valor es Winthrop House; 959 00:56:39,310 --> 00:56:41,800 la clave es "nombre", el valor es Zamyla Chan. 960 00:56:41,800 --> 00:56:47,110 Así que hay tres claves dentro de esta matriz asociativa, cada uno de los cuales tiene su propio valor. 961 00:56:47,110 --> 00:56:52,880 Hemos visto que en el conjunto de procesadores 7, o pronto lo sabrá, en la idea JavaScript misma, 962 00:56:52,880 --> 00:56:55,220 pero va a tener este aspecto. 963 00:56:55,220 --> 00:57:00,070 Así estudiante var - sin signo de dólar y no se menciona pero todavía tipo var - 964 00:57:00,070 --> 00:57:05,860 equivale a continuación, abra las llaves porque en JavaScript cuando se tiene pares de claves de valor, 965 00:57:05,860 --> 00:57:08,900 que realmente utiliza algo llamado un objeto. 966 00:57:08,900 --> 00:57:13,490 Y aquellos de ustedes que tomaron APCS o similar podría recordar los objetos de Java 967 00:57:13,490 --> 00:57:15,140 o lenguajes similares. 968 00:57:15,140 --> 00:57:17,880 JavaScript no es Java, primero de todo. 969 00:57:17,880 --> 00:57:21,600 Fue un año de diseño deliberada decisión hace para desprender algo más que era popular, 970 00:57:21,600 --> 00:57:25,640 su nombre, a pesar de que no tiene una relación fundamental con Java en sí. 971 00:57:25,640 --> 00:57:31,490 JavaScript tiene los objetos, y se crean por medio de la notación de corchete. 972 00:57:31,490 --> 00:57:36,710 Los objetos en JavaScript son más o menos equivalentes a las matrices asociativas en PHP 973 00:57:36,710 --> 00:57:40,030 cuando se trata de almacenamiento de datos dentro de ellos. 974 00:57:40,030 --> 00:57:44,100 >> Pero incluso con más fuerza en JavaScript se puede asociar muy fácilmente las funciones 975 00:57:44,100 --> 00:57:48,040 dentro de un objeto, y aunque se puede hacer esto en otras lenguas, 976 00:57:48,040 --> 00:57:50,040 es todo un paradigma común, como veremos. 977 00:57:50,040 --> 00:57:54,380 En resumen, este objeto representa un estudiante, que es particularmente Zamyla, 978 00:57:54,380 --> 00:58:00,380 y es similar conceptualmente, sólo sintácticamente diferente de esto. 979 00:58:00,380 --> 00:58:03,840 Que en realidad el uso de JavaScript en un archivo. 980 00:58:03,840 --> 00:58:05,570 Resulta que hay una etiqueta script. 981 00:58:05,570 --> 00:58:08,180 Hemos visto una etiqueta de estilo y hemos visto otras etiquetas HTML. 982 00:58:08,180 --> 00:58:11,510 La etiqueta de script en realidad contienen algo de código JavaScript. 983 00:58:11,510 --> 00:58:15,500 Déjame entrar en el equipo donde tenemos algo de código fuente pre-hechos. 984 00:58:15,500 --> 00:58:18,700 Yo no lo he publicado aún en el sitio web, pero voy a hacer eso después de clase. 985 00:58:18,700 --> 00:58:21,770 Vamos a abrir éste, blink.html. 986 00:58:21,770 --> 00:58:27,560 De vuelta en la década de 1990, había literalmente una etiqueta HTML llamado la etiqueta blink, 987 00:58:27,560 --> 00:58:30,340 y esta fue una de las etiquetas más usadas en exceso maravillosamente en Internet 988 00:58:30,340 --> 00:58:36,140 por lo cual te gustaría visitar alguna página web estilo década de 1990 y empezar a ver el texto parpadeante de esta manera, 989 00:58:36,140 --> 00:58:39,810 los resultados de la etiqueta marqués, que había texto va así. 990 00:58:39,810 --> 00:58:45,070 Una de las pocas veces en que el mundo realmente ha acordado un estándar web, 991 00:58:45,070 --> 00:58:48,250 todo el mundo en todos los ámbitos de la etiqueta blink asesinado hace algunos años. 992 00:58:48,250 --> 00:58:52,860 Pero podemos resucitar con JavaScript como una demostración del poder que tiene 993 00:58:52,860 --> 00:58:56,660 cuando se puede escribir un programa dentro de una página web. 994 00:58:56,660 --> 00:59:00,240 Primero vamos a pasar por alto las cosas nuevas y centrarse sólo en lo viejo. 995 00:59:00,240 --> 00:59:01,780 >> Aquí está el material antiguo en este ejemplo. 996 00:59:01,780 --> 00:59:06,350 Tengo una etiqueta HTML, una etiqueta de la cabeza, y una etiqueta del título. 997 00:59:06,350 --> 00:59:11,210 Entonces tengo una etiqueta de cuerpo aquí con un div, lo que recuerdo es sólo una división rectangular de la página 998 00:59:11,210 --> 00:59:14,720 que le he dado un identificador único arbitrariamente de "saludo" a, 999 00:59:14,720 --> 00:59:18,320 sólo por lo que tienen una forma única de referirse a ella, que tiene un texto muy simple: 1000 00:59:18,320 --> 00:59:20,220 hola, mundo. 1001 00:59:20,220 --> 00:59:23,940 Ahora voy a desplazarse hasta la parte superior de este archivo y ver qué hay de nuevo. 1002 00:59:23,940 --> 00:59:27,710 Lo primero que hay arriba hasta nuevo es la etiqueta script, 1003 00:59:27,710 --> 00:59:31,280 y en el interior de la notificación etiqueta script que he declarado una función. 1004 00:59:31,280 --> 00:59:34,610 Para declarar una función en JavaScript, bastante similar a PHP, 1005 00:59:34,610 --> 00:59:37,930 que, literalmente, escribir la función, entonces el nombre de la función, entre paréntesis, 1006 00:59:37,930 --> 00:59:40,400 y tal vez algunos argumentos si se necesita ninguna. 1007 00:59:40,400 --> 00:59:43,510 Entonces tengo mi llave de cierre como de costumbre, y ahora tenemos algo de código nuevo ligeramente, 1008 00:59:43,510 --> 00:59:45,230 pero vamos a ver lo que esto significa. 1009 00:59:45,230 --> 00:59:48,670 Así div var, esto sólo significa dame un div llamado variable. 1010 00:59:48,670 --> 00:59:50,530 Podría haberlo llamado foo, pero yo quería que fuera llamado div 1011 00:59:50,530 --> 00:59:52,620 por razones que serán evidentes en un segundo. 1012 00:59:52,620 --> 00:59:57,480 Luego resulta en JavaScript - y este es el código JavaScript incrustado en mi página web - 1013 00:59:57,480 --> 01:00:01,760 hay una variable global de tipo especial llamado documento. 1014 01:00:01,760 --> 01:00:04,780 JavaScript es de hecho un lenguaje orientado a objetos. 1015 01:00:04,780 --> 01:00:07,230 No vamos a entrar en detalle en el 50 en cuanto a lo que significa, 1016 01:00:07,230 --> 01:00:11,180 pero por ahora sabemos que un objeto es muy parecido a una estructura. 1017 01:00:11,180 --> 01:00:14,740 Como vimos en el camino de regreso cuando uno de los primeros boletines de problemas 1018 01:00:14,740 --> 01:00:17,150 donde ponemos una gran cantidad de información en una estructura, 1019 01:00:17,150 --> 01:00:21,330 igualmente se documentan una estructura especial que viene con el navegador, 1020 01:00:21,330 --> 01:00:24,810 viene con cualquier página web. No es algo que he creado. 1021 01:00:24,810 --> 01:00:28,210 Dentro de esta estructura del documento, sin embargo, tiene no sólo los datos 1022 01:00:28,210 --> 01:00:30,010 pero también hay funciones. 1023 01:00:30,010 --> 01:00:34,090 >> Y cada vez que tienen una función dentro de una estructura, dentro de un objeto, 1024 01:00:34,090 --> 01:00:36,490 se llama a un método. Pero es la misma cosa. 1025 01:00:36,490 --> 01:00:40,110 Un método es una función que sólo da la circunstancia de estar dentro de algo más. 1026 01:00:40,110 --> 01:00:42,990 Así que esto significa que esta variable global documento especial denominado 1027 01:00:42,990 --> 01:00:47,690 tiene una función llamada getElementById que literalmente hace eso. 1028 01:00:47,690 --> 01:00:52,460 Se le conseguirá un elemento del DOM, Document Object árbol del modelo, 1029 01:00:52,460 --> 01:00:55,520 cuyo identificador es en este caso saludo. 1030 01:00:55,520 --> 01:00:59,200 En otras palabras, todo el tiempo que pasamos en las estructuras de datos entra en juego aquí. 1031 01:00:59,200 --> 01:01:01,400 Esta imagen de un DOM que tuvimos hace un momento, 1032 01:01:01,400 --> 01:01:06,100 a pesar de que la página es un poco diferente, si yo tuviera un div en esta imagen, 1033 01:01:06,100 --> 01:01:11,180 document.getElementById lo volvería a mí efectivamente sería un puntero 1034 01:01:11,180 --> 01:01:15,440 para el rectángulo en el árbol, una referencia al rectángulo en el árbol. 1035 01:01:15,440 --> 01:01:18,410 Así que eso es lo que significa llamar realmente una de esas funciones. 1036 01:01:18,410 --> 01:01:21,960 En este caso de nuevo se trata de un div. No es un cuerpo o un título. 1037 01:01:21,960 --> 01:01:26,480 Así que vamos a ver lo que quiero hacer con esto entonces div ahora que lo tengo dentro de este div variable llamada. 1038 01:01:26,480 --> 01:01:32,580 Resulta que con el lenguaje Java tiene la capacidad de modificar el CSS de la página de forma dinámica. 1039 01:01:32,580 --> 01:01:39,060 Hasta ahora, todo el CSS que hemos hecho, aunque limitado, es en los atributos de estilo, 1040 01:01:39,060 --> 01:01:41,730 o donde más hemos puesto CSS? 1041 01:01:42,730 --> 01:01:45,810 Yo como que echada a perder que uno. En la etiqueta de estilo en la parte superior del archivo. 1042 01:01:45,810 --> 01:01:49,180 O el tercer puesto ha estado? 1043 01:01:50,710 --> 01:01:54,590 >> Un archivo externo, algo. Css. 1044 01:01:54,590 --> 01:01:56,730 Así que estos son los 3 lugares que hemos hecho hasta ahora CSS, 1045 01:01:56,730 --> 01:01:59,310 pero el problema es que hemos codificado todo. 1046 01:01:59,310 --> 01:02:04,060 Usted decide como se sumergió en pset 7, decidimos dar una conferencia antes de lo que nuestro CSS sería. 1047 01:02:04,060 --> 01:02:07,380 Pero si usted quiere cambiar su CSS, usted realmente puede hacer que 1048 01:02:07,380 --> 01:02:09,370 una vez que tenga un lenguaje de programación real. 1049 01:02:09,370 --> 01:02:13,910 CSS, HTML - Lenguajes de programación no. JavaScript es. 1050 01:02:13,910 --> 01:02:18,200 Así que resulta que tan pronto como usted tiene uno de esos rectángulos en el árbol 1051 01:02:18,200 --> 01:02:23,050 llamado el DOM, que en sí tiene algunos datos dentro de la misma. 1052 01:02:23,050 --> 01:02:27,820 Así que el div que me agarró por el árbol tiene lo que vamos a llamar a una propiedad dentro de ella 1053 01:02:27,820 --> 01:02:34,390 llamado estilo, y la propiedad de estilo en sí tiene una propiedad llamada visibilidad. 1054 01:02:34,390 --> 01:02:37,330 Yo sé que esto sólo por buscar un manual del usuario CSS. 1055 01:02:37,330 --> 01:02:41,160 Resulta que hay una propiedad de visibilidad CSS que hace lo que dice. 1056 01:02:41,160 --> 01:02:44,530 Hace algo visible o no, visible o no. 1057 01:02:44,530 --> 01:02:46,810 ¿Y cómo se hace eso es la siguiente. 1058 01:02:46,810 --> 01:02:50,510 Estoy pidiendo programación si la visibilidad de este div se oculta, 1059 01:02:50,510 --> 01:02:53,390 ¿qué tengo que cambiar? Visible. 1060 01:02:53,390 --> 01:02:58,840 Porque si la visibilidad de esta página no está oculto, lógicamente yo hago lo oculto. 1061 01:02:58,840 --> 01:03:04,070 No tengo idea de por qué es visible y oculto y no es visible e invisible. 1062 01:03:04,070 --> 01:03:06,000 Esta fue una decisión de diseño pobre a lo largo del camino. 1063 01:03:06,000 --> 01:03:09,530 Pero esos son realmente opuestos en CSS: visibles y ocultos. 1064 01:03:09,530 --> 01:03:15,520 Todo esto hace es que significa cambiar el CSS de mi archivo de encendido y apagado, encendido y apagado 1065 01:03:15,520 --> 01:03:16,870 para que div particular. 1066 01:03:16,870 --> 01:03:20,630 Pero, de nuevo, esta es una función llamada parpadeo. Cuando se llama a la función de parpadeo? 1067 01:03:20,630 --> 01:03:24,080 Resulta que hay otra especial para ventanas de Global variable llamada, 1068 01:03:24,080 --> 01:03:28,220 similar en espíritu al documento, pero, mientras que el documento se refiere a su página web 1069 01:03:28,220 --> 01:03:31,700 como el árbol DOM, el HTML que envía desde el servidor, 1070 01:03:31,700 --> 01:03:35,250 ventana se refiere al cromo alrededor de ella, la barra de direcciones, la barra de título, 1071 01:03:35,250 --> 01:03:37,880 y todas esas cosas alrededor de su página web. 1072 01:03:37,880 --> 01:03:42,800 >> Y resulta que el objeto ventana tiene una función especial dentro de la misma llamada setInterval 1073 01:03:42,800 --> 01:03:44,360 que hace lo que dice. 1074 01:03:44,360 --> 01:03:48,600 Se establecerá un intervalo - en este caso cada 500 milisegundos - 1075 01:03:48,600 --> 01:03:52,270 y, tomar una conjetura, ¿qué va a hacer cada 500 milisegundos? 1076 01:03:52,270 --> 01:03:55,240 Se va a ejecutar ese abrir y cerrar la función. 1077 01:03:55,240 --> 01:03:58,560 Y lo que es bueno aquí es que podríamos haber hecho esto en C, aunque nunca lo hizo. 1078 01:03:58,560 --> 01:04:01,580 C tiene algo llamado punteros a funciones donde se puede pasar alrededor de funciones 1079 01:04:01,580 --> 01:04:03,140 como argumentos. 1080 01:04:03,140 --> 01:04:07,620 Del mismo modo en JavaScript puede pasar el nombre de una función a otra función. 1081 01:04:07,620 --> 01:04:10,630 Y darse cuenta de lo que estoy haciendo. No voy a hacer esto. 1082 01:04:10,630 --> 01:04:14,380 Si pongo entre paréntesis después de abrir y cerrar, eso significaría que llamar a la función de parpadeo. 1083 01:04:14,380 --> 01:04:17,430 Si los omite, que quiere decir aquí es la función de abrir y cerrar 1084 01:04:17,430 --> 01:04:21,330 por lo que se puede llamar setInterval cada 500 milisegundos. 1085 01:04:21,330 --> 01:04:28,200 Así, el resultado final, atroz que sea, es que si voy a ir a localhost y blink.html, 1086 01:04:28,200 --> 01:04:32,120 Ahora tengo que esto ocurra una y otra vez. 1087 01:04:32,120 --> 01:04:34,950 Y si realmente Inspeccionar elemento, vamos a ver si podemos ver esto. 1088 01:04:34,950 --> 01:04:38,550 Permítanme Inspeccionar elemento, déjame desplácese hacia abajo un poco, 1089 01:04:38,550 --> 01:04:44,320 permitirme elegir elementos de aquí y observe el interior de DOM inspector de Chrome. 1090 01:04:44,320 --> 01:04:48,840 Es, literalmente, cambiar de ida y vuelta cada 500 milisegundos. 1091 01:04:48,840 --> 01:04:55,660 Si vamos a nuestro amigo Nate, 1092 01:04:55,660 --> 01:05:00,020 si alguna vez se preguntó cómo esto funciona, idea similar, con un intervalo de tiempo, 1093 01:05:00,020 --> 01:05:04,810 pero Nate es en realidad hacer un uso muy eficaz del color en este caso particular aquí. 1094 01:05:04,810 --> 01:05:07,350 Entonces, ¿qué más podemos hacer realmente con esto? 1095 01:05:07,350 --> 01:05:09,990 Vamos a abrir otro ejemplo y probar algo 1096 01:05:09,990 --> 01:05:12,940 eso es programación aún más útil que hacer parpadear las cosas. 1097 01:05:12,940 --> 01:05:17,990 Déjame entrar en nuestro directorio formas hoy y entrar en form0. 1098 01:05:17,990 --> 01:05:20,820 Esta fue la forma más fea posible que yo pudiera llegar a, 1099 01:05:20,820 --> 01:05:23,290 y déjame mostrarte lo que parece en un navegador. 1100 01:05:23,290 --> 01:05:28,960 >> Déjame entrar en localhost / forms, y esto es form0. 1101 01:05:28,960 --> 01:05:33,400 Esta es una forma súper feo HTML que tiene unos campos de correo electrónico, la contraseña, 1102 01:05:33,400 --> 01:05:37,190 contraseña, y luego una casilla pequeña que aceptar algunos términos y condiciones. 1103 01:05:37,190 --> 01:05:41,350 El problema es si vuelvo a visitar esta forma y no quiero darte mi dirección de correo electrónico, 1104 01:05:41,350 --> 01:05:44,730 No quiero estar de acuerdo con los términos y condiciones tal vez, puede hacer clic en Registro 1105 01:05:44,730 --> 01:05:46,920 y me deja pasar de todos modos. 1106 01:05:46,920 --> 01:05:50,800 Esto sucede a someterse a un archivo PHP llamado estúpido dump.php. 1107 01:05:50,800 --> 01:05:58,420 Todo lo que hace es imprimir el contenido de $ _GET sólo para fines de diagnóstico. 1108 01:05:58,420 --> 01:06:01,580 Eso fue lo que fue presentado por el usuario en este momento. 1109 01:06:01,580 --> 01:06:05,010 Pero supongamos que en realidad desea validar la presentación del formulario de usuario. 1110 01:06:05,010 --> 01:06:06,530 Déjame ir a la versión 1. 1111 01:06:06,530 --> 01:06:11,420 Esto es form1.html. Se ve estéticamente tan malo, pero observe cómo de fantasía que es. 1112 01:06:11,420 --> 01:06:15,450 Si hago clic en Regístrese sin cooperar, me gritó. 1113 01:06:15,450 --> 01:06:17,320 "Usted debe proporcionar su dirección de correo electrónico." 1114 01:06:17,320 --> 01:06:21,670 Está bien. Así que voy a tratar eso. Así malan@harvard.edu. No necesito una contraseña. 1115 01:06:21,670 --> 01:06:25,100 Regístrate. "Usted debe proporcionar una contraseña." Está bien. 1116 01:06:25,100 --> 01:06:28,470 Así que voy a proporcionar una contraseña de carmesí. Regístrate. 1117 01:06:28,470 --> 01:06:32,300 "Las contraseñas no coinciden." Tengo que escribir ahora aquí en carmesí. 1118 01:06:32,300 --> 01:06:35,710 Por error, he comprobado eso. Regístrate. 1119 01:06:35,710 --> 01:06:39,860 "Usted debe aceptar los términos y condiciones." Está bien. Acepto allí. Regístrate. 1120 01:06:39,860 --> 01:06:43,700 Y ahora me muestra la salida de diagnóstico por allí. 1121 01:06:43,700 --> 01:06:45,630 >> Entonces, ¿qué ha pasado? 1122 01:06:45,630 --> 01:06:48,330 Hemos tenido esta capacidad de validar los envíos de formularios. 1123 01:06:48,330 --> 01:06:51,420 De hecho, si se hizo sumergirse en pset 7, hay una función disculpas 1124 01:06:51,420 --> 01:06:54,620 que hace que sea muy fácil para gritarle al usuario mediante un mensaje en la pantalla. 1125 01:06:54,620 --> 01:06:57,580 Estoy usando un mecanismo ligeramente diferente, la función de alerta, 1126 01:06:57,580 --> 01:07:03,690 que no es una función que está sonreído ya que hace que los mensajes de usuario muy feos. 1127 01:07:03,690 --> 01:07:05,710 Pero vamos a ver lo que estoy haciendo aquí. 1128 01:07:05,710 --> 01:07:09,620 Esto es form1.html, y note que tengo una sintaxis bastante familiar: 1129 01:07:09,620 --> 01:07:12,920 cuerpo de la etiqueta, etiqueta de la forma, atributo de acción, atributo método. 1130 01:07:12,920 --> 01:07:17,050 Pero nótese que he dado mi forma un identificador único para mayor comodidad. 1131 01:07:17,050 --> 01:07:19,190 Entonces tengo un campo de correo electrónico cuyo tipo es texto, 1132 01:07:19,190 --> 01:07:23,780 un campo de contraseña cuyo tipo es la contraseña, confirmación campo cuyo tipo es la contraseña, 1133 01:07:23,780 --> 01:07:28,070 y luego una casilla de verificación que se llama acuerdo de por aquí, es de tipo checkbox. 1134 01:07:28,070 --> 01:07:30,380 Y luego tengo un botón de envío. 1135 01:07:30,380 --> 01:07:33,050 Pero note en la parte superior lo más que tengo. 1136 01:07:33,050 --> 01:07:35,810 En primer lugar, hay otro uso de la etiqueta script. 1137 01:07:35,810 --> 01:07:40,520 Si tiene algún código JavaScript en otro archivo, al igual que con CSS se puede incluir. 1138 01:07:40,520 --> 01:07:44,530 Y lo hace con una fuente de secuencia de comandos, y después se da cuenta que estoy conectando al parecer 1139 01:07:44,530 --> 01:07:50,349 a googleapis.com a un camino muy largo, pero cuyo nombre termine en jquery.min 1140 01:07:50,349 --> 01:07:52,420 para mínimo. js. 1141 01:07:52,420 --> 01:07:55,969 jQuery es una biblioteca súper popular para JavaScript que sólo lo hace con JavaScript 1142 01:07:55,969 --> 01:07:58,230 tanto más fácil de usar de usar. 1143 01:07:58,230 --> 01:08:00,610 Ha convertido de hecho en un estándar de facto. 1144 01:08:00,610 --> 01:08:04,090 Así que a pesar de que lo que vas a ver no es puro JavaScript per se, 1145 01:08:04,090 --> 01:08:09,340 es una biblioteca de JavaScript en la parte superior al igual que la biblioteca CS50 es una capa 1146 01:08:09,340 --> 01:08:13,670 en la parte superior de código de bajo nivel C, la realidad es que casi todo el mundo a través de Internet que utiliza. 1147 01:08:13,670 --> 01:08:18,030 Así que no se trata de ruedas de entrenamiento. Esto es simplemente la mejor práctica en estos días. 1148 01:08:18,030 --> 01:08:22,830 Ahora note debajo de ese es mi etiqueta de script propio y darse cuenta de lo que he hecho aquí. 1149 01:08:22,830 --> 01:08:27,450 Resulta que jQuery hace algo un poco sofisticado. 1150 01:08:27,450 --> 01:08:29,660 JavaScript tiene signos de dólar, pero no tienen sentido. 1151 01:08:29,660 --> 01:08:32,870 >> Son como la letra A o B o C. 1152 01:08:32,870 --> 01:08:36,670 jQuery simplemente ha adoptado la convención o el tipo de reclamaron al hecho 1153 01:08:36,670 --> 01:08:40,280 que $ será su símbolo especial. 1154 01:08:40,280 --> 01:08:44,950 Así que tan pronto como se carga este archivo global JavaScript hasta aquí con la etiqueta script, 1155 01:08:44,950 --> 01:08:49,080 usted tiene acceso a una variable global especial que se llama $. 1156 01:08:49,080 --> 01:08:53,009 Es mejor conocido como jQuery, pero que no se ve tan sexy como $. 1157 01:08:53,009 --> 01:08:56,250 Pero $ no tiene ningún significado especial. En PHP que tenía un significado especial. 1158 01:08:56,250 --> 01:08:58,440 Había que tener en frente de una variable. 1159 01:08:58,440 --> 01:09:01,670 Esto es sólo una cosa sexy que asumió. 1160 01:09:01,670 --> 01:09:03,389 ¿Qué está pasando aquí? 1161 01:09:03,389 --> 01:09:08,830 Tenga en cuenta que estoy pasando a la función jQuery mi documento variable global 1162 01:09:08,830 --> 01:09:10,860 y luego te llamo. listo. 1163 01:09:10,860 --> 01:09:15,480 Lo que hace es esencialmente jQuery que te permite tomar algunas cosas de JavaScript vainilla 1164 01:09:15,480 --> 01:09:17,889 como el objeto de documento, el objeto ventana, 1165 01:09:17,889 --> 01:09:20,790 y si se le pasa a la función jQuery - 1166 01:09:20,790 --> 01:09:24,429 y de nuevo, para ser claro, esta es una función llamada jQuery - 1167 01:09:24,429 --> 01:09:28,240 lo que hace es que te vuelve a una versión especial del documento 1168 01:09:28,240 --> 01:09:30,700 que tiene más funcionalidad asociada con él. 1169 01:09:30,700 --> 01:09:34,760 Así que en JavaScript prima no hay ninguna función listo, 1170 01:09:34,760 --> 01:09:37,810 pero si se pasa el documento a la función jQuery en primer lugar, 1171 01:09:37,810 --> 01:09:40,960 devuelve a usted una versión especial del objeto de documento 1172 01:09:40,960 --> 01:09:43,030 que tiene más características de lujo. 1173 01:09:43,030 --> 01:09:48,230 Y por eso la gente le gusta. Simplemente hace las cosas más fáciles de hacer, ya que estamos a punto de ver. 1174 01:09:48,230 --> 01:09:49,820 Entonces, ¿qué significa esta línea de código significa? 1175 01:09:49,820 --> 01:09:52,690 Esta línea de código aquí significa que el documento está listo - 1176 01:09:52,690 --> 01:09:56,830 en otras palabras, una vez que el navegador se realiza la lectura de este archivo superior a la inferior - 1177 01:09:56,830 --> 01:09:59,200 seguir adelante y ejecutar la siguiente función. 1178 01:09:59,200 --> 01:10:03,540 Lo que es realmente interesante en JavaScript - PHP tiene y esto también - 1179 01:10:03,540 --> 01:10:05,450 es funciones anónimas. 1180 01:10:05,450 --> 01:10:10,560 En JavaScript se pueden declarar funciones que no tienen nombre pero tienen un cuerpo. 1181 01:10:10,560 --> 01:10:12,570 Observe lo que está pasando aquí. 1182 01:10:12,570 --> 01:10:16,220 >> Esta es una función llamada lista, y sólo significa hacer lo siguiente 1183 01:10:16,220 --> 01:10:20,220 cuando la página web todo está listo, cuando todo ha sido leído desde el servidor. 1184 01:10:20,220 --> 01:10:23,090 ¿Qué quieres hacer? Quiero ejecutar un bloque de código. 1185 01:10:23,090 --> 01:10:27,120 Tenga en cuenta que nosotros no queremos ejecutar este código enseguida. 1186 01:10:27,120 --> 01:10:34,350 Si se omite esto, esto significaría iniciar inmediatamente la ejecución de estas líneas de código. 1187 01:10:34,350 --> 01:10:39,040 Pero el hecho de que yo estoy diciendo no, no, no, terminar con esto en una función anónima como este 1188 01:10:39,040 --> 01:10:43,000 significa que no se ejecutará sin embargo, llamar con el tiempo. 1189 01:10:43,000 --> 01:10:45,430 Lo vimos hace un momento, en nuestro ejemplo anterior forma. 1190 01:10:45,430 --> 01:10:49,990 ¿Qué función tenía que llamamos el tiempo, a 500 milésimas de segundo más tarde? Blink. 1191 01:10:49,990 --> 01:10:51,480 Así que la idea misma. 1192 01:10:51,480 --> 01:10:53,950 Una vez más, incluso si esto le parece un poco raro, simplemente tome por el momento en la fe 1193 01:10:53,950 --> 01:10:57,060 que para declarar una función anónima que se llama el tiempo, 1194 01:10:57,060 --> 01:11:01,720 sólo tiene que escribir function () { 1195 01:11:01,720 --> 01:11:05,380 Entonces, ¿qué código vamos a ejecutar con el tiempo? El siguiente. 1196 01:11:05,380 --> 01:11:10,460 Esto también se ve un poco nuevo, pero esto significa que esta es la función jQuery, 1197 01:11:10,460 --> 01:11:13,430 y esto ahora es un atajo. 1198 01:11:13,430 --> 01:11:18,830 Este fragmento de código HTML en la parte inferior de la pantalla, por supuesto, tiene una representación de árbol. 1199 01:11:18,830 --> 01:11:21,730 No es esto. Esta página es más interesante que este ejemplo Hello World. 1200 01:11:21,730 --> 01:11:25,210 Pero hay un árbol que corresponde a este HTML. 1201 01:11:25,210 --> 01:11:28,910 Sería un dolor en el cuello a tener que implementar algún tipo de función recursiva 1202 01:11:28,910 --> 01:11:34,380 para iniciar en el nodo raíz y luego encontrar el nodo cuyo identificador es el registro. 1203 01:11:34,380 --> 01:11:38,340 Entonces, ¿qué jQuery hace muy fácil para nosotros es literalmente esto. 1204 01:11:38,340 --> 01:11:43,000 Vaya por delante y me lo div o la forma que sea, cualquier elemento HTML 1205 01:11:43,000 --> 01:11:45,820 tiene un ID de registro. 1206 01:11:45,820 --> 01:11:52,440 Esto es equivalente a document.getElementById ('registro'). 1207 01:11:52,440 --> 01:11:54,170 >> ¿Por qué la gente como jQuery? 1208 01:11:54,170 --> 01:12:00,110 Debido a que es más corta de escribir. Pero eso es todo lo que es. Es la misma idea. 1209 01:12:00,110 --> 01:12:02,630 Póngame con el tag cuyo identificador es el registro. 1210 01:12:02,630 --> 01:12:06,300 Y cuando esa etiqueta, que pasa a ser una forma, se presenta, 1211 01:12:06,300 --> 01:12:08,300 seguir adelante y ejecutar este código. 1212 01:12:08,300 --> 01:12:11,320 Así que echemos un vistazo ahora a cómo lo estamos haciendo validación de formularios. 1213 01:12:11,320 --> 01:12:15,950 La sintaxis es ciertamente críptico al principio, pero ¿qué está pasando? 1214 01:12:15,950 --> 01:12:21,050 Si esta línea de código es cierto, voy a gritar que el usuario proporcione su dirección de correo electrónico. 1215 01:12:21,050 --> 01:12:22,970 Entonces, ¿qué es esta línea de código? 1216 01:12:22,970 --> 01:12:25,560 $ Significa jQuery. Ahora note esto. 1217 01:12:25,560 --> 01:12:27,920 Esta es una especie de CSS. 1218 01:12:27,920 --> 01:12:33,370 Si has buceado en CSS, sin embargo, usted sabrá que esto significa que el elemento cuyo ID es la inscripción. 1219 01:12:33,370 --> 01:12:39,840 El espacio significa encontrar a un niño o un descendiente de registro cuyo nombre es el de entrada. 1220 01:12:39,840 --> 01:12:42,970 Y luego esta cosa entre corchetes es un filtro poco. 1221 01:12:42,970 --> 01:12:47,010 Y aunque esto parece críptica, esto sólo significa ir al formulario cuyo identificador es el registro, 1222 01:12:47,010 --> 01:12:51,230 ir al interior de ese elemento de entrada cuyo nombre es el correo electrónico, 1223 01:12:51,230 --> 01:12:55,440 y luego obtener su valor, cualquiera que sea su valor pasa a ser - 1224 01:12:55,440 --> 01:12:59,670 asdf si eso es todo lo escrito o malan@harvard.edu si eso es lo que he escrito. 1225 01:12:59,670 --> 01:13:05,250 Así que si el valor del campo email del formulario == nada, grita al usuario. 1226 01:13:05,250 --> 01:13:09,700 Porque si el valor del campo de contraseña == nada, grita al usuario. 1227 01:13:09,700 --> 01:13:19,520 >> Else si el valor del campo de la contraseña no es igual al valor del campo de confirmación 1228 01:13:19,520 --> 01:13:22,850 que era el elemento otra forma, gritarle al usuario. 1229 01:13:22,850 --> 01:13:25,680 Y por último - y esta también tiene un poco de nueva sintaxis propia, 1230 01:13:25,680 --> 01:13:29,270 pero una vez que lo has visto, es al menos un poco más razonable - 1231 01:13:29,270 --> 01:13:34,060 else if el formulario cuyo ID es la inscripción tiene un elemento de entrada cuyo nombre es un acuerdo 1232 01:13:34,060 --> 01:13:39,720 y se comprueba que, adelante y gritar en el usuario. 1233 01:13:39,720 --> 01:13:42,520 Así que estoy totalmente de admitir que esto es completamente abrumador a primera vista. 1234 01:13:42,520 --> 01:13:46,530 Se trata de una gran cantidad de nueva sintaxis. Pero todos jQuery sigue este tipo de patrones. 1235 01:13:46,530 --> 01:13:49,880 Y honestamente, yo ni siquiera sabía que esto existía hasta hace unos minutos. 1236 01:13:49,880 --> 01:13:53,640 Busqué en Google "¿Cómo comprobar si una casilla está marcada en jQuery?" 1237 01:13:53,640 --> 01:13:55,680 y esta es la sintaxis, porque hay diferentes maneras de hacerlo 1238 01:13:55,680 --> 01:13:58,010 con código real bruto JavaScript. 1239 01:13:58,010 --> 01:14:01,030 Así como la primera página del Boletín de problemas 7 enfatiza, 1240 01:14:01,030 --> 01:14:04,500 pset 7 es mucho más que un ejercicio en sí mismo bootstrapping 1241 01:14:04,500 --> 01:14:08,650 en los que proporcionamos, con suerte, un marco conceptual para abordar el conjunto de procesadores. 1242 01:14:08,650 --> 01:14:12,280 >> Pero, como suele ser el caso con el diseño web, le toca a usted realmente a hurgar, 1243 01:14:12,280 --> 01:14:16,680 incorporar fragmentos de código y ejemplos de la Web siempre y cuando se les cite 1244 01:14:16,680 --> 01:14:17,960 por los términos en que la primera hoja, 1245 01:14:17,960 --> 01:14:21,460 y darse cuenta de que el aprendizaje de HTML, CSS, JavaScript e incluso SQL 1246 01:14:21,460 --> 01:14:26,020 está realmente destinado a ser este ejercicio en casa a medida que empezamos a tomar estas ruedas de entrenamiento apagado. 1247 01:14:26,020 --> 01:14:29,150 Y darse cuenta también que hay muchas cosas más que puedes hacer con un navegador. 1248 01:14:29,150 --> 01:14:33,790 En el interior de la mayoría de estos elementos, hay otras cosas llamados controladores de eventos. 1249 01:14:33,790 --> 01:14:37,140 Y a pesar de que acabamos de ver en los llamados onsubmit y onReady, 1250 01:14:37,140 --> 01:14:40,310 usted puede hacer cosas como onkeydown, onkeyup, 1251 01:14:40,310 --> 01:14:43,410 como cuando el usuario toca una tecla, se puede escuchar por eso y tecla de arriba. 1252 01:14:43,410 --> 01:14:45,940 Gmail tiene atajos de teclado. 1253 01:14:45,940 --> 01:14:49,490 ¿Cómo hace Google para poner en práctica métodos abreviados de teclado como C para componer? 1254 01:14:49,490 --> 01:14:54,120 Escuchan para eventos, como se les llama, como onkeypress o onkeyup y onkeydown. 1255 01:14:54,120 --> 01:14:56,360 Si alguna vez ha rondado el ratón sobre alguna opción de menú 1256 01:14:56,360 --> 01:15:00,180 y, de repente voila, aparece un menú o la cambia de color gráfico, 1257 01:15:00,180 --> 01:15:01,920 ¿cómo se hace eso? 1258 01:15:01,920 --> 01:15:06,940 En lugar de escuchar onReady o onsubmit, escuchas o onmouseout onmouseover para. 1259 01:15:06,940 --> 01:15:10,920 >> Así que en resumen, con estos conceptos básicos muy sencillos que hemos empezado a rascar la superficie de hoy 1260 01:15:10,920 --> 01:15:13,940 y vamos a bucear en ellas para el miércoles, que tiene, cada vez más, 1261 01:15:13,940 --> 01:15:17,530 facultad de aplicar el tipo de cosas que usted ya conoce. 1262 01:15:17,530 --> 01:15:21,620 Así que vamos a terminar aquí, y vamos a continuar este miércoles. 1263 01:15:22,690 --> 01:15:24,320 >> [CS50.TV]